scanf(\switch (choose) {
case '1': continue;//继续取款
case '2': PrintBalance(); system(\输出余额 case '3': return;//返回主函数
case '0': FreeData(); exit(0);//退出系统 default:
PR(\响铃 printf(\输入错误,请重新选择\\n\ //解决用户可能的输入错误 system(\ } } } while (1); }
/**********取款**********/ void WithdrawalOt(long money) { if (now_acc->balance < money) { }
}
PR(\响铃
PR(\您的余额不足%ld\\n\\n\system(\return;
PR(\正在处理,请稍候...\\n\now_acc->balance -= money; Save();
Log(-money, now_acc->no); PR(\取款成功\\n\\n\system(\
/**********存款**********/ void Depositing() { long money; do { PR(\请输入存款金额(50的倍数),单次存款金额不得超过20000元:\ fflush(stdin); scanf(\ if (money < 0 || money > 20000 || money % 50) {//解决输入金额为负数、超过20000、不是50的倍数的情况 PR(\响铃
}
}
PR(\输入有误,请重新输入\\n\system(\continue;
PR(\正在处理,请稍候...\\n\ now_acc->balance += money; Save();//保存账户数据 Log(money, now_acc->no);//保存存取数据 PR(\存款成功\\n\\n\ system(\ break; } while (1);
/**********保存账户信息**********/ void Save() { FILE *fp; int i = 1; char ch; if (!(fp = fopen(\ { PR(\响铃 PR(\读取帐户信息失败!accounts.txt无法打开\\n\ exit(0); }
for (Account *i = head; i; i = i->next)//写入账户信息 fprintf(fp, \ fclose(fp); }
/**********修改密码**********/ void Modifiy() { char oldpass[7], newpass1[7], newpass2[7]; do {
PR(\请输入原密码:\fflush(stdin); gets(oldpass);
if (strlen(oldpass) != 6) { PR(\密码应为6位\\n\ system(\ continue; }
if (strcmp(oldpass, now_acc->password))
{//解决密码输入有误,出于安全性的考虑,原密码输入错误时不提供返回功能 PR(\密码有误,请重新输入\\n\\n\ system(\ continue; } else break; } while (1); do { PR(\请输入六位新密码:\ fflush(stdin); scanf(\ if (strlen(newpass1) != 6) {
}
PR(\密码应为6位\\n\system(\continue;
PR(\请再次输入新密码:\fflush(stdin);
scanf(\
if (strcmp(newpass1, newpass2))
{//两次输入密码不一致时 PR(\密码不一致(输入*取消修改)\\n\ fflush(stdin); if (getchar() == '*') break; } else {//输入一致时 strcpy(now_acc->password, newpass1);//修改密码 Save();//保存用户数据 PR(\密码修改成功!\\n\\n\ system(\ break; } } while (1); }
/**********转账**********/ void Transfer() { Account* aimsite;//转入卡号在链表中的地址
long money;//转账金额 if (now_acc->balance < 50) {//当账户余额不足50时 PR(\响铃 PR(\您的余额不足50,无法转账\\n\\n\ system(\ return; } do {
char aim[17];//转入卡号
PR(\请输入转入卡/折号(16位):\fflush(stdin); gets(aim);
if (strlen(aim) != 16) {
PR(\卡号应为16位\\n\ system(\ continue; } if (!(strcmp(aim, now_acc->no))) {//解决转账双方卡号相同的情况 PR(\双方账户相同,请核对后重试(输入*取消转账)\\n\ if (getchar() == '*') return; continue; } if (aimsite = FindbyNo(aim)) break;//找到转入卡号对应信息时 else { PR(\未找到该卡号,输入*取消转账\\n\ if (getchar() == '*') return; continue; }
} while (1);
PR(\汇款目标用户名为:%s\\n\PR(\是否确认无误?(输入*确认,否则退出)\fflush(stdin);
if (getchar() != '*') return; do {
}
PR(\请输入转账金额(50的倍数):\fflush(stdin);
scanf(\
if (now_acc->balance < money) {
PR(\响铃 PR(\您的余额不足%lu,请重新输入转账金额\\n\\n\ system(\ continue; }
if (money % 50)
{//当输入金额不是50的倍数时 PR(\响铃 PR(\输入有误,请重新输入\\n\ continue; }
PR(\转账中,请稍候...\\n\ now_acc->balance -= money; aimsite->balance += money; Save();//保存账户数据 Log(-money, now_acc->no);//当前账户存取记录 Log(money, aimsite->no);//转入卡存取记录 PR(\转账成功\\n\\n\ system(\ break; } while (1);
/**********掩盖部分用户名**********/ char *CoverUpName(const char *name) { char temp[20]; strcpy(temp, name);
int words = 0;//用于存放姓名的字数 for (char* i = temp; *i; i += 2) words++;//计算姓名的字数 switch (words) {
case 2: temp[0] = '*', temp[1] = '*';//当姓名字数为2时,掩盖姓 strcpy(temp + 1, temp + 2);//消除一个*号 break; case 3: temp[2] = '*', temp[3] = '*';//当姓名字数为3时,掩盖名字中的第一个字 strcpy(temp + 3, temp + 4);//消除一个*号