银行排队系统 c++

合集下载

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# 银行叫号系统课程设计

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++ 语言下的 银行排队系统问题

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++实现银行排队叫号系统

使⽤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#__银行叫号系统课程设计

C#__银行叫号系统课程设计

课程设计任务书课程名称:课程设计1(数据结构)设计题目:银行排队叫号系统1.问题描述:目前,在以银行营业大厅为代表的窗口行业,大量客户的拥挤排队已成为了这些企事业单位改善服务品质、提升营业形象的主要障碍。

排队(叫号)系统的使用将成为改变这种状况的有力手段。

排队系统完全模拟了人群排队全过程,通过取票进队、排队等待、叫号服务等功能,代替了人们站队的辛苦,把顾客排队等待的烦恼变成一段难得的休闲时光,使客户拥有了一个自由的空间和一份美好的心情。

排队叫号软件的具体操作流程为:●顾客取服务序号。

当顾客抵达服务大厅时,前往放置在入口处旁的取号机,并按一下其上的相应服务按钮,取号机会自动打印出一张服务单。

单上显示服务号及该服务号前面正在等待服务的人数。

●银行职员呼叫顾客,顾客的服务号就会按顺序的显示在显示屏上。

当一位顾客办事完毕后,柜台银行职员只需按呼叫器相应键,即可自动呼叫下一位顾客。

2. 功能要求:1)使用数组或链表以及C#接口和范型技术实现通用的队列功能;2)编写算法,利用队列模拟银行排队系统;3)利用多窗口分别模拟顾客取服务号、银行窗口服务顾客。

3.界面要求:用户界面设计不做统一规定,但应做到界面友好,易于操作。

4. 技术要求:要求利用面向对象的方法以及队列数据结构来完成系统的设计;在设计的过程中,建立清晰的类层次;在系统设计中要分析和定义各个类,每个类中要有各自的属性和方法;要求运用面向对象的机制来实现系统功能。

5.创新要求在基本要求达到后,可以进行创新设计(包括界面、功能、数据结构)。

6. 课程设计时间:1周(18课时)7. 课程设计的考核方式及评分方法1)考核方式⏹课程设计结束时,在机房当场验收。

⏹教师提供测试数据,检查运行结果是否正确。

⏹回答教师提出的问题。

⏹学生提交课程设计文档(A4纸打印)2)评分方法上机检查及答辩: 书面报告: 学习态度= 6 : 3 : 1,没有通过上机检查的其成绩直接记录不及格。

C#开发银行叫号系统方案

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.通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深课程基本容的理解。

C#银行排队叫号系统课程设计报告

C#银行排队叫号系统课程设计报告

《软件设计基础-C#》
课程设计报告
设计名称:银行排队叫号系统
姓名:
学号:
专业班级:
学院:
设计时间:
设计地点:
目录
1.课程设计目的 (3)
2.课程设计任务与要求 (3)
3.课程设计说明书 (4)
4.课程设计成果 (9)
5.程序调试过程 (11)
6.设计问题的不足和改进方案 (11)
7.课程设计心得 (12)
8.附录 (13)
9.参考文献 (22)
2.3类定义(函数定义)
Form1类:
Form1继承了系统中的Form类;
在Form1中使用了button、label、textBox等控件;
使用了button_Click方法实现取号行为;
Form2类:
Form2也继承了系统中的Form类;
在Form2中也使用了button、label、textBox等控件;使用了button_Click方法实现叫号行为;
Form3类:
Form3也继承了系统中的Form类;
在Form2中也使用了button、label、textBox等控件;
使用了button_Click方法实现叫号行为;
Form4类:
Form4也继承了系统中的Form类;
在Form2中也使用了button、label、textBox等控件;
使用了button_Click方法实现叫号行为;
服务窗口ServiceWindow类:
服务队列的属性BankQ;
作为线程的方法Service();
主程序Main()方法;。

c课课程设计银行排队系统

c课课程设计银行排队系统

c课课程设计银行排队系统一、教学目标本节课的教学目标是让学生了解并掌握银行排队系统的原理和实现方法,培养学生的编程能力和问题解决能力。

