家谱管理系统的设计与实现课设报告.doc_第1页
家谱管理系统的设计与实现课设报告.doc_第2页
家谱管理系统的设计与实现课设报告.doc_第3页
家谱管理系统的设计与实现课设报告.doc_第4页
家谱管理系统的设计与实现课设报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

课程设计(论文)任务书 软 件 学 院 学院 软 件+会计 专业 2014-2 班一、课程设计(论文)题目 家谱管理系统的设计与实现 二、课程设计(论文)工作自 2015 年 12 月 21 日起至 2015 年 12 月 27 日止 三、课程设计(论文) 地点: 软件测试中心(北区测试二室) 四、课程设计(论文)内容要求:1本课程设计的目的训练学生灵活应用所学数据结构知识,独立完成问题分析,结合课程的理论知识,编写程序求解指定问题;初步掌握软件开发过程的问题分析、系统设计、编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。2课程设计的任务及要求1)基本要求:要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;每位同学需提交可独立运行的程序和规范的课程设计报告。2)课程设计论文编写要求理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订;课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、课设总结、谢辞、参考文献、附录等;设计部分应包含系统功能模块图,调试分析应包括运行截图等。3)课程设计评分标准: 学习态度:10分;系统设计:20分;编程调试:20分;回答问题:20分;论文撰写:30分。4) 参考文献: 严蔚敏 李冬梅 吴伟民著.数据结构(C语言版)M. 人民邮电出版社. 2015.2 李春葆. 数据结构教程上机实验指导M. 清华大学出版社. 2013.1 何钦铭,冯燕等. 数据结构课程设计M. 浙江大学出版社. 2007.85)课程设计进度安排准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料;程序模块设计分析阶段(4学时):程序概要设计、详细设计;代码编写调试阶段(8学时):程序模块代码编写、调试、测试;撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文。 学生签名: 孙梦凡 2015 年 12 月 21 日6) 课程设计题目具体要求: 设计并实现一个简单的家谱管理系统 (1)建立家族关系并能储存到文件中。 (2)实现家族成员的添加和删除功能。 (3)可以查询家族成员的祖先、双亲、兄弟、孩子和后代等信息。 (4)按照某种顺序输出家谱信息以及树型结构输出家谱资料等功能。 (5)界面友好,演示程序以用户和计算机的对话方式进行,可以反复操作。课程设计(论文)评审意见(1)学习态度(10分):优()、良()、中()、一般()、差(); (2)系统设计(20分):优( )、良()、中()、一般()、差(); (3)编程调试(20分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)论文撰写(30分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否() 评阅人: 职称: 讲师 2015 年 12 月 28 日 目 录1、 设计任务02二、需求分析02三、系统设计04四、编码实现06五、调试分析07六、课设总结10七、谢辞10八、参考文献10一、设计任务(1)建立家族关系并能储存到文件中。(2)实现家族成员的添加和删除功能。(3)可以查询家族成员的祖先、双亲、兄弟、孩子和后代等信息。(4)按照某种顺序输出家谱信息以及树型结构输出家谱资料等功能。(5)界面友好,演示程序以用户和计算机的对话方式进行,可以反复操作。二、需求分析家谱一直都是生活中一个非常重要的内容,它记载着一个以血缘关系为主体的家族世代的绵延,不仅是记录一个家族的成员以及血脉关系的载体,更是一个家族血脉的延续的象征。家谱是中国特有的文化遗产,是中华民族的三大文献之一,属于珍贵的文化资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,都有着不可替代的独特作用。对于作为社会中各种家族的一份子的我们来说,家谱管理与我们的生活息息相关,因此我们必须学将家谱管理与当代科技紧密的结合起来,以便于更好的将家谱文化保存下来以及发扬光大。1.系统用得到的数据有:int degree;/该人所在代数char data;/该人struct Node *firstchild;/该人的孩子struct Node *nextsibling;/该人的兄弟2. 抽象数据定义:ADT BinaryTree数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若D=,则R=,称BinaryTree为空二叉树;若D,则R=H,H是如下二元关系:(1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;(2) 若D-root,则存在D-root=D1,Dr,且D1Dr=;(3) 若D1,则D1中存在唯一的元素X1,H,且存在D1上的关系H1包含于H;若Dr,则Dr中存在唯一的元素Xr,H,且存在Dr上的关系Hr包含于H;H=,H1,Hr;(4) D1,H1是一棵符合本定义的二叉树,称为根的左子树,Dr,Hr是一棵符合本定义的二叉树,称为根的右子树。基本操作P:void CreatBTNode(BTNode *&b,char *str)/由 str 串创建二叉链void InputBTNode(BTNode *&b,char *str)/记录输入void OutputBTNode(BTNode *&b,char *str)/从文件中读出记录void Destory(BTNode *&b,char *str)/清除全部的记录void Store(BTNode *b,char *str)/储存全部的结点记录void DispTree(BTNode *b)/用括号法输出家谱记录void TraverseBT1(BTNode *b)/中根遍历输出家谱void TraverseBT2(BTNode *b)/先根遍历输出家谱void PrintTree(BTree b)/树形输出家谱void TraverseBT(BTNode *b,int d)/遍历家谱树BTNode* SearchX(BTNode *b,char X)/查找结点Xvoid SearchXAncestor(BTNode *b,char X)/查找结点X 的所有祖先void SearchXSon(BTNode *b,char X)/查找结点X 的所有儿子void SearchXBrother(BTNode *b,char X)/查找结点X 的所有兄弟void SearchXParent(BTNode *b,char X)/查找结点X 的所有双亲void SearchXHouDai(BTNode *b,char X)/查找结点X的所有后代ADT BinaryTree三、系统设计1.系统功能模块图 家谱操作主菜单系统主要有这几个功能,分别是创建,输入、输出和保存记录,查找某人的双亲,孩子,兄弟,祖先和后代,删除,以某种形式(括号输出,中序、先序遍历,树形输出)输出家谱数据,以及进入、退出操作系统。每个功能对应一个函数,对同一棵二叉树进行操作,通过系统操作主菜单界面,可分别调用各函数完成相应的功能。清除记录保存记录查找对应关系输出家谱记录输入记录输出2. 设计数据元素由于系统所采用的是孩子兄弟法表示二叉链表,所以整个家谱管理系统主要包括根节点(b)、孩子结点(firstchild)、兄弟结点(nextsibling)和普通结点(如:p)代表的指针。每个结点都包括数据域(data),同时也定义了辈分(degree),由此共同形成家谱。3. 各个函数的设计1. 输入函数 void InputBTNode(BTNode *&b,char *str)/记录输入设计思路与算法描述:定义根结点指针b和数组指针str,当输入的是0时,则没有输入有效的数据,则重新进行输入。输入数据应该以括号输入法输入,逗号左边的是该人的孩子,右边的是该人的兄弟,然后再调用创建函数,将输入的数据进行创建即可。2.输出函数void OutputBTNode(BTNode *&b,char *str)/从文件中读出记录设计思路与算法描述:定义一个文件fp,如果打开文件并且对其进行读写操作仍空,则该文件不出在,需要创建一个新的文件,如果可以打开文件,并且可以进行读写操作,则表示文件已经建立,则将文件中的数据读出,调用创建函数,将数据存入到数组中,以便创建这些数据。3储存函数 void Store(BTNode *b,char *str)/储存全部的结点记录设计思路与算法描述:定义一个指针p,将根结点b赋值给p,同时也定义一个文件fp,并且打开文件,进行读写操作,使数据能够存入文件中,若文件为空,则存入数据失败;若文件不为空,只要没有到数据的末尾,则对磁盘文件进行读写,输入到指定区域,最后要关闭文件,以免数据丧失。然后调用创建函数,对保存到数组中的数据进行创建即可。4清除函数void Destory(BTNode *&b,char *str)/清除全部的记录设计思路与算法描述:将根结点赋值为空,定义一个文件fp,打开文件,进行只写的操作,使数据能够输入到文件中,若文件本是空的,即打开文件失败,否则就将数组第赋为空(“”),即清除了所有的数据,最后要关闭文件,以免数据丧失。5. 查找函数BTNode* SearchX(BTNode *b,char X)/查找结点Xvoid SearchXAncestor/SearchXSon/SearchXBrother/SearchXParent/SearchXHouDai (BTNode *b,char X)/查找结点X 的所有祖先/孩子/兄弟/双亲/后代(此部分包含多个查找函数,在此不便一一阐述,所以只选取几项进行分析)BTNode* SearchX(BTNode *b,char X)/查找结点X设计思路与算法描述:定义根结点b和普通结点p指针,以及要查找的结点X。如果这棵树为空,那么不存在结点X,返回空;当树不为空时,如果根结点的data域是X,那么根结点即是要找的结点X,否则,调用函数本身分别在其的左子树和右子树上递归,将找到的值赋值给p,如果p不为空,返回p,即是要找的结点X。void SearchXSon(BTNode *b,char X)/查找结点X 的所有儿子设计思路与算法描述:定义三个指针,分别为根结点指针b,普通指针p、q,首先通过调用查找结点X函数找到该结点,并且赋值个p,当p不为空时,则将p的第一个孩子赋值给p,若第一个孩子不存在,则X没有孩子,否则输出第一个孩子,此时即是p的data与域,然后再将p的第一个孩子的第一个兄弟赋值给q,当q不为空时,输出第一个兄弟,此时即是q的data与域,再使q指向下一个兄弟,直到将所有兄弟输入即可。6. 输出家谱函数void DispTree(BTNode *b)/用括号法输出家谱记录void PrintTree(BTree b)/树形输出家谱void TraverseBT1/ TraverseBT2(BTNode *b)/中根遍历输出家谱/先根遍历输出家谱(此部分包含多个输出家谱函数,在此不便一一阐述,所以只选取几项进行分析)void TraverseBT1(BTNode *b)/中根遍历输出家谱设计思路与算法描述:定义根结点b指针,如果b不为空,那么首先在其左子树上进行遍历,以左,根,右的顺序遍历,当整个左子树都被遍历了,则输出根结点,然后再遍历右子树,按照在左子树上的顺序遍历即可。4、 编码实现(部分代码)void SearchXSon(BTNode *b,char X)/查找结点X 的所有儿子 BTNode *p,*q;p=SearchX(b,X); /找到节点Xif(p!=NULL)/保证该节点存在时继续 p=p-firstchild;/左子树上存孩子,若无左孩子,则无孩子if(p=NULL) /X 没有孩子printf(节点%c 没有儿子!,X);else printf(节点%c 的所有儿子为:,X);if(p!=NULL)printf(%c ,p-data);/输出第一个孩子q=p-nextsibling;/指向其兄弟while(q) printf(%c ,q-data);/输出第一个兄弟q=q-nextsibling;/指向下一个兄弟elseprintf(该结点不存在!);5、 调试分析5.1 主菜单:提供了操作交互见面,不同的输入可做不同的操作,可以反复操作,直到退出系统. 图5.1 程序开始界面 5.2创建和保存、删除记录:在开始菜单选择1,进入输入记录操作;然后选择2,进入输出文件记录操作;再选择3,进入保存文件操作;选择4,进入删除记录操作。 图5.2创建和保存、删除记录 5.3输出家谱操作:在开始菜单选择10,进入中序输出操作;在开始菜单选择11,进入先序输出操作;在开始菜单选择12,进入括号输出操作;在开始菜单选择13,进入树形输出操作。 图5.3输出家谱操作5.4查找操作:在开始菜单选择5,进入查找儿子操作;选择6,进入查找祖先操作;选择7,进入查找双亲操作;选择8,进入查找后代操作;选择9,进入查找兄弟操作。 图5.4查找操作5.5退出系统:在开始菜单中选择0,即可退出。 图5.5退出系统操作 6、 课设总结 人人皆云:“实践出真知”“实践是检验真理的唯一标准”等人尽皆知的谚语,通过这次课设,我也深刻的理解了这些话的精神所在。经过这次课设,我深知我的能力相当有限,有许多不足之处,首先,是自己的心态不对,太急于求成,往往会忽略掉一些细节上的毛病,如遗漏符号,打错符号等问题,通过课设也有所改进;其次,对数据结构所学的知识以及一些算法了解颇浅,对函数的调用,以及一些

温馨提示

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

评论

0/150

提交评论