银行排队系统 c++
C语言课程设计:银行排队系统

#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <conio.h>#include <time.h>#define n 3int vip1=0;int y,z;float sum1=0,sum2=0,sum3=0,sum4=0,sum5=0;float i1=0,i2=0,i3=0,i4=0,i5=0;float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0;struct List{int A[n+1]; //顾客用来办理业务的N个窗口int len; //表示数组中的元素个数}L;struct Lnode{ //链表结点类型int data;Lnode *next;};struct Linkqueue{ //链式存储的等候队列的类型定义Lnode *front;Lnode *rear;}Q;void Initshuzu() //初始化线性的算法{for(int i=1;i<=n;i++)L.A[i]=0; //元素值为0,表示编号为I的窗口当前状态为空L.len=0;}void Initqueue() //初始化队列的算法{Q.front=Q.rear=(Lnode *)malloc(sizeof(Lnode));Q.front->next=NULL; //k1}void Enqueue(Linkqueue *Q,int elem) //进队算法{Lnode *s;s=(Lnode *)malloc(sizeof(Lnode));s->data=elem; //k2s->next=NULL; //k3Q->rear->next=s; //k4Q->rear=s; //k5}int Dlqueue(Linkqueue *Q) //出队算法{Lnode *t;int x;if(Q->front==Q->rear){printf("队列为空!\n");exit(1);}else{t=Q->front->next;Q->front->next=t->next; //k6x=1; //k7free(t); //k8return x;}}void printl() //输出数组算法{int i;printf("正在办理业务的顾客编号为:一号柜台二号柜台三号柜台\n");printf(" ");for( i=1;i<=L.len;i++){printf("%d号客户",L.A[i]);}printf("\n");}void print2() //输出队列算法{ int i=0;printf("正在等候办理业务的顾客编号为:");Lnode *s=Q.front->next;while(s!=NULL){printf("%d ",s->data);s=s->next; //k9i++;}printf("\n您的前面一共有%d人在排队,请您稍候!",i);printf("\n");void daoda(int x) //解决顾客到达事件算法{int i=L.len+1;if (L.len<n) //{ L.A[i]=x;i++;L.len++;}elseEnqueue(&Q,x);}void likai(int x) //解决顾客离开事件算法{int i=0;do{if(x>L.len){printf("输入有误!\n请重新输入:");scanf("%d",&x);}elsefor(i=0;i<=L.len;i++){if(i==x){printf("尊敬的%d号顾客您好!\n",x);L.A[i]=0;L.len--;if(Q.front!=Q.rear){int y=Dlqueue(&Q);L.A[i]=y;L.len++;}}}}while(i==0);}int guitai( ) //判断输入的柜台号是否正确int y=0;printf("请输入你所办理业务的柜台号(1-3):\n");scanf("%d",&y);if(y<1||y>5){printf("你输入的柜台号有误,请重新输入!\n");printf("请输入你所办理业务的柜台号(1-3):\n");scanf("%d",&y);}elseprintf(" 你所办理业务的柜台为%d.\n",y);return y;}int pingfeng( ) //判断输入的分数是否正确{int y=0;printf("请输入你评分(1-5):\n 1分…………非常不满意;\n 2分…………比较不满意;\n 3分…………一般满意;\n 4分…………比较满意;\n 5分…………非常满意。
C# 银行叫号系统课程设计

课程设计任务书课程名称:课程设计1(数据结构)设计题目:银行排队叫号系统1.问题描述:目前,在以银行营业大厅为代表的窗口行业,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升营业形象的主要障碍。
排队(叫号)系统的使用将成为改变这种状况的有力手段。
排队系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦,把顾客排队等待的烦恼变成一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。
排队叫号软件的具体操作流程为:●顾客取服务序号。
当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。
单上显示服务号及该服务号前面正在等待服务的人数。
●银行职员呼叫顾客,顾客的服务号就会按顺序的显示在显示屏上。
当一位顾客办事完毕后,柜台银行职员只需按呼叫器相应键,即可自动呼叫下一位顾客。
2. 功能要求:1)使用数组或链表以及C#接口和范型技术实现通用的队列功能;2)编写算法,利用队列模拟银行排队系统;3)利用多窗口分别模拟顾客取服务号、银行窗口服务顾客。
3.界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。
4. 技术要求:要求利用面向对象的方法以及队列数据结构来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制来实现系统功能。
5.创新要求在基本要求达到后,可以进行创新设计(包括界面、功能、数据结构)。
6. 课程设计时间:1周(18课时)7. 课程设计的考核方式及评分方法1)考核方式⏹课程设计结束时,在机房当场验收。
⏹教师提供测试数据,检查运行结果是否正确。
⏹回答教师提出的问题。
⏹学生提交课程设计文档(A4纸打印)2)评分方法上机检查及答辩: 书面报告: 学习态度= 6 : 3 : 1,没有通过上机检查的其成绩直接记录不及格。
银行排队系统实验报告

