能再简化点么?最好把list 和list1 简化成一个 在线等待 谢谢啦
#include "stdio.h"
#include"conio.h"
#define M 50
void show_menu()
{
printf("\n\n");
printf("┏━━━━━━主菜单━━━━━━┓\n");
printf("┃ 1.显示通讯录 ┃\n");
printf("┃ 2.添加记录 ┃\n");
printf("┃ 3.编辑记录 ┃\n");
printf("┃ 4.整理记录 ┃\n");
printf("┃ 5.导出通讯录 ┃\n");
printf("┃ 6.导入通讯录 ┃\n");
printf("┃ 9.退出 ┃\n");
printf("┗━━━━━━━━━━━━━━━┛\n");
printf("\n\n");
}
typedef struct
{
char name[9];
char addr[31];
char tele[12];
int scor;
}ADDRESS;
int menu_select()
{
char c[2];
printf("输入你的选择(1~9)");
scanf("%s",c);
return atoi(c);
}
void list(ADDRESS t[],int n)
{ int i,r=0;
clrscr();
gotoxy(6,3);
printf("┏━━━━┯━━━━━━━━━显示通讯录━━┯━━━━━━━┯━━━━┓");
gotoxy(6,4);
printf("┃姓名 │住址 │电话号码 │ 积分 ┃");
gotoxy(6,5);
printf("┠────┼────────────────┼───────┼────┨");
for(i=0,r=6;i<n;i++,r++)
{ gotoxy(6,r);printf("┃");
gotoxy(8,r);printf("%s",t[i].name);
gotoxy(16,r);printf("│");
gotoxy(18,r);printf("%s",t[i].addr);
gotoxy(50,r);printf("│");
gotoxy(52,r);printf("%s",t[i].tele);
gotoxy(66,r);printf("│");
gotoxy(68,r);printf("%d",t[i].scor);
gotoxy(76,r);printf("┃\n");
}
gotoxy(6,r);printf("┗━━━━┷━━━━━━━━━━━━━━━━┷━━━━━━━┷━━━━┛");
}
int enter(ADDRESS t[],int n)
{
int k=0;
printf("请输入以下信息,姓名若输入'?'则结束:姓名 住址 电话 积分\n");
printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
while(1)
{
scanf("%s",t[n].name);
if(strcmp(t[n].name,"?")==0)break;
scanf("%s%s%d",t[n].addr,t[n].tele,&t[n].scor);
printf("┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
n++;k++;
}
printf("要添加%d记录结束!",k);
return n;
}
void show_menu1()
{
printf("\n\n");
printf("┏━━━━━━主菜单━━━━━━┓\n");
printf("┃ 1.插入记录 ┃\n");
printf("┃ 2.删除记录 ┃\n");
printf("┃ 3.修改记录 ┃\n");
printf("┃ 4.退出 ┃\n");
printf("┗━━━━━━━━━━━━━━━┛\n");
printf("\n\n");
}
int menu_select1()
{
char c[2];
printf("输入你的选择(1~4)");
scanf("%s",c);
return atoi(c);
}
void list1(ADDRESS t[],int n)
{ int i,r=0;
clrscr();
gotoxy(6,3);
printf("┏━━━━┯━━━━━━━━━显示通讯录━━┯━━━━━━━┯━━━━┓");
gotoxy(6,4);
printf("┃姓名 │住址 │电话号码 │ 积分 ┃");
gotoxy(6,5);
printf("┠────┼────────────────┼───────┼────┨");
for(i=0,r=6;i<n;i++,r++)
{ gotoxy(6,r);printf("%d",i+1);
gotoxy(8,r);printf("%s",t[i].name);
gotoxy(16,r);printf("│");
gotoxy(18,r);printf("%s",t[i].addr);
gotoxy(50,r);printf("│");
gotoxy(52,r);printf("%s",t[i].tele);
gotoxy(66,r);printf("│");
gotoxy(68,r);printf("%d",t[i].scor);
gotoxy(76,r);printf("┃\n");
}
gotoxy(6,r);printf("┗━━━━┷━━━━━━━━━━━━━━━━┷━━━━━━━┷━━━━┛");
}
int insert(ADDRESS t[],int n)
{
int i,k;
clrscr();
list1(t,n);
printf("\n请输入要输入的数据x(姓名 住址 电话 积分)和插入的位置k");
printf("\n┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈\n");
scanf("%s%s%s%d%d",t[n+1].name,t[n+1].addr,t[n+1].tele,&t[n+1].scor,&k);
for(i=n-1;i>=k-1;i--)
{
strcpy(t[i+1].name,t[i].name);
strcpy(t[i+1].addr,t[i].addr);
strcpy(t[i+1].tele,t[i].tele);
t[i+1].scor=t[i].scor;
}
strcpy(t[k-1].name,t[n+1].name);
strcpy(t[k-1].addr,t[n+1].addr);
strcpy(t[k-1].tele,t[n+1].tele);
t[k-1].scor=t[n+1].scor;
printf("\n您已插入了一条记录!");
n++;
list(t,n);
return n;
}
int delet(ADDRESS t[],int n)
{
int i,k;
clrscr();
list1(t,n);
printf("\n请输入你要删除的元素位置k\n");
scanf("%d",&k);
for(i=k-1;i<n;i++)
{
strcpy(t[i].name,t[i+1].name);
strcpy(t[i].addr,t[i+1].addr);
strcpy(t[i].tele,t[i+1].tele);
t[i].scor=t[i+1].scor;
}
printf("\n您已删除了一条记录!");
n--;
list(t,n);
return n;
}
int amend(ADDRESS t[],int n)
{
char c[2],s[50];
list(t,n);
printf("\n输入你要修改记录的序号%d:",n);
scanf("%s",c);
n=atoi(c);
clrscr();
printf("%s\n",t[n-1].name);
gets(s);
gets(s);
if(s[0])strcpy(t[n-1].name,s);
printf("%s\n",t[n-1].addr);
getch();
gets(s);
if(s[0])strcpy(t[n-1].addr,s);
printf("%s\n",t[n-1].tele);
gets(s);
if(s[0])strcpy(t[n-1].tele,s);
printf("%d\n",t[n-1].scor);
gets(s);
if(s[0])t[n-1].scor=atoi(s);
printf("\n您已修改了一条记录!");
return n;
}
int eidt(ADDRESS t[],int n)
{
int i;
while(1)
{ clrscr();
show_menu1();
i=menu_select1();
switch(i)
{ case 1:n=insert(t,n);getch();break;
case 2:n=delet(t,n);getch();break;
case 3:n=amend(t,n);getch();break;
}
if(i==4)break;
}
return n;
}
void sort(ADDRESS t[],int n,int m)
{
int i,j,k;
clrscr();
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
switch(m)
{
case 1:if(strcmp(t[j].name,t[k].name)<0)k=j;break;
case 2:if(strcmp(t[j].addr,t[k].addr)<0)k=j;break;
case 3:if((t[j].scor<t[k].scor)<0)k=j;
}
if(k!=i)
{t[n]=t[i];t[i]=t[k];t[k]=t[n];}
}
}
void show_menu2()
{
printf("\n\n");
printf("┏━━━━━━主菜单━━━━━━┓\n");
printf("┃ 1.按姓名排序 ┃\n");
printf("┃ 2.按住址排序 ┃\n");
printf("┃ 3.按积分排序 ┃\n");
printf("┃ 4.退出整理 ┃\n");
printf("┗━━━━━━━━━━━━━━━┛\n");
printf("\n\n");
}
int menu_select2()
{
char c[2];
printf("输入你的选择(1~4)");
scanf("%s",c);
return atoi(c);
}
void arrange(ADDRESS t[],int n)
{
int i;
while(1)
{
clrscr();
show_menu2();
i=menu_select2();
switch(i)
{ case 1:sort(t,n,1);list(t,n);getch();break;
case 2:sort(t,n,2);list(t,n);getch();break;
case 3:sort(t,n,3);list(t,n);getch();break;
}
if(i==4)break;
}
}
void save(ADDRESS t[],int n)
{
FILE *fp;
int i;
char s[81];
clrscr();
printf("请输入要保存的文件路径及名称:");
scanf("%s",s);
if((fp=fopen(s,"wb"))==NULL)
{printf("找不到该文件\n");getch();return;}
fprintf(fp,"%d",n);
fprintf(fp,"\r\n");
for(i=0;i<n;i++)
{
fprintf(fp,"%10s%35s%15s%6d",t[i].name,t[i].addr,t[i].tele,t[i].scor);
fprintf(fp,"\r\n");
}
fclose(fp);
printf("文件保存成功!\n");
getch();
}
int load(ADDRESS t[],int n)
{
FILE *fp;
int i;
char s[81];
clrscr();
printf("请输入要读入的文件路径及名称:");
scanf("%s",s);
if((fp=fopen(s,"rb"))==NULL)
{printf("找不到该文件\n");getch();}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(fp,"%10s%35s%15s%6d",t[i].name,t[i].addr,t[i].tele,&t[i].scor);
fclose(fp);
printf("已成功导入%d条记录\n",n);
getch();
return n;
}
void main()
{
int i;
ADDRESS addr[M]={"张婷婷","东校园18栋1号","13546782580",10,
"李晓清","西校园1栋503号","13878896542",23,
"东方博明","东校园5栋121号","13802497825",12};
int length=3;
while(1)
{ clrscr();
show_menu();
i=menu_select();
switch(i)
{ case 1:list(addr,length);getch();break;
case 2:length=enter(addr,length);getch();break;
case 3:length=eidt(addr,length);break;
case 4:arrange(addr,length);break;
case 5:save(addr,length);break;
case 6:length=load(addr,length);break;
case 9:exit(0);
}
}
}