模擬銀行叫號系統(c代碼)

這是一個簡單的模擬銀行叫號系統,用c語言實現的。個人專業只學過C,翻閱學習了些數據機構的知識,而後開始編寫的。一個初學程序的新手。往多多指點! 實現的功能:根據先來先服務的原則,模擬實現一個銀行業務服務叫號系統(系統需求:客戶到達銀行首先取號,而後根據先來先服務的原則等待空閒業務服務窗口叫號,最後業務處理完離開)   系統主要分爲3個功能模塊,分別是:客戶取號(客戶建立)、叫號系統(業務服務安排)、退出。   客戶取號界面:當客戶到達時,在主菜單輸入「1」,進入「客戶到達界面」。此時界面會顯示:客戶的排隊序號、到達時間。   叫號系統界面:在主菜單輸入「2」,進入「叫號系統界面」。此時界面會顯示「請耐心等待」,等待櫃檯客戶業務處理的結束,直到櫃檯客戶業務處理結束時,叫號系統界面會顯示結束服務客戶的客戶信息(包括:序號、到達時間、等待時間、服務時間),若還有等待的客戶就顯示下一位服務客戶的序號、服務的櫃檯號及客戶等待的時間;若沒有等待的客戶就顯示「已無等待客戶」。   退出界面:在主菜單輸入「0」,進入退出界面,顯示「謝謝您的使用」後退出銀行叫號模擬系統。node

<!-- lang: cpp -->

#include <stdio.h>windows

#include <malloc.h>函數

#include <windows.h>學習

#include <stdlib.h>測試

#include <string.h>指針

#include <time.h>code

#include <windows.h>索引

int first = 1;//用於生成隨機到達時間模塊,判斷是否第一次生成隨機到達時間;隊列

int hour;//用於生成隨機到達時間,記入到達的小時;圖片

int minute;//用於生成隨機到達時間,記入到達的分鐘;

int oldminute[10];//用於計算客戶的等待時間的計數量,記入上一個客戶到達時間的分鐘;

int n = 1;//標誌oldminute[]的索引位置;

int oldsever[10];//用於計算客戶的等待時間的計數量,記入上一個客戶的服務時間;

int tice = 1;//標記計算等待時間是索引位置;

int num = 1;//客戶序號累加計數

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;

/初始化隊列,不帶頭結點的隊列鏈表;/

void InitQueue(LiQueue *&q)

{

q=(LiQueue*)malloc(sizeof(LiQueue));

q->front=q->rear=NULL;

}

/實現隊列的入隊;/

void enQueue(LiQueue *q)

{

//封裝結點;

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:把整數轉換爲字符串;

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:把整數轉換爲字符串;

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;

}

}

/出隊函數:刪除客戶信息,並返回刪除的客戶的基本信息/

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 )//只有一個結點

{

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函數返回的客戶序號;

char decarrive[10];//deQueue函數返回的客戶到達時間;

char decserve[10];//deQueue函數返回的客戶服務時間;

char decwait[10];//deQueue函數返回的客戶等待時間;

char choose;//服務選項;

int bar = 1;//櫃檯號;

int second;//延時程序的循環計數;

InitQueue(q);

srand(time(0));

printf("銀行叫號模擬系統\n");//建立3個業務服務窗口,經過7個客戶來測試模擬系統;

printf("\n");

printf("=====================================\n");

printf("1. 客戶取號(客戶建立)\n");

printf("2. 叫號模擬(業務服務安排)\n");

printf("0. 退出\n");

printf("(按數字一、二、0,選擇操做)\n");

printf("=====================================\n");

printf("\n");

while(1)

{

printf("請您輸入服務選項:");

scanf("%c",&choose);

getchar();

switch (choose)

{

case '1'://1. 客戶取號(客戶建立)

enQueue(q);//客戶加入隊列;

printf("客戶號%d\t到達時間:%s\n",q->rear->custmerNumber,q->rear->arriveTime);

printf("\n");

break;

case '2'://2. 叫號模擬(業務服務安排)

printf("請耐心等待...\n");

for(second = 0 ; second<5 ; second++)

{

Sleep(1000);//延時1秒

}

revamp(q);//修改客戶的服務時間和等待時間;

deQueue(q,id,decarrive,decserve,decwait);//將完成服務的客戶移出隊列;

//客戶業務處理完後,輸出客戶的狀態信息(序號、到達時間、等待時間、服務時間)

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;

}

}

}

效果圖截圖: 在此輸入圖片描述

在此輸入圖片描述

相關文章
相關標籤/搜索