ATM管理系统

班级博客 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-SE-19/homework/11477
作业目标 编写一个ATM管理系统
学号 3190704217
一.题目要求

编写一个ATM管理系统,语言不限,要求应包括以下主要功能:

(1)开户,销户

(2)查询账户余额

(3)存款

(4)取款

(5)转账(一个账户转到另一个账户)等...

二. 代码

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

FILE *fp1; 
              
struct users
{
    int num;
	char code[20];
    float money;
	int flag; //该账户是否存在,存在为true
}x[200];

void openaccount();
void cancleaccount();
void getmoney();
void savemoney();
void inquire();
void transfer();

//主函数,功能页面
void main()
{
	printf("welcome!\n");
	printf("\n");
	int t;
	do
	{
		printf("*********************ATM管理系统*******************\n");
		printf("\n");
		printf("                       1.开户 \n");
		printf("                       2.销户 \n");
		printf("                       3.查询账户余额 \n");
		printf("                       4.存款 \n");
    	printf("                       5.取款 \n");
	    printf("                       6.转账 \n");
		printf("                       0.退出系统 \n");
		printf("\n");
		printf("******************Designed by 吴山茶******************\n");
		printf("\n");
		printf("请选择功能:");
        scanf("%d",&t);
		system("cls");
		switch(t)
		{	case 1:openaccount();printf("\n");break;
		    case 2:cancleaccount();printf("\n");break;
			case 3:inquire();printf("\n");break;
			case 4:savemoney();printf("\n");break;
			case 5:getmoney();printf("\n");break;
			case 6:transfer();printf("\n");break;
			case 0:break;
			default:break; 
		}
	}while(t!=0);
	exit(0);
}

int read()                                          /*读出文件数据*/
{
	FILE * fp;
	fp=fopen("D:\\users.txt","rb");                  /*用只读的方式打开文件*/
	if(fp==NULL)
	{
		printf("文件打开错误!\n");
		exit(1);
	}
	int n=0;
	do
	{
		fread(&x[n],sizeof(struct users),1,fp);  /*依次读出文件中结构体数组中每一个元素*/
		n++;
	}while(feof(fp)==0);                            /*指针指向末尾停止*/
	fclose(fp);
	return(n-1);                                      /*返回结构体数组的元素个数:i-1*/
}

void save(int k)                                             /*保存x[i]的账户信息*/                                                                                                   
{
	int i;
	FILE * fp;
	fp=fopen("D:\\users.txt","wb");                            /*重写的方式打开文件*/
	if(fp==NULL)
	{
		printf("文件打开错误!\n");                                    
		exit(1);
	}
	for(i=0;i<k;i++)                                            /*控制依次写入k个x[]元素*/
		if (fwrite(&x[i], sizeof (struct users),1,fp)==-1)   
			printf("保存失败\n");
	fclose(fp);
}
void openaccount(){
	srand((int)time(0)); 
	int i=read();
	char temp[20];
	x[i].num=rand()%10000+100000000;              /*设置随机种子,并保证每次种子不同,作为帐号*/                        
	printf("账号:%d\n",x[i].num);
	do
    {
        /*确认两次密码输入是否一致*/
        printf("\n\t\t密  码:");
        scanf("%s",x[i].code);
        printf("\n\t\t确认密码:");
        scanf("%s",temp);
        if(strcmp(x[i].code,temp)!=0)
        printf("\n\t\t两次密码不一致,请重新输入");
    }while(strcmp(x[i].code,temp)!=0);
	x[i].money=0;
	x[i].flag=1;
	save(i+1);                                       /*调入save(),将输入的账户信息续写在文件中*/
	printf("开户成功!\n");``
	system("pause");
}

