家譜樹(shù)管理系統(tǒng)設(shè)計(jì)_第1頁(yè)
家譜樹(shù)管理系統(tǒng)設(shè)計(jì)_第2頁(yè)
家譜樹(shù)管理系統(tǒng)設(shè)計(jì)_第3頁(yè)
家譜樹(shù)管理系統(tǒng)設(shè)計(jì)_第4頁(yè)
家譜樹(shù)管理系統(tǒng)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù) 據(jù) 結(jié) 構(gòu) 課程設(shè)計(jì)報(bào)告家譜樹(shù)管理系統(tǒng)家譜樹(shù)管理系統(tǒng)學(xué)生姓名: 張 朝 政 學(xué) 號(hào): 0807020218 年級(jí)專(zhuān)業(yè): 08 級(jí)信息與計(jì)算科學(xué)班 級(jí): 信計(jì)二班 指導(dǎo)老師: 李英龍老師 學(xué) 院:數(shù)學(xué)與計(jì)算科學(xué)學(xué)院 同組成員:夏 鑫 楊貴生 左 斌起止時(shí)間:2021.6.212021.6.27目目 錄錄1 1 前言前言.3 32 2 課程設(shè)計(jì)的相關(guān)說(shuō)明課程設(shè)計(jì)的相關(guān)說(shuō)明.3 32.1 課程設(shè)計(jì)的要求.32.2 課程設(shè)計(jì)的需求分析.32.3 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境.43 3 家譜樹(shù)管理系統(tǒng)的概要分析家譜樹(shù)管理系統(tǒng)的概要分析.4 44 4 家譜樹(shù)管理系統(tǒng)的詳細(xì)分析家譜樹(shù)管理系統(tǒng)的詳細(xì)分析.8 84.

2、1 函數(shù)調(diào)用的關(guān)系圖.84.2 系統(tǒng)運(yùn)行主界面 .94.3 各主要功能的函數(shù)實(shí)現(xiàn).105 5 系統(tǒng)各功能的調(diào)試分析系統(tǒng)各功能的調(diào)試分析附有運(yùn)行截圖附有運(yùn)行截圖.19195.1 文件操作模塊.195.11 新建家譜.205.12 翻開(kāi)家譜.205.13 保存家譜.205.2 家譜操作模塊 .215.21 刪除某人 .215.22 增加孩子 .225.23 兩人關(guān)系與某代信息 .225.24 姓名查找 .225.25 個(gè)人修改 .235.3 調(diào)試小結(jié) .236 6 心得體會(huì)心得體會(huì).24246.1.個(gè)人感想及缺乏之處 .247 7 參考文獻(xiàn)參考文獻(xiàn).2525附錄附錄.2626 家譜樹(shù)管理系統(tǒng)家譜樹(shù)

3、管理系統(tǒng)張 朝 政湖南科技大學(xué) 信息與計(jì)算科學(xué)專(zhuān)業(yè) 0807020218前前 言言本次課程設(shè)計(jì)任務(wù)是通過(guò)編寫(xiě)一個(gè)簡(jiǎn)單的?家譜樹(shù)管理系統(tǒng)?,進(jìn)一步學(xué)習(xí)用 MFC 開(kāi)發(fā)簡(jiǎn)單的管理系統(tǒng)主要開(kāi)發(fā)工具,更進(jìn)一步了解系統(tǒng)開(kāi)發(fā)的需求分析、層次設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)分析、編碼測(cè)試、模塊組裝與整體調(diào)試的全過(guò)程,加深對(duì)樹(shù)狀數(shù)據(jù)結(jié)構(gòu)的理解與 MFC 環(huán)境的使用,以便逐步熟悉大型程序設(shè)計(jì)的方法,養(yǎng)成良好的編程習(xí)慣。本系統(tǒng)主要完成對(duì)家譜的相關(guān)操作和家譜人員信息的管理,包括翻開(kāi)家譜、新建家譜、保存家譜和家譜人員的姓名查找、生日查找、某代信息查找、增加孩子、兩人關(guān)系、信息修改、信息刪除等。系統(tǒng)的核心是利用對(duì)話(huà)框的連接和文本處理來(lái)存

