cpp 版
职员管理系统
-
查询职员信息:
- 按工号或姓名查找职员的详细信息,包括工号、姓名、性别、年龄和密码。
-
入职:
- 添加新职员到系统,录入信息包括工号、姓名、性别、年龄和密码。
- 检查工号是否已存在,防止重复入职。
-
离职:
- 根据工号和密码删除指定职员。
- 验证密码,确保离职操作的安全性。
-
修改职员信息:
- 修改指定职员的密码,提高系统安全性。
-
显示所有职员信息:
- 展示所有职员的详细信息列表。
-
保存职员信息:
- 将职员信息保存至指定文件,以便数据持久化。
客户管理系统
-
查询账户信息:
- 通过账号、开户人姓名或开户日期查询客户账户信息。
-
开户:
- 为客户创建新账户,录入信息包括账号、姓名、性别、密码、金额、开户日期和开户状态。
- 检查账号是否已存在,防止重复开户。
-
销户:
- 根据账号和密码删除指定账户。
- 验证密码,确保销户操作的安全性。
-
修改账户密码:
- 修改指定账户的密码,提高账户安全性。
-
账户排序:
- 提供多种排序方式,包括按账号、姓名、金额或开户日期排序。
-
存款:
- 向指定账户添加金额,更新账户余额。
-
取款:
- 从指定账户扣除金额,需检查账户余额是否充足。
-
转账:
- 在两个账户之间转移金额,包括同银行和跨银行转账。
- 计算并扣除转账手续费。
-
计算利息:
- 根据存款期限和类型(活期或定期)计算利息。
-
保存账户信息:
- 将账户信息保存至指定文件,以便数据持久化。
-
显示所有账户信息:
- 展示所有客户的账户详细信息列表。
排队管理系统
-
VIP放号:
- 为客户放号并进入VIP队列,提升重要客户的服务体验。
-
Normal放号:
- 为客户放号并进入普通队列。
-
VIP队首完成服务:
- 完成当前VIP客户的服务,并提示下一号,提高服务效率。
-
Normal队首完成服务:
- 完成当前普通客户的服务,并提示下一号。
-
展示目前得分情况:
- 展示当前服务人员的服务质量得分,包括服务客户数和平均得分。
网点查询系统
-
学校网点介绍:
- 提供学校内各银行网点的详细介绍。
-
游览网点路线:
- 提供游览银行网点的最佳路线,方便用户访问。
-
查询网点间最短路径:
- 使用迪杰斯特拉算法查询两个网点间的最短路径。
-
查询网点信息:
- 查询特定网点的详细信息,如位置、服务内容等。
-
更改图的信息:
- 对网点间的关系图进行修改,包括增加或删除网点和边。
-
查询景点间可行路径:
- 查询两个景点间所有可能的路径。
-
打印邻接矩阵:
- 打印网点关系图的邻接矩阵,用于分析和调试。
#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)

639

被折叠的 条评论
为什么被折叠?



