cin>>m;
if(m==1)
change(&key);
in_file.close();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
系统功能
1建立一个学生通讯录,并实现对通讯录的插入修改删除排序和查询等操作
2设计简单的字符菜单将上述功能组装起来,形成一个完整的系统
3最好可以将通讯录的信息用文件方式保存,每次运行程序时可以直接读取
问题补充:
哥们有三个错麻烦你帮我全部搞定。
。
。
我赶作业。
。
。
c学的很不扎实现在自己实在做不来
谢谢
我用的tc3.0
最佳答案
给,已经编译运行确认了:
#include
#include
#include
#include
structrecord
{
charid[10];
charname[20];
charphone[20];
charadress[40];
charpostcode[10];
chare_mail[30];
}student[500];
intnum=0;//外部变量num为文件中的纪录数
FILE*fp;
voidmainmenu();//主菜单
voidnewrecord();//新添纪录
voidsearchmenu();//查询菜单
voidsearchbyid();//按学号查询
voidsearchbyname();//按姓名查询
voidsearchbyphone();//按电话查询
voiddeletemenu();//删除菜单
voiddeleteall();//删除所有
voiddeleteone();//删除单个
voidshowall();//显示所有
voidreadfromfile();//读取文件
voidwritetofile();//写入文件
voiddeletebyid();//按学号删除
voiddeletebyname();//按姓名删除
voidlistbyid();//按学号排序
voidlistbyname();//按姓名排序
voidlistmenu();//排序菜单
voidmain()
{
readfromfile();
while
(1)
{
mainmenu();
}
}
voidreadfromfile()//从文件导入
{
if((fp=fopen("student.bin","rb"))==NULL)
{
printf("\n\t\t通讯录文件不存在");
if((fp=fopen("student.bin","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(num=0;!
feof(fp)&&fread(&student[num],sizeof(structrecord),1,fp);num++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
voidmainmenu()//主菜单
{
charchoic;
system("cls");
printf("\n\t\t********************主菜单********************");
printf("\n\t\t***********1-新添纪录2-查询菜单************");
printf("\n\t\t***********3-删除菜单4-记录排序************");
printf("\n\t\t***********5-保存退出6-不保存退出***********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
newrecord();break;
case'2':
searchmenu();break;
case'3':
deletemenu();break;
case'4':
listmenu();break;
case'5':
writetofile();break;
case'6':
exit(0);
default:
mainmenu();
}
}
voidsearchmenu()//查询菜单
{
charchoic;
system("cls");
printf("\n\t\t*******************查询菜单*******************");
printf("\n\t\t**********1-显示所有2-按学号查询************");
printf("\n\t\t**********3-按姓名查询4-按电话查询************");
printf("\n\t\t**********5-返回主菜单************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
showall();break;
case'2':
searchbyid();break;
case'3':
searchbyname();break;
case'4':
searchbyphone();break;
case'5':
mainmenu();break;
}
}
voiddeletemenu()//删除菜单
{
charchoic;
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t*******************删除菜单*******************");
printf("\n\t\t***********1-删除所有2-删除单个***********");
printf("\n\t\t***********3-返回主菜单***********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:
");
choic=getch();
switch(choic)
{
case'1':
deleteall();break;
case'2':
deleteone();break;
case'3':
mainmenu();break;
default:
mainmenu();break;
}
}
voiddeleteall()//删除所有
{
printf("\n\t\t确认删除?
(y/n)");
if(getch()=='y')
{
fclose(fp);
if((fp=fopen("student.bin","wb"))==NULL)
{
printf("\n\t\t不能打开文件,删除失败");
readfromfile();
}
num=0;
printf("\n\t\t纪录已删除,按任意键返回主菜单");
getch();
return;
}
else
return;
}
voiddeletebyname()//按姓名删除
{
inta=0;
intfindmark=0;
intj;
intdeletemark=0;
inti;
charname[20];
printf("\n\t\t请输入要删除学生姓名:
");
scanf("%s",name);
for(i=a;i{
if(strcmp(student[i].name,name)==NULL)
{
printf("\n\t\t以下是您要删除的学生纪录:
");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t学号:
%s",student[i].id);
printf("\n\t\t姓名:
%s",student[i].name);
printf("\n\t\t电话:
%s",student[i].phone);
printf("\n\t\t地址:
%s",student[i].adress);
printf("\n\t\te-mail:
%s",student[i].e_mail);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?
(y/n)");
if(getch()=='y')
{
for(j=i;jstudent[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1){
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){
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')
deletebyid();
return;
return;
}
elseif(findmark!
=0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有该同学的纪录");
printf("\n\t\t是否继续删除?
(y/n)");
if(getch()=='y')
deletebyid();
return;
return;
}
}
voiddeletebyid()//按学号删除
{
inti,j;
intdeletemark=0;
char