《软件综合设计》家谱管理系统院系:计算机科学技术学院二系班级:计11 – 2班姓名:刘文秀(15)合作者:姜雪(05) 、岳奉宜(33)指导教师:薛曼玲2013 年 12 月 01 日《软件综合设计》任务书一、题目:家谱管理系统二、设计要求(1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。
(2)小组成员分工协作完成。
要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。
(3)查阅相关资料,自学具体课题中涉及到的新知识。
(4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。
(5)所设计的系统应有菜单、动画和音乐。
(6)按要求写出课程设计报告,并于设计结束后1周内提交。
其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。
报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。
1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。
仅一级标题上目录。
三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。
四、课程设计工作计划2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析;2013年12月3日,设计小组进行总体方案设计和任务分工;2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译;2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2013年12月13日,验收、开始撰写课程设计报告;2013年12月18日前,提交课程设计报告和软件。
指导教师签章:教研室主任签章目录第1章概述 0课题研究的目的和技术发展现状 0课题研究的主要内容 0课题研究的难点 0第2章需求分析 (1)性能需求 (1)功能需求 (1)第3章可行性分析 (2)经济可行性分析 (2)技术可行性分析 (2)第4章概要设计 (2)程序设计的基本思想 (2)总体功能模块图 (3)相关应用技术 (3)第5章详细设计 (3)日期信息的合法性检验 (3)添加成员孩子模块 (5)添加成员兄弟模块 (5)按照出生日期对家谱排序 (5)由兄弟、孩子二叉树生成家谱文件 (6)按照姓名、出生日期查找家谱成员 (6)第6章调试分析与测试结果 (6)测试方法 (6)测试过程 (6)测试结论 (6)第7章结束语 (11)参考文献 (12)附录 (13)第1章概述课题研究的目的和技术发展现状本《家谱管理系统》是以电子家谱的形式记载父系家族世袭、人物为中心。
电子能准确记录家族成员出生卒年,以及生活地点、家庭成员等信息。
一般情况下是不会出现信息丢失情况。
更不需要担心传统家谱随着年代的久远字迹不清晰,有破损等情况的出现。
所以本课题的研究目的是让大家不但能够非常容易的记录家族情况,而且能清楚的了解本家族信息,使用起来非常方便。
现有的计算机技术足以支撑电子家谱的开发。
家谱的科学管理不但有助于民族文化和地方文化的发展,而且有其自身的积极意义。
例如本电子家谱是利用Visval C++ 开发完成的。
电子家谱的出现无疑让家谱焕然一新,但是传统家谱更能凸显出历史的韵味,文化的内涵。
这是电子家谱所不能够替代的,电子家谱不可能成为文物。
开发人员应该清楚的认识到这一点。
课题研究的主要内容家谱,又称族谱、祖谱、宗谱等。
一种以表谱形式,记载一个以血缘关系为主题的家族世系繁衍。
本课题研究的主要内容是以电子家谱的形式记录、查询父系家族历史信息为主要内容。
课题研究的难点建立输入文件以存放最初家谱中各成员的信息,以及能够对修改后的家谱存盘以备以后使用。
用户界面的设计不够完美。
功能上的设计难度很大。
第2章需求分析性能需求系统的核心是利用对话框的连接和文本处理来存储和修改家族管理系统的信息联系,其中的每一个动作都可能影响到其他的功能。
使用方便,易于传播,数据共享等性能。
易于维护。
功能需求建立输入文件以存放最初家谱中各成员的信息。
成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡)也可附加其它信息、但不是必需的。
能对修改后的家谱存盘以备以后使用。
能从文件中读出已有的家谱,形成树状关系。
家谱建立好之后,以图形方式显示出来。
显示第n代所有人的信息。
按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。
按照出生日期查询成员名单。
输入两人姓名,确定其关系。
某人添加孩子。
删除某人(若其还有后代,则一并删除)。
修改某人信息。
按出生日期对家谱中所有人排序。
打开一家谱时,若家谱中某人的生日在打开家谱的那一天,应给出提示。
第3章可行性分析经济可行性分析对系统开发规模进行估算属此软件项目属于小规模软件开发。
所以开发人员三到五人即可。
开发,维护等成本相对较低。
所以从经济可行性分析的角度来看此《家谱管理系统》适于开发。
技术可行性分析根据软件系统功能、性能要求的各项约束条件从技术的角度实现系统的可行性。
家谱信息以树的形式一次读入内存,而个人的各种资料虽然目前条目不多,但随着程序的升级,以后可能越来越大。
我把树形结构和个人信息记录的文档分为两个文件保存在外存中,一个文件串行化的记录家谱树的结构化信息,保持少量个人信息作为识别标志;另一个文档保存完整的个人信息。
索引时,以树形中的少量信息为依据在另一个文件中找到全部个人信息资料。
第4章概要设计程序设计的基本思想《家谱管理系统》的总体设计思路是先为程序搭建好一个人结构框架,家庭成员之间的关系,用树形结构(家族树)表示,这是本《家谱管理系统》的逻辑结构。
根据MFC的特点,采用CfamilytreeDlg类实现用户窗口界面指令对于家谱的各种操作。
有文件控制和家谱控制两大模块,按生日查找、删除成员、文件输入输出、修改成员信息、按名字查找、成员关系显示、按代数显示等各种操作。
然后再根据需求分析逐步增强程序的功能和性能。
总体功能模块图相关应用技术1.定义“家谱”类型2.用结构Date存储日期3.用结构QuickSortNode存储快速排序数组值(为快速排序而设)4.根据家谱的特点,采用孩子-兄弟的二叉树链表表示法(链表的基本单位为以结构PersonNode表示的结点),各种操作以COperationFamilytree类来实现。
5.根据MFC的特点,采用CfamilytreeDlg类实现用户窗口界面指令对于家谱的各种操作。
第5章详细设计日期信息的合法性检验图5-1 日期信息的合法性检查Int COperationFamilytree::ReadNode(FILE *fp, Person &T,char* parentname){neself);delete []order;}void COperationFamilytree::SortByBirthday(QuickSortNode *order){irthday; irthday,pivotkey)==1||CompareDate(order[high].birthday,pivotkey)==0))--high;order[low]=order[high]; irthday=order[high].birthday;neself=order[high].oneself;while(low<high&&(CompareDate(order[low].birthday,pivotkey)==-1||CompareDate(order[low].birthday,pivotkey)==0)) ++low;order[high]=order[low]; .high]作快速排序int pivotloc;if(low<high){ .high]一分为二QuickSort(order,low,pivotloc-1); irthday=T->;(*order).oneself=T;order++;CopyInfoFromBiTreeToArray(T->child,order);CopyInfoFromBiTreeToArray(T->sibling,order);}}由兄弟、孩子二叉树生成家谱文件void SaveNode(FILE *fp, Person &pNode){tf)(2)按下按钮“新建家谱”,新建一个家谱文件(*.ftf)(3)按下按钮“保存家谱”,将修改过的家谱保存(4)按下按钮“另存家谱”,将修改过的家谱另存为一个家谱文件(*.ftf)(5)按下按钮“删除该人”,将树型控件中选中的成员及其后代删除(6)按下按钮“增加孩子”,给树型控件中选中的成员增加一个孩子(7)按下按钮“更改资料”,更改树型控件中选中的成员的资料(8)按下按钮“按照姓名查找”,将家谱中特定名字的成员的信息显示在列表控件中(9)按下按钮“确定两人关系”,将家谱中某两人的关系显示出来(10)按下按钮“出生日期排序”,将家谱中的所有成员按出生日期排序并显示在列表控件中(11)按下按钮“按照生日查找”,将家谱中特定日期出生的成员的信息显示在列表控件中(12)选择菜单项目“关于”,显示该程序的版权信息(13)选择菜单项目“退出”,结束该程序的运行第7章结束语通过这次大作业,体会很深刻,将一直以来学到的东西都运用到实际上来,学以致用,对所学知识有了更深刻的理解,同时还发现了许多平时在书本上没有遇见过的问题,促进了自己对知识的渴望,遇见了问题,就希望能够通过查找课外书来解决它们。
刚接触题目的时候,自己就有了一定的想法,觉得这个程序做起来是问题不大的,但到了自己真正开始编程的时候却发现远远没有想象中那么简单,很多细节的问题没有预想到,很多关系的处理想得过于简单,以至于实施起来遇到了很大的困难,花了大量的时间。
同时还有一个比较深刻的体会就是要尽量多在源码上作注释,以前编一些功能简单的程序,总能很清楚每个函数和每个变量的作用,但到了做这个大作业,由于分开了各个功能板块去实现,很多时候是做了后面就忘了前面,后来意识到这个问题,便开始在编程时加入注释,而且是越详细越好,这样做了以后,很多时候需要查看自己原来写的源代码,也能够很方便地了解了,跟上了思路,也方便以后的维护。
关于这个程序的缺点方面,由于自己花的时间不是很多,再加上知识有限,编写出来的界面不够友好,在功能上还是有不完善的地方,譬如说各项数据的统计还没有弄,数据的存储还不够理想等等。