课 程 设 计
题 目 | |
教 学 院 | 计算机学院 |
专 业 | 计算机科学与技术 |
班 级 | ****** |
姓 名 | ****** |
指导教师 | ***** |
| |
一 概述
1.课程设计的目的
1.理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养综合运用所学知识独立完成课题的能力。
3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中到解决问题的新途径的悟性,初步培养工程意识和创新能力。
2.课程设计的要求
设计要求:输入家族成员情况,建立树结构,统计家族成员人数,能查询家族成员辈份情况。 系统功能:
2. 查询功能:
1)某家谱成员的所有子孙的集合
2)某家谱成员的所有祖先的集合
3)某家谱成员的所有同辈成员的集合
4)求某家谱成员的所有上一辈成员的集合
5)给出两个家谱成员,确定他们的关系
3. 统计功能电子散热扇
1)统计家谱成员总人数
2)统计从事某种职业的人数
二 总体方案设计
1.简单家谱系统整体设计思路
此次课程设计的整体思路是采用遍历算法,整个树的定义使用两个结构体来表示,一个结构体专门用于存放每一个节点的信息,另一个节点中定义了三个指针域,分别为父指针域(兄长指针域),兄弟指针域,子指针域,整个树的输入采用文件导入的方式,首先将文件导入到树中,文件包含每一个家族成员的信息,以及一个标志位flag,标志位的值为0,1,2,0表示此节点没有兄弟节点,1表示此节点至少有一个子节点,2表示此节点至少有一个兄弟节点,使用的算法是先定义一个链式队列,将文件中第一个节点的内容读取放入开辟的树的节点的空间里,然后将树节点放入队列中,此时队列不为空,以队列不为空为判断条件,进行while循环,判断flag的值,循环体中再进行文件读取,循环中进行判断,若flag为0,则继续判断队列是否为空,为空就结束循环,若不为空,则继续出队列,取标志位进行判断,若标志位为1,则生成新节点,用刚刚出列的节点的子指针域进行指向新节点,新节点的父指针域指向出列的节点,剩余的域为空,然后将新生成的节点插入到队列中,若flag为1,则进行兄弟节点的插入,继续循环,若flag不为0,则在进行判断,若为2,则继续进行兄弟节点的插入,以此类推,根据文件的读取,将树生成,本程序中所有的算法都基于以上所介绍的算法。 2.简单家谱系统的主要特点及功能
本系统的主要特点是算法简洁,易于阅读,用户交互界面良好。
主要实现功能如下:微机消谐装置umg92
1、 查询全部的家谱成员信息;
2、 查询某一个家谱成员的信息;
3、 查询某一成员的所有子孙信息;
4、 查询某一成员的所有祖先信息;
5、 查询某一成员的所有同辈信息;
6、 查询某一成员的所有上辈信息;
7、 统计家谱中所有的人数;
8、 统计家谱中从事某一职业的人数;
9、 修改某一成员的家谱信息;
10、 输入两个人的名字,求其关系;
0、 退出;
系统结构图
贾府结构图:
三 详细设计
4.1 查询全部的家谱成员信息;
该部分程序所完成的具体功能是把贾府中所有的成员信息按照辈份依次显示出来,首先从贾无名开始,然后下一辈份的贾演、贾源等……最后是贾蓉的信息。每个辈份之间都有间隔。
设计思想:利用队列遍历所有的结点,在遍历的同时依次输出每个结点的值(即为家庭成员的信息)。
代码如下:
void displayElemtoFamily(LINKFAMILY lfy)
{ int flag=1;
LinkQueues linkq;
initLinkQueues(linkq);
displayElem(lfy);
insertElemtype2Queues(linkq,lfy);
破窗锤
while(isQueuesEmpty(linkq)!=0)
{ LINKFAMILY temp=output2LinkQueues(linkq);
if(temp->down!=NULL)
超高压汞灯 { temp=temp->down;
if(flag<temp-&ade)
{ printf("\n----------------------下一辈------------------------\n");
flag=temp-&ade;
}
displayElem(temp);