一、实验目的1. 熟悉银行排队系统的基本原理和设计方法;2. 掌握使用C语言实现银行排队系统的基本操作;3. 培养团队合作精神和实践能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 开发工具:Visual Studio三、实验内容1. 银行排队系统简介银行排队系统是一种模拟真实银行排队场景的程序,主要功能包括:客户到达、排队、服务、离开等。
通过模拟银行排队过程,我们可以了解银行排队系统的基本原理,并为实际应用提供参考。
2. 系统设计(1)数据结构本系统采用队列数据结构来存储排队客户。
队列是一种先进先出(FIFO)的数据结构,适用于模拟银行排队场景。
(2)功能模块本系统主要包括以下功能模块:1)客户到达模块:模拟客户到达银行,并随机生成客户信息,如客户ID、到达时间、服务时间等;2)排队模块:根据客户到达顺序,将客户信息依次加入队列;3)服务模块:按照客户排队顺序,为每位客户提供服务,并更新客户状态;4)离开模块:客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
(3)实现方法1)客户到达模块:使用随机数生成器生成客户信息,并将客户信息存入队列;2)排队模块:当客户到达时,将客户信息加入队列尾部;3)服务模块:从队列头部取出客户信息,为该客户提供服务,并更新客户状态;4)离开模块:当客户服务完成后,从队列中移除该客户信息;5)统计模块:记录客户服务次数、平均等待时间、最长等待时间等数据。
3. 实验步骤(1)初始化系统,设置窗口数量和客户到达时间间隔;(2)模拟客户到达,生成客户信息并加入队列;(3)按照客户到达顺序,为每位客户提供服务;(4)记录客户服务次数、平均等待时间、最长等待时间等数据;(5)统计实验结果,分析银行排队系统性能。
四、实验结果与分析1. 实验结果通过实验,我们得到了以下数据:(1)客户服务次数:100次;(2)平均等待时间:5分钟;(3)最长等待时间:15分钟。
c++ 语言下的 银行排队系统问题

}
/*计算等待时间*/
void getwait()
{
wait=(time3*60+time4)-(f.time1*60+f.time2);
}
};
/*判断用户应该到那个窗口办理业务*/
int min(window p1,window p2)
{
if((p1.time3*60+p1.time4)<=(p2.time3*60+p2.time4))
}
/*确定窗口下次业务工作时间*/
win[j].time3=win[j].time3+(win[j].f.time+win[j].time4)/60;
win[j].time4=(win[j].f.time+win[j].time4)%60;
}
win0<<"办理的客户数目为:"<<win[0].count<<endl;
{
count=save=fetch=loss=repay=time3=time4=0;
}
/*累计各种业务办理的数目*/
void add()
{
switch(*f.oper)
{
case 's':save++;break;
case 'f':fetch++;break;
case 'l':loss++;break;
case 'r':repay++;break;
}
}
银行排队叫号系统

