模拟银行叫号系统(c代码)
2019独角兽企业重金招聘Python工程师标准>>>
这是一个简单的模拟银行叫号系统,用c语言实现的。我的专业只学过C,翻阅学习了些数据机构的知识,然后开始编写的。一个初学程序的新手。往多多指点! 实现的功能:根据先来先服务的原则,模拟实现一个银行业务服务叫号系统(系统需求:客户到达银行首先取号,然后根据先来先服务的原则等待空闲业务服务窗口叫号,最后业务处理完离开) 系统主要分为3个功能模块,分别是:客户取号(客户创建)、叫号系统(业务服务安排)、退出。 客户取号界面:当客户到达时,在主菜单输入“1”,进入“客户到达界面”。此时界面会显示:客户的排队序号、到达时间。 叫号系统界面:在主菜单输入“2”,进入“叫号系统界面”。此时界面会显示“请耐心等待”,等待柜台客户业务处理的结束,直到柜台客户业务处理结束时,叫号系统界面会显示结束服务客户的客户信息(包括:序号、到达时间、等待时间、服务时间),若还有等待的客户就显示下一位服务客户的序号、服务的柜台号及客户等待的时间;若没有等待的客户就显示“已无等待客户”。 退出界面:在主菜单输入“0”,进入退出界面,显示“谢谢您的使用”后退出银行叫号模拟系统。
<!-- lang: cpp -->
#include <stdio.h>
#include <malloc.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#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("(按数字1、2、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;
}
}
}
效果图截图:
转载于:https://my.oschina.net/u/998693/blog/125465
模拟银行叫号系统(c代码)相关推荐
- 数据结构实验二——队列(银行叫号系统)
一.实验目的 (1)掌握队列的链式存储结构 (2)掌握队列的基本操作,并能进行应用实践 (3)使用C/C++语言和队列实现"银行叫号系统"专题 二.实验任务 设计一个控制台程序,模 ...
- 基于IDEA的JavaWeb银行叫号系统
文档源资源见: https://pan.baidu.com/s/1Vc35QF-SP5NFq1xQJeX1jQ 提取码: 8259 复制这段内容后打开百度网盘手机App,操作更方便哦 基于JavaWe ...
- 用python写银行叫号系统(这个是学校的实训题目,真的没什么技术含量)
一. 项目概述 智能排队叫号系统是在银行等待业务办理区域所使用的智能叫号系统,系统可有效解决客户办理业务时排队的无序.业务员工作量的不平衡.就诊环境嘈杂等问题. 二. 需求分析 主要分为取号.排队等待 ...
- java 银行叫号系统
---------------------- ASP.Net+Unity开发. .Net培训.期待与您交流! ---------------------- 项目需求:模拟实现银行业务调度系统逻辑,银行 ...
- java银行排队系统_用GUI模拟银行排队系统
要求: 和实际情况相似,您到银行办理业务,到了银行大厅首先是在电脑上刷卡(有的可能不用刷卡)取出一个纸条,上面有你的位置号还有你前面有多少人,在工作人员那里会有一个按钮,点击一下就会叫一个人到他那里办 ...
- 叫号系统排队系统挂号系统实现
关于队列,使用的地方非常的多.现实中有很多的例子.比如医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这样的排队取号的设备.他们的功能基本如下: 1.系统可联网联机统一发号: 2.系统 ...
- 叫号系统排队系统挂号系统实现(JAVA队列)
关于队列,使用的地方非常的多.现实中有很多的例子.比如医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这样的排队取号的设备.他们的功能基本如下: 1.系统可联网联机统一发号: 2.系统 ...
- VS+Qt+C++银行排队叫号系统
程序示例精选 VS+Qt+C++银行排队叫号系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对<<VS+Qt+C++银行排队叫号系统& ...
- c 语言银行排队系统,C++实现银行排队系统
#include #include #include int cnt=0; //当日客流量 int sum=0; //当日客户排队总时间 typedef struct pnode{ int numbe ...
- 数据结构——数据结构模拟银行排号叫号系统参考
数据结构模拟银行排号叫号系统参考 4/27.作业三 用队列的简单操作实现,代码较简单,提示信息易懂 定义一个结构体SqQueue 判断队列是否为空 判断队列是否已满 向队列中插入元素 元素e出队,并用 ...
最新文章
- Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子
- faster_rcnn c++版本的 caffe 封装,动态库(2)
- ActiveRecord多表查询
- 【推导】【数学期望】Gym - 101237D - Short Enough Task
- apache httpd配置后启动失败或域名绑定无效等问题解决方法
- 基于神经网络的毕设题目_新资源科技核心题目
- REX-Ray 了解
- dump文件_windows程序崩溃时生成dump文件方法
- SQL SERVER 之 填充因子
- 教你在SQL Server数据库中设计表和字段
- 用java实现学生成绩管理系统_学生成绩管理系统(java实现)
- VSTO word操作
- [C语言学习]C语言程序设计基础(一)
- 孤独剑客的推荐安全站点 (from http://bbs.isbase.net)
- 用计算机如何扫描仪,扫描仪的使用方法 扫描仪怎么用
- 网吧电影服务器解决方案完全指南(二)
- dcos - marathon - 有的时候健康检查不是绿条
- js 去除最后一个逗号
- 编写python 函数,实现冒泡排序算法。
- 中国电信骨干网网络介绍