收藏 分享(赏)

数据结构大作业(家谱管理系统).doc

上传人:eukav 文档编号:5549607 上传时间:2019-03-07 格式:DOC 页数:8 大小:58KB
下载 相关 举报
数据结构大作业(家谱管理系统).doc_第1页
第1页 / 共8页
数据结构大作业(家谱管理系统).doc_第2页
第2页 / 共8页
数据结构大作业(家谱管理系统).doc_第3页
第3页 / 共8页
数据结构大作业(家谱管理系统).doc_第4页
第4页 / 共8页
数据结构大作业(家谱管理系统).doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、1序號 1 2010-2011 學年度第一學期大作業課程名稱: 數據結構 任課教師: 李合龍 作業題目: 家譜管理系統設計與實現 姓 名: 潘應妙 學 號: 201004953013001 專 業: 計算機科學與技術 教學中心: 珠海教學辦 聯繫電話: 0085366694440 評審日期_成績_評審教師(簽名)_華南理工大學網路教育學院2一、需求分析1. 建立輸入文件以存放最初家譜中各成員的資訊。2. 成員的資訊中均應包含以下內容:姓名、出生地、出生日期、性別、身高、學歷、職業、婚否、地址、健在否、死亡日期(若其已死亡)3. 能對修改後的家譜存檔以備以後使用。4. 能從文件中讀出已有的家譜,

2、形成樹狀關係。5. 家譜建立好之後,以圖形方式顯示出來。6. 顯示第n代所有人的資訊。7. 按照姓名查詢,輸出成員資訊(包括其本人、父親、孩子的資訊) 。8. 按照出生日期查詢成員名單。9. 輸入兩人姓名,確定其關係。10. 某人添加孩子。11. 刪除某人(若其還有後代,則一併刪除) 。12. 修改某人資訊。13. 按出生日期對家譜中所有人排序。14. 打開一家譜時,若家譜中某人的生日在打開家譜的那一天,應給出提示。3二、概要設計採用二叉樹進行家譜的管理、樹形控制項及列表控制項進行家譜的顯示。程式涉及以下三種類型,但基本操作均在“家譜” 類型中。1定義“個人資訊 ”類型:ADT Person

3、資料物件:D=Pj | Pj=姓名、出生日期、婚否、地址、健在否(如過世,還應有其死亡日期),j=0,1,2,n,其中n=0 資料關係:R= 基本操作:無。ADT Person2.定義“家譜類型文件 ”類型 ADT FamilytreeFile 資料物件:D=Aj | Aj屬於Person,j=1,2,3,n其中n=1 資料關係:D中每個物件用換行符隔開, R= | Aj屬於D,j=1,3,n其中n=1,String屬於字串類型,爲Aj父親姓名(若String=-1,Aj無父親,若 String=Aj的姓名,表示家譜文件結束) 基本操作:1打開家譜類型文件,並建立兄弟、孩子二叉樹。2從記憶體中

4、讀取兄弟、孩子二叉樹,並建立家譜類型文件。ADT FamilytreeFlie3定義“家譜 ”類型ADT Familytree 資料物件:D=Aj | Aj屬於Person,j=1,2,3,n其中n=0 資料關係:V= | Aj-1,Aj屬於D,j=2,3,n其中n=2 ,且Aj-1與Aj爲祖先與後代關係(parent) 、後代與祖先關係(child) 、兄弟之間關係( sibling) 基本操作:1顯示某人資訊。2修改某人資訊。3增加某人孩子。4刪除某人。5通過某人查找其雙親、孩子、兄弟。ADT Familytree 4三、詳細設計1定義“個人資訊 ”類型:struct Info /一個人的