具体来说,知识目标包括了解银行排队系统的原理和组成,掌握相关编程语言和工具的使用;技能目标包括能够独立设计和实现一个简单的银行排队系统,提高学生的编程能力和问题解决能力;情感态度价值观目标包括培养学生的团队合作意识和积极进取精神,激发学生对计算机科学和软件工程的兴趣。

二、教学内容本节课的教学内容主要包括银行排队系统的原理、组成和相关编程语言和工具的使用。

具体来说,首先介绍银行排队系统的原理和组成,让学生了解银行排队系统的基本概念和作用;然后讲解相关编程语言和工具的使用,如Java和Python,让学生掌握实现银行排队系统的基本方法;最后通过案例分析和实践操作,让学生独立设计和实现一个简单的银行排队系统。

三、教学方法为了达到本节课的教学目标,采用多种教学方法相结合的方式进行教学。

首先,采用讲授法向学生讲解银行排队系统的原理和组成,让学生掌握基本概念和作用;其次,采用讨论法引导学生进行问题讨论和解决方案的设计,培养学生的问题解决能力和团队合作意识;然后,采用案例分析法让学生分析实际案例,了解银行排队系统的应用场景和实现方法;最后,采用实验法让学生独立设计和实现一个简单的银行排队系统,提高学生的编程能力和实践能力。

四、教学资源为了支持本节课的教学内容和教学方法的实施,准备了一系列的教学资源。

教材方面,选择《计算机科学导论》和《软件工程导论》等教材,为学生提供理论知识的支持;参考书方面,推荐《Java编程思想》和《Python编程:从入门到实践》等书籍,为学生提供实践指导;多媒体资料方面,制作了相关的PPT和教学视频,为学生提供直观的学习资源;实验设备方面,准备了计算机和网络设备,为学生提供实践操作的平台。

通过这些教学资源的准备,丰富学生的学习体验,提高学生的学习效果。

五、教学评估为了全面、客观地评估学生的学习成果,本节课采用多种评估方式相结合。

数据结构——银行排队系统模拟(C语言)

数据结构——银行排队系统模拟(C语言)

数据结构——银⾏排队系统模拟(C语⾔)程序最终⽬的:获得所有客户在银⾏营业期间停留的平均时间程序初始值:默认第⼀个⽤户到达的时间为(0,0)#include <stdio.h>#include <stdlib.h>#include <time.h>/**使⽤队列模拟银⾏排队系统,并计算客户在银⾏停留的平均时间*问题1:银⾏已到达关闭时间,但是还有客户正在窗⼝处理问题(涉及到客户离开事件)*问题2:功能还未完全测试。