void cancleaccount()
{
	printf("请输入要销户的账号:");
	int i=read(),j,k,n;
	char temp[20];
	scanf("%d",&n);
	for(j=0;j<i;j++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
		{
			if((x[j].num==n)&&(x[j].flag==1))
			{
				k=j;
				do
    {
        /*核验身份*/
        printf("\n\t\t密  码:");
        scanf("%s",temp);
        if(strcmp(x[k].code,temp)!=0)
        printf("\n\t\t密码错误,请重新输入");
    }while(strcmp(x[k].code,temp)!=0);

	printf("您是否确认注销该账户?\t 输入1为确认注销,输入0为不注销\n");
	int choice = 0;
	scanf("%d",&choice);
	if (choice == 1) {
		x[k].flag=0;   //flag标记为账户不存在
		printf("%d",x[k].flag);
		printf("销户成功!\n");
		save(i);
		printf("%d",x[k].flag);
		
	}
	else 
		printf("您已取消本次注销行为\n");
				break;
			}
			else
			{
				if(j==i-1)
				{
				printf("该账号不存在!\n");          
				break;
				}
			}
		}
	
	
	system("pause");
}


void getmoney()
{
	printf("请输入账号:");
	int i=read(),j,k,n;
	float m;
	char temp[20];
	scanf("%d",&n);
	for(j=0;j<i;j++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
		{
			if(x[j].num==n&&x[j].flag==1)
			{
				k=j;
				do
    {
        /*核验身份*/
        printf("\n\t\t密  码:");
        scanf("%s",temp);
        if(strcmp(x[k].code,temp)!=0)
        printf("\n\t\t密码错误,请重新输入");
    }while(strcmp(x[k].code,temp)!=0);
	printf("请输入要取的金额:");
	scanf("%f",&m);
	x[k].money -=m;
	save(i);
				break;
			}
			else
			{
				if(j==i-1)
				{
				printf("该账号不存在!\n");          
				break;
				}
			}
		}
	
}

void savemoney()
{
	printf("请输入账号:");
	int i=read(),j,k,n;
	float m;
	char temp[20];
	scanf("%d",&n);
	for(j=0;j<i;j++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
		{
			if(x[j].num==n&&x[j].flag==1)
			{
				k=j;
					do
    {
        /*核验身份*/
        printf("\n\t\t密  码:");
        scanf("%s",temp);
        if(strcmp(x[k].code,temp)!=0)
        printf("\n\t\t密码错误,请重新输入");
    }while(strcmp(x[k].code,temp)!=0);
	printf("请输入要存的金额:");
	scanf("%f",&m);
	x[k].money=x[k].money+m;
	save(i);
				break;
			}
			else
			{
				if(j==i-1)
				{
				printf("该账号不存在!\n");          
				break;
				}
			}
		}

}

void inquire()
{
	printf("请输入账号:");
	int i=read(),j,k,n;
	scanf("%d",&n);
	char temp[20];
	for(j=0;j<i;j++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
		{
			if(x[j].num==n&&x[j].flag==1)
			{
				k=j;
				do
				{
                  /*核验身份*/
					printf("\n\t\t密  码:");
					scanf("%s",temp);
					if(strcmp(x[k].code,temp)!=0)
						printf("\n\t\t密码错误,请重新输入");
				}while(strcmp(x[k].code,temp)!=0);
	            printf("账户余额:%.5f",x[k].money);
				break;
			}
			else
			{
				if(j==i-1)
				{
				printf("该账号不存在!\n");          
				break;
				}
			}
		}
}



void transfer()
{
	printf("请输入您的账号:");
	int i=read(),j,k,l,n,p,q;
	float m;
	char temp[20];
	scanf("%d",&n);
	for(j=0;j<i;j++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
		{
			if(x[j].num==n&&x[j].flag==1)
			{
				k=j;
				do
				{
                /*核验身份*/
                 printf("\n\t\t密  码:");
                 scanf("%s",temp);
                 if(strcmp(x[k].code,temp)!=0)
                 printf("\n\t\t密码错误,请重新输入");
				}while(strcmp(x[k].code,temp)!=0);

        	    printf("请输入您要转入钱的账号:");
	            scanf("%d",&n);
			    for(p=0;p<i;p++)                            /*由i控制依次检查文件中的x[]元素,找到所要查询的账号*/
				{
		    	  if(x[p].num==n&&x[p].flag==1)
				  {
				    l=p;
				    printf("请输入您要转入的金额:");
				    scanf("%f",&m);
				    x[k].money-=m;
				    x[l].money+=m;
				    save(i);
			     	break;
				  }
		         else
				 {
					 if(p==i-1)
					{
				     printf("该账号不存在!\n");          
				     break;
					 }
				 }
				}
				break;
			}
			else
			{
				if(j==i-1)
					{
				     printf("该账号不存在!\n");          
				     break;
					 }
			}
	}
}



posted @ 2020-11-18 23:51  山茶sc  阅读(65)  评论(0编辑  收藏  举报