数据结构无头单循环.docx

上传人:b****3 文档编号:5264311 上传时间:2022-12-14 格式:DOCX 页数:13 大小:89.16KB
下载 相关 举报
数据结构无头单循环.docx_第1页
第1页 / 共13页
数据结构无头单循环.docx_第2页
第2页 / 共13页
数据结构无头单循环.docx_第3页
第3页 / 共13页
数据结构无头单循环.docx_第4页
第4页 / 共13页
数据结构无头单循环.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

数据结构无头单循环.docx

《数据结构无头单循环.docx》由会员分享,可在线阅读,更多相关《数据结构无头单循环.docx(13页珍藏版)》请在冰豆网上搜索。

数据结构无头单循环.docx

数据结构无头单循环

长治学院

课程设计报告

课程名称:

数据结构

 

设计题目:

门诊挂号管理系统

系别:

计算机系

专业:

计算机科学与技术

组别:

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->numbnumb)q=r;/*按挂号码排序*/

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

总成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1