*问题3:代码未优化*version1:随机数版本(使⽤随机数产⽣客户数据)*待完成版本:数组版本(version);⽂件版本(version)*/#define USE_TIME 30 //客户在银⾏停留的最⼤时间#define NEXT_TIme 5 //下⼀个客户到达的最⼤间隔时间typedef struct E_list //有序表结点{int cur_time; /*记录当前时间*/int E_type; /*记录事件类型*/struct E_list* next; /*指针域*/} E_List,*EvenList;typedef struct Q_node //队列结点{int arrive_time; /*记录客户达到时间*/int dur_time; /*记录客户在银⾏停留时间*/struct Q_node* next; /*指针域*/} Q_Node,*QueueNode;typedef struct E_queue //队列操作结构{QueueNode front; /*指向队⾸元素*/QueueNode rear; /*指向队尾元素*/int length; /*记录队列长度*/} E_queue,*Win_Queue;int totalTime; /*记录总时间*/int allcustomer; /*记录客户数量*/int closetime; /*设置关闭时间*/E_List ev; //有序表头节点E_queue e_q[4]; //窗⼝队列操作结构void enter_List(EvenList new_E) //进⼊有序表{EvenList agent = ev.next; //代理指针指向第⼀个元素EvenList pre_E =&ev; //代理指针指向头结点while(agent!=NULL && (new_E->cur_time > agent->cur_time)) //找到元素的插⼊位置{pre_E = agent;agent = agent->next;}if(agent == NULL) /*插⼊到表尾*/{pre_E->next = new_E;}else /*插⼊到⾮表尾位置*/{new_E->next = agent;pre_E->next = new_E;}agent = ev.next;while(agent!=NULL) /*进⾏表的遍历*/{printf("(%d,%d)\n",agent->cur_time,agent->E_type);agent = agent->next;}printf("\n\n");}void out_List(EvenList Event) //出有序表{/*记录待删除结点的数据后,释放该结点*/EvenList temp = ev.next;Event->cur_time = temp->cur_time;Event->E_type = temp->E_type;Event->next = NULL;ev.next = temp->next; //出有序表节点printf("%p\n",temp->next); //测试语句printf("待处理客户:(%d , %d)\n",temp->cur_time,temp->E_type); /*测试语句*/free(temp); /*释放待删除结点*/}void en_Queue(Win_Queue q, QueueNode new_node) //进⼊指定队列{/*将元素加⼊到队列末尾,并增加队列长度*/q->rear->next = new_node;q->rear = new_node;q->length++;}void DeQueue(Win_Queue q,QueueNode node) //出队列{/*记录待出队列结点的数据,释放该结点后,队列长度减⼀*/QueueNode temp = q->front->next;q->front->next = temp->next;q->length--; /*队列长度减⼀*//*存储待删除结点的数据*/node->arrive_time = temp->arrive_time;node->dur_time = temp->dur_time;node->next = NULL;}void openforday() //初始化数据{int i;EvenList temp;QueueNode temp_q;totalTime = 0; /*初始化时间记录器*/allcustomer = 0; /*初始化顾客记录器*/closetime = 5; /*初始化银⾏关闭时间*/temp = (EvenList)malloc(sizeof(E_List));if(temp == NULL){printf("memory is failure!\n");exit(1);}temp->cur_time = 0;temp->E_type = 0;temp->next = NULL;ev.next = temp; /*将第⼀个客户数据(0,0,)加⼊到事件表*/for(i=0; i<4; i++) //为每⼀个窗⼝队列设置头节点{temp_q = (QueueNode)malloc(sizeof(Q_Node));if(temp_q == NULL){printf("memory allocate is failure!\n");exit(1);}temp_q->next = NULL;e_q[i].front = temp_q;e_q[i].rear = temp_q;e_q[i].length = 0; /*初始化队列长度*/}}void Even_head(EvenList E) //得到有序表的第⼀个客户{/*获得事件表第⼀个元素的副本*/E->cur_time = ev.next->cur_time;E->E_type = ev.next->E_type;E->next = NULL;}void arrive_Event() //处理客户到达事件{/***系统产⽣两个随机数(x,y),x表⽰当前窗⼝type = 0的⽤户在银⾏的停留时间*y表⽰下⼀个客户与上⼀个客户的间隔时间。

银行排队系统c课程设计

银行排队系统c课程设计

银行排队系统c课程设计一、课程目标知识目标:1. 学生能理解银行排队系统的基本概念,掌握其工作原理和关键功能。

2. 学生能运用C语言实现银行排队系统的基本功能,包括顾客入队、出队、查询排队人数等。

3. 学生了解并掌握结构体、链表等C语言知识点在银行排队系统中的应用。

技能目标:1. 学生能够运用所学知识,独立设计并编写银行排队系统的C语言程序。

2. 学生通过课程学习,提高编程能力,培养解决问题的策略和技巧。

3. 学生能够运用调试工具,对银行排队系统程序进行调试和优化。

情感态度价值观目标:1. 学生在课程学习过程中,培养对编程的兴趣和热情,形成积极的学习态度。

2. 学生通过小组合作完成课程设计,增强团队协作意识和沟通能力。

3. 学生通过解决实际问题,体验编程带来的成就感,培养自信心和创新能力。

课程性质:本课程设计为实践性课程,强调理论联系实际,培养学生动手能力和编程思维。