4、儲(chǔ)和修改家譜管理系統(tǒng)的信息聯(lián)系,其中的每一個(gè)動(dòng)作都可能影響到其它的功能。2 2 課程設(shè)計(jì)的相關(guān)說(shuō)明課程設(shè)計(jì)的相關(guān)說(shuō)明 2.12.1 課程設(shè)計(jì)的要求課程設(shè)計(jì)的要求題目:家譜樹(shù)管理系統(tǒng)1).建立至少 30 個(gè)成員的數(shù)據(jù),以較為直觀的方式顯示結(jié)果,并提供文稿形式以便檢查。2).對(duì)界面的要求是:有合理的提示,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。 2.22.2 課程設(shè)計(jì)的需求分析課程設(shè)計(jì)的需求分析 1). 輸入文件以存放最初家譜中各成員的信息。 成員的信息中均應(yīng)包含以下內(nèi)容:姓名、出生日期、婚否、地址、健在否、死亡日期假設(shè)其已死亡2). 實(shí)現(xiàn)數(shù)據(jù)的存盤(pán)和讀盤(pán)。3). 以圖形方式顯示家

5、譜。(利用樹(shù)形控件)4). 顯示第 n 代所有人的信息。5). 按照姓名查詢(xún),輸出成員信息包括其本人、父親、孩子的信息 。6). 按照出生日期查詢(xún)成員名單。7). 輸入兩人姓名,確定其關(guān)系。8). 某成員添加孩子。9). 刪除某成員假設(shè)其還有后代,那么一并刪除 。10).修改某成員信息。11).按出生日期對(duì)家譜中所有人排序。2.32.3 課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境課程設(shè)計(jì)的實(shí)驗(yàn)環(huán)境開(kāi)發(fā)工具: Visual C+運(yùn)行環(huán)境:Windows 9x、Windows NT/2000、Windows XP 3 3 家譜樹(shù)管理系統(tǒng)的概要分析家譜樹(shù)管理系統(tǒng)的概要分析1 1、抽象數(shù)據(jù)類(lèi)型兄弟孩子樹(shù)的定義如下:、抽象數(shù)據(jù)

6、類(lèi)型兄弟孩子樹(shù)的定義如下:ADT CSNode數(shù)據(jù)對(duì)象: person 是兄弟孩子樹(shù)中的每一個(gè)節(jié)點(diǎn),T 是整個(gè)樹(shù)的統(tǒng)一體數(shù)據(jù)關(guān)系: R1=person,person|person,person表示 person1 iii1 iii和 person之間有血緣關(guān)系1iii根本操作:CSNode *CreatTree(fstream &outfile);初始條件:已經(jīng)翻開(kāi)了文本文件操作結(jié)果:創(chuàng)立一個(gè)兄弟孩子樹(shù) T,并把從文件中的數(shù)據(jù)送到樹(shù)中,關(guān)閉文件。void CreatParent_step(CSNode *parent);初始條件:兄弟孩子樹(shù) T 已經(jīng)存在操作結(jié)果:對(duì)所有的孩子節(jié)點(diǎn)添加指

7、向父親的指針void InOrderTraverse(CSNode *T);初始條件:兄弟孩子樹(shù) T 已經(jīng)存在操作結(jié)果:對(duì) T 進(jìn)行中序遍歷。bool Today_Brithday(CSNode *T);初始條件:兄弟孩子樹(shù) T 已經(jīng)存在操作結(jié)果:根據(jù)計(jì)算機(jī)系統(tǒng)的時(shí)間判斷幾天是否有人過(guò)生日,并顯示他們的名字。bool (int n,CSNode *T,LinkQueue &Q); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在,隊(duì)列 Q 也已經(jīng)存在 操作結(jié)果:用隊(duì)列 Q 返回第 N 代人的所有信息void Link_Info(LinkQueue Q); 初始條件:隊(duì)列 Q 中是第 N 代人的所有信

8、息 操作結(jié)果:顯示隊(duì)列中所有人的信息。CSNode *DetectMember_Name(CSNode *T,char name); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:根據(jù)輸入的姓名進(jìn)行查找,如找到那么返回該節(jié)點(diǎn)的指針。CSNode *DetectMember_BornDate(CSNode *T,Date date); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:根據(jù)輸入的出生日期進(jìn)行查找,如找到那么返回該節(jié)點(diǎn)的指針。void OutputOneInfo(CSNode *T); 初始條件:采集到一個(gè)節(jié)點(diǎn) T 操作結(jié)果:顯示這一個(gè)節(jié)點(diǎn)的所有信息。void Output_Name_

