该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
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;
}