基于链队列的银行叫号系统

程序所能达到的功能:

  1. 可视化操作界面。
  2. 客户和工作人员共用同一个虚拟队列,客户取编号后的信息及时更新给工作人员。
  3. VIP客户和普通客户有设立不同窗口
  4. 派号功能:客户可根据自己的情况进行操作领取编号,同时可知道当前有多少人正在排队。
  5. 叫号功能:工作人员通过客户的排队情况进行叫号,在显示器上显示出来。
  6. 以及其他相关的人性化设计辅助功能
#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++的链队列比较容易实现就不放出来了

猜你喜欢

转载自blog.csdn.net/weixin_41676901/article/details/85844614