9、Relation(CSNode *T); 初始條件:采集到一個(gè)節(jié)點(diǎn) T 操作結(jié)果:顯示這一個(gè)節(jié)點(diǎn)的父親和孩子的所有信息。void Delete_Member(CSNode *T,char name); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:根據(jù)輸入的姓名進(jìn)行查找,如找到那么刪除該節(jié)點(diǎn)和他所有的孩子節(jié)點(diǎn)。void Edit_Member_Info(CSNode *T,char name); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:根據(jù)輸入的姓名進(jìn)行查找,如找到那么根據(jù)用戶(hù)要求修改相應(yīng)的信息。bool Add_New_Child(CSNode *T); 初始條件:兄弟孩子樹(shù) T 已經(jīng)

10、存在 操作結(jié)果:根據(jù)輸入的姓名進(jìn)行查找,如找到那么在他的孩子樹(shù)中添加新的孩子節(jié)點(diǎn)。void InOrderInfile(CSNode *T,fstream &infile); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在,且已經(jīng)翻開(kāi)了文本文 操作結(jié)果:把現(xiàn)在的數(shù)據(jù)讀入文件中,關(guān)閉文件。bool Generation(CSNode *T,CSNode *child); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:判斷 child 是否是 T 的后代,如果是返回 true,否那么返回 false。Void Output_Two_Member_Realtionship(CSNode*T,char n

11、ame1,char name2); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:根據(jù)已經(jīng)輸入的兩個(gè)姓名進(jìn)行查找和判斷,確定他們的關(guān)系。void InOrderIn(CSNode *T,CSNode S,int &num); 初始條件:兄弟孩子樹(shù) T 已經(jīng)存在 操作結(jié)果:對(duì) T 進(jìn)行中序遍歷,并且把每一個(gè)節(jié)點(diǎn)信息送到數(shù)組 S 中,num 為 S中成員個(gè)數(shù)。void LineChars(CSNode S,int num); 初始條件:節(jié)點(diǎn)數(shù)組 S 已經(jīng)存在操作結(jié)果:對(duì)數(shù)組的節(jié)點(diǎn)信息按照出生日期進(jìn)行排序,采用的是基數(shù)排序ADT CSNode2 2、抽象數(shù)據(jù)類(lèi)型隊(duì)列的定義如下:、抽象數(shù)據(jù)類(lèi)型

12、隊(duì)列的定義如下:ADT LinkQueue數(shù)據(jù)對(duì)象:D=ei| i=1,2,3,n;n0;eiLinkQueue 數(shù)據(jù)關(guān)系:R1=ei-1, ei|ei-1,ei表示 ei-1 和 ei 之間有先后順序關(guān)系根本操作:bool InitQueue(LinkQueue &Q); 操作結(jié)果:創(chuàng)立一個(gè)空的隊(duì)列 Q。bool DestroyQueue(LinkQueue &Q); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:銷(xiāo)毀隊(duì)列 Q,Q 不再存在。bool EnQueue(LinkQueue &Q,CSNode e); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:插入元素 e 為 Q 的新的

13、隊(duì)尾元素。bool ClearQueue(LinkQueue &Q); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:清空隊(duì)列 Q。bool QueueEmpty(LinkQueue Q); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:假設(shè)隊(duì)列為空,那么返回 true,否那么返回 false。bool DeQueue(LinkQueue &Q,CSNode &e); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:刪除 Q 的隊(duì)頭元素,并用 e 返回其值,并返回 QueueLength(LinkQueue Q); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:返回隊(duì)列 Q 的長(zhǎng)度。bool

