求大神帮忙改一下通讯录运行不流畅,下面是代码,大佬帮个忙
#include <stdio.h>#include <stdlib.h>
#include <string.h>
FILE *fp;
void zhucaidan(); /*主菜单函数*/
void charu(); /*插入联系人函数*/
void readfile(); /*文件中读取函数*/
void writefile(); /*文件中写入函数*/
void xiugai(); /*修改联系人函数*/
void xiugai_xingming(); /*姓名修改*/
void paixu_xingming();/*姓名排序*/
void chazhao(); /*查找联系人函数*/
void chazhao_xingming(); /*按姓名查找*/
void chazhao_dianhua(); /*按号码查找*/
void shanchu(); /*删除联系人函数*/
void shanchu_quanbu(); /*全部删除*/
void shanchu_dange(); /*单个删除*/
void xianshi(); /*号码显示*/
void zhucaidan()
{
char c;
system("cls");
printf("\n\t\t|----- 欢迎您使用通讯录管理系统2018版-----|");
printf("\n\t\t|--------------1-插入联系人信息-----------|");
printf("\n\t\t|--------------2-显示联系人信息-----------|");
printf("\n\t\t|--------------3-查找联系人---------------|");
printf("\n\t\t|--------------4-修改联系人---------------|");
printf("\n\t\t|--------------5-删除联系人---------------|");
printf("\n\t\t|--------------6-姓名排序-----------------|");
printf("\n\t\t|--------------7-保存退出-----------------|");
printf("\n\t\t|--------------0不保存退出----------------|");
printf("\n\t\t|-----------------------------------------|");
printf("\n\t\t请选择您所需要的服务(0-7):");
c=getchar();
getchar();
switch (c) /*对于上边的选择项目*/
{
case '1':charu();break;
case '2':xianshi();break;
case '3':chazhao();break;
case '4':xiugai();break;
case '5':shanchu();break;
case '6':paixu_xingming();break;
case '7':writefile();break;
case '0':exit(0);
default:zhucaidan(); /*如果没有则返回主菜单等待输入*/
}
}
typedef struct tongxunlu
{
char xingming[9];//姓名
char dianhua[12];//电话号码
char dizhi[100];//住址
}tongxunlu;//联系人
int n=3;
tongxunlu txl[100]={
{"张三","18755995818","安徽黄山"},
{"李四","15955986603","安徽蚌埠"},
{"王五","18755901234","山东菏泽"}
};
void main() /*主函数main*/
{
readfile(); /*读入文件*/
while(1) /* 循环(永远进行)*/
{
zhucaidan(); /*调用主菜单函数*/
}
}
getch();
void charu()
{
printf("\n\t\t------------------ 请输入联系人信息--------------------\n");
printf("\n\t\t输入联系人姓名:");
scanf("%s",txl[n].xingming); /*键盘输入*/
printf("\n\t\t输入联系人电话号码:");
scanf("%s",txl[n].dianhua);
printf("\n\t\t输入联系人地址:");
scanf("%s",txl[n].dizhi);
n++; /*统计个数*/
printf("\n\t\t是否继续添加联系人?(Y/N):"); /*是否继续输入联系人.*/
if (getchar()=='y')
charu();
return;
}
void readfile()
{
int i;
FILE*p;
if((fp=fopen("c:\\通讯录.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i<n;i++)
{
fread(&txl[i],sizeof(struct tongxunlu),1,fp);
printf("\n%-10s%-15s%-10s",txl[i].xingming,txl[i].dianhua,txl[i].dizhi);
}
fclose(fp);
}
void writefile() /*插入好友信息*/
{
int i;
if ((fp=fopen("c:\\通讯录.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i<n;i++);
{
if (fwrite(&txl[i],sizeof(struct tongxunlu),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
}
fclose(fp); /*关闭文件*/
printf("\n\t------------------------------------------------------"); /*输出提示信息*/
printf("\n\t\t---------通讯录文件已保存---------------------------");
printf("\n\t\t---------谢谢使用,欢迎再次使用!-------------------\n");
printf("\n\t\t按任意键退出程序\n\t\t"); /*输出完毕*/
exit(0);
printf("\n\t------------------------------------------------------");
}
void xianshi()//显示所有联系人函数
{
int i;
system("cls");//清除屏幕
if(n!=0)
{
printf("\n\t\t----------欢迎您查询通讯录所有联系人信息-------------");
for (i=0;i<n;i++) /*依次序显示*/
{
printf("\n\t\t姓名:%s",txl[i].xingming);
printf("\n\t\t电话:%s",txl[i].dianhua);
printf("\n\t\t地址:%s",txl[i].dizhi);
printf("\n\t\t-----------------------------------------------------");
if (i+1<n)
{
printf("\n\t\t-----------------------");
system("pause");//返回错误信息
}
}
printf("\n\t\t-----------------------------------------------------");
}
else /*无联系人*/
{printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");}
getchar();
return;
}
void chazhao()
{
int c;
while(1)
{
//system("cls");
printf("\n\t\t------------------- 显示和查询联系人------------------");
printf("\n\t\t|------------------ 1-逐个显示所有|-------------------");
printf("\n\t\t|------------------ 2-按姓名查询|---------------------");
printf("\n\t\t|------------------ 3-按电话查询|---------------------");
printf("\n\t\t|------------------ 4-返回主菜单|---------------------");
printf("\n\t\t|-----------------------------------------------------");
printf("\n\t\t请选择您所所要的服务:");
scanf("%d",&c);
switch (c)
{
case 1:xianshi();break; /*显示所有号码*/
case 2:chazhao_xingming();break; /*调用按姓名查询函数*/
case 3:chazhao_dianhua();break; /*调用按号码查询函数*/
case 4:zhucaidan();break; /*主菜单*/
}
}
}
void chazhao_xingming()/*查找好友信息,按姓名查询*/
{char k;
int mark=0;
int i;
char name[9];
printf("\n\t\t----------------按姓名查找--------------------");
printf("\n\t\t请输入您要查找的姓名:");
scanf("%s",name);
//getchar();
for(i=0;i<n;i++)
{
//printf("%d.......\n",i);
if (strcmp(txl[i].xingming,name)==0)
{
printf("\n\t\t------------ 以下是您查找的联系人信息---------------");
printf("\n\t\t姓名:%s",txl[i].xingming);
printf("\n\t\t电话:%s",txl[i].dianhua);
printf("\n\t\t地址:%s",txl[i].dizhi);
printf("\n\t\t---------------------------------------------------");
mark++;
//getchar();
//return;
}
}
if (mark==0)
{
printf("\n\t\t没有找到联系人的信息");
printf("\n\t\t按任意键返回主菜单");
scanf("%c",&k);
return;
}
}
void chazhao_dianhua()
{
int mark=0;
int i;
char phone[12];
printf("\n\t\t------------------- 按电话查找-------------------------");
printf("\n\t\t请输入电话号码:");
scanf("%s",phone);
for(i=0;i<n;i++)
{
if (strcmp(txl[i].dianhua,phone)==0)//对比查找函数
{
printf("\n\t\t------------ 以下是您查找的学生信息------------");
printf("\n\t\t姓名:%s",txl[i].xingming);
printf("\n\t\t电话:%s",txl[i].dianhua);
printf("\n\t\t地址:%s",txl[i].dizhi);
printf("\n\t\t------------------------------------------------");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getchar();
return;
}
}
if (mark==0)
{
printf("\n\t\t没有找到联系人的信息");
printf("\n\t\t按任意键返回主菜单");
getchar();
return;
}
}
void xiugai() /*修改函数*/
{
char c;
if(n==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getchar();
return;
}
system("cls");
printf("\n\t\t-----------------修改联系人菜单-----------------------");
printf("\n\t\t|--------------- 1-按姓名修改------------------------|");
printf("\n\t\t|--------------- 2-按电话修改------------------------|");
printf("\n\t\t| 任意键-按返回主菜单|");
c=getchar();
switch(c)
{
case '1':xiugai_xingming();break;
//case '2':xiugai_dianhua();break;
default:zhucaidan();break;
}
}
void xiugai_xingming()
{
char c;
int i,mark=0;
char name[9];
printf("\n\t\t请输入要修改的联系人姓名:");
scanf("%s",name);
if(n==0)
{
printf("\n\t\t文件中无任何联系人");
printf("\n\t\t按任意键返回主菜单");
getchar(); mark++;
return;
}
for(i=0;i<n;i++)
{
if(strcmp(txl[i].xingming,name)==0)
{
printf("\n\t\t以下是您要修改的联系人信息");
printf("\n\t\t姓名: %s",txl[i].xingming);
printf("\n\t\t电话: %s",txl[i].dianhua);
printf("\n\t\t地址: %s",txl[i].dizhi);
printf("\n\t\t是否修改(y/n)");
if(getchar()=='y')
{
printf("\n\t------------请选择修改信息---------------");
printf("\n\t------------1-修改姓名-------------------");
printf("\n\t------------2-修改电话-------------------");
printf("\n\t------------3-修改地址-------------------");
printf("\n\t-----------------------------------------");
printf("\n\t请选择您所所要的服务:");
scanf("%s",&c);
switch(c)
{
case '1': printf("\n\t请输入新姓名:");
scanf("%s",txl[i].xingming);break;
case'2':printf("\n\t请输入新电话:%s");
scanf("%s",txl[i].dianhua);break;
case'3':printf("\n\t请输入新地址: ");
scanf("%s",txl[i].dizhi);break;
}
}
}
}
if(mark==0)
{
printf("\n\t\t没有找到联系人信息");
printf("\n\t是否继续修改?(Y/N):");
if(getchar()=='y')
xiugai_xingming();
return;
}
}
void xiugai_dianhua()
{
char c,phone[12];
int i,mark=0;
printf("\n\t\t请输入要修改联系人的号码:");
scanf("%s",phone);
if(n==0)
{
printf("\n\t\t文件中无任何联系人");
printf("\n\t\t按任意键返回主菜单");
getchar();mark++;
return;
}
for(i=0;i<n;i++)
{
if(strcmp(txl[i].dianhua,phone)==0)
{
printf("\n\t\t以下是您要修改的联系人信息");
printf("\n\t\t姓名: %s",txl[i].xingming);
printf("\n\t\t电话: %s",txl[i].dianhua);
printf("\n\t\t是否修改(y/n)");
if(getchar()=='y')
printf("\n\t\t地址: %s",txl[i].dizhi);
{
printf("\n\t------------请选择修改信息---------------");
printf("\n\t------------1-修改姓名-------------------");
printf("\n\t------------2-修改电话-------------------");
printf("\n\t------------3-修改地址-------------------");
printf("\n\t-----------------------------------------");
printf("\n\t请选择您所所要的服务:");
scanf("%s",&c);
switch(c)
{
case'1': printf("\n\t请输入新姓名:");
scanf("%s",txl[i].xingming);break;
case'2':printf("\n\t请输入新电话:");
scanf("%s",txl[i].dianhua);break;
case'3':printf("\n\t请输入新地址: ");
scanf("%s",txl[i].dizhi);break;
}
}
}
}
if(mark==0)
{
printf("\n\t没有该联系人信息");
printf("\n\t是否继续修改?(Y/N):");
if(getchar()=='y')
xiugai_dianhua();
return;
}
}
void shanchu_xingming()/*给定姓名,删除好友的信息*/
{
int i,m,mark=0,a=0;
char name[20];
printf("\n\t\t请输入要删除联系人姓名:");
scanf("%s",name); /*键盘输入姓名*/
for (i=a;i<n;i++)
{
if (strcmp(txl[i].xingming,name) == 0) //对比字符串查找到要删除的联系人
{
printf("\n\t\t以下是您要删除的联系人纪录:");
printf("\n\t\t--------------------------------");
printf("\n\t\t姓名:%s",txl[i].xingming);
printf("\n\t\t电话:%s",txl[i].dianhua);
printf("\n\t\t地址:%s",txl[i].dizhi);
printf("\n\t\t--------------------------------");
printf("\n\t\t是否删除?(y/n)");
if (getchar()=='y') // 实现删除功能
{
for (m=i;m<n-1;m++)
txl[m]=txl[m+1]; /*将通讯录的想前移*/
n--;
mark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getchar()=='y')
shanchu_xingming(); /*继续调用删除函数*/
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("\n\t\t没有该联系人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getchar()=='y')
shanchu_xingming();
return;
}
}
void shanchu()//删除联系人函数
{
char c;
if(n==0) /*如果通讯录中没有一个记录输出以下部分*/
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getchar();
return;
}
system("cls"); /*清屏*/
printf("\n\t\t----------------- 删除菜单----------------------");
printf("\n\t\t|---------------- 1-删除所有-------------------|");
printf("\n\t\t|---------------- 2-删除单个-------------------|");
printf("\n\t\t|---------------- 3-返回主菜单-----------------|");
printf("\n\t\t|-----------------------------------------------");
printf("\n\t\t请选择您所所要的服务:");
c=getchar(); /*输入的赋予choice*/
switch (c)
{
case '3':zhucaidan();break;
default:zhucaidan();break;
}
}
void paixu_xingming ()//联系人排序
{
int i,k,j;
tongxunlu t;
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(strcmp(txl[j].xingming,txl[k].xingming)<0)
k=j;
if(i!=k)
{
t=txl[i];txl[i]=txl[k];txl[k]=t;
}
}
}
getch();