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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值