14、GetHead(LinkQueue Q,CSNode &e); 初始條件:隊(duì)列 Q 存在 操作結(jié)果:用 e 返回隊(duì)首元素,并返回 true。 ADT LinkQueue3 3、主程序、主程序Void main() 翻開(kāi)文本文件; Do接受命令對(duì)兄弟孩子樹(shù)進(jìn)行相關(guān)的操作的選項(xiàng) ;處理命令對(duì)兄弟孩子樹(shù)進(jìn)行相關(guān)的操作 ;while(“命令!=“退出);4 4 家譜樹(shù)管理系統(tǒng)的詳細(xì)設(shè)計(jì)家譜樹(shù)管理系統(tǒng)的詳細(xì)設(shè)計(jì)4.14.1 函數(shù)調(diào)用的關(guān)系圖函數(shù)調(diào)用的關(guān)系圖 MainOutput_N_MembersDetectMember_Name系統(tǒng)進(jìn)入DetectMember_BornDateName_Rel

15、ationDelete_MemberEdit_Member_InfoAdd_New_ChildInOrderInfileOutput_Two_Member_RealtionshipToday_BrithdayDetect4.24.2 系統(tǒng)系統(tǒng)運(yùn)行主界面運(yùn)行主界面 圖系統(tǒng)運(yùn)行主界面4.34.3 各主要功能函數(shù)的實(shí)現(xiàn)各主要功能函數(shù)的實(shí)現(xiàn)說(shuō)明:由于系統(tǒng)的功能函數(shù)較多且代碼量大,故只選取了翻開(kāi)家譜、家譜保存、兩人關(guān)系、增加孩子等為例。1 1 翻開(kāi)家譜函數(shù)的實(shí)現(xiàn)翻開(kāi)家譜函數(shù)的實(shí)現(xiàn)/ voidvoid CFamilytreeDlg:OnFileOpen()CFamilytreeDlg:OnFileOpen

16、()函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn)void CFamilytreeDlg:OnFileOpen() / TODO: Add your control notification handler code hereif(IsFamilytreeModified)/如家譜被修改,給出保存提示SaveTip();IsFamilytreeModified=false;CFileOpenAndSaveDlg dlg(true);/翻開(kāi)文件對(duì)話(huà)框if(dlg.DoModal()=IDCANCEL)return;UpdateData(false);filePath,)=0)AfxMessageBox(文件名不能為空!)

17、;return;int result;result=operFamilytree.CreateFamilytree(dlg.m_filePath);/根據(jù)用戶(hù)指定的文件名建立家譜if(result!=OK) /建立家譜時(shí)有錯(cuò)誤switch(result)case NOT_ENOUGH_MEMORY:/內(nèi)存缺乏AfxMessageBox(內(nèi)存缺乏!);break;case READ_FILE_ERROR:/讀文件錯(cuò)誤AfxMessageBox(文件無(wú)法翻開(kāi)!);break;case FILE_DATA_NOT_PRACTICAL:/文件數(shù)據(jù)不合實(shí)際AfxMessageBox(家譜日期數(shù)據(jù)不合實(shí)際

18、!);break;case FILE_DATA_ERROR:/文件數(shù)據(jù)錯(cuò)誤(一個(gè)人的父親的名字在家譜中從未出現(xiàn))AfxMessageBox(家譜成員關(guān)系有誤!);break;case PEDIGREE_EMPTY: /家譜沒(méi)有根結(jié)點(diǎn)AfxMessageBox(家譜沒(méi)有根結(jié)點(diǎn)!);break;return;strcpy(savepath,dlg.m_filePath);/修改保存文件路徑為當(dāng)前翻開(kāi)文件路徑RefreshTree();/刷新樹(shù)型控件RefreshList();/刷新列表控件BirthdayTip();/提示今天是家譜中哪些人的生日 GetDlgItem(IDC_ADD)-Enabl

19、eWindow(TRUE); /家譜控制按鈕可用 GetDlgItem(IDC_DELETE)-EnableWindow(TRUE); GetDlgItem(IDC_MODIFY)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_IGENERATION_INFO)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_SORT)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_RELATIONS)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGRE

20、E_PERSONAL_INFO)-EnableWindow(TRUE); GetDlgItem(IDC_BIRTHDAY)-EnableWindow(TRUE);2 2、家譜保存函數(shù)的實(shí)現(xiàn)、家譜保存函數(shù)的實(shí)現(xiàn)/ voidvoid CFamilytreeDlg:OnFileSave()CFamilytreeDlg:OnFileSave()函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn)void CFamilytreeDlg:OnFileSave() / TODO: Add your control notification handler code hereif(operFamilytree.GetRoot()=0)ret