银行排队叫号系统
银行排队叫号系统是一个用于管理银行客户排队的系统。
它可以帮
助银行有效地组织客户排队并减少排队时间,提供更好的服务体验。
银行排队叫号系统通常包括以下组成部分:
1. 号码发放器:客户在到达银行后,可以通过号码发放器获得一个
排队号码。
这个号码可以通过机器打印或者手机App等方式获取。
2. 叫号显示屏:银行柜台或大厅中通常会安装一个数字显示屏,用
于显示当前叫号的号码。
客户可以根据显示屏上的号码知道自己何
时可以进行业务办理。
3. 声音提示系统:银行也可以通过声音提示系统,在叫号时播放相
应号码的语音提示,以提醒客户进行业务办理。
4. 系统管理后台:银行工作人员可以通过系统管理后台对排队叫号
系统进行管理和监控,例如设置叫号方式、查看排队情况、调整柜
台业务等。
银行排队叫号系统的工作流程通常是这样的:
1. 客户到达银行后,通过号码发放器获取一个排队号码。
2. 客户等待叫号,同时可以通过显示屏或声音提示系统了解当前叫号的号码。
3. 当客户的号码被叫到时,客户可以前往指定柜台或窗口进行业务办理。
通过银行排队叫号系统,银行可以更好地组织客户排队,提高办理效率,减少客户等待时间,提升服务质量。
同时,系统还可以帮助银行收集客户排队数据统计和分析,用于优化银行的营运管理。
使用C++实现银行排队叫号系统

