模拟银行叫号系统(c代码)
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
這是一個簡單的模擬銀行叫號系統(tǒng),用c語言實現(xiàn)的。我的專業(yè)只學過C,翻閱學習了些數(shù)據(jù)機構(gòu)的知識,然后開始編寫的。一個初學程序的新手。往多多指點! 實現(xiàn)的功能:根據(jù)先來先服務的原則,模擬實現(xiàn)一個銀行業(yè)務服務叫號系統(tǒng)(系統(tǒng)需求:客戶到達銀行首先取號,然后根據(jù)先來先服務的原則等待空閑業(yè)務服務窗口叫號,最后業(yè)務處理完離開) 系統(tǒng)主要分為3個功能模塊,分別是:客戶取號(客戶創(chuàng)建)、叫號系統(tǒng)(業(yè)務服務安排)、退出。 客戶取號界面:當客戶到達時,在主菜單輸入“1”,進入“客戶到達界面”。此時界面會顯示:客戶的排隊序號、到達時間。 叫號系統(tǒng)界面:在主菜單輸入“2”,進入“叫號系統(tǒng)界面”。此時界面會顯示“請耐心等待”,等待柜臺客戶業(yè)務處理的結(jié)束,直到柜臺客戶業(yè)務處理結(jié)束時,叫號系統(tǒng)界面會顯示結(jié)束服務客戶的客戶信息(包括:序號、到達時間、等待時間、服務時間),若還有等待的客戶就顯示下一位服務客戶的序號、服務的柜臺號及客戶等待的時間;若沒有等待的客戶就顯示“已無等待客戶”。 退出界面:在主菜單輸入“0”,進入退出界面,顯示“謝謝您的使用”后退出銀行叫號模擬系統(tǒng)。
<!-- lang: cpp -->#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <windows.h>
int first = 1;//用于生成隨機到達時間模塊,判斷是否第一次生成隨機到達時間;
int hour;//用于生成隨機到達時間,記入到達的小時;
int minute;//用于生成隨機到達時間,記入到達的分鐘;
int oldminute[10];//用于計算客戶的等待時間的計數(shù)量,記入上一個客戶到達時間的分鐘;
int n = 1;//標志oldminute[]的索引位置;
int oldsever[10];//用于計算客戶的等待時間的計數(shù)量,記入上一個客戶的服務時間;
int tice = 1;//標記計算等待時間是索引位置;
int num = 1;//客戶序號累加計數(shù)
typedef struct qnode
{
int custmerNumber;//客戶序號;
char arriveTime[10];//客戶到達時間;
char waitTime[10];//客戶等待時間;
char serveTime[10];//客戶服務時間;
struct qnode *next;
}CustmerQNode;
typedef struct
{
CustmerQNode *front;//隊列頭指針,指向隊頭元素;
CustmerQNode *rear;//隊列胃指針,指向隊尾元素;
}LiQueue;
/初始化隊列,不帶頭結(jié)點的隊列鏈表;/
void InitQueue(LiQueue *&q)
{
q=(LiQueue*)malloc(sizeof(LiQueue));
q->front=q->rear=NULL;
}
/實現(xiàn)隊列的入隊;/
void enQueue(LiQueue *q)
{
//封裝結(jié)點;
CustmerQNode *s;
s=(CustmerQNode*)malloc(sizeof(CustmerQNode));
s->custmerNumber = num++;
/生成隨機到達時間/
char time2[10];
char time3[10];
int ad;
if(first == 1)
{
for(int k = 0 ; k<5; k++)
{
hour = ((int)(4*(rand()/(RAND_MAX+1.0)))+8);
}
first = 0;
}
itoa(hour,time3,10);//itoa:把整數(shù)轉(zhuǎn)換為字符串;
strcat(time3,"點");
for(int m = 0; m<5; m++)
{
ad = ((int)(4*rand()/(RAND_MAX+1.0)));
}
minute += ad;
minute += 2;
oldminute[n++] = minute;
itoa(minute,time2,10);//itoa:把整數(shù)轉(zhuǎn)換為字符串;
strcat(time3,time2);
strcat(time3,"分");
strcpy(s->arriveTime,time3);
s->next=NULL;
if(q->rear==NULL)
{
q->front =s;
q->rear =s;
}
else
{
q->rear->next =s;
q->rear =s;
}
}
/修改客戶信息:完成客戶等待時間和服務時間的修改;/
int revamp(LiQueue *q)
{
if(q->rear == NULL)
return 0;
else
{
//隨機生成服務時間
int sertime = 0;
int temp;
int wait;
for(int i = 0; i<5; i++)
{
temp = ((int)(4*rand()/(RAND_MAX+1.0))+5);
}
sertime += temp;
oldsever[tice] = sertime;
itoa(sertime,q->front->serveTime,10);
if(tice == 1)
{
wait = 0;
itoa(wait,q->front->waitTime,10);
strcat(q->front->waitTime,"分鐘");
}
else
{
wait = oldsever[tice-1]-(oldminute[tice] - oldminute[tice - 1]);
if(wait < 0)
{
itoa(0,q->front->waitTime,10);
strcat(q->front->waitTime,"分鐘");
}
else
{
itoa(wait,q->front->waitTime,10);
strcat(q->front->waitTime,"分鐘");
}
}
tice++;
return 1;
}
}
/出隊函數(shù):刪除客戶信息,并返回刪除的客戶的基本信息/
int deQueue(LiQueue *q,int &DecCustmerNumber, char *DecArriveTime, char *DecServeTime,char *DecWaitTime)
{
CustmerQNode *t;
if(q->rear ==NULL)
return 0;
if(q->front == q->rear )//只有一個結(jié)點
{
t=q->front ;
q->front =NULL;
q->rear =NULL;
}
else
{
t=q->front;
q->front=q->front->next;
}
DecCustmerNumber = t->custmerNumber;
strcpy(DecArriveTime,t->arriveTime);
strcpy(DecServeTime,t->serveTime);
strcpy(DecWaitTime,t->waitTime);
free(t);
return 1;
}
void main()
{
LiQueue *q;
int id;//deQueue函數(shù)返回的客戶序號;
char decarrive[10];//deQueue函數(shù)返回的客戶到達時間;
char decserve[10];//deQueue函數(shù)返回的客戶服務時間;
char decwait[10];//deQueue函數(shù)返回的客戶等待時間;
char choose;//服務選項;
int bar = 1;//柜臺號;
int second;//延時程序的循環(huán)計數(shù);
InitQueue(q);
srand(time(0));
printf("銀行叫號模擬系統(tǒng)\n");//創(chuàng)建3個業(yè)務服務窗口,通過7個客戶來測試模擬系統(tǒng);
printf("\n");
printf("=====================================\n");
printf("1. 客戶取號(客戶創(chuàng)建)\n");
printf("2. 叫號模擬(業(yè)務服務安排)\n");
printf("0. 退出\n");
printf("(按數(shù)字1、2、0,選擇操作)\n");
printf("=====================================\n");
printf("\n");
while(1)
{
printf("請您輸入服務選項:");
scanf("%c",&choose);
getchar();
switch (choose)
{
case '1'://1. 客戶取號(客戶創(chuàng)建)
enQueue(q);//客戶加入隊列;
printf("客戶號%d\t到達時間:%s\n",q->rear->custmerNumber,q->rear->arriveTime);
printf("\n");
break;
case '2'://2. 叫號模擬(業(yè)務服務安排)
printf("請耐心等待...\n");
for(second = 0 ; second<5 ; second++)
{
Sleep(1000);//延時1秒
}
revamp(q);//修改客戶的服務時間和等待時間;
deQueue(q,id,decarrive,decserve,decwait);//將完成服務的客戶移出隊列;
//客戶業(yè)務處理完后,輸出客戶的狀態(tài)信息(序號、到達時間、等待時間、服務時間)
printf("第%d位客戶, 到達時間為:%s, 服務時間為:%s, 等待時間為:%s\n",id,decarrive,decserve,decwait);
if(q->front != NULL)//判斷隊列中是否還有等待的客戶;
{
printf("請%d客戶到第%d柜臺\n",q->front->custmerNumber,bar++);
}
else
{
printf("已無等待客戶\n");
}
printf("\n");
if(bar == 4)
{
bar = 1;
}
break;
case '0'://0. 退出
printf("謝謝您的使用!\n");
exit(1);
default :
printf("您輸入的選擇有誤,請重新輸入。\n");
break;
}
}
}
效果圖截圖:
轉(zhuǎn)載于:https://my.oschina.net/u/998693/blog/125465
總結(jié)
以上是生活随笔為你收集整理的模拟银行叫号系统(c代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用数组实现一个栈
- 下一篇: Windows环境下的安装gcc