银行管理系统

cpp 版

职员管理系统

  1. 查询职员信息

    • 按工号或姓名查找职员的详细信息,包括工号、姓名、性别、年龄和密码。
  2. 入职

    • 添加新职员到系统,录入信息包括工号、姓名、性别、年龄和密码。
    • 检查工号是否已存在,防止重复入职。
  3. 离职

    • 根据工号和密码删除指定职员。
    • 验证密码,确保离职操作的安全性。
  4. 修改职员信息

    • 修改指定职员的密码,提高系统安全性。
  5. 显示所有职员信息

    • 展示所有职员的详细信息列表。
  6. 保存职员信息

    • 将职员信息保存至指定文件,以便数据持久化。

客户管理系统

  1. 查询账户信息

    • 通过账号、开户人姓名或开户日期查询客户账户信息。
  2. 开户

    • 为客户创建新账户,录入信息包括账号、姓名、性别、密码、金额、开户日期和开户状态。
    • 检查账号是否已存在,防止重复开户。
  3. 销户

    • 根据账号和密码删除指定账户。
    • 验证密码,确保销户操作的安全性。
  4. 修改账户密码

    • 修改指定账户的密码,提高账户安全性。
  5. 账户排序

    • 提供多种排序方式,包括按账号、姓名、金额或开户日期排序。
  6. 存款

    • 向指定账户添加金额,更新账户余额。
  7. 取款

    • 从指定账户扣除金额,需检查账户余额是否充足。
  8. 转账

    • 在两个账户之间转移金额,包括同银行和跨银行转账。
    • 计算并扣除转账手续费。
  9. 计算利息

    • 根据存款期限和类型(活期或定期)计算利息。
  10. 保存账户信息

    • 将账户信息保存至指定文件,以便数据持久化。
  11. 显示所有账户信息

    • 展示所有客户的账户详细信息列表。

排队管理系统

  1. VIP放号

    • 为客户放号并进入VIP队列,提升重要客户的服务体验。
  2. Normal放号

    • 为客户放号并进入普通队列。
  3. VIP队首完成服务

    • 完成当前VIP客户的服务,并提示下一号,提高服务效率。
  4. Normal队首完成服务

    • 完成当前普通客户的服务,并提示下一号。
  5. 展示目前得分情况

    • 展示当前服务人员的服务质量得分,包括服务客户数和平均得分。

网点查询系统

  1. 学校网点介绍

    • 提供学校内各银行网点的详细介绍。
  2. 游览网点路线

    • 提供游览银行网点的最佳路线,方便用户访问。
  3. 查询网点间最短路径

    • 使用迪杰斯特拉算法查询两个网点间的最短路径。
  4. 查询网点信息

    • 查询特定网点的详细信息,如位置、服务内容等。
  5. 更改图的信息

    • 对网点间的关系图进行修改,包括增加或删除网点和边。
  6. 查询景点间可行路径

    • 查询两个景点间所有可能的路径。
  7. 打印邻接矩阵

    • 打印网点关系图的邻接矩阵,用于分析和调试。
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm>
#include <string>
#include <fstream>
#include <vector>
#include <windows.h>
#include <queue>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

// 定义客户结构体
struct Banker
{
   
   
	string account_num; // 银行账户
	string name;		// 银行卡持有人姓名
	string sex;			// 银行卡持有人性别
	int password;		// 银行卡密码
	long long money;	// 银行卡金额
	int open_time;		// 开户日期
	string states;		// 开户状态
	string type;		// 客户类型
	Banker *next;
};
// 使用typedef时,这样定义更清晰,先定义结构体,再用typedef取别名
typedef Banker *BankList;

// 定义职员结构体
struct Staff
{
   
   
	string Number; // 工号
	string name;   // 姓名
	string sex;	   // 性别
	int age;	   // 年龄
	int password;  // 密码
	double grade;  // 客户所打的平均分
	int n;		   // 总接待人数
	Staff *next;
};
// 同样先定义结构体,再取别名
typedef Staff *StaffList;

