程序所能达到的功能:
- 可视化操作界面。
- 客户和工作人员共用同一个虚拟队列,客户取编号后的信息及时更新给工作人员。
- VIP客户和普通客户有设立不同窗口
- 派号功能:客户可根据自己的情况进行操作领取编号,同时可知道当前有多少人正在排队。
- 叫号功能:工作人员通过客户的排队情况进行叫号,在显示器上显示出来。
- 以及其他相关的人性化设计辅助功能
#define _CRT_SECURE_NO_WARNINGS
/* Bank System */
#include<ctime>
#include "queue.h"
#include<windows.h>
#define VIP 0
#define COMMON 1
#define WORKER 1
#define CLIENT 0
time_t now;/*系统时间*/
//#include "queue_queue.h"
//#define Line_Mode
LinkQueue *common, *vip;//对象
/* printf_func */
void printf_func(int flag)
{
system("cls");
if (flag) {
printf(" *╭╮ ╭╮ ╭╮ \n");
printf(" ││ ││ │└ ╮ \n ");
printf(" ╭ ┴┴ ─ ┴┴Ⅲ ╮ ~└─ ╯ \n");
printf(" | ﹋ ﹋ | ------------------------------ \n");
printf(" | ∩ ∩ | ○ ☆ 请根据具体情况进行选择哦!☆ \n");
printf(" | ▽ | O ------------------------------- \n");
printf(" ╰ ─ m∞m─ ╯ \n");
printf("\n\n -------------------------------------------------------\n ");
printf(" | 中文 English | \n");
printf(" |1.呼叫vip用户的编号------One.Back call VIP number | \n");//呼叫的号码
printf(" |2.呼叫普通用户的编号-----Two.Back call COMMON number | \n");//呼叫的号码
printf(" |3.结束-------------------Three.Exit | \n");//通道
printf(" ------------------------------------------------------ \n");
printf("\n 请选择[1-3]--------------Please Select[one-three]:");//选择1-3窗口
}
else {
printf(" *╭╮ ╭╮ ╭╮ \n");
printf(" ││ ││ │└ ╮ \n ");
printf(" ╭ ┴┴ ─ ┴┴Ⅲ ╮ ~└─ ╯ \n");
printf(" | ﹋ ﹋ | ------------------------------ \n");
printf(" | ∩ ∩ | ○ ☆ 请根据你的情况进行选择哦!☆ \n");
printf(" | ▽ | O ------------------------------- \n");
printf(" ╰ ─ m∞m─ ╯ \n");
printf("\n\n --------------------------------------------------\n");
printf(" | 中文 English |\n");
printf(" | 1.vip用户获取号----One.vip user get number | \n");
printf(" | 2.普通用户获取号---Two.common user get number | \n");
printf(" | 3.结束------------Three.Exit | \n");//结束的通道
printf(" -------------------------------------------------- \n");
printf("\n 请选择[1-3]:--------Please Select[one-three]:");//选择1-3窗口
}
}
/*
select_num
*/
int select_num(int flag)
{
int num = 0;
while (num < 1 || num > 3)
{
printf_func(flag);
scanf("%d", &num);
}
return num;
}
/*
* Bank System Init 初始化
*/
int Bank_Sys_Init(void)
{
vip = new LinkQueue;
common = new LinkQueue;
InitQueue(*vip);
InitQueue(*common);
return 0;
}
/*
Bank System Quit退出程序
*/
int Bank_Sys_Term(void)
{
DestoryQueue(*vip);
DestoryQueue(*common);
return 0;
}
/*
Bank Get One ID
*/
int Bank_Sys_Get_Id(int flag)
{
static int vip_id = 0;
static int common_id = 0;
//Line Mode
if (flag == 0)
{
if (0 == EnQueue(*vip, vip_id))
{
vip_id++;
return vip_id;
}
else
return -1;
}
else
{
if (0 == EnQueue(*common, common_id))
{
common_id++;
return common_id;
}
else
return -1;
}
}
/***************************************************************
* Bank Call One ID
****************************************************************/
int Bank_Sys_Call_Id(int flag)
{
int id, state;
if (!flag) {
state = DeQueue(*vip, id);
}
else {
state = DeQueue(*common, id);
}
if (state == -1)return -1;
return id;
}
/***************************************************************
* Bank Get All Users Number
****************************************************************/
unsigned int Bank_Get_User_Num(int flag)
{
unsigned int num;
if (flag == 0)
num = getLeft(*vip);//获得队列的长度
else
num = getLeft(*common);
return num;
}
//bank--logo
void User_dispaly()
{
printf("\n\n");
printf(" 谢谢您的使用,欢迎下次再来!\n");
printf("-------------------------------< bank--logo >---------------------------------\n\n");
printf(" ``╭╮ ╭╮ ╭╮\n");
printf(" ``││ ││ │└ ╮ \n");
printf(" ╭┴┴———————┴┴╮~└—╯\n");
printf(" │ │\n");
printf(" │ ● ● │ \n");
printf(" │ ○ ○│ \n");
printf(" │ ╰—╯ │ \n");
printf(" │ │ \n");
printf(" ╰—┬o— — —o┬—╯ \n");
printf(" ╭╮努力╭╮ \n");
printf(" ╰┴————┴╯ \n");
printf(" ══════════════════ \n");
printf(" ║ 韶关学院银行 ║ \n");
printf(" ║ 制作:陈玲珑 ║ \n");
}
void Worker_dispaly()
{
printf("\n\n");
printf(" 辛苦您啦,下次再见!\n");
printf("-------------------------------< bank--logo >---------------------------------\n\n");
printf(" ``╭╮ ╭╮ ╭╮\n");
printf(" ``││ ││ │└ ╮ \n");
printf(" ╭┴┴———————┴┴╮~└—╯\n");
printf(" │ │\n");
printf(" │ ● ● │ \n");
printf(" │ ○ ○│ \n");
printf(" │ ╰—╯ │ \n");
printf(" │ │ \n");
printf(" ╰—┬o— — —o┬—╯ \n");
printf(" ╭╮努力╭╮ \n");
printf(" ╰┴————┴╯ \n");
printf(" ══════════════════ \n");
printf(" ║ 韶关学院银行 ║ \n");
printf(" ║ 制作:陈玲珑 ║ \n");
}
void introduce() {
printf("\n 韶关学院银行系统启动中…… \n\n");
Sleep(1000);
system("cls");
printf(" ``╭╮ ╭╮ ╭╮ \n");
printf(" ``││ ││ │└ ╮ ∩------------------------------∩ \n");
printf(" ╭┴┴———————┴┴╮~└—╯ | 您好,请根据您的需求进行操作,| \n");
printf(" │ │ | 小白将会为您服务! | \n");
printf(" │ ● ● │ ○ ∪------------------------------∪ \n");
printf(" │ ○ ○│ ○ \n");
printf(" │ ╰—╯ │ \n");
printf(" │ │ \n");
printf(" ╰—┬o— — —o┬—╯\n");
printf(" ╭╮小白╭╮\n");
printf(" ╰┴————┴╯\n");
}
int login() {
FILE *fp1, *fp2;
int state;
char str1[20], str2[20], str_z[20], str_m[20];
//printf(" now time is %s\n", ctime(&now));
//introduce();
if ((fp1 = fopen("admin.txt", "rb")) == NULL)
{
introduce();
printf("\n 韶关学院银行欢迎您的使用! \n\n");
printf(" -------------------------创建管理员账号----------------------\n");
printf(" | 本系统没有您的工作后,请创建! |\n");
printf(" -------------------------------------------------------------\n");
now = time(NULL);
printf(" Now time is %s\n", ctime(&now));
printf(" -------------------------------------------------------------\n");
printf(" ☆ 请输入管理员账号:");
scanf("%s", str_z);
printf(" ☆ 请输入密码: ");
scanf("%s", str_m);
printf(" -------------------------------------------------------------\n");
fp2 = fopen("admin.txt", "wb");
fprintf(fp2, "%s%c", str_z, '\n');
fprintf(fp2, "%s%c", str_m, ' ');
fclose(fp2);
}
fp1 = fopen("admin.txt", "rb");
fscanf(fp1, "%s", str1);
fscanf(fp1, "%s", str2);
fclose(fp1);
while (1)
{
system("cls");
introduce();
printf("\n 韶关学院银行欢迎您的使用! \n\n");
printf(" ----------------------------使用方式-------------------------\n");
printf(" | |\n");
printf(" | 1.工作人员模式 0.用户模式 |\n");
printf(" | One.Worker mode zero.user mode |\n");
printf(" -------------------------------------------------------------\n");
now = time(NULL);
printf(" Now time is %s\n", ctime(&now));
printf(" -------------------------------------------------------------\n");
printf(" * 请你选择(0-1):");
scanf("%d", &state);
printf(" -------------------------------------------------------------\n");
if (state == 0)
return 0;
else if (state == 1)
{
system("cls");
printf(" *╭╮ ╭╮ ╭╮ \n");
printf(" ││ ││ │└ ╮ \n ");
printf(" ╭ ┴┴ ─ ┴┴Ⅲ ╮ ~└─ ╯ \n");
printf(" | ﹋ ﹋ | ------------------------------------- \n");
printf(" | ∩ ∩ | ○ ☆用您的专属工号进行登录才能工作哦!☆ \n");
printf(" | ▽ | O ------------------------------------- \n");
printf(" ╰ ─ m∞m─ ╯ \n");
//////////////////////////////////////////////////////////////////////////////////////////
printf("\n ------------------------------------------------------------ \n");
printf(" → 请输入账号:");
scanf("%s", str_z);
printf(" → 请输入密码:");
scanf("%s", str_m);
printf(" -------------------------------------------------------------\n");
if (strcmp(str1, str_z) == 0 && strcmp(str2, str_m) == 0)
{
getchar();
getchar();
return 1;
}
else
{
printf(" -------------------------------------------------------------\n");
printf(" | 账号或密码错误!!! |\n");
printf(" -------------------------------------------------------------\n");
system("PAUSE");
system("cls");
}
}
else
{
printf(" -------------------------------------------------------------\n");
printf(" | 输入不合法!!! |\a \n");
printf(" -------------------------------------------------------------\n");
system("PAUSE");
system("cls");
}
/*
printf(" ."". ."". 您 \n");
printf(" | | / / 已 \n");
printf(" | | / / 成 \n");
printf(" | | / / 功 \n");
printf(" | |/ ;-._ 取 \n");
printf(" } ` _/ / ; 编 \n");
printf(" | /` ) / / 号 \n");
printf(" | / / _/\_/\ , \n");
printf(" | / / \ 请 \n");
printf(" ( ' \ '- | 耐 \n");
printf(" \ ` . / 心 \n");
printf(" | | 等 \n");
printf(" | | 候 \n");
*/
}
}
//选择VIP窗口
int SelectVIPWindow() {
printf("\n请输入你所负责的窗口号:\n");
printf("请选择[1-2]:");//选择1-2窗口
int num;
cin >> num;
while (num < 1 || num>2) {
printf("\n错误!!\n");
printf("请再次输入你所负责的窗口号:\n");
printf("请选择[1-2]:");//选择1-2窗口
cin >> num;
}
return num;
}
int SelectCommonWindow() {
printf("\n请输入你所负责的窗口号:\n");
printf("请选择[3-10]:");//选择1-4窗口
int num;
cin >> num;
while (num < 3 || num>10) {
printf("\n错误!!\n");
printf("请再次输入你所负责的窗口号:\n");
printf("请选择 [3-10]:");//选择1-4窗口
cin >> num;
}
return num;
}
/***************************************************************
* main
****************************************************************/
int main(int argc, char**argv)
{
int id, Vip;//id-用户排队号码,vip-会员排队号码
unsigned int num;//前面有num个人在排队
int role;
role = login();
system("cls");
Bank_Sys_Init();
//dispaly();
if (role == WORKER) {//工作人员叫号
while (1)
{
switch (select_num(WORKER))
{
case 1:
int VIPWindowNumber;//VIP窗口号
VIPWindowNumber = SelectVIPWindow();
Bank_Sys_Init();
load(*vip, VIP);
num = Bank_Get_User_Num(VIP);
id = Bank_Sys_Call_Id(VIP);
write(*vip, VIP);
Bank_Sys_Term();
if (id == -1)
printf("\n没有人在排队---there are no people in wait\n\n");
else
{
printf("\n您应该叫VIP %d 来窗口号 %d ------you should call VIP %d,and go to window %d\n", id + 1, VIPWindowNumber, id + 1, VIPWindowNumber);
printf("现在有 %d 个人在排队 ------there are %d people are in wait\n\n", num,num);
system("pause");
system("cls");
printf("\n\n\n-----------------------------------------------------------------------------------------------------------\n");
printf("/n请编号为%d的VIP客户到%d窗口办理业务!-------Customers numbered %d should go to %d window for business\n", id + 1, VIPWindowNumber, id + 1, VIPWindowNumber);
printf("---------------------------------------------------------------------------------------------------------------\n");
}
break;
case 2:
int CommonWindowNumber;
CommonWindowNumber = SelectCommonWindow();
Bank_Sys_Init();
load(*common, COMMON);
num = Bank_Get_User_Num(COMMON);
id = Bank_Sys_Call_Id(COMMON);
write(*common, COMMON);
Bank_Sys_Term();
if (id == -1)
printf("\n没有人在排队-----there are no people in wait\n\n");
else
{
printf("\n您应该叫普通用户 %d 来窗口 %d ----you should call COMMON %d,and go to window %d\n", id + 1, CommonWindowNumber, id + 1, CommonWindowNumber);
printf("现在有 %d 个人在排队-------there are %d people are in wait\n\n", num,num);
system("pause");
//-------------------------------------------------------------------------------
system("cls");
printf("\n\n\n");
printf("-----------------------------------------------------------------------------------------------------------\n");
printf("/n请编号为%d的VIP客户到%d窗口办理业务!-------Customers numbered %d should go to %d window for business\n", id + 1, CommonWindowNumber, id + 1, CommonWindowNumber);
printf("---------------------------------------------------------------------------------------------------------------\n");
}
break;
case 3:
system("cls");
Worker_dispaly();
system("pause");
Bank_Sys_Term();
remove("VIP.txt");
remove("COMMON.txt");
return 0;
}
system("pause");
}
}
else {//用户
while (1)
{
switch (select_num(CLIENT))
{
case 1:
{
Bank_Sys_Init();
load(*vip, VIP);
id = Bank_Sys_Get_Id(VIP);
num = Bank_Get_User_Num(VIP);
write(*vip, VIP);
Bank_Sys_Term();
if (id == -1)
printf("\n编号已经爆棚了,您需要等几分钟!-------the number is too large, you have to wait several minutes !\n");
else
{
system("cls");
printf("\n\n您的编号为.%d ----you get the vip %d\n", id, id);
printf("现在有 %d 个人在您前面排队--there are %d people in front of you\n\n", num - 1, num - 1);
//------------------------------------------------------------------------------------------
printf(" .''. .''. 您 \n");
printf(" | | / / 已 \n");
printf(" | | / / 成 \n");
printf(" | | / / 功 \n");
printf(" | |/ ;-._ 取 \n");
printf(" } ` _/ / ; 编 \n");
printf(" | /` ) / / 号 \n");
printf(" | / /_/\\_/\\ , \n");
printf(" | / / \\ 请 \n");
printf(" ( '\\ '- | 耐 \n");
printf(" \\ ` . / 心 \n");
printf(" | | 等 \n");
printf(" | | 候 \n");
}
break;
}
case 2:
{
Bank_Sys_Init();
load(*common, COMMON);
id = Bank_Sys_Get_Id(COMMON);
num = Bank_Get_User_Num(COMMON);
write(*common, COMMON);
Bank_Sys_Term();
if (id == -1)
printf("\n编号已经爆棚了,你需要等几分钟------the number is too large, you have to wait several minutes !\n\n");
else
{
system("cls");
printf("\n\n您的编号为%d -----you get the common %d\n", id, id);
printf("现在有 %d 个人在您前面排队\n\n", num - 1, num - 1);
//--------------------------------------------------------------------
printf(" .''. .''. 您 \n");
printf(" | | / / 已 \n");
printf(" | | / / 成 \n");
printf(" | | / / 功 \n");
printf(" | |/ ;-._ 取 \n");
printf(" } ` _/ / ; 编 \n");
printf(" | /` ) / / 号 \n");
printf(" | / /_/\\_/\\ , \n");
printf(" | / / \\ 请 \n");
printf(" ( '\\ '- | 耐 \n");
printf(" \\ ` . / 心 \n");
printf(" | | 等 \n");
printf(" | | 候 \n");
}
break;
}
case 3:
{
system("cls");
User_dispaly();
system("pause");
Bank_Sys_Term();
remove("VIP.txt");
remove("COMMON.txt");
return 0;
}
}
system("pause");
}
}
return 0;
}
include"queue.h"是自己写好的头文件,c++的链队列比较容易实现就不放出来了