医务室排队就诊的队列模拟
1 引 言 ................................................... - 3 -
1(1问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
的提出 .......................................... - 3 -
1.2 C语言 ............................................... - 3 -
1.3 C语言发展过程 ....................................... - 3 -
1.4任务与分析 ........................................... - 3 - 2 设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
................................................. - 4 -
2.1整体设计方案 ......................................... - 4 -
2.2结构体创建 ........................................... - 4 -
2.3创建等待队列并进行简单操作 ........................... - 6 -
2.4寻找最短等待时间 ..................................... - 7 - 3(程序演示: .............................................. - 8 - 结 论 ..................................................... - 9 - 致 谢 .................................................... - 10 - 参考文献 .................................................. - 16 -
- 1 -
摘 要
随着计算机的普及~计算机技术的发展~以软件为核心的信息产业对人类的经济~政治~文化产生了深远的影响~医务室排队就诊也需要在计算机上统计显示~本程序将模拟医务室排队就诊~对到达的病人数~病人到达的时间间隔以及所需诊断时间随即产生~输出医生的总等待时间和病人的平均等待时间。
关键词:医生诊断~等待~随即
1 引 言
1(1问题的提出
以前的操作系统等系统软件主要是由汇编语言编写的(包括,,,,操作系统在内)。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。为了提高可读性和可移植性,最好改用高级语言,但一般高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如,对内存地址的操作、位操作等)。人们设想能否找到一种既具有一般高级语言特性,又具有低级语言特性的语言,集它们的优点于一身。于是,,语言就在这种情况下应运而生了。
1.2 C语言
C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言。 1.3 C语言发展过程
1973年,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
1977年Dennis M.Ritchie 发
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。
1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著《The C Programming
Language》,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。 1.4任务与分析
任务是一个医务室排队就诊的问题,到达的病人数,,病人到达的时间间隔和每病人所需诊断时间都是随机数
2 设计方案
2.1整体设计方案
此课题是医务室排队就诊的队列模拟为了直观和方便,画出流程图如下图1:
开始
总时间<60
随机产生病人间隔时间
随机产生医生就诊时间
当前人数数加1
判断是否等待
计算等待时间
显示
图1 退出
2.2结构体创建
要显示某个小时之内到达的病人数以及病人到达的时间间隔和医生的就诊情况。
typedef struct
{
int arrive;
int treat;
}PATIENT;
typedef struct queue
{
PATIENT data;
struct queue *link; }QUEUE;
两个结构体第一个是病人的包含的是到达的时间和等待的时间 第二个是队列是一个链队列,将病人的数据存放到里面
2.3创建等待队列并进行简单操作
void EnQueue(QUEUE **head,QUEUE **tail,PATIENT x)
//进队操作
{
QUEUE *p;
p=(QUEUE*)malloc(sizeof(QUEUE));
p->data=x;
p->link=NULL;
if(*head==NULL)
*head=*tail=p;
else
{
(*tail)->link=p;
*tail=p;
}
}
int DeQueue(QUEUE **head,QUEUE **tail,PATIENT *cp)
//出队操作
{
QUEUE *p;
p=*head;
if(*head==NULL)
return 1;
*cp=(*head)->data;
*head=(*head)->link;
if(*head==NULL)
*tail=NULL;
free(p);
return 0;
}
void OutputQueue(QUEUE *head)
{
while(head!=NULL)
{
printf("到达时间:[%d]处理时间:[%d]\n",head->data.arrive,head->data.treat);
head=head->link;
}
}
队列的三种操作,分别对队列进行插入删除和出队列 2.4寻找等待时间
int InitData(PATIENT *pa, int *sum, double *res)
{
int a[100][2] = {0};
int parr=0;
int i, n=0, tm = 0;
while(tm < 60){
if(n)
a[n][0] = rand()%16;
else
a[0][0] = 0;
a[n][1] = rand()%9+1;
tm += a[n++][0];
}
printf("到达病人的随机数n = %d\n", n);
if((pa=(PATIENT *)malloc(n*sizeof(PATIENT)))==NULL)
{
printf("内存申请失败\n");
}
for(i=0;i
0){
printf("等待时间%d\n",pa[i].arrive-parr);
*sum += pa[i].arrive-parr;
}
else{
printf("br等待时间%d\n", parr-pa[i].arrive);
*res += parr-pa[i].arrive;
}
parr=pa[i].treat;
}
return n;
}
这个是对病人来进行操作,先判断在一小时内病人的数量,然后对其进行入队列的操作,保存上一个医生看病的时间,当下一次操作时与保存的进行比较,计算病人等待时间和医生等待时间。
3(程序演示:
对于所有执行过程,通过图片最好说明问题了:
程序开始如图1 所示:
图1
这个题目比较简单,如上图显示的是间隔时间和看病时间,队列的操作。
结 论
课程设计做完了,一个多星期的时间花在了上面,刚看题目还觉得没有什么问题,可是这正做了才知道问题大了。细节等各方面没有考虑到的问题都出现了。做课程设计的过程就是一个不断调试不断改进程序的过程。
通过此次C语言程序设计上机实践学习,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过课程设计对自己的编程能力也有所提高,可是又因为这次 C 语言的程序设计,我认识到,没有扎实的知识做基础, 很难完成很多工作,想想也对啊,现在是一个科技高度发达的社
我们如果能很好的完成一项工作呢,作为 当代大学会, 没有科学文化知识做基础,
生,努力学习文化知识,才是我们现在的任务,只有让自己 更有实力,以后才会对社会有贡献。
通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注重实践操作能力的培养,无论学习什么,亲自动手去做了才能得到最深刻的体会。
致 谢
首先需要感谢的是指导老师耐心指导,在他的督指导下才能按时完成这个课程设
计,并且对于各种提出的问题很热情的解答。整个完成的过程中周围的同学给了不少帮
助,遇到一些小问题询问他们,他们也是很耐心的来解释说明,而且帮忙解决了很多想
不通的问题,在此非常感激每个人帮助我的人。
#include
#include
#include
#include
typedef struct
{
int arrive;
int treat;
}PATIENT;
typedef struct queue
{
PATIENT data;
struct queue *link;
}QUEUE;
void head()
{
printf("\t************************************************************\n");
printf("\t************************************************************\n");
printf("\t** **\n");
printf("\t** \n"); **
printf("\t** 看病时间统计 **\n");
printf("\t** **\n");
printf("\t************************************************************\n");
printf("\t************************************************************\
n");
}
void EnQueue(QUEUE **head,QUEUE **tail,PATIENT x)
//进队操作
{
QUEUE *p;
p=(QUEUE*)malloc(sizeof(QUEUE));
p->data=x;
p->link=NULL;
if(*head==NULL)
*head=*tail=p;
else
{
(*tail)->link=p;
*tail=p;
}
}
int DeQueue(QUEUE **head,QUEUE **tail,PATIENT *cp)
//出队操作
{
QUEUE *p;
p=*head;
if(*head==NULL)
return 1;
*cp=(*head)->data;
*head=(*head)->link;
if(*head==NULL)
*tail=NULL;
free(p);
return 0;
}
void OutputQueue(QUEUE *head)
{
while(head!=NULL)
{
printf("到达时间:[%d]处理时间:
[%d]\n",head->data.arrive,head->data.treat);
head=head->link;
}
}
int InitData(PATIENT *pa, int *sum, double *res)
{
int a[100][2] = {0};
int parr=0;
int i, n=0, tm = 0;
while(tm < 60){
if(n)
a[n][0] = rand()%16;
else
a[0][0] = 0;
a[n][1] = rand()%9+1;
tm += a[n++][0];
}
printf("到达病人的随机数 n = %d\n", n);
if((pa=(PATIENT *)malloc(n*sizeof(PATIENT)))==NULL)
{
printf("内存申请失败\n");
}
for(i=0;i 0){
printf("等待时间%d\n",pa[i].arrive-parr);
*sum += pa[i].arrive-parr;
}
else{
printf("br等待时间%d\n", parr-pa[i].arrive);
*res += parr-pa[i].arrive;
}
parr=pa[i].treat;
}
return n;
}
void main()
{
head();
srand(time(NULL));
QUEUE *head,*tail;
PATIENT *p = NULL;
int n,i,sum;
double res;
int nowtime;
int dwait,pwait;
head=tail=NULL;
while(1)
{
sum = 0;
res = 0.0;
n=0;
nowtime=dwait=pwait=0;
n = InitData(p, &sum, &res);
printf("医生等待时间%dmin,病人平均等待时间%.2fmin\n",sum,(float)res/n);
system("pause");
}
}
参考文献
,1,谭浩强 等.C语言程序设计教程.高等教育出版社.2005
,2,李建学 等.数据结构课程设计
案例
全员育人导师制案例信息技术应用案例心得信息技术教学案例综合实践活动案例我余额宝案例
精编(用C/C++描述).清华大学出版.2007-2-1 ,3,严蔚敏 等.数据结构(C语言版).清华大学出版社.2003-1