学生特点:学生已具备C语言基础知识,具有一定的编程能力,但对复杂问题的解决策略尚需引导。

教学要求:教师需引导学生运用所学知识解决实际问题,关注学生在课程学习中的个体差异,提高学生的编程能力和综合素质。

在教学过程中,将课程目标分解为具体的学习成果,便于后续教学设计和评估。

二、教学内容1. 理论知识:- 银行排队系统基本原理及流程- C语言结构体和链表相关知识- 函数调用、指针运用及模块化编程2. 实践操作:- 编写顾客入队、出队等基本功能模块- 设计链表数据结构,实现排队系统的数据存储和操作- 编程实现银行排队系统主程序,整合各功能模块3. 教学大纲:- 第一周:银行排队系统基本原理学习,回顾C语言结构体和链表知识- 第二周:编写顾客入队、出队等基本功能模块,学习模块化编程方法- 第三周:设计链表数据结构,实现数据存储和操作,编写系统主程序- 第四周:调试、优化银行排队系统程序,进行课程总结和评价4. 教材章节:- 《C语言程序设计》第十章:结构体与共用体- 《C语言程序设计》第十二章:链表- 《C语言程序设计》第八章:函数与模块化编程教学内容确保与课程目标紧密结合,注重理论与实践相结合,培养学生的动手能力和编程思维。

C#__银行叫号系统课程设计

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、程序能记录客户到达银行的顺序。

当一位客户取票时,能提示该客户前面有几位客户等待。

3、当为客户服务时,提示客户要到哪个窗口。

4、优先为VIP客户服务,服务完VIP客户才为普通客户服务。

当有多位VIP客户时,按照他们的取票顺序进行服务。

5、提供每一位客户的等待时间和服务时间。

除了按要求完成了老师的要求外,我还增加加了一些其他功能。

程序源代码有详细的注释(不敢确定没有错误哦,大家参考一下),所以就做详细介绍了,大家自己看吧。

【源代码】:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<time.h>#include<windows.h>//可调用beep()函数,发声#define minqueuesize(5)//定义队列的最小容量#define allwin(5)//宏定义窗口数目前是5#define n(100)//宏定义队列容量目前为100#define t(100)//指定time_t类型数组的大小如果取票人数超过100程序就会出错暂时没找到解决办法/****************************************/struct queuerecord;typedef struct queuerecord*queue;//宏定义用queue定义的变量是?typedef int elementtype;typedef char idtype;//定义客户卡号的数据类型采用字符型/***************************************/queue createqueue(int maxelements);//函数声明int isempty(queue q);int isfull(queue q);void makeempty(queue q);void enqueue(queue q);void hugemenu();//getvip()需调用此函数所以在这里声明一下不容易出错void servicelogin();//密码登陆客服系统void service();//无密码登陆客服系统void call();//客服呼叫客户客服要输入值班窗口号void callfree(int mywin);//窗口为空闲时呼叫客户客服不用再输入值班窗口号elementtype dequeue(queue q);/****************************************/int num=0;//客户编号变量全局变量queue vip,nor;//定义2个队列一个存普通客户,一个存vip客户int win[allwin+1]={0};//用数组下标表示窗口号,元素值表示窗口状态,值为0表示空闲,值1表示忙碌。

银行排号系统完整C++代码

银行排号系统完整C++代码

