1、(4)编程:在计算机上实现题目的代码实现。(5)完成对该系统的测试和调试。(6)提交课程设计报告。要求完成课程设计报告3000字以上(约二十页)。完成若干综合性程序设计题目,综合设计题目的语句行数的和在100行语句以上。2.原始依据结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。提高程序设计和调试能力。学生通过上机实习,验证自己设计的算法的正确性。学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。3.参考题目:二、工作量2周(10个工作日)时间三、计划安排第1个工作日:查找相关资料、书籍,阅读示例文档,选择题目
2、。第2个工作日第3个工作日:设计程序结构、模块图。第4个工作日第9个工作日:完成程序的编码,并且自己调试、测试。穿插进行课程设计报告的撰写。第10个工作日:上交课程设计报告,由教师检查软件测试效果、检查课程设计报告,给出学生成绩。 2013年 12月 30日题目一:居民信息管理系统(以二叉树建立)算法分析与设计1.需求分析此系统是根据用户的需求,主要是对居民的基本信息进行登记,统计,并对居民信息进行管理。系统除了以上功能外还要有基本的管理工作,例如添加居民信息,修改居民信息,删除居民信息等最基本的操作,还有就是通过本系统还可以统计出在在各个教育程度的人数,方便应用者更加的快捷的做出统计,提高工
3、作效率。2.概要设计本系统中定义jumininfo结构体类型用于描述居民信息。jumininfo结构体类型定义格式如下:typedef struct char num18; char name21; char sex5; char age4; char xueli11; char addr51; char tel21;jumininfo;其中num用于描述居民的身份证号信息,name用于描述居民的姓名信息,sex用于描述居民的性别信息,age用于描述居民的年龄信息,xueli用于描述居民的教育程度信息,addr用于描述居民的地址信息,tel用于描述居民的联系方式信息。本系统中定义nodetyp
4、e结构体类型用于建立二叉树的节点。nodetype结构体类型定义格式如下:typedef struct node jumininfo jumin; struct node *L; struct node *R;nodetype;其中jumin用于存储居民个人信息,*L为指向左孩子的指针,*R为指向右孩子的指针。3.详细设计依据需求分析结果,居民信息管理系统系统可以分为四个模块:居民信息查询模块、居民信息删除模块、居民信息添加模块和居民信息修改模块。如下图所示:图2-1 居民信息管理系统模块结构1. 居民信息查询模块居民信息查询模块主要实现的功能是居民信息的快速查询。依据用户输入的身份证号查找对
5、应的居民信息。2. 居民信息删除模块居民信息删除模块主要实现的功能是对特定居民信息的删除。3. 居民信息添加模块居民信息添加模块主要是闲的功能是对固定数量的居民信息的添加。4. 居民信息修改模块居民信息修改模块主要实现的功能是对特定居民信息的修改。5.系统总体流程4.调试分析1. 程序设计及过程一、设想将上一次单链表的课程设计所编写的成程序改写,定义成为二叉树结构类型。结果:失败,单链表指针指向与二叉树完全不同,使整个程序指针结构改变工作量变得很大,短时间内一人无法完成。二、参考书本,重新定义类型结构,取单链表课程设计部分显示函数进行重新编辑。比较成功,建立了一个以二叉树结构为基础的管理系统。
6、缺点:将文件存入文件和从文件读取没有实现,二叉树的写入与单链表区别较大,已经找出将树存入文件的方法,但读取程序未能编写成功,因此在本次课程设计中未加入写入文件模块。目前程序中未能实现的功能除了从文件读取功能外,还有查找功能。查找功能的程序代码已经编写完成,但是实际测试中未能达到与其功能,具体问题仍然在分析和Debug中,本次课程设计不便列举。由于查找功能的缺失,使二叉树节点信息的删除和修改功能也未实现。但本次课程设计的主要目的是成功的建立二叉树并将其遍历,鉴于此功能已经实现,可以基本确定此次课程设计的基本目的已经达到。5.测试结果及运行效果进入主菜单,按数字键选择所需功能:图5-1显示主菜单选
7、择录入居民信息:当输入身份证号不是18位时:录入成功时:图5-3录入成功输入“#”结束录入,返回主菜单。选择显示居民信息:系统自动中序遍历已建成的二叉树。图5-4中序遍历已建成的二叉树选择插入居民信息:优点:系统自动选择二叉树上合适的位置插入信息每次只能插入一个居民信息题目二:居民信息管理系统(单链表建立含各种排序)算法分析与设计与题目一相同本系统中定义jumin结构体类型用于描述居民信息。jumin结构体类型定义格式如下:struct jumin int num; char name20; char sex; int age; char xueli30; int wage; char add
8、r30; char tel20;jumin100其中num用于描述居民的户籍号信息,name用于描述居民的姓名信息,sex用于描述居民的性别信息,age用于描述居民的年龄信息,xueli用于描述居民的教育程度信息,wage用于描述居民的收入信息,addr用于描述居民的地址信息,tel用于描述居民的联系方式信息。本系统中定义rectype结构体类型用于建立链表,定义格式如下: int key; jumininfo info;rectype;3.1主函数模块主函数模块主要提供本程序运行的基础以及供用户选择子函数功能。3.1.1. 主函数模块描述由homepage函数显示功能菜单,由用户选择需要的功
9、能并连接到对应的功能函数。3.1.2. 主函数模块设计实现进入程序运行结果如下截图:图3.1-1 主函数运行结果若用户输入1-7以外的字符,则如下图:3.2录入居民信息子模块录入居民信息子模块主要提供用户录入居民信息至系统指定文件并存储的功能。3.2.1. 录入居民信息子模块描述经由main函数进入录入函数,用户根据系统提示按步骤输入居民信息。3.2.2. 录入居民信息子模块流程框图图3.2-3 录入信息模块流程框图3.2.3. 录入居民信息子模块设计实现3.3修改居民信息子模块修改居民信息子模块主要提供用户修改已录入的居民信息并存储改变的功能。3.3.1. 修改居民信息子模块描述经由main
10、函数进入修改函数,用户根据系统提示按步骤选择需要修改的项目并修改。3.3.2. 修改居民信息子模块流程框图图3.3-5 修改信息模块流程框图3.3.3. 修改居民信息子模块设计实现当进入系统模块时未读取到数据库时5秒后系统自动返回主菜单。进入系统成功读取数据库:3.4 写入/读取信息子模块写入/读取信息子模块主要提供用户在录入和编辑信息后将信息存入文件以便下次运行程序继续读取信息的功能。此模块通常在后台运行,只在读取或写入文件发生错误时显示文件打开错误!请先录入信息列表。系统将自动返回主菜单,请稍候. ,并在5秒后自动返回主菜单。在进入各模块时读取错误如下:图3.4-11 进入浏览模块式读取文
11、件错误图3.4-14 进入浏览模块式读取文件错误3.5 按年龄直接插入排序子模块按年龄直接插入排序子模块主要提供用户在存储信息后将信息按年龄由小到大顺序排序的功能。目前还存在在每次排序完成后会在数据列表最前端插入一组空数据的BUG,且到目前为止并未修复。图3.4-15 按年龄直接插入排序子模块3.6 按户籍号直接选择排序子模块按户籍号直接选择排序子模块主要提供用户在存储信息后将信息按户籍号由小到大顺序排序的功能。图3.4-15 按户籍号直接选择排序子模块总 结课程设计终于成功的收尾了,虽然有些疲惫但是颇有收获,我巩固了所学到的知识,并动手实践,更好地理解和运用了数据结构的知识。数据结构学了近一
12、学期,很多知识掌握得不是很牢,通过平时的复习自己也理解了一些,但让我有更深的理解和更好的认识则是在这个课程设计。通过本次课程设计,复习了上学期的C语言编程知识,学会了怎么去借鉴别人方法 和经验,知道了如何整理材料是设计最快的完成这为以后设计毕业论文打下了基础。此次课程设计鉴于上次的经验我选择了独立一人一组。觉得虽然程序编写有些吃力,但是一个人完成程序时的成就感也加倍了。由于临近期末,复习任务紧张,这次的课程设计完成的还不是很周密,还有很多可以完善的地方,但总的来说已经达到我之前预想的程序效果。在这次课程设计中,我还帮助了其他小组课程设计的完成,见到了很多的程序错误,并帮他们改正,这也锻炼了我个
13、人在程序debug方面的能力。还着愉快的心情,数据结构课程设计结束了。希望在这次课程设计中所总结的经验和教训会让我以后的课程设计更加顺利。参考文献1 严蔚敏.吴伟民著.数据结构(C语言版). 北京:清华大学出版.1999年第一版2 陈一华等编. 数据结构(C 语言). 北京:电子科技大学出版社.1998年第一版3 谭浩强. C语言程序设计(第二版).北京:高等教育出版社.2002附录.主要代码题目一#include string.hstdlib.hmalloc.hwindows.htypedef nodetype *btree;/*void write(btree k,char * num)
14、FILE *fp; if(fp=fopen(infolist.txt,a+)=NULL) printf (n); Sleep(3000); return; if(k) fwrite(&k-jumin.num,sizeof(nodetype),1,fp); if(k-L) write(k-L,k-L-jumin.num);R) R,k-R- fclose(fp);*/btree bssearch(btree p,char *num) while(p!=NULL) if(strcmp(num,p-jumin.num)=0) return p;jumin.num)L; else p=p-R; ret
15、urn p;void insert(btree * root,char * num) /FILE *fp; btree f,p; char name20,sex4,age3,xueli10,addr50,tel20; /fp=fopen(a f=NULL; p=*root; while(p) printf(该身份证号居民信息已存在,请重新输入! return; f=p; p=(strcmp(num,p-0)?p-L: p=(btree)malloc(sizeof(nodetype); strcpy(p-jumin.num,num); printf(请输入姓名(少于10个汉字): scanf(%
16、s,name);jumin.name,name);请输入性别(男或女):,sex);jumin.sex,sex);请输入年龄(少于3个数字):,age);jumin.age,age);请输入学历(少于5个汉字):,xueli);jumin.xueli,xueli);请输入家庭住址(少于25个汉字):,addr);jumin.addr,addr);请输入电话号码(少于20个数字或字符):,tel);jumin.tel,tel); p-L=NULL;R=NULL; if(*root=NULL) *root=p; else if(strcmp(num,f- f-L=p; elseR=p; /writ
17、e(p,p- /*while(p- if (fwrite(&jumin.num,sizeof(nodetype),1,fp)!=1)File write error! if(p- if(p-R) p=p- */ /fclose(fp);/*void read(btree k,char *num) if(fread(&jumin.num,sizeof(nodetype),1,fp)! exit(0); insert(&k,k- read(k-void inorder(btree t)/中序遍历 /read(t,t- if(t) inorder(t-L); printf( 户籍号t 姓名tt 性别
18、tt年龄 nn %stt %stt %stn,t-jumin.num,t-jumin.sex,t-jumin.age);n 学历tt 住址tt电话 nn %stt %stt%snjumin.xueli,t-jumin.addr,t-jumin.tel);R);btree createbtree(void) btree root; char num19; root=NULL;n请输入18位身份证号,输入#取消录入n,num); while(strcmp(num,#)!=0) while(strlen(num)!=18)错误!输入的身份证号不是18位,请重新输入: scanf(root,num);
19、 return root;btree Delete(btree bt,char *num) btree p,q; if(strcmp(bt-jumin.num,num)=0) if(bt-L=NULL&bt-R=NULL) free(bt); return NULL; if(bt-L=NULL) p=bt- free(bt); return p; if(bt- p=q=bt- while(q-L! q=q- q-L=bt- if(strcmp(bt-jumin.num,num)0& bt-L=Delete(bt-L,num);jumin.num,num)R,num); return bt;vo
20、id quit()(略)void homepage() /*菜单函数*/void main()题目二此处只给出排序函数,其他部分同C语言课程设计void insertsort(rectype r)/按年龄直接插入排序 int i,j; int m=load();n 原来的居民信息: display();nnnn for(i=1;im;i+) ri.key=ri.info.age; for(i=2;=m; rm+1=ri; j=i-1; while(rm+1.keyrj.key) rj+1=rj-; rj+1=rm+1; save(m+1); printf(n 排序后的居民信息:void selectsort(rectype r)/按户籍号直接选择排序rectype x; int i,j,k; for(i=0; ri.key=ri.info.num; ; k=i; for(j=i+1;jj+) if(rj.keyrk.key) k=j; if(k!=i) x=ri; ri=rk; rk=x; save(m+1);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1