#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 ;
}

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

DOS通讯录的更多相关文章

  1. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  2. 如何使用dos命令打开当前用户、当前日期、当前时间以及当前用户加当前时间?

    1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select user();当前用户 select cur ...

  3. 如何使用dos命令查看MySQL当前使用的数据库?

    1.dos命令安装mysqld --stall.启动net start mysql.进入MySQL数据库mysql -uroot -p后,输入select database(); 如图:

  4. 怎样在Dos里切换盘符

    一:在Dos里切换盘符 a:在电脑左下角右击显示图片;(我用的是win10系统,其他系统类似) b:点击运行,输入cmd; c:点击确定: d:输入盘符:(如f:) 或F: 只写字母,不写分号是不行的 ...

  5. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

    --系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用 ...

  6. Java在DOS命令下的运行及其API文档制作过程

    该文档主要描述java程序在DOS命令下的运行,以及一些常用的命令 常用DOS命令: d: 回车 盘符切换 dir(directory):列出当前目录下的文件以及文件夹 md (make direct ...

  7. android 通讯录实现

    最近项目需要,于是自己实现了一个带导航栏的通讯录,上代码! 一.数据准备 (1)bean: public class Friend { private String remark; private S ...

  8. IOS学习之-私人通讯录

    通过一段时间IOS的学习完成了一个简单的应用,"私人通讯录". 运行效果如下图: 1.登录页 2.通讯录列表 3.添加 4.编辑 5.删除 6.注销 总视图结构如下图: 总结本程序 ...

  9. C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理

    在上篇随笔<C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理>介绍了通讯录的部门的相关操作管理,通讯录管理包括部门管理.成员管理.标签管理三个部分,本篇主要介绍成员的管 ...

随机推荐

  1. Django中级篇(上)

    Form验证 django中的Form一般有两种功能: 输入html-----------不能你自己写一些标签,而帮你自动生成 验证用户输入-------将用户验证信息保存起来,可以传到前段 #!/u ...

  2. 运行时---关联Associated

    关联:指把两个对象相互关联起来,使得其中的一个对象作为另外一个对象的一部分   一.在类的定义之外为类增加额外的存储空间        使用关联,我们可以不用修改类的定义而为其对象增加存储空间.这在我 ...

  3. 查询数据库中表或视图或存储过程的数量 sql 语句

    如果一个数据库中表的数量较多的话,那么在统计数据库中表的数量或视图或存储过程的数量时,如果还有一个一个去数,那就太麻烦了,其实可以通过 sql 语句来查询的,sql 语句的查询方法如下: sql se ...

  4. linux中强大且常用命令:find、grep

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们. 本文结构如下: find命令 find命令的一般形 ...

  5. Android基础总结(4)——广播接收器

    在Android中的每个应用程序可以对自己感兴趣的广播进行注册,这样该程序就只会接收自己所关心的广播内容,这些广播可能来自于系统的,也可能来自于其他应用程序的.Android提供了一整套完整的API, ...

  6. PowerDesigner之PDM(物理概念模型)

    一.PDM概述 PDM(物理数据模型),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库. PDM中涉及到的基本概念包括: 表: 列: 视图: 主键: 候选键: 外键: 存 ...

  7. 移动端的头部标签和meta

    <!DOCTYPE html><!--HTML5 doctype--> <html> <head> <title>xxx</title ...

  8. HTTP长连接200万尝试及调优

    对于一个server,我们一般考虑他所能支撑的qps,但有那么一种应用, 我们需要关注的是它能支撑的连接数个数,而并非qps,当然qps也是我们需要考虑的性能点之一.这种应用常见于消息推送系统,也称为 ...

  9. [原]Python 简单文件处理

    仅仅是为了Linux操作方便= =命令行最近没有时间仔细看看,电脑一直都在机房,暂且这般记着吧= = spath="D:/download/baa.txt" f=open(spat ...

  10. 搭建高性能计算环境(四)、应用软件的安装之VASP

    1,将需要的软件包上传vasp.5.2.12.tar.gz.vasp.5.lib.tar.gz.benchmark.Hg.tar.gz. 2,创建vasp目录并解压软件包. mkdir /opt/va ...