使⽤C++实现银⾏排队叫号系统模拟20秒的输出结果--------模拟开始--------初始化⽤户:普通客户进⼊排队,编号:1000VIP客户进⼊排队, 编号:1001普通客户进⼊排队,编号:1002普通客户进⼊排队,编号:1003VIP客户进⼊排队, 编号:1004VIP客户进⼊排队, 编号:1005VIP客户进⼊排队, 编号:1006对公客户进⼊排队, 编号:1007普通客户进⼊排队,编号:1008VIP客户进⼊排队, 编号:1009普通客户编号为: 1000 请进⼊0号普通窗⼝服务普通客户编号为: 1002 请进⼊1号普通窗⼝服务普通客户编号为: 1003 请进⼊2号普通窗⼝服务VIP客户编号为: 1001 请进⼊3号VIP窗⼝服务对公客户编号为: 1007 请进⼊4号对公窗⼝服务-当前模拟时间:0s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1000窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1002窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1003窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007-当前模拟时间:1s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1000窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1002窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1003窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007-当前模拟时间:2s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1000窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1002窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1003窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007VIP客户进⼊排队, 编号:1010-当前模拟时间:3s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1000窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1002窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1003窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007对公客户进⼊排队, 编号:1011-当前模拟时间:4s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1000窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1002窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1003窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007对公客户进⼊排队, 编号:1012-当前模拟时间:5s -窗⼝号:0 -等待服务-窗⼝号:1 -等待服务-窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007普通客户编号为: 1008 请进⼊0号普通窗⼝服务普通客户进⼊排队,编号:1013-当前模拟时间:6s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1008窗⼝号:1 -等待服务-窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1001窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007普通客户编号为: 1013 请进⼊1号普通窗⼝服务普通客户进⼊排队,编号:1014-当前模拟时间:7s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1008窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1013窗⼝号:2 -等待服务-窗⼝号:3 -等待服务-窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007普通客户编号为: 1014 请进⼊2号普通窗⼝服务VIP客户编号为: 1004 请进⼊3号VIP窗⼝服务普通客户进⼊排队,编号:1015-当前模拟时间:8s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1008窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1013窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1014窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1007VIP客户进⼊排队, 编号:1016-当前模拟时间:9s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1008窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1013窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1014窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -等待服务-对公客户编号为: 1011 请进⼊4号对公窗⼝服务VIP客户进⼊排队, 编号:1017-当前模拟时间:10s -窗⼝号:0 -等待服务-窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1013窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1014窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011普通客户编号为: 1015 请进⼊0号普通窗⼝服务普通客户进⼊排队,编号:1018-当前模拟时间:11s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1015窗⼝号:1 -等待服务-窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1014窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011普通客户编号为: 1018 请进⼊1号普通窗⼝服务VIP客户进⼊排队, 编号:1019-当前模拟时间:12s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1015窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1018窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011普通客户进⼊排队,编号:1020-当前模拟时间:13s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1015窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1018窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1004窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011普通客户编号为: 1020 请进⼊2号普通窗⼝服务普通客户进⼊排队,编号:1021-当前模拟时间:14s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1015窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1018窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1020窗⼝号:3 -等待服务-窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011 VIP客户编号为: 1005 请进⼊3号VIP窗⼝服务对公客户进⼊排队, 编号:1022-当前模拟时间:15s -窗⼝号:0 -等待服务-窗⼝号:1 -正在服务- 客户类型: 普通客户编号: 1018窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1020窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011普通客户编号为: 1021 请进⼊0号普通窗⼝服务对公客户进⼊排队, 编号:1023-当前模拟时间:16s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1021窗⼝号:1 -等待服务-窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1020窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011 VIP客户进⼊排队, 编号:1024-当前模拟时间:17s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1021窗⼝号:1 -等待服务-窗⼝号:2 -正在服务- 客户类型: 普通客户编号: 1020窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1011对公客户进⼊排队, 编号:1025-当前模拟时间:18s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1021窗⼝号:1 -等待服务-窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -等待服务-对公客户编号为: 1012 请进⼊4号对公窗⼝服务对公客户进⼊排队, 编号:1026-当前模拟时间:19s -窗⼝号:0 -正在服务- 客户类型: 普通客户编号: 1021窗⼝号:1 -等待服务-窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1012 VIP客户进⼊排队, 编号:1027-当前模拟时间:20s -窗⼝号:0 -等待服务-窗⼝号:1 -等待服务-窗⼝号:2 -等待服务-窗⼝号:3 -正在服务- 客户类型: VIP 客户编号: 1005窗⼝号:4 -正在服务- 客户类型: 对公客户编号: 1012普通客户进⼊排队,编号:1028源代码#include<iostream>#include<stdlib.h>#include<time.h>#include<queue>#include<Windows.h>using namespace std;class User{public:int userID;int type;//0为普通⽤户,1为VIP⽤户,2为对公⽤户.User() { type = 0; userID = 1000; }User(int t, int id) { userID = id, type = t; }};class BankWindow{public:int id;//0,1,2,为普通窗⼝,3为VIP窗⼝,4为对公窗⼝.bool isBusy;User client;int serviceStartTime=0;BankWindow() { isBusy = false; }BankWindow(int i) { id = i; isBusy = false; }};class Simulater{private:int serviceTime[3] = {4,6,8};int initID = 1000;BankWindow bankWindow0;BankWindow bankWindow1;BankWindow bankWindow2;BankWindow bankWindow3;BankWindow bankWindow4;queue<User> NormalUserQueue, VIPUserQueue, OfficialUserQueue;public:Simulater(){bankWindow0.id = 0;bankWindow1.id = 1;bankWindow2.id = 2;bankWindow3.id = 3;bankWindow4.id = 4;srand(unsigned(time(0)));}void enterQueue(User user){if (user.type == 0){cout << "普通客户进⼊排队,编号:" <<erID<< endl;NormalUserQueue.push(user);}else if(user.type==1){cout << "VIP客户进⼊排队, 编号:"<<erID<<endl;VIPUserQueue.push(user);}else if (user.type == 2){cout << "对公客户进⼊排队, 编号:" <<erID<< endl;OfficialUserQueue.push(user);}else{cout << "⽤户类型出错!";}}void output(User user){if (user.type == 0){cout << "普通客户 " << "编号为: " << erID;}else if (user.type == 1){cout << "VIP客户 " << " 编号为: " << erID;}else if (user.type == 2){cout << "对公客户 " << "编号为: " << erID;}else{cout << "⽤户类型错误!" << endl;}}void output2(User user){if (user.type == 0){cout << " 客户类型: " << "普通 "<< "客户编号: " << erID;}else if (user.type == 1){cout << " 客户类型: " << "VIP " << "客户编号: " << erID; }else if (user.type == 2){cout << " 客户类型: " << "对公 " << "客户编号: " << erID; }else{cout << " ⽤户类型错误!" << endl;}}void enterWindow(int time){if (bankWindow0.isBusy == false && !NormalUserQueue.empty()) {bankWindow0.client = NormalUserQueue.front();output(bankWindow0.client);cout<<" 请进⼊0号普通窗⼝服务" << endl;bankWindow0.isBusy = true;bankWindow0.serviceStartTime = time; NormalUserQueue.pop();}if (bankWindow1.isBusy == false && !NormalUserQueue.empty()) {bankWindow1.client = NormalUserQueue.front();output(bankWindow1.client);cout << " 请进⼊1号普通窗⼝服务" << endl;bankWindow1.isBusy = true;bankWindow1.serviceStartTime = time; NormalUserQueue.pop();}if (bankWindow2.isBusy == false && !NormalUserQueue.empty()) {bankWindow2.client = NormalUserQueue.front();output(bankWindow2.client);cout << " 请进⼊2号普通窗⼝服务" << endl;bankWindow2.isBusy = true;bankWindow2.serviceStartTime = time; NormalUserQueue.pop();}if (bankWindow3.isBusy == false){if (!VIPUserQueue.empty()){bankWindow3.client = VIPUserQueue.front();bankWindow3.isBusy = true;bankWindow3.serviceStartTime = time;VIPUserQueue.pop();}else if (!NormalUserQueue.empty()){bankWindow3.client = NormalUserQueue.front(); bankWindow3.isBusy = true;bankWindow3.serviceStartTime = time; NormalUserQueue.pop();}else{}output(bankWindow3.client);cout << " 请进⼊3号VIP窗⼝服务" << endl;}if (bankWindow4.isBusy == false){if (!OfficialUserQueue.empty()){bankWindow4.client = OfficialUserQueue.front(); bankWindow4.isBusy = true;bankWindow4.serviceStartTime = time; OfficialUserQueue.pop();}else if (!NormalUserQueue.empty()){bankWindow4.client = NormalUserQueue.front(); bankWindow4.isBusy = true;bankWindow4.serviceStartTime = time; NormalUserQueue.pop();}else {}output(bankWindow4.client);cout << " 请进⼊4号对公窗⼝服务" << endl;}}void display(int time){cout << "-当前模拟时间:" << time << "s -" << endl;windowCondition(bankWindow0);windowCondition(bankWindow1);windowCondition(bankWindow2);windowCondition(bankWindow3);windowCondition(bankWindow4);}void customerEnter(){int type = rand() % 12;//不同概率⽣成⽤户.if (type >= 0 && type <= 5){User u(0, initID);enterQueue(u);}if (type >= 6 && type <= 9){User u(1, initID);enterQueue(u);}if (type >= 10 && type <= 11){User u(2, initID);enterQueue(u);}initID++;}void windowCondition(BankWindow bankWindow){cout << "窗⼝号:" << bankWindow.id<<" ";if (bankWindow.isBusy == true){cout << "-正在服务-";output2(bankWindow.client);}else{cout << "-等待服务-";}cout << endl;}void isBusy(int time)//扫描⼀遍窗⼝,检测服务是否结束{if (bankWindow0.isBusy == true){if (time - bankWindow0.serviceStartTime >= serviceTime[bankWindow0.client.type]) {bankWindow0.isBusy = false;}}if (bankWindow1.isBusy == true){if (time - bankWindow1.serviceStartTime >= serviceTime[bankWindow1.client.type]) {bankWindow1.isBusy = false;}}if (bankWindow2.isBusy == true){if (time - bankWindow2.serviceStartTime >= serviceTime[bankWindow2.client.type]) {bankWindow2.isBusy = false;}}if (bankWindow3.isBusy == true){if (time - bankWindow3.serviceStartTime >= serviceTime[bankWindow3.client.type]) {bankWindow3.isBusy = false;}}if (bankWindow4.isBusy == true){if (time - bankWindow4.serviceStartTime >= serviceTime[bankWindow4.client.type]) {bankWindow4.isBusy = false;}}}void simulate(){int time = 0;cout << "--------模拟开始--------" << endl;cout << "初始化⽤户:" << endl;for (int i = 0; i < 10; i++){customerEnter();}enterWindow(time);while (1){display(time);enterWindow(time);isBusy(time);if (time/2 != 0){customerEnter();//没间隔两秒进⼊⼀位客户. }Sleep(1000);time++;if (time == 21){getchar();}}}};int main(){Simulater simulater;simulater.simulate();}。
C#__银行叫号系统课程设计

