家族關系查詢系統(tǒng)_第1頁
家族關系查詢系統(tǒng)_第2頁
家族關系查詢系統(tǒng)_第3頁
家族關系查詢系統(tǒng)_第4頁
家族關系查詢系統(tǒng)_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、課程設計說明書 題目: 家族關系查詢系統(tǒng) 姓 名: 院 (系): 信 息 工 程 學 院 專業(yè)班級:16級計算機科學與技術二班 學 號: 指導教師: 成 績: 時間: 2018 年1 月 2日至 2018 年 1 月 11 日 課程設計任務書 題目 家族關系查詢系統(tǒng) 專業(yè)、班級16級計算機科學與技術二班 學號 姓名 基本要求:1、建立家族關系并能存儲到文件;2、對于建立的家族關系能夠遍歷家族成員,輸入兩個人的名字能夠確定二人的關系;3、實現(xiàn)家族成員的添加。4、可以查詢家族成員的雙親、祖先、兄弟、孩子和后代等信息。主要參考資料:【1】嚴蔚敏、吳偉民.數(shù)據(jù)結構(C語言版).清華大學出版社【2】滕國

2、文.數(shù)據(jù)結構課程設計.清華大學出版社【3】譚浩強.C程序設計(第四版).清華大學出版社 完 成 期 限: 2018.1.2-2018.1.11 指導教師簽名: 課程負責人簽名: 目 錄1、課程設計介紹41.1課程設計內容41.2課程設計要求41.3課程設計性質41.4課程設計目的42、課程設計原理42.1課程設計題目分析2.1.1程序執(zhí)行的命令包括52.12程序中的四大模塊52.2 課程設計原理圖分析52.2.1 功能模塊圖52.2.2 流程圖分析63、數(shù)據(jù)結構分析93.1 存儲結構93.2 算法描述104、調試與分析104.1 調試過程104.2執(zhí)行過程114.3運行時的界面12結束語14參

3、考文獻15附錄161 課程設計介紹11、 課程設計內容運用隊列的存儲結構,構建家族關系樹。輸入家族的名稱,以此名稱作文件的名稱,建立文本文件。按層次輸入結點信息,在文件中每個人的信息占一行,同時保存到樹的存儲結構中。輸入一個結點,若此結點有多個兄弟,以“”作為兄弟結點的結束標志,結點若無孩子,直接以“”作為標志,依次輸入各個結點的信息,以“#”作為結束的標志。輸入結點的序列為zhangxianzu,zhangguoyu,zhangguojun,zhangguoqiang,zhangyongzhi,zhangyongrui,zhangyongming,zhangwende,zhangwenjia

4、,#。建立家族關系樹后,對樹進行一些基本操作。首先,對家族關系樹遍歷,確定家族成員已存入文件,并檢驗是否成功建立家族關系樹。輸入兩個人的姓名,判斷此二人是否屬于此家族,若屬于就判斷此二人的關系。最后,能夠成功退出家族關系查詢系統(tǒng)。12、 課程設計要求構建家族關系樹。使用隊列的存儲結構,建立家族關系查詢系統(tǒng)樹。采用指針數(shù)組作為隊列,保存結點輸入的地址。能夠遍歷家族關系樹。遍歷家族成員,檢驗輸出信息是否滿足要求。成功地判斷所輸入的兩個人是否是家族中得人,如果屬于就判斷兩人的關系。最后,若選擇退出,能夠成功退出家族關系查詢系統(tǒng)。否則,繼續(xù)輸入相關操作。13、課程設計的性質通過數(shù)據(jù)結構的學習,使自己對

5、軟件編程能力有一定的提高。數(shù)據(jù)結構學習是鍛煉學生在進一步掌握模塊化、結構化程序設計的方法的同時,培養(yǎng)自己運用已學知識分析問題、解決問題及編寫實用程序的能力,通過對線性化、層次化、網(wǎng)絡化數(shù)據(jù)結構的了解進一步掌握自然數(shù)據(jù)的結構方式及組織方式,讓自己深入體會存儲在計算機中的數(shù)據(jù)及程序,如何運用數(shù)據(jù)實現(xiàn)編程。加深自己對該課程所學內容的進一步的理解與鞏固,是將計算機課程與實際問題相聯(lián)接的關鍵步驟。通過課程設計,能夠提高自己分析問題、解決問題,從而運用所學知識解決實際問題的能力。 1.4、課程設計的目的主要目的如下:1、培養(yǎng)學生運用算法與數(shù)據(jù)結構的基本知識解決實際編程中的數(shù)據(jù)結構設計和算法設計問題。2、培

