weixin_58828863 2021-06-04 13:49 采纳率: 100%
浏览 24
已采纳

用C语言怎么实现,代码,求大佬帮忙解决

 

  • 写回答

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();
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题