实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人
源代码:
contact.h
#ifndef __CONTACT_H_
#define __CONTACT_H_
#include <stdio.h>
#include <windows.h>
#include <string.h>
#pragma warning(disable :4996)
#define MAX_NAME 10
#define SEX_NAME 5
#define MAX_TELE 20 //必须往大了定义,所输入的字符串如果太小 就会导致错误
#define MAX_ADDR 50
#define MUX_NUM 1000
enum Oper
{
EXIT,
ADD,
DEL,
SEAR,
SHOW,
CLEAR,
MODIFY,
DESTROY
};
typedef struct PerInfo
{
char name[MAX_NAME]; //姓名
short age;
char sex[SEX_NAME];
char tele[MAX_TELE];
char addr[MAX_ADDR];
} PerInfo; //每个人的信息
typedef struct Contact //对于通讯录来说也是一个抽象的概念,所以把通讯也抽象成结构体
{
PerInfo per[MUX_NUM]; //往这个数组放东西,还需要把这个数组的下标也标识一下
int usedSize;
} Contact;
void initial(Contact *pcon);
int SearchContact2(Contact *pcon);
void DelContact(Contact *pcon);
void AddContact(Contact *pcon);
int SearchContact(Contact *pcon);
int SearchContact1(Contact *pcon);
void ShowContact(Contact *pcon);
void ClearContact(Contact *pcon);
void ModifyContact(Contact *pcon);
void menu1();
#endif
main.c
#include "contact.h"
void menu1()
{
printf("1.姓名\n");
printf("2.年龄\n");
printf("3.性别\n");
printf("4.电话\n");
printf("5.地址\n");
}
void menu()
{
printf("**************欢迎使用大龙的通讯录*************\n");
printf("* 0.EXIT 1.ADD *\n");
printf("* 2.DEL 3.SEARCH *\n");
printf("* 4.SHOW 5.CLEAR *\n");
printf("* 6.MODIFY *\n");
printf("***********************************************\n");
}
int main()
{
int input = 0;
Contact con;
initial(&con);
do
{
menu();
printf("请输入操作数: ");
scanf("%d", &input);
switch (input)
{
case EXIT:
break;
case ADD:
AddContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SEAR:
SearchContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case CLEAR:
ClearContact(&con);
break;
case MODIFY:
ModifyContact(&con);
break;
default:
break;
}
} while (input);
return 0;
}
contact.c
#include "contact.h"
void initial(Contact *pcon)
{
pcon->usedSize = 0;
memset(pcon->per, 0, sizeof(pcon->per));
}
void AddContact(Contact *pcon)
{
if (pcon->usedSize == MUX_NUM)
{
printf("不好意思,满了");
}
printf("请输入姓名: ");
scanf("%s", pcon->per[pcon->usedSize].name);
printf("请输入年龄:");
scanf("%d", &pcon->per[pcon->usedSize].age);
printf("请输入性别:");
scanf("%s", pcon->per[pcon->usedSize].sex);
printf("请输入电话:");
scanf("%s", pcon->per[pcon->usedSize].tele);
printf("请输入住址:");
scanf("%s", pcon->per[pcon->usedSize].addr);
pcon->usedSize++;
printf("添加成功\n");
}
int SearchContact2(Contact *pcon)
{
int i = 0;
char name[MAX_NAME] = { 0 };
if (pcon->usedSize == 0)
{
printf("通讯录为空\n");
return -1;
}
printf("请输入你想删除的人的名字:");
scanf("%s", name);
for (i = 0; i < pcon->usedSize; i++)
{
if (strcmp(pcon->per[i].name, name) == 0)
{
return i;
}
}
printf("查无此人\n");
return -1;
}
void DelContact(Contact *pcon)
{
int i = 0;
int index=SearchContact2(pcon);
for (i = index; i < pcon->usedSize; i++)
{
pcon->per[i] = pcon->per[i + 1];
}
pcon->usedSize--;
printf("删除成功!\n");
}
int SearchContact(Contact *pcon)
{
char name[MAX_NAME] = { 0 };
int i = 0;
int ret = 0;
if (pcon->usedSize == 0)
{
printf("通讯录为空");
}
printf("请输入你要查找的姓名: ");
scanf("%s", name);
for (i = 0; i < pcon->usedSize; i++)
{
ret=strcmp(name, pcon->per[i].name);
if (ret == 0)
{
printf("姓名:%-2s ", pcon->per[i].name);
printf("年龄:%-2d", pcon->per[i].age);
printf("性别:%-10s", pcon->per[i].sex);
printf("电话:%-11s", pcon->per[i].tele);
printf("住址%-20s ",pcon->per[i].addr);
printf("\n");
return i;
}
}
printf("没找到!\n");
return -1;
}
void ShowContact(Contact *pcon)
{
int i = 0;
for (; i < pcon->usedSize; i++)
{
printf("姓名:%-5s ", pcon->per[i].name);
printf("年龄:%-2d", pcon->per[i].age);
printf("性别:%-2s", pcon->per[i].sex);
printf("电话:%-13s", pcon->per[i].tele);
printf("住址%-20s ", pcon->per[i].addr);
printf("\n");
}
}
void ClearContact(Contact *pcon)
{
pcon->usedSize = 0;
}
int SearchContact1(Contact *pcon)
{
int i = 0;
char name[MAX_NAME] = { 0 };
if (pcon->usedSize == 0)
{
printf("通讯录为空\n");
return -1;
}
printf("您想修改谁?\n");
scanf("%s", name);
for (i = 0; i < pcon->usedSize; i++)
{
if (strcmp(pcon->per[i].name, name) == 0)
{
return i;
}
}
printf("查无此人\n");
return -1;
}
void changename(Contact *pcon,int ret)
{
char name[MAX_NAME];
printf("请输入新的名字:");
scanf("%s", name);
strcpy(pcon->per[ret].name, name);
}
void changeage(Contact *pcon,int ret)
{
int age=0;
printf("请输入新的年龄:");
scanf("%d", age);
pcon->per[ret].age = age;
}
void changesex(Contact *pcon,int ret)
{
char sex[SEX_NAME];
printf("请输入新的性别:");
scanf("%s", sex);
strcpy(pcon->per[ret].sex, sex);
}
void changetele(Contact *pcon,int ret)
{
char tele[MAX_TELE];
printf("请输入新的电话:");
scanf("%s", tele);
strcpy(pcon->per[ret].tele, tele);
}
void changeaddr(Contact *pcon,int ret)
{
char addr[MAX_ADDR];
printf("请输入新的地址: ");
scanf("%s", addr);
strcpy(pcon->per[ret].addr, addr);
}
void ModifyContact(Contact *pcon)
{
int input = 0;
int ret = SearchContact1(pcon);
if (ret < 0)
{
;
}
else{
printf("请选择要修改的信息: \n");
menu1();
scanf("%d", &input);
switch (input)
{
case 1:
changename(pcon, ret);
break;
case 2:
changeage(pcon, ret);
break;
case 3:
changesex(pcon, ret);
break;
case 4:
changetele(pcon, ret);
break;
case 5:
changeaddr(pcon, ret);
break;
default:
printf("输入有误!");
break;
}
printf("修改后\n");
printf("姓名:%-5s ", pcon->per[ret].name);
printf("年龄:%-2d ", pcon->per[ret].age);
printf("性别:%-2s ", pcon->per[ret].sex);
printf("电话:%-13s", pcon->per[ret].tele);
printf("住址: %-20s ", pcon->per[ret].addr);
printf("\n");
}
}