|
|
#define _CRT_SECURE_NO_WARNINGS 1
|
|
|
#include "xitong.h"
|
|
|
|
|
|
/* 基础输入输出实现 */
|
|
|
void qingkonghuanche(void) {
|
|
|
int c;
|
|
|
while ((c = getchar()) != '\n' && c != EOF) { /* 丢弃本行剩余输入 */
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void duquzifuchuan(char *huanchongqu, int daxiao) {
|
|
|
int changdu;
|
|
|
if (fgets(huanchongqu, daxiao, stdin) == NULL) {
|
|
|
huanchongqu[0] = '\0'; /* 读入失败时返回空串 */
|
|
|
return;
|
|
|
}
|
|
|
changdu = (int)strlen(huanchongqu);
|
|
|
if (changdu > 0 && huanchongqu[changdu - 1] == '\n') {
|
|
|
huanchongqu[changdu - 1] = '\0'; /* 去掉行尾换行符 */
|
|
|
} else {
|
|
|
qingkonghuanche(); /* 输入过长时清理缓冲区 */
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int duquzhengshu(void) {
|
|
|
char huanchongqu[64];
|
|
|
duquzifuchuan(huanchongqu, 64);
|
|
|
return atoi(huanchongqu);
|
|
|
}
|
|
|
|
|
|
double duqufudian(void) {
|
|
|
char huanchongqu[64];
|
|
|
duquzifuchuan(huanchongqu, 64);
|
|
|
return atof(huanchongqu);
|
|
|
}
|
|
|
|
|
|
void qudangqianshijian(char *shijianchuan, int daxiao) {
|
|
|
time_t dangqian;
|
|
|
struct tm *shijianjiegou;
|
|
|
dangqian = time(NULL);
|
|
|
shijianjiegou = localtime(&dangqian);
|
|
|
strftime(shijianchuan, (size_t)daxiao, "%Y-%m-%d %H:%M:%S", shijianjiegou);
|
|
|
}
|
|
|
|
|
|
int shifoucunzaiwenjian(const char *wenjianming) {
|
|
|
FILE *wenjian;
|
|
|
wenjian = fopen(wenjianming, "r");
|
|
|
if (wenjian != NULL) {
|
|
|
fclose(wenjian);
|
|
|
return 1; /* 文件存在 */
|
|
|
}
|
|
|
return 0; /* 文件不存在 */
|
|
|
}
|
|
|
|
|
|
void chushihuaxitong(YinhangXitong *xitong) {
|
|
|
xitong->zhiyuanshu = 0;
|
|
|
xitong->kehushu = 0;
|
|
|
xitong->kashu = 0;
|
|
|
xitong->jiaoyishu = 0;
|
|
|
xitong->paiduishu = 0;
|
|
|
xitong->wangdianshu = 0;
|
|
|
xitong->luxianshu = 0;
|
|
|
}
|
|
|
|
|
|
void jiazaizhiyuan(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[512];
|
|
|
Zhiyuan z;
|
|
|
|
|
|
xitong->zhiyuanshu = 0;
|
|
|
wenjian = fopen("职员信息.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) { /* 逐行读入文本 */
|
|
|
if (sscanf(hang, "%d|%31[^|]|%7[^|]|%d|%31[^|]|%31[^|]|%31[^|]|%127[^\n]",
|
|
|
&z.zhiyuanid, z.xingming, z.xingbie, &z.nianling, z.gangwei, z.dianhua, z.mima, z.dizhi) == 8) { /* 解析一条完整记录 */
|
|
|
if (xitong->zhiyuanshu < 200) {
|
|
|
xitong->zhiyuanliebiao[xitong->zhiyuanshu] = z; /* 写入内存数组 */
|
|
|
xitong->zhiyuanshu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunzhiyuan(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
wenjian = fopen("职员信息.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
for (i = 0; i < xitong->zhiyuanshu; i++) { /* 把数组逐条写回文件 */
|
|
|
fprintf(wenjian, "%d|%s|%s|%d|%s|%s|%s|%s\n",
|
|
|
xitong->zhiyuanliebiao[i].zhiyuanid,
|
|
|
xitong->zhiyuanliebiao[i].xingming,
|
|
|
xitong->zhiyuanliebiao[i].xingbie,
|
|
|
xitong->zhiyuanliebiao[i].nianling,
|
|
|
xitong->zhiyuanliebiao[i].gangwei,
|
|
|
xitong->zhiyuanliebiao[i].dianhua,
|
|
|
xitong->zhiyuanliebiao[i].mima,
|
|
|
xitong->zhiyuanliebiao[i].dizhi);
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaikehu(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[1024];
|
|
|
Kehu k;
|
|
|
char kazifuchuan[128];
|
|
|
char *fen;
|
|
|
int i;
|
|
|
|
|
|
xitong->kehushu = 0;
|
|
|
wenjian = fopen("客户信息.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
for (i = 0; i < 10; i++) { /* 先清空银行卡编号数组 */
|
|
|
k.yinhangkabianhao[i] = 0;
|
|
|
}
|
|
|
|
|
|
if (sscanf(hang, "%d|%31[^|]|%7[^|]|%d|%127[^|]|%lf|%lf|%31[^|]|%15[^|]|%d|%lf|%127[^|]|%31[^|]|%d|%lf|%lf",
|
|
|
&k.zhuzhanghao,
|
|
|
k.xingming,
|
|
|
k.leixing,
|
|
|
&k.yinhangkashuliang,
|
|
|
kazifuchuan,
|
|
|
&k.chuxuyue,
|
|
|
&k.daikuanyue,
|
|
|
k.dianhua,
|
|
|
k.kaihuriqi,
|
|
|
&k.xinyong,
|
|
|
&k.jinrongzichan,
|
|
|
k.dizhi,
|
|
|
k.mima,
|
|
|
&k.shenfenzheng,
|
|
|
&k.yueshouru,
|
|
|
&k.yuezhichu) == 16) {
|
|
|
|
|
|
if (strcmp(kazifuchuan, "-") != 0) {
|
|
|
fen = strtok(kazifuchuan, ","); /* 以逗号拆分卡号列表 */
|
|
|
i = 0;
|
|
|
while (fen != NULL && i < 10) {
|
|
|
k.yinhangkabianhao[i] = atoi(fen);
|
|
|
i++;
|
|
|
fen = strtok(NULL, ",");
|
|
|
}
|
|
|
k.yinhangkashuliang = i;
|
|
|
} else {
|
|
|
k.yinhangkashuliang = 0;
|
|
|
}
|
|
|
|
|
|
if (xitong->kehushu < 500) {
|
|
|
xitong->kehuliebiao[xitong->kehushu] = k;
|
|
|
xitong->kehushu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunkehu(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
int j;
|
|
|
char kazifuchuan[256];
|
|
|
char linshi[32];
|
|
|
|
|
|
wenjian = fopen("客户信息.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < xitong->kehushu; i++) {
|
|
|
kazifuchuan[0] = '\0';
|
|
|
if (xitong->kehuliebiao[i].yinhangkashuliang <= 0) {
|
|
|
strcpy(kazifuchuan, "-");
|
|
|
} else {
|
|
|
for (j = 0; j < xitong->kehuliebiao[i].yinhangkashuliang && j < 10; j++) { /* 组合卡号字符串 */
|
|
|
sprintf(linshi, "%d", xitong->kehuliebiao[i].yinhangkabianhao[j]);
|
|
|
strcat(kazifuchuan, linshi);
|
|
|
if (j != xitong->kehuliebiao[i].yinhangkashuliang - 1) {
|
|
|
strcat(kazifuchuan, ",");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fprintf(wenjian, "%d|%s|%s|%d|%s|%.2f|%.2f|%s|%s|%d|%.2f|%s|%s|%d|%.2f|%.2f\n",
|
|
|
xitong->kehuliebiao[i].zhuzhanghao,
|
|
|
xitong->kehuliebiao[i].xingming,
|
|
|
xitong->kehuliebiao[i].leixing,
|
|
|
xitong->kehuliebiao[i].yinhangkashuliang,
|
|
|
kazifuchuan,
|
|
|
xitong->kehuliebiao[i].chuxuyue,
|
|
|
xitong->kehuliebiao[i].daikuanyue,
|
|
|
xitong->kehuliebiao[i].dianhua,
|
|
|
xitong->kehuliebiao[i].kaihuriqi,
|
|
|
xitong->kehuliebiao[i].xinyong,
|
|
|
xitong->kehuliebiao[i].jinrongzichan,
|
|
|
xitong->kehuliebiao[i].dizhi,
|
|
|
xitong->kehuliebiao[i].mima,
|
|
|
xitong->kehuliebiao[i].shenfenzheng,
|
|
|
xitong->kehuliebiao[i].yueshouru,
|
|
|
xitong->kehuliebiao[i].yuezhichu);
|
|
|
}
|
|
|
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaika(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[512];
|
|
|
Yinhangka ka;
|
|
|
|
|
|
xitong->kashu = 0;
|
|
|
wenjian = fopen("银行卡信息.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
if (sscanf(hang, "%d|%d|%15[^|]|%lf|%lf|%15[^|]|%15[^\n]",
|
|
|
&ka.kabianhao,
|
|
|
&ka.zhuzhanghao,
|
|
|
ka.kaleixing,
|
|
|
&ka.yue,
|
|
|
&ka.lilv,
|
|
|
ka.kaihuriqi,
|
|
|
ka.zhuangtai) == 7) {
|
|
|
if (xitong->kashu < 1200) {
|
|
|
xitong->kaliebiao[xitong->kashu] = ka;
|
|
|
xitong->kashu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunka(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
wenjian = fopen("银行卡信息.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
for (i = 0; i < xitong->kashu; i++) {
|
|
|
fprintf(wenjian, "%d|%d|%s|%.2f|%.4f|%s|%s\n",
|
|
|
xitong->kaliebiao[i].kabianhao,
|
|
|
xitong->kaliebiao[i].zhuzhanghao,
|
|
|
xitong->kaliebiao[i].kaleixing,
|
|
|
xitong->kaliebiao[i].yue,
|
|
|
xitong->kaliebiao[i].lilv,
|
|
|
xitong->kaliebiao[i].kaihuriqi,
|
|
|
xitong->kaliebiao[i].zhuangtai);
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaijiaoyi(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[1024];
|
|
|
Jiaoyi j;
|
|
|
|
|
|
xitong->jiaoyishu = 0;
|
|
|
wenjian = fopen("交易记录.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
if (sscanf(hang, "%d|%d|%d|%15[^|]|%lf|%lf|%19[^|]|%7[^|]|%63[^\n]",
|
|
|
&j.jiaoyiid,
|
|
|
&j.zhuzhanghao,
|
|
|
&j.kabianhao,
|
|
|
j.yewuleixing,
|
|
|
&j.jine,
|
|
|
&j.yuehou,
|
|
|
j.shijian,
|
|
|
j.shouruzhichu,
|
|
|
j.beizhu) == 9) {
|
|
|
if (xitong->jiaoyishu < 5000) {
|
|
|
xitong->jiaoyiliebiao[xitong->jiaoyishu] = j;
|
|
|
xitong->jiaoyishu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunjiaoyi(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
|
|
|
wenjian = fopen("交易记录.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < xitong->jiaoyishu; i++) {
|
|
|
fprintf(wenjian, "%d|%d|%d|%s|%.2f|%.2f|%s|%s|%s\n",
|
|
|
xitong->jiaoyiliebiao[i].jiaoyiid,
|
|
|
xitong->jiaoyiliebiao[i].zhuzhanghao,
|
|
|
xitong->jiaoyiliebiao[i].kabianhao,
|
|
|
xitong->jiaoyiliebiao[i].yewuleixing,
|
|
|
xitong->jiaoyiliebiao[i].jine,
|
|
|
xitong->jiaoyiliebiao[i].yuehou,
|
|
|
xitong->jiaoyiliebiao[i].shijian,
|
|
|
xitong->jiaoyiliebiao[i].shouruzhichu,
|
|
|
xitong->jiaoyiliebiao[i].beizhu);
|
|
|
}
|
|
|
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaipaidui(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[512];
|
|
|
Paidui p;
|
|
|
|
|
|
xitong->paiduishu = 0;
|
|
|
wenjian = fopen("排队记录.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
if (sscanf(hang, "%d|%d|%7[^|]|%7[^|]|%15[^|]|%d|%19[^\n]",
|
|
|
&p.quhaoid,
|
|
|
&p.zhuzhanghao,
|
|
|
p.kehuileixing,
|
|
|
p.chuangkou,
|
|
|
p.zhuangtai,
|
|
|
&p.pingfen,
|
|
|
p.shijian) == 7) {
|
|
|
if (xitong->paiduishu < 3000) {
|
|
|
xitong->paiduiliebiao[xitong->paiduishu] = p;
|
|
|
xitong->paiduishu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunpaidui(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
|
|
|
wenjian = fopen("排队记录.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < xitong->paiduishu; i++) {
|
|
|
fprintf(wenjian, "%d|%d|%s|%s|%s|%d|%s\n",
|
|
|
xitong->paiduiliebiao[i].quhaoid,
|
|
|
xitong->paiduiliebiao[i].zhuzhanghao,
|
|
|
xitong->paiduiliebiao[i].kehuileixing,
|
|
|
xitong->paiduiliebiao[i].chuangkou,
|
|
|
xitong->paiduiliebiao[i].zhuangtai,
|
|
|
xitong->paiduiliebiao[i].pingfen,
|
|
|
xitong->paiduiliebiao[i].shijian);
|
|
|
}
|
|
|
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaiwangdian(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[512];
|
|
|
Wangdian w;
|
|
|
|
|
|
xitong->wangdianshu = 0;
|
|
|
wenjian = fopen("网点信息.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
if (sscanf(hang, "%d|%31[^|]|%127[^|]|%d",
|
|
|
&w.wangdianid,
|
|
|
w.mingcheng,
|
|
|
w.dizhi,
|
|
|
&w.yewurenshu) == 4) {
|
|
|
if (xitong->wangdianshu < 120) {
|
|
|
xitong->wangdianliebiao[xitong->wangdianshu] = w;
|
|
|
xitong->wangdianshu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunwangdian(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
|
|
|
wenjian = fopen("网点信息.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < xitong->wangdianshu; i++) {
|
|
|
fprintf(wenjian, "%d|%s|%s|%d\n",
|
|
|
xitong->wangdianliebiao[i].wangdianid,
|
|
|
xitong->wangdianliebiao[i].mingcheng,
|
|
|
xitong->wangdianliebiao[i].dizhi,
|
|
|
xitong->wangdianliebiao[i].yewurenshu);
|
|
|
}
|
|
|
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazailuxian(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
char hang[256];
|
|
|
Luxian l;
|
|
|
|
|
|
xitong->luxianshu = 0;
|
|
|
wenjian = fopen("网点路径.txt", "r");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (fgets(hang, sizeof(hang), wenjian) != NULL) {
|
|
|
if (sscanf(hang, "%d|%d|%d|%d",
|
|
|
&l.qidianid,
|
|
|
&l.zhongdianid,
|
|
|
&l.juli,
|
|
|
&l.kehang) == 4) {
|
|
|
if (xitong->luxianshu < 400) {
|
|
|
xitong->luxianliebiao[xitong->luxianshu] = l;
|
|
|
xitong->luxianshu++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void baocunluxian(YinhangXitong *xitong) {
|
|
|
FILE *wenjian;
|
|
|
int i;
|
|
|
|
|
|
wenjian = fopen("网点路径.txt", "w");
|
|
|
if (wenjian == NULL) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < xitong->luxianshu; i++) {
|
|
|
fprintf(wenjian, "%d|%d|%d|%d\n",
|
|
|
xitong->luxianliebiao[i].qidianid,
|
|
|
xitong->luxianliebiao[i].zhongdianid,
|
|
|
xitong->luxianliebiao[i].juli,
|
|
|
xitong->luxianliebiao[i].kehang);
|
|
|
}
|
|
|
|
|
|
fclose(wenjian);
|
|
|
}
|
|
|
|
|
|
void jiazaisuoyoushuju(YinhangXitong *xitong) {
|
|
|
jiazaizhiyuan(xitong);
|
|
|
jiazaikehu(xitong);
|
|
|
jiazaika(xitong);
|
|
|
jiazaijiaoyi(xitong);
|
|
|
jiazaipaidui(xitong);
|
|
|
jiazaiwangdian(xitong);
|
|
|
jiazailuxian(xitong);
|
|
|
}
|
|
|
|
|
|
void baocunsuoyoushuju(YinhangXitong *xitong) {
|
|
|
baocunzhiyuan(xitong);
|
|
|
baocunkehu(xitong);
|
|
|
baocunka(xitong);
|
|
|
baocunjiaoyi(xitong);
|
|
|
baocunpaidui(xitong);
|
|
|
baocunwangdian(xitong);
|
|
|
baocunluxian(xitong);
|
|
|
}
|
|
|
|
|
|
/* 查询辅助 */
|
|
|
int zhaozhiyuan(YinhangXitong *xitong, int zhiyuanid) {
|
|
|
int i;
|
|
|
for (i = 0; i < xitong->zhiyuanshu; i++) {
|
|
|
if (xitong->zhiyuanliebiao[i].zhiyuanid == zhiyuanid) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return -1; /* 没找到返回-1 */
|
|
|
}
|
|
|
|
|
|
int zhaokehu(YinhangXitong *xitong, int zhuzhanghao) {
|
|
|
int i;
|
|
|
for (i = 0; i < xitong->kehushu; i++) {
|
|
|
if (xitong->kehuliebiao[i].zhuzhanghao == zhuzhanghao) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return -1; /* 没找到返回-1 */
|
|
|
}
|
|
|
|
|
|
int zhaoka(YinhangXitong *xitong, int kabianhao) {
|
|
|
int i;
|
|
|
for (i = 0; i < xitong->kashu; i++) {
|
|
|
if (xitong->kaliebiao[i].kabianhao == kabianhao) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return -1; /* 没找到返回-1 */
|
|
|
}
|
|
|
|
|
|
int zhaowangdian(YinhangXitong *xitong, int wangdianid) {
|
|
|
int i;
|
|
|
for (i = 0; i < xitong->wangdianshu; i++) {
|
|
|
if (xitong->wangdianliebiao[i].wangdianid == wangdianid) {
|
|
|
return i;
|
|
|
}
|
|
|
}
|
|
|
return -1; /* 没找到返回-1 */
|
|
|
}
|
|
|
|
|
|
void kehutianjiaka(Kehu *kehu, int kabianhao) {
|
|
|
int i;
|
|
|
for (i = 0; i < kehu->yinhangkashuliang && i < 10; i++) {
|
|
|
if (kehu->yinhangkabianhao[i] == kabianhao) {
|
|
|
return; /* 已存在则不重复添加 */
|
|
|
}
|
|
|
}
|
|
|
if (kehu->yinhangkashuliang < 10) {
|
|
|
kehu->yinhangkabianhao[kehu->yinhangkashuliang] = kabianhao;
|
|
|
kehu->yinhangkashuliang++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void kehuquchuaka(Kehu *kehu, int kabianhao) {
|
|
|
int i;
|
|
|
int j;
|
|
|
for (i = 0; i < kehu->yinhangkashuliang; i++) {
|
|
|
if (kehu->yinhangkabianhao[i] == kabianhao) {
|
|
|
for (j = i; j < kehu->yinhangkashuliang - 1; j++) {
|
|
|
kehu->yinhangkabianhao[j] = kehu->yinhangkabianhao[j + 1];
|
|
|
}
|
|
|
kehu->yinhangkabianhao[kehu->yinhangkashuliang - 1] = 0;
|
|
|
kehu->yinhangkashuliang--;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int shengchengjiaoyiid(YinhangXitong *xitong) {
|
|
|
int maxid;
|
|
|
int i;
|
|
|
maxid = 500000;
|
|
|
for (i = 0; i < xitong->jiaoyishu; i++) {
|
|
|
if (xitong->jiaoyiliebiao[i].jiaoyiid > maxid) {
|
|
|
maxid = xitong->jiaoyiliebiao[i].jiaoyiid;
|
|
|
}
|
|
|
}
|
|
|
return maxid + 1; /* 在当前最大流水号基础上+1 */
|
|
|
}
|
|
|
|
|
|
int shengchengquhaoid(YinhangXitong *xitong) {
|
|
|
int maxid;
|
|
|
int i;
|
|
|
maxid = 70000;
|
|
|
for (i = 0; i < xitong->paiduishu; i++) {
|
|
|
if (xitong->paiduiliebiao[i].quhaoid > maxid) {
|
|
|
maxid = xitong->paiduiliebiao[i].quhaoid;
|
|
|
}
|
|
|
}
|
|
|
return maxid + 1; /* 在当前最大取号基础上+1 */
|
|
|
}
|
|
|
|
|
|
void xierujiaoyi(YinhangXitong *xitong, int zhuzhanghao, int kabianhao, const char *yewuleixing, double jine, double yuehou, const char *shouruzhichu, const char *beizhu) {
|
|
|
Jiaoyi j;
|
|
|
if (xitong->jiaoyishu >= 5000) {
|
|
|
return; /* 交易数组已满则放弃写入 */
|
|
|
}
|
|
|
j.jiaoyiid = shengchengjiaoyiid(xitong);
|
|
|
j.zhuzhanghao = zhuzhanghao;
|
|
|
j.kabianhao = kabianhao;
|
|
|
strcpy(j.yewuleixing, yewuleixing);
|
|
|
j.jine = jine;
|
|
|
j.yuehou = yuehou;
|
|
|
qudangqianshijian(j.shijian, sizeof(j.shijian));
|
|
|
strcpy(j.shouruzhichu, shouruzhichu);
|
|
|
strcpy(j.beizhu, beizhu);
|
|
|
xitong->jiaoyiliebiao[xitong->jiaoyishu] = j; /* 新交易写入数组末尾 */
|
|
|
xitong->jiaoyishu++;
|
|
|
}
|
|
|
|
|
|
/* 打印函数 */
|
|
|
void xianshizhiyuan(const Zhiyuan *z) {
|
|
|
printf("ID:%d 姓名:%s 性别:%s 年龄:%d 岗位:%s 电话:%s 地址:%s\n",
|
|
|
z->zhiyuanid, z->xingming, z->xingbie, z->nianling, z->gangwei, z->dianhua, z->dizhi);
|
|
|
}
|
|
|
|
|
|
void xianshikehu(const Kehu *k) {
|
|
|
int i;
|
|
|
printf("主账户:%d 姓名:%s 类型:%s 储蓄:%.2f 贷款:%.2f 信用:%d 资产:%.2f 电话:%s 开户:%s 地址:%s\n",
|
|
|
k->zhuzhanghao, k->xingming, k->leixing, k->chuxuyue, k->daikuanyue, k->xinyong, k->jinrongzichan, k->dianhua, k->kaihuriqi, k->dizhi);
|
|
|
printf("银行卡数量:%d 编号:", k->yinhangkashuliang);
|
|
|
for (i = 0; i < k->yinhangkashuliang; i++) {
|
|
|
printf("%d", k->yinhangkabianhao[i]);
|
|
|
if (i != k->yinhangkashuliang - 1) {
|
|
|
printf(",");
|
|
|
}
|
|
|
}
|
|
|
printf("\n");
|
|
|
}
|
|
|
|
|
|
void xianshika(const Yinhangka *ka) {
|
|
|
printf("卡号:%d 主账户:%d 类型:%s 余额:%.2f 利率:%.4f 开户:%s 状态:%s\n",
|
|
|
ka->kabianhao, ka->zhuzhanghao, ka->kaleixing, ka->yue, ka->lilv, ka->kaihuriqi, ka->zhuangtai);
|
|
|
}
|
|
|
|
|
|
void xianshijiaoyi(const Jiaoyi *j) {
|
|
|
printf("流水:%d 主账户:%d 卡号:%d 类型:%s 金额:%.2f 余额:%.2f 时间:%s 收支:%s 备注:%s\n",
|
|
|
j->jiaoyiid, j->zhuzhanghao, j->kabianhao, j->yewuleixing, j->jine, j->yuehou, j->shijian, j->shouruzhichu, j->beizhu);
|
|
|
}
|
|
|
|
|
|
void xianshipaidui(const Paidui *p) {
|
|
|
printf("取号:%d 主账户:%d 客户类型:%s 窗口:%s 状态:%s 评分:%d 时间:%s\n",
|
|
|
p->quhaoid, p->zhuzhanghao, p->kehuileixing, p->chuangkou, p->zhuangtai, p->pingfen, p->shijian);
|
|
|
}
|
|
|
|
|
|
void xianshiwangdian(const Wangdian *w) {
|
|
|
printf("网点ID:%d 名称:%s 地址:%s 当前业务人数:%d\n", w->wangdianid, w->mingcheng, w->dizhi, w->yewurenshu);
|
|
|
}
|
|
|
|
|
|
void zhanshimorenwenjianming(void) {
|
|
|
printf("\n测试数据文件:\n");
|
|
|
printf("1. 职员信息.txt\n");
|
|
|
printf("2. 客户信息.txt\n");
|
|
|
printf("3. 银行卡信息.txt\n");
|
|
|
printf("4. 交易记录.txt\n");
|
|
|
printf("5. 排队记录.txt\n");
|
|
|
printf("6. 网点信息.txt\n");
|
|
|
printf("7. 网点路径.txt\n");
|
|
|
}
|
|
|
|
|
|
/* 登录 */
|
|
|
int guanliyuanlogin(void) {
|
|
|
char zhanghao[32];
|
|
|
char mima[32];
|
|
|
|
|
|
printf("登录提示:默认管理员账号 admin,密码 123456\n");
|
|
|
printf("管理员账号: ");
|
|
|
duquzifuchuan(zhanghao, 32);
|
|
|
printf("管理员密码: ");
|
|
|
duquzifuchuan(mima, 32);
|
|
|
|
|
|
if (strcmp(zhanghao, "admin") == 0 && strcmp(mima, "123456") == 0) { /* 固定管理员账号密码 */
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int zhiyuanlogin(YinhangXitong *xitong, int *zhiyuanxuhao) {
|
|
|
int id;
|
|
|
char mima[32];
|
|
|
int xuhao;
|
|
|
|
|
|
printf("登录提示:默认职员ID 1001(或1002),密码 123456\n");
|
|
|
printf("职员ID: ");
|
|
|
id = duquzhengshu();
|
|
|
printf("密码: ");
|
|
|
duquzifuchuan(mima, 32);
|
|
|
|
|
|
xuhao = zhaozhiyuan(xitong, id); /* 先按职员ID定位 */
|
|
|
if (xuhao >= 0 && strcmp(xitong->zhiyuanliebiao[xuhao].mima, mima) == 0) {
|
|
|
*zhiyuanxuhao = xuhao; /* 返回登录职员在数组中的下标 */
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int kehulogin(YinhangXitong *xitong, int *kehuxuhao) {
|
|
|
int zhanghao;
|
|
|
char mima[32];
|
|
|
int xuhao;
|
|
|
|
|
|
printf("登录提示:默认客户主账户 20001(或20002),密码 123456\n");
|
|
|
printf("客户主账户: ");
|
|
|
zhanghao = duquzhengshu();
|
|
|
printf("密码: ");
|
|
|
duquzifuchuan(mima, 32);
|
|
|
|
|
|
xuhao = zhaokehu(xitong, zhanghao); /* 先按主账户定位 */
|
|
|
if (xuhao >= 0 && strcmp(xitong->kehuliebiao[xuhao].mima, mima) == 0) {
|
|
|
*kehuxuhao = xuhao; /* 返回登录客户在数组中的下标 */
|
|
|
return 1;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|