// 叫号系统的号 全局变量
queue<int> normalQue;
queue<int> VIPQue;
int normalNum = 1, VIPNum = 1;
int cnt = 0;

// 定义一个较大的数来表示无穷大,用于初始化图的邻接矩阵中表示无边的情况
const int Infinity = 99999;
// 这里建议使用const修饰,使其成为常量,更符合语义

// 图的顶点结构体
typedef struct Vertex
{
   
   
	int position;			// 顶点编号
	char name[50];			// 顶点名称
	char introduction[200]; // 顶点简介
} Vertex;

// 图的边结构体,用于表示邻接矩阵中的元素,即边的权值等信息
typedef struct Arc
{
   
   
	int adj; // 边的权值,这里假设是表示距离等含义的数值
} ArcType;

// 图的数据结构定义
typedef struct MGraph
{
   
   
	int vexnum;			  // 顶点个数
	int arcnum;			  // 边的个数
	Vertex vexs[35];	  // 顶点数组,假设最多有35个顶点,可根据实际情况调整大小
	ArcType arcs[35][35]; // 邻接矩阵,用于存储边的信息,同样假设最多35个顶点
} MGraph;

// 全局变量声明,用于存储路径信息和顶点访问状态
int d[35];
int visited[35];
MGraph campus;
// 函数

void Choice_a_person(); // 选择待操作人员(银行职员/客户)
void Menu1();			// 职员系统主菜单
void InitList1();		// 初始化菜单
void SelectStaff();		// 查询职员信息
void AddStaff();		// 入职
void DeleteStaff();		// 离职
void Revise();			// 修改职员信息
void Readfile1();		// 读入文件
void Save1();			// 保存账户的信息
void Display1();		// 显示所有职员信息
void mytime();			// 时间显示函数

void InitList2();				// 初始化菜单
bool account_num_exist();		// 判断账户是否存在
void SelectAccount();			// 查询账户信息
void Open_an_ccount();			// 开户
void Pin_households();			// 销户
void Modify_account_password(); // 修改账户密码
void Sort_accountInfo();		// 账户排序
void deposit();					// 存款
void withdrawals();				// 取款
void transfer();				// 转账
double cal_year();				// 计算开户时长
void Calculation_interest();	// 利息计算
void Save2();					// 保存账户的信息
void Readfile2();				// 读入文件
void Menu2();					// 客户系统主菜单
void Wait();					// 增强用户交互体验
void Choice_a_file();			// 选择待操作的文件
void Display2();				// 显示所有用户信息

void Menu3();		   // 排队系统菜单
void Menu3_2();		   // 排队系统员工登录界面
void releaseVIP();	   // VIP放号
void releaseNormal();  // Normal放号
void endVIPServe();	   // 结束VIP服务(出队当前 提示下一号)
void endNormalServe(); // 结束Normal服务(出队当前 提示下一号)
void DisplayVIP();	   // 打印VIP队列当前状态
void DisplayNormal();  // 打印Normal队列当前状态
void Grade();		   // 客户为服务打分

void Menu4();			   // 网点系统菜单栏
MGraph initgraph();		   // 对图初始化
int locatevex();		   // 查找景点在图中的序号
void path();			   // 打印路径
int allpath();			   // 打印所有路径
void shortestpath_dij();   // 迪杰斯特拉求最短路径
int creatgragh();		   // 构造图的邻接矩阵
int newgraph();			   // 更新图的信息
int enarc();			   // 增加一条边
int envex();			   // 增加一个点
int delvex();			   // 删除一个点
int delarc();			   // 删除一条边
void printmatrix();		   // 打印邻接矩阵
int changegraph();		   // 图操作的主要调度函数
void shortestpath_floyd(); // Floyd查最短路径
void seeabout();		   // 查询景点信息
void browsecompus();	   // 显示所有顶点信息
void mainwork4();		   // 主要工作函数

