求大神帮忙,数据结构通讯录里面总是出问题,结果出不来
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{char num[10],name[20],tel[20],address[40],unit[10],email[30];}
stu[500];
int pc=0;
FILE *fp;
void mainmenu();//主菜单
void newrecord();//新名片
void searchbyname();//按姓名查询
void searchbynum();//按编号查询
void showall();//显示所有
void readfromfile();//读取文件
void writetofile();//写入文件
void deletebynum();//按编号删除
void deletebyname();//按姓名删除
void modifybynum();//按编号修改
void modifybyname();//按姓名修改
void main()
{ readfromfile();
while (1)
{mainmenu();
}
}
void readfromfile()//从文件导入
{ if((fp=fopen("stu.txt","rb"))==NULL)
{ printf("\n\t\t通讯录文件不存在");
if ((fp=fopen("stu.txt","wb"))==NULL)
{ printf("\n\t\t建立失败");
exit(0);
}
else
{ printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入菜单");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指针移动到文件末尾*/
if (ftell(fp)>0) /*文件不为空*/
{rewind(fp); /*文件位置指针移动到文件开始位置*/
for (pc=0;!feof(fp) && fread(&stu[pc],sizeof(struct record),1,fp);pc++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回菜单");
getch();
return;
}
void mainmenu()//主菜单
{
char choic;
system("cls");
printf("\n\t\t********************主菜单********************");
printf("\n\t\t***********0-新添名片 1-全部显示************");
printf("\n\t\t***********2-按编号查询 3-按姓名查询************");
printf("\n\t\t***********4-按姓名删除 5-按编号删除************");
printf("\n\t\t***********6-按姓名修改 7-按编号修改************");
printf("\n\t\t***********8-保存退出 9-不保存退出***********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic=getch();
switch(choic){
case'0':newrecord();break;
case'1':showall();break;
case'2':searchbynum();break;
case'3':searchbyname();break;
case'4':deletebyname();break;
case'5':deletebynum();break;
case'6':modifybyname();break;
case'7':modifybyname();break;
case'8':writetofile();break;
case 'a':writetofile();break;
case 'b':exit(0);
default:mainmenu();
}
}
//2、删除名片信息:
void deletebyname()//按姓名删除
{ int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\n\t\t请输入要删除的姓名:");
scanf("%s",name);
for (i=a;i<pc;i++)
{if(strcmp(stu[i].name,name)==NULL)
{printf("\n\t\t以下是您要删除的名片纪录:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t编号:%s",stu[i].num);
printf("\n\t\t姓名:%s",stu[i].name);
printf("\n\t\t电话:%s",stu[i].tel);
printf("\n\t\t地址:%s",stu[i].address);
printf("\n\t\temail:%s",stu[i].email);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除 (y/n)");
if (getch()=='y')
{for(j=i;j<pc-1;j++)/*纪录移动,从stud数组中删除之*/
stu[j]=stu[j+1];
pc--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1)<pc)
{ printf("\n\t\t是否继续删除相同姓名的名片信息?(y/n)");
if(getch()=='y')
{a=i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyname();
return;
}
if((i+1)<pc)
{ printf("\n\t\t是否继续删除相同姓名的名片信息?(y/n)");
if (getch()=='y')
{ a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{ printf("\n\t\t没有该名片的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyname();
return;
return;
}
else if (findmark!=0)
{ printf("\n\t\t没有重名信息");
printf("\n\t\t没有该名片的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebynum();
return;
return;
}
}
void deletebynum()//按编号删除
{ int i,j;
int deletemark=0;
char num [20];
printf("\n\t\t请输入要删除的名片编号:");
scanf("%s",num);
if(pc==0)
{ printf("\n\t\t文件中无任何纪录");
printf("\n\t\t按任意键返回菜单");
getch();
return;
}
for(i=0;i<pc;i++)
{ if (strcmp(stu[i].num,num)==NULL)
{ printf("\n\t\t以下是您要删除的名片纪录:");
printf("\n\t\t编号:%s",stu[i].num);
printf("\n\t\t姓名 %s",stu[i].name);
printf("\n\t\t电话:%s",stu[i].tel);
printf("\n\t\t地址:%s",stu[i].address);
printf("\n\t\temail:%s",stu[i].email);
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{for (j=i;j<pc-1;j++) /*纪录移动,从stud数组中删除之*/
stu[j]=stu[j+1];
pc--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebynum();
return();
}
else
return;
}
continue;
}
if(deletemark==0)
{ printf("\n\t\t没有该名片的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebynum();
return;
}
}
void newrecord()//添加新名片
{ printf("\n\t\t****************请输入名片信息****************\n");
printf("\n\t\t输入编号:");
scanf("%s",&stu[pc].num);
printf("\n\t\t输入姓名:");
scanf("%s",&stu[pc].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&stu[pc].tel);
printf("\n\t\t输入地址:");
scanf("%s",&stu[pc].address);
printf("\n\t\t输入单位:");
scanf("%s",&stu[pc].unit);
printf("\n\t\t输入email:");
scanf("%s",&stu[pc].email);
pc++;
printf("\n\t\t是否继续添加?(y/n):");
if (getch()=='y')
newrecord();
return;
}
void showall()//显示所有名片
{
int i;
system("cls");
system("cls");
{ printf("\n\t\t***************以下为通讯录所有信息************");
for (i=0;i<pc;i++)
{ printf("\n\t\t编号:%s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t电话: %s",stu[i].tel);
printf("\n\t\t地址: %s",stu[i].address);
printf("\n\t\t单位: %s",stu[i].unit);
printf("\n\t\temail: %s",stu[i].email);
printf("\t\t");
if (i+1<pc)
{ printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return;
}
//5、查询名片信息:
void searchbyname()//按姓名查询?
{ int mark=0;
int i;
int a=0;
printf("\n\t\t*****************按姓名查找*******************");
char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<pc;i++)
{if(strcmp(stu[i].name,name)==0)
{printf("\n\t\t*************以下是您查找的名片信息***********");
printf("\n\t\t学号:%s",stu[i].num);
printf("\n\t\t姓名:%s",stu[i].name);
printf("\n\t\t电话:%s",stu[i].tel);
printf("\n\t\t地址:%s",stu[i].address);
printf("\n\t\te-mail:%s",stu[i].email);
printf("\n\t\t************************************************");
mark++;
if((i+1)<pc)
{printf("\n\t\t是否继续查找相同名字的名片信息:(y/n)");
if (getch()=='y')
{a=i;
continue;
}
else
return;
}
else
{printf("\n\t\t按任意键返回菜单");
getch();
return;
}
}
}
if(mark!=0)
{printf("\n\t\t没有相同姓名的学生纪录");
printf("\n\t\t按任意键返回菜单");
getch();
return;
}
else
{
printf("\n\t\t没有相同姓名的名片纪录");
printf("\n\t\t按任意键返回菜单");
getch();
return;
}
}
void searchbynum()//按编号查询
{int mark=0;
int i;
int a=0;
printf("\n\t\t******************按编号查找******************\n");
char num[10];
printf("\n\t\t请输入编号:");
scanf("%s",num);
for(i=0;i<pc;i++)
{if(strcmp(stu[i].num,num)==0)
{printf("\n\t\t**************以下是您查找的名片信息**********");
printf("\n\t\t编号:%s",stu[i].num);
printf("\n\t\t姓名:%s",stu[i].name);
printf("\n\t\t电话:%s",stu[i].tel);
printf("\n\t\t地址:%s",stu[i].address);
printf("\n\t\te-mail:%s",stu[i].email);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if(mark==0)
{printf("\n\t\t没有改名片的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void writetofile()//写入文件
{ int i;
if ((fp=fopen("stu.txt","wb"))==NULL)
{ printf("\n\t\t文件打开失败");
}
for (i=0;i<pc;i++)
{ if (fwrite(&stu[i],sizeof(struct record),1,fp)!=1)
{ printf("\n\t\t写入文件错误!\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
void modifybyname()
{
int mark=0;
int i;
int a=0;
int j;
int findmark=0;
int deletemark=0;
printf("\n\t\t*****************按姓名修改*******************");
char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i<pc;i++)
{ if (strcmp(stu[i].name,name)==0)
{
printf("\n\t\t*************以下是您修改的名片信息***********");
printf("\n\t\t学号: %s",stu[i].num);
printf("\n\t\t姓名: %s",stu[i].name);
printf("\n\t\t电话: %s",stu[i].tel);
printf("\n\t\t地址: %s",stu[i].address);
printf("\n\t\te-mail:%s",stu[i].email);
printf("\n\t\t************************************************");
}
printf("请输入要修改的内容:");
for (j=i;j<pc-1;j++)
stu[j]=stu[j+1];
pc--;
deletemark++;
printf("\n\t\t输入编号:");
scanf("%s",&stu[pc].num);
printf("\n\t\t输入姓名:");
scanf("%s",&stu[pc].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&stu[pc].tel);
printf("\n\t\t输入地址:");
scanf("%s",&stu[pc].address);
printf("\n\t\t输入单位:");
scanf("%s",&stu[pc].unit);
printf("\n\t\t输入email:");
scanf("%s",&stu[pc].email);
pc++;
printf("\n\t\t是否继续修改?(y/n):");
if (getch()=='y')
modifybyname;
return;
}
}
void modifybynum()
{
int mark=0;
int i;
int a=0;
int j;
int findmark=0;
int deletemark=0;
printf("\n\t\t******************按编号修改******************\n");
char num[10];
printf("\n\t\t请输入编号:");
scanf("%s",num);
for(i=0;i<pc;i++)
{ if (strcmp(stu[i].num,num)==0)
{ printf("\n\t\t************** 以下是您修改的名片信息 **********");
printf("\n\t\t编号:%s",stu[i].num);
printf("\n\t\t姓名:%s",stu[i].name);
printf("\n\t\t电话:%s",stu[i].tel);
printf("\n\t\t地址:%s",stu[i].address);
printf("\n\t\te-mail:%s",stu[i].email);
printf("\n\t\t************************************************");
}
printf("请输入要修改的内容:");
{ for (j=i;j<pc-1;j++)
stu[j]=stu[j+1];
pc--;
deletemark++;
}
printf("\n\t\t输入编号:");
scanf("%s",&stu[pc].num);
printf("\n\t\t输入姓名:");
scanf("%s",&stu[pc].name);
?printf("\n\t\t输入电话号码:");
scanf("%s",&stu[pc].tel);
printf("\n\t\t输入地址:");
scanf("%s",&stu[pc].address);
printf("\n\t\t输入单位:");
?scanf("%s",&stu[pc].unit);
printf("\n\t\t输入email:");
scanf("%s",&stu[pc].email);
pc++;
printf("\n\t\t是否继续修改?(y/n):");
if(getch()=='y')
modifybynum();
return;
}
}