通讯录管理系统
通过通讯录存储个人信息,这里简单的储存一下姓名、性别、电话号。
针对其通讯录实现增加、删除、修改、查找、显示的功能,必要时对其进行功能的拓展。
一、头文件、函数声明,以及将所需信息各自存放在二维数组中,定义在全局变量并初始化。
在这里性别用m、w表示男女,将其存放在一维数组里,名字和电话号定义为二维数组,count对增加的个数进行计数,在这里我们存放不超过50个人的信息
#include<stdio.h>
#include<getch.h>
#include<string.h>
void add(void);
void del(void);
void change(void);
void find(void);
void show(void);
char menu(void);
void anykey_continue(void);
void show_msg(const char* msg,float sec);
char name[50][20]={};
char sex[50]={};
char tel[50][12]={};
char count=0;
二、主函数,执行死循环,不断刷新,执行不同按键按下的功能
int main()
{
for(;;)
{
switch(menu())
{
case '1': add(); break;
case '2': del(); break;
case '3': change(); break;
case '4': find(); break;
case '5': show(); break;
case '6': return 0;
}
}
}
三、实现增加功能
先判断是否可以继续存放,通过判断性别里的一维数组是否有数据存放,如果没有然后进行添加。最后做一个1.5秒的停留显示已添加(在后面会写一个函数做为一个等待时间)。
void add(void)
{
if(count>=50)
{
puts("等待系统升级\n");
return ;
}
int i=0;
while(sex[i]) i++;
printf("请添加\n");
scanf("%s %c %s",name[i],&sex[i],tel[i]);
count++;
show_msg("已添加",1.5);//做一个1.5秒的停留,显示信息已寻访
}
四、实现删除功能
通过对名字的查找,判断姓名数组里是否有同名者,如果有进行删除,同时做一个1.5秒的停留。如果找不到,输出查无此人,并提示按任意键继续操作(在后面会追加一个函数实现该功能)
void del(void)
{
char key[20]={};
printf("请输入\n");
scanf("%s",key);
for(int i=0;i<50;i++)
{
if(!strcmp(key,name[i]))
{
printf("删除%s %c %s成功\n",name[i],sex[i],tel[i]);
sex[i]=0;
count--;
show_msg("",1.5);
return ;
}
}
printf("查无此人\n");
anykey_continue();//函数内实现按任意键退出
}
五、修改信息
通过输入姓名,在姓名数组里查找该人,如果找到,提示修改,并重新输入信息,并停留1.5秒显示修改成功。如果没找到,则输出查无此人,并提示按任意键修改
void change(void)
{
char key[20]={};
printf("输入被修改人姓名\n");
scanf("%s",key);
for(int i=0;i<50;i++)
{
if(sex[i])
{
if(!strcmp(name[i],key))
{
printf("请修改\n");
scanf("%s %c %s",name[i],&sex[i],tel[i]);
show_msg("修改成功\n",1.5);
return ;
}
}
}
printf("查无此人\n");
anykey_continue();
}
六、查找
通过输入关键字,在姓名和电话号里模糊查找,找出关键字所在的位置,并输出内容,提示已找到,并提示按任意键退出。如果没有提示查无此人并提示按任意键退出
void find(void)
{
printf("输入查找关键字\n");
char key[20]={};
scanf("%s",key);
for(int i=0;i<50;i++)
{
if(sex[i]&&strstr(name[i],key)||strstr(tel[i],key))
{
printf("%s %c %s\n",name[i],sex[i],tel[i]);
printf("已找到\n");
anykey_continue();
return ;
}
}
printf("查无此人\n");
anykey_continue();
}
七、显示信息
遍历数组,通过对性别数组判断是否为空,不为空输出其内容,输出结束提示按任意键退出。
void show(void)
{
for(int i=0;i<50;i++)
{
if(sex[i])
printf("%s %c %s\n",name[i],sex[i],tel[i]);
}
anykey_continue();
}
八、菜单显示
输出菜单内容,接收按键的输入、并返回给主函数,进行所按按键功能的实现
//显示菜单,获取功能
char menu(void)
{
char select;
system("clear");
puts("1 、添加");
puts("2 、删除");
puts("3 、修改");
puts("4 、查找");
puts("5 、显示");
puts("6 、退出");
select = getch();
return select;
}
九、页面停留
对于一些操作,需要显示其操作结果,提示按任意键继续,清空缓冲区(该清空缓冲区的代码只能在linux系统下实现)、并输入按键。
// 按任意按键继续
void anykey_continue(void)
{
puts("按任意按键继续...");
stdin->_IO_read_ptr = stdin->_IO_read_end;
getch();
}
十、对于操作成功的执行结果,停留一段时间,然后再显示菜单。
// 显示提示信息几秒
void show_msg(const char* msg,float sec)
{
printf("%s",msg);
fflush(stdout);
usleep(sec*1000000);
}