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;
}
}
}
}