atm(二进制读写)

#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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值