6、養(yǎng)學生獨立設計程序與解決問題的能力,培養(yǎng)學生團隊協(xié)作集成程序模塊及調試能力。3、培養(yǎng)學生初步的軟件設計及軟件測試的能力。 2.課程設計原理2.1、課程設計題目分析演示程序以用戶和計算機的對話的方式執(zhí)行,即在計算機終端上顯示“提示信息”之后,由用戶在鍵盤上輸入相應的數(shù)據(jù)(即每個人都所持的密碼),每個人的序號由程序自動分配。2.1.1程序執(zhí)行的命令包括:(1)構造家族關系查詢系統(tǒng)(使用樹的存儲結構);(2)根據(jù)提示及使用者的需求,用戶選擇相關選項,輸入相關數(shù)據(jù);(3)執(zhí)行用戶所選的選項對應的程序,滿足用戶需求,實現(xiàn)相關功能;(4)退出家族關系查詢系統(tǒng),結束操作。2.1.2程序中的四個大模塊(本程序

7、共有六個模塊,其中查找模塊又分為六個):(1)家族成員信息錄入(構造家族關系查詢系統(tǒng))模塊。此模塊將對家族關系樹初始化,根據(jù)用戶輸入的信息構造家族關系查詢系統(tǒng)樹,并提醒用戶再次輸入數(shù)據(jù)以便后續(xù)程序的使用。(2)遍歷家族成員模塊。此模塊將滿足用戶遍歷家族關系查詢系統(tǒng)樹中的各個成員。另外,可以檢測用戶輸入的信息是否正確,以及瀏覽家族中的人員。(3)確定兩個家族成員的關系模塊。由用戶輸入兩個人的名字,此模塊實現(xiàn)在整個程序中查找,確定是否有用戶輸入的人。如果有,則輸出兩人的之間的關系(即他們相差幾代)。(4)主程序中的退出模塊。根據(jù)用戶輸入的信息管理控制變量,根據(jù)控制變量判斷是否退出程序。2.2、課程

8、設計原理圖分析2.2.1、功能模塊圖家族關系查詢系統(tǒng)主函數(shù)建立家族關系樹遍歷家族關系樹航空訂票系統(tǒng)主菜單確定家族成員中兩人關系2.2.2、流程圖分析1、此部分是家族關系查詢系統(tǒng)的主函數(shù)。首先,初始化程序中所需要的變量;在輸出提示性的語句,等待用戶輸入將要進行的操作的選項,根據(jù)用戶輸入的數(shù)據(jù)調用相關的函數(shù)。開始聲明變量t、f初始化flag=1,start1=1flag=1 N Y提示用戶輸入d的值0<d<7 Nd>1&&start1 Y Y N 調用相關函數(shù)退出2、此部分是創(chuàng)建家族關系樹函數(shù),并且保存到文件。用隊列的存儲結構輔助創(chuàng)建樹。輸入成員信息并存入文件,開

9、始建樹將文件中的一個結點入隊str0!=# Nstr0!= Y N Yroot=NULL N Y建立樹的頭結點取隊頭作結點的雙親,flag=0 N Y接雙親結點的左孩子接雙親結點的右孩子start2=0 N Y隊頭元素出隊成功建立家族關系樹3、此部分是遍歷家族成員函數(shù)。采用遞歸的思想,對家族關系樹進行遍歷。傳入一個結點tt=NULL Y N輸出結點信息,t=t->lchild t=NULL N Y輸出結點信息,t=t->rchildt=NULL N Y返回上級調用結束4、此部分是確定家族成員中兩人關系的函數(shù)。由用戶輸入兩個人的姓名,系統(tǒng)調用Confirm()函數(shù)判斷此二人是否屬于此

10、家族。若屬于,判斷兩人的關系。輸入姓名調用confirm()函數(shù)t=NULL輸出誰不是家族中的人輸出兩人的關系3、數(shù)據(jù)結構分析3.1、存儲結構根據(jù)要求首先應該建立一個隊列,用隊列的存儲結構輔助實現(xiàn)家族關系樹的建立。樹是n(>=0)個結點的有限集。在任意一棵非空樹中:(1)有且僅有一個特定的稱為根的結點;(2)當n>1時,其余結點可分為m個互不相交的有限集,其中每個集合本身又是一棵樹。設置結構體存儲節(jié)點:用結構體存儲每一個家族成員的基本信息,及結點的左右孩子指針和雙親指針;再使用結構體存儲表示隊列結點。樹的結點結構體:typedef struct TNodechar nameM;st

