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

 

#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();
}

 

可以参考 这篇文章

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632