// 职员管理系统初始化菜单
void InitList1(StaffList &SL)
{
   
   
	SL = new Staff;
	SL->next = NULL;
}

// 客户管理系统初始化菜单
void InitList2(BankList &BL)
{
   
   
	BL = new Banker;
	BL->next = NULL;
}

// 判断账户是否存在
bool account_num_exist(BankList &BL, string account_num)
{
   
   
	Banker *p = BL->next;
	while (p)
	{
   
   
		if (p->account_num == account_num)
			return true;
		p = p->next;
	}
	return false;
}
// 判断员工是否存在
bool staff_num_exist(StaffList &SL, string staff_num)
{
   
   
	Staff *p = SL->next;
	while (p)
	{
   
   
		if (p->Number == staff_num)
			return true;
		p = p->next;
	}
	return false;
}
// 1、查询职员信息
void SelectStaff(StaffList &SL)
{
   
   
	cout << "1:按工号查找 " << endl;
	cout << "2:按员工姓名查找 " << endl;
	string num;	 // 工号
	string name; // 姓名
	int ch;
	Staff *p = SL->next;
	bool isFound = false;
	cin >> ch;
	switch (ch)
	{
   
   
	case 1:
	{
   
   
		cout << "请输入要查询的工号: ";
		cin >> num;
		while (p)
		{
   
   
			if (p->Number == num)
			{
   
   
				cout << "工号\t\t" << "姓名\t" << "性别\t" << "年龄\t" << "密码" << endl;
				cout << p->Number << "\t" << p->name << "\t" << p->sex << "\t" << p->age << "\t" << p->password << endl;
				isFound = true;
				break;
			}
			p = p->next;
		}
	}
	break;
	case 2:
	{
   
   
		cout << "请输入要查询的姓名: ";
		cin >> name;
		while (p)
		{
   
   
			if (p->name == name)
			{
   
   
				cout << "工号\t\t" << "姓名\t" << "性别\t" << "年龄\t" << "密码" << endl;
				cout << p->Number << "\t" << p->name << "\t" << p->sex << "\t" << p->age << "\t" << p->password << endl;
				isFound = true;
				break;
			}
			p = p->next;
		}
	}
	break;
	default:
		cout << "输入有误!" << endl;
		break;
	}
	if (!isFound)
		cout << "未查找到!" << endl;
}
// 2、入职
void AddStaff(StaffList &SL)
{
   
   
	Staff *p = new Staff;
	p->next = NULL;
	cout << "请输入需要入职的工号:";
	cin >> p->Number;
	if (staff_num_exist(SL, p->Number))
	{
   
   
		cout << "入职失败,该员工已存在" << endl;
		return;
	}
	cout << "请输入入职员工的姓名:";
	cin >> p->name;
	cout << "请输入入职员工的性别(男,女):";
	cin >> p->sex;
	cout << "请输入入职员工的年龄:";
	cin >> p->age;
	cout << "请输入员工账户的密码(6位):";
	int password;
	char charPassword[20]; // 用于存储密码字符数组
	int i = 0;
	char ch;
	while ((ch = _getch()) != '\r') // \r是回车键
	{
   
   
		if (ch == '\b' && i > 0) // 处理退格键
		{
   
   
			cout << "\b \b";
			--i;
		}
		else if (ch >= '0' && ch <= '9') // 只接受数字(0 - 9)
		{
   
   
			charPassword[i++] = ch;
			cout << '*';
		}
	}
	charPassword[i] = '\0';		   // 字符串结束标志
	password = atoi(charPassword); // 将字符数组转换为整数
	cout << endl;
	p->password = password;

	Staff *pp = SL;
	while (pp->next)
	{
   
   
		pp = pp->next;
	}
	pp->next = p;
	cout << "入职成功!" << endl;
}
// 3、离职
void DeleteStaff(StaffList &SL)
{
   
   
	string account_num; // 账户
	int password;		// 密码
	Staff *p = SL;
	cout << "请输入需要离职的员工工号:";
	cin >> account_num;
	if (staff_num_exist(SL, account_num))
	{
   
   
		cout << "请输入需要离职的员工的密码:";
		char charPassword[20]; // 用于存储密码字符数组
		int i = 0;
		char ch;
		while ((ch = _getch()) != '\r') // \r是回车键
		{
   
   
			if (ch == '\b' && i > 0) // 处理退格键
			{
   
   
				cout << "\b \b";
				--i;
			}
			else if (ch >= '0' && ch <= '9') // 只接受数字(0 - 9)
			{
   
   
				charPassword[i++] = ch;
				cout << '*';
			}
		}
		charPassword[i] = '\0';		   // 字符串结束标志
		password = atoi(charPassword); // 将字符数组转换为整数
		cout << endl;
		cout << "\n";
		while (p->next != NULL)
		{
   
   
			if (p->next->Number == account_num && p->next->password == password)
			{
   
   
				cout << "离职成功!" << endl;
				Staff *pt = p->next;
				p->next = pt->next;
				delete pt;
				return;
			}
			p = p->next;
		}
		cout << "\n输入的密码有误!" << endl;
	}
	else
	{
   
   
		cout << "此员工不存在!" << endl;
	}
}

