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

下載本文檔

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

文檔簡(jiǎn)介

洛陽(yáng)理工學(xué)院課程設(shè)計(jì)報(bào)告課程名稱數(shù)__據(jù)__結(jié)__構(gòu)__課__程__設(shè)__計(jì)設(shè)計(jì)題目家__譜__管__理__系__統(tǒng)專業(yè)計(jì)__算__機(jī)__科__學(xué)__與__技__術(shù)班級(jí)B_1_5_0_4_0_5學(xué)號(hào)B_1_5_0_8_0_8_2_2姓名宋__士__龍完成日期2__0_1_6_年___1_2_月___3_0_日課程設(shè)計(jì)任務(wù)書(shū)設(shè)計(jì)題目:家譜管理系統(tǒng)設(shè)計(jì)內(nèi)容與要求:【問(wèn)題描述】:實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng)1).輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi)容姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).實(shí)現(xiàn)數(shù)據(jù)的存盤(pán)和讀盤(pán)。3).顯示家譜。.按照出生日期查詢成員名單。.按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)。.修改某成員信息?!净疽蟆浚航缑嬉螅河泻侠淼奶崾荆總€(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。測(cè)試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、局部非法數(shù)據(jù)。進(jìn)行程序測(cè)試,以保證程序的穩(wěn)定。測(cè)試數(shù)據(jù)及測(cè)試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫(xiě)明。指導(dǎo)教師:年月日課程設(shè)計(jì)評(píng)語(yǔ)成績(jī):指導(dǎo)教師:洛陽(yáng)理工學(xué)院課程設(shè)計(jì)報(bào)告洛陽(yáng)理工學(xué)院課程設(shè)計(jì)報(bào)告#}}子女的信息修改成功break;case'D':本項(xiàng)服務(wù)到此結(jié)束break;case''break;default:對(duì)不起!你的選擇不在服務(wù)范圍之內(nèi)請(qǐng)您再次選擇所需的服務(wù)項(xiàng)謝謝合作break;}if(c=='D'||c=='d')break;請(qǐng)按Enter鍵繼續(xù)操作getchar();getchar();}}voidSaveFamily(TreeNode*root)〃保存家譜至指定文件{charsaveFileName[maxFileNameLen];FILE*fp;TreeNode*queue[50],*head;inti,front,rear;//隊(duì)列的頭指針,尾指針保存家譜//if(root==NULL)if(root==NULL){家譜中無(wú)成員,無(wú)法保存!return;}TipForSaveFilePosition;//文件及其絕對(duì)路徑格式getchar();不存在則新建。存在,則從文件起始位置寫(xiě),原內(nèi)容將被覆蓋。if(fp==NULL){新建文件失敗!return;}else新建文件成功,文件及其路徑為:/*利用寬度優(yōu)先搜索遍歷家族多叉樹(shù)*/fwrite(root,sizeof(TreeNode),1,fp);//將根結(jié)點(diǎn)存入文件(二進(jìn)制形式)front=rear=0;//初始化空隊(duì)queue[rear++]=root;//根結(jié)點(diǎn)進(jìn)隊(duì)while(front!=rear)//隊(duì)列不為空{(diào)head=queue[front++];〃隊(duì)頭元素出隊(duì)if(head->NextNode[0]!=NULL){fwrite(head->NextNode[0],sizeof(TreeNode),1,fp);}for(i=1;i<=head->ChildNum;i++){fwrite(head->NextNode[i],sizeof(TreeNode),1,fp);queue[rear++]=head->NextNode[i];}}fclose(fp);fp=NULL;}voidReadFamily(tree*root)〃從指定文件中讀取家譜{FILE*fp;charreadFileName[50];treequeue[50],head;inti,front,rear;*****讀取家譜輸入文件名及其路徑,以便從中讀取家譜。TipForReadFilePosition;getchar();為讀而打開(kāi)文本文件(文件必須已存在)if(fp==NULL){只讀形式打開(kāi)文件失?。eturn;}/*一邊從文件讀取結(jié)構(gòu)體變量,一邊重新建樹(shù)*/*root=(tree)malloc(sizeof(TreeNode));if(*root==NULL){重建樹(shù)時(shí)為根結(jié)點(diǎn)分配內(nèi)存失??!return;}fread(*root,sizeof(TreeNode),1,fp);front=rear=0;//初始化空隊(duì)queue[rear++]=*root;〃根結(jié)點(diǎn)進(jìn)隊(duì)while(front!=rear){head=queue[front++];if(head->NextNode[0]!=NULL){head->NextNode[0]=(tree)malloc(sizeof(TreeNode));if(head->NextNode[0]==NULL){重建樹(shù)時(shí)分配內(nèi)存失??!return;}fread(head->NextNode[0],sizeof(TreeNode),1,fp);}for(i=1;i<=head->ChildNum;i++){head->NextNode[i]=(tree)malloc(sizeof(TreeNode));if(head->NextNode[i]==NULL){重建樹(shù)時(shí)分配內(nèi)存失敗!return;}fread(head->NextNode[i],sizeof(TreeNode),1,fp);head->NextNode[i]->Parent=head;queue[rear++]=head->NextNode[i];}}fclose(fp);fp=NULL;}六、總結(jié)由我和王月本次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)我選的題目是家譜管理系統(tǒng),歷時(shí)四天同學(xué)一起完成??傮w來(lái)說(shuō)這次課程設(shè)計(jì)還是比較困難的,而且我們選的這個(gè)題目在這些題目中也是很有難度的。中間遇到很多困難,但是在我和她一起討論以及老師的幫助下,最終還是順利的完成了。由我和王月剛一開(kāi)始選題目的時(shí)候,我并沒(méi)有怎么在意選什么,只是隨便選了一個(gè),到后來(lái)才發(fā)現(xiàn)選的這個(gè)題目非常難。經(jīng)過(guò)分析,發(fā)現(xiàn)這個(gè)題目需要用到樹(shù),而樹(shù)我又沒(méi)有學(xué)好,所以寫(xiě)的時(shí)候非常吃力。最一開(kāi)始,我用的是二叉樹(shù)來(lái)存儲(chǔ),后來(lái)寫(xiě)到一半發(fā)現(xiàn)寫(xiě)不下去了,用遞歸創(chuàng)建函數(shù)始終不合適,最后不得不放棄。于是我在網(wǎng)上開(kāi)始查找資料,不過(guò)查到的資料大多于本次實(shí)驗(yàn)不相符,還有一些也是看不懂。只有一個(gè),我發(fā)現(xiàn)他是用的多叉樹(shù),看了一會(huì)發(fā)現(xiàn)也能理解。于是打算用多叉樹(shù)來(lái)儲(chǔ)存??墒怯植恢涝撊绾螌?xiě)起,但還是在網(wǎng)上查了多叉樹(shù)的遞歸創(chuàng)建方法就開(kāi)始寫(xiě)了。在上機(jī)前一天晚上,王月給我發(fā)來(lái)了他寫(xiě)的程序,除了存盤(pán)和讀盤(pán),其他的功能基本都實(shí)現(xiàn)了。我拿來(lái)他的和我對(duì)比,發(fā)現(xiàn)我們寫(xiě)的大同小異,于是我結(jié)合著她的將我的改了一下,基本的功能也能實(shí)現(xiàn)了。接下來(lái)就是最重要的模塊了,也是最麻煩的,存盤(pán)和讀盤(pán)。我和王月同學(xué)參考了去年的課程設(shè)計(jì)的保存和讀取。但是那是順序表的保存和讀取,和我們用到的不盡相同。這個(gè)時(shí)候我們已經(jīng)沒(méi)有思路,所以我們向老師求助。老師給我們講了一些關(guān)于存和讀的知識(shí),又讓我們看了一下書(shū),我們總算大體了解了一下這個(gè)知識(shí)。接下來(lái)我們?cè)诰W(wǎng)上查找資料,最終終于寫(xiě)出來(lái)了存盤(pán)和讀盤(pán)。但是運(yùn)行的時(shí)候發(fā)現(xiàn)又有問(wèn)題了,在表面上看來(lái)是只能存不能讀。于是我們向老師求助,老師看了我們的程序之后,建議我們換一種方式存盤(pán)和讀盤(pán),將節(jié)點(diǎn)存起來(lái),然后讀盤(pán)時(shí)讀一個(gè)就把他放在樹(shù)里。晚上回去,我對(duì)我的函數(shù)仔細(xì)看了一下,突然發(fā)現(xiàn)了問(wèn)題。我的程序存盤(pán)也是有問(wèn)題的。循環(huán)內(nèi)寫(xiě)入文件少一次,或者說(shuō)是次數(shù)不固定。因?yàn)槲腋赣H節(jié)點(diǎn)的第一個(gè)節(jié)點(diǎn)如果有配偶,就存配偶,沒(méi)有的話存子女,很隨機(jī)。我發(fā)現(xiàn)了這個(gè)漏洞之后,想了好久才想出解決方法。我把父節(jié)點(diǎn)的第一個(gè)節(jié)點(diǎn)單獨(dú)存,不讓他入隊(duì),然后把第二個(gè)后繼一

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論