重新编辑了一下,可以发出来了
若能解决,十分感谢
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define max 2000//设置最大用户数
int N;//实际用户数
struct accountInformation{
char account[max+1];//账号
char name[11];//姓名
float balance;//余额
char identificationNumber[19];//身份证号码
char phoneNumber[12];//电话号码
}users;//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
struct record users[max]//系统内所有账户
int welcome();//欢迎界面的功能实现
void openAccount();//开户
int menu();//菜单
void deposit();//存款
void withdraw();//取款
void showAccount();//查询用户信息
void showAll();//显示所有用户
void closeAccount();//销户
void readData();//开始前从文件中读数据,存在数组中
void writeData();//程序结束前,将数组中的数据写入到文件中
int main()
{
system("color f4");
system("title 银行账户管理系统");//设置窗口标题
readData();
welcome();
writeData();
return 0;
}
int welcome()//欢迎界面的功能实现
{
int Choice;/*选择功能*/
do
{
Choice=menu();
switch(Choice)
{
case 1:
openAccount();//开户
break;
case 2:
void closeAccount();//销户
break;
case 3:
void deposit();//存款
break;
case 4:
void withdraw();//取款
case 5:
void 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].account=N-1;//账号顺延
printf("账号:%s",users[N].account);//输出账号
printf("姓名:");//输入姓名
scanf("%s",users[N].name);
printf("余额:");
scanf("%f",users[N].balance);
printf("身份证号码:");
scanf("%s,identificationNumber");
for (j = 0; j < N; j++)
{
if (strcmp(users[N].identificationNumber, users[j].identificationNumber) == 0)
{
printf("该用户已存在,开户失败!\n");
break;
}
}
printf("电话号码:");
scanf("%s,phoneNumber");
printf("开户成功!");
}
void closeAccount();//销户
{
int i, j, flag = 0;
char s1[5];
printf("请输入要删除的账号:\n");
scanf("%s", s1);
for (i = 0; i < N; i++)
{
if (strcpy(users[i].account, s1) == 0)
{
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--;
}
}
void deposit();//存款
{
int id,who;
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);
users[who].balance+=money;
printf("存款后,该账号的余额为:%.2f.\n",users[who].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;
priintf("取款后,剩余%.2f元.\n",users[who].balance);
}
}return;
}
void shouAccount();//查询账户信息
{
int i,item,flag;
char s1[max+1];
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("%s", s1);
for (i = 0; i<N; i++)
if (strcmp(s1,users[i].account) == 0)
{
flag = 1;
printf("账号 姓名 余额 身份证号码 电话号码\n");
printf("========================================================================\n");
printf("%d %s %.2f %s %s",users[who].account,users[who].name,users[who].balance,users[who].identificationNumber,users[who].phoneNumber);
}
if (0 == flag)
printf("该账号不存在!\n");
break;
case 2:
printf("请输入要查询用户的姓名:\n");
scanf("%s", s1);
for (i = 0; i<N; i++)
if (strcmp(users[i].name, s1) == 0)
{
flag = 1;
printf("账号 姓名 余额 身份证号码 电话号码\n");
printf("========================================================================\n");
printf("%d %s %.2f %s %s",users[who].account,users[who].name,users[who].balance,users[who].identificationNumber,users[who].phoneNumber);
}
if (0 == flag)
printf("该姓名不存在!\n"); break;
case 3:
return;
default:
void showAll();
}
}
}
void showAll()//显示所有用户
{
int i;
printf("以下为所有账户信息(按账号由小到大排序):");
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,"%s %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,"%s %s %.2f %s %s",users[i].account,users[i].name,users[i].balance,users[i].identificationNumber,users[i].phoneNumber);
fclosr(fp);
一、语法错误
1、第17行结尾少了分号
struct record users[max];//系统内所有账户
2、第40行开始,welcome里的方法调用不要加返回值类型,把方法调用前的void给去掉
int welcome()//欢迎界面的功能实现
{
int Choice;/*选择功能*/
do
{
Choice = menu();
switch (Choice)
{
case 1:
openAccount();//开户
break;
case 2:
closeAccount();//销户
break;
case 3:
deposit();//存款
break;
case 4:
withdraw();//取款
case 5:
showAccount();//查询用户信息
break;
case 0:
printf("结束使用,退出系统\n欢迎下次使用!");
break;
}
} while (Choice);
}
3、第9行开始,users变量重复定义,users类型错误,应该改成
struct accountInformation {
char account[max + 1];//账号
char name[11];//姓名
float balance;//余额
char identificationNumber[19];//身份证号码
char phoneNumber[12];//电话号码
};//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
struct accountInformation users[max];//系统内所有账户
4、第110行,需要把数字转成字符串,也不是直接赋值
itoa(N - 1, users[N].account, 10); //users[N].account = N - 1;//账号顺延
5、第132行,结尾多了个分号,要去掉
void closeAccount()//销户
6、第144行,变量名错误,要把n改成N
for (j = i; j < N - 1; j++)
7、第164行,结尾多了个分号,也要去掉
void deposit()//存款
8、第187行,结尾又多了个分号,要去掉
void withdraw()//取款
9、第217行,结尾也多了个分号,去掉
void shouAccount()//查询账户信息
10、第245行,who变量不存在,应该是i变量,把who改成i
printf("%d %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
11、第259行,who变量也不存在,应该是i变量,把who改成i
printf("%d %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
12、第266行,方法调用前面不要加返回值类型void
showAll();
二、编译错误
1、第217行,函数名拼错,应该是show而不是shou
void showAccount()//查询账户信息
2、第212行,函数名拼错,应该是printf而不是priintf
printf("取款后,剩余%.2f元.\n", users[who].balance);
3、第323行,函数名拼错,应该是fclose而不是fclosr
fclose(fp);
4、第170和194行, 引用了未定义了search函数,要在这两个函数之前先定义一个search函数
int search(int id)
{
for (int i = 0; i < N; ++i)
{
if (atoi(users[i].account) == id)
return i;
}
return -1;
}
三、运行时错误
1、menu函数里的scanf有错误,改成
scanf("%d", &i);
2、openAccount里输入余额的scanf有错误,要取地址,应该改成
scanf("%f", &users[N].balance);
3、openAccount里输入身份证号码的scanf有错误,应该改成
scanf("%s", users[N].identificationNumber);
4、openAccount里输入电话号码的scanf有错误,应该改成
scanf("%s", users[N].phoneNumber);
四、全部代码
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define max 2000//设置最大用户数
int N;//实际用户数
struct accountInformation {
char account[max + 1];//账号
char name[11];//姓名
float balance;//余额
char identificationNumber[19];//身份证号码
char phoneNumber[12];//电话号码
};//创建账户信息结构体,包括账号、姓名、余额、身份证号码、电话号码
struct accountInformation users[max];//系统内所有账户
int welcome();//欢迎界面的功能实现
void openAccount();//开户
int menu();//菜单
void deposit();//存款
void withdraw();//取款
void showAccount();//查询用户信息
void showAll();//显示所有用户
void closeAccount();//销户
void readData();//开始前从文件中读数据,存在数组中
void writeData();//程序结束前,将数组中的数据写入到文件中
int main()
{
system("color f4");
system("title 银行账户管理系统");//设置窗口标题
readData();
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();//取款
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");//用户数未超标时
itoa(N - 1, users[N].account, 10); //users[N].account = N - 1;//账号顺延
printf("账号:%s", users[N].account);//输出账号
printf("姓名:");//输入姓名
scanf("%s", users[N].name);
printf("余额:");
scanf("%f", &users[N].balance);
printf("身份证号码:");
scanf("%s", users[N].identificationNumber);
for (j = 0; j < N; j++)
{
if (strcmp(users[N].identificationNumber, users[j].identificationNumber) == 0)
{
printf("该用户已存在,开户失败!\n");
break;
}
}
printf("电话号码:");
scanf("%s", users[N].phoneNumber);
printf("开户成功!");
}
void closeAccount()//销户
{
int i, j, flag = 0;
char s1[5];
printf("请输入要删除的账号:\n");
scanf("%s", s1);
for (i = 0; i < N; i++)
{
if (strcpy(users[i].account, s1) == 0)
{
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--;
}
}
int search(int id)
{
for (int i = 0; i < N; ++i)
{
if (atoi(users[i].account) == id)
return i;
}
return -1;
}
void deposit()//存款
{
int id, who;
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);
users[who].balance += money;
printf("存款后,该账号的余额为:%.2f.\n", users[who].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;
}
void showAccount()//查询账户信息
{
int i, item, flag;
char s1[max + 1];
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("%s", s1);
for (i = 0; i < N; i++)
if (strcmp(s1, users[i].account) == 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 2:
printf("请输入要查询用户的姓名:\n");
scanf("%s", s1);
for (i = 0; i < N; i++)
if (strcmp(users[i].name, s1) == 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("以下为所有账户信息(按账号由小到大排序):");
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, "%s %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, "%s %s %.2f %s %s", users[i].account, users[i].name, users[i].balance, users[i].identificationNumber, users[i].phoneNumber);
fclose(fp);
}
改完后可以编译运行,然后正常开户了,其他地方似乎还有小错误,你这代码是扫描图片得到的吗?!
现在是到哪一个流程了
看不太清楚啊
char account[max+1],账户数怎么加到账号上了;
users[N].account=N-1;//账号顺延
printf("账号:%s",users[N].account);//输出账号,N-1是整形怎么给字符串赋值?输出字符串?;;;
N没赋初始值(默认0)?上一步N-1直接越界;;
printf("身份证号码:");
scanf("%s,identificationNumber");这idxxx是个啥;;;;
printf("开户成功!");;