11、ruct TNode *parent;struct TNode *lchild;struct TNode *rchild;Tree;隊列結點結構體:typedef struct NodeTree *info;struct Node *next;Node;typedef structstruct Node *front;struct Node *rear;LQ;3.2、算法描述1、用戶進入家族關系查詢系統(tǒng),根據(jù)提示輸入要進行的操作所對應的選項,用戶輸入的數(shù)據(jù)被d接收,系統(tǒng)判斷d是否大于7并小于1,如果是,則提醒用戶重新輸入。否則調用相關函數(shù),執(zhí)行相應的功能。若用戶輸入的d的值在1-6之間,如果用

12、戶第一次輸入的數(shù)值大于1,則系統(tǒng)會提醒用戶先建立家族關系樹。2、建立家族關系樹。用戶輸入家族名稱,系統(tǒng)根據(jù)家族名稱建立對應的文件,用戶輸入結點信息,系統(tǒng)先將信息保存到文件和fnameM數(shù)組中。在建樹時,將結點的信息從fnameM數(shù)組中復制給str,系統(tǒng)判斷str0是否等于#,并且是否等于,直接執(zhí)行下面的語句,第一次傳入結點時,root等于NULL,建立頭結點,再次傳入結點時,如果str0等于,內部循環(huán)結束,接著出入結點,再次此判斷str0是否等于,不等于的話,執(zhí)行內部循環(huán),取對頭元素,判斷flag是否等于0,如果等于0,將結點接在所取對頭的左孩子上,否則接在右孩子上。在執(zhí)行外循環(huán)時,如果sta

13、rt2不等于0時,刪除對頭元素。3、查詢兩個家族成員的關系。由用戶輸入兩個人的姓名,Relation()函數(shù)調用Confirm()函數(shù),確認用戶所輸入成員姓名是否屬于此家族中的成員。如果屬于,用xM存放對應的結點,并令全局變量z等于1,在執(zhí)行Relation()函數(shù)時,判斷z的值,確定此人是否屬于這個家族。若屬于,令結點不停的指向它的父親結點,直到父親結點是根結點,同時應整數(shù)形式的wM控制執(zhí)行的次數(shù),作為判斷是第幾代的根據(jù)。最后,根據(jù)wM判斷兩人相差幾代。4、退出家族關系查詢系統(tǒng)。在主函數(shù)中,用戶選擇退出選項在(即輸入6),系統(tǒng)執(zhí)行flag等于0,即控制外循環(huán)的變量為0,循環(huán)結束,成功退出家族

14、關系查詢系統(tǒng)。4、調試與分析4.1、調試過程在調試程序是主要遇到一下幾類問題:1、 當輸入此函數(shù)時出現(xiàn)了與&相關的錯誤,例如后面缺少括號以及分號等等以下的錯誤;2、輸入每個家庭成員的的信息時,兄弟之間沒有用“”區(qū)分,導致建立家族關系樹時錯誤。另外輸入不正確,程序有可能出現(xiàn)停止;3、在一些函數(shù)前不加返回值變量類型,調試時出現(xiàn)邏輯錯誤;4、在定義結構體時,定義結構體指針變量,但在程序運行時出現(xiàn)了定義的結構體指針不起作用。5、在運行程序時,由于沒有聲明變量,或對于指針變量沒有初始化,無法執(zhí)行程序。4.2、執(zhí)行過程進入家族關系查詢系統(tǒng),系統(tǒng)提示用戶輸入相關操作:輸入要進行的操作:1輸入家族的名

15、稱:zhang輸入家族成員姓名:zhangxianzu輸入家族成員姓名:輸入家族成員姓名:zhangguoyu輸入家族成員姓名:zhangguojun輸入家族成員姓名:zhangguoqiang輸入家族成員姓名:輸入家族成員姓名:zhangyongzhi輸入家族成員姓名:輸入家族成員姓名:zhangyongrui輸入家族成員姓名:zhangyongming輸入家族成員姓名:輸入家族成員姓名:輸入家族成員姓名:zhangwende輸入家族成員姓名:zhangwenjia輸入家族成員姓名:輸入家族成員姓名:#家族關系成功建立!(系統(tǒng)接著提示用戶輸入)輸入要進行的操作:2(輸入結果)zhangxia

