




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、鄭州輕工業(yè)學(xué)院課程設(shè)計任務(wù)書題目專業(yè)、班級 軟件外包11-01 學(xué)號541107080145 姓名 周朱莉主要內(nèi)容、基本要求、主要參考資料等: 主要內(nèi)容:建立家族關(guān)系數(shù)據(jù)庫,實現(xiàn)對家族成員關(guān)系的相關(guān)查詢基本要求:(1)建立家族關(guān)系并能存儲到文件中;(2)實現(xiàn)家族成員的添加。(3)可以查詢家族成員的雙親、祖先、兄弟、孩子和后代等信息。課程設(shè)計按照教學(xué)要求需要一周時間完成,總共要上機調(diào)試程序10小時。對每個題目要有需求分析,在需求分析中,將題目中要求的功能進行敘述分析, 并且設(shè)計解決此問題的數(shù)據(jù)存儲結(jié)構(gòu),設(shè)計或敘述解決此問題的算法,描述算法 建議使用流程圖,進行算法分析指明關(guān)鍵語句的時間復(fù)雜度。
2、給出實現(xiàn)功能的一 組或多組測試數(shù)據(jù),程序調(diào)試后,將按照此測試數(shù)據(jù)進行測試的結(jié)果列出來。源程序要按照寫程序的規(guī)則來編寫。要結(jié)構(gòu)清晰,重點函數(shù)的重點變量, 重點功能部分要加上清晰的程序注釋。程序能夠運行,要有基本的容錯功能。盡量避免出現(xiàn)操作錯誤時出現(xiàn)死循環(huán);主要參考資料:數(shù)據(jù)結(jié)構(gòu)(C語言版),在網(wǎng)上查詢的相關(guān)資料及部 分代碼完成期限:2013618-2013620指導(dǎo)教師簽名:課程負責(zé)人簽名:2013 年 6 月 18 日鄭州輕工業(yè)學(xué)院本科數(shù)據(jù)結(jié)構(gòu)課程設(shè)計總結(jié)報告設(shè)計題目 :家族關(guān)系查詢系統(tǒng) 學(xué)生姓名 :周朱莉 系 別:計算機與通信工程 專 業(yè):軟件外包 班 級: 11-01 學(xué) 號: 54110
3、7080145 指導(dǎo)教師 :盧冰2013 年 6 月 20 日一、設(shè)計題目(任選其一)家族關(guān)系查詢系統(tǒng)二、運行環(huán)境(軟、硬件環(huán)境)電腦及 Visual C+6.0三、算法設(shè)計的思想隨著社會發(fā)展,人們使用紙質(zhì)的家譜已經(jīng)非常不方便 而且不利于在家譜里進行添加和修改。而用算法設(shè)計一個 家族關(guān)系查詢系統(tǒng)則可以解決這個問題。數(shù)據(jù)結(jié)構(gòu)的二叉 樹剛好滿足家譜的基本結(jié)構(gòu)。首先建立一個文件作為家譜,然后在文件中輸入字符 串,實現(xiàn)了在文件中按照數(shù)據(jù)的邏輯關(guān)系進進輸入便可建 立相應(yīng)的三叉鏈表。然后就是進行數(shù)據(jù)的存儲、刪除及查 找工作。四、算法的流程圖家譜的創(chuàng)建:7 / 29開始結(jié)束載入家譜:開始輸入家譜名家譜打開失
4、敗結(jié)束修改家譜:開始選擇刪除成員添加成員返回上一級輸入成員姓名成員是否存在?刪除成功成員查詢:開始輸入成員名成員是否存在?I是輸出成員信息結(jié)束五、算法設(shè)計分析本次設(shè)計研究的是建立家族關(guān)系,實現(xiàn)對家族成員關(guān) 系相關(guān)查詢的問題。在設(shè)計中使用的數(shù)據(jù)結(jié)構(gòu)為樹狀結(jié)構(gòu), 樹狀結(jié)構(gòu)采用三叉鏈表實現(xiàn)。我們在建立好家族關(guān)系后將 其存儲在文件中,在文件中家族關(guān)系是以樹的形式存儲, 運用樹的操作使家族關(guān)系得以準(zhǔn)確建立。家族關(guān)系查詢系 統(tǒng)可分為六大模塊,分別是創(chuàng)建、修改、查詢、保存、退 出等。建立家族關(guān)系模塊,建立家族關(guān)系并存入文件。建 立時首先輸入家族關(guān)系的名稱,以此名稱為名建立文本文 件。接下來按層輸入成員姓名,
5、輸入一個在文件中寫入一 個字符串,以回車鍵結(jié)束。打開一個家族關(guān)系。在界面輸 入選項名,以家族關(guān)系名為文件名打開文件,如果家族關(guān) 系不存在,返回空;如果存在,打開文件,讀取文件 。向 家族中添加一個新成員,添加的新成員要根據(jù)其父親確定 其在家族中的位置。 首先判斷該父親是否在此家族關(guān)系中, 若存在,則查找其父親,將新節(jié)點插入其父親的最后一個 孩子之后;若沒有孩子,直接作為左孩子插入。以寫入的 方式打開文件,更新數(shù)組中的信息,然后將數(shù)組中的信息 寫入文件保存,關(guān)閉文件。查找功能模塊,查找一個成員 的所有祖先及其兄弟,查找一個成員的所有祖先路徑,需 要從它的父親一直向上查找?guī)ЦY(jié)點。查找一個成員的兄
6、 弟,一個成員的兄弟為其父親除了該結(jié)點以外的所有孩子。 對于要操作的結(jié)點, 先判斷它是否是根結(jié)點, 若是根結(jié)點, 則無兄弟;若不是根結(jié)點,則找到該結(jié)點的父親。接著判 斷父親的兄弟是否都存在,如果都不存在,則無兄弟;如 果都存在,對父親的孩子操作。六、源代碼#include <stdio.h>#include <stdlib.h>#include <string.h>#include<conio.h>typedef char TElemType;typedef int status;typedef struct BiTPNodeTElemType
7、data10;struct BiTPNode *parent,*lchild,*rchild;/父親及左右孩子指針BiTPNode,*BiPTree;BiPTree P;BiPTree T;/家譜的創(chuàng)建int Cre()system("cls");FILE *fp; / 聲明指向文件的指針char 40,str10;printf(" 請輸入家譜名稱 :");getchar();gets(); / 輸入家譜名稱while(0=NULL)printf(" 家譜名不能為空 ,請重新輸入 :");gets();9/ 29if(fp=fopen
8、(,"w")=NULL)printf("%s 家譜創(chuàng)建失敗 !n",);return 0;printf(" 請輸入家譜內(nèi)容 :n");while (strlen(gets(str)>0)fputs(str,fp); / 向文件寫入字符串putc('n',fp);fclose(fp); / 關(guān)閉文件printf(" 按任一鍵繼續(xù) !");getch();return 1; status loc(BiPTree T,BiPTree &P,TElemType name10)if(T)P=T;
9、/字符串的比較if(!strcmp(name,T ->data) return 1;if(loc(T ->lchild,P,name) return 1;if(loc(T ->rchild,P,name) return 1;else return 0;/構(gòu)造二叉樹status inittree(BiPTree &T)T=(BiTPNode *)malloc(sizeof(BiTPNode); if(T)return 0;T->lchild=NULL;T->rchild=NULL;T ->parent=NULL; return 1;/載入家譜 stat
10、us Crt(BiPTree &T)FILE *fp;BiPTree Q,R,M,N;char 40,name10;system("cls"); / 清屏/分配存R=(BiTPNode *)malloc(sizeof(BiTPNode); 儲空間M=(BiTPNode *)malloc(sizeof(BiTPNode);N=(BiTPNode *)malloc(sizeof(BiTPNode);printf(" 請輸入家譜名 :"); getchar();gets();while(0=NULL)printf(" 家譜名不能為空 ,請重新
11、輸入 :")gets();if(fp=fopen(,"r")=NULL)printf("%s 家譜打開失敗 !n",);return 0; inittree(T); fscanf(fp,"%s",name); / 從文件讀入姓名 strcpy(T ->data,name); T->lchild=NULL; T->rchild=NULL;T ->parent=NULL;fclose(fp);if(fp=fopen(,"r")=NULL)printf("% 家譜打開失敗 !n
12、",); return 0; fscanf(fp,"%s",name); while(!feof(fp) if(loc(T,P,name) fscanf(fp,"%s",name);Q=(BiTPNode *)malloc(sizeof(BiTPNode); strcpy(Q ->data,name); P->lchild=Q; / 構(gòu)建孩子 Q->parent=P;Q->lchild=NULL;Q->rchild=NULL;N=P;else if(!loc(T,P,name)Q=(BiTPNode *)mallo
13、c(sizeof(BiTPNode);R=N;R=R ->lchild;while(R)M=R;R=R ->rchild;strcpy(Q ->data,name);M ->rchild=Q;Q ->parent=M;Q ->lchild=NULL;Q ->rchild=NULL;fscanf(fp,"%s",name);printf(" 信息載入成功 ,按任一鍵繼續(xù) !");getch();return 1;/添加成員 status in(BiPTree &T)char father10,name10;
14、BiPTree Q,M;system("cls");printf(" 請輸入要添加到該家譜中的人的父親姓名 :");getchar();gets(father);while(!loc(T,P,father)printf("%s 不在該家譜中 ! 請重新輸入 :",father); gets(father);printf(" 請輸入要添加到該家譜中的人的姓名 :");gets(name);Q=(BiTPNode *)malloc(sizeof(BiTPNode);M=(BiTPNode *)malloc(sizeof
15、(BiTPNode);strcpy(Q ->data,name);Q->lchild=NULL;Q->rchild=NULL;if(!P ->lchild)P->lchild=Q;Q ->parent=P;else P=P->lchild;while(P)M=P;P=P->rchild;M ->rchild=Q;Q ->parent=M;printf(" 成員添加成功 ,按任一鍵繼續(xù) !");getch();return 1;/刪除成員status de(BiPTree &T) char name10; s
16、ystem("cls");printf(" 請輸入要刪除的人的姓名 :"); getchar();gets(name);while(!loc(T,P,name)printf("%s 不在該家譜中 ! 請重新輸入 :",name); gets(name);if(!P ->rchild)if(P ->parent ->lchild=P)P->parent->lchild=NULL;elseP->parent->rchild=NULL;free(P);else if(P->rchild)if(
17、P ->parent ->lchild=P)P->parent->lchild=P ->rchild;elseP->parent->rchild=P ->rchild;free(P);printf(" 成員刪除成功 ,按任一鍵繼續(xù) !");getch();return 1; status Show(TElemType e10) printf("%s ",e); return 1;/二叉樹的遍歷status pre(BiPTree T,status(*visit)(TElemType10)if(T) if (
18、*visit)(T ->data)if (pre(T ->lchild,visit)if (pre(T ->rchild,visit) return 1;return 0;else return 1;/家族成員查詢status Sea(BiPTree T)char name10;BiPTree N;N=(BiTPNode *)malloc(sizeof(BiTPNode);system("cls");printf(" 請輸入要查尋的人的姓名 :");getchar();gets(name);while(!loc(T,P,name)pri
19、ntf("%s 不在該家譜中 ! 請重新輸入 :",name);gets(name);N=P;if(P=T)printf("%s 的 父 親 在 該 家 譜 中 沒 有 記載 !n",P ->data);else while(N ->parent->rchild=N)N=N ->parent;printf("%s 的 父 親是:sn",P ->data,N->parent->data);N=P;if(P=T)printf("%s 沒有兄弟 !n",P ->data);
20、else if(!P->rchild&&P ->parent->rchild!=P)printf("%s 沒有兄弟 !n",P ->data);else printf("%s 的兄弟有 :n",name);while(N ->rchild)printf("%s ",N ->rchild ->data);N=N ->rchild;N=P;while(N ->parent->rchild=N)printf("%s ",N ->parent
21、->data);N=N ->parent;printf("n");if(P=T)printf("%s 的 祖 先 在 該 家 譜 中 沒 有 記 載!n ”, name);elseprintf("%s 的祖先是 :%sn",name,T ->data); N=P;if(!P ->lchild)printf("%s 沒有孩子 !n",name);printf("%s 沒有后代 n",name); else printf("%s 的孩子有 :n",name);pri
22、ntf("%s ",P ->lchild ->data);N=N ->lchild;while(N ->rchild)printf("%s ",N ->rchild ->data);N=N ->rchild;printf("n");printf("%s 的后代有 :n",name);pre(P ->lchild,Show);printf("n");printf(" 按任一鍵繼續(xù) !");getch();return 1;/文件的
23、創(chuàng)建status write(BiPTree T,char 40)FILE *fp;if(fp=fopen(,"a+")=NULL)printf("%s 文件創(chuàng)建失敗 !n",);return 0;fprintf(fp,"%s ",T ->data);T=T ->lchild; while(T)fprintf(fp,"%s ",T ->data);T=T ->rchild; fprintf(fp,"n"); / 輸出 fclose(fp);return 1; status
24、 prewrite(BiPTreeT,status(*visit)(BiPTree,char40),char 40)if(T) if (T ->lchild)(*visit)(T,);prewrite(T ->lchild,visit,);prewrite(T ->rchild,visit,);return 1;else return 1;status wrong()char a;scanf("%c",&a);printf(" 無此選項 ,請重新選擇 !( 按任一鍵繼 續(xù)!)");getch();return 1;/家譜的存儲s
25、tatus Sav(BiPTree T)FILE *fp;char 40;system("cls");printf(" 請輸入新的文件名 :");getchar();gets();while(0=NULL)printf(" 家譜名不能為空 ,請重新輸入 :"); gets();prewrite(T,write,);printf("%s 家譜保存成功 ,按任一鍵繼續(xù) !",); getch();return 1; /修改家譜status Upd() system("cls");int xz;whi
26、le(1) system("cls");printf("nnnn");prin tf("(*A A*) 家族成員的添加與刪除操作(*A A*)n");prin tf("(*AA*)請選擇(*A A*)n");printf("(*AA*)1.添加成員 .(*A A*)n");printf("(*AA*)2.刪除成員 .(*A A*)n");29 / 29prin tf(" (*A八*)3.返回上一級 . A*printf("請選擇 :");scan
27、f("%d",&xz);switch(xz)case 1 : in(T);break;case 2 : de(T);break;case 3 : return 0; default :wrong();break;main()P=(BiTPNode *)malloc(sizeof(BiTPNode);int xz;while(1)system("cls"); printf("nnnn");prin tf("(*AA*)家族關(guān)系查詢系統(tǒng)(*A A*)n");prin tf("(*AA*)具體操作如下(*A A*)n");printf("(*AA*)1.創(chuàng)建家譜 .(*A A*)n");printf("(*AA*)2.載入家譜 .(*A A*)n");printf("(*AA*)3.修改家譜 .(*A A*)n");printf("(*AA*)4.查尋成員
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級未來發(fā)展的愿景與規(guī)劃計劃
- 老師個人專業(yè)發(fā)展目標(biāo)計劃
- 急診工作中的時間管理計劃
- 杭州某樓盤營銷工作總結(jié)
- 電子商務(wù)系統(tǒng)的分析與設(shè)計第1章
- 客戶需求分析課程
- 統(tǒng)編版小學(xué)語文二年級下冊第14課《小馬過河》精美課件
- 統(tǒng)編版小學(xué)語文二年級下冊《快樂讀書吧》精美課件
- 2025年高中地理壓軸題答題技巧分享教你快速拿高分
- 第5課+古代非洲與美洲+高一歷史下學(xué)期統(tǒng)編版(2019)必修中外歷史綱要下
- 2025體育單招英語備考100個高頻名詞精講(精校打印版)
- 2024-2025學(xué)年人教版數(shù)學(xué)七下 第七章 相交線與平行線(含答案)
- 肖申克的救贖的英語ppt
- 安裝超載限制器方案
- 《石灰吟》教學(xué)設(shè)計(課堂實錄)
- 架子工實操比賽方案(共19頁)
- X62W銑床主軸機械加工工藝規(guī)程及鉆床夾具設(shè)計
- (完整版)粉筆數(shù)量關(guān)系聽課筆記(整理版)
- 人教版七年級數(shù)學(xué)下冊:7.1.2平面直角坐標(biāo)系ppt課件
- 工程建設(shè)項目招投標(biāo)投訴書(僅供參考)
- 城市規(guī)劃設(shè)計編制與收收費標(biāo)準(zhǔn)
評論
0/150
提交評論