#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"); } } }