#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define max 2000//设置最大用户数
int N=0;//实际用户数
struct accountInformation{
int account;//账号
char name[11];//姓名
float balance;//余额
char identificationNumber[19];//身份证号码
char phoneNumber[12];//电话号码
}users[max];//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
int welcome();//欢迎界面的功能实现
void openAccount();//开户
int menu();//菜单
void deposit();//存款
void withdraw();//取款
void showAccount();//查询用户信息
void showAll();//显示所有用户
void closeAccount();//销户
void readData();//开始前从文件中读数据,存在数组中
void writeData();//程序结束前,将数组中的数据写入到文件中
int search(int id);//根据账号找到用户数据对应的下标
int main()
{
system("color f4");
system("title 银行账户管理系统");//设置窗口标题
readData();
users[0].account=0;
strcpy(users[N].identificationNumber,"0");
welcome();
writeData();
return 0;
}
int welcome()//欢迎界面的功能实现
{
int Choice;/*选择功能*/
do
{
Choice=menu();
switch(Choice)
{
case 1:
openAccount();//开户
break;
case 2:
closeAccount();//销户
break;
case 3:
deposit();//存款
break;
case 4:
withdraw();//取款
break;
case 5:
showAccount();//查询用户信息
break;
case 0:
printf("结束使用,退出系统\n欢迎下次使用!");
break;
}
}while(Choice);
}
int menu()//菜单
{
int i;
while(1)
{
printf(" _________________________________________ \n");
printf("* *\n");
printf("* 欢迎使用银行账户管理系统 *\n");
printf("* *\n");
printf("* 1.开户 2.销户 *\n");
printf("* 3.存款 4.取款 *\n");
printf("* 5.查询 0.退出 *\n");
printf("* *\n");
printf("*_________________________________________*\n");
printf("请选择服务类型:");
scanf("%d",&i);
if(i>=0&&i<=5)
break;
else
printf("选择有误,请重新选择\n\n");
}
return i;
}
void openAccount()/*开户:输入账户信息并予以保存。账户信息包括
账号、姓名、余额、身份证号码、电话号码。若输入信息中的账号已经
存在,则不允许添加该信息。*/
{
if(N==max)//用户数量超上限
{
printf("用户已达上限,开户失败");
return;
}
int j;
printf("正在进行开户业务\n");//用户数未超标时
users[N+1].account=1+users[N].account;//账号顺延
printf("即将开户的账号为:%d",users[N+1].account);//输出账号
printf("姓名:");//输入姓名
scanf("%s",users[N+1].name);
printf("余额:");
scanf("%f",&users[N+1].balance);
printf("身份证号码:");
scanf("%s",users[N+1].identificationNumber);
for (j = 0; j < N+1; j++)
{
if (strcmp(users[N+1].identificationNumber, users[j].identificationNumber) == 0)
{
printf("该用户已存在,开户失败!\n");
break;
}
}
printf("电话号码:");
scanf("%s",users[N+1].phoneNumber);
printf("开户成功!\n");
++N;
return;
}
void closeAccount()//销户
{
int i, j, flag = 0;
int s1;
printf("请输入要删除的账号:\n");
scanf("%d", s1);
for (i = 0; i < N; i++)
{
if (users[i].account==s1)
{
flag = 1;
//要删除账号后面的账号往前移一位
for (j = i; j < N-1; j++)
{
users[j] = users[j + 1];
}
}
}
//查找失败
if (0 == flag)
{
printf("该账户不存在!!!\n");
}
if (1 == flag)
{
printf("删除成功!");
//删除成功,账户数量减1
N--;
}
return;//新加的
}
void deposit()//存款
{
int id,i;
float money;
printf("请输入需要存款的账号:");
scanf("%d",&id);
i=search(id);//根据账号查询用户,返回用户下标(没写完)
if(i<0)//说明id账户不存在
{
printf("该用户不存在,存款失败!\n");
}
else
{
printf("用户姓名:%s\n",users[i].name);
printf("输入存款额:");
scanf("%.2f",&money);
users[i].balance+=money;
printf("存款后,该账号的余额为:%.2f.\n",users[i].balance);
}
return;
}
void withdraw()//取款
{
int id,who;
int iPass;
double money;
printf("请输入需要取款的账号:");
scanf("%d",&id);
who=search(id);//根据账号查询用户,返回用户下标(这里有问题)
if(who<0)//说明id账户不存在
{
printf("该用户不存在,取款失败!\n");
}
else
{
printf("用户姓名:%s\n",users[who].name);
printf("请输入取款额:");
scanf("%lf",&money);
if(money>users[who].balance)//余额不足
{
printf("余额不足,取款失败!\n");
printf("贷款功能尚未开通,敬请期待。\n");
}
else
{
users[who].balance-=money;
printf("取款后,剩余%.2f元.\n",users[who].balance);
}
}return;
}
int search(int id)//账号查找
{
for (int j = 0; j <=N; ++j)
{
if (users[j].account == id)
return j;
}
return -1;
}
void showAccount()//查询账户信息
{
int i,item,flag;
int s1;
char s2[11];
printf(" _________________________________________ \n");
printf(" | |\n");
printf(" | 查 询 账 户 信 息 |\n");
printf(" | |\n");
printf(" | 1.按账号查询 |\n");
printf(" | 2.按姓名查询 |\n");
printf(" | 3.退出本菜单 |\n");
printf(" |________________________________________|\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("请输入要查询用户的账号:\n");
scanf("%d", s1);
for (i = 0; i<=N+1; i++)
if (s1=users[i].account )
{
flag = 1;
printf("账号 姓名 余额 身份证号码 电话号码\n");
printf("========================================================================\n");
printf("%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
}
if (0 == flag)
printf("该账号不存在!\n");
break;
case 2:
printf("请输入要查询用户的姓名:\n");
scanf("%s", s2);
for (i = 0; i<=N; i++)
if (strcmp(users[i].name, s2) == 0)
{
flag = 1;
printf("账号 姓名 余额 身份证号码 电话号码\n");
printf("========================================================================\n");
printf("%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
}
if (0 == flag)
printf("该姓名不存在!\n"); break;
case 3:
return;
default:
showAll();
}
}
}
void showAll()//显示所有用户
{
int i;
printf("以下为所有账户信息(按账号由小到大排序):\n");
printf("账号 姓名 余额 身份证号码 电话号码\n");
printf("========================================================================\n");
for(i=0;i<=N;i++)
{
printf("%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
}
}
void readData()//读
{
FILE *fp;
int i=0;
//从文件中取出余额
if((fp=fopen("account.txt","a+"))==NULL)
{
printf("Data file cannot open!");
exit(0);
}
while(fscanf(fp,"%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber)!=EOF)
{
i++;
}
N=i;//用全局变量储存用户总人数
fclose(fp);
return;
}
void writeData()//写
{
FILE *fp;
int i=0;
//保存余额
if((fp=fopen("account.txt","w"))==NULL)
{
printf("Data file cannot open!");
exit(0);
}
for(i=0;i<N;i++)
fprintf(fp,"%d %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
fclose(fp);
}
之前还能显示出菜单页面,但是在开户之后其他功能都无法实现,像这样
我多试了几回之后,就变成了这样
百度了之后还是解决不了,唉
感谢各位阅读至此,如能提供帮助,十分感谢