免责声明
以下内容可能引起不适,请18岁以下儿童在大人配同下观看
主要内容:
设计并实现银行取号模拟系统,模拟取号的整个过程,实现取号、排队、服务、及管理等功能。系统能够记录用户及工作人员信息的统计和分析,可以进一步优化银行营业厅的排队问题,提高银行业务办理效率。
基本要求:
(1)首先设计一个含有多个菜单项主控菜单子程序,以链接系统的各项子功能,方便用户使用本系统。
(2)采用链式队列存储银行排队系统中的顾客号信息,用结构数组存放办理银行业务的窗口号信息。
(3)本系统分为一下6个功能模块,分别是:顾客到达,顾客离开,查看业务办理,查看排队情况,系统查询,退出。
关键问题描述
(1)如何将不同优先级的客户放入到对应最优窗口。
(2)如何模拟计算客户的到达,服务,离开的过程。
(3)如何判断当前时间下客户是否已经离开队列。
(4)如何模拟计算客户的等待时间。
(5)如何同一各队列的时间线
拟采用解决问题的方法
(1)建立不同的队列来存储不同优先及的客户,对于优先级相同的客户我们将队列在排人数排序确保客户进入最优队列。
(2)当客户进入时更新当前时间,并建立离开队列,检查客户是否离开,保证各队列的时间线统一。
(3)经验总结,通过大量的实践结合其中的具体情况,进行归纳与分析, 使之系统化、理论化,上升为经验。
各函数申明及作用
(1)bool comp1(user x, user y) //用于将顾客按到达时间排序
(2)bool comp2(Window x, Window y) //用于选择出最佳窗口
(3)void init() //初始化各变量
(4)void transform(int num) //时间转化
(5)void show() //查看当前各窗口人数
(6)void count_time(user& p) //计算离开时间和更新等待时间
(7)void check_leave(int time) //检查队列中是否有离开的人
(8)void enter_bank(user& p) //进入银行取票
(9)void charts(int n) //打印表单
(10)void automatic() //自动模式
(11)void manual() //手动模式
(12)int manual_interface() //手动模式下的界面
(13)void welcome() //欢迎界面
(14)void strat_interface()//开始动画
(15)main()//主函数
源码
strat_interface.h(开机动画可不要)
#pragma once
#include<iostream>
#include <windows.h>
#include <deque>
#include <vector>
void SetWindowSize(int cols, int lines){
//设置窗口大小
system("title 银行");//设置窗口标题
char cmd[30];
sprintf_s(cmd, "mode con cols=%d lines=%d", cols * 2, lines);//一个图形■占两个字符,故宽度乘以2
system(cmd);//system(mode con cols=88 lines=88)设置窗口宽度和高度
}
void SetCursorPosition(const int x, const int y){
//设置光标位置
COORD position;
position.X = x * 2;
position.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), position);
}
void SetColor(int colorID){
//设置文本颜色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), colorID);
}
void SetBackColor(){
//设置文本背景色
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_BLUE |
BACKGROUND_BLUE |
BACKGROUND_GREEN |
BACKGROUND_RED);
}
class Point{
public:
Point() {
}
Point(const int x, const int y) : x(x), y(y) {
}
void Print();
void PrintCircular();
void Clear();
void ChangePosition(const int x, const int y);
bool operator== (const Point& point) {
return (point.x == this->x) && (point.y == this->y); }
int GetX() {
return this->x; }
int GetY() {
return this->y; }
private:
int x, y;
};
void Point::Print(){
//输出方块
SetCursorPosition(x, y);
std::cout << "■";
}
void Point::PrintCircular(){
//输出圆形
SetCursorPosition(x, y);
std::cout << "●";
}
void Point::Clear(){
//清除输出
SetCursorPosition(x, y);
std::cout << " ";
}
void Point::ChangePosition(const int x, const int y){
//改变坐标
this->x = x;
this->y = y;
}
class StartInterface{
public:
StartInterface() : speed(35) {
startsnake.emplace_back(Point(0, 14));//Éß
startsnake.emplace_back(Point(1, 14));
startsnake.emplace_back(Point(2, 15));
startsnake.emplace_back(Point(3, 16));
startsnake.emplace_back(Point(4, 17));
startsnake.emplace_back(Point(5, 18));
startsnake.emplace_back(Point(6, 17));
startsnake.emplace_back(Point(7, 16));
startsnake.emplace_back(Point(8, 15));
startsnake.emplace_back(Point(9, 14));
textsnake.emplace_back(Point(-22, 14));//B
textsnake.emplace_back(Point(-22, 15));
textsnake.emplace_back(Point(-22, 16));
textsnake.emplace_back(Point(-22, 17));
textsnake.emplace_back(Point(-22, 18));
textsnake.emplace_back(Point(-21, 14));
textsnake.emplace_back(Point(-21, 16));
textsnake.emplace_back(Point(-21, 18));
textsnake.emplace_back(Point(-20, 14));
textsnake.emplace_back(Point(-20, 16));
textsnake.emplace_back(Point(-20, 18));
textsnake.emplace_back(Point(-19, 15));
textsnake.emplace_back(Point(-19, 16));
textsnake.emplace_back(Point(-19, 17));
textsnake.emplace_back(