21、urn;int saveResult;saveResult=operFamilytree.SaveFamilytree(savepath);/保存while(saveResult=WRITE_FILE_ERROR)AfxMessageBox(CString(找不到文件 )+CString(savepath)+CString(該文件可能已被刪除.);CFileOpenAndSaveDlg dlg(false);/保存文件對(duì)話(huà)框if(dlg.DoModal()=IDCANCEL)return;UpdateData(false);if(strcmp(dlg.m_filePath,)=0)AfxMes

22、sageBox(文件名不能為空!);return;strcpy(savepath,dlg.m_filePath);saveResult=operFamilytree.SaveFamilytree(savepath);/保存IsFamilytreeModified=false;3、兩人關(guān)系函數(shù)的實(shí)現(xiàn)、兩人關(guān)系函數(shù)的實(shí)現(xiàn)/ void CFamilytreeDlg:OnPedigreeRelations()函數(shù)的實(shí)現(xiàn)函數(shù)的實(shí)現(xiàn)void CFamilytreeDlg:OnPedigreeRelations() / TODO: Add your control notification handler

23、code hereCRelationsDlg dlg;if(dlg.DoModal()=IDCANCEL)return;UpdateData(FALSE);int pos1,pos2;Person oneself=0;char name1MAX_CHARNUM,name2MAX_CHARNUM;strcpy(name1,dlg.m_firstname);operFamilytree.Find(operFamilytree.GetRoot(),oneself,name1);if(oneself)pos1=operFamilytree.InGenerationPos(oneself);elseAf

24、xMessageBox(本家譜中找不到+CString(name1)+!);return;Person p,q;CString generation;generation+=;generation+=在家譜中的位置: ;for(q=oneself,p=q-parent;p!=0;p=p-parent)generation+=;generation+= -;q=p;generation+=;generation+=n; oneself=0;strcpy(name2,dlg.m_secondname);operFamil

25、ytree.Find(operFamilytree.GetRoot(),oneself,name2);if(oneself)pos2=operFamilytree.InGenerationPos(oneself);elseAfxMessageBox(本家譜中找不到+CString(name2)+!);return;generation+=;generation+=在家譜中的位置: ;for(q=oneself,p=q-parent;p!=0;p=p-parent)generation+=;generation+= - ;q=p;gener

26、ation+=;generation+=nn;CString cmpResult;if(pos1pos2)cmpResult.Format(%s 在第%d 代,%s 在第%d 代,%s 是%s 的晚輩.,name1,pos1,name2,pos2,name1,name2);else if(pos1parent=0;addnode-child=0;addnode-sibling=0;/把有關(guān)結(jié)點(diǎn)信息參加到結(jié)點(diǎn)中去strcpy(,dlg.m_name);strcpy(addnode-info.addr,dlg.m_addr);thday_ye

27、ar;addnode-info.birthday.month=dlg.m_birthday_month;addnode-info.birthday.day=dlg.m_birthday_day;addnode-info.marry=dlg.m_marry;addnode-info.live=dlg.m_live;/假設(shè)此人已過(guò)世,那么還應(yīng)有死亡日期if(!dlg.m_live)thday_year;addnode-info.deathday.month=dlg.m_deathday_month;addnode-info.deathday.day=dlg.m_deathday_day;Perso

28、n oneself=0;operFamilytree.Find(operFamilytree.GetRoot(),oneself,); /查找家譜中有沒(méi)有此人if(oneself!=0)AfxMessageBox(家譜中已有此人!);delete addnode;return;Person parent=0;char parentnameMAX_CHARNUM;strcpy(parentname,dlg.m_parentname);if(strcmp(parentname,-1)=0)/試圖參加一個(gè)新的根結(jié)點(diǎn)時(shí)給出警告int reply;reply=:Mess

29、ageBox(this-m_hWnd,確實(shí)要置此結(jié)點(diǎn)為根結(jié)點(diǎn)嗎?,警告,MB_YESNO|MB_ICONWARNING);if(reply=IDNO)return;else/參加的結(jié)點(diǎn)不是根結(jié)點(diǎn)operFamilytree.Find(operFamilytree.GetRoot(),parent,parentname);/在家譜中找addnode 的父結(jié)點(diǎn)if(parent=0)AfxMessageBox(父親結(jié)點(diǎn)沒(méi)找到!);delete addnode;return;/日期合法性檢查if(!operFamilytree.IsDateValid(addnode-info.birthday)Af

30、xMessageBox(個(gè)人信息中的出生日期不合實(shí)際!);delete addnode;return;/比擬孩子結(jié)點(diǎn)與其父親結(jié)點(diǎn)的出生日期if(strcmp(parentname,-1)!=0)/參加的結(jié)點(diǎn)不是根結(jié)點(diǎn) if(operFamilytree.CompareDate(addnode-info.birthday,parent-info.birthday)info.birthday,parent-info.birthday)=0)AfxMessageBox(所參加孩子的出生日期與其父親的出生日期相等,不合實(shí)際!);delete addnode;return;if(!addnode-inf

31、o.live)/查看死亡日期的合法性if(!operFamilytree.IsDateValid(addnode-info.deathday)AfxMessageBox(個(gè)人信息中的死亡日期不合實(shí)際!);delete addnode;return; if(operFamilytree.CompareDate(addnode-info.birthday,addnode-info.deathday)0)AfxMessageBox(此人出生日期不可能比其死亡日期早!);delete addnode;return;operFamilytree.Add(parent,addnode);/找到,把 add

32、node 參加家譜中HTREEITEM hParentItem=0,hRootItem;hRootItem=m_peTree.GetRootItem();/得到樹(shù)的根結(jié)點(diǎn)if(strcmp(parentname,-1)!=0)/參加的結(jié)點(diǎn)不是根結(jié)點(diǎn)FindInTree(hRootItem,hParentItem,parentname); /在樹(shù)中找到要參加結(jié)點(diǎn) addnode 的父結(jié)點(diǎn) parentnameAddToTree(hParentItem,addnode);/把此結(jié)點(diǎn)參加到樹(shù)中RefreshTree();/刷新該樹(shù)IsFamilytreeModified=true;/置家譜修改標(biāo)記為

33、真5 5 系統(tǒng)各功能的調(diào)試分析系統(tǒng)各功能的調(diào)試分析附有運(yùn)行截圖附有運(yùn)行截圖5.15.1 文件操作模塊文件操作模塊 1、新建家譜 輸入根結(jié)點(diǎn)的相關(guān)信息注:其中父親一欄填-1-1 ,再依次輸入其他的結(jié)點(diǎn)信息。 圖一 添加信息界面 2、翻開(kāi)家譜 輸入想要翻開(kāi)家譜的文件名如 zhang 等 3、保存家譜 輸入想要翻開(kāi)家譜的文件名如 chao zheng 等5.25.2 家譜控制模塊家譜控制模塊 1、刪除某人 刪除該節(jié)點(diǎn)的相關(guān)信息如:刪除張四 2、增加孩子 為該節(jié)點(diǎn)添加孩子結(jié)點(diǎn)如:為張六添加孩子張章 3、 兩人關(guān)系 比擬兩人之間的關(guān)系如張三與張四 圖 關(guān)系比擬對(duì)話(huà)框 圖 結(jié)果輸出對(duì)話(huà)框4、 某代信息 輸

34、出第 i 代所有人的信息如 i=2 圖 某代信息查詢(xún)對(duì)話(huà)框 圖 某代信息輸出對(duì)話(huà)框5、 姓名查找 給出某個(gè)人的姓名,查詢(xún)其相關(guān)信息如張三 圖 查詢(xún)信息輸入框 圖 查詢(xún)信息輸出框6、 個(gè)人修改 給出要修改人的姓名如先在樹(shù)形結(jié)構(gòu)中點(diǎn)擊張四,在填寫(xiě)下面對(duì)話(huà)框,即把張四李四 圖 個(gè)人信息修改對(duì)話(huà)框 圖 修改后的信息輸出5.35.3 調(diào)試小結(jié):調(diào)試小結(jié):1、 家譜系統(tǒng)的編程過(guò)程還是比擬復(fù)雜,有些代碼不會(huì),只能參照網(wǎng)上的有關(guān)代碼來(lái)做,家譜樹(shù)的儲(chǔ)存結(jié)構(gòu)是兄弟孩子樹(shù)與二叉樹(shù)有一些區(qū)別,所以調(diào)試的時(shí)候還是比擬困難的。2、這次程序因?yàn)槭顷P(guān)于樹(shù)的操作,遞歸的思想用的比擬多。3、程序當(dāng)中除了用到樹(shù)的相關(guān)操作外,還運(yùn)用

35、了隊(duì)列來(lái)進(jìn)行樹(shù)的遍歷等相關(guān)操作。4、在時(shí)間和空間復(fù)雜度上,都進(jìn)行了有效的控制。5、該系統(tǒng)的平安效果較好,能自動(dòng)區(qū)分出錯(cuò)誤的輸入信息,并給出警告或提示。6、該系統(tǒng)由于采用MFC開(kāi)發(fā),所以視面效果較好,且結(jié)果易懂、直觀。經(jīng)過(guò)對(duì)家譜樹(shù)管理系統(tǒng)的測(cè)試,基于書(shū)寫(xiě)的關(guān)系,只選取了局部功能的測(cè)試,如上寫(xiě)出。經(jīng)過(guò)測(cè)試,該系統(tǒng)大致上能夠較好地完成需求分析中的任務(wù),如家譜建立、家譜保存、增加孩子、刪除個(gè)人信息、修改個(gè)人信息等。但仍然存在很多問(wèn)題,如對(duì)數(shù)據(jù)的輸入方面沒(méi)有太多的限制,這可能導(dǎo)致用戶(hù)輸入的異常發(fā)生。對(duì)系統(tǒng)查詢(xún)?cè)O(shè)置也不靈活,系統(tǒng)的可擴(kuò)展性不強(qiáng)。功能的實(shí)現(xiàn)也不太完善,有待進(jìn)一步改善。6 6 課程設(shè)計(jì)心得體會(huì)

36、課程設(shè)計(jì)心得體會(huì)11個(gè)人感想個(gè)人感想經(jīng)過(guò)這些天的設(shè)計(jì)和開(kāi)發(fā),系統(tǒng)根本開(kāi)發(fā)完畢。在本次課程設(shè)計(jì)中困難遇到不少,比方像以前 C+里面的一些文本文件的操作,i/o 流,string,Cstring 類(lèi),容器類(lèi)相關(guān)的成員函數(shù),全局參數(shù)的傳遞等都忘了很多了,都全是在百度和書(shū)籍中查找到的,并且有些不懂得問(wèn)題也請(qǐng)教了老師、同學(xué),也為我自己今后的學(xué)習(xí)解決了一些問(wèn)題。這次課程設(shè)計(jì),我選取的題目是?家譜樹(shù)管理系統(tǒng)?,剛開(kāi)始是準(zhǔn)備不用 MFC 來(lái)做的因?yàn)槲腋杏X(jué)自己好似那個(gè)已經(jīng)忘的差不多了,但是當(dāng)我發(fā)現(xiàn)不用 MFC 做出來(lái)的東西非常不好看、不好用時(shí),我便強(qiáng)迫自己用 MFC,并從圖書(shū)館和百度中查找了一些代碼和相關(guān)資料,