5、有關資訊在記憶體中的存儲結構char nameMAX_CHARNUM; /姓名char sexMAX_CHARNUM /性別Date birthday; /出生日期Char brithpaceMAX_CHARNUM; /出生地Int height /身高Char educationMAX_CHARNUM; /學歷Char jobMAX_CHARNUM; /職業int marry; /婚否char addrMAX_CHARNUM ; /住址int live; /健在否Date deathday; /死亡日期; 2.定義“家譜類型文件 ”類型 /一個人的有關資訊在磁片文件中存儲結構char nam

6、eMAX_CHARNUM; /姓名char sexMAX_CHARNUM; /性別cahr brithpaceMAX_CHARNUM; /出生地char educationMAX_CHARNUM; /學歷char jobMAX_CHARNUM; /職業int height /身高int birthday.year; /出生年份int birthday.month; /出生月份int birthday.day; /出生日期int marry; /婚否char addrMAX_CHARNUM; /住址int live; /健在否int deathday.year; /死亡年份int deathda

7、y.month; /死亡月份int deathday.day; /死亡日期char fathername; /父親名字; 3定義“家譜 ”類型struct PersonNode 5/一個人的資訊和與其他人關係的存儲結構Info info; /自己的資訊PersonNode* parent; /指向父親的指標PersonNode* child; /指向孩子的指標PersonNode* sibling; /指向兄弟的指標*Person; 4.用結構Date存儲日期struct Date /年、月、日存儲結構int year; /年int month; /月int day; /日; 5用結構Quic

8、kSortNode 存儲快速排序陣列值(爲快速排序而設)struct QuickSortNode /爲以出生日期大小快速排序建立的存儲結構Date birthday; /出生日期Person oneself; /指向自己的指標; 6.根據家譜的特點,採用孩子-兄弟的二叉樹鏈表表示法(鏈表的基本單位爲以結構ersonNode表示的結點) ,各種操作以COperationFamilytree類來實現。以下是CoperationFamilytree類包含的資料成員及基本操作class COperationFamilytree public: COperationFamilytree(); /構造函數