#include <iostream>#include <queue>#include <ctime>#include <cmath>using namespace std;class user{public:int id;int iswait;int arrivetime;int servetime;void getserve(){iswait = 0;}user(int d=0,int s=1,char ty=NULL) {id=d;iswait=s;type=ty;servetime=4;}char type;};class nuser:public user{public:nuser(int d=0,int s=1,char ty='n'):user(d,s,ty){}};class vuser:public user{public:vuser(int d=0,int s=1,char ty='v'):user(d,s,ty){}};class ouser:public user{public:ouser(int d=0,int s=1,char ty='o'):user(d,s,ty){}};class bankwindow{public:bool isbuy;int id;user client;char type;bankwindow(int d=0,bool is=1,char ty=NULL ):client(0,1,NULL) {id=d;isbuy =is;type=ty;}void handleuser(){isbuy=0;}};class nwindow:public bankwindow{public:nwindow(int d=0,bool is=0,char ty='n'):bankwindow(d,is,ty){} };class vwindow:public bankwindow{public:vwindow(int d=0,bool is=0,char ty='v'):bankwindow(d,is,ty){} };class owindow:public bankwindow{public:owindow(int d=0,bool is=0,char ty='o'):bankwindow(d,is,ty){} };class sim{public:queue<nuser> nuqueue;queue<vuser> vuqueue;queue<ouser> ouqueue;nwindow nw[3];vwindow vw;owindow ow;static int j;static int m;static int g;void userenter();void simuserenter();void calluser();void simu();void handle(){for(int i=0;i<3;i++) nw[i].handleuser(); ow.handleuser();vw.handleuser();}};int sim::j=1;int sim::m=1;int sim::g=1;void sim::simuserenter() {nuser *n;vuser *v;ouser *o;for(int i=0;i<5;i++) {n=new nuser;n->id=j;j++;nuqueue.push(*n); }v=new vuser;v->id=g;g++;vuqueue.push(*v);o=new ouser;o->id=m;m++;ouqueue.push(*o);}void sim::calluser(){int i;for(i=0;i<3;i++){if(!nuqueue.empty()&&nw[i].isbuy==0){nw[i].isbuy=1;nw[i].type=nuqueue.front().type;nw[i].id=nuqueue.front().id;nuqueue.pop();}}if(!vuqueue.empty()&&vw.isbuy==0){vw.isbuy=1;vw.type=vuqueue.front().type;vw.id=vuqueue.front().id;vuqueue.pop();}else if(vuqueue.empty()&&vw.isbuy==0&&!nuqueue.empty()) {vw.isbuy=1;vw.type=nuqueue.front().type;vw.id=nuqueue.front().id;nuqueue.pop();}if(!ouqueue.empty()&&ow.isbuy==0){ow.isbuy=1;ow.type=ouqueue.front().type;ow.id=ouqueue.front().id;ouqueue.pop();}else if(ouqueue.empty()&&ow.isbuy==0&&!nuqueue.empty()){ow.isbuy=1;ow.type=nuqueue.front().type;ow.id=nuqueue.front().id;nuqueue.pop();}}void sim::userenter(){int i;for(i=0;i<3;i++){if(nw[i].isbuy==1)cout << "普通" << i+1 <<"窗口正在服务"<<nw[i].type<<nw[i].id<<"顾客!\n"; elsecout << "普通" << i+1 <<"窗口空闲!!\n";}if(vw.isbuy==1)cout << "VIP窗口正在服务"<<vw.type<< vw.id<<"顾客!\n";elsecout << "VIP窗口空闲!!\n";if(ow.isbuy==1)cout << "对公窗口正在服务"<<ow.type<<ow.id<<"顾客!\n";elsecout << "对公窗口空闲!!\n";if(!nuqueue.empty())cout<<"普通顾客还有 "<<nuqueue.size()<<" 人在等候!"<<endl; elsecout<<"普通顾客已经无人等待!"<<endl;if(!vuqueue.empty())cout<<"VIP顾客还有"<<vuqueue.size()<<" 人在等候!"<<endl; elsecout<<"VIP顾客已经无人等待!"<<endl;if(!ouqueue.empty())cout<<"对公顾客还有 "<<ouqueue.size()<<" 人在等候!"<<endl; elsecout<<"对公顾客已经已经无人等待!"<<endl;}void sim::simu(){long t1,t2;simuserenter();t1=time(0);t2=time(0);while(1){cout<<endl<<"营业开始"<<endl; calluser();userenter();while(fabs(t2-t1-2)>10e-6){t2=time(0);}cout<<endl<<"第二秒"<<endl; simuserenter();calluser();userenter();while(fabs(t2-t1-4)>10e-6){t2=time(0);}cout<<endl<<"第四秒"<<endl; handle();calluser();userenter();while(fabs(t2-t1-6)>10e-6){t2=time(0);}cout<<endl<<"第六秒"<<endl; simuserenter();userenter();while(fabs(t2-t1-8)>10e-6){t2=time(0);}cout<<endl<<"第八秒"<<endl; handle();calluser();userenter();while(fabs(t2-t1-12)>10e-6) {t2=time(0);}cout<<endl<<"营业结束"<<endl; handle();calluser();userenter();break;}}int main(){sim s;s.simu();return 0;}(注:可编辑下载,若有不当之处,请指正,谢谢!)请预览后下载!。