37、這樣一來(lái)不僅讓我對(duì)樹(shù)的定義、存取、遍歷等有了更進(jìn)一步的了解,更讓我對(duì)如何運(yùn)用MFC 來(lái)解決一些數(shù)據(jù)結(jié)構(gòu)中的問(wèn)題有了更深一步的了解,在學(xué)習(xí)專(zhuān)業(yè)課的同時(shí),能有這樣一次時(shí)機(jī),讓我這個(gè)還未出茅廬的小子看到了編程這門(mén)課的博大精深,也體會(huì)了其中的無(wú)窮樂(lè)趣,獲得了更多更實(shí)用的知識(shí)。22缺乏之處缺乏之處由于設(shè)計(jì)時(shí)間較短,所以該系統(tǒng)還有許多不盡如人意的地方,比方用戶(hù)界面不夠美觀,功能不夠完善等多方面問(wèn)題。1 在這次系統(tǒng)開(kāi)發(fā)的過(guò)程中,我對(duì) MFC 和數(shù)據(jù)結(jié)構(gòu)的關(guān)系以及他們是如何相關(guān)聯(lián)的有些疑問(wèn),如那個(gè)樹(shù)形插件,為什么只要把它消息映射一下那樣就可以構(gòu)造出一棵樹(shù)的結(jié)構(gòu)等等。2、對(duì)需求分析的考慮,系統(tǒng)的制作,從功能分析

