救护车调度模拟系统课程设计报告_救护车课程设计报告

2020-02-28 其他范文 下载本文

救护车调度模拟系统课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“救护车课程设计报告”。

数据结构课程设计

说 明 书

学 院: 信息科学与工程学院 班 级: 计算机11-3

完 成 人:

姓 名: 徐海杰

学 号: 201101050323 姓 名: 薛德利 学 号: 201101050324 指导教师:

山 东 科 技 大 学

2010年××月××日

实验题目

救护车调度模拟系统

需求分析

1.问题描述

设计实现一个用事件驱动的“救护车调度”离散模型,模拟120急救中心响应每个 病人的呼救信号统一调度救护车运行的情况。

我们对问题作适当简化,假设:某城市共有m个可能的呼救点(居民小区、工厂、学校、公司、机关、单位等),分布着n所医院(包含在m个点中),有k辆救护车分派在各医 院待命,出现呼救病人时,由急救中心统一指派救护车接送至最近的医院救治。救护车 完成一次接送任务后即消毒,并回原处继续待命。假定呼救者与急救中心、急救中心与 救护车之间的通讯畅通无阻,也不考虑道路交通堵塞的影响。可以用m个顶点的无向 网来表示该城市的各地点和道路。时间可以分钟为单位,路段长可表示为救护车行驶化 费的分钟数。

2.要求

模拟每一起病人呼救—派车往救—接人回院的过程:显示每辆救护车的状态(待命、往救、送院{可能还有返点})和每个病人的状态(待派车、待接、送院途中),显示各医院 的待命救护车队列,实时显示当前的病人平均接送时间和平均派车延迟时间以及已送达 病人数。救护车应按最快的路线接送病人。

呼救事件发生的间隔时间和地点都是随机的(其发生频度先给一个省缺值,可实时 调整)。点数m、点名、路段数e和每段长度以及医院点的名称都由教师以文本文件形 式给出,格式为:

m n e

ABCDEFGH… …

(m个点名称,大小写代表不同点)

AEGHK… …

(n个医院名称)

AB11,AC15,EG9, … … FK24,(e条路段及长度)

救护车总数及分派方案在运行前从键盘输入。

3.提示

可以设3种事件:病人呼救,救护车到病人家,救护车到医院。一个事件队列,一 个呼救等待队列,n个救护车待命队列。

初始化时设置第一个病人呼救事件插入事件队列,以启动系统运行。处理病人呼救 事件时,将这个呼救排入呼救等待队列,同时产生下一个病人呼救事件。

无向网可用邻接多重表。求出每个医院到其他各点的最短路径,每个点设一个由近 到远的医院列表。

参考教科书中第3章第5节:离散事件模拟。

设计说明

#include #include #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define OVERFLOW_-2 #define INFINITY_ 9999 #define MAX_VERTEX_NUM 52 #define Status int #define VertexType int //定点类型

//**********************定义结构体**********************// typedef struct

//医院 {

char hospital_name;

int hospital_Num;} hospital_stc;hospital_stc hospitals[10];

typedef struct

//呼救 {

int Num;

int name;} Call_stc;Call_stc call_vex[52];

typedef struct

//呼救地点与医院距离矩阵 {

int distance;

int Num;

int name;} Call_Hos_stc;Call_Hos_stc Hos_Call_matrix[10][52];Call_Hos_stc Call_Hos_matrix[52][10];typedef struct

// 地点 {

char vex_name;

int vex_Num;} Node_stc;Node_stc vertices[52];

typedef struct

//路段 {

char v1_name;

char v2_name;

int v1_Num;

int v2_Num;

int distance_v12;} section_Node;section_Node sections[90];

typedef struct ArcCell

//路径矩阵 {

int adj;

int w;} ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct {

VertexType vexs[MAX_VERTEX_NUM];

AdjMatrix arcs;

int vexnum,arcnum;} MGraph;MGraph G;

typedef struct ambulance //救护车 {