银行排队叫号系统C++

银行排队叫号系统C++

#include <iostream>#include <queue>#include <stdlib.h>#include <stdio.h>#include <time.h>#include <ctime>#include "windows.h"using namespace std;int AverageTime;//平均时间void DisplayWindows(int presenttime,int seringtime, int unittime){cout<<"************模拟银行叫号系统*************"<<endl;cout<<"***********银行服务时间0--"<<seringtime<<"************"<<endl;cout<<"**该叫号系统每隔"<<unittime<<"单位时间显示窗口信息****"<<endl;cout<<"当前时间为"<<presenttime<<""<<endl;}class Customer/*顾客信息*/{public:Customer(){SerTime=0;enterTime=0;startTime=0;cID=0;endTime=0;}void Reset(){SerTime=0;enterTime=0;startTime=0;cID=0;endTime=0;}Customer(const Customer& anthercustomer)//复制构造函数{enterTime=anthercustomer.enterTime;startTime=anthercustomer.startTime;servDurance=anthercustomer.servDurance;SerTime=anthercustomer.SerTime;cID=anthercustomer.cID;endTime=anthercustomer.endTime; }void SetSevTime(int serT){SerTime=serT;}int GetID(){return cID;}int GetEndTime(){return endTime;}int GetStartTime(){return startTime;}int GetSerDurance()//顾客等待时间{return (startTime-enterTime);}int GetSerTime(){return SerTime;}void SetEnterTime(int enterT){enterTime=enterT;}void SetEndTime(int endT){endTime=endT;}void SetID(int ID){cID=ID;}void SetSartTime(int startT){startTime=startT;}int enterTime,startTime,SerTime,servDurance,cID,endTime;};class Bank{public:void ResetBank(){while(!servingcustomer.empty())servingcustomer.pop();while(!waitingcustomer.empty())waitingcustomer.pop();}bool Assign(Customer customer)//判断服务窗口有没有完成服务{if(customer.GetEndTime()-customer.GetStartTime()==customer.GetSerTime())return true;elsereturn false;}void DisplayWaitingTime(queue<Customer> quecus){AverageTime=0;cout<<"顾客及等待时间:"<<endl;while(!quecus.empty()){cout<<"顾客"<<quecus.front().GetID()<<": "<<quecus.front().GetSerDurance()<<" ";AverageTime+=quecus.front().GetSerDurance();quecus.pop();}cout<<endl;}queue<Customer> GetCustomerQueue(queue<Customer> queuec){queue<Customer> temp;while(!queuec.empty()){temp.push(queuec.front());queuec.pop();}return temp;queue<Customer> servingcustomer;queue<Customer> waitingcustomer;};int main(){Bank Bank1;Bank1.ResetBank();queue<Customer> CustomerTrack;queue<Customer> CustomerTrack2;Customer ser1,ser2,ser3,ser4,ser5;int num[5]={0};srand((unsigned) time(0));//播种子const int TimeSlot=100;//假设服务时间段为0-100const int UnitTime=10;//单位时间为10const int ServTime=7;//服务时间为1-7const int UnitTimePeo=10;//单位时间进来的人数为0-9const int StopEnterTime=80;//为了保证所有顾客能完成服务,顾客进入的时间为0-80 int PresentTime=0;//初始化当前时间为0int PerTime=5;//每隔5秒显示一次窗口信息int NumberOfCustomer=0;int TimeOfServing=0;int IDtrack=0;while(PresentTime<TimeSlot){Customer tempCustomer;NumberOfCustomer=rand()%UnitTimePeo;for(int j=0; j<NumberOfCustomer;j++){tempCustomer.SetID(++IDtrack);TimeOfServing=1+rand()%ServTime;tempCustomer.SetSevTime(TimeOfServing);tempCustomer.SetEnterTime(PresentTime);Bank1.waitingcustomer.push(tempCustomer);}int nnn=0;for(int t=0;t<UnitTime+nnn;t++){if(Bank1.Assign(ser1))//窗口1完成{if(ser1.GetID()!=0)CustomerTrack.push(ser1);ser1.Reset();if(!Bank1.waitingcustomer.empty()){ser1=Bank1.waitingcustomer.front();ser1.SetSartTime(PresentTime);ser1.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(ser1);num[0]++;}}else{ser1.SetEndTime(PresentTime);}if(Bank1.Assign(ser2))//窗口2完成{if(ser2.GetID()!=0)CustomerTrack.push(ser2);ser2.Reset();if(!Bank1.waitingcustomer.empty()){ser2=Bank1.waitingcustomer.front();ser2.SetSartTime(PresentTime);ser2.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(ser2);num[1]++;}}else{ser2.SetEndTime(PresentTime);}if(Bank1.Assign(ser3))//窗口3完成{if(ser3.GetID()!=0)CustomerTrack.push(ser3);ser3.Reset();if(!Bank1.waitingcustomer.empty()){ser3=Bank1.waitingcustomer.front();ser3.SetSartTime(PresentTime);ser3.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(ser3);num[2]++;}}else{ser3.SetEndTime(PresentTime);}if(Bank1.Assign(ser4))//窗口4完成{if(ser4.GetID()!=0)CustomerTrack.push(ser4);ser4.Reset();if(!Bank1.waitingcustomer.empty()){ser4=Bank1.waitingcustomer.front();ser4.SetSartTime(PresentTime);ser4.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(ser4);num[3]++;}}else{ser4.SetEndTime(PresentTime);}if(Bank1.Assign(ser5))//窗口5完成{if(ser5.GetID()!=0)CustomerTrack.push(ser5);ser5.Reset();if(!Bank1.waitingcustomer.empty()){ser5=Bank1.waitingcustomer.front();ser5.SetSartTime(PresentTime);ser5.SetEndTime(PresentTime);Bank1.waitingcustomer.pop();Bank1.servingcustomer.push(ser5);num[4]++;}}else{ser5.SetEndTime(PresentTime);}if(PresentTime%PerTime==0){CustomerTrack2=Bank1.GetCustomerQueue(Bank1.servingcustomer);system("cls");DisplayWindows(PresentTime,TimeSlot,PerTime);/*显示窗口1-5的服务ID*/cout<<endl;cout<<"**当前时间窗口服务的顾客的ID,0为没有顾客**"<<endl;cout<<"窗口1的ID:"<<ser1.GetID()<<" ";cout<<"窗口2的ID:"<<ser2.GetID()<<" ";cout<<"窗口3的ID:"<<ser3.GetID()<<" ";cout<<"窗口4的ID:"<<ser4.GetID()<<" ";cout<<"窗口5的ID:"<<ser5.GetID()<<endl;/*显示正在等待的顾客的数量*/cout<<"正在等待的顾客的数量:"<<Bank1.waitingcustomer.size()<<endl;cout<<endl;Bank1.DisplayWaitingTime(CustomerTrack2);Sleep(2000);}PresentTime++;if(PresentTime==80)nnn=20;}}int TotalNum=0;for(int rr=0;rr<5;rr++){cout<<"窗口"<<rr+1<<"服务顾客数量:"<<num[rr]<<endl;TotalNum+=num[rr];}cout<<"顾客平均等待时间为:"<<static_cast<double>(AverageTime)/static_cast<double>(TotalNum)<<endl;system("pause");return 0;}。