9、virtual COperationFamilytree(); /析構函數void NewFamilytree(); /新建一空家譜int CreateFamilytree(CString filename); /從輸入文件filename中讀取資料建立家譜void DestroyFamilytree(); /刪除家譜int SaveFamilytree(CString filename); /保存家譜void PreOrderTraverse(FILE* fp,Person /先序遍曆( 爲保存家譜而做) void PostOrderTraverse(Person /後序遍曆( 爲刪除家譜而

10、做) void Find(Person /從根結點出發,搜索name所在結點,如找到,存於Tname 中,找不到,Tname 爲 0使用前確保Tname指標爲0 void Find(Person /從根結點出發,搜索家6譜中birthday.month等於month,birthday.day等於day的所有結點,如找到,存於以Tname爲首位址的指標陣列中,找不到, Tname爲 0使用前確保/Tname指標爲0 void Add(Person parent,Person addNode); /把addnode加爲結點parent的孩子void Delete(Person /刪除以rootNo

11、de爲根結點的所有結點void Modify(Person /修改 pNode結點爲新值newValue void SortByBirthday(QuickSortNode* order);/對家譜以出生日期排序,並把排序結果放在陣列order中void GetPersonNums(Person /得到家譜中總人數int InGenerationPos(Person pNode); /返回pNode在家譜中是第幾代int InSiblingPos(Person pNode); /返回pNode在其兄弟中的排行int ChildNums(Person pNode); /返回pNode孩子數int

12、 CompareDate(Date date1,Date date2); /比較兩日期的大小bool IsDateValid(Date date); /檢驗日期是否合法Person /得到根結點friend void SaveNode(FILE* fp,Person /保存結點pNode到文件fp中friend void DestroyNode(Person /刪除結點private: Person T; /二叉樹的根結點int ReadNode(FILE* fp,Person /從文件fp中讀取資訊到結點T中,讀取此結點的父親姓名到 parentnaem中(供CreateFamilytree

13、函數調用) void InsertSibling(Person /把insertSibling插入到以firstSibling爲首的兄弟中( 供CreateFamilytree函數調用) void CopyInfoFromBiTreeToArray(Person /把家譜中以pNode結點爲根結點的出生日期拷貝到快速排序結構陣列order中(供SortByBirthday函數調用) void QuickSort(QuickSortNode* order,int low,int high); /對orderlow.high 中的記錄進行快速排序(供SortByBirthday函數調用) int

14、Partition(QuickSortNode* order,int low,int high); /對orderlowhigh 中的記錄進行一次排序(供QuickSort函數調用) bool IsLeapYear(int year); /判斷是否閏年(供IsDateValid調用,以檢查日期是否合法); 7.根據MFC的特點,採用 CfamilytreeDlg類實現用戶視窗介面指令對於家譜的各種操作。class CFamilytreeDlg : public CDialog public: void SaveTip(); /保存提示void InitListCtrl(); /初始化列表控制項

15、void RefreshTree(); /刷新樹,(即刷新顯示) void RefreshList(); /刷新列表void DisplayFamilytree(Person /顯示樹7void DisplayInListCtrl(Person pNode); /把pNode結點的資訊在列表控制項中顯示出來void Display(CString temp); /在列表控制項中顯示其他資訊void FindInTree(HTREEITEM /在樹hRootItem中查找name所在結點,如找到,把其結點控制碼存入hItem中,找不到,/hItem 爲0.注意,使用該函數時,確保 hItem初值

16、爲0 void BirthdayTip(); /每次打開一新家譜文件時的生日提示void DisplayGenerationInfo(Person /顯示所有第generation 代人的資訊void AddToTree(HTREEITEM hParentItem,Person addnode ); /把addnode 加入到樹的hParentItem 結點中去private: char savepathMAX_CHARNUM; /家譜第一次被保存時的路徑bool IsFamilytreeModified; /家譜是否被修改標記COperationFamilytree operFamilytr

17、ee; /對家譜操作的一個類實例,所有的家譜操作均由它調用成員函數來完成; 8爲使程式結構趨於清晰,分別使用CAddInfoDlg、CBirthdayDlg、CDelInfoDlg、CFileOpenAndSaveDlg、CModifyInfoDlg 、CPersonalInfoDlg、CRelationsDlg、CSearchGenerationDlg類實現用戶窗口對於家譜的增加成員、按生日查找、刪除成員、文件輸入輸出、修改成員資訊、按名字查找、成員關係顯示、按代數顯示等各種操作。縱上所示,本程式的兩主要類爲CoperationFamilytree類:所有對家譜的操作均由此類完成。CFami

18、lytreeDlg類:所有對用戶功能表命令的解釋均由此類完成,然後調用CoperationFamilytree 類的成員函數執行命令並顯示結果。根源程式檔案名清單:Familytree.cpp& Familytree.h主程序實現單元FileOpenAndSaveDlg.cpp& FileOpenAndSaveDlg.h文件輸入輸出實現單元OperationFamilytree.cpp& OperationFamilytree.h家譜操作實現單元StdAfx.cpp& StdAfx.h &Resourse.hMFC類實現及資源頭文件Familytree.rc& Familytree.rc2&

19、Familytree.ico資源檔案AddInfoDlg.cpp& AddInfoDlg.h增加成員的實現單元DelInfoDlg.cpp& DelInfoDlg.h刪除成員的實現單元ModifyInfoDlg.cpp& ModifyInfoDlg.h修改成員資料的實現單元BirthdayDlg.cpp& BirthdayDlg.h按出生日期查找成員的實現單元PersonalInfoDlg.cpp& PersonalInfoDlg.h按姓名查找成員的實現單元8RelationsDlg.cpp& RelationsDlg.h顯示成員關係的實現單元SearchGenerationDlg.cpp& SearchGenerationDlgh顯示代數的實現單元SP.本人所用的是繁體中文 ,可能在編程時有些轉換違留而引起亂碼 ,望老師見諒!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 职业教育

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报