You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1760 lines
65 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#define _CRT_SECURE_NO_WARNINGS 1
#include "xitong.h"
/* 职员管理 */
void zhiyuan_guanli(YinhangXitong *xitong) {
int caozuo;
int i;
int id;
int xuhao;
Zhiyuan z;
while (1) {
printf("\n========== 银行职员管理 ==========\n");
printf("1. 查看全部职员\n");
printf("2. 添加职员\n");
printf("3. 删除职员\n");
printf("4. 修改职员\n");
printf("5. 查询职员\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (xitong->zhiyuanshu == 0) {
printf("暂无职员数据。\n");
} else {
for (i = 0; i < xitong->zhiyuanshu; i++) {
xianshizhiyuan(&xitong->zhiyuanliebiao[i]);
}
}
} else if (caozuo == 2) {
if (xitong->zhiyuanshu >= 200) {
printf("职员容量已满。\n");
continue;
}
printf("输入职员ID: ");
z.zhiyuanid = duquzhengshu();
if (zhaozhiyuan(xitong, z.zhiyuanid) >= 0) {
printf("ID已存在。\n");
continue;
}
printf("输入姓名: ");
duquzifuchuan(z.xingming, 32);
printf("输入性别: ");
duquzifuchuan(z.xingbie, 8);
printf("输入年龄: ");
z.nianling = duquzhengshu();
printf("输入岗位: ");
duquzifuchuan(z.gangwei, 32);
printf("输入电话: ");
duquzifuchuan(z.dianhua, 32);
printf("输入密码: ");
duquzifuchuan(z.mima, 32);
printf("输入地址: ");
duquzifuchuan(z.dizhi, 128);
xitong->zhiyuanliebiao[xitong->zhiyuanshu] = z; /* 新职员追加到数组尾部 */
xitong->zhiyuanshu++;
baocunzhiyuan(xitong); /* 立即落盘,避免退出丢失 */
printf("添加成功。\n");
} else if (caozuo == 3) {
printf("输入要删除的职员ID: ");
id = duquzhengshu();
xuhao = zhaozhiyuan(xitong, id);
if (xuhao < 0) {
printf("未找到该职员。\n");
continue;
}
for (i = xuhao; i < xitong->zhiyuanshu - 1; i++) { /* 删除后前移覆盖空洞 */
xitong->zhiyuanliebiao[i] = xitong->zhiyuanliebiao[i + 1];
}
xitong->zhiyuanshu--;
baocunzhiyuan(xitong);
printf("删除成功。\n");
} else if (caozuo == 4) {
printf("输入要修改的职员ID: ");
id = duquzhengshu();
xuhao = zhaozhiyuan(xitong, id);
if (xuhao < 0) {
printf("未找到该职员。\n");
continue;
}
printf("输入新姓名: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].xingming, 32);
printf("输入新性别: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].xingbie, 8);
printf("输入新年龄: ");
xitong->zhiyuanliebiao[xuhao].nianling = duquzhengshu();
printf("输入新岗位: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].gangwei, 32);
printf("输入新电话: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].dianhua, 32);
printf("输入新密码: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].mima, 32);
printf("输入新地址: ");
duquzifuchuan(xitong->zhiyuanliebiao[xuhao].dizhi, 128);
baocunzhiyuan(xitong);
printf("修改成功。\n");
} else if (caozuo == 5) {
printf("输入职员ID: ");
id = duquzhengshu();
xuhao = zhaozhiyuan(xitong, id);
if (xuhao < 0) {
printf("未找到该职员。\n");
} else {
xianshizhiyuan(&xitong->zhiyuanliebiao[xuhao]);
}
} else if (caozuo == 0) {
return;
} else {
printf("输入有误,请重试。\n");
}
}
}
void zhiyuan_ziguanli(YinhangXitong *xitong, int zhiyuanxuhao) {
int caozuo;
while (1) {
printf("\n========== 职员个人中心 ==========\n");
printf("1. 查看个人信息\n");
printf("2. 修改电话\n");
printf("3. 修改地址\n");
printf("4. 修改登录密码\n");
printf("0. 返回\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
xianshizhiyuan(&xitong->zhiyuanliebiao[zhiyuanxuhao]);
} else if (caozuo == 2) {
printf("输入新电话: ");
duquzifuchuan(xitong->zhiyuanliebiao[zhiyuanxuhao].dianhua, 32);
baocunzhiyuan(xitong);
printf("修改成功。\n");
} else if (caozuo == 3) {
printf("输入新地址: ");
duquzifuchuan(xitong->zhiyuanliebiao[zhiyuanxuhao].dizhi, 128);
baocunzhiyuan(xitong);
printf("修改成功。\n");
} else if (caozuo == 4) {
printf("输入新密码: ");
duquzifuchuan(xitong->zhiyuanliebiao[zhiyuanxuhao].mima, 32);
baocunzhiyuan(xitong);
printf("密码修改成功。\n");
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 客户账户管理 */
void kehu_guanli(YinhangXitong *xitong) {
int caozuo;
int i;
int zhanghao;
int xuhao;
Kehu k;
char chuan[16];
while (1) {
printf("\n========== 客户账户管理 ==========\n");
printf("1. 查看全部客户\n");
printf("2. 添加客户\n");
printf("3. 删除客户\n");
printf("4. 修改客户\n");
printf("5. 查询客户\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (xitong->kehushu == 0) {
printf("暂无客户数据。\n");
} else {
for (i = 0; i < xitong->kehushu; i++) {
xianshikehu(&xitong->kehuliebiao[i]);
}
}
} else if (caozuo == 2) {
if (xitong->kehushu >= 500) {
printf("客户容量已满。\n");
continue;
}
printf("输入主账户编号: ");
k.zhuzhanghao = duquzhengshu();
if (zhaokehu(xitong, k.zhuzhanghao) >= 0) {
printf("主账户已存在。\n");
continue;
}
printf("输入姓名: ");
duquzifuchuan(k.xingming, 32);
printf("输入类型(普通/VIP): ");
duquzifuchuan(k.leixing, 8);
k.yinhangkashuliang = 0; /* 新客户初始没有绑定银行卡 */
for (i = 0; i < 10; i++) {
k.yinhangkabianhao[i] = 0;
}
printf("输入储蓄余额: ");
k.chuxuyue = duqufudian();
printf("输入贷款余额: ");
k.daikuanyue = duqufudian();
printf("输入电话: ");
duquzifuchuan(k.dianhua, 32);
printf("输入开户日期(yyyy-mm-dd): ");
duquzifuchuan(k.kaihuriqi, 16);
printf("输入信用分(0-100): ");
k.xinyong = duquzhengshu();
printf("输入金融资产: ");
k.jinrongzichan = duqufudian();
printf("输入地址: ");
duquzifuchuan(k.dizhi, 128);
printf("输入登录密码: ");
duquzifuchuan(k.mima, 32);
printf("输入身份证后6位数字(演示): ");
k.shenfenzheng = duquzhengshu();
printf("输入月收入: ");
k.yueshouru = duqufudian();
printf("输入月支出: ");
k.yuezhichu = duqufudian();
if (strcmp(k.leixing, "VIP") != 0 && strcmp(k.leixing, "普通") != 0) { /* 非法类型回退为普通 */
strcpy(k.leixing, "普通");
}
xitong->kehuliebiao[xitong->kehushu] = k;
xitong->kehushu++;
baocunkehu(xitong);
printf("添加客户成功。\n");
} else if (caozuo == 3) {
printf("输入要删除的主账户编号: ");
zhanghao = duquzhengshu();
xuhao = zhaokehu(xitong, zhanghao);
if (xuhao < 0) {
printf("未找到该客户。\n");
continue;
}
for (i = 0; i < xitong->kashu; i++) { /* 先删除该客户名下的所有银行卡 */
if (xitong->kaliebiao[i].zhuzhanghao == zhanghao) {
int j;
for (j = i; j < xitong->kashu - 1; j++) {
xitong->kaliebiao[j] = xitong->kaliebiao[j + 1];
}
xitong->kashu--;
i--;
}
}
for (i = xuhao; i < xitong->kehushu - 1; i++) { /* 客户数组前移 */
xitong->kehuliebiao[i] = xitong->kehuliebiao[i + 1];
}
xitong->kehushu--;
baocunkehu(xitong);
baocunka(xitong);
printf("删除成功。\n");
} else if (caozuo == 4) {
printf("输入要修改的主账户编号: ");
zhanghao = duquzhengshu();
xuhao = zhaokehu(xitong, zhanghao);
if (xuhao < 0) {
printf("未找到该客户。\n");
continue;
}
printf("输入新姓名: ");
duquzifuchuan(xitong->kehuliebiao[xuhao].xingming, 32);
printf("输入新类型(普通/VIP): ");
duquzifuchuan(chuan, 16);
if (strcmp(chuan, "VIP") == 0 || strcmp(chuan, "普通") == 0) {
strcpy(xitong->kehuliebiao[xuhao].leixing, chuan);
}
printf("输入新储蓄余额: ");
xitong->kehuliebiao[xuhao].chuxuyue = duqufudian();
printf("输入新贷款余额: ");
xitong->kehuliebiao[xuhao].daikuanyue = duqufudian();
printf("输入新电话: ");
duquzifuchuan(xitong->kehuliebiao[xuhao].dianhua, 32);
printf("输入新开户日期: ");
duquzifuchuan(xitong->kehuliebiao[xuhao].kaihuriqi, 16);
printf("输入新信用分: ");
xitong->kehuliebiao[xuhao].xinyong = duquzhengshu();
printf("输入新金融资产: ");
xitong->kehuliebiao[xuhao].jinrongzichan = duqufudian();
printf("输入新地址: ");
duquzifuchuan(xitong->kehuliebiao[xuhao].dizhi, 128);
printf("输入新密码: ");
duquzifuchuan(xitong->kehuliebiao[xuhao].mima, 32);
printf("输入新月收入: ");
xitong->kehuliebiao[xuhao].yueshouru = duqufudian();
printf("输入新月支出: ");
xitong->kehuliebiao[xuhao].yuezhichu = duqufudian();
baocunkehu(xitong);
printf("修改成功。\n");
} else if (caozuo == 5) {
printf("输入主账户编号: ");
zhanghao = duquzhengshu();
xuhao = zhaokehu(xitong, zhanghao);
if (xuhao < 0) {
printf("未找到客户。\n");
} else {
xianshikehu(&xitong->kehuliebiao[xuhao]);
}
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 银行卡管理 */
void ka_guanli(YinhangXitong *xitong) {
int caozuo;
int i;
int kabianhao;
int xuhao;
int kehuxuhao;
Yinhangka ka;
while (1) {
printf("\n========== 银行卡管理 ==========\n");
printf("1. 查看全部银行卡\n");
printf("2. 添加银行卡\n");
printf("3. 删除银行卡\n");
printf("4. 修改银行卡\n");
printf("5. 查询银行卡\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (xitong->kashu == 0) {
printf("暂无银行卡数据。\n");
} else {
for (i = 0; i < xitong->kashu; i++) {
xianshika(&xitong->kaliebiao[i]);
}
}
} else if (caozuo == 2) {
if (xitong->kashu >= 1200) {
printf("银行卡容量已满。\n");
continue;
}
printf("输入银行卡编号: ");
ka.kabianhao = duquzhengshu();
if (zhaoka(xitong, ka.kabianhao) >= 0) {
printf("卡号已存在。\n");
continue;
}
printf("输入所属主账户编号: ");
ka.zhuzhanghao = duquzhengshu();
kehuxuhao = zhaokehu(xitong, ka.zhuzhanghao);
if (kehuxuhao < 0) {
printf("主账户不存在,先建客户。\n");
continue;
}
if (xitong->kehuliebiao[kehuxuhao].yinhangkashuliang >= 10) {
printf("该客户卡数量已达上限。\n");
continue;
}
printf("输入类型(借记卡/储蓄卡/信用卡): ");
duquzifuchuan(ka.kaleixing, 16);
printf("输入余额: ");
ka.yue = duqufudian();
printf("输入年利率(如0.015): ");
ka.lilv = duqufudian();
printf("输入开户日期(yyyy-mm-dd): ");
duquzifuchuan(ka.kaihuriqi, 16);
strcpy(ka.zhuangtai, "正常");
xitong->kaliebiao[xitong->kashu] = ka; /* 新卡写入卡数组 */
xitong->kashu++;
kehutianjiaka(&xitong->kehuliebiao[kehuxuhao], ka.kabianhao); /* 同步到客户卡号列表 */
baocunka(xitong);
baocunkehu(xitong);
printf("添加银行卡成功。\n");
} else if (caozuo == 3) {
printf("输入要删除的卡号: ");
kabianhao = duquzhengshu();
xuhao = zhaoka(xitong, kabianhao);
if (xuhao < 0) {
printf("未找到该卡。\n");
continue;
}
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[xuhao].zhuzhanghao);
if (kehuxuhao >= 0) {
kehuquchuaka(&xitong->kehuliebiao[kehuxuhao], kabianhao);
}
for (i = xuhao; i < xitong->kashu - 1; i++) { /* 卡数组前移覆盖 */
xitong->kaliebiao[i] = xitong->kaliebiao[i + 1];
}
xitong->kashu--;
baocunka(xitong);
baocunkehu(xitong);
printf("删除成功。\n");
} else if (caozuo == 4) {
printf("输入要修改的卡号: ");
kabianhao = duquzhengshu();
xuhao = zhaoka(xitong, kabianhao);
if (xuhao < 0) {
printf("未找到该卡。\n");
continue;
}
printf("输入新类型(借记卡/储蓄卡/信用卡): ");
duquzifuchuan(xitong->kaliebiao[xuhao].kaleixing, 16);
printf("输入新余额: ");
xitong->kaliebiao[xuhao].yue = duqufudian();
printf("输入新年利率: ");
xitong->kaliebiao[xuhao].lilv = duqufudian();
printf("输入新开户日期: ");
duquzifuchuan(xitong->kaliebiao[xuhao].kaihuriqi, 16);
printf("输入新状态(正常/冻结): ");
duquzifuchuan(xitong->kaliebiao[xuhao].zhuangtai, 16);
baocunka(xitong);
printf("修改成功。\n");
} else if (caozuo == 5) {
printf("输入卡号: ");
kabianhao = duquzhengshu();
xuhao = zhaoka(xitong, kabianhao);
if (xuhao < 0) {
printf("未找到该卡。\n");
} else {
xianshika(&xitong->kaliebiao[xuhao]);
}
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 存取贷业务管理 */
void cunqudai_guanli(YinhangXitong *xitong) {
int caozuo;
int kahao;
int kahao2;
int kaxuhao;
int kaxuhao2;
int kehuxuhao;
int kehuxuhao2;
double jine;
int tianshu;
double lixi;
while (1) {
printf("\n========== 存取贷业务管理 ==========\n");
printf("1. 存款\n");
printf("2. 取款\n");
printf("3. 贷款\n");
printf("4. 还款\n");
printf("5. 转账\n");
printf("6. 利息计算并入账\n");
printf("7. 查询卡余额\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
printf("输入卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡号不存在。\n");
continue;
}
printf("输入存款金额: ");
jine = duqufudian();
if (jine <= 0) {
printf("金额必须大于0。\n");
continue;
}
xitong->kaliebiao[kaxuhao].yue += jine; /* 卡余额增加 */
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
if (kehuxuhao >= 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue += jine; /* 主账户储蓄余额同步增加 */
}
xierujiaoyi(xitong, /* 写入交易流水 */
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"存款",
jine,
xitong->kaliebiao[kaxuhao].yue,
"收入",
"柜面存款");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("存款成功,当前余额: %.2f\n", xitong->kaliebiao[kaxuhao].yue);
} else if (caozuo == 2) {
printf("输入卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡号不存在。\n");
continue;
}
printf("输入取款金额: ");
jine = duqufudian();
if (jine <= 0) {
printf("金额必须大于0。\n");
continue;
}
if (xitong->kaliebiao[kaxuhao].yue < jine) {
printf("余额不足。\n");
continue;
}
xitong->kaliebiao[kaxuhao].yue -= jine; /* 卡余额扣减 */
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
if (kehuxuhao >= 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue -= jine; /* 主账户储蓄余额同步扣减 */
if (xitong->kehuliebiao[kehuxuhao].chuxuyue < 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue = 0; /* 避免出现负数 */
}
}
xierujiaoyi(xitong, /* 写入交易流水 */
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"取款",
jine,
xitong->kaliebiao[kaxuhao].yue,
"支出",
"柜面取款");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("取款成功,当前余额: %.2f\n", xitong->kaliebiao[kaxuhao].yue);
} else if (caozuo == 3) {
printf("输入贷款入账卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡号不存在。\n");
continue;
}
printf("输入贷款金额: ");
jine = duqufudian();
if (jine <= 0) {
printf("金额必须大于0。\n");
continue;
}
xitong->kaliebiao[kaxuhao].yue += jine; /* 贷款先打入卡余额 */
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
if (kehuxuhao >= 0) {
xitong->kehuliebiao[kehuxuhao].daikuanyue += jine; /* 增加贷款余额 */
xitong->kehuliebiao[kehuxuhao].chuxuyue += jine; /* 贷款入账后可用资金增加 */
}
xierujiaoyi(xitong,
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"贷款",
jine,
xitong->kaliebiao[kaxuhao].yue,
"收入",
"贷款发放");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("贷款成功。\n");
} else if (caozuo == 4) {
printf("输入还款卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡号不存在。\n");
continue;
}
printf("输入还款金额: ");
jine = duqufudian();
if (jine <= 0) {
printf("金额必须大于0。\n");
continue;
}
if (xitong->kaliebiao[kaxuhao].yue < jine) {
printf("余额不足,无法还款。\n");
continue;
}
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
if (kehuxuhao < 0) {
printf("客户不存在。\n");
continue;
}
if (xitong->kehuliebiao[kehuxuhao].daikuanyue <= 0) {
printf("该客户没有贷款余额。\n");
continue;
}
if (jine > xitong->kehuliebiao[kehuxuhao].daikuanyue) {
jine = xitong->kehuliebiao[kehuxuhao].daikuanyue; /* 还款额不能超过欠款 */
}
xitong->kaliebiao[kaxuhao].yue -= jine; /* 卡内资金减少 */
xitong->kehuliebiao[kehuxuhao].daikuanyue -= jine; /* 贷款余额减少 */
xitong->kehuliebiao[kehuxuhao].chuxuyue -= jine; /* 主账户储蓄同步减少 */
if (xitong->kehuliebiao[kehuxuhao].chuxuyue < 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue = 0; /* 防止余额出现负值 */
}
xierujiaoyi(xitong,
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"还款",
jine,
xitong->kaliebiao[kaxuhao].yue,
"支出",
"贷款还款");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("还款成功。\n");
} else if (caozuo == 5) {
printf("输入转出卡号: ");
kahao = duquzhengshu();
printf("输入转入卡号: ");
kahao2 = duquzhengshu();
printf("输入转账金额: ");
jine = duqufudian();
kaxuhao = zhaoka(xitong, kahao);
kaxuhao2 = zhaoka(xitong, kahao2);
if (kaxuhao < 0 || kaxuhao2 < 0) {
printf("转出或转入卡不存在。\n");
continue;
}
if (jine <= 0) {
printf("金额必须大于0。\n");
continue;
}
if (xitong->kaliebiao[kaxuhao].yue < jine) {
printf("转出卡余额不足。\n");
continue;
}
xitong->kaliebiao[kaxuhao].yue -= jine; /* 转出卡扣减 */
xitong->kaliebiao[kaxuhao2].yue += jine; /* 转入卡增加 */
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
kehuxuhao2 = zhaokehu(xitong, xitong->kaliebiao[kaxuhao2].zhuzhanghao);
if (kehuxuhao >= 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue -= jine;
if (xitong->kehuliebiao[kehuxuhao].chuxuyue < 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue = 0;
}
}
if (kehuxuhao2 >= 0) {
xitong->kehuliebiao[kehuxuhao2].chuxuyue += jine;
}
xierujiaoyi(xitong, /* 记录转出流水 */
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"转账",
jine,
xitong->kaliebiao[kaxuhao].yue,
"支出",
"转出");
xierujiaoyi(xitong, /* 记录转入流水 */
xitong->kaliebiao[kaxuhao2].zhuzhanghao,
xitong->kaliebiao[kaxuhao2].kabianhao,
"转账",
jine,
xitong->kaliebiao[kaxuhao2].yue,
"收入",
"转入");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("转账成功。\n");
} else if (caozuo == 6) {
printf("输入卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡不存在。\n");
continue;
}
printf("输入计算天数: ");
tianshu = duquzhengshu();
if (tianshu <= 0) {
tianshu = 1;
}
lixi = xitong->kaliebiao[kaxuhao].yue * xitong->kaliebiao[kaxuhao].lilv * ((double)tianshu) / 360.0; /* 按天折算利息 */
if (strcmp(xitong->kaliebiao[kaxuhao].kaleixing, "信用卡") == 0) {
lixi = -lixi; /* 信用卡按利息支出处理 */
}
xitong->kaliebiao[kaxuhao].yue += lixi; /* 利息计入卡余额 */
kehuxuhao = zhaokehu(xitong, xitong->kaliebiao[kaxuhao].zhuzhanghao);
if (kehuxuhao >= 0) {
xitong->kehuliebiao[kehuxuhao].chuxuyue += lixi;
}
xierujiaoyi(xitong,
xitong->kaliebiao[kaxuhao].zhuzhanghao,
xitong->kaliebiao[kaxuhao].kabianhao,
"利息",
lixi,
xitong->kaliebiao[kaxuhao].yue,
lixi >= 0 ? "收入" : "支出",
"利息结算");
baocunka(xitong);
baocunkehu(xitong);
baocunjiaoyi(xitong);
printf("利息入账完成,利息金额: %.2f\n", lixi);
} else if (caozuo == 7) {
printf("输入卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡不存在。\n");
} else {
printf("卡号 %d 当前余额 %.2f\n", kahao, xitong->kaliebiao[kaxuhao].yue);
}
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 业务查询 */
void yewu_chaxun(YinhangXitong *xitong) {
int caozuo;
int i;
int zongshu;
char kaishi[32];
char jieshu[32];
char kehuileixing[8];
int kahao;
double minjine;
double maxjine;
char shouzhi[8];
int kehuxuhao;
double zongshouru;
double zongzhichu;
int mingxishu;
while (1) {
printf("\n========== 业务查询 ==========\n");
printf("1. 按时间段查询交易\n");
printf("2. 按客户类型查询交易\n");
printf("3. 按银行卡查询交易\n");
printf("4. 按金额区间查询交易\n");
printf("5. 按收入/支出类型查询交易\n");
printf("6. 汇总统计\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
printf("输入开始时间(yyyy-mm-dd hh:mm:ss): ");
duquzifuchuan(kaishi, 32);
printf("输入结束时间(yyyy-mm-dd hh:mm:ss): ");
duquzifuchuan(jieshu, 32);
zongshu = 0;
for (i = 0; i < xitong->jiaoyishu; i++) {
if (strcmp(xitong->jiaoyiliebiao[i].shijian, kaishi) >= 0 &&
strcmp(xitong->jiaoyiliebiao[i].shijian, jieshu) <= 0) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
zongshu++;
}
}
printf("共查询到 %d 条。\n", zongshu);
} else if (caozuo == 2) {
printf("输入客户类型(普通/VIP): ");
duquzifuchuan(kehuileixing, 8);
zongshu = 0;
for (i = 0; i < xitong->jiaoyishu; i++) {
kehuxuhao = zhaokehu(xitong, xitong->jiaoyiliebiao[i].zhuzhanghao);
if (kehuxuhao >= 0 && strcmp(xitong->kehuliebiao[kehuxuhao].leixing, kehuileixing) == 0) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
zongshu++;
}
}
printf("共查询到 %d 条。\n", zongshu);
} else if (caozuo == 3) {
printf("输入卡号: ");
kahao = duquzhengshu();
zongshu = 0;
for (i = 0; i < xitong->jiaoyishu; i++) {
if (xitong->jiaoyiliebiao[i].kabianhao == kahao) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
zongshu++;
}
}
printf("共查询到 %d 条。\n", zongshu);
} else if (caozuo == 4) {
printf("输入最小金额: ");
minjine = duqufudian();
printf("输入最大金额: ");
maxjine = duqufudian();
zongshu = 0;
for (i = 0; i < xitong->jiaoyishu; i++) {
if (xitong->jiaoyiliebiao[i].jine >= minjine && xitong->jiaoyiliebiao[i].jine <= maxjine) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
zongshu++;
}
}
printf("共查询到 %d 条。\n", zongshu);
} else if (caozuo == 5) {
printf("输入类型(收入/支出): ");
duquzifuchuan(shouzhi, 8);
zongshu = 0;
for (i = 0; i < xitong->jiaoyishu; i++) {
if (strcmp(xitong->jiaoyiliebiao[i].shouruzhichu, shouzhi) == 0) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
zongshu++;
}
}
printf("共查询到 %d 条。\n", zongshu);
} else if (caozuo == 6) {
zongshouru = 0;
zongzhichu = 0;
mingxishu = xitong->jiaoyishu;
for (i = 0; i < xitong->jiaoyishu; i++) {
if (strcmp(xitong->jiaoyiliebiao[i].shouruzhichu, "收入") == 0) {
zongshouru += xitong->jiaoyiliebiao[i].jine;
} else if (strcmp(xitong->jiaoyiliebiao[i].shouruzhichu, "支出") == 0) {
zongzhichu += xitong->jiaoyiliebiao[i].jine;
}
}
printf("交易总条数: %d\n", mingxishu);
printf("总收入: %.2f\n", zongshouru);
printf("总支出: %.2f\n", zongzhichu);
printf("净流入: %.2f\n", zongshouru - zongzhichu);
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 排队管理 */
void paidui_guanli(YinhangXitong *xitong) {
int caozuo;
int zhanghao;
int kehuxuhao;
Paidui p;
int i;
int idx;
int minvip;
int minputong;
int dengdai_vip;
int dengdai_putong;
int jinriwancheng;
char jinri[11];
char shijian[20];
while (1) {
printf("\n========== 银行排队管理 ==========\n");
printf("1. 客户取号\n");
printf("2. 叫号办理(按VIP优先)\n");
printf("3. 显示排队信息\n");
printf("4. 每日客流统计\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (xitong->paiduishu >= 3000) {
printf("排队记录容量已满。\n");
continue;
}
printf("输入客户主账户: ");
zhanghao = duquzhengshu();
kehuxuhao = zhaokehu(xitong, zhanghao);
if (kehuxuhao < 0) {
printf("客户不存在。\n");
continue;
}
p.quhaoid = shengchengquhaoid(xitong);
p.zhuzhanghao = zhanghao;
strcpy(p.kehuileixing, xitong->kehuliebiao[kehuxuhao].leixing);
if (strcmp(p.kehuileixing, "VIP") == 0) {
strcpy(p.chuangkou, "VIP窗");
} else {
strcpy(p.chuangkou, "普通窗");
}
strcpy(p.zhuangtai, "等待中");
p.pingfen = 0;
qudangqianshijian(p.shijian, sizeof(p.shijian));
xitong->paiduiliebiao[xitong->paiduishu] = p;
xitong->paiduishu++;
baocunpaidui(xitong);
printf("取号成功,号码: %d窗口: %s\n", p.quhaoid, p.chuangkou);
} else if (caozuo == 2) {
idx = -1;
minvip = 2147483647; /* 先从VIP队列里找最小号 */
minputong = 2147483647;
for (i = 0; i < xitong->paiduishu; i++) {
if (strcmp(xitong->paiduiliebiao[i].zhuangtai, "等待中") == 0 &&
strcmp(xitong->paiduiliebiao[i].kehuileixing, "VIP") == 0) {
if (xitong->paiduiliebiao[i].quhaoid < minvip) {
minvip = xitong->paiduiliebiao[i].quhaoid;
idx = i;
}
}
}
if (idx < 0) { /* 没有VIP时再从普通队列叫号 */
for (i = 0; i < xitong->paiduishu; i++) {
if (strcmp(xitong->paiduiliebiao[i].zhuangtai, "等待中") == 0 &&
strcmp(xitong->paiduiliebiao[i].kehuileixing, "普通") == 0) {
if (xitong->paiduiliebiao[i].quhaoid < minputong) {
minputong = xitong->paiduiliebiao[i].quhaoid;
idx = i;
}
}
}
}
if (idx < 0) {
printf("当前没有等待中的客户。\n");
continue;
}
printf("叫号: %d客户主账户: %d窗口: %s\n",
xitong->paiduiliebiao[idx].quhaoid,
xitong->paiduiliebiao[idx].zhuzhanghao,
xitong->paiduiliebiao[idx].chuangkou);
printf("请输入客户评分(1-5): ");
xitong->paiduiliebiao[idx].pingfen = duquzhengshu();
if (xitong->paiduiliebiao[idx].pingfen < 1) {
xitong->paiduiliebiao[idx].pingfen = 1;
}
if (xitong->paiduiliebiao[idx].pingfen > 5) {
xitong->paiduiliebiao[idx].pingfen = 5;
}
strcpy(xitong->paiduiliebiao[idx].zhuangtai, "已完成"); /* 更新办理状态 */
baocunpaidui(xitong);
printf("该号业务已完成。\n");
} else if (caozuo == 3) {
dengdai_vip = 0;
dengdai_putong = 0;
for (i = 0; i < xitong->paiduishu; i++) {
if (strcmp(xitong->paiduiliebiao[i].zhuangtai, "等待中") == 0) {
if (strcmp(xitong->paiduiliebiao[i].kehuileixing, "VIP") == 0) {
dengdai_vip++;
} else {
dengdai_putong++;
}
}
}
printf("VIP窗口等待人数: %d\n", dengdai_vip);
printf("普通窗口等待人数: %d\n", dengdai_putong);
printf("------ 全部排队记录 ------\n");
for (i = 0; i < xitong->paiduishu; i++) {
xianshipaidui(&xitong->paiduiliebiao[i]);
}
} else if (caozuo == 4) {
qudangqianshijian(shijian, sizeof(shijian));
strncpy(jinri, shijian, 10);
jinri[10] = '\0';
jinriwancheng = 0;
for (i = 0; i < xitong->paiduishu; i++) {
if (strcmp(xitong->paiduiliebiao[i].zhuangtai, "已完成") == 0 &&
strncmp(xitong->paiduiliebiao[i].shijian, jinri, 10) == 0) {
jinriwancheng++;
}
}
printf("今日日期: %s\n", jinri);
printf("今日已完成业务客户数: %d\n", jinriwancheng);
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 网点管理 */
void wangdian_guanli(YinhangXitong *xitong) {
int caozuo;
int i;
int id;
int xuhao;
Wangdian w;
Luxian l;
int qidian;
int zhongdian;
int n;
int j;
int *tu;
int juli[120];
int qianqu[120];
int fangwen[120];
int min;
int u;
int v;
int qidianxuhao;
int zhongdianxuhao;
int lujing[120];
int lujingchangdu;
int duiwu[120];
int tou;
int wei;
int keyi;
tu = (int *)malloc(sizeof(int) * 120 * 120); /* 邻接矩阵改用堆内存,避免栈溢出 */
if (tu == NULL) {
printf("内存不足,无法进入网点管理。\n");
return;
}
while (1) {
printf("\n========== 银行网点查询与管理 ==========\n");
printf("1. 查看网点\n");
printf("2. 新增网点\n");
printf("3. 修改网点\n");
printf("4. 删除网点\n");
printf("5. 查看路径信息\n");
printf("6. 新增路径\n");
printf("7. 最短路径导航\n");
printf("8. 可行路径判断\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (xitong->wangdianshu == 0) {
printf("暂无网点数据。\n");
} else {
for (i = 0; i < xitong->wangdianshu; i++) {
xianshiwangdian(&xitong->wangdianliebiao[i]);
}
}
} else if (caozuo == 2) {
if (xitong->wangdianshu >= 120) {
printf("网点容量已满。\n");
continue;
}
printf("输入网点ID: ");
w.wangdianid = duquzhengshu();
if (zhaowangdian(xitong, w.wangdianid) >= 0) {
printf("网点ID已存在。\n");
continue;
}
printf("输入网点名称: ");
duquzifuchuan(w.mingcheng, 32);
printf("输入网点地址: ");
duquzifuchuan(w.dizhi, 128);
printf("输入当前业务人数: ");
w.yewurenshu = duquzhengshu();
xitong->wangdianliebiao[xitong->wangdianshu] = w;
xitong->wangdianshu++;
baocunwangdian(xitong);
printf("新增网点成功。\n");
} else if (caozuo == 3) {
printf("输入要修改的网点ID: ");
id = duquzhengshu();
xuhao = zhaowangdian(xitong, id);
if (xuhao < 0) {
printf("网点不存在。\n");
continue;
}
printf("输入新名称: ");
duquzifuchuan(xitong->wangdianliebiao[xuhao].mingcheng, 32);
printf("输入新地址: ");
duquzifuchuan(xitong->wangdianliebiao[xuhao].dizhi, 128);
printf("输入新业务人数: ");
xitong->wangdianliebiao[xuhao].yewurenshu = duquzhengshu();
baocunwangdian(xitong);
printf("修改成功。\n");
} else if (caozuo == 4) {
printf("输入要删除的网点ID: ");
id = duquzhengshu();
xuhao = zhaowangdian(xitong, id);
if (xuhao < 0) {
printf("网点不存在。\n");
continue;
}
for (i = xuhao; i < xitong->wangdianshu - 1; i++) {
xitong->wangdianliebiao[i] = xitong->wangdianliebiao[i + 1];
}
xitong->wangdianshu--;
for (i = 0; i < xitong->luxianshu; i++) {
if (xitong->luxianliebiao[i].qidianid == id || xitong->luxianliebiao[i].zhongdianid == id) {
for (j = i; j < xitong->luxianshu - 1; j++) {
xitong->luxianliebiao[j] = xitong->luxianliebiao[j + 1];
}
xitong->luxianshu--;
i--;
}
}
baocunwangdian(xitong);
baocunluxian(xitong);
printf("删除成功。\n");
} else if (caozuo == 5) {
if (xitong->luxianshu == 0) {
printf("暂无路径数据。\n");
} else {
printf("格式: 起点ID -> 终点ID, 距离, 是否可行\n");
for (i = 0; i < xitong->luxianshu; i++) {
printf("%d -> %d, 距离:%d, 可行:%s\n",
xitong->luxianliebiao[i].qidianid,
xitong->luxianliebiao[i].zhongdianid,
xitong->luxianliebiao[i].juli,
xitong->luxianliebiao[i].kehang == 1 ? "" : "");
}
}
} else if (caozuo == 6) {
if (xitong->luxianshu >= 400) {
printf("路径容量已满。\n");
continue;
}
printf("输入起点网点ID: ");
l.qidianid = duquzhengshu();
printf("输入终点网点ID: ");
l.zhongdianid = duquzhengshu();
if (zhaowangdian(xitong, l.qidianid) < 0 || zhaowangdian(xitong, l.zhongdianid) < 0) {
printf("起点或终点网点不存在。\n");
continue;
}
printf("输入距离: ");
l.juli = duquzhengshu();
printf("输入是否可行(1可行 0不可行): ");
l.kehang = duquzhengshu();
if (l.kehang != 0) {
l.kehang = 1;
}
xitong->luxianliebiao[xitong->luxianshu] = l;
xitong->luxianshu++;
baocunluxian(xitong);
printf("路径新增成功。\n");
} else if (caozuo == 7) {
if (xitong->wangdianshu <= 1) {
printf("网点数量不足。\n");
continue;
}
printf("输入起点网点ID: ");
qidian = duquzhengshu();
printf("输入终点网点ID: ");
zhongdian = duquzhengshu();
qidianxuhao = zhaowangdian(xitong, qidian);
zhongdianxuhao = zhaowangdian(xitong, zhongdian);
if (qidianxuhao < 0 || zhongdianxuhao < 0) {
printf("起点或终点不存在。\n");
continue;
}
n = xitong->wangdianshu; /* 图中顶点数量 */
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (i == j) {
tu[i * 120 + j] = 0;
} else {
tu[i * 120 + j] = 1000000000; /* 无边时使用大值表示不可达 */
}
}
}
for (i = 0; i < xitong->luxianshu; i++) {
if (xitong->luxianliebiao[i].kehang == 1) {
int a;
int b;
a = zhaowangdian(xitong, xitong->luxianliebiao[i].qidianid);
b = zhaowangdian(xitong, xitong->luxianliebiao[i].zhongdianid);
if (a >= 0 && b >= 0) {
if (xitong->luxianliebiao[i].juli < tu[a * 120 + b]) {
tu[a * 120 + b] = xitong->luxianliebiao[i].juli; /* 无向图双向赋值 */
tu[b * 120 + a] = xitong->luxianliebiao[i].juli;
}
}
}
}
for (i = 0; i < n; i++) {
juli[i] = 1000000000; /* 初始化最短路为无穷大 */
qianqu[i] = -1;
fangwen[i] = 0;
}
juli[qidianxuhao] = 0; /* 起点到自身距离为0 */
for (i = 0; i < n; i++) {
min = 1000000000;
u = -1;
for (j = 0; j < n; j++) {
if (!fangwen[j] && juli[j] < min) {
min = juli[j];
u = j;
}
}
if (u == -1) {
break;
}
fangwen[u] = 1; /* 标记最短距离已确定 */
for (v = 0; v < n; v++) {
if (!fangwen[v] && tu[u * 120 + v] < 1000000000 && juli[u] + tu[u * 120 + v] < juli[v]) {
juli[v] = juli[u] + tu[u * 120 + v]; /* 松弛边 */
qianqu[v] = u; /* 记录前驱点 */
}
}
}
if (juli[zhongdianxuhao] >= 1000000000) {
printf("无可达最短路径。\n");
} else {
lujingchangdu = 0;
v = zhongdianxuhao;
while (v != -1) { /* 反向回溯完整路径 */
lujing[lujingchangdu] = v;
lujingchangdu++;
v = qianqu[v];
}
printf("最短距离: %d\n", juli[zhongdianxuhao]);
printf("路径: ");
for (i = lujingchangdu - 1; i >= 0; i--) {
printf("%s", xitong->wangdianliebiao[lujing[i]].mingcheng);
if (i != 0) {
printf(" -> ");
}
}
printf("\n");
}
} else if (caozuo == 8) {
if (xitong->wangdianshu <= 1) {
printf("网点数量不足。\n");
continue;
}
printf("输入起点网点ID: ");
qidian = duquzhengshu();
printf("输入终点网点ID: ");
zhongdian = duquzhengshu();
qidianxuhao = zhaowangdian(xitong, qidian);
zhongdianxuhao = zhaowangdian(xitong, zhongdian);
if (qidianxuhao < 0 || zhongdianxuhao < 0) {
printf("起点或终点不存在。\n");
continue;
}
n = xitong->wangdianshu; /* BFS可行路径判断 */
for (i = 0; i < n; i++) {
fangwen[i] = 0;
qianqu[i] = -1;
}
tou = 0;
wei = 0;
duiwu[wei++] = qidianxuhao;
fangwen[qidianxuhao] = 1;
keyi = 0;
while (tou < wei) { /* 标准队列广度优先遍历 */
u = duiwu[tou++];
if (u == zhongdianxuhao) {
keyi = 1;
break;
}
for (i = 0; i < xitong->luxianshu; i++) {
int a;
int b;
if (xitong->luxianliebiao[i].kehang != 1) {
continue;
}
a = zhaowangdian(xitong, xitong->luxianliebiao[i].qidianid);
b = zhaowangdian(xitong, xitong->luxianliebiao[i].zhongdianid);
if (a == u && b >= 0 && !fangwen[b]) {
fangwen[b] = 1;
qianqu[b] = u;
duiwu[wei++] = b;
}
if (b == u && a >= 0 && !fangwen[a]) {
fangwen[a] = 1;
qianqu[a] = u;
duiwu[wei++] = a;
}
}
}
if (!keyi) {
printf("不可达,无可行路径。\n");
} else {
lujingchangdu = 0;
v = zhongdianxuhao;
while (v != -1) {
lujing[lujingchangdu++] = v;
v = qianqu[v];
}
printf("存在可行路径: ");
for (i = lujingchangdu - 1; i >= 0; i--) {
printf("%s", xitong->wangdianliebiao[lujing[i]].mingcheng);
if (i != 0) {
printf(" -> ");
}
}
printf("\n");
}
} else if (caozuo == 0) {
free(tu); /* 退出前释放堆内存 */
return;
} else {
printf("输入有误。\n");
}
}
}
/* 智能管理 */
void zhineng_guanli(YinhangXitong *xitong) {
int caozuo;
int i;
int j;
int kahao;
int kaxuhao;
int zhanghao;
int kehuxuhao;
double jine;
double rishouyi;
double yueshouyi;
double zhaiwubilv;
double shouzhibi;
int pingfen;
char dengji[8];
char tupianwenjian[256];
FILE *fp;
int yanzhengma;
char yanzhengzifu[16];
char dangri[11];
int duoci;
char shijian[20];
while (1) {
printf("\n========== 智能管理 ==========\n");
printf("1. 交易异常报警\n");
printf("2. 银行卡每日/月利息计算\n");
printf("3. 客户统计分析\n");
printf("4. 信用评级与风控审批\n");
printf("5. 投资顾问建议\n");
printf("6. 身份核验\n");
printf("7. 生物识别模拟\n");
printf("8. 影像读取模拟\n");
printf("0. 返回上级\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
int yichanggeshu;
yichanggeshu = 0;
printf("异常规则: 单笔金额>=50000 或 同账户单日交易>=5笔\n");
for (i = 0; i < xitong->jiaoyishu; i++) { /* 规则1筛大额交易 */
if (xitong->jiaoyiliebiao[i].jine >= 50000.0) {
printf("[大额报警] ");
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
yichanggeshu++;
}
}
for (i = 0; i < xitong->jiaoyishu; i++) { /* 规则2同账户单日多笔 */
strncpy(dangri, xitong->jiaoyiliebiao[i].shijian, 10);
dangri[10] = '\0';
duoci = 0;
for (j = 0; j < xitong->jiaoyishu; j++) {
if (xitong->jiaoyiliebiao[j].zhuzhanghao == xitong->jiaoyiliebiao[i].zhuzhanghao &&
strncmp(xitong->jiaoyiliebiao[j].shijian, dangri, 10) == 0) {
duoci++;
}
}
if (duoci >= 5) {
printf("[多笔报警] 主账户:%d 日期:%s 笔数:%d\n",
xitong->jiaoyiliebiao[i].zhuzhanghao, dangri, duoci);
yichanggeshu++;
break;
}
}
if (yichanggeshu == 0) {
printf("未发现明显异常交易。\n");
}
} else if (caozuo == 2) {
printf("输入卡号: ");
kahao = duquzhengshu();
kaxuhao = zhaoka(xitong, kahao);
if (kaxuhao < 0) {
printf("卡不存在。\n");
continue;
}
rishouyi = xitong->kaliebiao[kaxuhao].yue * xitong->kaliebiao[kaxuhao].lilv / 360.0;
yueshouyi = xitong->kaliebiao[kaxuhao].yue * xitong->kaliebiao[kaxuhao].lilv / 12.0;
if (strcmp(xitong->kaliebiao[kaxuhao].kaleixing, "信用卡") == 0) {
rishouyi = -rishouyi;
yueshouyi = -yueshouyi;
}
printf("卡号:%d 当前余额:%.2f 年利率:%.4f\n", kahao, xitong->kaliebiao[kaxuhao].yue, xitong->kaliebiao[kaxuhao].lilv);
printf("每日利息试算: %.2f\n", rishouyi);
printf("每月利息试算: %.2f\n", yueshouyi);
} else if (caozuo == 3) {
int vipshu;
int putongshu;
double zongzichan;
double zongdaikuan;
double pingjunxinyong;
vipshu = 0;
putongshu = 0;
zongzichan = 0;
zongdaikuan = 0;
pingjunxinyong = 0;
for (i = 0; i < xitong->kehushu; i++) {
if (strcmp(xitong->kehuliebiao[i].leixing, "VIP") == 0) {
vipshu++;
} else {
putongshu++;
}
zongzichan += xitong->kehuliebiao[i].jinrongzichan;
zongdaikuan += xitong->kehuliebiao[i].daikuanyue;
pingjunxinyong += xitong->kehuliebiao[i].xinyong;
}
if (xitong->kehushu > 0) {
pingjunxinyong = pingjunxinyong / xitong->kehushu;
}
printf("客户总数: %d\n", xitong->kehushu);
printf("VIP客户数: %d\n", vipshu);
printf("普通客户数: %d\n", putongshu);
printf("客户总金融资产: %.2f\n", zongzichan);
printf("客户总贷款余额: %.2f\n", zongdaikuan);
printf("平均信用分: %.2f\n", pingjunxinyong);
} else if (caozuo == 4) {
printf("输入客户主账户: ");
zhanghao = duquzhengshu();
kehuxuhao = zhaokehu(xitong, zhanghao);
if (kehuxuhao < 0) {
printf("客户不存在。\n");
continue;
}
printf("输入拟审批贷款金额: ");
jine = duqufudian();
zhaiwubilv = xitong->kehuliebiao[kehuxuhao].daikuanyue / /* 债务压力 */
(xitong->kehuliebiao[kehuxuhao].chuxuyue + xitong->kehuliebiao[kehuxuhao].jinrongzichan + 1.0);
shouzhibi = xitong->kehuliebiao[kehuxuhao].yuezhichu / /* 收支健康度 */
(xitong->kehuliebiao[kehuxuhao].yueshouru + 1.0);
pingfen = xitong->kehuliebiao[kehuxuhao].xinyong; /* 从基础信用分出发 */
if (zhaiwubilv < 0.2) {
pingfen += 10;
} else if (zhaiwubilv > 0.6) {
pingfen -= 15;
}
if (shouzhibi < 0.5) {
pingfen += 8;
} else if (shouzhibi > 0.9) {
pingfen -= 10;
}
if (xitong->kehuliebiao[kehuxuhao].jinrongzichan > 500000) {
pingfen += 8;
}
if (pingfen >= 85) {
strcpy(dengji, "A");
} else if (pingfen >= 70) {
strcpy(dengji, "B");
} else {
strcpy(dengji, "C");
}
printf("客户:%s 风控评分:%d 评级:%s\n", xitong->kehuliebiao[kehuxuhao].xingming, pingfen, dengji);
if (pingfen >= 75 && jine <= (xitong->kehuliebiao[kehuxuhao].jinrongzichan * 0.5)) {
printf("风控审批结果: 通过\n");
} else {
printf("风控审批结果: 拒绝或需人工复核\n");
}
} else if (caozuo == 5) {
printf("输入客户主账户: ");
zhanghao = duquzhengshu();
kehuxuhao = zhaokehu(xitong, zhanghao);
if (kehuxuhao < 0) {
printf("客户不存在。\n");
continue;
}
printf("客户:%s\n", xitong->kehuliebiao[kehuxuhao].xingming);
if (xitong->kehuliebiao[kehuxuhao].jinrongzichan < 100000) {
printf("建议: 以货币基金+定期存款为主,控制风险。\n");
} else if (xitong->kehuliebiao[kehuxuhao].jinrongzichan < 500000) {
printf("建议: 债券基金+指数基金组合,适当配置保险。\n");
} else {
if (xitong->kehuliebiao[kehuxuhao].xinyong >= 85) {
printf("建议: 指数基金+固收+部分权益类产品,分散投资。\n");
} else {
printf("建议: 先稳健配置,降低杠杆,再逐步增加权益资产。\n");
}
}
} else if (caozuo == 6) {
printf("输入客户主账户: ");
zhanghao = duquzhengshu();
kehuxuhao = zhaokehu(xitong, zhanghao);
if (kehuxuhao < 0) {
printf("客户不存在。\n");
continue;
}
printf("输入身份证后6位(演示): ");
yanzhengma = duquzhengshu();
if (yanzhengma == xitong->kehuliebiao[kehuxuhao].shenfenzheng) {
printf("身份核验通过。\n");
} else {
printf("身份核验失败。\n");
}
} else if (caozuo == 7) {
printf("输入生物识别结果(ok/fail): ");
duquzifuchuan(yanzhengzifu, 16);
if (strcmp(yanzhengzifu, "ok") == 0 || strcmp(yanzhengzifu, "OK") == 0) {
printf("生物识别通过。\n");
} else {
printf("生物识别未通过。\n");
}
} else if (caozuo == 8) {
printf("输入要读取的影像文件名: ");
duquzifuchuan(tupianwenjian, 256);
fp = fopen(tupianwenjian, "r");
if (fp == NULL) {
printf("影像读取失败,文件不存在或无法访问。\n");
} else {
fclose(fp);
qudangqianshijian(shijian, sizeof(shijian));
printf("影像读取成功,读取时间: %s\n", shijian);
}
} else if (caozuo == 0) {
return;
} else {
printf("输入有误。\n");
}
}
}
/* 管理员菜单 */
void guanliyuan_caidan(YinhangXitong *xitong) {
int caozuo;
while (1) {
printf("\n========== 管理员主菜单 ==========\n");
printf("1. 银行职员管理\n");
printf("2. 客户账户管理\n");
printf("3. 银行卡管理\n");
printf("4. 存取贷业务管理\n");
printf("5. 业务查询\n");
printf("6. 银行排队管理\n");
printf("7. 银行网点查询\n");
printf("8. 智能管理\n");
printf("9. 保存全部数据\n");
printf("0. 退出登录\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
zhiyuan_guanli(xitong);
} else if (caozuo == 2) {
kehu_guanli(xitong);
} else if (caozuo == 3) {
ka_guanli(xitong);
} else if (caozuo == 4) {
cunqudai_guanli(xitong);
} else if (caozuo == 5) {
yewu_chaxun(xitong);
} else if (caozuo == 6) {
paidui_guanli(xitong);
} else if (caozuo == 7) {
wangdian_guanli(xitong);
} else if (caozuo == 8) {
zhineng_guanli(xitong);
} else if (caozuo == 9) {
baocunsuoyoushuju(xitong); /* 手动触发一次全量保存 */
printf("全部数据已保存。\n");
} else if (caozuo == 0) {
baocunsuoyoushuju(xitong);
return;
} else {
printf("输入有误。\n");
}
}
}
/* 职员菜单 */
void zhiyuan_caidan(YinhangXitong *xitong, int zhiyuanxuhao) {
int caozuo;
while (1) {
printf("\n========== 职员主菜单 ==========\n");
printf("当前登录职员: %s\n", xitong->zhiyuanliebiao[zhiyuanxuhao].xingming);
printf("1. 客户账户管理\n");
printf("2. 银行卡管理\n");
printf("3. 存取贷业务管理\n");
printf("4. 业务查询\n");
printf("5. 银行排队管理\n");
printf("6. 银行网点查询\n");
printf("7. 智能管理\n");
printf("8. 个人信息与密码修改\n");
printf("0. 退出登录\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
kehu_guanli(xitong);
} else if (caozuo == 2) {
ka_guanli(xitong);
} else if (caozuo == 3) {
cunqudai_guanli(xitong);
} else if (caozuo == 4) {
yewu_chaxun(xitong);
} else if (caozuo == 5) {
paidui_guanli(xitong);
} else if (caozuo == 6) {
wangdian_guanli(xitong);
} else if (caozuo == 7) {
zhineng_guanli(xitong);
} else if (caozuo == 8) {
zhiyuan_ziguanli(xitong, zhiyuanxuhao);
} else if (caozuo == 0) {
baocunsuoyoushuju(xitong);
return;
} else {
printf("输入有误。\n");
}
}
}
/* 客户菜单 */
void kehu_caidan(YinhangXitong *xitong, int kehuxuhao) {
int caozuo;
int i;
int kahao;
while (1) {
printf("\n========== 客户主菜单 ==========\n");
printf("当前客户: %s (主账户:%d)\n", xitong->kehuliebiao[kehuxuhao].xingming, xitong->kehuliebiao[kehuxuhao].zhuzhanghao);
printf("1. 查看个人信息\n");
printf("2. 修改电话地址密码\n");
printf("3. 查看名下银行卡\n");
printf("4. 查看个人交易记录\n");
printf("5. 排队取号\n");
printf("6. 身份核验(智能管理子功能)\n");
printf("0. 退出登录\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
xianshikehu(&xitong->kehuliebiao[kehuxuhao]);
} else if (caozuo == 2) {
printf("输入新电话: ");
duquzifuchuan(xitong->kehuliebiao[kehuxuhao].dianhua, 32);
printf("输入新地址: ");
duquzifuchuan(xitong->kehuliebiao[kehuxuhao].dizhi, 128);
printf("输入新密码: ");
duquzifuchuan(xitong->kehuliebiao[kehuxuhao].mima, 32);
baocunkehu(xitong);
printf("修改成功。\n");
} else if (caozuo == 3) {
for (i = 0; i < xitong->kashu; i++) {
if (xitong->kaliebiao[i].zhuzhanghao == xitong->kehuliebiao[kehuxuhao].zhuzhanghao) {
xianshika(&xitong->kaliebiao[i]);
}
}
} else if (caozuo == 4) {
for (i = 0; i < xitong->jiaoyishu; i++) {
if (xitong->jiaoyiliebiao[i].zhuzhanghao == xitong->kehuliebiao[kehuxuhao].zhuzhanghao) {
xianshijiaoyi(&xitong->jiaoyiliebiao[i]);
}
}
} else if (caozuo == 5) {
Paidui p;
if (xitong->paiduishu >= 3000) {
printf("当前排队系统繁忙。\n");
continue;
}
p.quhaoid = shengchengquhaoid(xitong); /* 生成新排队号 */
p.zhuzhanghao = xitong->kehuliebiao[kehuxuhao].zhuzhanghao;
strcpy(p.kehuileixing, xitong->kehuliebiao[kehuxuhao].leixing);
if (strcmp(p.kehuileixing, "VIP") == 0) {
strcpy(p.chuangkou, "VIP窗");
} else {
strcpy(p.chuangkou, "普通窗");
}
strcpy(p.zhuangtai, "等待中");
p.pingfen = 0;
qudangqianshijian(p.shijian, sizeof(p.shijian));
xitong->paiduiliebiao[xitong->paiduishu] = p; /* 排队记录入队 */
xitong->paiduishu++;
baocunpaidui(xitong);
printf("取号成功,号码:%d窗口:%s\n", p.quhaoid, p.chuangkou);
} else if (caozuo == 6) {
printf("输入身份证后6位(演示): ");
kahao = duquzhengshu();
if (kahao == xitong->kehuliebiao[kehuxuhao].shenfenzheng) {
printf("身份核验通过。\n");
} else {
printf("身份核验失败。\n");
}
} else if (caozuo == 0) {
baocunsuoyoushuju(xitong);
return;
} else {
printf("输入有误。\n");
}
}
}
/* 主菜单 */
void zhucaidan(YinhangXitong *xitong) {
int caozuo;
int zhiyuanxuhao;
int kehuxuhao;
while (1) {
printf("\n======================================================\n");
printf(" 银行智能管理系统\n");
printf("======================================================\n");
printf("1. 管理员登录\n");
printf("2. 职员登录\n");
printf("3. 客户登录\n");
printf("4. 查看测试数据文件名\n");
printf("5. 重新加载文件数据\n");
printf("0. 退出系统\n");
printf("请选择: ");
caozuo = duquzhengshu(); /* 读取当前菜单操作码 */
if (caozuo == 1) {
if (guanliyuanlogin()) {
printf("管理员登录成功。\n");
guanliyuan_caidan(xitong);
} else {
printf("账号或密码错误。\n");
}
} else if (caozuo == 2) {
if (zhiyuanlogin(xitong, &zhiyuanxuhao)) {
printf("职员登录成功。\n");
zhiyuan_caidan(xitong, zhiyuanxuhao);
} else {
printf("职员ID或密码错误。\n");
}
} else if (caozuo == 3) {
if (kehulogin(xitong, &kehuxuhao)) {
printf("客户登录成功。\n");
kehu_caidan(xitong, kehuxuhao);
} else {
printf("客户账号或密码错误。\n");
}
} else if (caozuo == 4) {
zhanshimorenwenjianming();
} else if (caozuo == 5) {
jiazaisuoyoushuju(xitong); /* 从文本重新读取,覆盖内存数据 */
printf("文件数据已重新加载。\n");
} else if (caozuo == 0) {
baocunsuoyoushuju(xitong);
printf("系统已退出,数据已保存。\n");
return;
} else {
printf("输入有误,请重试。\n");
}
}
}