c排队叫号系统课程设计

c排队叫号系统课程设计

c 排队叫号系统课程设计一、课程目标知识目标:1. 学生能理解排队叫号系统的基本原理和流程。

2. 学生能掌握利用编程实现排队叫号系统的关键步骤。

3. 学生了解并掌握队列数据结构在排队叫号系统中的应用。

技能目标:1. 学生能运用所学知识设计和编写简单的排队叫号系统程序。

2. 学生能通过实际操作,分析并解决排队叫号系统中出现的问题。

3. 学生能运用团队协作、沟通与表达技巧,完成项目任务。

情感态度价值观目标:1. 学生培养对计算机科学的兴趣和热情,激发学习编程的积极性。

2. 学生通过项目实践,认识到编程在解决实际问题中的价值,增强自信心。

3. 学生在团队协作中学会尊重他人、关心同伴,培养良好的团队精神和沟通能力。

本课程针对高年级学生,结合教材内容,注重理论与实践相结合,培养学生运用编程知识解决实际问题的能力。

课程设计充分考虑学生的认知水平、学习兴趣和个性特点,旨在提高学生的编程技能、团队协作能力和创新思维。

通过本课程的学习,使学生能够明确学习目标,达成具体的学习成果。

二、教学内容1. 排队叫号系统基本原理:介绍排队叫号系统的概念、作用和基本组成部分,引导学生理解其实际应用场景。