课程设计任务书课程名称:课程设计1(数据结构)设计题目:银行排队叫号系统1.问题描述:目前,在以银行营业大厅为代表的窗口行业,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升营业形象的主要障碍。
排队(叫号)系统的使用将成为改变这种状况的有力手段。
排队系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦,把顾客排队等待的烦恼变成一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。
排队叫号软件的具体操作流程为:●顾客取服务序号。
当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。
单上显示服务号及该服务号前面正在等待服务的人数。
●银行职员呼叫顾客,顾客的服务号就会按顺序的显示在显示屏上。
当一位顾客办事完毕后,柜台银行职员只需按呼叫器相应键,即可自动呼叫下一位顾客。
2. 功能要求:1)使用数组或链表以及C#接口和范型技术实现通用的队列功能;2)编写算法,利用队列模拟银行排队系统;3)利用多窗口分别模拟顾客取服务号、银行窗口服务顾客。
3.界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。
4. 技术要求:要求利用面向对象的方法以及队列数据结构来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制来实现系统功能。
5.创新要求在基本要求达到后,可以进行创新设计(包括界面、功能、数据结构)。
6. 课程设计时间:1周(18课时)7. 课程设计的考核方式及评分方法1)考核方式⏹课程设计结束时,在机房当场验收。
⏹教师提供测试数据,检查运行结果是否正确。
⏹回答教师提出的问题。
⏹学生提交课程设计文档(A4纸打印)2)评分方法上机检查及答辩: 书面报告: 学习态度= 6 : 3 : 1,没有通过上机检查的其成绩直接记录不及格。
C#开发银行叫号系统方案

