exit(0); }
{//获取当前日期 time_t rawtime; struct tm * timeinfo;
time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构 strftime(CruuentTime, 11, \格式化时间 }
fgets(ArchiveTime, 11, fp); fclose(fp);
if (strcmp(ArchiveTime, CruuentTime))
{//若档案日期与当前日期不同,则说明档案已过期或无档案,新建记录。 if (!(fp = fopen(\ { }
PR(\响铃 PR(\ exit(0); }
fprintf(fp, \
else//若记录日期与当前日期相同,则追加记录 { if (!(fp = fopen(\ { PR(\响铃 PR(\ exit(0); } } //添加记录 fprintf(fp, \ fclose(fp); }
/**********查询函数主菜单**********/ void Demand() { char choose; do { system(\ PrintBalance(); PR(\ +---------+-+\\n\ PR(\ |查询明细\\32|1|\\n\ PR(\ +---------+-+\\n\\n\
}
PR(\ +---------+-+\\n\
PR(\退出系统| | 返 回 \\32|2|\\n\ PR(\ +---------+-+\\n\\n\ PR(\请选择服务:\ fflush(stdin); choose = getchar(); switch (choose) { case '1': Printetail(); break;//查询明细 case '2': return;//返回 case '0': FreeData(); exit(0);//退出系统 default: printf(\输入错误,请重新选择\\n\ //解决用户可能的输入错误 system(\ }
} while (1);
/**********输出余额**********/ void PrintBalance() { system(\ PR(\ PR(\您的账户余额 \\32|%-15.2f|\\n\ PR(\}
/**********输出明细**********/ void Printetail() { FILE *fp; Record temp; int flag = 1;//当有记录时,置0 if (!(fp = fopen(\ {
PR(\无存取记录,请进行存取后再使用本功能\\n\\n\ system(\ return; }
system(\
PR(\
PR(\ 日期 | 存取金额 |\\n\PR(\{ if (!(strcmp(temp.no, now_acc->no))) { flag = 0;
}
PR(\ } }
PR(\ 日期 | 存取金额 |\\n\未免记录太多看不到表头,在最后加个表头 PR(\if (flag) { system(\无记录时,清除表头 PR(\该卡号未有任何存取记录\\n\\n\ system(\ return; }
system(\当有存取记录时,输出后等待
/**********将存款记录写入文件中**********/ void Log(double money, const char *no) { FILE *fp;
Date CruuentTime;//当前日期 if (!money)//存取为零时 return;
if (!(fp = fopen(\{
PR(\响铃 PR(\ exit(0); } {//获取当前日期 time_t rawtime; struct tm * timeinfo; time(&rawtime);//获取时间,以秒计,从1970年1月1日起算,存于rawtime timeinfo = localtime(&rawtime);//转为当地时间,tm 时间结构 CruuentTime.year = timeinfo->tm_year + 1900, CruuentTime.month = timeinfo->tm_mon + 1, CruuentTime.day = timeinfo->tm_mday; } fprintf(fp, \no, CruuentTime.year, CruuentTime.month, CruuentTime.day, money); fclose(fp); }
/**********取款主界面**********/ void Withdrawal() { char choose; if (now_acc->balance < 50.0) {//当余额不足50时,无法取款
} do {
PR(\响铃
PR(\您的余额不足50,无法取款\\n\\n\system(\return;
system(\PR(\
PR(\ +---------+-+\\n\
PR(\ 100 | | 2000 \\32|5|\\n\PR(\ +---------+-+\\n\\n\PR(\ +---------+-+\\n\
PR(\ 500 | | 5000 \\32|6|\\n\PR(\ +---------+-+\\n\\n\PR(\ +---------+-+\\n\
PR(\ 1000 | |其它金额\\32|7|\\n\PR(\ +---------+-+\\n\\n\PR(\ +---------+-+\\n\
PR(\退出系统| |返 回\\32|0|\\n\PR(\ +---------+-+\\n\\n\PR(\请选择服务:\fflush(stdin);
scanf(\switch (choose) {
case '1': WithdrawalOt(100); break; case '2': WithdrawalOt(500); break; case '3': WithdrawalOt(1000); break; case '4': FreeData(); exit(0);
case '5': WithdrawalOt(2000); break; case '6': WithdrawalOt(5000); break; case '7': do { long money;
PR(\请输入取款金额(50的倍数):\fflush(stdin);
scanf(\
if (money < 0 || money % 50)
{//解决输入金额为负数、不是50的倍数的情况 PR(\输入有误,请重新输入\\n\ system(\ continue; }
WithdrawalOt(money); break; } while (1); break; case '0': return; default: }
PR(\响铃
printf(\输入错误,请重新选择\\n\ //解决用户可能的输入错误 system(\continue;
{//取款完成后的菜单 char choose; system(\ PR(\ PR(\ +---------+-+\\n\ PR(\ |继续取款\\32|1|\\n\ PR(\ +---------+-+\\n\\n\ PR(\ +---------+-+\\n\ PR(\ |显示余额\\32|2|\\n\ PR(\ +---------+-+\\n\\n\ PR(\ \\n\ PR(\ \\n\ PR(\ \\n\\n\ PR(\ +---------+-+\\n\ PR(\退出系统| |返 回\\32|3|\\n\ PR(\ +---------+-+\\n\\n\ PR(\请选择服务:\ fflush(stdin); 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); }
/**********取款**********/
C语言模拟ATM机
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)