16、nzuzhangguoyu zhangyongzhi zhangwende,zhangwenjia zhangguojun zhangyongrui zhangyongming zhangguoqiang (系統(tǒng)接著提示用戶輸入)輸入要進行的操作:6(輸入結果)成功退出家族關系查詢系統(tǒng)!4.3、運行時界面1、運行主函數(shù)時。2、輸入要進行的操作。3、接著根據(jù)提示輸入相應的操作,輸入數(shù)據(jù)遍歷家族關系查詢系統(tǒng)中的成員。4、根據(jù)提示選擇確定兩人關系選項,輸入兩個人的姓名。1、 若輸入的人不時家族中得人,運行情況如下。2、 退出家族關系查詢系統(tǒng)。結束語通過這次課程設計,雖然程序設計和調試的能力有所提升,

17、但最終還是沒能獨立完成課程設計的課程要求。這次課程設計使我深刻認識到自己專業(yè)知識的匱乏,缺乏獨立程序設計的能力。通過這次的課程設計也是我認識到了我在程序設計方面的嚴重不足,以及專業(yè)知識的嚴重匱乏。我的程序設計思想和代碼的編寫和調試能力在此次課設期間有所提高。這樣一種更貼切實際的課程設計,大大的提高了我的學習效率,希望能夠在平時教學的時候也能加入一些類似課程設計的程序設計習題。參考文獻【1】嚴蔚敏、吳偉民.數(shù)據(jù)結構(C語言版).清華大學出版社【2】滕國文.數(shù)據(jù)結構課程設計.清華大學出版社【3】譚浩強.C程序設計(第四版).清華大學出版社附錄主要程序:1、 主函數(shù)程序:void main()int

18、 d,flag=1,start1=1,f;Tree t1;t=&t1;while(flag)printf("tt家族關系查詢系統(tǒng)n");printf("t-n");printf("t1、新建家族關系t2、遍歷家族成員nn");printf("t3、確定兩人關系t4、查找nn");printf("t5、添加家族關系t6、退出查詢系統(tǒng)n");printf("t-n");A:printf("輸入要進行的操作(1-6):");scanf("%d&

19、quot;,&d);getchar();f=1;if(d<1|d>6)printf("n輸入有誤,請重新輸入!nn");goto A;if(d>1)&&start1)printf("nn請先創(chuàng)建家庭關系!nn");f=0;if(f)switch(d)case 1: Create();start1=0;break;case 2: Traverse(t);printf("nn");break;case 3: Relation();printf("nn");break;case

20、4: Search(t);printf("nn");break;case 5: Add(t);printf("nn");break;case 6: flag=0;break;printf("nt家族關系查詢系統(tǒng)使用結束!n");2、 建立家族關系樹程序void Create()char strM;int i=0;FILE *fp;t->parent=NULL;t->lchild=NULL;t->rchild=NULL;printf("請輸入文件的名稱(家族的名稱):");scanf("%

21、s",filename);getchar();strcat(filename,".txt");if(fp=fopen(filename,"w")=NULL)printf("can not open!");exit(0);printf("請按層次輸入結點(姓名),兄弟輸入結束以“”為標志,結束標志為“#”:n");gets(str);fputs(str,fp);fputc('n',fp);strcpy(fnamei,str);i+;while(str0!='#')printf

22、("請繼續(xù)輸入:n");gets(str);fputs(str,fp);fputc('n',fp);strcpy(fnamei,str);i+;fclose(fp);TreeCreate(t);printf("家族關系已成功建立!nn");void TreeCreate()Tree *t1,*root=NULL;LQ *q;int i=0,flag=0,start2=0;char strM;q=LQCreateEmpty();strcpy(str,fnamei);while(str0!='#')while(str0!=&#

23、39;')if(root=NULL)root=(Tree *)malloc(sizeof(Tree);strcpy(root->name,str);root->lchild=NULL;root->parent=NULL;root->rchild=NULL;LQEnQueue(q,root);t=root;elset1=(Tree *)malloc(sizeof(Tree);strcpy(t1->name,str);t1->lchild=NULL;t1->rchild=NULL;t1->parent=LQGetFront(q);LQEnQueue(q,t1);if(!flag)root->lchild=t1;elseroot->rchild=t1;root=t1;flag=1;i+;strcpy(str,fnamei);if(start2!=0)LQDeQueue(q);if(q->front!=NULL)root=LQGetFront(q);start2=1;flag=0;i+;strcpy(str,fnamei);3、 確定關系函數(shù)程序void Relation()char str2M;int i,w2=1,1;v=0;for(i=0;i<2;i+)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論