// 4、修改职员密码
void Revise(StaffList &SL)
{
   
   
	string account_num; // 账户
	int password;		// 密码
	Staff *p = SL->next;
	cout << "请输入需要修改的员工工号:";
	cin >> account_num;
	if (staff_num_exist(SL, account_num))
	{
   
   
		cout << "请输入需要修改的员工的密码:";
		char charPassword[20]; // 用于存储密码字符数组
		int i = 0;
		char ch;
		while ((ch = _getch()) != '\r') // \r是回车键
		{
   
   
			if (ch == '\b' && i > 0) // 处理退格键
			{
   
   
				cout << "\b \b";
				--i;
			}
			else if (ch >= '0' && ch <= '9') // 只接受数字(0 - 9)
			{
   
   
				charPassword[i++] = ch;
				cout << '*';
			}
		}
		charPassword[i] = '\0';		   // 字符串结束标志
		password = atoi(charPassword); // 将字符数组转换为整数
		cout << endl;
		cout << "\n";
		while (p != NULL)
		{
   
   
			if (p->Number == account_num && p->password == password)
			{
   
   
				cout << "请输入新的密码:";
				int password;
				char charPassword[20]; // 用于存储密码字符数组
				int i = 0;
				char ch;
				while ((ch = _getch()) != '\r') // \r是回车键
				{
   
   
					if (ch == '\b' && i > 0) // 处理退格键
					{
   
   
						cout << "\b \b";
						--i;
					}
					else if (ch >= '0' && ch <= '9') // 只接受数字(0 - 9)
					{
   
   
						charPassword[i++] = ch;
						cout << '*';
					}
				}
				charPassword[i] = '\0';		   // 字符串结束标志
				password = atoi(charPassword); // 将字符数组转换为整数
				cout << endl;
				p->password = password;
				cout << "修改成功!" << endl;
				return;
			}
			p = p->next;
		}
		cout << "密码错误!" << endl;
	}
	else
	{
   
   
		cout << "此员工不存在!" << endl;
	}
}

