DOS通讯录

时间:2023-03-08 16:49:37
 #include"stdio.h"
#include"string.h"
#include"stdlib.h"
FILE *fp;
#define M 100
typedef struct Record
{
char name[];
char age[];
char number[],city[],work[],other[];
}R;
void cmd_1();
void cmd_write(R info[],int n) //重新写入函数
{
fclose(fp);
if((fp=fopen("address.txl","wb"))==NULL)
{
printf("CANNOT OPEN FILE\n");
exit();
}
fwrite(info,sizeof(R),n,fp);
fclose(fp);
} void for_1(int n,char ch) //界面元素循环输出函数
{
int i;
for(i=;i<=n;i++)
printf("%c",ch);
} void cmd_4() //建立通讯录文件
{ if((fp=fopen("address.txl","wb"))==NULL)
{
printf("CANNOT OPEN FILE\n");
exit();
}
fclose(fp);
printf("\n\n文件建立成功,请使用 3:新建联系人 功能\n");
}
int cmd_2_turn_x(R info[],int n) //cmd_2_turn 附属函数:record结构体组 输出
{
int i;
printf("\n\n我 的 通 讯 录\n");
for_1(,'*');
putchar('\n');
for(i=;i<n;i++)
printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
printf("\n\n显示结束,请选择序号:"); int a;
scanf("%d",&a);
return a;
} void cmd_2_turn(R info[],int n) //cmd_2附属函数 按循序修改
{ while()
{
int ask=cmd_2_turn_x(info,n);
if(ask>n||ask<=)
{
printf("对不起,序号范围超出\n");
return;
}
getchar();
fflush(stdin);
printf("输入姓名:");
gets(info[ask-].name);
printf("\n输入年龄:");
gets(info[ask-].age);
printf("\n输入号码:");
gets(info[ask-].number);
printf("\n城市:");
gets(info[ask-].city);
printf("\n输入工作单位:");
gets(info[ask-].work);
printf("\n输入备注:");
gets(info[ask-].other);
printf("是否保存修改(y/n):");
char a=getchar();
if(a=='y')
{
cmd_write(info,n);
printf("\n保存成功!\n");
return;
}
else
{
for_1(,'*');
printf("\n1:返回到上级\n2:继续修改\n");
printf("\n请输入指令:");
int ask_1;
scanf("%d",&ask_1);
if(ask==) return;
else continue;
} } }
void cmd_2_name(R info[],int n) //cmd_2附属函数 按名字修改
{
while()
{
printf("\n\n请输入待查找的姓名:");
char ask_name[];
getchar();
gets(ask_name);
int i;
for(i=;i<n;i++)
if(strcmp(info[i].name ,ask_name)==) break;
if(i>=n) {printf("\n查无此人\n"); return;}
else
{
printf("\n查找成功,请修改\n");
fflush(stdin);
printf("输入姓名:");
gets(info[i].name);
printf("\n输入年龄:");
gets(info[i].age);
printf("\n输入号码:");
gets(info[i].number);
printf("\n城市:");
gets(info[i].city);
printf("\n输入工作单位:");
gets(info[i].work);
printf("\n输入备注:");
gets(info[i].other);
printf("是否保存修改(y/n):");
char a=getchar();
if(a=='y')
{
cmd_write(info,n);
printf("\n修改成功!\n");
printf("\n是否继续修改(y/n):");
getchar();
char b=getchar();
if(b=='y') continue;
if(b=='n') return;
}
else
{
for_1(,'*');
printf("\n1:返回到上级\n2:继续修改\n");
printf("\n请输入指令:");
int ask_1;
scanf("%d",&ask_1);
if(ask_1==) return;
else continue;
}
}
}
}
void cmd_1_1(R info[],int n);
void cmd_2() //修改联系人
{
if((fp=fopen("address.txl","rb"))==NULL)
{
printf("CANNOT OPEN FILE\n");
exit();
}
R temp,info[M];
int i=;
while(fread(&temp,sizeof(R),,fp)==)
info[i++]=temp;
while()
{ printf("\n修 改 联 系 人\n");
for_1(,'*');
printf("\n1:浏览通讯录");
printf("\n2:按序号修改\n3:按姓名修改\n4:退出\n");
printf("\n请输入指令:");
int ask;
scanf("%d",&ask);
if(ask==) cmd_1_1(info,i);
else if(ask==) cmd_2_turn(info,i);
else if(ask==) cmd_2_name(info,i);
else return;
}
}
void cmd_3() //新建联系人函数
{
R record;
char a;
FILE *fp;
if((fp=fopen("address.txl","ab"))==NULL)
{
printf("CANNOT OPEN FILE ");
exit();
} printf("\n\n");
while() //新建联系人界面
{
getchar();
fflush(stdin);
printf("输入姓名:");
gets(record.name);
printf("\n输入年龄:");
gets(record.age);
printf("\n输入号码:");
gets(record.number);
printf("\n城市:");
gets(record.city);
printf("\n输入工作单位:");
gets(record.work);
printf("\n输入备注:");
gets(record.other);
printf("是否保存(y/n):");
a=getchar();
if(a=='y')
{
fwrite(&record,sizeof(R),,fp);
printf("\n····\n");
printf("保存成功\n");
}
getchar();
printf("是否继续建立联系人(y/n):");
a=getchar();
if(a=='n') break;
printf("\n");
}
fclose(fp);
return;
}
void cmd_1_1(R info[],int n) //cmd_1附属函数:record结构体组 输出
{
int i;
printf("\n\n我 的 通 讯 录\n");
for_1(,'*');
putchar('\n');
for(i=;i<n;i++)
printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
printf("\n\n显示结束,按任意键键返回上级目录:");
getchar();
char a=getchar();
if(a!=NULL) return;
} void sort_name(R info[],int n) //cmd_1附属函数姓名排序
{
int i,j;
R temp,info_t[M];
for(i=;i<n;i++)
info_t[i]=info[i];
for(i=;i<n;i++)
for(j=;j<n-i;j++)
if(strcmp(info_t[j].name,info_t[j+].name)>)
{
temp=info_t[j];
info_t[j]=info_t[j+];
info_t[j+]=temp;
}
cmd_1_1(info_t,n);
return;
}
void sort_city(R info[],int n) //城市排序函数
{
int i,j;
R temp,info_t[M];
for(i=;i<n;i++)
info_t[i]=info[i];
for(i=;i<n;i++)
for(j=;j<n-i;j++)
if(strcmp(info_t[j].city,info_t[j+].city)>)
{
temp=info_t[j];
info_t[j]=info_t[j+];
info_t[j+]=temp;
}
cmd_1_1(info_t,n);
return;
}
void cmd_1_2(R info[],int n) //显示联系人函数附属函数 转移函数
{
int ask;
int i;
R info_t[M];
for(i=;i<n;i++)
info_t[i]=info[i];
while()
{ printf("\n\n排 序 显 示\n");
for_1(,'*');
printf("\n1:按姓名排序\n");
for_1(,'*');
printf("\n2:按城市输出\n");
for_1(,'*');
printf("\n3:返回上一层\n");
for_1(,'*');
printf("\n请输入指令:");
scanf("%d",&ask);
if(ask==) break;
else if(ask==) sort_name(info,n);
else if(ask==) sort_city(info,n);
else {printf("指令错误,重新输入"); continue;}
}
} void cmd_1() //显示联系人函数
{
if((fp=fopen("address.txl","rb"))==NULL)
{
printf("CANNOT OPEN FILE");
exit();
}
R temp,info[M];
int i=,cmd_x;
while(fread(&temp,sizeof(R),,fp)==)
info[i++]=temp; while() //通讯录显示菜单界面
{
printf("\n显 示 联 系 人(共有 %d 条记录)\n",i);
for_1(,'*');
printf("\n1:按自然顺序输出\n");
for_1(,'*');
printf("\n2:按排序顺序显示\n");
for_1(,'*');
printf("\n3:退出显示程序\n");
for_1(,'*');
printf("\n请输入指令:");
scanf("%d",&cmd_x);
if(cmd_x==) {fclose(fp); return;}
else if(cmd_x==) cmd_1_1(info,i);
else if(cmd_x==) cmd_1_2(info,i);
else {printf("指令错误,请重新输入!\n"); continue;}
}
fclose(fp);
}
void cmd_5_del(R info[],int n,int turn) //删除联系人函数附属函数 删除函数
{
int i;
if(turn==n-) return;
for(i=turn-;i<n-;i++)
info[i]=info[i+];
}
void cmd_5_turn(R info[],int n) //删除联系人函数附属函数 序号删除函数
{
int i;
printf("\n\n我 的 通 讯 录\n");
for_1(,'*');
putchar('\n');
for(i=;i<n;i++)
printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",i+,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
printf("\n\n\n请输入序号:");
int turn;
scanf("%d",&turn);
if(turn>n||turn<=)
{
printf("\n对不起,超出已存范围\n");
return;
}
printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s %-s\n\n",turn,info[turn-].name,info[turn-].age,info[turn-].number,info[turn-].city,info[turn-].work,info[turn-].other);
getchar();
printf("确定删除?(y/n)");
char ask=getchar();
if(ask=='y')
{
cmd_5_del(info,n,turn);
cmd_write(info,n-);
printf("\n删除成功!\n");
}
return;
}
void cmd_5_name(R info[],int n) //删除联系人函数附属函数 姓名删除
{
printf("\n请输入名字:");
char name[];
getchar();
gets(name);
int i;
for(i=;i<n;i++)
if(strcmp(info[i].name,name)==) break;
if(i>=n)
{
printf("\n查无此人\n");
return;
}
else
{
printf("\n\n%-5d%-10s%-4s%-15s%-10s%-4s %-s\n\n",i+,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
//getchar();
printf("确定删除?(y/n)");
char ask=getchar();
if(ask=='y')
{
cmd_5_del(info,n,i+);
cmd_write(info,n-);
printf("\n删除成功!\n");
}
return;
}
}
void cmd_5() //删除联系人函数
{
if((fp=fopen("address.txl","rb"))==NULL)
{
printf("CANNOT OPEN FILE");
exit();
}
R temp,info[M];
int i=;
while(fread(&temp,sizeof(R),,fp)==)
info[i++]=temp;
while()
{
int ask;
printf("\n删 除 联 系 人\n");
for_1(,'*');
printf("\n1:序号删除 2:姓名删除 3:退出");
printf("\n\n请输入指令:");
scanf("%d",&ask);
if(ask==) cmd_5_turn(info,i);
else if(ask==) cmd_5_name(info,i);
else return;
}
} void cmd_6_city(R info[],int n) //查询联系人函数附属函数 城市查询函数
{
char city[];
int i,j;
printf("\n按 城 市 查 询 联 系 人\n");
for_1(,'*');
printf("\n请输入城市:");
getchar();
gets(city);
j=;
for(i=;i<n;i++)
if(strcmp(city,info[i].city)==)
printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
printf("\n共查询到 %d 条记录\n按任意键返回",j-);
char a=getchar();
if(a!=NULL) return;
}
void cmd_6_name(R info[],int n) //查询联系人函数附属函数 姓名查询函数
{
char name[];
int i,j;
printf("\n按 城 市 查 询 联 系 人 \n");
for_1(,'*');
printf("\n请输入名字:");
getchar();
gets(name);
j=;
for(i=;i<n;i++)
if(strcmp(name,info[i].name)==)
printf("%-5d%-10s%-4s%-15s%-10s%-4s %-s\n",j++,info[i].name,info[i].age,info[i].number,info[i].city,info[i].work,info[i].other);
printf("\n共查询到 %d 条记录\n按任意键返回",j-);
char a=getchar();
if(a!=NULL) return;
} void cmd_6() //查询联系人函数
{
if((fp=fopen("address.txl","rb"))==NULL)
{
printf("CANNOT OPEN FILE");
exit();
} R temp,info[M];
int i=;
while(fread(&temp,sizeof(R),,fp)==)
info[i++]=temp; int ask;
while()
{
for_1(,'*');
printf("\n查 询 联 系 人\n");
for_1(,'*');
printf("\n查询方式:1:姓名 2:城市 3:退出\n\n请输入指令:");
scanf("%d",&ask);
if(ask==) cmd_6_name(info,i);
else if(ask==) cmd_6_city(info,i);
else return;
}
fclose(fp);
}
void cmd_7()
{
char str[];
if((fp=fopen("help.txt","r"))==NULL)
{
printf("CANNOT OPEN FILE\n");
exit();
}
while(fgets(str,,fp))
printf("%s",str);
system("mspaint a.jpg");
printf("\n\n");
return;
} void face_1() //外界面函数
{
printf("\n\n\n");
for_1(,' ');
printf("通讯录管理程序\n");
for_1(,'*');
putchar('\n');
for_1(,' ');
printf("1:显示联系人\n");
for_1(,' ');
printf("2:修改联系人\n");
for_1(,' ');
printf("3:新建联系人\n");
for_1(,' ');
printf("4:新建联系文件\n");
for_1(,' ');
printf("5:删除联系人\n");
for_1(,' ');
printf("6:查询联系人\n");
for_1(,' ');
printf("7:帮助\n");
for_1(,' ');
printf("8:退出通讯录\n");
for_1(,'*');
putchar('\n');
for_1(,' ');
printf("请输入指令:");
}
int main(void)
{
int cmd;
while()
{
face_1(); //外界面函数
scanf("%d",&cmd);
putchar('\n'); switch(cmd)
{
case : cmd_1();break;
case : cmd_2();break;
case : cmd_3();break;
case : cmd_4();break;
case : cmd_5();break;
case : cmd_6();break;
case : cmd_7();break;
case : return ;
default:
{
printf("指令错误,无法识别\n\n");
continue;
}
}
}
return ;
}

这个代码很幼稚,但这是我第一次的尝试,我只是想分享我的点滴