




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐ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è)計(jì)題目:家譜管理系統(tǒng)設(shè)計(jì)內(nèi)容與要求:【問題描述】:實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng)1).輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi)容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).實(shí)現(xiàn)數(shù)據(jù)的存盤和讀盤。3).顯示家譜。.按照出生日期查詢成員名單。.按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)。.修改某成員信息?!净疽蟆浚航缑嬉螅河泻侠淼奶崾?,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)的功能要求。存儲(chǔ)結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是要求相關(guān)數(shù)據(jù)要存儲(chǔ)在數(shù)據(jù)文件中。測試數(shù)據(jù):要求使用1、全部合法數(shù)據(jù);2、局部非法數(shù)據(jù)。進(jìn)行程序測試,以保證程序的穩(wěn)定。測試數(shù)據(jù)及測試結(jié)果請(qǐng)?jiān)谏辖坏馁Y料中寫明。指導(dǎo)教師:年月日課程設(shè)計(jì)評(píng)語成績:指導(dǎo)教師:年月日洛陽理工學(xué)院課程設(shè)計(jì)報(bào)告洛陽理工學(xué)院課程設(shè)計(jì)報(bào)告23scanf("%s",birth);OutPutMessage1(SearchTree1(Tree,birth,20),birth,20);printf("\n\n\t**********\n\t");getchar();break;case'D':if(strcmp(Tree->Name,"0")==0){printf("\n\t家譜圖的多叉樹尚未建立請(qǐng)先建立樹5");getchar();break;}printf("\n\t請(qǐng)輸入你要查找的人的姓名:\n\t");scanf("%s",name);OutPutMessage(SearchTree(Tree,name,20),name,20);printf("\n\n\t**********\n\t");getchar();break;case'E':if(strcmp(Tree->Name,"0")==0){printf("\n\t家譜圖的多叉樹尚未建立請(qǐng)先建立樹5");getchar();break;}Change(Tree);getchar();break;case'F':if(strcmp(Tree->Name,"0")==0){printf("\n\t家譜圖的多叉樹尚未建立請(qǐng)先建立樹5");getchar();break;}SaveFamily(Tree);getchar();break;case'G':/*if(strcmp(Tree->Name,"0")==0){printf("\n\t家譜圖的多叉樹尚未建立請(qǐng)先建立樹5");getchar();break;}*/ReadFamily(&Tree);getchar();break;case'H':printf("\n\n\t本次服務(wù)到此結(jié)束");printf("\n\t歡迎下次使用");printf("\n\t謝謝\n\n");break;case'\n':break;default:printf("\n\n\t對(duì)不起!你的選擇不在服務(wù)范圍之內(nèi)!");printf("\n\t請(qǐng)您再次選擇所需的服務(wù)項(xiàng)!");printf("\n\t謝謝\n\t");getchar();break;}if(c=='H'||c=='f')break;getchar();}}voidCreatTree(TreeNode*Node)//創(chuàng)建樹{inti;TreeNode*NewNode;NewNode=(TreeNode*)malloc(sizeof(TreeNode));Node->NextNode[0]=NewNode;Node->NextNode[0]=NULL;printf("\n\t請(qǐng)輸入出生日期:");scanf("%s",Node->birthday);printf("\n\t請(qǐng)輸入家庭住址:”);getchar();scanf("%s",Node->address);printf("\n\t請(qǐng)輸入是否建在(1-是或0-否):");scanf("%d",&(Node->death));if(Node->death==0){printf("\n\t請(qǐng)輸入去世日期:");scanf("%s",Node->livemassage);}elseif(Node->death=='1')printf("\n\t仍然建在”);printf("\n\t請(qǐng)輸入%s的配偶的姓名(輸入0代表沒結(jié)婚)Node->Name);scanf("%s",NewNode->Name);if(strcmp(NewNode->Name,"0")!=0){printf("\t請(qǐng)輸入配偶的出生日期:");scanf("%s",NewNode->birthday);printf("\n\t請(qǐng)輸入家庭住址:”);getchar();scanf("%s",NewNode->address);printf("\n\t請(qǐng)輸入是否建在(1-是或0-否):");scanf("%d",&(NewNode->death));if(NewNode->death==0){printf("\n\t請(qǐng)輸入去世日期:");scanf("%s",NewNode->livemassage);}elseif(NewNode->death==T)printf("\n\t仍然建在");}printf("\n\t請(qǐng)輸入%s的子女的數(shù)目(當(dāng)子女輸入0時(shí)便停止輸入該成員有關(guān)信息):",Node->Name);scanf("%d",&(Node->ChildNum));if((Node->ChildNum)==0&&strcmp(NewNode->Name,"0")==0)return;if(Node->Kind=='G'||Node->Kind=='g')NewNode->Kind='B';elseNewNode->Kind='G';NewNode->ChildNum=0;NewNode->NextNode[0]=NULL;Node->NextNode[0]=NewNode;Node->NextNode[0]->Parent=Node;〃孩子的父母for(i=1;i<=Node->ChildNum;i++){NewNode=(TreeNode*)malloc(sizeof(TreeNode));a++;printf("\n\t請(qǐng)輸入%s的第%d子女的名字:",Node->Name,i);scanf("%s",NewNode->Name);printf("\n\t請(qǐng)輸入%s的第%d子女的性別女G男B:",Node->Name,i);getchar();scanf("%c",&NewNode->Kind);NewNode->ChildNum=-1;NewNode->Parent=Node;Node->NextNode[i]=NewNode;CreatTree(Node->NextNode[i]);//從子女的數(shù)目開始}}voidOutPutAll(TreeNode*Tree){inti,flag=0;printf("\n\t****************************");printf("\n\t姓名:%s出生日期:%s家庭住址:%s性別:%c",Tree->Name,Tree->birthday,Tree->address,Tree->Kind);if(Tree->Kind=='G'||Tree->Kind=='g'){flag=1;printf(”女”);}elseprintf(”男”);printf(”\t是否健在(1-健在,0-去世):”);if(Tree->death==1)printf("1");elseif(Tree->death==0)printf("0");if(!(Tree->NextNode[0])){printf("\n\t至今沒有配偶和子女5”);return;}if(flag==1)printf("\n\t丈夫姓名:%s",Tree->NextNode[0]->Name);elseprintf("\n\t妻子姓名:%s",Tree->NextNode[0]->Name);printf(”\t是否健在(1-健在,0-去世):”);if(Tree->death==1)printf("1");elseif(Tree->death==0)printf("0");for(i=1;i<=Tree->ChildNum;i++){printf("\n\t第%d個(gè)子女的姓名:%s出生日期:%s家庭住址:%s性別%c",i,Tree->NextNode[i]->Name,Tree->NextNode[i]->birthday,Tree->NextNode[i]->address,Tree->NextNode[i]->Kind);if(Tree->NextNode[i]->Kind=='G'||Tree->NextNode[i]->Kind=='g')printf(”女”);elseprintf(”男”);printf(”\t是否健在(1-健在,0-去世):”);if(Tree->death==1)printf("1");elseif(Tree->death==0)printf("0");}printf("\n\t");for(i=1;i<=Tree->ChildNum;i++){OutPutAll(Tree->NextNode[i]);}TreeNode*SearchTree(TreeNode*Tree,charname[],intlength){inti;TreeNode*NewNode;if(strcmp(Tree->Name,name)==0){if(length==0)FLAG=1;elseFLAG=0;returnTree;}if(Tree->NextNode[0]==NULL)returnNULL;for(i=0;i<=Tree->ChildNum;i++){if(i==0)NewNode=SearchTree(Tree->NextNode[i],name,0);elseNewNode=SearchTree(Tree->NextNode[i],name,20);if(NewNode!=NULL)returnNewNode;}returnNULL;}voidOutPutMessage(TreeNode*Tree,charname[],intlength){intflag=0,i;TreeNode*NewNode;printf("\n\n\t**********");if(Tree==NULL){printf("\n\n\t****該家譜圖中沒有%s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*****\n",name);return;}printf("\n\n\t您所要找的人已經(jīng)找到信息如下所示:”);printf("\n\n\t姓名:%s出生日期:%s家庭住址:%s性別:%c",name,Tree->birthday,Tree->address,Tree->Kind);if(Tree->Kind=='G'||Tree->Kind=='g'){flag=1;//標(biāo)記他(她)的性別printf("女”);}elseprintf(”男”);printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1)printf("1");elseif(Tree->death==0)printf("0");NewNode=Tree->Parent;if(FLAG==1){if(flag==1){printf("\n\n\t她是嫁入此家族的所以親生父母信息不在家譜內(nèi)包括");printf("\n\t丈夫姓名:%s",NewNode->Name);}else{printf("\n\n\t他是入贅此家族的所以親生父母信息不在家譜內(nèi)包括J;printf("\n\t妻子姓名:%s",NewNode->Name);}if((NewNode->ChildNum)>0)//判斷他(她)是否有孩子{printf("\n\t的孩子的信息如下:");//輸出他(她)的孩子的信息for(i=1;i<=NewNode->ChildNum;i++){printf("\n\t姓名:%s性別:",NewNode->NextNode[i]->Name);if(NewNode->NextNode[i]->Kind=='G'||NewNode->Kind=='g')printf("女”);elseprintf(”男”);printf("\t是否健在(1-健在,0-去世):");if(Tree->death==1)printf("1");elseif(Tree->death==0)printf("0");}}return;}if(NewNode==NULL)〃判斷它是不是根節(jié)點(diǎn)如果是的話就沒有父母兄弟信息printf("\n\t是這個(gè)家譜圖里最年長的人”,name);else{if(NewNode->Kind=='G'||NewNode->Kind=='g')//判斷父親節(jié)點(diǎn)是父親還是母親{printf("\n\t母親姓名:%s",NewNode->Name);〃輸出他(她)的父母親的信息printf("\n\t父親姓名:%s",NewNode->NextNode[0]->Name);}else{printf("\n\t母親姓名:%s",NewNode->NextNode[0]->Name);printf("\n\t父親姓名:%s",NewNode->Name);}if(Tree->NextNode[0]!=NULL)//判斷他(她)是否有配偶{if(flag==l)〃輸出他(她)的配偶的信息printf("\n\t丈夫姓名:%s",Tree->NextNode[0]->Name);elseprintf("\n\t妻子姓名:%s",Tree->NextNode[0]->Name);if(Tree->ChildNum>0)//判斷他(她)是否有孩子{printf("\n\t的孩子的信息如下:”);〃輸出他(她)的孩子的信息for(i=l;i<=Tree->ChildNum;i++){printf("\n\t姓名:%s性別:",Tree->NextNode[i]->Name);if(Tree->NextNode[i]->Kind=='G'||Tree->Kind=='g')printf("女”);elseprintf(”男”);printf("\t是否健在(1-健在,0-去世):");if(Tree->death==l)printf("l");elseif(Tree->death==0)printf("0");}}elseprintf("\n\t%s至今還沒有孩子",name);}elseprintf("\n\t%s至今還沒有配偶和孩子5",丁26->“8皿6);}}TreeNode*SearchTree1(TreeNode*Tree,charbirth[],intlength){inti;TreeNode*NewNode;if(strcmp(Tree->birthday,birth)==0){if(length==0)FLAG=1;elseFLAG=0;returnTree;}if(Tree->NextNode[0]==NULL)returnNULL;for(i=0;i<=Tree->ChildNum;i++){if(i==0)NewNode=SearchTree1(Tree->NextNode[i],birth,0);elseNewNode=SearchTree1(Tree->NextNode[i],birth,20);if(NewNode!=NULL)returnNewNode;}returnNULL;}voidOutPutMessage1(TreeNode*Tree,charbirth[],intlength){intflag=0,i;TreeNode*NewNode;printf("\n\n\t**********");if(Tree==NULL){printf("\n\n\t****該家譜圖中沒有出生日期為%s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*****\n",birth);return;}printf("\n\n\t您所要找的人已經(jīng)找到信息如下所示:”);printf("\n\n\t姓名:%s出生日期:%s家庭住址:%s性別:%c",Tree->Name,Tree->birthday,Tree->address,Tree->Kind);if(Tree->Kind=='G'||Tree->Kind=='g'){flag=1;//標(biāo)記他(她)的性別printf("女”);}elseprintf(”男”);}voidChange(TreeNode*Tree)//修改某個(gè)人的信息{charname[20];TreeNode*NewNode;printf("\n\t請(qǐng)輸入你要修改的人的姓名:\n\t");scanf("%s",name);NewNode=SearchTree(Tree,name,20);if(NewNode==NULL){printf(”\n\n\t****該家譜圖中沒有%s這個(gè)人的信息請(qǐng)確認(rèn)是否輸入錯(cuò)誤*****\n",name);return;}else{SubMenue1(NewNode);}}voidSubMenue1(TreeNode*Tree)//輸出副菜單{charc;intflag,i;charname[20];charbirth[20];charaddress1[50];charParent[2][20];TreeNode*NewNode;getchar();while(1){system("cls");printf("\t");printf("\n\n\t*****請(qǐng)選擇你的操作****");printf("\n\t***A:修改個(gè)人的信息-");printf("\n\t***B:修改父母的信息-——");printf("\n\t***C:修改子女的信息-");printf("\n\t***D:退出-*********\n\t");c=getchar();switch(c){case'A':printf("\n\n\t請(qǐng)輸入修改的姓名:如果不需要修改就輸入'O'然后按Enter鍵繼續(xù)\n\t");scanf("%s",name);if(strcmp(name,"O")!=O)strcpy(Tree->Name,name);printf("\n\n\t是否要修改性別:如果需要就輸入T不需要修改就輸入'0'然后按Enter鍵繼續(xù)\n\t");scanf("%d",&flag);if(flag==1){if(Tree->Kind=='G'||Tree->Kind=='g')Tree->Kind='B';elseTree->Kind='G';}printf("\n\n\t請(qǐng)輸入修改的出生日期:如果不需要修改就輸入‘0'然后按Enter鍵繼續(xù)叔");scanf("%s",birth);if(strcmp(birth,"0")!=0)strcpy(Tree->birthday,birth);printf("\n\n\t請(qǐng)輸入修改的家庭地址:如果不需要修改就輸入‘0'然后按Enter鍵繼續(xù)叔");scanf("%s",address1);if(strcmp(address1,"0")!=0)strcpy(Tree->address,address1);printf("\n\n\t個(gè)人信息修改成功”);break;case'B':if(Tree->Parent==NULL)//判斷是不是頭節(jié)點(diǎn){printf("\n\t是這個(gè)家譜圖里最頂端的人沒有父母信息!",name);break;}if(FLAG==1)//判斷是不是入贅或加入此間的{if(Tree->Kind=='G'||Tree->Kind=='g'){printf("\n\n\t她是嫁入此間的所以父母信息不在家譜內(nèi)包括”);}else{printf("\n\n\t他是入贅此間的所以父母信息不在家譜內(nèi)包括”);}break;}if(Tree->Parent->Kind=='G'||Tree->Parent->Kind=='g'){strcpy(Parent[O],"母親”);strcpy(Parent[l],"父親”);else{strcpy(Parent[O],"父親”);strcpy(Parent[l],"母親”);}printf("\n\n\t請(qǐng)輸入%s要修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)\n\t",Parent[0]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);printf("\n\n\t請(qǐng)輸入%s要修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼續(xù)\n\t",Parent[l]);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode[0]->Name,name);printf("\n\n\t父母的信息修改成功");break;case'C':if(Tree->ChildNum==0){printf("\n\n\t至今還沒有子女”);break;}if(Tree->Parent!=NULL)if(strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0)//如果他是入贅或者是嫁入的就需用配偶節(jié)點(diǎn)完成修改{Tree=Tree->Parent;}for(i=l;i<=Tree->ChildNum;i++){printf("\n\n\t請(qǐng)輸入%s修改的姓名:如果不需要修改就輸入'0'然后按Enter鍵繼^\n\t",Tree->NextNode[i]->Name);scanf("%s",name);if(strcmp(name,"0")!=0)strcpy(Tree->NextNode[i]->Name,name);printf("\n\n\t是否要修改性別:如果需要就輸入'1'不需要修改就輸入'0'然后按Enter鍵繼續(xù)5\2);scanf("%d",&flag);if(flag==1){if(Tree->NextNode[i]->Kind=='G'||Tree->NextNode[i]->Kind=='g')Tree->NextNode[i]->Kind='B';elseTree->NextNode[i]->Kind='G';}}printf("\n\n\t子女的信息修改成功");break;case'D':printf("\n\n\t本項(xiàng)服務(wù)到此結(jié)束");break;case'\n':break;default:printf("\n\n\t對(duì)不起!你的選擇不在服務(wù)范圍之內(nèi)!");printf("\n\t請(qǐng)您再次選擇所需的服務(wù)項(xiàng)!");printf("\n\t謝謝合作!\n\t");break;}if(c=='D'||c=='d')break;printf("\n\n\t請(qǐng)按Enter鍵繼續(xù)操作");getchar();getchar();}}voidSaveFamily(TreeNode*root)//保存家譜至指定文件{charsaveFileName[maxFileNameLen];FILE*fp;TreeNode*queue[50],*head;inti,front,rear;//隊(duì)列的頭指針,尾指針printf("*****保存家譜*****\n\n");//if(root==NULL)if(root==NULL){printf("\t\t家譜中無成員,無法保存!\n");return;}TipForSaveFilePosition;//文件及其絕對(duì)路徑格式scanf("%s",saveFileName);getchar();fp=fopen(saveFileName,"w");〃不存在則新建。存在,則從文件起始位置寫,原內(nèi)容將被覆蓋。if(fp==NULL){printf("\t\t新建文件失?。n");return;}elseprintf("\t\t新建文件成功,文件及其路徑為:%s\n",saveFileName);/*利用寬度優(yōu)先搜索遍歷家族多叉樹*/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;printf("*****讀取家譜*****\n\n");printf("\t\t輸入文件名及其路徑,以便從中讀取家譜。\n");TipForReadFilePosition;scanf("%s",readFileName);getchar();fp=fopen(readFileName,"r");〃為讀而打開文本文件(文件必須已存在)if(fp==NULL){printf("\t\t只讀形式打開文件失?。n");return;}/*一邊從文件讀取結(jié)構(gòu)體變量,一邊重新建樹*/*root=(tree)malloc(sizeof(TreeNode));if(*root==NULL){printf("\t\t重建樹時(shí)為根結(jié)點(diǎn)分配內(nèi)存失??!\n");return;}fread(*root
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 室內(nèi)消防箱管理制度
- 家委會(huì)經(jīng)費(fèi)管理制度
- 庫房紅黃線管理制度
- 強(qiáng)化對(duì)餐廳管理制度
- 影像科衛(wèi)生管理制度
- 微信工作群管理制度
- 德智體美勞管理制度
- 快餐店前廳管理制度
- 性傳播疾病管理制度
- 患者床頭卡管理制度
- 2025年中國高吸水性樹脂行業(yè)市場發(fā)展現(xiàn)狀研究及投資戰(zhàn)略咨詢報(bào)告
- 老年護(hù)理技能和知識(shí)培訓(xùn)
- 中職電子商務(wù)基礎(chǔ)理論試題及答案
- 駕駛員保密管理制度培訓(xùn)
- 市政工程溝槽開挖與溝槽回填專項(xiàng)施工方案
- 2025年吉林長春市軌道交通集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 制造業(yè)運(yùn)營總監(jiān)崗位職責(zé)
- 廣州理工學(xué)院《計(jì)算機(jī)組成原理理論》2023-2024學(xué)年第二學(xué)期期末試卷
- 項(xiàng)目財(cái)政評(píng)審服務(wù)采購?fù)稑?biāo)方案(技術(shù)方案)
- 2025年湖北省技能高考(建筑技術(shù)類)《建筑制圖與識(shí)圖》模擬練習(xí)試題庫(含答案)
- 2025年中國工商業(yè)光伏行業(yè)上下游產(chǎn)業(yè)鏈全景、發(fā)展環(huán)境及前景研究報(bào)告
評(píng)論
0/150
提交評(píng)論