user-0 提问: c语言一个银行管理系统 登录还有查询有问题 请帮我看看

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: #include"stdio.h" #include"stdlib.h" #include"string.h"  #define N 100  struct Date { 	int year; 	int month; 	int day; }; struct client { 	char name[20];     //帐户名 	struct Date birthday; //生日 	char sex;                               //性别 	char phone[20];     //手机号 	char account[20]; //账号 	char password[15]; //密码 	char identity[20]; //身份证号 	int balance; //账户余额 };  struct client dear[N];  void welcome();             //显示欢迎界面 int menu();                   //初始界面 功能包括 注册 登录   用int返回一个数值在switch中 void gongneng(int n);              //账户功能界面：功能包括     这里要用数组元素作为实参 在int login中用户登录后只能查看自己的信息 int roll(client per[],int n);                 //新用户注册 register为关键词 void login(client per[],int n); //登录账号 void display(client per[],int n);             //管理账号可以查看所有信息 void query(client per[],int n); void qukuan(client per[],int n); void cunkuan(client per[],int n); void gaimi(client per[],int n); void save(client per[],int n); //写入文本文件              void read(client per[],int *n); //读入文本文件   void main() {  	int n=0;  	welcome(); //显示欢迎界面  	read(dear,&n);//首先读入系统已经保存的信息 	system("pause");   	for(;;)  	{  		switch(menu())  		{  			case 1:  				printf("\n\t注册账户\n");  				n=roll(dear,n);  				break;  			case 2:  				printf("\n\t\t\t登录账户\n");         				login(dear,n);  				break; 			case 3:  				printf("\n\t管理权限\n");  				display(dear,n); 				printf("\t");  				system("pause");  				break;  			case 4:  				printf("\n\t保存信息\n");  				save(dear,n);   				printf("\t");  				system("pause");  				break;  			case 5:  				printf("\n是否需要保存?(y/n)\n");  				fflush(stdin);//getchar(); 				char c=getchar();  				if(c=='Y'||c=='y') 					save(dear,n); 				printf("\n\t\t谢谢使用，再见!\n");      				printf("\n\t\t");  				system("pause");  				exit(0);  		}  	} }   void welcome() { 	printf("\n\n\n\t\t 欢迎使用银行账户管理系统"); 	printf("\t\t\t       版本号1.0\n\n"); 	printf("\n\n\n\n\n\t\t\t   2018年1月3日");  }  int menu() { 	int select;                //初始化 	do{                          //do while 先无条件执行一次 		system("cls");       //  清屏 		printf("\t\t*****功能界面******\n"); 		printf("\t\t                         \n"); 		printf("\t\t  1.注册账户  \n"); 		printf("\t\t  2.登录账户  \n"); 		printf("\t\t  3.管理权限  \n"); 		printf("\t\t  4.保存信息  \n"); 		printf("\t\t  5.退出程序  \n"); 		printf("\t\t\n"); 		printf("\t\t 请您选择(1-5):"); 		scanf("%d",&select); 	}while(select<1||select>5);   	return select;  }  int roll(client per[],int n) { 	int i=0;  	printf("请输入您的真实信息!\n"); 	printf("帐户名:");  	scanf("%s", per[n+1].name);  	printf("输入生日年月日用空格隔开:");  	scanf("%d%d%d", &per[n+1].birthday.year,&per[n+1].birthday.month,&per[n+1].birthday.day);  	printf("请输入性别(m/f)"); 	getchar(); 	scanf("%c",&per[n+1].sex); 	printf("手机号:");  	scanf("%s",per[n+1].phone); 	printf("账号(100以内):");  	scanf("%s",per[n+1].account);  	printf("密码:");  	scanf("%s",per[n+1].password);    	if(n+1==N) 	{ 		printf("\n\t数组已满，不能继续添加!");  		return(n); 	}  	return (n+1);  }   void login(client per[],int n) { 	int i,k,a,b; 	char kahao[20],mima[20]; 	printf("请输入您的卡号:"); 	scanf("%d",&i); 	printf("请再次输入您的卡号与密码:"); 	scanf("%s%s",kahao,mima); 	a=strcmp(per[i].account,kahao); 	b=strcmp(per[i].password,mima); 	if(a==0&&b==0) { 		system("cls");                        //  清屏 	printf("登录成功!请稍等…………\n"); 	k=i;   //k记录该客户 方便后续的查询 改密等 功能 	system("pause");      	gongneng(k);  //登录成功 跳出功能界面  	} else { 		printf("登录失败!请继续…………\n"); 	}    }  void gongneng(int n) { 	int select; 	do 	{ 		system("cls");                    //  清屏 		printf("\t\t*****功能界面******\n"); 		printf("\t\t\n"); 		printf("\t\t    1.查询    \n"); 		printf("\t\t    2.取款    \n"); 		printf("\t\t    3.存款    \n"); 		printf("\t\t    4.改密    \n"); 		printf("\t\t    5.登出    \n"); 		printf("\t\t                  \n"); 		printf("\t\t 请您选择(1-5)"); 		scanf("%d",&select);  		if(select<1||select>5) 		{ 			printf("\t\t非法输入!\n");   		} 	}while(select<1||select>5);                    //do while 先执行一次 如果select错误 不在1到5内 则继续执行 如果在跳出  	while(select!=1&&select!=2&&select!=3&&select!=4) 	{  		printf("输入错误，请重新选择:"); 		scanf("%d",&select); 	}  	if(select==1) { 		printf("\t查询:");  	query(dear,n); 	return; 	} 	if(select==2) { 		printf("\t取款:");  	qukuan(dear,n); 	return; 	} 	if(select==3) { 		printf("\t存款:");  	cunkuan(dear,n); 	return; 	} 	if(select==4) { 		printf("\t改密:");  	gaimi(dear,n); 	return;  	} }  void display(client per[],int n)    { 	int i; 	char qx[]={"12345"};                         //权限密码12345              	char jy[9];                                     //检验是否为超管 	printf("请输入密码!"); 	scanf("%s",jy); 	if(strcmp(qx,jy)!=0) 		printf("密码错误!"); 	return;                                   //跳出子函数 	if(strcmp(qx,jy)==0) 		printf("                                                                                                    \n");  /*显示格式*/  	printf("帐户名    生日   性别   手机号    账号    密码     身份证号    账户余额    \n");  	printf("                                                                                             \n");  	for(i=0;i<n;i++)                                                             	{  		printf("%-5s%-5d%d%d%-5c%-15s%-15s%-15s%-15s%-5d\n", 				per[i].name, 				per[i].birthday.year, 				per[i].birthday.month, 				per[i].birthday.day, 				per[i].sex, 				per[i].phone, 				per[i].account, 				per[i].password, 				per[i].identity, 				per[i].balance);  		if(i+1>1&&(i+1)%10==0) //显示10个人信息暂停                                                         		{ 			printf("\t　　　　　　　　　　　　　　　　　\n");  			printf("\t");  			system("pause");  			printf("\t　　　　　　　　　　　　　　　　　\n");  		}  	}  	printf("　　　　　　　　　　　　　　　　　\n"); 	system("pause");  }  void query(client per[],int n) { 	printf("　　　　　　　　　　　　　　　　　-\n");  /*显示格式*/  	printf("帐户名    生日   性别   手机号    账号    密码     身份证号    账户余额    \n");  	printf("　　　　　　　　　　　　　　　　　\n");  	printf("%-5s%-5d%d%d%-5c%-15s%-15s%-15s%-15s%-5d\n", 			per[n].name, 			per[n].birthday.year, 			per[n].birthday.month, 			per[n].birthday.day, 			per[n].sex, 			per[n].phone, 			per[n].account, 			per[n].password, 			per[n].identity, 			per[n].balance);  }  void qukuan(client per[],int n) { 	int w; 	printf("请输入取款钱数:"); 	scanf("%d", &w); 	if(w>per[n].balance) 		printf("您的账户余额为%d，您的余额不够",per[n].balance); 	if(w<=per[n].balance) 		printf("取款成功!"); 	per[n].balance -= w; 	return; }                                                                             void cunkuan(client per[],int n) { 	int w; 	printf("请输入存款钱数:"); 	scanf("%d", &w); 	per[n].balance += w; 	printf("存款成功!"); 	return; }  void gaimi(client per[],int n) { 	char mm[20]; 	printf("请输入您的原密码："); 	scanf("%s",mm); 	if(strcmp(per[n].password,mm)!=0){ 		printf("密码错误!"); 		return;  	} 	if(strcmp(per[n].password,mm)==0) { 		printf("密码验证成功!请输入您想修改的新密码："); 		scanf("%s",per[n].password); 	} }  void save(client per[],int n)              {  	int i=0;  	FILE *fp; /*定义文件指针*/  	printf("\t保存到文件...\n"); 	if((fp=fopen("d:\\information.txt","w"))==NULL)                    	{  		printf("\t无法打开文件\n");  		system("pause");  		return;  	}  	fprintf(fp,"******************************************信息******************************************\n"); 	fprintf(fp,"帐户名    生日   性别   手机号    账号    密码     身份证号    账户余额    \n"); 	fprintf(fp,"***************************************共有%d条记录****************************************\n",n);  	while(i<n)  	{  		fprintf(fp,"%-5s\t%d%d%d\t%-5c\t%-10s\t%-10s\t%-10s\t%-10s\t%d\n", 				per[i].name, 				per[i].birthday.year, 				per[i].birthday.month, 				per[i].birthday.day, 				per[i].sex,per[i].phone, 				per[i].account, 				per[i].password, 				per[i].identity, 				per[i].balance);  		i++;  	} 	fclose(fp); /*关闭文件*/  	printf("保存成功!\n");  }   void read(client per[],int *n)              { // main用地址传递，指针变量n记录文件中读入记录的个数 	int i=0;  	FILE *fp; /*定义文件指针*/  	printf("\t读文件...\n");   	if((fp=fopen("d:\\data.txt","r"))==NULL)                    	{  		printf("\t无法打开文件\n");  		system("pause");  		return;  	}  	char sss[200]; 	int flag=1; 	fgets(sss,200,fp); //读第一行 	fgets(sss,200,fp); //读第二行 	fgets(sss,200,fp); //读第三行 	while(flag)  	{  		flag=fscanf(fp,"%s %d %d %d %c %s %s %s %s %d\n", 				per[i].name, 				&per[i].birthday.year, 				&per[i].birthday.month, 				&per[i].birthday.day, 				&per[i].sex, 				per[i].phone, 				per[i].account, 				per[i].password, 				per[i].identity, 				&per[i].balance);  		if(flag!=EOF) 		{ 			i++;  		} 		else 			break; 	} 	fclose(fp); /*关闭文件*/  	*n=i; 	printf("文件已读入，有%d个记录!\n",i);  }  参考一下吧， 都是一些基本的语法错误。为什么一下子写出来这么多代码，而不在没写完一个功能就测试一下呢，已下载出现这么多error不感觉特别难改吗？一些逻辑错误也一并修改了。建议对照代码看一下

user: user-0
content: 文件链接：https://pan.baidu.com/s/1pLsWI3D 密码：u037

user: user-0
content: 您好，文件已发链接：https://pan.baidu.com/s/1pLsWI3D 密码：u037

user: user-3
content: 单步调试一下试试  无法执行你的程序，无数据文件