XW-YYDS 2017-06-17 06:41 采纳率: 100%
浏览 687

哪位大佬能帮我优化下这个代码

#include
#include
#include
#define LEN sizeof(struct Friends)

typedef struct Friends
{
char name[20];
char number[20];
char kuaidial[20];
struct Friends *next;
}Node;

int UI_CList();

Node *creat_inf();

void savefile(Node *head);

void readfile();

void print_inf(Node *head);

void search_inf(Node *head);

Node *add_inf(Node *head);

Node *delet_inf(Node *head);

Node *handle_inf(Node *head);

int main()
{
Node *head;
int select;
while((select=UI_CList())!=6)
{
if(select==1)
{
head=creat_inf();
savefile(head);
readfile();
printf("\n");
}
if(select==2)
{
search_inf(head);
printf("\n");
}
if(select==3)
{
head=add_inf(head);
}
if(select==4)
{
head=delet_inf(head);
print_inf(head);
printf("\n 正在返回主页面...\n");
}
if(select==5)
{
head=handle_inf(head);
print_inf(head);
printf("\n 正在返回主页面...\n");
}
if(select6) printf("\n 您的输入有误,请重新输入!\n");
}
printf("\n 正在保存文件并退出...\n");
return 0;
}

int UI_CList(void)
{
int choice;
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" : 手机通讯录 :\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" : 1 - 联系人信息输入 :\n");
printf(" : 2 - 联系人信息查询 :\n");
printf(" : 3 - 联系人信息添加 :\n");
printf(" : 4 - 联系人信息删除 :\n");
printf(" : 5 - 联系人信息修改 :\n");
printf(" : 6 - 退出 :\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf("\n 请选择功能 1-6 : ");
scanf("%d",&choice);
return choice;
}
Node *creat_inf()
{
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 1 - 联系人信息输入\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
Node *head,*r,*friends;
int i=0;
char choice;
head=(Node *)malloc(LEN);
head->next=NULL;
r=head;
do
{
friends=(Node *)malloc(LEN);
printf("\n 第%d个人的信息:\n",++i);
printf("\n 姓名: ");
scanf("%s",friends->name);
printf("\n 号码: ");
scanf("%s",friends->number);
printf("\n 归属地: ");
scanf("%s",friends->kuaidial);
getchar();
r->next=friends;
r=friends;
printf("\n Continue? (Y/N)");
choice=getchar();
}while(choice=='Y'||choice=='y');
r->next=NULL;

return head; 

}

void savefile(Node *head)
{
Node *file;
FILE *fp;
char filename[40];
printf("\n 请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"a+"))==NULL)
{
printf("\n 写文件错误,按任意键退出!\n");
getchar();
exit(1);
}
file=head->next;
while(file)
{
fprintf(fp,"%s %s %s\n",file->name,file->number,file->kuaidial);
file=file->next;
}
printf("\n 文件已成功保存,按任意键返回!\n");
getchar();
fclose(fp);
}

void readfile()
{
Node *head,*r,*file;
FILE *fp;
char filename[40];
printf("\n 请输入要打开的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n 读文件错误,按任意键退出!\n");
getchar();
exit(1);
}
head=(Node *)malloc(LEN);
head->next=NULL;
r=head;
printf("\n 姓名\t\t号码\t\t归属地\n");
while(!feof(fp))
{
file=(Node *)malloc(LEN);
fscanf(fp,"%s %s %s\r\n",file->name,file->number,file->kuaidial);
printf("\n %s\t\t%s\t\t%s",file->name,file->number,file->kuaidial);
r->next=file;
r=file;
}
r->next=NULL;
printf("\n\n 文件中信息已经正确读出,正在返回主页面...\n");
getchar();
fclose(fp);
}

void print_inf(Node *head)
{
Node *p=head->next;
if(head->next!=NULL)
{
printf("\n 各个联系人的通讯信息如下:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
do
{
printf("\n %s\t\t%s\t\t%s",p->name,p->number,p->kuaidial);
p=p->next;
}while(p!=NULL);
printf("\n");
}
}

void search_inf(Node *head)
{
Node *r,*file_1;
r=head;
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 2 - 联系人信息查询\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
FILE *fp1;
fp1=fopen("通讯录.dat","r+");
printf("\n 已有联系人:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
while(!feof(fp1))
{
file_1=(Node *)malloc(LEN);
fscanf(fp1,"%s %s %s\r\n",file_1->name,file_1->number,file_1->kuaidial);
printf("\n %s\t\t%s\t\t%s",file_1->name,file_1->number,file_1->kuaidial);
r->next=file_1;
r=file_1;
}
char name[10];
printf("\n\n 你想查找哪位联系人的信息?请输入他的名字:");
scanf("%s",name);
Node *p=head;
while(p&&(strcmp(p->name,name)!=0)) p=p->next;
printf("\n 该联系人的信息如下:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
printf("\n %s\t\t%s\t\t%s",p->name,p->number,p->kuaidial);
printf("\n");
fclose(fp1);
}

Node *add_inf(Node *head)
{
Node *r=head,*file_3;
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 3 - 联系人信息添加\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
FILE *fp4;
fp4=fopen("通讯录.dat","r+");
printf("\n 已有联系人:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
while(!feof(fp4))
{
file_3=(Node *)malloc(LEN);
fscanf(fp4,"%s %s %s\r\n",file_3->name,file_3->number,file_3->kuaidial);
printf("\n %s\t\t%s\t\t%s",file_3->name,file_3->number,file_3->kuaidial);
r->next=file_3;
r=file_3;
}
char name[10];
char number[20];
printf("\n\n 你想添加谁的电话号码?请输入他的名字:");
scanf("%s",name);
printf("\n 现在请您输入号码:");
scanf("%s",number);
Node *p=head;
while(p&&(strcmp(p->name,name)!=0)) p=p->next;
strcat(p->number,"/");
strcat(p->number,number);
printf("\n 联系人信息已保存,正在返回主页面...\n");
print_inf(head);
fclose(fp4);
return head;
}

Node *delet_inf(Node *head)
{
Node *file_2,*r;
r=head;
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 4 - 联系人信息删除\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
FILE *fp2;
fp2=fopen("通讯录.dat","r+");
printf("\n 已有联系人:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
while(!feof(fp2))
{
file_2=(Node *)malloc(LEN);
fscanf(fp2,"%s %s %s\r\n",file_2->name,file_2->number,file_2->kuaidial);
printf("\n %s\t\t%s\t\t%s",file_2->name,file_2->number,file_2->kuaidial);
r->next=file_2;
r=file_2;
}
char name[20];
Node *p=head;
printf("\n 你想删除谁的号码? ");
scanf("%s",name);
while(p&&(strcmp(p->name,name)!=0)) p=p->next;
strcpy(p->number,"\0");
printf("\n 您好,%s的号码已删除!\n",name);
fclose(fp2);
return head;
}

Node *handle_inf(Node *head)
{
Node *file_3,*r;
r=head;
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
printf(" 5 - 联系人信息修改\n");
printf("\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
FILE *fp3;
fp3=fopen("通讯录.dat","r+");
printf("\n 已有联系人:\n");
printf("\n 姓名\t\t号码\t\t归属地\n");
while(!feof(fp3))
{
file_3=(Node *)malloc(LEN);
fscanf(fp3,"%s %s %s\r\n",file_3->name,file_3->number,file_3->kuaidial);
printf("\n %s\t\t%s\t\t%s",file_3->name,file_3->number,file_3->kuaidial);
r->next=file_3;
r=file_3;
}
char name[20];
char name1[20];
char number[20];
char area1[20];
printf("\n\n 你想改变谁的通讯信息?请输入他的名字:");
scanf("%s",name);
Node *p=head;
while(p&&(strcmp(p->name,name)!=0)) p=p->next;
printf("\n 请输入有关‘%s’的新信息:",name);
printf("\n 姓名: ");
scanf("%s",name1);
printf("\n 号码: ");
scanf("%s",number);
printf("\n 归属地: ");
scanf("%s",area1);
strcpy(p->name,name1);
strcpy(p->number,number);
strcpy(p->kuaidial,area1);
fclose(fp3);

return head;

}

  • 写回答

1条回答 默认 最新

  • 你好世界123 2017-06-17 07:59
    关注

    可以将功能选择,做成模块化,更容易维护

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题