int Num;

int NowStatus;

char termini_name;

int wait_time;} CHE;

typedef struct QNode {

CHE che;

struct QNode *next;} QNode,*QueuePtr;

typedef struct

//救护车队列 {

QueuePtr front;

QueuePtr rear;} LinkQueue;LinkQueue AmbuQueue[10];

typedef struct event

//事件 {

int AidNo;

int CallTime;

int DealTime;

int EventType;

char OccurName;

int Occur_GNum;

int interval;

int Hos_Num;

int Che_Num;

struct event *next;} EVENT;EVENT *EventList;EVENT *CallWaitList;

//**********************定义变量**********************// int short_path_matrix[99][99];//最短路径矩阵

int VexNum,HosNum,ArcNum,CheNum,Call_VexNum;

// 地点数,医院数,路段数,救护车数,呼救地点数; int num[20];int nearest_Hos[99];// 最近医院 int freqMOD=0,delayMOD=500;int AidEvent_Num=0;int EndTime=999;// 结束时间 int CurrentTime;

// 当前时间

int ServicedNum;

//已送达病人数

int TotalDelayTime,TotalWaitTime,TotalDealTime,road_length;//总延迟,等待,处理事件,路段长度

float DelayAverage,WaitAverage,DealAverage;//平均延迟,等待,处理

//**********************定义函数**********************// void start();void ready();int GName_GNum(MGraph,char);

void readfile();//读文件函数

void CreateGraph(MGraph *);// 创建矩阵 void arrange_ambulances();// 安排救护车

void InitAmbu();// 初始化救护车队列 Status InitQueue(LinkQueue *);// 初始化 Status EnQueue(LinkQueue *,CHE);// 进队 Status DeQueue(LinkQueue *);// 出队 CHE GetAmbu(LinkQueue);Status IsEmptyQueue(LinkQueue);//判断队列是否为空 Status Display_Queue(LinkQueue);// 显示队列

EVENT * InsertEvent(EVENT *,EVENT);// 插入事件队列 EVENT * DeleteEvent(EVENT *);// 删除事件 EVENT GetEvent(EVENT *);// 获取事件

void Event_Call();

// 事件函数 void Event_ArriveHome();void Event_ArriveHos();

void Display_WaitingAmbu();

// 显示函数 void Display_Patient_Status(EVENT *,EVENT *);void Display_Ambulance_Status(EVENT *);void Display_All();

int main()

//主函数 {

system(“cls”);

// 清屏

loop:

printf(“请输入结束时间(h

scanf(”%d“,&EndTime);

if(EndTime>999)

{

printf(”无效输入,请再次输入!n“);

goto loop;

}

ready();

InitAmbu();

start();} void ready(){

int l,k,i,j,not_hos,temp;

int P[MAX_VERTEX_NUM][MAX_VERTEX_NUM],D[MAX_VERTEX_NUM];

system(”cls“);

readfile();

//读文件

arrange_ambulances();

//安排救护车

CreateGraph(&G);

//创建矩阵

G.vexnum=VexNum;

G.arcnum=ArcNum;

for(k=0;k

//最短路径

{

Short_Path(G,k,P,D);

for(i=0;i

{

short_path_matrix[k][i]=D[i];

}

}

printf(”nPre any key to continue...n“);

getch();

system(”cls“);

for(i=0,k=0;i

// 筛选出呼救地点和医院地点

{

not_hos=0;

for(j=0;j

{

if(i!=hospitals[j].hospital_Num)not_hos++;

else break;

}

if(not_hos==HosNum)

{

call_vex[k].Num=i;

call_vex[k].name=vertices[call_vex[k].Num].vex_name;

k++;

}

}

for(i=0;i

// 医院距离呼救地点距离

{

for(j=0,l=0;j

{

not_hos=0;

for(k=0;k

{

if(j!=hospitals[k].hospital_Num)not_hos++;

else break;

}

if(not_hos==HosNum)

{

Hos_Call_matrix[i][l].distance=short_path_matrix[hospitals[i].hospital_Num][j];

Hos_Call_matrix[i][l].name=call_vex[l].name;

Hos_Call_matrix[i][l].Num=call_vex[l].Num;

l++;

}

}

}

for(i=0;i

//呼救地点距离医院的距离

{

for(j=0;j

{

Call_Hos_matrix[i][j].distance=Hos_Call_matrix[j][i].distance;

Call_Hos_matrix[i][j].name

=hospitals[j].hospital_name;

Call_Hos_matrix[i][j].Num

=hospitals[j].hospital_Num;

}

}

for(k=0;k

//按距离排序

{

for(i=1;i

for(j=0;j

{

if(Call_Hos_matrix[k][j].distance>Call_Hos_matrix[k][j+1].distance)

{

temp=Call_Hos_matrix[k][j].distance;

Call_Hos_matrix[k][j].distance=Call_Hos_matrix[k][j+1].distance;

Call_Hos_matrix[k][j+1].distance=temp;

temp=Call_Hos_matrix[k][j].Num;

Call_Hos_matrix[k][j].Num=Call_Hos_matrix[k][j+1].Num;

Call_Hos_matrix[k][j+1].Num=temp;

temp=Call_Hos_matrix[k][j].name;

Call_Hos_matrix[k][j].name=Call_Hos_matrix[k][j+1].name;

Call_Hos_matrix[k][j+1].name=temp;

}

}

} }

void InitAmbu()

//救护车初始化 {

int i,j,counter=0;

CHE che;

for(i=0;i

{

InitQueue(&AmbuQueue[i]);

for(j=0;j

{

che.wait_time=-1;

che.NowStatus=0;

che.termini_name=' ';

che.Num=counter++;

EnQueue(&AmbuQueue[i],che);

}

} }

void start(){

EVENT hold;

int rand_num,key_num;

srand((unsigned)time(NULL));//初始化随机函数种子

rand_num=rand()%(G.vexnum-HosNum);// 随机产生病人

srand((unsigned)time(NULL));

hold.DealTime=rand()%10;

hold.OccurName=call_vex[rand_num].name;

hold.Occur_GNum=call_vex[rand_num].Num;

hold.AidNo=0;

hold.EventType=0;

hold.interval=-1;

hold.Che_Num=-1;

hold.Hos_Num=-1;

EventList=InsertEvent(EventList,hold);

for(CurrentTime=0;CurrentTime

{

while(CurrentTime==GetEvent(EventList).DealTime)

{

switch(GetEvent(EventList).EventType)

{

case 0:

Event_Call();

break;

case 1:

Event_ArriveHome();

break;

case 2:

Event_ArriveHos();

break;

}

}

if(!kbhit())

{

Ambu_WaitTime();

Display_All();

Sleep((long)(2*delayMOD));

CurrentTime++;

}

else

switch(getch())

{

case 'd':

if(delayMOD==0);

else delayMOD--;

break;

case 'a':

if(delayMOD==1000);

else delayMOD++;

break;

case 27:

exit(0);

case 's':

if(freqMOD==0);

else freqMOD--;

break;

case 'w':

if(freqMOD==100);

else freqMOD++;

break;

}

} }

//********************** ready有关 函数 **********************// void readfile()//读文件 {

FILE * fp;

int i,j;

char ch,* ch_p1,* ch_p2;

char str[8]=” “;

system(”cls“);

if((fp=fopen(”D:data.txt“,”r“))==NULL)

{

printf(”cannot open filen“);

exit(0);

}

for(i=0;i

i=0;

while(1)

{

ch=getc(fp);

if(ch>=48&&ch

else break;

}

VexNum=atoi(str);

//atoi:转化成长整数型

printf(”给定的地点数是 %dn“,VexNum);

for(i=0;i

i=0;

while(1)

{

ch=getc(fp);

if(ch>=48&&ch

else break;

}

HosNum=atoi(str);

printf(”给定的医院数是 %dn“,HosNum);

Call_VexNum=VexNum-HosNum;

for(i=0;i

i=0;

while(1)

{

ch=getc(fp);

if(ch>=48&&ch

else break;

}

ArcNum=atoi(str);

printf(”给定的路段数是 %dn“,ArcNum);

printf(”地点: “);

for(i=0;i

{

ch=getc(fp);

vertices[i].vex_name=ch;

vertices[i].vex_Num=i;

printf(”%c “,vertices[i].vex_name);

}

ch=getc(fp);

printf(”n“);

printf(”医院: “);

for(i=0;i

{

ch=getc(fp);

hospitals[i].hospital_name=ch;

for(j=0;j

if(vertices[j].vex_name==hospitals[i].hospital_name)

{

hospitals[i].hospital_Num=vertices[j].vex_Num;

break;

}

printf(”%c “,hospitals[i].hospital_name);

}

ch=getc(fp);

printf(”n“);

printf(”路段: “);

for(i=0;i

{

sections[i].v1_name=getc(fp);

for(j=0;j

if(vertices[j].vex_name==sections[i].v1_name)

{

sections[i].v1_Num=vertices[j].vex_Num;

break;

}

putchar(sections[i].v1_name);

sections[i].v2_name=getc(fp);

for(j=0;j

if(vertices[j].vex_name==sections[i].v2_name)

{

sections[i].v2_Num=vertices[j].vex_Num;

break;

}

putchar(sections[i].v2_name);

for(j=0;j

j=0;

while(1)

{

ch=getc(fp);

if(ch>=48&&ch

else break;

}

sections[i].distance_v12=atoi(str);

printf(”:%d “,sections[i].distance_v12);

} }

void arrange_ambulances()//安排救护车 {

int i,left;

loop1:

printf(”nn请输入所有医院救护车总数量: “);

scanf(”%d“,&CheNum);

if(CheNum

{

printf(”无效输入,请再次输入!n“);

goto loop1;

}

for(i=0,left=CheNum;i

{

loop2:

printf(”请输入

%c 医院的救护车数量: “,hospitals[i].hospital_name);

scanf(”%d“,&num[i]);

left=left-num[i];

if(left

{

printf(”无效输入,请重新开始!n“);

goto loop2;

}

}

printf(”n“);}

void CreateGraph(MGraph *g)//创建矩阵 {

int i,j,k;

g->vexnum=VexNum;

g->arcnum=ArcNum;

for(i=0;ivexnum-1;i++)

g->vexs[i]=vertices[i].vex_Num;

for(i=0;ivexnum-1;i++)

for(j=0;jvexnum-1;j++)

{

g->arcs[i][j].adj=0;

g->arcs[i][j].w=INFINITY_;

}

for(k=0;karcnum-1;k++)

{

i=sections[k].v1_Num;

j=sections[k].v2_Num;

g->arcs[i][j].adj=1;

g->arcs[j][i].adj=g->arcs[i][j].adj;

g->arcs[i][j].w=sections[k].distance_v12;

g->arcs[j][i].w=g->arcs[i][j].w;

} }

Status Short_Path(MGraph G,int v0,int P[MAX_VERTEX_NUM][MAX_VERTEX_NUM],int D[MAX_VERTEX_NUM]){

//最短路径

int v,w,i,j,min;

int final[MAX_VERTEX_NUM];

for(v=0;v

{

final[v]=FALSE;

D[v]=G.arcs[v0][v].w;

for(w=0;w

P[v][w]=FALSE;

if(D[v]

{

P[v][v0]=TRUE;

P[v][v]=TRUE;

}

}

D[v0]=0;

final[v0]=TRUE;

for(i=1;i

{

min=INFINITY_;

for(w=0;w

if(!final[w])

if(D[w]

{

v=w;

min=D[w];

}

final[v]=TRUE;

for(w=0;w

if(!final[w]&&(min+G.arcs[v][w].w

{

D[w]=min+G.arcs[v][w].w;

for(j=0;j

P[w][j]=P[v][j];

P[w][w]=TRUE;

}

} }

//********************** InitAmbu有关 函数 **********************// Status InitQueue(LinkQueue *Q){

(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));

if(!(*Q).front)exit(OVERFLOW_);

(*Q).front->next=NULL;

return OK;}

Status EnQueue(LinkQueue *Q,CHE e){

QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));

if(!p)

{

printf(”Full!“);

exit(-2);

}

p->che=e;

p->che.NowStatus =e.NowStatus;

p->che.termini_name=e.termini_name;

p->che.Num=e.Num;

p->next=NULL;

(*Q).rear->next=p;

(*Q).rear=p;

return OK;}

Status Display_Queue(LinkQueue Q){

QueuePtr p;

if(Q.front==Q.rear)

{

printf(” /“);

}

else

{

p=Q.front->next;

while(p)

{

printf(”%2d “,p->che.Num);

p=p->next;

}

}

return OK;}

//********************** start有关 函数 **********************// EVENT * InsertEvent(EVENT * h,EVENT e){

EVENT *s,*p,*q;

p=h;

s=(EVENT *)malloc(sizeof(EVENT));

s->CallTime=e.CallTime;

s->AidNo=e.AidNo;

s->DealTime=e.DealTime;

s->OccurName=e.OccurName;

s->Occur_GNum=e.Occur_GNum;

s->EventType=e.EventType;

s->interval=e.interval;

s->Hos_Num=e.Hos_Num;

s->Che_Num=e.Che_Num;

if(h==NULL)

{

h=s;

s->next=NULL;

}

else

{

while((s->DealTime>p->DealTime)&&(p->next!=NULL))

{

q=p;

p=p->next;

}

if(s->DealTimeDealTime)

{

if(h==p)h=s;

else q->next=s;

s->next=p;

}

else

{

p->next=s;

s->next=NULL;

}

}

return h;}

EVENT GetEvent(EVENT * h){

EVENT hold;

hold.CallTime=h->CallTime;

hold.AidNo=h->AidNo;

hold.DealTime=h->DealTime;

hold.OccurName=h->OccurName;

hold.Occur_GNum=h->Occur_GNum;

hold.EventType=h->EventType;

hold.interval=h->interval;

hold.Che_Num=h->Che_Num;

hold.Hos_Num=h->Hos_Num;

hold=*h;

return hold;}

void Event_Call(){

EVENT hold;

int rand_num,interval,OkHos_i,call_GNo;

char call_name;

CHE hold_che;

hold=GetEvent(EventList);

CallWaitList=InsertEvent(CallWaitList,hold);

EventList=DeleteEvent(EventList);

OkHos_i=SearchHos(GName_GNum(G,hold.OccurName));

srand((unsigned)time(NULL));

interval=5+rand()%(60/(freqMOD/5+1));

srand((unsigned)time(NULL));

rand_num=rand()%(G.vexnum-HosNum);

call_GNo=call_vex[rand_num].Num;

call_name=call_vex[rand_num].name;

hold.DealTime= CurrentTime+interval;

hold.AidNo=AidEvent_Num++;

hold.Occur_GNum=call_GNo;

hold.OccurName=call_name;

hold.EventType=0;

hold.interval=-1;

hold.Hos_Num=-1;

hold.Che_Num=-1;

EventList=InsertEvent(EventList,hold);

if(OkHos_i!=-1)

{

hold=GetEvent(CallWaitList);

hold_che=GetAmbu(AmbuQueue[OkHos_i]);

hold.Che_Num=hold_che.Num;

hold.Hos_Num=OkHos_i;

hold.DealTime=CurrentTime+Call_Hos_matrix[GNo_CallNo(hold.Occur_GNum)][Hos_i_matrix(hold.Occur_GNum,OkHos_i)].distance;

hold.EventType=1;

hold.interval=Call_Hos_matrix[GNo_CallNo(hold.Occur_GNum)][Hos_i_matrix(hold.Occur_GNum,OkHos_i)].distance;

EventList=InsertEvent(EventList,hold);

CallWaitList=DeleteEvent(CallWaitList);

DeQueue(&AmbuQueue[OkHos_i]);

}

else hold.CallTime=CurrentTime;}

void Event_ArriveHome(){

EVENT hold;

hold=GetEvent(EventList);

EventList=DeleteEvent(EventList);

hold.DealTime=CurrentTime+hold.interval;

hold.EventType=2;

EventList=InsertEvent(EventList,hold);

road_length=2*hold.interval;}

void Event_ArriveHos(){

CHE che,hold_che;

EVENT hold;

int interval,OkHos_i;

hold=GetEvent(EventList);

EventList=DeleteEvent(EventList);

che.Num=hold.Che_Num;

che.NowStatus=0;

EnQueue(&AmbuQueue[hold.Hos_Num],che);

ServicedNum++;

TotalDealTime+=TotalDelayTime+road_length;

DealAverage=(float)TotalDealTime/ServicedNum;

if(CallWaitList!=NULL)

{

hold=GetEvent(CallWaitList);

TotalDelayTime+=(CurrentTime-hold.DealTime);

DelayAverage=(float)TotalDelayTime/ServicedNum;

OkHos_i=SearchHos(GName_GNum(G,hold.OccurName));

if(OkHos_i!=-1)

{

hold.Hos_Num=OkHos_i;

hold_che=GetAmbu(AmbuQueue[OkHos_i]);

hold.Che_Num=hold_che.Num;

hold.DealTime= CurrentTime+hold.interval;

hold.DealTime=CurrentTime+Call_Hos_matrix[GNo_CallNo(hold.Occur_GNum)][Hos_i_matrix(hold.Occur_GNum,OkHos_i)].distance;

hold.EventType=1;

hold.interval=Call_Hos_matrix[GNo_CallNo(hold.Occur_GNum)][Hos_i_matrix(hold.Occur_GNum,OkHos_i)].distance;

EventList=InsertEvent(EventList,hold);

CallWaitList=DeleteEvent(CallWaitList);

DeQueue(&AmbuQueue[OkHos_i]);

}

} }

int Ambu_WaitTime(void){

int i;

QueuePtr p;

for(i=0;i

{

if(AmbuQueue[i].front==AmbuQueue[i].rear);

else

{

p=(AmbuQueue[i].front)->next;

while(p)

{

TotalWaitTime++;

p=p->next;

}

}

} }

void Display_All(){

system(”cls“);

printf(”n“);

printf(”n“);

printf(”ttt当前时间:%4dn“,CurrentTime);

printf(”n“);

printf(” 已送达病人数:%4dn“,ServicedNum);

printf(”n“);

printf(” 平均延迟:% 5.1f

“,DelayAverage);

printf(”平均处理:% 5.1f

“,DealAverage);

printf(”平均等待:% 5.1fn“,WaitAverage=(float)TotalWaitTime/CheNum-1);

printf(”n“);

Display_Patient_Status(CallWaitList,EventList);

Display_Ambulance_Status(EventList);

Display_WaitingAmbu();

printf(”n %c/%c:Frequence:%3d“,'W','S',freqMOD);

printf(”

%c/%c:Delay:%3d“,'A','D',delayMOD);

printf(”

ESC:quit“);}

EVENT * DeleteEvent(EVENT * h){

if(h!=NULL)h=h->next;

return h;}

int GName_GNum(MGraph g,char ch){

int i;

for(i=0;i

if(ch==vertices[i].vex_name)break;

return i;}

int SearchHos(int call_NoinG){

int call_No,i,j,k;

call_No=GNo_CallNo(call_NoinG);

for(i=0;i

{

for(j=0;j

{

if(Call_Hos_matrix[call_No][i].Num==hospitals[j].hospital_Num)k=j;

}

if(!IsEmptyQueue(AmbuQueue[k]))return k;

}

return-1;}

CHE GetAmbu(LinkQueue Q){

return Q.front->next->che;}

int GNo_CallNo(int g_No){

int i;

for(i=0;i

if(g_No==call_vex[i].Num)return i;}

int Hos_i_matrix(int call_GNo,int Hos_i){

int i,call_No;

call_No=GNo_CallNo(call_GNo);

for(i=0;i

if(Call_Hos_matrix[call_No][i].Num==hospitals[Hos_i].hospital_Num)}

Status DeQueue(LinkQueue *Q){

QueuePtr p;

if((*Q).front==(*Q).rear);

else

{

p=(*Q).front->next;

(*Q).front->next=p->next;

if((*Q).rear==p)(*Q).rear=(*Q).front;

free(p);

}

return OK;}

Status IsEmptyQueue(LinkQueue Q){

return(Q.front==Q.rear)? TRUE : FALSE;}

void Display_Patient_Status(EVENT *h1,EVENT *h2){

EVENT *p;

printf(”n“);

printf(” 病人的状态: “);

p=h1;

if(h1!=NULL)

{

return i;

while(p)

{

printf(” %d“,p->AidNo);

printf(”:待派车 “);

p=p->next;

}

}

p=h2;

if(h2!=NULL)

{

while(p)

{

printf(” %d“,p->AidNo);

switch(p->EventType)

{

case 0:

printf(”b “);

break;

case 1:

printf(”:待接中 “);

break;

case 2:

printf(”:送院中 “);

break;

}

p=p->next;

}

printf(”n“);

} }

void Display_Ambulance_Status(EVENT *h){

int i;

EVENT *p;

printf(”n“);

printf(”n“);

printf(” 救护车状态: “);

p=h;

if(h!=NULL)

{

while(p)

{

switch(p->EventType)

{

case 1:

printf(” %2d“,p->Che_Num);

printf(”:往救中 “);

break;

case 2:

printf(” %2d“,p->Che_Num);

printf(”:送院中 “);

break;

}

p=p->next;

}

}

printf(”n“);}

void Display_WaitingAmbu(void){

int i;

printf(”n“);

for(i=0;i

{

printf(” %c “,hospitals[i].hospital_name);

printf(”医院待命救护车: “);

Display_Queue(AmbuQueue[i]);

printf(”n");

} } 函数调用

Main()主函数调用ready()InitAmbu()start()函数;

Ready()函数调用 readfile()arrange_ambulances()CreateGraph()Short_Path()函数;

InitAmbu()函数调用 InitQueue()EnQueue()Display_Queue()函数;

Start()函数调用 InsertEvent()GetEvent()Event_Call()Event_ArriveHome()Event_ArriveHos()Ambu_WaitTime()Display_All()DeleteEvent()SearchHos()GetAmbu()DeQueue()IsEmptyQueue()Display_Patient_Status()Display_Ambulance_Status()Display_WaitingAmbu()使用说明

开始运行,输入程序运行的时间。

然后屏幕会输出文件中给出的数据,并要求键盘输入安排救护车。

从文件中读出给定8个地点,其中A,E,G为医院,其余为可能发生病人呼救事件的地点。并且得到10条路段。

现假设共12辆救护车,三所医院分别为3,4,5辆救护车,分配好救护车后按任意键进入综合显示界面,界面显示“已接送病人数”,“平均延迟时间”“平均处理时间”“平均等待时间”“病人的状态”“救护车状态”“待命救护车”以及可调节时间快慢频率,延迟时间大小和ESC退出键。

程序结束,按任意键退出程序。

《救护车调度模拟系统课程设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
救护车调度模拟系统课程设计报告
点击下载文档
相关专题 救护车课程设计报告 报告 救护车 课程设计 救护车课程设计报告 报告 救护车 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文