3条回答 默认 最新
- CSDN专家-link 2021-06-04 14:07关注
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #include <conio.h> #include <windows.h> #define N 20 void Initial(); //初始化界面 void BuildUser(); //管理员新建用户 int UserLogin(); //用户登陆界面 void AdminLogin(); //管理员登陆界面 void Menu(int n); //主界菜单 void ChangePassword(); //密码修改 typedef struct User //用户数据结构体 { char UserID[N]; //用户ID char Name[N]; //姓名 char UserPassword[N]; //用户密码 float money; //用户当前余额 char time[N]; //用户最后一次使用系统时间 }USERDATA; typedef struct D //用户操作日志结构体 { char id[N]; char o; char money; char balance; char tim[N]; }PDATA; float MoneySave(struct User *p); //存款函数 float DrawMoney(struct User *p); //取款函数 float Trans(struct User *p); //转账函数 void Balance(); //查看余额 USERDATA userdata[500]; int main() { system("cls"); //清屏 system("title ATM终端模拟系统"); system("color 0b"); Initial(); //printf("调试"); return 0; } void Initial() { system("cls"); int a,ret,b; do{ //错误输入非1或2,重新输入 printf("\n\n\n \n"); printf(" 欢迎使用 ATM 终端服务系统\n\n"); printf(" ------------------------------------------------- \n\n"); printf(" 请输入您的选择 :\n\n"); printf(" ------------------------------------------------- \n\n"); //printf(" _________________________________________________\n"); printf(" 1 用户登录 \n\n\n"); //printf(" _________________________________________________\n"); printf(" 2 前台服务 \n\n\n"); printf(" 3 退出系统 \n\n\n"); printf(" -------------------------------------------------\n"); printf("\t\t\t\t\t\t\t"); system("date /t"); printf("\t\t\t\t\t\t\t"); system("time /t"); do{ //实现检错,错误输入重新输 //printf(" 重新输入您的选择 :\n"); printf(" ------------"); scanf("%d",&a); switch(a) //初始选项 非1,2重新输入。 { case 1: b=1;break; case 2: b=1;break; case 3: exit(0);break; default: printf(" "); printf("错误输入,请重试。\n");break; } getchar(); }while(b!=1); if(a==1) { ret=UserLogin(); //用户登录 Menu(ret); //菜单 ret=1; } else if(a==2) { system("cls"); //清屏 AdminLogin(); ret=1; } }while(ret!=1); } int UserLogin() { char a[N],b[N]; FILE *fp; if((fp=fopen("iddata.txt","a+"))==NULL) //打开文件 { printf("打开失败\n"); exit(0); } int i=0,j,k=0,s; do{ fscanf(fp,"%s%s%s%f",&userdata[i].Name,&userdata[i].UserID,&userdata[i].UserPassword,&userdata[i].money);//将文件中的数据读入内存 i++; }while(!feof(fp)); //判断是否到文件结尾 fclose(fp); //关闭文件 system("cls"); printf("\n\n\n\n\n 请输入用户账号:"); //printf(" "); gets(a); printf("\n\n 请输入用户密码:"); //printf(" "); gets(b); for(j=0;j<i;j++) { if(strcmp(a,userdata[j].UserID)==0) { for(k=0;k<2;k++) { if(strcmp(b,userdata[j].UserPassword)==0) //比较用户账户密码是否输入正确 return j; else { printf("\n\t\t "); printf("密码错误请重新输入:"); gets(b); } } printf("\n\n\t\t "); printf("密码已输入错误三次,即将退出程序。\n"); printf(" "); getch(); Initial(); // 返回初始界面 } } printf("\n\n\n\t\t 查无该用户,请检查后重新输入。\n"); getch(); UserLogin(); } void AdminLogin() { char adminID[N]="1",adminPassword[N]="1";//管理员id 和 密码 char a[N],b[N]; int i=0,j=0,s; /* FILE *fp; if((fp=fopen("admin.txt","r"))==NULL) { printf("Failure to open admin.txt!\n"); exit(0); } fscanf(fp,"%s%s",adminID,adminPassword); //将管理员的ID和Password从文件中读入内存 fclose(fp);*/ do{ printf("\n\t\t\t请输入管理员账号:"); gets(a); printf("\n\t\t\t请输入管理员密码:"); gets(b); if(strcmp(a,adminID)==0) //判断管理员账号是否相同 { if(strcmp(b,adminPassword)==0) { printf("\n\t\t\t登陆成功,请按任意键开始录入用户。\n"); getch(); system("cls"); BuildUser(); printf("\n\t\t\t录入完成,退出程序"); exit(0); } else { printf("\n\t\t\t密码错误,请重新输入。\n"); //判断管理员账号密码是否正确 s=1; } } else { printf("\n\t\t\t账号密码不匹配,请重试。\n"); s=1; } if(s==1) { getch(); system("cls"); } }while(s==1); } void Menu(int n) { FILE *fp,*fp1; time_t timep; time(&timep); //取当前系统时间 int i=0,o;float money=0; if((fp=fopen("iddata.txt","a+"))==NULL) { printf("\n\t\t\t打开失败\n"); exit(0); } do{ fscanf(fp,"%s%s%s%f",&userdata[i].Name,&userdata[i].UserID,&userdata[i].UserPassword,&userdata[i].money); i++; }while(!feof(fp)); //printf("调试"); fclose(fp); char path[30]="H:\\1\\ATM\\private_record\\",suffix[]=".txt"; strcat(path,userdata[n].UserID); strcat(path,suffix); if((fp1=fopen(path,"r+"))==NULL) { fp1=fopen(path,"w+"); fprintf(fp1,"%-20s%-10s%-10s%-10s% 10s\n","账号","操作","金额","余额","时间"); } else fp=fopen(path,"a+"); //money=0; do{ system("cls"); printf("\n\n\t\t "); //printf(" ------------ \n\n"); printf("\t\t"); printf("请选择您的操作:\n\n"); printf("\t\t "); printf("-----------------------------------------\n"); printf("\n\t\t "); printf(" 1.用户存款 \n"); printf("\n\t\t "); printf(" 2.用户取款 \n"); printf("\n\t\t "); printf(" 3.用户转账 \n"); printf("\n\t\t "); printf(" 4.查看余额 \n"); printf("\n\t\t "); printf(" 5.修改密码 \n"); printf("\n\t\t "); printf(" 6.退出登录 \n\n"); printf("\t\t "); printf("=========================================\n"); printf("\t\t "); printf("------------"); scanf("%d",&o); switch(o) { case 1:system("cls");money=MoneySave(&userdata[n]);break; //1.用户存款 case 2:system("cls");money=DrawMoney(&userdata[n]);break; // 2.用户取款 case 3:system("cls");money=Trans(&userdata[n]);break; // 3.用户转账 case 4:printf(" "); printf("你的当前余额为:%.2fRMB。\n",userdata[n].money);//用户转账 printf(" "); printf("请按键返回。");getch();break; case 5:ChangePassword();break; //修改密码 case 6:printf(" "); printf("欢迎下次使用,谢谢。\n");getch();break; // 退出程序 } time(&timep); //获取系统时间 if(o!=4&&o!=5&&money!=0) { if(o==6) money=0; fprintf(fp1,"%-20s%-10d%-10.2f%-10.2f%10s\n",userdata[n].UserID,o,money,userdata[n].money,ctime(&timep)); } }while(o!=6); fclose(fp1); if(o==6) main(); } void BuildUser() { printf("\n\t\t\t开始录入用户:\n"); USERDATA userdata; int i=0;FILE *fp; //判断是否继续录入,如果继续按1,否则按2 char ch; if((fp=fopen("iddata.txt","a+"))==NULL) { printf("Failure to open admin.txt!\n"); exit(0); } do{ system("cls"); printf("\n\t\t\t继续录入用户:\n"); printf("\n\t\t\t请输入用户姓名:"); gets(userdata.Name); printf("\n\t\t\t请输入用户卡号:"); gets(userdata.UserID); printf("\n\t\t\t请输入用户密码:"); gets(userdata.UserPassword); printf("\n\t\t\t请输入用户当前金额:"); scanf("%f",&userdata.money); fprintf(fp,"%-10s%-10s%-10s%-10.2f\n",userdata.Name,userdata.UserID,userdata.UserPassword,userdata.money); //见录入数据保存到文件中 system("cls"); printf("\n\t\t\t录入成功。\n\t\t\t继续录入请按 1 \n\t\t\t结束录入并推出登陆请按 2\n"); printf("\t\t\t----"); scanf("%d",&i); ch=getchar(); }while(i==1); fclose(fp); if(i==2) main(); } float MoneySave(struct User *p) { float money; printf("\t\t\t"); printf("请输入您的存款金额:"); do{ scanf("%f",&money); if((int)money%50!=0){ //判断存款金额是否是50的倍数 printf("\t\t\t"); printf("对不起,只能识别面值为50或100的钞票。\n\n\t\t\t请重新开始你的存款:");} }while((int)money%50!=0); p->money+=money; printf("\t\t\t"); printf("成功存入%.2f元,请按任意返回继续操作。\n",money); printf(" "); getch(); return money; } float DrawMoney(struct User *p) { float money; int s=0; printf("\n\t\t\t请输入您的取款金额:"); //取款 do{ scanf("%f",&money); if(money>p->money) { printf("\n\t\t\t您卡里没有辣么多钱了\n"); printf("\n\t\t\t按任意键返回,查询余额。"); getch(); return 0; } if(money>2500) { printf("\n\t\t\t一次最多可以取2500元,请重新输入取款金额:");//一次最多不能取超过2500元 } if((int)money%50!=0) { printf("\n\t\t\t只能取出面值为50或100的RMB。\n\n\t\t\t请再次输入您的取款金额:"); } }while(money>2500||(int)money%50!=0); p->money-=money; printf("\n\t\t\t成功取出%.2f元。请按任意键返回上层。\n",money); getch(); return -money; } float Trans(struct User *p) { FILE *fp; char a[N]; float money; printf("\n\t\t\t请输入您要转账的同行账户:"); re: scanf(" %s",a); char path[30]="G:\\1\\ATM\\private_record\\",suffix[]=".txt"; strcat(path,a); strcat(path,suffix); if((fp=fopen(path,"r+"))==NULL) { fp=fopen(path,"w+"); printf("\n\t\t\t该账户不存在,请重新输入转账账户:"); goto re; } else { printf("\n\t\t\t请输入转账金额:"); scanf("%f",&money); while(money>p->money||money<=0) { if(money>p->money) { printf("\n\t\t\t您卡里没有辣么多钱了\n"); printf("\n\t\t\t请先按键查询余额后重新确认转账金额。"); printf("\t\t "); getch();return 0; break; } } p->money-=money; printf("\n\t\t\t成功转入目标账户%.2f元,按任意键返回上层\n",money); fclose(fp); printf(" "); getch(); return -money; } } void ChangePassword() { char str1[7],str2[7]; do{ printf("\n\t\t\t请输入新的密码,密码为6位:"); scanf("%s",str1); printf("\n\t\t\t请再输入一次:"); scanf("%s",str2); if(strcmp(str1,str2)!=0) { printf("\n\t\t\t你输入的密码有误,请重新输入一遍:"); } }while(strcmp(str1,str2)!=0); printf("\n\t\t\t密码修改成功,请选择其他操作。"); getch(); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 乌班图ip地址配置及远程SSH
- ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
- ¥15 PSPICE制作一个加法器
- ¥15 javaweb项目无法正常跳转
- ¥15 VMBox虚拟机无法访问
- ¥15 skd显示找不到头文件
- ¥15 机器视觉中图片中长度与真实长度的关系
- ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
- ¥15 java 的protected权限 ,问题在注释里
- ¥15 这个是哪里有问题啊?