家谱树管理系统设计.doc
《家谱树管理系统设计.doc》由会员分享,可在线阅读,更多相关《家谱树管理系统设计.doc(30页珍藏版)》请在沃文网上搜索。
1、湖南科技大学数据结构课程设计(报告)数 据 结 构 课程设计报告家谱树管理系统学生姓名: 张 朝 政 学 号: 0807020218 年级专业: 08级信息与计算科学班 级: 信计二班 指导老师: 李英龙老师 学 院:数学与计算科学学院 同组成员:夏 鑫 杨贵生 左 斌起止时间:2010.6.212010.6.27目 录1 前言32 课程设计的相关说明32.1课程设计的要求32.2课程设计的需求分析32.3课程设计的实验环境43 家谱树管理系统的概要分析44 家谱树管理系统的详细分析84.1函数调用的关系图84.2 系统运行主界面94.3各主要功能的函数实现105 系统各功能的调试分析(附有运
2、行截图)195.1文件操作模块195.11新建家谱205.12打开家谱205.13保存家谱205.2家谱操作模块 215.21删除某人 215.22增加孩子 225.23两人关系与某代信息 225.24姓名查找 225.25个人修改 235.3调试小结 236 心得体会246.1.个人感想及不足之处247 参考文献25附录26 家谱树管理系统张 朝 政(湖南科技大学 信息与计算科学专业 0807020218)前 言本次课程设计任务是通过编写一个简单的家谱树管理系统,进一步学习用MFC开发简单的管理系统。采用Visual C+ 6.0软件为主要开发工具,更进一步了解系统开发的需求分析、层次设计、
3、数据结构分析、编码测试、模块组装与整体调试的全过程,加深对树状数据结构的理解与MFC环境的使用,以便逐步熟悉大型程序设计的方法,养成良好的编程习惯。本系统主要完成对家谱的相关操作和家谱人员信息的管理,包括打开家谱、新建家谱、保存家谱和家谱人员的姓名查找、生日查找、某代信息查找、增加孩子、两人关系、信息修改、信息删除等。系统的核心是利用对话框的连接和文本处理来存储和修改家谱管理系统的信息联系,其中的每一个动作都可能影响到其它的功能。2 课程设计的相关说明 2.1 课程设计的要求题目:家谱树管理系统1).建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。2).对界面的要求
4、是:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 2.2课程设计的需求分析 1). 输入文件以存放最初家谱中各成员的信息。 成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)2). 实现数据的存盘和读盘。3). 以图形方式显示家谱。(利用树形控件)4). 显示第n 代所有人的信息。5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。6). 按照出生日期查询成员名单。7). 输入两人姓名,确定其关系。8). 某成员添加孩子。9). 删除某成员(若其还有后代,则一并删除)。10).修改某成员信息。11).按出生日期对家
5、谱中所有人排序。2.3课程设计的实验环境开发工具: Visual C+运行环境:Windows 9x、Windows NT/2000、Windows XP 3家谱树管理系统的概要分析1、抽象数据类型兄弟孩子树的定义如下:ADT CSNode数据对象: person是兄弟孩子树中的每一个节点,T是整个树的统一体数据关系: R1=person,person|person,person表示person和person之间有血缘关系基本操作:CSNode *CreatTree(fstream &outfile);初始条件:已经打开了文本文件PersonInfo.txt操作结果:创建一个兄弟孩子树T,并把
6、从文件中的数据送到树中,关闭文件。void CreatParent_step(CSNode *parent);初始条件:兄弟孩子树T已经存在操作结果:对所有的孩子节点添加指向父亲的指针void InOrderTraverse(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:对T进行中序遍历。bool Today_Brithday(CSNode *T);初始条件:兄弟孩子树T已经存在操作结果:根据计算机系统的时间判断几天是否有人过生日,并显示他们的名字。bool (int n,CSNode *T,LinkQueue &Q); 初始条件:兄弟孩子树T已经存在,队列Q也已经存在 操作结
7、果:用队列Q返回第N代人的所有信息void Link_Info(LinkQueue Q); 初始条件:队列Q中是第N代人的所有信息 操作结果:显示队列中所有人的信息。CSNode *DetectMember_Name(CSNode *T,char name); 初始条件:兄弟孩子树T已经存在 操作结果:根据输入的姓名进行查找,如找到则返回该节点的指针。CSNode *DetectMember_BornDate(CSNode *T,Date date); 初始条件:兄弟孩子树T已经存在 操作结果:根据输入的出生日期进行查找,如找到则返回该节点的指针。void OutputOneInfo(CSNo
8、de *T); 初始条件:采集到一个节点T 操作结果:显示这一个节点的所有信息。void Output_Name_Relation(CSNode *T); 初始条件:采集到一个节点T 操作结果:显示这一个节点的父亲和孩子的所有信息。void Delete_Member(CSNode *T,char name); 初始条件:兄弟孩子树T已经存在 操作结果:根据输入的姓名进行查找,如找到则删除该节点和他所有的孩子节点。void Edit_Member_Info(CSNode *T,char name); 初始条件:兄弟孩子树T已经存在 操作结果:根据输入的姓名进行查找,如找到则根据用户要求修改相应
9、的信息。bool Add_New_Child(CSNode *T); 初始条件:兄弟孩子树T已经存在 操作结果:根据输入的姓名进行查找,如找到则在他的孩子树中添加新的孩子节点。void InOrderInfile(CSNode *T,fstream &infile); 初始条件:兄弟孩子树T已经存在,且已经打开了文本文PersonInfo.txt 操作结果:把现在的数据读入文件中,关闭文件。bool Generation(CSNode *T,CSNode *child); 初始条件:兄弟孩子树T已经存在 操作结果:判断child是否是T的后代,如果是返回true,否则返回false。Void
10、Output_Two_Member_Realtionship(CSNode*T,char name1,char name2); 初始条件:兄弟孩子树T已经存在 操作结果:根据已经输入的两个姓名进行查找和判断,确定他们的关系。void InOrderIn(CSNode *T,CSNode S,int &num); 初始条件:兄弟孩子树T已经存在 操作结果:对T进行中序遍历,并且把每一个节点信息送到数组S中,num为S中成员个数。void LineChars(CSNode S,int num); 初始条件:节点数组S已经存在操作结果:对数组的节点信息按照出生日期进行排序,采用的是基数排序ADT C
11、SNode2、抽象数据类型队列的定义如下:ADT LinkQueue数据对象:D=ei| i=1,2,3,n;n0;eiLinkQueue 数据关系:R1=ei-1, ei|ei-1,ei表示ei-1和ei之间有先后顺序关系基本操作:bool InitQueue(LinkQueue &Q); 操作结果:创建一个空的队列Q。bool DestroyQueue(LinkQueue &Q); 初始条件:队列Q存在 操作结果:销毁队列Q,Q不再存在。bool EnQueue(LinkQueue &Q,CSNode e); 初始条件:队列Q存在 操作结果:插入元素e为Q的新的队尾元素。bool Clea
12、rQueue(LinkQueue &Q); 初始条件:队列Q存在 操作结果:清空队列Q。bool QueueEmpty(LinkQueue Q); 初始条件:队列Q存在 操作结果:若队列为空,则返回true,否则返回false。bool DeQueue(LinkQueue &Q,CSNode &e); 初始条件:队列Q存在 操作结果:删除Q的队头元素,并用e返回其值,并返回true。int QueueLength(LinkQueue Q); 初始条件:队列Q存在 操作结果:返回队列Q的长度。bool GetHead(LinkQueue Q,CSNode &e); 初始条件:队列Q存在 操作结果
13、:用e返回队首元素,并返回true。 ADT LinkQueue3、主程序Void main() 打开文本文件PersonInfo.txt; Do接受命令(对兄弟孩子树进行相关的操作的选项);处理命令(对兄弟孩子树进行相关的操作);while(“命令”!=“退出”);4家谱树管理系统的详细设计4.1 函数调用的关系图MainToday_BrithdayName_RelationEdit_Member_InfoDelete_MemberAdd_New_ChildDetectOutput_N_MembersOutput_Two_Member_RealtionshipInOrderInfileDet
14、ectMember_BornDateDetectMember_Name系统进入 4.2系统运行主界面 图3.2系统运行主界面4.3各主要功能函数的实现说明:由于系统的功能函数较多且代码量大,故只选取了打开家谱、家谱保存、两人关系、增加孩子等为例。1打开家谱函数的实现/ void CFamilytreeDlg:OnFileOpen()函数的实现void CFamilytreeDlg:OnFileOpen() / TODO: Add your control notification handler code hereif(IsFamilytreeModified)/如家谱被修改,给出保存提示Sa
15、veTip();IsFamilytreeModified=false;CFileOpenAndSaveDlg dlg(true);/打开文件对话框if(dlg.DoModal()=IDCANCEL)return;UpdateData(false);if(strcmp(dlg.m_filePath,)=0)AfxMessageBox(文件名不能为空!);return;int result;result=operFamilytree.CreateFamilytree(dlg.m_filePath);/根据用户指定的文件名建立家谱if(result!=OK) /建立家谱时有错误switch(resu
16、lt)case NOT_ENOUGH_MEMORY:/内存不足AfxMessageBox(内存不足!);break;case READ_FILE_ERROR:/读文件错误AfxMessageBox(文件无法打开!);break;case FILE_DATA_NOT_PRACTICAL:/文件数据不合实际AfxMessageBox(家谱日期数据不合实际!);break;case FILE_DATA_ERROR:/文件数据错误(一个人的父亲的名字在家谱中从未出现)AfxMessageBox(家谱成员关系有误!);break;case PEDIGREE_EMPTY: /家谱没有根结点AfxMessa
17、geBox(家谱没有根结点!);break;return;strcpy(savepath,dlg.m_filePath);/修改保存文件路径为当前打开文件路径RefreshTree();/刷新树型控件RefreshList();/刷新列表控件BirthdayTip();/提示今天是家谱中哪些人的生日 GetDlgItem(IDC_ADD)-EnableWindow(TRUE); /家谱控制按钮可用 GetDlgItem(IDC_DELETE)-EnableWindow(TRUE); GetDlgItem(IDC_MODIFY)-EnableWindow(TRUE); GetDlgItem(ID
18、C_PEDIGREE_IGENERATION_INFO)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_SORT)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_RELATIONS)-EnableWindow(TRUE); GetDlgItem(IDC_PEDIGREE_PERSONAL_INFO)-EnableWindow(TRUE); GetDlgItem(IDC_BIRTHDAY)-EnableWindow(TRUE);2、家谱保存函数的实现/ void CFamilytreeDlg:OnFileSave
19、()函数的实现void CFamilytreeDlg:OnFileSave() / TODO: Add your control notification handler code hereif(operFamilytree.GetRoot()=0)return;int saveResult;saveResult=operFamilytree.SaveFamilytree(savepath);/保存while(saveResult=WRITE_FILE_ERROR)AfxMessageBox(CString(找不到文件 )+CString(savepath)+CString(该文件可能已被删除
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家谱 管理 系统 设计