38、到功能模塊分析、與其他系統(tǒng)的關(guān)系,再到后臺(tái)數(shù)據(jù)存儲(chǔ)設(shè)計(jì)及各功能模塊的創(chuàng)立都還欠考慮。3、系統(tǒng)中還有一個(gè)很大的問(wèn)題始終無(wú)法解決,那就是在我的主界面上用此“(溫馨提示)此鏈接有問(wèn)題勿用標(biāo)出來(lái)的那個(gè)。其實(shí),這個(gè)系統(tǒng)還有很多缺乏之處,但由于有篇幅限制15 頁(yè)左右故望讀者能夠給予改良。7 7 參考文獻(xiàn)參考文獻(xiàn)1.鄭 莉. C+語(yǔ)言程序設(shè)計(jì)第三版學(xué)生用書(shū). 清華大學(xué)出版社 2004.6.2.黃 明. Visual C+信息系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)實(shí)例. 機(jī)械工業(yè)出版社 2005.3.3.羅建軍. 大學(xué) Visual C+程序設(shè)計(jì)案例教程. 高等教育出版社 2004.8. 人民郵電出版社 2004.1. 5.嚴(yán)蔚敏.

39、 數(shù)據(jù)結(jié)構(gòu)(C 語(yǔ)言版). 清華大學(xué)出版社 . 6.嚴(yán)蔚敏. 數(shù)據(jù)結(jié)構(gòu)題集(C 語(yǔ)言版). 清華大學(xué)出版社 2021.9. 7.Larry Nyhoff. 數(shù)據(jù)結(jié)構(gòu)與算法分析 清華大學(xué)出版社 2006.11. 附錄:附錄:說(shuō)明:由于代碼量太大,僅附的少局部代碼,敬請(qǐng)?jiān)?!說(shuō)明:由于代碼量太大,僅附的少局部代碼,敬請(qǐng)?jiān)彛? FamilytreeDlg.cpp : implementation file#include stdafx.h#include 0807020218 張朝政家譜信息管理系統(tǒng).h#include FamilytreeDlg.h#include FileOpenAndSave

