实现一个简单的通讯录
增删改查
简单一点可以采用数组的方式来存储元素
首先给出结构体的定义:
typedef struct PeopleInfo {
char name[MAX_NAME];
int age;
char sex[MAX_SEX];
char phone[MAX_PHONE];
char addr[MAX_ADDR];
}PeopleInfo;
typedef struct Contact {
PeopleInfo con[MAX];
int size;
}Contact, *PContact;
size用于存储数组中的有效元素
头文件contact.h:
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include <string.h>
#include <stdio.h>
#define MAX 1000
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_PHONE 12
#define MAX_ADDR 30
typedef struct PeopleInfo {
char name[MAX_NAME];
int age;
char sex[MAX_SEX];
char phone[MAX_PHONE];
char addr[MAX_ADDR];
}PeopleInfo;
typedef struct Contact {
PeopleInfo con[MAX];
int size;
}Contact, *PContact;
void InitContact(PContact contact);
void AddContact(PContact contact);
void DelContact(PContact contact);
void DisplayContact(PContact contact);
void SearchContact(PContact contact);
void ModifyContact(PContact contact);
void EmptyContact(PContact contact);
#endif
具体实现:
#include "contact.h"
//typedef struct PeopleInfo {
// char name[MAX_NAME];
// int age;
// char sex[MAX_SEX];
// char phone[MAX_PHONE];
// char addr[MAX_ADDR];
//}PeopleInfo;
//typedef struct Contact {
// PeopleInfo con[MAX];
// int size;
//}Contact, *PContact;
void InitContact(PContact contact)
{
contact->size = 0;
memset(contact->con, 0, MAX * sizeof(PeopleInfo));
}
void AddContact(PContact contact)
{
if (contact->size == MAX) {
printf("电话本满了\n");
}
else {
printf("please input the information:\n");
printf("name:");
scanf("%s", contact->con[contact->size].name);
printf("age:");
scanf("%d", &contact->con[contact->size].age);
printf("sex:");
scanf("%s", contact->con[contact->size].sex);
printf("phone:");
scanf("%s", contact->con[contact->size].phone);
printf("addr:");
scanf("%s", contact->con[contact->size].addr);
contact->size++;
printf("增加成功\n");
}
}
static int FindEntry(PContact contact, const char *name)
{
int i = 0;
for (i = 0; i < contact->size; ++i) {
if (strcmp(name, contact->con[i].name) == 0)
return i;
}
return -1;
}
void DelContact(PContact contact)
{
if (contact->size == 0)
printf("电话本已空\n");
else {
char name[MAX_NAME] = { 0 };
printf("please input the name you wanna delete:");
scanf("%s", name);
int ret = FindEntry(contact, name);
if (-1 == ret) {
printf("找不到\n");
}
else {
int i = 0;
for (i = ret; i < contact->size - 1; ++i) {
contact->con[i] = contact->con[i + 1];
}
contact->size--;
printf("删除成功\n");
}
}
}
void SearchContact(PContact contact)
{
if (contact->size == 0)
printf("电话本已空\n");
else {
char name[MAX_NAME] = { 0 };
printf("please input the name you wanna search:");
scanf("%s", name);
int ret = FindEntry(contact, name);
if (-1 == ret) {
printf("找不到\n");
}
else {
printf("%5s\t%5d\t%5s\t%10s\t%10s\n",
contact->con[ret].name,
contact->con[ret].age,
contact->con[ret].sex,
contact->con[ret].phone,
contact->con[ret].addr);
}
}
}
void DisplayContact(PContact contact)
{
int i = 0;
printf("%5s\t%5s\t%5s\t%10s\t%10s\n", "name", "age", "sex", "phone", "addr");
for (i = 0; i < contact->size; ++i) {
printf("%5s\t%5d\t%5s\t%10s\t%10s\n",
contact->con[i].name,
contact->con[i].age,
contact->con[i].sex,
contact->con[i].phone,
contact->con[i].addr);
}
}
void ModifyContact(PContact contact)
{
if (contact->size == 0)
printf("电话本已空\n");
else {
char name[MAX_NAME] = { 0 };
printf("please input the name you wanna modify:");
scanf("%s", name);
int ret = FindEntry(contact, name);
if (-1 == ret) {
printf("找不到\n");
}
else {
printf("please input the information:\n");
printf("name:");
scanf("%s", contact->con[ret].name);
printf("age:");
scanf("%d", &contact->con[ret].age);
printf("sex:");
scanf("%s", contact->con[ret].sex);
printf("phone:");
scanf("%s", contact->con[ret].phone);
printf("addr:");
scanf("%s", contact->con[ret].addr);
printf("修改成功\n");
}
}
}
void EmptyContact(PContact contact)
{
contact->size = 0;
}
#include <stdio.h>
#include <string.h>
#include "contact.h"
enum OPTION {
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
DISPLAY,
EMPTY,
};
void menu();
int main()
{
int flag = 1;
Contact myContact;
InitContact(&myContact);
while (flag) {
menu();
int num = 0;
printf("please make a choice:");
scanf("%d", &num);
switch (num) {
case EXIT:
flag = 0;
printf("exit\n");
break;
case ADD:
AddContact(&myContact);
break;
case DEL:
DelContact(&myContact);
break;
case SEARCH:
SearchContact(&myContact);
break;
case MODIFY:
ModifyContact(&myContact);
break;
case DISPLAY:
DisplayContact(&myContact);
break;
case EMPTY:
EmptyContact(&myContact);
break;
default:
printf("what you input is wrong\n");
break;
}
}
getchar();
return 0;
}
void menu()
{
printf("**********************\n");
printf("1.增加\t2.删除\t3.查找\n");
printf("4.修改\t5.显示\t6.置空\n");
printf("0.退出\n");
printf("**********************\n");
}