数据结构无头单循环.docx
- 文档编号:5264311
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:13
- 大小:89.16KB
数据结构无头单循环.docx
《数据结构无头单循环.docx》由会员分享,可在线阅读,更多相关《数据结构无头单循环.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构无头单循环
长治学院
课程设计报告
课程名称:
数据结构
设计题目:
门诊挂号管理系统
系别:
计算机系
专业:
计算机科学与技术
组别:
18
学生姓名:
王鹏学号:
10407133
起止日期:
2012年3月23日—2012年6月12日
指导教师:
孙俊杰
目录
第一章需求分析----------------------------------------------------3
1.1课程设计题目-----------------------------------------------3
1.2课程设计任务及要求-----------------------------------------3
1.3课程设计的思想---------------------------------------------3
1.4程序运行的环境及开发工具-----------------------------------3
第二章概要设计----------------------------------------------------4
2.1门诊挂号管理系统的流程图-----------------------------------4
2.2主要的数据结构---------------------------------------------5
2.3完成本课程设计所用方法及其原理的简要说明-------------------5
第三章详细设计----------------------------------------------------5
3.1课程设计整体结构-------------------------------------------5
3.2部分程序---------------------------------------------------5
第四章调试与操作说明----------------------------------------------9
第五章课程设计总结与体会------------------------------------------10
第六章致谢-------------------------------------------------------11
第七章参考文献----------------------------------------------------12
第八章附录-------------------------------------------------------12
第九章成绩评定----------------------------------------------------13
第一章需求分析
1.1课程设计题目:
门诊挂号管理系统(采用带头结点单循环链表)
1.2课程设计任务及要求:
通过这次课程设计,了解并初步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
本课程设计要求做门诊挂号管理系统,采用带头结点单循环链表来完成。
系统要求能实现以下功能:
1.使用密码启动模块进入界面,并且要求能修改密码;
2.可以进行门诊挂号情况的数据建立、显示;
3.实现门诊挂号信息的删除(包括按姓名删除和按病历号删除)、插入(包括插入到尾部和插入到任意位置)、查找(包括按姓名查找和按病历号查找)、排序(包括按病历号排序和按挂号码排序)、统计(分别统计:
每位医生所看病人数及所得总挂号费及总收入)的功能;
4.可以将内存中的数据存入磁盘。
5.可以将磁盘保存的数据载入内存。
1.3课程设计思想:
首先编写建立、显示、删除、插入、查找、排序、统计等各个模块(子函数),然后通过函数调用等方式将这些模块连接起来,并编写启动界面和密码修改模块以及存盘、读盘函数,最后经过不断地调试和修改成为完整的门诊挂号管理系统。
1.4程序运行环境及开发工具:
主要工具:
WindowsXP操作系统;
MicrosoftVisualC++6.0;
辅助工具:
TurboCC++V3.0汉化版;
记事本;
第二章概要设计
2.1门诊挂号系统的流程图
2.2主要的数据结构
本课程设计主要包括以下几个模块:
01.门诊挂号管理系统的建立操作
02.门诊挂号管理系统的显示操作
03.门诊挂号管理系统的删除操作
04.门诊挂号管理系统的插入操作
05.门诊挂号管理系统的查找操作
06.门诊挂号管理系统的排序操作
07.门诊挂号管理系统的统计操作
08.门诊挂号管理系统的修改操作
09.门诊挂号管理系统的挂号操作
10.门诊挂号管理系统的保存操作
11.将数据存入磁盘文件
12.将磁盘文件载入内存
13.退出系统
2.3完成本课程设计所用方法及其原理的简要说明:
调用库函数、各个功能模块函数之间的互相调用
第三章详细设计
3.1课程设计整体结构
本课程设计采用带头结点单循环链表来做门诊挂号管理系统,包括门诊挂号库的建立操作、显示操作、删除操作、插入操作、查找操作、排序操作、统计操作、修改系统的密码操作、将数据存入磁盘文件操作、将磁盘文件载入内存操作、以及退出系统操作等模块。
除此之外还包括系统启动窗口界面函数、密码隐藏函数、输入错误提示函数、判断是否为空链表并提示的函数、限定数据范围函数、链表的销毁函数等。
3.2部分程序:
(1).门诊挂号库的建立操作
voidsetlink(Link*head)
{/*(采用后插法)建立单链表*/
charstr[15],ch;
inti=0,age;
LNode*q,*p,*r;
printf("是否录入数据?
(y/n)");
scanf("%c%*c",&ch);
if(ch=='y')
{
printf("病历号---姓名---性别---年龄---日期---医生---科室---挂号费---挂号码\n");
q=(LNode*)malloc(sizeof(LNode));
q->next=q;
*head=q;p=q;
}
while(ch=='y')
{
printf("请输入病历号:
\n");
gets(str);
while(strlen(str)==0||cxsd(str))
{
printf("病历号中不能包含字符和小数点请重新输入病历号:
\n");
gets(str);
}
r=*head;
while(r->next!
=*head&&!
(strcmp(r->num,str)==0))r=r->next;
if(strcmp(r->num,str)==0)
{
printf("编号以经存在!
是否重新录入数据?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')continue;
elsebreak;
}
strcpy(q->num,str);
i++;
printf("请输入医生名:
\n");
gets(str);
while(strlen(str)==0||xsd(str))
{
printf("医生名中不能包含数字和小数点请重新输入医生名:
\n");
gets(str);
}
strcpy(q->dname,str);
if(i==1)
q->numb=-1;
r=*head;
while(r->next!
=*head&&strcmp(r->dname,str)!
=0)
r=r->next;
if(strcmp(r->dname,str)==0)
q->numb=r->numb+1;
else
q->numb=0;
printf("请输入科室名:
\n");
gets(str);
while(strlen(str)==0||xsd(str))
{
printf("科室中不能包含数字和小数点请重新输入科室:
\n");
gets(str);
}
strcpy(q->keshi,str);
q->fee=0;
printf("请输入姓名:
\n");
gets(str);
while(strlen(str)==0||xsd(str))
{
printf("姓名中不能包含数字和小数点请重新输入姓名:
\n");
gets(str);
}
strcpy(q->name,str);
printf("请输入年龄:
\n");
gets(str);
age=atoi(str);
if(age>110||age<0)
{
printf("年龄输入错误请重新输入:
\n");
scanf("%d",&age);
getchar();
}
q->age=age;
while
(1)
{
printf("请输入性别:
(man/woman)\n");
gets(str);
if(strlen(str)==0||xsd(str))
{
printf("请输入性别:
\n");
gets(q->sex);
}
if(strcmp("man",str)==0||strcmp("woman",str)==0)
break;
}
strcpy(q->sex,str);
printf("请输入日期年月日用点号分隔(2012.03.02):
\n");
gets(str);
while(strlen(str)==0||jcrq(str)||strlen(str)!
=10)
{
printf("日期输入错误请重新输入:
\n");
gets(str);
}
strcpy(q->date,str);
if(q!
=*head)
{
q->next=head;/*链接后继指针*/
p->next=q;
p=q;
}
printf("是否继续录入数据?
(y/n)\n");
scanf("%c%*c",&ch);
if(ch=='y')q=(LNode*)malloc(sizeof(LNode));
}
}
(2).将磁盘文件载入内存
voidload(Link*head)
{/*在当前目录中打开任意名字的文件*/
LNode*p,*q=NULL;
charstr[30];
FILE*fp;inti=0;
printf("\n");
printf("\n");
printf("************************************\n");
printf("**\n");
printf("**\n");
printf("*门诊挂号管理系统文件载入窗口*\n");
printf("**\n");
printf("**\n");
printf("**\n");
printf("************************************\n");
printf("\n");
printf("\n");
printf("输入载入磁盘文件名(可带路径):
");gets(str);
fp=fopen(str,"rb");
while(fp==NULL)
{i++;
if(i==3)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("************************************\n");
printf("**\n");
printf("**\n");
printf("*请建立新链表后存盘保存*\n");
printf("**\n");
printf("*选择新磁盘文件载入*\n");
printf("**\n");
printf("**\n");
printf("************************************\n");
printf("\n");
printf("\n");
scanf("%*c");
exit(0);
}
printf("磁盘文件%s不存在!
\n",str);
printf("输入载入磁盘文件名(可带路径):
");gets(str);
fp=fopen(str,"rb");
}
while(*head)
{
p=(*head)->next;
free(*head);
(*head)=p;
}
printf("\n磁盘文件%s装入内存成功!
!
!
\n",str);
*head=inilink(*head);
*head=(LNode*)malloc(sizeof(LNode));
(*head)->next=*head;
p=*head;
while(!
feof(fp))
{
q=(LNode*)malloc(sizeof(LNode));
if(!
p)
{
printf("内存中无容量\n");
return;
}
if(1!
=fread(q,sizeof(LNode),1,fp))break;
q->next=p->next;
p->next=q;
p=q;
}
q=*head;
(*head)=(*head)->next;
free(q);
p->next=*head;
fclose(fp);
printf("\n\n");
printf("按任意键返回到主窗口!
");
scanf("%*c");
}
(3).按挂号码排序
LNode*sortdata(LNode*head)
{/*按挂号码排序*/
LNode*p,*q,*s,*r;
p=head;
head=(LNode*)malloc(sizeof(LNode));/*建立一个循环表头*/
head->next=head;
while(p->next!
=p)
{
q=p;/*q始终指向最小值*/
r=q->next;/*r移动指针*/
while(r!
=p)
{/*查找最小值*/
if(q->numb
r=r->next;
}
if(q!
=p){/*如果假设的最小值不正确*/
s=p;
while(s->next!
=q)s=s->next;/*确定最小值q的直接前驱s*/
s->next=q->next;/*删除最小值结点*/
}
else{
s=p;
while(s->next!
=p)s=s->next;
p=p->next;
s->next=p;
}
q->next=head->next;/*将最小值结点链接到此趟的第一个位置处*/
head->next=q;
}
p->next=head->next;/*将链表中最后一个结点接于表头之后*/
head->next=p;
s=head;/*删除表头*/
p=head;
while(p->next!
=head)p=p->next;
head=head->next;
p->next=head;
free(s);
returnhead;
}
第四章调试与操作说明
启动TurboC2.0,F3打开本课程设计的程序,Ctrl+F9运行。
说明:
1、进入门诊挂号管理系统,正确输入密码即可继续操作,初始密码为“1234”,如三次密码错误会退出系统。
2、可以先运行系统的修改密码模块,修改密码时,先输入原始密码,然后输入新密码,再次输入确认新密码,完成密码修改操作,修改后要使用新密码登陆。
3、此时还是个空链表,依次选择2、3、4、5、6、7、9,系统会提示这是一个空表,请先建立或载入后再继续操作。
4、选择1,建立门诊挂号信息,按提示要求输入即可,注意病历号不能相同。
5、依次选择2、3、4、5、6、7,运行系统的显示模块、删除模块、插入模块、查找模块、排序模块、统计模块。
6、选择11,运行将数据存入磁盘文件的操作,输入路径及文件名,保存。
7、选择13,退出系统。
退出时,会提示内存中有信息,询问是否保存,按提示操作即可。
第五章课程设计总结与体会
第六章致谢
这次做课程设计,除了我个人的努力之外,有很多人都对我提供了无私的帮助。
在此首先感谢孙俊杰老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪。
其次感谢咱们班的同学们,是我们一起讨论,一起查资料,一起学习,才使我们能完成这次课程设计,希望我们都能继续努力,相信我们以后会做的更好。
同时感谢邻班帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到了朋友之间真诚的友谊。
第七章参考文献
[1]《C程序设计(第三版)》谭浩强,北京:
清华大学出版社,2008年
[2]《数据结构(C语言版)》严蔚敏,吴伟民,北京:
清华大学出版社,2009年
[3]《数据结构(C语言版)》李春葆,北京:
清华大学出版社,2003年
[4]《数据结构实用教程》徐孝凯,清华大学出版社,2006年8月
第八章附录
本课程设计门诊挂号管理系统的源程序:
罗忠义.C
第九章成绩评定
指导教师评语:
指导教师签名:
年月日
成绩评定
项目
权重
成绩
1、设计过程中出勤、学习态度等方面
0.1
2、设计技术水平
0.4
3、编程风格
0.2
4、设计报告书写及图纸规范程度
0.3
总成绩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 单循环