// 5、显示所有职员信息
void Display1(StaffList &SL)
{
   
   
	if (SL->next == NULL)
	{
   
   
		cout << "该职员表为空!" << endl;
	}
	else
	{
   
   
		Staff *p = SL->next;
		cout << "工号\t\t" << "姓名\t" << "性别\t" << "年龄\t" << "密码" << endl;
		while (p)
		{
   
   
			cout << p->Number << "\t" << p->name << "\t" << p->sex << "\t" << p->age << "\t" << p->password << endl;
			p = p->next;
		}
	}
}
// 6、保存职员信息
void Save1(StaffList &SL, string file)
{
   
   
	ofstream ofs;
	ofs.open(file.c_str());
	Staff *p = SL->next;
	while (p)
	{
   
   
		ofs << p->Number << "\t" << p->name << "\t" << p->sex << "\t" << p->age << "\t" << p->password << endl;

		p = p->next;
	}
	ofs.close();
	cout << "保存成功!" << endl;
}
// 1、查询账户信息
void SelectAccount(BankList &BL)
{
   
   
	cout << "1:按账号查找:" << endl;
	cout << "2:按开户人姓名查找:" << endl;
	cout << "3:按开户日期查找:" << endl;
	string account_num; // 账户
	string name;		// 姓名
	int open_time;		// 开户日期
	int ch;
	Banker *p = BL->next;
	cin >> ch;
	switch (ch)
	{
   
   
	case 1:
	{
   
   
		cout << "请输入需要查询的账号:";
		cin >> account_num;
		while (p)
		{
   
   
			if (p->account_num == account_num)
			{
   
   
				cout << "账户\t\t姓名\t性别\t密码\t金额\t\t开户日期\t开户状态" << endl;
				cout << p->account_num << "\t" << p->name << "\t" << p->sex << "\t" << p->password
					 << "\t" << p->money << "\t" << p->open_time << "\t" << p->states << endl;
				return;
			}
			p = p->next;
		}
	}
	break;
	case 2:
	{
   
   
		cout << "请输入需要查询的开户人姓名:";
		cin >> name;
		while (p)
		{
   
   
			if (p->name == name)
			{
   
   
				cout << "账户\t\t姓名\t性别\t密码\t金额\t\t开户日期\t开户状态" << endl;
				cout << p->account_num << "\t" << p->name << "\t" << p->sex << "\t" << p->password
					 << "\t" << p->money << "\t" << p->open_time << "\t" << p->states << endl;
				return;
			}
			p = p->next;
		}
	}
	break;
	case 3:
	{
   
   
		cout << "请输入需要查询的开户日期:";
		cin >> open_time;
		while (p)
		{
   
   
			if (p->open_time == open_time)
			{
   
   
				cout << "账户\t\t姓名\t性别\t密码\t金额\t\t开户日期\t开户状态" << endl;
				cout << p->account_num << "\t" << p->name << "\t" << p->sex << "\t" << p->password
					 << "\t" << p->money << "\t" << p->open_time << "\t" << p->states << endl;
				return;
			}
			p = p->next;
		}
	}
	break;
	default:
		cout << "输入有误!" << endl;
		break;
	}
	cout << "未查找到!" << endl;
}

// 2、开户
void Open_an_ccount(BankList &BL)
{
   
   
	Banker *p = new Banker;
	p->next = NULL;
	cout << "请输入需要开户的账户:";
	cin >> p->account_num;
	if (account_num_exist(BL, p->account_num))
	{
   
   
		cout << "开户失败,账户已存在" << endl;
		return;
	}
	cout << "请输入需要开户的姓名:";
	cin >> p->name;
	cout << "请输入需要开户的性别(男,女):";
	cin >> p->sex;
	cout << "请输入需要开户的密码(6位):";
	int password;
	char charPassword[20]; // 用于存储密码字符数组
	int i = 0;
	char ch;
	while ((ch = _getch()) != '\r') // \r是回车键
	{
   
   
		if (ch == '\b' && i > 0) // 处理退格键
		{
   
   
			cout << "\b \b";
			--i;
		}
		else if (ch >= '0' && ch <= '9') // 只接受数字(0 - 9)
		{
   
   
			charPassword[i++] = ch;
			cout << '*';
		}
	}
	charPassword[i] = '\0';		   // 字符串结束标志
	password = atoi(charPassword); // 将字符数组转换为整数
	cout << endl;
	p->password = password;
	cout << "请输入需要开户的金额:";
	cin >> p->money;
	cout << "请输入需要开户的开户日期(如:20050731):";
	cin >> p->open_time;
	cout << "请输入需要开户的开户状态(活期,定期):";
	cin >> p->states;
	Banker *pp = BL;
	while (pp->next)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值