#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"//getch函数头文件
#define MAX 3
int id;//用户id
int c;//用户结构体数组下标
char filename[]="d:\\代码\\ATM项目\\777.txt"; //文件路径
//====================================
//定义用户结构体======================
struct user
{
int id;
char name[20];//一个汉字为2个字节
char password[7];//需用字符串存放密码,若用int,则002022为2022
float money;
}a[MAX];
//声明函数============================================================================
//====================================================================================
void menu();//功能界面函数
int userlogin();//用户登陆函数
int system_in(FILE *fp);//系统函数
void update(FILE *fp);//用户信息更新函数
void money_cut(FILE *fp);//取款函数
void money_add(FILE *fp);//存款函数
void infor_view(FILE *fp);//用户信息查询函数
void password_reset(FILE *fp);//重置密码函数
void money_transfer(FILE *fp);//转账函数
void system_ready(FILE *fp);//系统初始化函数
void password_into(char *p);//密码输入函数(包括密码输入合法性检测)
//=====================================================================================
//=====================================================================================
int main()
{
int i=0;
FILE *fp=fopen(filename,"r+");
if(fp==NULL)
exit(0);
/*for(;i<MAX;i++)//首次使用时,将用户信息以二进制格式写入
{
scanf("%d",&a[i].id);
scanf("%s",a[i].name);
scanf("%s",a[i].password);
scanf("%f",&a[i].money);
}
update(fp);*/
system_ready(fp);
if(userlogin()==1)
system_in(fp);//调用系统函数(进入系统)
update(fp);//更新用户信息
fclose(fp);
puts("感谢使用");
return 0;
}
//===============================================
//读取用户信息 (系统初始化)
void system_ready(FILE *fp)
{
int i=0;
char ch[80];
char *p;
fread(a,sizeof(struct user),MAX,fp);
}
//======================================================
//功能界面函数
void menu()
{
puts("================================");
puts("1、取款 2、存款 3、查询 ");
puts("4、改密码 5、转账 6、退出 ");
puts("================================");
}
//=====================================================
//功能:密码输入(输入的密码用*覆盖,包含密码输入合法性)
//时间:2019.5.13
//作者:史继炜
void password_into(char *p)
{
int i=0;//密码字符数组下标
char ch;
while(i<6)//密码长度6位
{
ch=getch();
if(ch>='0'&&ch<='9')//密码的输入只能为数字
{
p[i]=ch;
putchar('*');
i++;
}
else
{
puts("请输入合法的密码格式(数字0-9)");
i=0 ;
}
}
p[i]='\0';
printf("\n");
}
//=====================================================
//用户登陆
int userlogin()
{
char password_s[7];
int t=0;
//-------------------------------------------------------
puts("请输入id");
while(1)
{
scanf("%d",&id);//敲回车时,键盘缓冲区存在一个\n,会影响下一次输入 ;解决方法:在两次输入之间用fflush(stdin)函数清空或getchar()将\n接收
fflush(stdin);//清空键盘缓冲区
for(c=0;c<MAX;c++)
{
if(id==a[c].id)
//break;
goto here;//跳出多层循环
}
// if(id==a[c].id)
// break;
puts("id不存在,请重新输入");
}
here:
//-------------------------------------------------------
puts("输入密码");
while(t<3)
{
password_into(password_s);
system("cls");
if(strcmp(password_s,(a[c].password))==0)//函数strcmp(str1,str2)比较两个字符串,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
return 1;
else
{
t++;
puts("密码错误,重新输入密码");
}
}
puts("记不住密码就莫来了");
return 0;
}
//======================================================
//系统函数(用户登陆后进入,可调用其它功能函数)
int system_in(FILE *fp)
{
int i;
menu();//调用菜单
while(1)
{
scanf("%d",&i);
getchar();
if(i>=0&&i<=6)
break;
puts("请根据界面选择正确的功能");
}
system("cls");
switch(i)
{
case 1:money_cut(fp);break;
case 2:money_add(fp);break;
case 3:infor_view(fp);break;
case 4:password_reset(fp);break;
case 5:money_transfer(fp);break;
case 6:return 0;
}
}
//=======================================================================================
//改密码功能函数
void password_reset(FILE *fp)
{
char password_s[6];
char password_1[6],password_2[6];
puts("请输入原密码:");
while(1)
{
password_into(password_s);
if(strcmp(password_s,a[c].password)==0)
break;
puts("密码错误,请重新输入原密码:");
}
puts("请输入新密码:");
while(1)
{
password_into(password_1);
puts("请再次输入新密码:");
password_into(password_2);
if(strcmp(password_1,password_2)==0)
break;
puts("两次输入的新密码不相同,请重新输入新密码:");
}
strcpy(a[c].password,password_1);
puts("修改密码成功!");
system("pause");
system("cls");
system_in(fp);
}
//======================================================================================
//存款功能函数
void money_add(FILE *fp)
{
float m;
puts("输入存款金额");
scanf("%f",&m);
fflush(stdin);
a[c].money=a[c].money+m;
puts("存款成功");
system("pause");
system("cls");
system_in(fp);
}
//=======================================================================================
//取款功能函数
void money_cut(FILE *fp)
{
float m;
printf("输入取款金额,取款金额不可大于2000元\n");
while(1)
{
scanf("%f",&m);
fflush(stdin);
if(m<=a[c].money&&m>=0&&m<2000)
break;
puts("醒醒!你的钱没那么多!!!,重新输入取款金额:");
}
a[c].money=a[c].money-m;
puts("取款成功!");
printf("目前的余额:%f元\n",a[c].money);
system("pause"); //getchar()按回车键继续
system("cls");
system_in(fp);
}
//=======================================================================================
//查询功能函数
void infor_view(FILE *fp)
{
printf("账户ID:%d\n",a[c].id);
printf("姓名:%s\n",a[c].name);
printf("密码:%s\n",a[c].password);
printf("余额:%f\n",a[c].money);
puts("按任意键继续");
system("pause");
system("cls");
system_in(fp);
}
//=======================================================================================
//转账功能函数
void money_transfer(FILE *fp)
{
int i;
float m;//转账金额
puts("请输入转账账号");
while(1)
{
scanf("%d",&i);
if(i>4)
puts("转账账号无效,请重新输入");
else
break;
}
puts("请输入转账金额");
while(1)
{
scanf("%f",&m);
if(m>a[c].money)
puts("您没那么多钱,请重新输入");
else
break;
}
a[c].money=a[c].money-m;
a[i-1].money=a[i-1].money+m;
puts("转账成功!");
printf("目前的余额:%f\n",a[c].money);
system("pause");
system("cls");
system_in(fp);
}
//=======================================================================================
//退出系统功能函数(更新用户信息)
void update(FILE *fp)
{
int i;
rewind(fp);
fwrite(a,sizeof(struct user),MAX,fp);
}
链接:https://blog.csdn.net/weixin_44366851/article/details/89931880