.基本功能
(1)设立三个窗口进行取票服务
(2)普通用户排队
①会显示当前窗口等待人员(显示所有窗口和窗口等待的号码及其位次)
②选择窗口预约取号并等待返回主界面
(考虑到每个服务都有时间.一般取号后都会返回到主界面等待服务时间 我选择了排在队头的客户可以自主选择结束)
(3)vip用户通道
直接插队,选择窗口后排在窗口第一位优先处理
(4)显示当前窗口等待人员
显示当前窗口等待人员(显示所有窗口和窗口等待的号码及其位次)
(对于课设要求是客户需要知道自己当前的号码 设计的是在进入排队系统时取号会取得一个号码并提醒.然后需要等待的人数这个功能 我选择了做窗口显示这个功能 显示所有窗口的等待号码及位次可以通过位次清楚看到自己所在位置和前面等待人数 关于顾客可以查看窗口正在办理的号 通过我的窗口显示的第一个可知晓)
(5)查询排队进度
界面上方先显示显示所有窗口和窗口等待的号码及其位次,然后通过之前自己所选的窗口和号码可以看到自己在第几位,若自己在第一位,默认为当前功能是选择办理完成退出排队,然后进行服务评价
(6)服务评价
(7)退出系统
具体代码:
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include<conio.h>
static int i=1;
void pingjia();
int shows1();
int shows2();
int shows3();
void show();
void EnQueue();
void vip2();
void choice();
void pingjia();
void tuichu();
void menu();
void date ();
typedef struct QNode
{
int bianhao;//队内成员取到的号码
struct QNode *next;
}QNode,* QueuePtr;
typedef struct
{
QueuePtr front;//队头指针
QueuePtr rear;//队尾指针
}Queue;//创建链式队列
void initQueue(Queue *q)//队列的初始化
{
q->front=q->rear=(QNode *)malloc(sizeof(QNode));
if (!q->front)//初始化失败退出
{
return;
}
q->front->next=NULL;
}
Queue s1,s2,s3;//创建三个队列窗口
int shows1()//显示1窗口人员
{
QNode *p = (QNode *)malloc(sizeof(QNode));
if(s1.front==s1.rear){//队列为空队列
printf("当前无排队人员 \n");
return 0;
}
p=s1.front->next;
while(p){
printf("%d ",p->bianhao);
p=p->next;
}
printf("\n");
}
int shows2()//显示2窗口人员
{
QNode *p = (QNode *)malloc(sizeof(QNode));
if(s2.front==s2.rear){//队列为空队列
printf("当前无排队人员 \n");
return 0;
}
p=s2.front->next;
while(p){
printf("%d\t",p->bianhao);
p=p->next;
}
printf("\n");
}
int shows3()//显示3窗口人员
{
QNode *p = (QNode *)malloc(sizeof(QNode));
if(s3.front==s3.rear){//队列为空队列
printf("当前无排队人员 \n");
return 0;
}
p=s3.front->next;
while(p){
printf("%d\t",p->bianhao);
p=p->next;
}
printf("\n");
}
void show()//总显示窗口
{
printf("\n\t\t\t\t\t*1号窗口排队人员:");
shows1();
printf("\n\t\t\t\t\t*2号窗口排队人员:");
shows2();
printf("\n\t\t\t\t\t*3号窗口排队人员:");
shows3();
printf("\t\t\t\t\t");
system("pause");
}
void EnQueue(Queue &q,int &i)//队列插入
{
QNode *p = (QNode *)malloc(sizeof(QNode));
p->bianhao=i;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}
int DeQueue(Queue &q,int &e)//队列删除
{
if(q.front==q.rear){//队列为空队列
return 1;
}
QNode *p = (QNode *)malloc(sizeof(QNode));
p=q.front->next;
e=p->bianhao;
q.front->next=p->next;
if(q.rear==p)
{
q.rear=q.front;
}
free(p);
}
void EnQueue()//选择窗口插入
{
show();
printf("\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t*请选择窗口服务:\t\t*\n");
printf("\t\t\t\t\t*\t 1.1号窗口 *\n");
printf("\t\t\t\t\t*\t 2.2号窗口 *\n");
printf("\t\t\t\t\t*\t 3.3号窗口 *\n");
printf("\t\t\t\t\t*********************************\n");
int a;
printf("\t\t\t\t\t");
scanf("%d",&a);
switch(a){
case 1:
EnQueue(s1,i);
printf("\t\t\t\t\t取号成功,你是1号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
case 2:
EnQueue(s2,i);
printf("\t\t\t\t\t取号成功,你是2号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
case 3:
EnQueue(s3,i);
printf("\t\t\t\t\t取号成功,你是3号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
default:
printf("\t\t\t\t\t你的输入有误\n\t\t\t\t\t");
break;
}
system("pause");
system("cls");
}
void vip1(Queue &q,int &i)//vip头插
{
QNode *p = (QNode *)malloc(sizeof(QNode));
if(q.front==q.rear){
p->bianhao=i;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}
else{
p->bianhao=i;
p->next=q.front->next;
q.front->next=p;
}
}
void vip2()//vip插队
{
printf("\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t*请选择窗口服务:\t\t*\n");
printf("\t\t\t\t\t*\t 1.1号窗口 *\n");
printf("\t\t\t\t\t*\t 2.2号窗口 *\n");
printf("\t\t\t\t\t*\t 3.3号窗口 *\n");
printf("\t\t\t\t\t*********************************\n");
int a;
printf("\t\t\t\t\t");
scanf("%d",&a);
switch(a){
case 1:
vip1(s1,i);
printf("\t\t\t\t\t取号成功,你是1号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
case 2:
vip1(s2,i);
printf("\t\t\t\t\t取号成功,你是2号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
case 3:
vip1(s3,i);
printf("\t\t\t\t\t取号成功,你是3号窗口%d号,请等待办理\n\t\t\t\t\t",i);
i++;
break;
default:
printf("\t\t\t\t\t你的输入有误\n\t\t\t\t\t");
break;
}
system("pause");
system("cls");
}
int chazhao(Queue &q){
printf("\t\t\t\t\t请输入你所取的号码:");
int a;
int b=1;
scanf("%d",&a);
QNode *p = (QNode *)malloc(sizeof(QNode));
p=q.front->next;
while(p&&p->bianhao!=a)
{
p=p->next;
b++;
}
if(!p)
{
printf("\t\t\t\t\t查无此号\n");
return 1;
}
printf("\t\t\t\t\t你现在是第%d位,请等候谢谢!\n",b);
if(b==1){
int e=0;
DeQueue(q,e);
printf("\t\t\t\t\t办理完成!\n");
pingjia();
}
}
void choice()//查询排队进度
{
show();
printf("\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t*请输入你所在的窗口:\t\t*\n");
printf("\t\t\t\t\t*\t 1.1号窗口 *\n");
printf("\t\t\t\t\t*\t 2.2号窗口 *\n");
printf("\t\t\t\t\t*\t 3.3号窗口 *\n");
printf("\t\t\t\t\t*********************************\n");
int a;
printf("\t\t\t\t\t");
scanf("%d",&a);
switch(a){
case 1:
chazhao(s1);
break;
case 2:
chazhao(s2);
break;
case 3:
chazhao(s3);
break;
default:
printf("\t\t\t\t\t你的输入有误\n\t\t\t\t\t");
system("pause");
system("cls");
break;
}
}
void pingjia(){
printf("\n\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t*\t请对本次服务做出评价\t*\n");
printf("\t\t\t\t\t*\t1.非常满意!\t\t*\n");
printf("\t\t\t\t\t*\t2.比较满意!\t\t*\n");
printf("\t\t\t\t\t*\t3.一般!\t\t*\n");
printf("\t\t\t\t\t*\t4.不满意!\t\t*\n");
printf("\t\t\t\t\t*********************************\n");
int a;
printf("\t\t\t\t\t");
scanf("%d",&a);
printf("\t\t\t\t\t非常感谢你的评价!谢谢!\n\t\t\t\t\t");
system("pause");
system("cls");
}
void tuichu()
{
exit(0);
}
void menu(){
date ();
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t***********银行排队系统**********\n");
printf("\t\t\t\t\t*********************************\n");
printf("\t\t\t\t\t*\t请选择服务:\t\t*\n");
printf("\t\t\t\t\t*\t1.普通用户排队\t\t*\n");
printf("\t\t\t\t\t*\t2.vip用户通道\t\t*\n");
printf("\t\t\t\t\t*\t3.显示各窗口等待人数\t*\n");
printf("\t\t\t\t\t*\t4.查询排队进度\t\t*\n");
printf("\t\t\t\t\t*\t0.退出系统\t\t*\n");
printf("\t\t\t\t\t*********************************\n");
int a;
printf("\t\t\t\t\t");
scanf("%d",&a);
switch(a)
{
case 1:
system("cls");
EnQueue();
break;
case 2:
system("cls");
vip2();
break;
case 3:
system("cls");
show();
system("cls");
break;
case 4:
system("cls");
choice();
system("cls");
break;
case 0:
tuichu();
break;
default:
printf("你的输入有误");
system("pause");
system("cls");
break;
}
}
void date()
{
time_t rawtime;
struct tm * timeinfo;
char buffer [128];
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime (buffer,sizeof(buffer),"%Y/%m/%d %H:%M:%S",timeinfo);
puts (buffer);
}
int main()//
{
static int i=1;
initQueue(&s1);
initQueue(&s2);
initQueue(&s3);
while(1)
{
menu();
}
}
需要实验报告的可以联系我