ATM项目

#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"//getch()函数头文件 
#define MAX 10
int id;//用户id 
int c;//用户结构体数组下标 
int count=0;// 读入用户条数
char filename[]="d:\\代码\\ATM项目\\123.txt"; //文件路径 
//====================================
//定义用户结构体====================== 
typedef struct user
{
	int id;
	char name[20];//一个汉字为2个字节 
	char password[7];//需用字符串存放密码,若用int,则002022为2022 
	float money;
}AC;
AC a[MAX];
//声明函数============================================================================ 
//====================================================================================
void menu();//功能界面函数 
int userlogin();//用户登陆函数 
int system_in();//系统函数 
void update(FILE *fp);//用户信息更新函数 
void money_cut();//取款函数 
void money_add();//存款函数 
void infor_view();//用户信息查询函数 
void password_reset();//重置密码函数 
void money_transfer();//转账函数 
void system_ready(FILE *fp);//系统初始化函数 
AC typeChang(char *ch);//将字符串转换成一个结构体变量 
void password_into(char *p);//密码输入函数(包括密码输入合法性检测) 
void account_new();//开户函数
//=====================================================================================
//=====================================================================================
int main()
{
    FILE *fp=fopen(filename,"r+");
    if(fp==NULL)
	  exit(0);
    system_ready(fp);
    if(userlogin()==1)
    system_in();//调用系统函数(进入系统)
    update(fp);//更新用户信息 
    fclose(fp);
    puts("感谢使用");
    return 0;
 } 
//===============================================
//功能:开户
//时间:2019.5.24
void account_new()
{
	char ch[20];
	int id;
	count++;//读取用户条数自增
	//-------------------------
	printf("请输入开户人信息");
	puts("姓名:");
	gets(ch);
	strcpy(a[count-1].name,ch);
	//-------------------------
	printf("账号:");
	scanf("%d",&id);
	fflush(stdin);
	a[count-1].id=id;
	//--------------------------
	printf("密码:");
//	gets(ch);
	password_into(ch);
	strcpy(a[count-1].password,ch);
	//-------------------------
	a[count-1].money=0;
	//-----------------------------
	puts("开户成功!");
	system("pause");
	system("cls");
	system_in();
}
//===============================================
//功能:将字符串转换成一个结构体变量
//作者:史继炜
//时间:2019.5.13 
AC typeChang(char *ch)//用字符型指针接收字符数组(字符数组首地址) 
{
    AC t;
    char *p;
    p=strtok(ch,";");
    printf("%d\n",sscanf(p,"%d",&t.id));
    //-------------------------
    p=strtok(NULL,";"); 
    printf("%d\n",sscanf(p,"%s",t.name));
    //-------------------------
    p=strtok(NULL,";"); 
    printf("%d\n",sscanf(p,"%s",t.password));
    //--------------------------
    p=strtok(NULL,";");
    printf("%d\n",sscanf(p,"%f",&t.money));
    return t;
}
//==================================================================== 
//读取用户信息 (系统初始化)
void system_ready(FILE *fp)  
{
    int i=0;
    char ch[80];
    char *t;
    while(!feof(fp))
    {
	    t=fgets(ch,sizeof(ch),fp); 
	     if(count>=MAX)
	    {
	    	printf("该系统只能读取%d个用户信息\n",MAX);
			break; 
		}
		//----------------------------------------------
		if(t!=NULL)//将用户信息读入结构体变量 
		{
			a[i]=typeChang(t);
			i++;
			count++;
	    }
    }
}
//======================================================
//功能界面函数
void menu() 
{
	puts("================================");
	puts("1、取款     2、存款    3、查询  ");
	puts("4、改密码   5、转账    6、开户  "); 
	puts("7、退出");
	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;
	int p;
	//-------------------------------------------------------
        puts("请输入id"); 
        while(1)
	{ 
	  p=scanf("%d",&id);//敲回车时,键盘缓冲区存在一个\n,会影响下一次输入 ;解决方法:在两次输入之间用fflush(stdin)函数清空或getchar()将\n接收
	  fflush(stdin);//清空键盘缓冲区 
    	for(c=0;c<count;c++)
	    {
		  if(id==a[c].id)//同时确定了用户在结构体数组中的下标
		    break;
	    } 
	  if(id==a[c].id)
	    break;
	  puts("id不存在,请重新输入"); 
	}
	//-------------------------------------------------------
	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()
{ 
	int i; 
	menu();//调用菜单
	while(1)
	{
	scanf("%d",&i);
	getchar();
	if(i>=0&&i<=7)
	   break;
	puts("请根据界面选择正确的功能"); 
    }
	system("cls");
	switch(i)
	{
		case 1:money_cut();break;
		case 2:money_add();break;
		case 3:infor_view();break;
		case 4:password_reset();break;
		case 5:money_transfer();break;
		case 6:account_new();break;
		case 7:return 0;
	}
	 
}
//=======================================================================================
//改密码功能函数 
void password_reset()
{
	char password_s[7];
	char password_1[7],password_2[7];
	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();
}
//======================================================================================
//存款功能函数 
void money_add()
{
	float m;
	puts("输入存款金额");
	scanf("%f",&m);
        fflush(stdin);
	a[c].money=a[c].money+m;
	puts("存款成功");  
	system("pause");
	system("cls"); 
        system_in();
}
//=======================================================================================
//取款功能函数 
void money_cut()

{
	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();
}
//=======================================================================================
//查询功能函数 
void infor_view()
{
	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);
	system("pause");
	system("cls");
        system_in();
}
//=======================================================================================
//转账功能函数 
void money_transfer()
{
	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(); 
}
//=======================================================================================
//退出系统功能函数(更新用户信息) 
void update(FILE *fp)
{
	rewind(fp); 
	for(c=0;c<count-1;c++)
	{
    	fprintf(fp,"%d;%s;%s;%f\n",a[c].id,a[c].name,a[c].password,a[c].money);
    }
    fprintf(fp,"%d;%s;%s;%f",a[count-1].id,a[count-1].name,a[count-1].password,a[count-1].money);
}

在ATM改进版的基础上增加开户功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值