#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<getch.h>
typedef struct people //联系人结构体
{
char name[20];
char sex;
char relation[10];
char tel[20];
}people;
people* p;
enum {ADD='1',DEL='2',LIS='3',QUIT='q',FIND='4'};
size_t count;
void init(void) //初始化sex用于判断空间是否存储
{
p=calloc(100,sizeof(people));
for(int i=0;i<100;i++)
{
p[i].sex=0;
}
}
char emnu(void) //菜单
{
system("clear");
puts("1.添加联系人");
puts("2.删除联系人");
puts("3.显示所有联系人");
puts("4.查找联系人");
puts("q.退出");
puts("--------------");
puts("请输入指令代码: ");
char cmd=getch();
return cmd;
}
void add(void) //添加联系人
{
if(count<100)
{
for(int i=0;i<100;i++)
{
if(!p[i].sex)
{
printf("请输入联系人姓名: ");
scanf("%s",p[i].name);
getch();
printf("请输入联系人性别:");
p[i].sex=getchar();
getch();
printf("请输入与联系人的关系:");
gets(p[i].relation);
printf("请输入联系人电话:");
gets(p[count].tel);
printf("添加成功!!\n");
getch();
count++;
return;
}
}
}
else
{
printf("电话簿已满!!\n");
return;
}
}
void del(void) //删除联系人
{
printf("请输入要删除的联系人姓名:");
char name[20];
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(!strcmp(name,p[i].name))
{
p[i].sex=0;
count--;
printf("删除成功!!\n");
getchar();
getchar();
return;
}
else
{
printf("查无此人!!\n");
getchar();
getchar();
return;
}
}
}
void lis(void) //显示所有联系人
{
for(int i=0;i<100;i++)
{
if(p[i].sex)
{
printf("名字:%s性别: %c关系: %s电话: %s\n",p[i].name,p[i].sex,p[i].relation,p[i].tel);
}
}
getch();
puts("-------------------");
}
void find(void) //查找联系人
{
printf("请输入要查找的联系人姓名: ");
char name[20];
scanf("%s",name);
for(int i=0;i<100;i++)
{
if(!strcmp(name,p[i].name))
{
printf("姓名:%s性别: %c关系: %s 电话:%s\n",p[i].name,p[i].sex,p[i].relation,p[i].tel);
getch();
return;
}
else
{
printf("查无此人!!\n");
getch();
return;
}
}
}
void quit(void)
{
return -1;
}
int main()
{
init();
while(1)
{
switch(emnu())
{
case ADD:add();break;
case DEL:del();break;
case LIS:lis();break;
case FIND:find();break;
case QUIT:quit();break;
}
}
}
getch.h 代码如下
#ifndef GETCH_H
#define GETCH_H
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
static int getch(void)
{
// 获取现在的终端输入配置方案
struct termios _old;
int ret = tcgetattr(STDIN_FILENO,&_old);
if(0 > ret)
{
perror("tcgetattr");
return -1;
}
// 新建一个终端配置方案(不用回车确认\不回显)
struct termios _new = _old;
_new.c_lflag &= ~(ECHO|ICANON);
// 设置新的终端配置方案
ret = tcsetattr(STDIN_FILENO,TCSANOW,&_new);
if(0 > ret)
{
perror("tcsetattr");
return -2;
}
// 使用新的终端配置方案从终端获取数据
int key_val = 0;
do{
key_val += getchar();
}while(stdin->_IO_read_end - stdin->_IO_read_ptr);
// 还原终端配置方案
ret = tcsetattr(STDIN_FILENO,TCSANOW,&_old);
if(0 > ret)
{
perror("tcsetattr");
return -3;
}
// 返回获取到的数据
return key_val;
}
#endif//GETCH_H