2. 队列数据结构:讲解队列的基本概念、操作方法,以及队列在排队叫号系统中的应用。

3. 编程实现排队叫号系统:结合教材相关章节,教授如何使用编程语言(如Python)设计和实现排队叫号系统。

- 系统设计:分析系统需求,设计系统功能模块。

- 编程实践:编写代码实现排队、叫号、查询等功能。

4. 排队叫号系统优化:探讨如何提高系统效率,降低等待时间,如优先级队列、多队列处理等策略。

5. 项目实践与展示:分组进行项目实践,每组完成一个排队叫号系统的设计和实现,并进行展示和交流。

教学内容根据课程目标和教材章节进行合理安排,注重科学性和系统性。

教学进度分为五个阶段,每个阶段对应具体的教学内容,确保学生能够逐步掌握排队叫号系统的设计与实现。

通过项目实践,培养学生将理论知识应用于实际问题的能力。

银行排队系统c课程设计

银行排队系统c课程设计

银行排队系统c课程设计一、教学目标本课程的目标是让学生了解和掌握银行排队系统的基本原理和实现方法。

知识目标要求学生掌握银行排队系统的相关概念、原理和算法;技能目标要求学生能够使用编程语言实现简单的银行排队系统;情感态度价值观目标要求学生认识到银行排队系统在实际生活中的重要性,培养学生的创新意识和实践能力。

二、教学内容本课程的教学内容主要包括银行排队系统的基本概念、原理和实现方法。

具体包括以下几个方面:1.银行排队系统的基本概念:介绍银行排队系统的定义、功能和应用场景。

2.银行排队系统的原理:讲解银行排队系统的运作机制,包括排队策略、服务策略等。

3.银行排队系统的实现方法:介绍常见的银行排队系统实现方法,如模拟法、遗传算法等。

4.编程实践:通过编程语言实现简单的银行排队系统,让学生加深对银行排队系统的理解。

三、教学方法为了实现课程目标,我们将采用以下教学方法:1.讲授法:讲解银行排队系统的基本概念、原理和实现方法。

2.讨论法:学生进行小组讨论,分享对银行排队系统的理解和思考。

3.案例分析法:分析实际案例,让学生了解银行排队系统在实际生活中的应用。

4.实验法:引导学生进行编程实践,培养学生的动手能力和创新意识。

四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供理论基础。

2.参考书:提供相关参考书籍,丰富学生的知识体系。

3.多媒体资料:制作PPT、视频等多媒体资料,生动展示银行排队系统的相关内容。

4.实验设备:准备计算机等实验设备,保证学生能够进行编程实践。

五、教学评估为了全面、客观地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问和回答问题的情况,评估学生的学习态度和理解程度。

2.作业:布置相关的编程练习和作业,评估学生的知识掌握和应用能力。

3.考试:安排期末考试,测试学生对银行排队系统知识的掌握和运用能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();}。

相关文档
最新文档