任务书课程名称:C#程序设计设计题目:银行排队叫号系统1.问题描述:目前,在以银行营业大厅为代表的窗口行业,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升营业形象的主要障碍。
排队(叫号)系统的使用将成为改变这种状况的有力手段。
排队系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦,把顾客排队等待的烦恼变成一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。
排队叫号软件的具体操作流程为:●顾客取服务序号。
当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一服务单。
单上显示服务号及该服务号前面正在等待服务的人数。
●银行职员呼叫顾客,顾客的服务号就会按顺序的显示在显示屏上。
当一位顾客办事完毕后,柜台银行职员只需按呼叫器相应键,即可自动呼叫下一位顾客。
2. 功能要求:1)使用数组或链表以及C#接口和型技术实现通用的队列功能;2)编写算法,利用队列模拟银行排队系统;3)利用多窗口分别模拟顾客取服务号、银行窗口服务顾客。
3.界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。
4. 技术要求:要求利用面向对象的方法以及队列数据结构来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制来实现系统功能。
5.创新要求在基本要求达到后,可以进行创新设计(包括界面、功能、数据结构)。
6. 课程设计时间:10天7. 考核方式●在机房当场验收。
●学生提交课程设计文档(A4纸打印)目录1 设计容与要求……………………………………………………………………………2.设计说明……………………………………………………………………………………2.1 问题描述与功能设计…………………………………………………………………2.2 算法与数据结构………………………………………………………………………2.3 类定义(函数定义)……………………………………………………………………2.4 界面设计………………………………………………………………………………2.5 编码……………………………………………………………………………………2.6 测试……………………………………………………………………………………3 总结…………………………………………………………………………………………附录A:源代码……………………………………………………………………………一、设计容与要求1、设计容1)、设计窗口,服务窗口;2)、编写代码,实现各种算法,完成排队叫号问题;2、设计要求1.通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深课程基本容的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
银行排队系统问题银行业务模拟问题描述:设银行有四个服务窗口,每个窗口均可以办理存款、取款、挂失、还贷业务,每种业务所需的服务时间不同,客户到达银行后,先到打号机上打号,号票上包括到达时间、编号和需要办理的业务,然后在银行内等候。
每个窗口办理完一个客户的业务后,办理等候客户中排在最前面的客户的业务。
写一个上述银行业务的模拟系统,通过模拟方法求出客户在银行内逗留的平均时间和每个窗口办理的客户数及办理的每种业务数。
基本要求:每个客户到达银行的时间和需要办理的业务随机产生,输出一天客户在银行的平均逗留时间和每个窗口每天办理的客户数和每种业务数。
测试数据:营业时间为8小时,其他模拟量自行设定。
要用到的知识点至少包括数据结构中的队列问题以下是本人初步的分析,可以更改但不要偏差太多。
客户类:◆按照顺序生成客户编号,在以后的程序调用之中保持不变。
输出客户编号(customer_code) ◆随机生成客户到达银行的时间(arrival_time)★使用随机数函数,假设每五分钟来一位顾客★顾客到来的时间超过480(营业八小时,8*60=480)分钟之外,系统运行结束。
★输出到达时间◆随机生成客户要办理的业务(item)◆输出办理业务的窗口号(window)窗口统计类:◆每个窗口分别记录某天办理的客户总数,和每种业务数。
输出相应记录◆统计所有窗口办理的总的客户数和每种业务数。
逗留时间:计算这一天客户在银行的平均逗留时间,平均每个客户进入银行到离开银行的时间总和。
办理业务的时间规定为:◆1——存款3分钟◆2——取款5分钟◆3——挂失10分钟◆4——还贷20分钟办理业务过程分析有窗口空闲时,顾客进入空闲窗口中号数较小的一个。
有顾客等待时,客户进入某个窗口的方式为队列。
哪一个窗口的业务先办理完,他进入那个队列。
#include<stdlib.h>#include<iostream.h>#include<time.h>#include<fstream.h>#include<iomanip.h>int j=0,r=0;/*建立票据的类,上面包含编号,客户到达银行时间以及要办理的业务*/class fare{public:int num;char *oper;int time;int time1,time2;/*票的编号是顺序产生的*/void getnum(int n){num=n;}/*客户到达银行时间是随机产生的*/void gettime(){srand(j++); /*利用j控制长生从小到大不断变化的随机种子*/r=((rand()-38)*5/8)%480; /*不同的数学组合可以控制随机数的产生。
*/time1=r/60+8;time2=r%60;}/*客户办理何种业务也是随即产生的*/void getoper(){oper=new char[10];r=r%4;switch(r){case 0:oper="save";time=5;break;case 1:oper="fetch";time=5;break;case 2:oper="loss";time=10;break;case 3:oper="repay";time=20;break;}}/*显示票据内容*/void display(){cout<<"号码"<<num<<" 到达时间:"<<time1<<":"<<time2;cout<<" 办理业务:"<<oper<<" 所需时间:"<<time<<endl;}/*赋值函数*/void get(fare p){num=p.num;oper=p.oper;time=p.time;time1=p.time1;time2=p.time2;}};/*建立银行窗口类,记录票据所有内容以及业务办理时间,同时计算办理类型总数*/ class window{public:fare f;int time3,time4;int count,save,fetch,loss,repay;int wait;window(){count=save=fetch=loss=repay=time3=time4=0;}/*累计各种业务办理的数目*/void add(){switch(*f.oper){case 's':save++;break;case 'f':fetch++;break;case 'l':loss++;break;case 'r':repay++;break;}}void worktime(){if((time3*60+time4)<=(f.time1*60+f.time2)){time3=f.time1;time4=f.time2;}}/*计算等待时间*/void getwait(){wait=(time3*60+time4)-(f.time1*60+f.time2);}};/*判断用户应该到那个窗口办理业务*/int min(window p1,window p2){if((p1.time3*60+p1.time4)<=(p2.time3*60+p2.time4)) return 1;else return 0;}int panduan(window q[],int n){int j=0;for(int i=1;i<n;i++){if(!min(q[j],q[i])) j=i;}return j;}void main(){int n;cout<<"请输入到银行办理业务的人数:";cin>>n; /*n取200左右,且小于234(跟随机序列有关)*//*建立一天内用户流量的文件*/fstream file("data.txt",ios::out|ios::app);fare *a;file<<"号码"<<" 到达时间:"<<" 办理业务:"<<" 所需时间:"<<endl;a=new fare[n];for(int i=0;i<n;i++){a[i].getnum(i);a[i].getoper();a[i].gettime();file<<setw(3)<<a[i].num<<setw(6)<<a[i].time1<<":"<<a[i].time2;file<<setw(12)<<a[i].oper<<setw(8)<<a[i].time<<endl;}window win[4];fstream win0("win0.txt",ios::out|ios::app);fstream win1("win1.txt",ios::out|ios::app);fstream win2("win2.txt",ios::out|ios::app);fstream win3("win3.txt",ios::out|ios::app);win0<<"号码"<<" 到达时间"<<" 办理业务"<<" 办理时间"<<endl;win1<<"号码"<<" 到达时间"<<" 办理业务"<<" 办理时间"<<endl;win2<<"号码"<<" 到达时间"<<" 办理业务"<<" 办理时间"<<endl;win3<<"号码"<<" 到达时间"<<" 办理业务"<<" 办理时间"<<endl;/*建立四个银行工作窗口文件记录业务办理情况*/int w[4]={0,0,0,0},sumwait,sum;double await;for(i=0;i<n;i++){int j=panduan(win,4);if((win[j].time3*60+win[j].time4)>16*60) break;/*判断是否已经到了下班时间*/win[j].f.get(a[i]);win[j].count++;win[j].add();win[j].worktime();win[j].getwait();w[j]=w[j]+win[j].wait;/*写入数据*/switch(j){case0:win0<<setw(3)<<win[0].f.num<<setw(6)<<win[0].f.time1<<":"<<win[0].f.time2<<setw(12)<<win[0].f.oper<<setw(8)<<win[0].time3<<":"<<win[0].time4<<endl;break;case1:win1<<setw(3)<<win[1].f.num<<setw(6)<<win[1].f.time1<<":"<<win[1].f.time2<<setw(12)<< win[1].f.oper<<setw(8)<<win[1].time3<<":"<<win[1].time4<<endl;break;case2:win2<<setw(3)<<win[2].f.num<<setw(6)<<win[2].f.time1<<":"<<win[2].f.time2<<setw(12)<< win[2].f.oper<<setw(8)<<win[2].time3<<":"<<win[2].time4<<endl;break;case3:win3<<setw(3)<<win[3].f.num<<setw(6)<<win[3].f.time1<<":"<<win[3].f.time2<<setw(12)<< win[3].f.oper<<setw(8)<<win[3].time3<<":"<<win[3].time4<<endl;break;}/*确定窗口下次业务工作时间*/win[j].time3=win[j].time3+(win[j].f.time+win[j].time4)/60;win[j].time4=(win[j].f.time+win[j].time4)%60;}win0<<"办理的客户数目为:"<<win[0].count<<endl;win0<<"取款业务数目:"<<win[0].fetch<<endl;win0<<"挂失业务数目:"<<win[0].loss<<endl;win0<<"还贷业务数目:"<<win[0].repay<<endl;win0<<"存款业务数目:"<<win[0].save<<endl;win1<<"办理的客户数目为:"<<win[1].count<<endl;win1<<"取款业务数目:"<<win[1].fetch<<endl;win1<<"挂失业务数目:"<<win[1].loss<<endl;win1<<"还贷业务数目:"<<win[1].repay<<endl;win1<<"存款业务数目:"<<win[1].save<<endl;win2<<"办理的客户数目为:"<<win[2].count<<endl;win2<<"取款业务数目:"<<win[2].fetch<<endl;win2<<"挂失业务数目:"<<win[2].loss<<endl;win2<<"还贷业务数目:"<<win[2].repay<<endl;win2<<"存款业务数目:"<<win[2].save<<endl;win3<<"办理的客户数目为:"<<win[3].count<<endl;win3<<"取款业务数目:"<<win[3].fetch<<endl;win3<<"挂失业务数目:"<<win[3].loss<<endl;win3<<"还贷业务数目:"<<win[3].repay<<endl;win3<<"存款业务数目:"<<win[3].save<<endl;sumwait=w[0]+w[1]+w[2]+w[3];sum=win[0].count+win[0].count+win[0].count+win[0].count;await=sumwait/sum;cout<<await<<endl;file<<"到达银行客户总数:"<<n<<endl;file<<"成功办了业务的客户总数:"<<sum<<endl; file<<"客户平均逗留时间:"<<await<<endl;file.close();win0.close();win1.close();win2.close();win3.close();}。