用c语言完成银行排号系统,【分享】C语言 银行取票排队系统
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
void call() //客服呼叫客戶
{
int mywin;//客服所在窗口號 自動分配窗口改為手工分配
char mywinchar;//字符型的窗口號 0的ascii碼為48
char setfree;
printf("\t【當前空閑窗口】:");
showfreewin();
printf("\t【當前客戶隊列情況】:");
showqueue();
printf("\n");
if(vip->size == 0 && nor->size == 0)
{
printf("\t【暫時沒有客戶等待服務!】\n");
service();
}
else
{printf("\t【請輸入您值班的窗口號】:");
scanf("%s",&mywinchar);
mywin = mywinchar -48;//這樣做可以避免輸入非數字引起程序錯誤 但是窗口總數不能大于9!!0的ascii碼為48
if(mywin >= 1 && mywin <= allwin)
{
if(win[mywin - 1] ==0) //值班的窗口為空閑狀態
{
callfree(mywin);//將值班的窗口號 mywin傳遞給callfree函數
}
else
{
printf("\t【第%d號窗口當前為忙碌狀態!】\n",mywin);
printf("\t【是否設置第%d號窗口為空閑,并繼續呼叫客戶?】\n",mywin);
printf("\t【請選擇】:\n");
printf("\t\t\tY.是\tN.否\n");
printf("\t【您的選擇】:");
scanf("%s",&setfree);
if(setfree ==*Y* ||setfree ==*y*)
{
win[mywin - 1] = 0;
callfree(mywin);//不用再次輸入窗口號 將當前窗口號傳遞到callfree()函數 按原來的窗口號呼叫客戶
}
else
{
if(setfree == *N* || setfree == *n*)
{
call();//選擇其他窗口號來呼叫客戶
}
else
{
printf("\t【沒有這個選項!】\n");
}
}
}
}
else
{
if(mywin >= 1 && mywin <= 9)
{
printf("\t【第%d號窗口暫未開設,請確認您所在值班的窗口號!】\n",mywin);
call();
}
else
{
printf("\t【請正確輸入您值班的窗口號!】\n");
call();
}
}
}
}
/*************************************************************/
void servicelogin() //登陸客服系統
{
char password[] = "1";
char pass[20]; //記錄輸入的密碼
printf("\t【請輸入登陸密碼】:\t");
scanf("%s",pass);//pass是數組 不需要&
while(strcmp(pass,password) == 0) //strcmp為字符串比較函數,返回值為0表示兩字符串相同
{
service();//service()函數里有跳出循環的語句 所以這里不是死循環
}
printf("\t【登陸密碼錯誤!】\n");
hugemenu();
}
/*************************************************************/
void service()
{char menu; //客服系統里的菜單變量 若此處設置為整型 萬一輸入的不是數字會造成死循環 所以設置為字符型
printf("\n\t【請選擇】:\n");
printf("\t\t\t1.呼叫客戶\t2.隊列情況\n\t\t\t3.管理窗口\t4.返回\n");
while(1)
{printf("\t【您的選擇】:");
scanf("%s",&menu); // %s 比%c可靠
switch(menu)
{
case *1*:call();service();break;//文單引號表示是字符型
case *2*:printf("\t【當前隊列情況】:");showqueue();service();break;
case *3*:managewin();break;
case *4*:hugemenu();break;
default:
{
printf("\t【請正確選擇您的服務項目!】\n");
printf("\t\t\t1.呼叫客戶\t2.隊列情況\n\t\t\t3.管理窗口\t4.返回\n");
}
}
}
}
/*************************************************************/
void turnoff()
{
char password[] ="1";
char pass[30];//定義大一點 因為如果輸入的字符超過數組長度,程序會出錯 退出!
char sure;//確定不確定關閉
printf("\t【請輸入登陸密碼】: ");
scanf("%s",pass);//輸入密碼時 如果輸入的字符超過數組長度,程序會出錯 退出!屬于漏洞!
if(strcmp(pass,password) == 0)//對比字符串 返回值等于意味著密碼正確
{
printf("\t【關閉系統后,客戶將不能排隊取票!】\n\t【您確定要關閉嗎?】\n\n");
printf("\t\t\tY.關閉\t\tN.保持\n");
while(1)
{printf("\t【您的選擇】:");
scanf("%s",&sure); //不應該用%c 因為用%c的話 回車時會影響
if(sure == *y* || sure == *Y* ) //注意不是sure == *y* || *Y* !!!
{
printf("\t【系統關閉中...】\n");
Beep(800,300); Beep(800,300); Beep(800,800); //聲音 beep(調子,時間)
exit(0);//關閉系統
}
else
{if(sure == *n* || sure == *N*)
{
printf("\t【系統未關閉 依然正常運行!】\n");
break;
}
else
{
printf("\t【關閉請按 Y 保持請按 N】\n");
}
}
}
}
else
{
printf("\t【密碼錯誤!請重新輸入!】\n");
}
}
/************************************************************/
void hugemenu()//最大的菜單
{
char menu; //服務項目菜單 采用字符型比較可靠!因為如果定義成整型,萬一輸入了字符,可能會造成死循環錯誤
while(1) //系統將一直運行 直到運行 turnoff()函數
{
printf("\n\t********************歡迎您使用本系統********************\n\n");
printf("\t【請選擇服務項目】:\n");
printf("\t\t\t1.客戶取票\t2.VIP服務\n\t\t\t3.客服系統\t4.關閉系統\n");
printf("\t【您的選擇】:");
scanf("%s",&menu); //用%s 比%c好 %c會記錄字符 而且比如輸入111 就會執行getnor() 3次!如果用%s。也輸入111,不同的是只執行一遍getnor 后面兩個1與回車都不起作用。
switch(menu)
{
case *1*:getnor(); printf("\n\t^^^^^^^^^^^^^^^^^^^^感謝您使用本系統^^^^^^^^^^^^^^^^^^^^\n\n");break;
case *2*:getvip(); printf("\n\t^^^^^^^^^^^^^^^^^^^^感謝您使用本系統^^^^^^^^^^^^^^^^^^^^\n\n");break;
case *3*:servicelogin();break;
case *4*:turnoff();break;
default:printf("\t【暫時沒有這個選項!】\n");
}
}
}
/***********************************************************/
int main()
{
vip = createqueue(n);//創建vip客戶隊列
nor = createqueue(n);//創建普通股客戶隊列
hugemenu();//調用主界面 //hugemenu()函數是無限循環函數,內部有跳出循環的語句
return 0;
}
總結
以上是生活随笔為你收集整理的用c语言完成银行排号系统,【分享】C语言 银行取票排队系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言数据库公共知识,全国计算机二级C语
- 下一篇: android语音播放工具类,Andro