求高手帮我看看哪里出错了
我用C语言编写的“QQ会员信息管理系统”
其中内容包括:1.每个QQ会员的信息包含会员名称,性别,年龄,Q币余额和会员期限这五项信息。
2.实现以下功能:显示(即打印)、查找(按会员名称)、更改、插入、删除、升序排序(按会员名称)。
用结构体数组编写的。
编译没有任何错误,但是运行显示的却不是我编写的菜单界面。下面是我的的代码。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int QQhyNum=0;//全局变量,记录QQ会员人数。
int flag =0;//全局变量,记录执行删除和插入后QQ会员人数的变化
struct addresslist
{
int num;
char name[20];//QQ会员名称
char sex[10];//QQ会员性别
int age[10];//QQ会员年龄
float surp[10];//QQ会员余额
float time[10];//QQ会员期限
}QQhy[100];
int menu();//界面菜单
void end();//退出系统
void save();//保存QQ会员信息到文件中
void print(struct addresslist *P);//打印某QQ会员的信息
void input(struct addresslist *P,int n);//插入某QQ会员信息
void find(struct addresslist *P);//查找某QQ会员信息
void change(struct addresslist *P);//更改某QQ会员信息
void sort(struct addresslist *P);//按照QQ会员名称排序
void dele(struct addresslist *p);//删除某位会员的信息
void insert();//插入某位会员的信息
char returnToMenu(void);//返回主菜单
void main()
{
int i,peopleNum;
FILE *fp;
char chose;
if((fp=fopen("QQ会员信息表.txt","r+"))==NULL)
{
printf("文件打不开!\n");
exit(0);
}
i=0;
do
{
i=0;
while(!feof(fp))
{
fread(&QQhy[i],sizeof(struct addresslist),1,fp);
i++;
QQhyNum++;
}
switch(menu())
{
case 1:
system("cls");
print(QQhy);
chose=returnToMenu();
break;
case 2:
find(QQhy-flag);
chose=returnToMenu();
break;
case 3:
system("cls");
print(QQhy);
chose=returnToMenu();
break;
case 4:
dele(QQhy);
chose=returnToMenu();
break;
case 5:
system("cls");
printf("请输入要录入的人数\n");
scanf("%d",&peopleNum);
while(peopleNum--)
{
insert();
}
chose=returnToMenu();
break;
case 6:
system("cls");
sort(QQhy);
chose=returnToMenu();
break;
case 7:
system("cls");
end();
break;
default:
printf("输入错误");
chose=returnToMenu();
break;
}
}
while(chose!='Y' && chose!='y');
if(chose=='Y' || chose=='y')
{
system("cls");//*****
end();
}
fclose(fp);
}
//菜单显示
int menu()
{
int num;
system("cls");
printf("****************************************QQ信息表***************************************\n\n");
printf("\t1、录入");
printf("\t2、查找");
printf("\t3、更改");
printf("\t4、删除");
printf("\t5、插入");
printf("\t6、排序");
printf("\t7、退出\n\n");
printf("***************************************************************************************\n\n");
printf("请输入你想要执行的操作数:");
fflush(stdin);
scanf("%d",&num);
return num;
}
//把信息录入文件保存
void save()
{
int i;
FILE *fp;
if((fp=fopen("QQ会员信息表.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败!");
}
for(i=0;i<QQhyNum+flag-1;i++)
{
if(fwrite(&QQhy[i],sizeof(struct addresslist),1,fp)!=1)
{
printf("\n\t\n写入文件错误!\n");
}
}
fclose(fp);
printf("\n\t\tQQ会员信息文件已保存!\n");
}
//在屏幕上输出QQ会员信息
void print(struct addresslist *p)
{
int i;
for(i=QQhyNum+flag-1;i>0;i--,p++)
{
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
printf("\n*********************************************************************************\n");
}
}
//输入某QQ会员信息
void input(struct addresslist *p,int n)
{
static int i=0;
printf("请输入第%d个QQ会员信息:\n",++i);
printf("请输入名称:");
scanf("%s",p->name);
printf("请输入性别:");
scanf("%s",p->sex);
printf("请输入年龄:");
scanf("%d",p->age);
printf("请输入Q币余额:");
scanf("%f",p->surp);
printf("请输入会员期限:");
scanf("%f",p->time);
printf("\n");
printf("**********************************************输入完成!!***************************************************\n");
}
//按QQ会员名称对QQ信息排序
void sort(struct addresslist *p)
{
int j,i;
struct addresslist temp;
printf("\t\t\t按名称排序后:\n");
for(i=0;i<QQhyNum+flag-1;i++)
{
for(j=0;j<QQhyNum+flag-1;j++)
{
if(strcmp(QQhy[j].name,QQhy[j+1].name )>0)
{
temp=QQhy[j];
QQhy[j]=QQhy[j+1];
QQhy[j+1]=temp;
}
}
}
print(QQhy);
}
/*按会员名称查找会员信息*/
void find(struct addresslist *p)
{
char name2[20];
int i;
system("cls");
printf("请输入要查找的QQ会员名称:");
fflush(stdin);
scanf("%s",&name2);
for(i=0;i<QQhyNum;p++,i++)
if(strcmp((p->name),name2)==0)
{
printf("\n\n%sQQ会员信息如下:\n\n",name2);
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
}
if(i==QQhyNum)
printf("没有找到相关会员信息!\n");
}
/*删除某会员信息*/
void dele(struct addresslist *p)//******
{
char name3[20];
int i=0,j;
char choice;
system("cls");
printf("请输入要删除的QQ会员名称:");
scanf("%s",&name3);
for(i=0;i<=QQhyNum+flag;p++,i++)
if(strcmp((p->name),name3)==0)
{
printf("\n\n%sQQ会员信息如下:\n\n",name3);
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
printf("\n确定删除Y或N");
fflush(stdin);
choice=getchar();
if(choice=='Y' || choice=='y')
{
for(j=i-1;j<=QQhyNum+flag;j++)
QQhy[j+1]=QQhy[j+2];
printf("\t已成功删除!");
flag--;
save();
}
else
printf("已取消删除!");
}
if(i==QQhyNum+flag)
printf("没有找到相关会员信息!");
}
/*插入会员信息*/
void insert()//*****
{
printf("请输入要插入会员信息:\n");
input(&QQhy[QQhyNum+flag-1],1);
flag++;
save();
}
/*更改某会员信息*/
void change(struct addresslist *p)
{
int i,enter;
char add,name4[20],choice;//*****
printf("请输入要删除的QQ会员名称:");
scanf("%s",&name4);
for(i=0;i<=QQhyNum+flag;p++,i++)
if(p->name==name4)
{
printf("\n\n%sQQ会员信息如下:\n\n",name4);
printf("***************************************************************************************");
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
printf("***************************************************************************************");
printf("\n1、更改会员名称\n2、更改会员性别\n3、更改会员年龄\n4、更改会员Q币余额\n5、更改会员期限\n");
do
{
printf("请输入要更改的序号:");
scanf("%d",&enter);
while(enter>5 || enter<1)
{
printf("输入错误!!\n请再次选择:");
getchar();
scanf("%d",&enter);
}
switch(enter)
{
case 1:
printf("请输入该会员新名称:");
scanf("%d",&p->name);
break;
case 2:
printf("请输入该会员性别:");
scanf("%d",&p->sex);
break;
case 3:
printf("请输入该会员年龄:");
scanf("%d",&p->age);
break;
case 4:
printf("请输入该会员新余额:");
scanf("%d",&p->surp);
break;
case 5:
printf("请输入该会员新期限:");
scanf("%d",&p->time);
break;
}
printf("\n是否还要更改其他会员信息?需要请按Y/y:");
getchar();
scanf("%c",&choice);
}
while(choice=='y' || choice=='Y');
save();
printf("更改后会员信息为:\n");
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
break;
}
/*找不到更改的会员,询问是否添加*/
if(i==QQhyNum)
{
printf("没有此会员!\n是否添加Y/N:");
//char add;
getchar();
scanf("%c",&add);
if(add=='y' || add=='Y')
{
insert();
}
}
}
/*返回菜单*/
char returnToMenu(void)
{
char ch;
printf("\n退出按Y,否则按其他键:");
fflush(stdin);
ch=getchar();
return(ch);
}
/*退出系统*/
void end()
{
printf("*******************************************谢谢使用!********************************************");
exit(0);
}
[解决办法]
单步调试吧,刚把你代码复制下来,居然是从文件里读取信息的。没有文件不好给你调试了。
void print(struct addresslist *p)
{
int i;
for(i=QQhyNum+flag-1;i>0;i--,p++)
{
printf("名称:%s\n性别:%s\n年龄:%d\nQ币余额:%f\n会员期限:%f\n",p->name,p->sex,p->age,p->surp,p->time);
printf("\n*********************************************************************************\n");
}
}
是否i应该是大于等于0呢?
还有就是你的Menu好想和你的调用函数的顺序不搭配么