贵州工程应用技术学院课程设计(数据结构)2015年3月1日班级:程序设计人员:报告制作人员:答辩人员:指导教师:课程设计任务书及成绩评定Ⅰ、题目的目的和要求:1、设计目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。(1)通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。(2)能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。2、设计题目要求:编写一个程序,采用链式队列模拟病人到医院就诊的过程,设计一个病人就医管理系统。Ⅱ、设计进度及完成情况日期内容第1周1、课程设计分组分工、选题2、查阅参考文献3、确定设计方案和制定进度计划第2周第一部分概述第二部分系统分析第3、4周第三部分概要设计第5、6周第四部分详细设计第7周第五部分运行与测试第8周第六部分撰写并整理课程设计报告第9周课程设计答辩课题名称病人看病模拟程序Ⅲ、主要参考文献及资料[1]严蔚敏数据结构(C语言版)清华大学出版社2007[2]严蔚敏数据结构题集(C语言版)清华大学出版社1999[3]谭浩强C程序设计(第四版)清华大学出版社[4]与所用编程环境相配套的C语言资料Ⅳ、成绩评定:成绩:(教师填写)指导老师:(签字)2015年3月1日目录第一章概述……………………………………………………………1第二章系统分析………………………………………………………2第三章概要设计………………………………………………………3第四章详细设计………………………………………………………4第五章运行与测试……………………………………………………5第六章总结与心得……………………………………………………6参考文献………………………………………………………………7第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我们选择的题目是病人看病模拟程序,我们将采用链式队列来模拟病人看病的程序。传统的病人看病就诊的基本业务活动有挂号、排队、就诊。通常病人去医院排队看医生主要重复两件事情:(1)病人到达诊室,将病历本交给护士,排队等待队列中候诊。(2)护士从等待队列中取出下一位病人病历,该病人进入诊室就诊。当你拿上自己的病历后到达相应的诊室门口进行排队,等待护士叫到你相对应的号数你才能进入就诊室就诊,这样一来排队就诊的效率相对就较低,也浪费了医院的劳动力,但是现在这些业务可以借助计算机系统完成,我们可以通过计算机设计相关的程序来处理相关的排队就诊问题,这样效率可以得到提高,也可以减少劳动力的浪费,让我们负责排队就诊的护士可以去帮助其他更多的人,这就使得病人看病的相关排队就诊等相关手续变简、效率变高、劳动力得到充分的释放,既方便病人,又方便医生和护士。第二章系统分析该项目需要模拟病人看病的步骤,由于病人看病一般规则都是先到先排,排在队前的先就诊。根据这个特点可以采取队列(先进先出)的形式来存储数据元素构建数据结构。由于一般的医院都不止一个科室故在本题中设计六个科室,因此需设计六个队列。依据该项目需求实现的排队、就诊、查看排队人数等功能。可以抽象出需要设计的算法有:队列数据结构的定义、队列的初始化、队列的插入操作、队列的删除操作、求队列长度以及销毁队列等基本操作。本程序采用菜单方式,其选项及功能说明如下:显示可选择的各诊室。排队——输入排队病人的病历号,加入到某诊室病人排队队列中。就诊——该诊室病人排队队列中最前面的病人就诊,并将其从队列中删除。查看各诊室排队——从队首到队尾列出所有的该诊室排队病人的病历号。不再排队,余下依次就诊——从队首到队尾列出所有的排队病人的病历号及就诊诊室,并退出运行。下班——退出运行。第三章概要设计1、数据结构设计队列是一种特殊的线性表,是限制在表的、一端进行插入和另一端进行删除的线性表。表中允许插入的一端称为队尾(rear),允许删除的另一端称为队头(front)。队列可以采用顺序存储和链式存储两种方式,依据本课题要求采用链式存储方式更为方便,故采用队列的链式存储这一数据结构来处理各种操作。具体的结构定义如下:1、链队节点元素(抽象出的病人数据结构)类型定义Typedefstuructnode{Longdata;//队列节点的内容,即为存放病人的基本信息structnode*next;//下个元素的指针,即为下一位病人的地址}qnode*pqnode;2将头尾指针封装在一起的链队(排队队列)Typedefstruct{Pqnodefront,rear;//队列的头尾元素指针}linkqueue,*plinkqueue2、算法的设计本程序包含两个模块:a、主程序模块voidmain()b、队列操作模块:实现所要求的所有实际操作;3、抽象数据类型图的定义此程序采用队列数据结构,存储结构为单链表,采用此种结构一方面可以减少数据复杂程度,增加系统稳定性;另一方面,利于动态分配内存的放法,便于内存管理,充分利用内存空间。Intmenu_select()//菜单选择程序,要求用户输入一个正确的菜单选项。如果不正确,则重复调用此子程序,知道输入的值是正确的。Structbingli*(creat())//创建一个单链表。如果创建成功,则返回这个单链表的表头;如果创建不成功,则退出程序。Voidlistlnsert_rear(structbingli*head)//创建一个单链表成功后,再次排队时则调用此子程序,作用是在单链表尾部插入一个病历号码。如果插入不成功,则退出程序。Structbingli*(listdelete(structbingli*head))//就诊程序。作用是输出就诊的病历号(即队首元素),并且删除队首元素、释放其所占空间。Voiddisplay(structbingli*head)//显示队列所有元素4、主程序(main)就诊(Listdelete)退出运行(return)排队(creat)不在排队,余下顺序就诊(display,return)查看排队情况(display)