




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/* 家譜管理系統(tǒng) 任務(wù):實(shí)現(xiàn)具有下列功能的家譜管理系統(tǒng)功能要求:1). 輸入文件以存放最初家譜中各成員的信息,成員的信息中均應(yīng)包含以下內(nèi)容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2). 實(shí)現(xiàn)數(shù)據(jù)的存盤(pán)和讀盤(pán)。3). 以圖形方式顯示家譜。4). 顯示第n 代所有人的信息。5). 按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)。6). 按照出生日期查詢成員名單。7). 輸入兩人姓名,確定其關(guān)系。8). 某成員添加孩子。9). 刪除某成員(若其還有后代,則一并刪除)。10).修改某成員信息。11).按出生日期對(duì)家譜中所有人排序。12
2、).打開(kāi)一家譜時(shí),提示當(dāng)天生日的健在成員。要求:建立至少30個(gè)成員的數(shù)據(jù),以較為直觀的方式顯示結(jié)果,并提供文稿形式以便檢查。界面要求:有合理的提示,每個(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ě)明;*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>
3、#include"map.h"#define MAXN 100#define MAXMEM 100#define Elemtype char=/樹(shù)typedef struct BiTNodeint mark;/標(biāo)記 int level; char name50;/姓名 char birthday50;/生日 char addressMAXN;/住址 bool marriage;/婚否(true表示結(jié)婚,false表示沒(méi)結(jié)婚) bool live;/建在(true表示活著,false表示過(guò)世) bool sex;/性別(true表示男,false表示女) char livem
4、assage50;/死亡日期(如果其已經(jīng)死亡) Elemtype data;/ struct BiTNode *lc,*rc; BiTNode,*BiTree;/樹(shù)的相關(guān)操作char nametemp50;/姓名char birthdaytemp50;/生日char addresstempMAXN;/住址bool marriagetemp;/婚否(true表示結(jié)婚,false表示沒(méi)結(jié)婚)bool livetemp;/建在(true表示或者,false表示過(guò)世)bool sextemp;char livemassagetempMAXN;/死亡日期(如果其已經(jīng)死亡)char ch;/額外使用int
5、 leveltemp;/人的代數(shù)int Nth;/顯示第n代人時(shí)要用char searchdata50;char searchname50;int count;/計(jì)數(shù)int choice;/各種選擇int use;BiTree temp;struct BiTNodeList BiTree data; BiTNodeList *next;BiTNodeList *List;/-void CreatBiTree(BiTree &T,FILE *in)/建立雙鏈二叉樹(shù) fscanf(in,"%c",&ch); /printf("%cn",ch)
6、; if(ch = '') T = NULL; fscanf(in,"%c",&ch); else T = (BiTree)malloc(sizeof(BiTNode); /fscanf(in,"%s%s%s%d%d",nametemp,birthdaytemp,addresstemp,&marriagetemp,&livetemp); fscanf(in,"%s",nametemp); strcpy(T->name,nametemp); fscanf(in,"%s",
7、birthdaytemp); strcpy(T->birthday,birthdaytemp); fscanf(in,"%s",addresstemp); strcpy(T->address,addresstemp); fscanf(in,"%d%d%d%d",&marriagetemp,&livetemp,&leveltemp,&sextemp); T->marriage = marriagetemp; T->live = livetemp; T->level = leveltemp; T-
8、>sex = sextemp; /printf("%s %s %s %d %dn",nametemp,birthdaytemp,addresstemp,marriagetemp,livetemp); if(!livetemp) fscanf(in,"%s",livemassagetemp); /printf("%sn",livemassagetemp); if(!T->live) strcpy(T->livemassage,livemassagetemp); fscanf(in,"%c",&
9、;ch); CreatBiTree(T->lc,in); CreatBiTree(T->rc,in); void PrintInfo(BiTree T) printf("%-10s出生于:%-10s%-10s",T->name,T->birthday,T->address); if(T->marriage) printf("t已婚"); if(!T->marriage) printf("t未婚"); if(T->sex) printf("t男"); if(!T->
10、;sex) printf("t女"); if(T->live) printf("t健在n"); if(!T->live) printf("t去世于:%sn",T->livemassage);void PreOrderTraverse_recursion(BiTree T)/遞歸 先序遍歷(檢查建樹(shù)是否正確)/printf("PreOrderTraverse_recursionn");if(T)/*printf("%-10s出生于:%-10s%-10s",T->name,T
11、->birthday,T->address); if(T->marriage) printf("t已婚"); if(!T->marriage) printf("t未婚"); if(T->sex) printf("t男"); if(!T->sex) printf("t女"); if(T->live) printf("t健在n"); if(!T->live) printf("t去世于:%sn",T->livemassage);
12、*/ PrintInfo(T);PreOrderTraverse_recursion(T->lc);PreOrderTraverse_recursion(T->rc); void ShowFamilyTree(BiTree T)/以圖形的方式顯示家譜 int i,lev; BiTree p; p = T; if(T) lev = T->level; for(i=0; i<lev; i+) printf("t"); printf("%-5s ",p->name); if(p->lc) p = T->lc; prin
13、tf(" %5s%n",p->name); if(p->rc) p = p->rc; ShowFamilyTree(p); else printf(" (未婚)n"); if(T->rc) p = T->rc; ShowFamilyTree(p); void ShowNth(BiTree T)/顯示第n代所有人的信息 if(T) if(T->level = Nth) PrintInfo(T); /printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->
14、birthday,T->address,T->marriage,T->live,T->sex); count+; ShowNth(T->lc);ShowNth(T->rc); void SearchByName(BiTree T)/按照姓名查詢,輸出成員信息(包括其本人、父親、孩子的信息)。不能查詢祖先信息 if(T)if(T->lc) if(T->lc->rc) temp = T->lc->rc; while(temp) if(strcmp(temp->name,searchname) = 0) count+; prin
15、tf("n此人的信息為: n"); PrintInfo(temp); /printf("%-10s%-10s%-10s%5d%5d%5dnn",temp->name,temp->birthday,temp->address,temp->marriage,temp->live,temp->sex); printf("此人父母的信息為: n"); PrintInfo(T); PrintInfo(T->lc); /printf("%-10s%-10s%-10s%5d%5d%5dn"
16、;,T->name,T->birthday,T->address,T->marriage,T->live,T->sex); /printf("%-10s%-10s%-10s%5d%5d%5dnn",T->lc->name,T->lc->birthday,T->lc->address,T->lc->marriage,T->lc->live,T->lc->sex); if(!temp->livemassage) printf("此人還沒(méi)有妻室n"
17、); else printf("此人妻子的信息為: n"); PrintInfo(temp->lc); /printf("%-10s%-10s%-10s%5d%5d%5dnn",temp->lc->name,temp->lc->birthday,temp->lc->address,temp->lc->marriage,temp->lc->live,temp->lc->sex); if(temp->lc->rc) printf("此人孩子的信息為: n&qu
18、ot;); temp = temp->lc->rc; while(temp) PrintInfo(temp); /printf("%-10s%-10s%-10s%5d%5d%5dn",temp->name,temp->birthday,temp->address,temp->marriage,temp->live,temp->sex); temp = temp->rc; return; else temp = temp->rc; SearchByName(T->lc);SearchByName(T->r
19、c);void SearchByBirthday(BiTree T)/按照出生日期查詢成員名單 if(T) if(strcmp(T->birthday,searchdata) = 0) PrintInfo(T); /printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->address,T->marriage,T->live,T->sex); count+; SearchByBirthday(T->lc);SearchByBirthday(T->rc); voi
20、d AddChild(BiTree &T)/某成員添加孩子 if(T) if(strcmp(T->name,searchname) = 0) count+; if(!T->lc) printf("該成員還沒(méi)有結(jié)婚,不能添加孩子n"); return; if(!T->sex) printf("不能為該家譜中的女性添加孩子n"); return; else temp = (BiTree)malloc(sizeof(BiTNode); printf("請(qǐng)輸入添加孩子的姓名n"); scanf("%s&qu
21、ot;,temp->name); printf("請(qǐng)輸入添加孩子的出生年月(格式形如: 2010-1-1)n"); scanf("%s",temp->birthday); printf("請(qǐng)輸入添加孩子的家庭住址n"); scanf("%s",temp->address); printf("請(qǐng)輸入添加孩子的婚姻狀況 0/1 (0表示未婚,1表示已婚)n"); scanf("%d",&temp->marriage); printf("請(qǐng)
22、輸入添加孩子的在世情況 0/1 (0表示去世,1表示在世)n"); scanf("%d",&temp->live); if(!temp->live) printf("請(qǐng)輸入添加孩子的去世時(shí)間(格式形如: 2010-1-1)n"); scanf("%s",temp->livemassage); printf("請(qǐng)輸入添加孩子的性別 0/1 (0表示女,1表示男)n"); scanf("%d",&temp->sex); temp->level
23、= T->level+1; temp->rc = T->lc->rc; temp->lc = NULL; T->lc->rc = temp; printf("孩子添加成功n"); return; AddChild(T->lc);AddChild(T->rc);void AddWife(BiTree &T)/某成員添加妻子 if(T) if(strcmp(T->name,searchname) = 0) count+; if(T->lc) printf("該成員已有妻子,可以通過(guò)修改的方式替換
24、該妻子n"); return; else temp = (BiTree)malloc(sizeof(BiTNode); printf("請(qǐng)輸入添加妻子的姓名n"); scanf("%s",temp->name); printf("請(qǐng)輸入添加妻子的出生年月(格式形如: 2010-1-1)n"); scanf("%s",temp->birthday); printf("請(qǐng)輸入添加妻子的家庭住址n"); scanf("%s",temp->address)
25、; printf("請(qǐng)輸入添加妻子的婚姻狀況0/1 (0表示未婚,1表示已婚)n"); scanf("%d",&temp->marriage); printf("請(qǐng)輸入添加妻子的在世情況(0表示去世,1表示在世)n"); scanf("%d",&temp->live); if(!temp->live) printf("請(qǐng)輸入添加妻子的去世時(shí)間(格式形如: 2010-1-1)n"); scanf("%s",temp->livemassag
26、e); printf("請(qǐng)輸入添加妻子的性別 0/1 (0表示女,1表示男)n"); scanf("%d",&temp->sex); temp->level = T->level; temp->lc = NULL; temp->rc = NULL; T->lc = temp; T->marriage = true; printf("妻子添加成功n"); return; AddWife(T->lc);AddWife(T->rc);void DeleteByName(BiTre
27、e &T)/刪除某成員(若其還有后代,則一并刪除)/printf("PreOrderTraverse_recursionn");if(T)if(strcmp(T->name,searchname) = 0) count+; T = NULL; return; /printf("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->address,T->marriage,T->live,T->sex);DeleteByName(T->lc);DeleteB
28、yName(T->rc);void FixLevel(BiTree T) if(T) if(strcmp(T->name,searchname) = 0) count = T->level; FixLevel(T->lc); FixLevel(T->rc); void FixRelation(BiTree T)/輸入兩人姓名,確定其關(guān)系 int levo,levt; char levone50,levtwo50; printf("請(qǐng)輸入第一個(gè)人的姓名n"); scanf("%s",searchname); strcpy(le
29、vone,searchname); FixLevel(T); levo = count; if(levo = -1) printf("家譜無(wú)此人,請(qǐng)從新進(jìn)入n"); return; printf("請(qǐng)輸入第二個(gè)人的姓名n"); scanf("%s",searchname); strcpy(levtwo,searchname); FixLevel(T); levt = count; if(levt = -1) printf("家譜無(wú)此人n"); return; if(levo < levt) printf(&q
30、uot;%s 比 %s 大 %d 輩n",levone,levtwo,levt-levo); else if(levo > levt) printf("%s 比 %s 大 %d 輩n",levtwo,levone,levo-levt); else if(levo = levt) printf("%s 和 %s 平輩n",levone,levtwo);void ShowAmend() printf("1.修改姓名n"); printf("2.修改出生年月n"); printf("3.修改家庭
31、住址n"); printf("4.修改婚姻狀況n"); printf("5.修改在世情況n"); printf("6.修改性別n"); printf("7.返回上一級(jí)n"); printf("請(qǐng)輸入選項(xiàng)(1-7): ");void DoAmend(BiTree &T) while(1) system("cls"); ShowAmend(); scanf("%d",&choice); switch(choice) case 1: p
32、rintf("請(qǐng)輸入修改后的姓名: "); scanf("%s",T->name); break; case 2: printf("請(qǐng)輸入修改后的出生年月: "); scanf("%s",T->birthday); break; case 3: printf("請(qǐng)輸入修改后的住址: "); scanf("%s",T->address); break; case 4: printf("請(qǐng)輸入修改后的婚姻狀況: "); scanf("
33、;%d",&T->marriage); break; case 5: printf("請(qǐng)輸入修改后的在世情況: "); scanf("%d",&T->live); if(!T->live) printf("請(qǐng)輸入本人的過(guò)世時(shí)間: "); scanf("%s",T->livemassage); break; case 6: printf("請(qǐng)輸入修改后的性別(1表示男,0表示女): "); scanf("%d",&T-&
34、gt;sex); case 7: return; default: printf("輸入非法,請(qǐng)重新輸入n"); break; void AmendInfo(BiTree &T)/修改某成員信息。 if(T) if(strcmp(T->name,searchname) = 0) count+; DoAmend(T); return; AmendInfo(T->lc);AmendInfo(T->rc); void Sequence(BiTree T)/按出生日期對(duì)家譜中所有人排序。if(T) BiTNodeList *temp; BiTNodeLis
35、t *p; temp = (BiTNodeList *)malloc(sizeof(BiTNodeList); temp->data = T; /p = List; /while(p->) for(p=List; (p->next!=NULL)&&(strcmp(p->next->data->birthday,temp->data->birthday)<0); p=p->next); temp->next = p->next; p->next = temp;Sequence(T->lc);Seq
36、uence(T->rc);void PrintSequence(BiTree T) BiTNodeList *p; p = List; Sequence(T); printf("tttt排序結(jié)果nn"); PrintLine(); printf("n"); while(p->next != NULL) printf(" "); PrintInfo(p->next->data); /printf("t%-10s%-10s%-10s%5d%5d%5dn",p->next->data-
37、>name,p->next->data->birthday,p->next->data->address,p->next->data->marriage,p->next->data->live,p->next->data->sex); p = p->next; printf("n"); PrintLine();void LocateTime() time_t t=time(0); strftime(birthdaytemp,64,"%Y-%m-%d",l
38、ocaltime(&t);void BirthToday(BiTree T)/打開(kāi)一家譜時(shí),提示當(dāng)天生日的健在成員。if(T)if(strcmp(T->birthday,birthdaytemp) = 0) count+; printf("%sn",T->name); BirthToday(T->lc);BirthToday(T->rc); void ShowMenu() PrintBat(); printf("n"); PrintLine(); printf("n"); printf("tt
39、t歡迎進(jìn)入家譜管理系統(tǒng)nn"); printf(" 1.顯示今天生日成員 2.顯示家譜n"); printf(" 3.顯示第n代所有人的信息 4.按姓名查找成員n"); printf(" 5.按出生日期查找成員 6.為成員添加孩子n"); printf(" 7.為成員添加妻子 8.刪除成員n"); printf(" 9.修改成員信息 10.確定兩個(gè)人的關(guān)系n"); printf(" 11.按出生年月排序家譜成員 12.退出程序n"); printf("n&
40、quot;); PrintLine(); printf("n"); printf(" 已經(jīng)從文件讀入初始家譜信息,請(qǐng)輸入您的操作(1-12): ");int main(void) int choice; FILE *in; in = fopen("7.out","r"); BiTree T; CreatBiTree(T,in); /PreOrderTraverse_recursion(T); while(1) system("cls"); ShowMenu(); scanf("%d&q
41、uot;,&choice); getchar(); system("cls"); switch(choice) case 1: LocateTime(); count = 0; BirthToday(T); if(count = 0) printf("今天家譜中沒(méi)有成員過(guò)生日n"); system("pause"); break; case 2: ShowFamilyTree(T); system("pause"); break; case 3: printf("請(qǐng)輸入需要查詢第幾代人: &quo
42、t;); count = 0; scanf("%d",&Nth); ShowNth(T); if(count = 0) printf("第%d代尚未有人。n",Nth); system("pause"); break; case 4: printf("請(qǐng)輸入要查詢?nèi)说男彰? "); scanf("%s",searchname); if(strcmp(T->name,searchname) = 0) printf("此人為家譜的祖先,其信息為:n"); print
43、f("%-10s%-10s%-10s%5d%5d%5dn",T->name,T->birthday,T->address,T->marriage,T->live,T->sex); printf("他妻子的信息為: n"); printf("%-10s%-10s%-10s%5d%5d%5dn",T->lc->name,T->lc->birthday,T->lc->address,T->lc->marriage,T->lc->live,T->lc->sex); temp = T->lc; if(temp->rc) printf("他孩子的信息為:n"); temp = temp->rc; while(temp) printf("%-10s%-10s%-10s%5d%5d%5dn",temp
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生勵(lì)志演講稿三分鐘(32篇)
- 教師節(jié)主持人的演講稿800字(6篇)
- 學(xué)生開(kāi)學(xué)第一課心得體會(huì)
- 浙江省高校招生職業(yè)技能考試大綱(理論)旅游服務(wù)類(lèi)
- 2025年高精密緊固件項(xiàng)目可行性研究報(bào)告
- 2024-2025年中國(guó)手持云臺(tái)市場(chǎng)發(fā)展現(xiàn)狀調(diào)查及投資趨勢(shì)前景分析報(bào)告
- 高校超市可行性研究報(bào)告
- 2024-2025高中語(yǔ)文第七單元情系鄉(xiāng)土第11課玄黑結(jié)婚課后課時(shí)作業(yè)含解析新人教版選修中國(guó)小說(shuō)欣賞
- 中國(guó)LNG船市場(chǎng)深度調(diào)研分析及投資前景研究預(yù)測(cè)報(bào)告
- 2024-2025學(xué)年高中語(yǔ)文第三單元因聲求氣吟詠詩(shī)韻第15課蘇幕遮學(xué)案新人教版選修中國(guó)古代詩(shī)歌散文欣賞
- 安全環(huán)保法律法規(guī)
- 2025年湖南環(huán)境生物職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測(cè)試近5年??及鎱⒖碱}庫(kù)含答案解析
- 《中華人民共和國(guó)學(xué)前教育法》專(zhuān)題培訓(xùn)
- 主題閱讀25:陜北的春
- 晉中項(xiàng)目投決會(huì)報(bào)告
- 2022年中小學(xué)心理健康教育指導(dǎo)綱要
- 公共關(guān)系文書(shū)(《公共關(guān)系學(xué)》課件)
- 2023屆高考復(fù)習(xí)之文學(xué)類(lèi)文本閱讀訓(xùn)練
- 國(guó)家基礎(chǔ)教育實(shí)驗(yàn)中心外語(yǔ)教育研究中心
- 義務(wù)教育(道德與法治)新課程標(biāo)準(zhǔn)(2022年修訂版)
- 100以內(nèi)不進(jìn)位不退位加減法練習(xí)習(xí)題(直接打印)
評(píng)論
0/150
提交評(píng)論