《C++程序设计》银行管理系统

您所在的位置:网站首页 排队系统代码怎么写的 《C++程序设计》银行管理系统

《C++程序设计》银行管理系统

2024-07-09 10:31| 来源: 网络整理| 查看: 265

莫思身外无穷事

且尽生前有限杯

我们先来看一下项目需求:

【场景】 在日常生活中,我们普遍接触到窗口服务系统,如到银行柜台办理业务、景区现场购买门票等。当需要办理业务的顾客数超过窗口数量时,我们需遵循排队等待原则。 【需求】 请设计并实现一个银行窗口排队管理系统,模拟用户排队、办理业务结束后离队等过程。具体要求如下: 1、窗口配置及状态管理 2、窗口应有编号、业务类型、排队队列、工作人员编号(唯一)等属性; 3、窗口数量无限制; 4、业务类型、窗口配置数据由系统启动时通过配置文件读取; 5、窗口可以动态增加或删除,但存在排队的窗口不能被删除; 6、窗口业务状态支持暂停,暂停时该窗口不再接受顾客排队; 7、暂停的窗口支持业务恢复; 8、窗口配置数据需持久化存储。

关于银行管理系统老铁们最先想到的是什么数据结构呢?--应该就是队列吧(先进先出)

今天我将带领大家一起完成银行管理系统

代码已上传至码云:银行管理系统

银行管理的登入界面

代码可以烂,但是逼格一定要高

就先从做个登入界面开始吧,其实是套用之前 C语言 的

void menu2() { int input = 0, count = 0, i = 0; char mima[20] = "123";//登入的密码 char shuru[20] = { 0 }; system("color F4"); printf("\t\t\t **************************************\n"); printf("\t\t\t | *欢迎光临东方银行* |\n"); printf("\t\t\t | *管理员: 东方* |\n"); printf("\t\t\t ------------------------------------\n"); printf("请输入管理员密码:\n"); while ((count = _getch()) != '\r') { if (count == '\b') { i--; printf("\b \b"); } else { shuru[i++] = count; printf("*"); } } shuru[i++] = '\0'; if (strcmp(mima, shuru) == 0) { printf("\n密码正确,您已进入系统!\n"); } else { printf("\n密码错误,请重新输入!\n"); exit(0); //输入错误,直接退出 } system("pause"); system("cls"); }

如果你的密码不小心输入错误了,就会直接退出系统

基本框架的实现

老铁们可以看到我创建了 6 个文件,应该应该很好理解吧,用户类、窗口类、银行操作类以及队列的模板

我这里就将简单的框架展示出来:

用户类:

//user.h class user { public: string name; //用户编号 int arrive_time; //用户到达时间 bool identity; //顾客身份 int cost_time; //办理业务花费时间 int leave_time; //离开时间 int wait_time; //等待时间 int enter_window; //代表取钱窗口 int evaluate; //用户评价 };

窗口类:

//Window.h class Window { public: int num; //窗口号 int wait_user; //窗口等待人数 };

队列模板: 模板是个好东西 ~ 无脑往里带

//Queue.h template class QueueNode { public: T data; QueueNode* prev; QueueNode* next; }; template class Queue { public: Queue(); ~Queue(); bool empty() const { return _size == 0; } int size() const { return _size; } void push(const T&x); void pop(); T front(); T back(); private: QueueNode* head; QueueNode* tail; int _size; }; template Queue::Queue() { head = new QueueNode ; tail = new QueueNode ; head->prev = NULL; head->next = tail; tail->prev = head; tail->next = NULL; _size = 0; } template Queue::~Queue() { while (_size != 0) { QueueNode* t; t = head->next; head->next = head->next->next; head->next->prev = head; delete t; _size--; } } template void Queue::push(const T& x) { QueueNode* t = new QueueNode; t->data = x; t->prev = tail->prev; t->next = tail; tail->prev->next = t; tail->prev = t; _size++; } template void Queue::pop() { if (_size) { QueueNode* t; t = head->next; head->next = head->next->next; head->next->prev = head; delete t; _size--; } } template T Queue::front() { return head->next->data; } template T Queue::back() { return tail->prev->data; }

接下来就是银行操作类了

//BankCard.h #include #include"user.h" #include"Window.h" #include #include #include #include #include #include using namespace std; class BankCard { public: //初始化 void BankCard_init(); //构造函数 BankCard() { BankCard_init(); } //手册 void handbook(); //查看窗口人数 void show(); //计算离开时间和更新等待时间 void count_time(user& p); //检查队列中是否有离开的人 void check_leave(int time); //进入银行取票 void enter_bank(user& p); //打印表单 void charts(int n); //用户入队列 void manual(); //菜单-选项 void menu(); //新增窗口 void addition(); //删减窗口 void reduction(); //窗口暂停 void suspend(); //存档文件 int archived(); //办理的业务类型 int vbusiness(); };

怎么感觉 C++ 代码的风格跟 C 语言一样,算了,接下来我将讲解银行操作中的功能函数实现:(如果有人说为什么不写析构函数,因为模板那里会自动掉析构)

银行操作类的环境搭建 Queue* window_normal = new Queue[3]; //队列数组用于窗口的增删 static int sum = 3; //静态变量表示存钱窗口数 Queue window_VIP; //取钱队列 Queue leave; //记录每个人离开队列的时间,用于判断顾客是否离开 user Person[1000]; //实例化顾客对象 int time_now; //记录当前时间 int person_num; //记录顾客人数

先说明一下,我们银行系统的时间的移动是根据最后一个进入的客户进行调整的

其他变量我们后面讲到了再细讲其作用

比较函数:用于 sort 作用就是快速筛选出排队人数最少的窗口,来优化我们客户入队列的效率问题

//选择出最佳窗口 bool comp(Window x, Window y) { //若窗口等待人数相同时按窗口号大小排序 if (x.wait_user == y.wait_user) { return x.num < y.num; } //否则按窗口等待人数排序 return x.wait_user < y.wait_user; }

时间转换函数

在我们系统中时间都是转换成分钟进行运算以及比较的,而在打印的时候才需要进行转换

void transform(int num) { cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3