


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、家谱管理系统设计与实现一、问题阐述(一) 解决的问题基本要求 内部要求: 要求将家谱信息看作树形结构处理, 并可存储在外存。 数据可一次读入内存; 外部要求:这一级要求系统具备下列基本功能:A)家庭成员信息存储:将每个家庭成员的基本信息存储在计算机中(可永久保存) 。家庭成员的基本信息至少应包括:(姓名,出生地,出生日期, 死亡日期,性别,身高,学历,职业,最高职务 /职称, );B)家族关系存储:将各家庭成员之间的关系,存储在计算机中(可永久保存);C)更新:家谱数据的更新(修改、删除、加入); D)输出:将家谱以较友好的格式输出(显示);E)查询:按基本信息查询成员,按亲戚关系查询;增强要
2、求:A)统计:统计并打印(显示)结果,统计的项目有:平均寿命、平均身高、男女比例、 家庭平均人口、平均(最高 / 低)学历、 扩展要求: 内部要求:数据较大时,不一次读入内存,采用分块读入; 外部要求:这一级要求系统具备下列基本功能:屏幕显示树形(类似 Windows 目录)、全 屏可视化操作、支持鼠标;(二)实现的功能基本要求和增强要求本系统已基本实现, 但是增强要求中的查询中的按亲戚关系查询, 统计项目中的平均寿命、家庭平均人口、平均(最高 / 低)学历没有实现统计。二、设计方法阐述(一) 各种重要问题的解决方法 首先是家庭成员基本信息和基本关系的储存。我建立了一个记事本,在程序开始之前已
3、 经先初始化,即预先写入了一下对应的基本信息和基本关系分别储存在 information.txt 和 relation.txt里面,程序开始时就从这两个文本读入信息,再在这个基础上进行诸如修改、删除、加入等其他操作, 等程序结束时再重新覆盖原来的文本把新的信息和关系写进去。为了下面的论述方便,首先给出了关系和基本信息类,它们定义在头文件中。 关系: class memberTree publicint data;/ 编号memberTree *parent;/父指针memberTree *child;/孩子指针memberTree *brother;/兄弟指针信息:class memberDa
4、tapublic:int MemberNumber;/ 编号char Name20;/姓名char BornPlace20;/ 出生地char Birthday20;/出生日期char Deadthday20;/死亡日期char Sex7;/性别double Height;/ 身高char Credentials20;/学历char Career20;/职业;首先是家庭成员基本关系在内存里面的实现。在 ralation.txt 里面本人是用一系列数 据将其初始化的, 读入的时候是先把该序列的数据储存到一个链表去的, 之后再按照从根结 点到子节点的根叶序列把这些数字还原成为一棵树上的节点。 本来
5、可以直接把节点还原到树 上去的,但是这样以来,就比较难以辨别该节点的父节点,之所以采用链表, 是因为可以用两个跟踪指针不断的移动跟踪, 如果在遍历已完成的 树上后一个指针所指向的节点的数据是在树上没有出现过的, 那么前一个指针所指向的一定 是它的父节点。 如此以来, 就可以根据该节点 p 所指向的父节点里面的数据利用遍历的方法 找到它的父节点 q,首先令该节点的 p-parent=q ,即把该节点的父节点指向它找到的父节 点,之后在考察它的父节点 q,如果 q-child 是空的话,即该节点的父节点还没有孩子, 那么就可以直接令 q-child=p ,即将它父节点所指的孩子指向它;否则的话就另
6、外声明一 个辅助指针 h,令 h=q-child ,然 后只要 h-brother!=NULL 的话 ,就不断的执 行 h-brother=h-brother-brother ,之后再令 h-brother=p 即可,就是说如果该节点的父 节点已有孩子节点, 那么就把该节点插入到孩子的最后的一个兄弟节点里面去; 之后再把链 表的指针后移, 只要链表不空的话, 就不断的重复上述操作, 反之就完成了还原成树的操作。其次是家庭成员信息在内存里面的实现。 在 information.txt里面初始化了一序列信息,在程序里面建立一个链表, 令链表里面的节点对于个人的信息, 然后把文本里面的信息 读到链表
7、里面的节点就可以。上面的操作已完成把文件从磁盘里面读到内存并完成了相应的操作的任务。接着要实 现的操作是修改、删除、插入、输出、查找, 。首先是修改。修改时只能是修改成员的信息,首先要求输入对应的编号, 然后遍历树找相应的节点, 如果找不到的话就提示说该节点不存在, 返回,否则就可以直接提示输入要修改的成员信息, 存在到信息链表里面对于的节点里面去。其次是删除。 删除时是把以该节点为根节点的子树一起删除,且它们的信息也一并删除。还是首先 要求输入要删除的节点的编号, 然后遍历树找相应的节点, 如果找不到的话就提示该节点不 存在, 返回,否则就先确定该节点的有关信息, 如果它的父节点所指的孩子节
8、点是指向它的 话,那么要把它的父节点所指的孩子赋空; 否则就考察它是不是它父节点所指的孩子节点所 指的兄弟节点, 如果是的话,就把该兄弟节点赋空,如果不是的话,就沿着父节点所指的孩 子节点所指的兄弟节点链一直搜索下去, 直到该链上某个节点所指的兄弟节点是它的话, 就 把该节点所指的兄弟节点赋空就行。之后在把以该节点为根的子树以及它们的信息一并删 除,完成就可以提示删除完毕。再次是插入。 插入时还是先要求输入编号,然后遍历树,如果该编号已存在,那么就提示说该成员 已存在,返回,否则就再提示输入父亲的编号,遍历树,如果该父节点不存在,就提示说该 成员的父亲不存在, 返回, 否则就可以执行类似于把根叶序列还原成树的操作把该节点插到 树上去, 再提示输入该成员的信息然后存到信息链表, 成功后就可以提示该成员的信息已插 入完毕。然后是输出。 输出是分关系和信息两部分输出的,首先输出的根叶序列,其次是输出成员的信息。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高一下学期《双休时代自由时间背后暗藏残酷筛选+你是“猎手”还是“猎物”?》主题班会
- 2025年电动车仪表盘项目可行性研究报告
- 2025年甲醛捕捉剂项目可行性研究报告
- 2025年瓷线轮项目可行性研究报告
- 2025年玻璃纤维耐高温除尘(布)袋项目可行性研究报告
- 2025年猪肉排骨香精项目可行性研究报告
- 低压电器 课件 单元三 项目三 任务四 掌握三相异步电动机降压启动控制线路
- 山东省菏泽一中2025年高三下学期线上模拟考试(2)生物试题含解析
- 重庆航天职业技术学院《固体废物处理与处置》2023-2024学年第二学期期末试卷
- 云南省昆明黄冈实验学校2025届高三“临门一脚”英语试题含解析
- 印章刻制服务投标方案(技术标)
- 海底捞门店劳动合同
- 基准地价技术报告
- 某新能源(风能)公司:控股有限公司合同管理办法(试行)
- 静安区实验室施工方案模板
- 口腔门诊诊所过敏性休克抢救流程
- 风电机组吊装作业安全管理
- 世界500强CFO的财务管理笔记2
- LY/T 3302-2022人造板生产木粉尘燃爆防控技术规范
- 函数的单调性说课课件-中职技工学校中国劳动社会保障出版社数学第七版上册
- 水土保持工程质量评定规程sl3362006
评论
0/150
提交评论