版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 課程名稱: 《數(shù)據(jù)結構》課程設計</p><p> 課程設計題目: 家族關系查詢系統(tǒng)</p><p><b> 目 錄 </b></p><p> 1 課程設計的目的…………………………</p><p> 2 需求分析…………………………………</p><p> 3
2、 課程設計報告內容………………………</p><p> 3.1概要設計…………………………………</p><p> 3.2詳細設計…………………………………</p><p> 3.3調試分析…………………………………</p><p> 3.4用戶手冊………………………………</p><p> 3.5測試結果…
3、………………………………</p><p> 3.6程序清單………………………………</p><p> 4 小結 ………………………………………</p><p> 5 參考文獻 …………………………………</p><p><b> 1.課程設計的目的</b></p><p> (1) 熟練
4、使用 C 語言編寫程序,解決實際問題;</p><p> (2) 了解并掌握數(shù)據(jù)結構與算法的設計方法,具備初步的獨立分析和設計能力;</p><p> (3) 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能;</p><p> (4) 提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力;</p><p>
5、<b> 2.需求分析</b></p><p> 隨著社會發(fā)展,人們使用紙質的家譜已經(jīng)非常不方便而且不利于在家譜里進行添加和修改。而用算法設計一個家族關系查詢系統(tǒng)則可以解決這個問題。數(shù)據(jù)結構的二叉樹剛好滿足家譜的基本結構。首先建立一個文件作為家譜,然后在文件中輸入字符串,實現(xiàn)了在文件中按照數(shù)據(jù)的邏輯關系進進輸入便可建立相應的三叉鏈表。然后就是進行數(shù)據(jù)的存儲、刪除及查找工作。</p&
6、gt;<p><b> 算法分析</b></p><p> 本次設計研究的是建立家族關系,實現(xiàn)對家族成員關系相關查詢的問題。在設計中使用的數(shù)據(jù)結構為樹狀結構,樹狀結構采用三叉鏈表實現(xiàn)。我們在建立好家族關系后將其存儲在文件中,在文件中家族關系是以樹的形式存儲,運用樹的操作使家族關系得以準確建立。 家族關系查詢系統(tǒng)可分為六大模塊,分別是創(chuàng)建、修改、查詢、保存、退出等。建立家族關
7、系模塊,建立家族關系并存入文件。建立時首先輸入家族關系的名稱,以此名稱為名建立文本文件。接下來按層輸入成員姓名,輸入一個在文件中寫入一個字符串,以回車鍵結束。打開一個家族關系。在界面輸入選項名,以家族關系名為文件名打開文件,如果家族關系不存在,返回空;如果存在,打開文件,讀取文件。向家族中添加一個新成員,添加的新成員要根據(jù)其父親確定其在家族中的位置。首先判斷該父親是否在此家族關系中,若存在,則查找其父親,將新節(jié)點插入其父親的最后一個孩子
8、之后;若沒有孩子,直接作為左孩子插入。以寫入的方式打開文件,更新數(shù)組中的信息,然后將數(shù)組中的信息寫入文件保存,關閉文件。查找功能模塊,查找一個成員的所有祖先及其兄弟,查找一個成員的所有祖先路徑,需要從它的父親一直向上查找?guī)ЦY點。查找一個成員的</p><p><b> 源程序</b></p><p> #include <stdio.h> </
9、p><p> #include <stdlib.h> </p><p> #include <string.h> </p><p> #include<conio.h> </p><p> typedef char TElemType; </p><p> typedef in
10、t status; </p><p> typedef struct BiTPNode{ </p><p> TElemType data[10]; </p><p> struct BiTPNode *parent,*lchild,*rchild; //父親及左右孩子指針</p><p> }BiTPNode,*BiPTree; &
11、lt;/p><p> BiPTree P; </p><p> BiPTree T; </p><p><b> //家譜的創(chuàng)建</b></p><p> int Cre() </p><p><b> { </b></p><p> syst
12、em("cls"); </p><p> FILE *fp; //聲明指向文件的指針</p><p> char filename[40],str[10]; </p><p> printf("請輸入家譜名稱:"); </p><p> getchar(); </p><p&
13、gt; gets(filename); //輸入家譜名稱</p><p> while(filename[0]==NULL) </p><p><b> { </b></p><p> printf("家譜名不能為空,請重新輸入:"); </p><p> gets(filename); &
14、lt;/p><p><b> } </b></p><p> if((fp=fopen(filename,"w"))==NULL) </p><p><b> { </b></p><p> printf("%s家譜創(chuàng)建失敗!\n",filename);
15、</p><p> return 0; </p><p><b> } </b></p><p> printf("請輸入家譜內容:\n"); </p><p> while (strlen(gets(str))>0) </p><p><b> {
16、</b></p><p> fputs(str,fp); //向文件寫入字符串</p><p> putc('\n',fp); </p><p><b> } </b></p><p> fclose(fp); //關閉文件</p><p> printf(&
17、quot;按任一鍵繼續(xù)!"); </p><p><b> getch(); </b></p><p> return 1; </p><p><b> } </b></p><p> status loc(BiPTree T,BiPTree &P,TElemType na
18、me[10]){ </p><p><b> if(T)</b></p><p><b> {</b></p><p><b> P=T; </b></p><p><b> //字符串的比較</b></p><p> i
19、f(!strcmp(name,T->data)) return 1; </p><p> if(loc(T->lchild,P,name)) return 1; </p><p> if(loc(T->rchild,P,name)) return 1;</p><p><b> } </b></p><
20、;p><b> else </b></p><p> return 0; </p><p><b> } </b></p><p><b> //構造二叉樹</b></p><p> status inittree(BiPTree &T){ </p
21、><p> T=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p><b> if(T) </b></p><p> return 0; </p><p> T->lchild=NULL; </p><p> T->rchild=NULL
22、; </p><p> T->parent=NULL; </p><p> return 1; </p><p><b> } </b></p><p><b> //載入家譜</b></p><p> status Crt(BiPTree &T){
23、</p><p> FILE *fp; </p><p> BiPTree Q,R,M,N; </p><p> char filename[40],name[10]; </p><p> system("cls"); //清屏</p><p> R=(BiTPNode *)malloc(
24、sizeof(BiTPNode)); //分配存儲空間</p><p> M=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> N=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> printf("請輸入家譜名:"); </p><
25、;p> getchar(); </p><p> gets(filename); </p><p> while(filename[0]==NULL) </p><p><b> { </b></p><p> printf("家譜名不能為空,請重新輸入:"); </p>
26、<p> gets(filename); </p><p><b> } </b></p><p> if((fp=fopen(filename,"r"))==NULL) </p><p><b> { </b></p><p> printf("
27、%s家譜打開失敗!\n",filename); </p><p> return 0; </p><p><b> } </b></p><p> inittree(T); </p><p> fscanf(fp,"%s",name); //從文件讀入姓名</p>&l
28、t;p> strcpy(T->data,name); </p><p> T->lchild=NULL; </p><p> T->rchild=NULL; </p><p> T->parent=NULL; </p><p> fclose(fp); </p><p> if
29、((fp=fopen(filename,"r"))==NULL) </p><p><b> { </b></p><p> printf("%家譜打開失敗!\n",filename); </p><p> return 0; </p><p><b> } &l
30、t;/b></p><p> fscanf(fp,"%s",name); </p><p> while(!feof(fp)){ </p><p> if(loc(T,P,name)){ </p><p> fscanf(fp,"%s",name); </p><p&g
31、t; Q=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> strcpy(Q->data,name); </p><p> P->lchild=Q; //構建孩子</p><p> Q->parent=P; </p><p> Q->lchild=NULL; &l
32、t;/p><p> Q->rchild=NULL; </p><p><b> N=P; </b></p><p><b> } </b></p><p> else if(!loc(T,P,name)){ </p><p> Q=(BiTPNode *)mall
33、oc(sizeof(BiTPNode)); </p><p><b> R=N; </b></p><p> R=R->lchild; </p><p> while(R){ </p><p><b> M=R; </b></p><p> R=R->r
34、child;} </p><p> strcpy(Q->data,name); </p><p> M->rchild=Q; </p><p> Q->parent=M; </p><p> Q->lchild=NULL; </p><p> Q->rchild=NULL;} &
35、lt;/p><p> fscanf(fp,"%s",name); </p><p><b> } </b></p><p> printf("信息載入成功,按任一鍵繼續(xù)!"); </p><p><b> getch(); </b></p>
36、<p> return 1; </p><p><b> } </b></p><p><b> //添加成員</b></p><p> status in(BiPTree &T){ </p><p> char father[10],name[10]; </p&g
37、t;<p> BiPTree Q,M; </p><p> system("cls"); </p><p> printf("請輸入要添加到該家譜中的人的父親姓名:"); </p><p> getchar(); </p><p> gets(father); </p>
38、;<p> while(!loc(T,P,father)){ </p><p> printf("%s不在該家譜中!請重新輸入:",father); </p><p> gets(father);} </p><p> printf("請輸入要添加到該家譜中的人的姓名:"); </p>&l
39、t;p> gets(name); </p><p> Q=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> M=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> strcpy(Q->data,name); </p><p> Q-
40、>lchild=NULL; </p><p> Q->rchild=NULL; </p><p> if(!P->lchild){ </p><p> P->lchild=Q; </p><p> Q->parent=P;} </p><p><b> else { &
41、lt;/b></p><p> P=P->lchild; </p><p> while(P){ </p><p><b> M=P; </b></p><p> P=P->rchild;} </p><p> M->rchild=Q; </p>&
42、lt;p> Q->parent=M; </p><p><b> } </b></p><p> printf("成員添加成功,按任一鍵繼續(xù)!"); </p><p><b> getch(); </b></p><p> return 1; </p&
43、gt;<p><b> } </b></p><p><b> //刪除成員</b></p><p> status de(BiPTree &T){ </p><p> char name[10]; </p><p> system("cls");
44、 </p><p> printf("請輸入要刪除的人的姓名:"); </p><p> getchar(); </p><p> gets(name); </p><p> while(!loc(T,P,name)){ </p><p> printf("%s不在該家譜中!請重
45、新輸入:",name); </p><p> gets(name);} </p><p> if(!P->rchild){ </p><p> if(P->parent->lchild==P) </p><p> P->parent->lchild=NULL; </p><p
46、><b> else </b></p><p> P->parent->rchild=NULL; </p><p> free(P);} </p><p> else if(P->rchild){ </p><p> if(P->parent->lchild==P) <
47、/p><p> P->parent->lchild=P->rchild; </p><p><b> else </b></p><p> P->parent->rchild=P->rchild; </p><p> free(P);} </p><p>
48、 printf("成員刪除成功,按任一鍵繼續(xù)!"); </p><p><b> getch(); </b></p><p> return 1; </p><p><b> }</b></p><p> status Show(TElemType e[10]){ <
49、;/p><p> printf("%s ",e); </p><p> return 1; </p><p><b> } </b></p><p><b> //二叉樹的遍歷</b></p><p> status pre(BiPTree T,s
50、tatus(*visit)(TElemType[10])){ </p><p><b> if(T) { </b></p><p> if ((*visit)(T->data)) </p><p> if (pre(T->lchild,visit)) </p><p> if (pre(T->r
51、child,visit)) return 1; </p><p> return 0; </p><p><b> } </b></p><p> else return 1; </p><p><b> } </b></p><p><b> //家族成
52、員查詢</b></p><p> status Sea(BiPTree T){ </p><p> char name[10]; </p><p> BiPTree N; </p><p> N=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p> sys
53、tem("cls"); </p><p> printf("請輸入要查尋的人的姓名:"); </p><p> getchar(); </p><p> gets(name); </p><p> while(!loc(T,P,name)){ </p><p> pri
54、ntf("%s不在該家譜中!請重新輸入:",name); </p><p> gets(name);} </p><p><b> N=P; </b></p><p><b> if(P==T) </b></p><p> printf("%s的父親在該家譜中沒
55、有記載!\n",P->data); </p><p><b> else { </b></p><p> while(N->parent->rchild==N) </p><p> N=N->parent; </p><p> printf("%s的父親是:%s\n&q
56、uot;,P->data,N->parent->data);} </p><p><b> N=P; </b></p><p><b> if(P==T) </b></p><p> printf("%s沒有兄弟!\n",P->data); </p><
57、p> else if(!P->rchild&&P->parent->rchild!=P) </p><p> printf("%s沒有兄弟!\n",P->data); </p><p><b> else { </b></p><p> printf("%s的兄
58、弟有:\n",name); </p><p> while(N->rchild){ </p><p> printf("%s ",N->rchild->data); </p><p> N=N->rchild;} </p><p><b> N=P; </b>
59、</p><p> while(N->parent->rchild==N){ </p><p> printf("%s ",N->parent->data); </p><p> N=N->parent;} </p><p> printf("\n"); </
60、p><p><b> } </b></p><p><b> if(P==T) </b></p><p> printf("%s的祖先在該家譜中沒有記載!\n",name); </p><p><b> else </b></p><
61、p> printf("%s的祖先是:%s\n",name,T->data); </p><p><b> N=P; </b></p><p> if(!P->lchild){ </p><p> printf("%s沒有孩子!\n",name); </p><
62、p> printf("%s沒有后代\n",name);} </p><p><b> else { </b></p><p> printf("%s的孩子有:\n",name); </p><p> printf("%s ",P->lchild->data);
63、 </p><p> N=N->lchild; </p><p> while(N->rchild){ </p><p> printf("%s ",N->rchild->data); </p><p> N=N->rchild;} </p><p> pri
64、ntf("\n"); </p><p> printf("%s的后代有:\n",name); </p><p> pre(P->lchild,Show); </p><p> printf("\n"); </p><p><b> } </b>&l
65、t;/p><p> printf("按任一鍵繼續(xù)!"); </p><p><b> getch(); </b></p><p> return 1; </p><p><b> } </b></p><p><b> //文件的創(chuàng)建<
66、;/b></p><p> status write(BiPTree T,char filename[40]){ </p><p> FILE *fp; </p><p> if((fp=fopen(filename,"a+"))==NULL) </p><p><b> { </b>&
67、lt;/p><p> printf("%s文件創(chuàng)建失敗!\n",filename); </p><p> return 0; </p><p><b> } </b></p><p> fprintf(fp,"%s ",T->data); </p><
68、p> T=T->lchild; </p><p> while(T){ </p><p> fprintf(fp,"%s ",T->data); </p><p> T=T->rchild;} </p><p> fprintf(fp,"\n"); //輸出</p
69、><p> fclose(fp); </p><p> return 1; </p><p><b> } </b></p><p> status prewrite(BiPTree T,status(*visit)(BiPTree,char[40]),char filename[40]){ </p>
70、<p><b> if(T) { </b></p><p> if (T->lchild) </p><p> (*visit)(T,filename); </p><p> prewrite(T->lchild,visit,filename); </p><p> prewrite(T-
71、>rchild,visit,filename); </p><p> return 1;} </p><p> else return 1; </p><p><b> }</b></p><p> status wrong() </p><p><b> { </
72、b></p><p><b> char a; </b></p><p> scanf("%c",&a); </p><p> printf("無此選項,請重新選擇!(按任一鍵繼續(xù)!)"); </p><p><b> getch(); </b
73、></p><p> return 1; </p><p><b> } </b></p><p><b> //家譜的存儲</b></p><p> status Sav(BiPTree T){ </p><p> FILE *fp; </p>
74、<p> char filename[40]; </p><p> system("cls"); </p><p> printf("請輸入新的文件名:"); </p><p> getchar(); </p><p> gets(filename); </p>&l
75、t;p> while(filename[0]==NULL) </p><p><b> { </b></p><p> printf("家譜名不能為空,請重新輸入:"); </p><p> gets(filename); </p><p><b> } </b>
76、</p><p> prewrite(T,write,filename); </p><p> printf("%s家譜保存成功,按任一鍵繼續(xù)!",filename); </p><p><b> getch(); </b></p><p> return 1; </p><
77、;p><b> } </b></p><p><b> //修改家譜</b></p><p> status Upd(){ </p><p> system("cls"); </p><p><b> int xz; </b></p&g
78、t;<p><b> while(1) </b></p><p><b> { </b></p><p> system("cls"); </p><p> printf("\n\n\n\n");</p><p> printf(&qu
79、ot; 家族成員的添加與刪除操作 \n");</p><p> printf(" 請選擇 \n");</p><p> printf(" 1.添加成員. \n"); </p><p> printf(" 2.刪除成員. \n&
80、quot;); </p><p> printf(" 3.返回上一級. \n"); </p><p> printf(" 請選擇:"); </p><p> scanf("%d",&xz); </p><p> switch(xz) <
81、;/p><p><b> { </b></p><p> case 1 : in(T);break; </p><p> case 2 : de(T);break; </p><p> case 3 : return 0; </p><p><b> default :</b
82、></p><p><b> wrong();</b></p><p><b> break; </b></p><p><b> } </b></p><p><b> } </b></p><p><b>
83、; }</b></p><p><b> main() </b></p><p><b> { </b></p><p> P=(BiTPNode *)malloc(sizeof(BiTPNode)); </p><p><b> int xz; </b>
84、</p><p><b> while(1) </b></p><p><b> { </b></p><p> system("cls"); </p><p> printf("\n\n\n\n"); </p><p> p
85、rintf(" 家族關系查詢系統(tǒng) \n"); </p><p> printf(" 具體操作如下 \n"); </p><p> printf(" 1.創(chuàng)建家譜. \n"); </p><p> printf(" 2.
86、載入家譜. \n"); </p><p> printf(" 3.修改家譜. \n"); </p><p> printf(" 4.查尋成員. \n"); </p><p> printf(" 5.保存家譜.
87、 \n"); </p><p> printf(" 6.退出程序. \n"); </p><p> printf(" 請選擇操作:"); </p><p> scanf("%d",&xz); </p><p> switc
88、h(xz) </p><p><b> { </b></p><p><b> case 1 : </b></p><p><b> Cre();</b></p><p><b> break; </b></p><p>&
89、lt;b> case 2 : </b></p><p><b> Crt(T);</b></p><p><b> break; </b></p><p><b> case 3 : </b></p><p><b> Upd();<
90、/b></p><p><b> break; </b></p><p><b> case 4 : </b></p><p><b> Sea(T);</b></p><p><b> break; </b></p><
91、p><b> case 5 : </b></p><p><b> Sav(T);</b></p><p><b> break; </b></p><p><b> case 6 : </b></p><p> return 0; <
92、;/p><p><b> default :</b></p><p><b> wrong();</b></p><p><b> break; </b></p><p><b> } </b></p><p><b>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結構課程設計--家族關系查詢系統(tǒng)
- 數(shù)據(jù)結構課程設計-- 家族關系查詢系統(tǒng)
- 數(shù)據(jù)結構課程設計-學生成績查詢系統(tǒng)
- 《數(shù)據(jù)結構課程設計》航班查詢系統(tǒng)實驗報告
- 數(shù)據(jù)結構課程設計--數(shù)據(jù)結構課程設計----huffman編碼
- 數(shù)據(jù)結構宿舍管理查詢軟件課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計--航班信息查詢與檢索系統(tǒng)
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計
- 數(shù)據(jù)結構課程設計---數(shù)據(jù)結構相關算法的演示系統(tǒng)
- 數(shù)據(jù)結構課程設計--數(shù)據(jù)結構的實現(xiàn)
評論
0/150
提交評論