家谱管理系统_第1页
家谱管理系统_第2页
家谱管理系统_第3页
家谱管理系统_第4页
家谱管理系统_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

洛阳理工学院课程设计报告课程名称数__据__结__构__课__程__设__计设计题目家__谱__管__理__系__统专业计__算__机__科__学__与__技__术班级B_1_5_0_4_0_5学号B_1_5_0_8_0_8_2_2姓名宋__士__龙完成日期2__0_1_6_年___1_2_月___3_0_日课程设计任务书设计题目:家谱管理系统设计内容与要求:【问题描述】:实现具有下列功能的家谱管理系统1).输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。2).实现数据的存盘和读盘。3).显示家谱。.按照出生日期查询成员名单。.按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。.修改某成员信息。【基本要求】:界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明。指导教师:年月日课程设计评语成绩:指导教师:洛阳理工学院课程设计报告洛阳理工学院课程设计报告#}}子女的信息修改成功break;case'D':本项服务到此结束break;case''break;default:对不起!你的选择不在服务范围之内请您再次选择所需的服务项谢谢合作break;}if(c=='D'||c=='d')break;请按Enter键继续操作getchar();getchar();}}voidSaveFamily(TreeNode*root)〃保存家谱至指定文件{charsaveFileName[maxFileNameLen];FILE*fp;TreeNode*queue[50],*head;inti,front,rear;//队列的头指针,尾指针保存家谱//if(root==NULL)if(root==NULL){家谱中无成员,无法保存!return;}TipForSaveFilePosition;//文件及其绝对路径格式getchar();不存在则新建。存在,则从文件起始位置写,原内容将被覆盖。if(fp==NULL){新建文件失败!return;}else新建文件成功,文件及其路径为:/*利用宽度优先搜索遍历家族多叉树*/fwrite(root,sizeof(TreeNode),1,fp);//将根结点存入文件(二进制形式)front=rear=0;//初始化空队queue[rear++]=root;//根结点进队while(front!=rear)//队列不为空{head=queue[front++];〃队头元素出队if(head->NextNode[0]!=NULL){fwrite(head->NextNode[0],sizeof(TreeNode),1,fp);}for(i=1;i<=head->ChildNum;i++){fwrite(head->NextNode[i],sizeof(TreeNode),1,fp);queue[rear++]=head->NextNode[i];}}fclose(fp);fp=NULL;}voidReadFamily(tree*root)〃从指定文件中读取家谱{FILE*fp;charreadFileName[50];treequeue[50],head;inti,front,rear;*****读取家谱输入文件名及其路径,以便从中读取家谱。TipForReadFilePosition;getchar();为读而打开文本文件(文件必须已存在)if(fp==NULL){只读形式打开文件失败!return;}/*一边从文件读取结构体变量,一边重新建树*/*root=(tree)malloc(sizeof(TreeNode));if(*root==NULL){重建树时为根结点分配内存失败!return;}fread(*root,sizeof(TreeNode),1,fp);front=rear=0;//初始化空队queue[rear++]=*root;〃根结点进队while(front!=rear){head=queue[front++];if(head->NextNode[0]!=NULL){head->NextNode[0]=(tree)malloc(sizeof(TreeNode));if(head->NextNode[0]==NULL){重建树时分配内存失败!return;}fread(head->NextNode[0],sizeof(TreeNode),1,fp);}for(i=1;i<=head->ChildNum;i++){head->NextNode[i]=(tree)malloc(sizeof(TreeNode));if(head->NextNode[i]==NULL){重建树时分配内存失败!return;}fread(head->NextNode[i],sizeof(TreeNode),1,fp);head->NextNode[i]->Parent=head;queue[rear++]=head->NextNode[i];}}fclose(fp);fp=NULL;}六、总结由我和王月本次数据结构课程设计我选的题目是家谱管理系统,历时四天同学一起完成。总体来说这次课程设计还是比较困难的,而且我们选的这个题目在这些题目中也是很有难度的。中间遇到很多困难,但是在我和她一起讨论以及老师的帮助下,最终还是顺利的完成了。由我和王月刚一开始选题目的时候,我并没有怎么在意选什么,只是随便选了一个,到后来才发现选的这个题目非常难。经过分析,发现这个题目需要用到树,而树我又没有学好,所以写的时候非常吃力。最一开始,我用的是二叉树来存储,后来写到一半发现写不下去了,用递归创建函数始终不合适,最后不得不放弃。于是我在网上开始查找资料,不过查到的资料大多于本次实验不相符,还有一些也是看不懂。只有一个,我发现他是用的多叉树,看了一会发现也能理解。于是打算用多叉树来储存。可是又不知道该如何写起,但还是在网上查了多叉树的递归创建方法就开始写了。在上机前一天晚上,王月给我发来了他写的程序,除了存盘和读盘,其他的功能基本都实现了。我拿来他的和我对比,发现我们写的大同小异,于是我结合着她的将我的改了一下,基本的功能也能实现了。接下来就是最重要的模块了,也是最麻烦的,存盘和读盘。我和王月同学参考了去年的课程设计的保存和读取。但是那是顺序表的保存和读取,和我们用到的不尽相同。这个时候我们已经没有思路,所以我们向老师求助。老师给我们讲了一些关于存和读的知识,又让我们看了一下书,我们总算大体了解了一下这个知识。接下来我们在网上查找资料,最终终于写出来了存盘和读盘。但是运行的时候发现又有问题了,在表面上看来是只能存不能读。于是我们向老师求助,老师看了我们的程序之后,建议我们换一种方式存盘和读盘,将节点存起来,然后读盘时读一个就把他放在树里。晚上回去,我对我的函数仔细看了一下,突然发现了问题。我的程序存盘也是有问题的。循环内写入文件少一次,或者说是次数不固定。因为我父亲节点的第一个节点如果有配偶,就存配偶,没有的话存子女,很随机。我发现了这个漏洞之后,想了好久才想出解决方法。我把父节点的第一个节点单独存,不让他入队,然后把第二个后继一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论