40、Dlg.h#include AddInfoDlg.h#include DellInfoDlg.h#include ModifyInfoDlg.h#include RelationsDlg.h#include PersonalInfoDlg.h#include BirthdayDlg.h#include SearchGenerationDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CAboutDlg dialog used for App Aboutcla

41、ss CAboutDlg : public CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotecte

42、d:/AFX_MSG(CAboutDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg,

43、CDialog)/AFX_MSG_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ CFamilytreeDlg dialogCFamilytreeDlg:CFamilytreeDlg(CWnd* pParent /*=NULL*/): CDialog(CFamilytreeDlg:IDD, pParent)/AFX_DATA_INIT(CFamilytreeDlg)/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITv

44、oid CFamilytreeDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CFamilytreeDlg)DDX_Control(pDX, IDC_TREE_PEDIGREE, m_peTree);DDX_Control(pDX, IDC_LIST_PEDIGREE, m_peList);/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CFamilytreeDlg, CDialog)/AFX_MSG_MAP(CFamilytreeDlg)ON_WM_SYSCOMMAN

45、D()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_ADD, OnAdd)ON_BN_CLICKED(IDC_BIRTHDAY, OnBirthday)ON_BN_CLICKED(IDC_DELETE, OnDelete)ON_COMMAND(IDC_PEDIGREE_ADD, OnPedigreeAdd)ON_COMMAND(IDC_PEDIGREE_DELETE, OnPedigreeDelete)ON_BN_CLICKED(IDC_PEDIGREE_IGENERATION_INFO, OnPedigreeIgenerationInfo)ON_COMMAND(IDC_PEDIGREE_MODIFY, OnPedigreeModify)ON_BN_CLICKED(IDC_PEDIGREE_PERSONAL_INFO, OnPedigreePersonalInfo)ON_BN_CLICKED(IDC_PEDIGREE_RELATIONS, OnPedigreeRelations)ON_BN_CLICKED(IDC_PEDIGREE_SORT, OnPedigreeSort)ON_COMMA

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論