本篇用C语言实现了一个简易的通讯录。
代码演示:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define MAX 1000
typedef struct People {
char name[20];
char sex[10];
char age[4];
char telephone[20];
char address[20];
}People;
typedef struct Contact {
People data[MAX];
int count;
}Contact;
enum operate {
EXIT,
ADD,
DELETE,
FIND,
UPDATE,
SHOW,
CLEAR,
SORT
};
void ContactInit(Contact* con) {
assert(con);
memset(con, 0, sizeof(Contact));
}
void ContactInsert(Contact* con) {
assert(con);
if (con->count >= MAX) {
printf("通讯录已满,无法再添加!\n");
return;
}
//添加
printf("请输入需要添加的人的姓名:>");
scanf("%s", con->data[con->count].name);
printf("请输入需要添加的人的性别:>");
scanf("%s", con->data[con->count].sex);
printf("请输入需要添加的人的年龄:>");
scanf("%s", con->data[con->count].age);
printf("请输入需要添加的人的电话号码:>");
scanf("%s", con->data[con->count].telephone);
printf("请输入需要添加的人的家庭住址:>");
scanf("%s", con->data[con->count].address);
con->count++;
printf("添加成功!\n");
}
void ContactShow(Contact* con) {
assert(con);
if (con->count == 0) {
printf("通讯录中无用户!\n");
return;
}
printf(" %5s %5s %5s %15s %15s \n", "姓名", "性别", "年龄", "电话号码", "家庭住址");
for (int i = 0;i < con->count;++i) {
printf(" %-6s %-5s %-9s %-17s %-15s \n", con->data[i].name, con->data[i].sex,
con->data[i].age, con->data[i].telephone, con->data[i].address);
}
}
void ContactDelete(Contact* con) {
assert(con);
if (con->count == 0) {
printf("通讯录中无用户!\n");
return;
}
printf("请输入需要删除的人的姓名:>");
char name[20] = { 0 };
scanf("%s", name);
int i = 0;
for (;i < con->count;++i) {
if (strcmp(con->data[i].name, name) == 0) {
for (int j = i;j < con->count - 1;++j) {
memcpy(con->data[j], con->data[j + 1], sizeof(People));
}
break;
}
}
if (i < con->count)
printf("删除成功!\n");
else
printf("通讯录中没有此人!\n");
}
void ContactFind(Contact* con) {
assert(con);
if (con->count == 0) {
printf("通讯录中无用户!\n");
return;
}
printf("请输入需要查询的人的姓名:>");
char name[20] = { 0 };
scanf("%s", name);
int i = 0;
for (;i < con->count;++i) {
if (strcmp(con->data[i].name, name) == 0) {
break;
}
}
if (i < con->count) {
printf(" %5s %5s %5s %15s %15s \n", "姓名", "性别", "年龄", "电话号码", "家庭住址");
printf(" %-6s %-5s %-9s %-17s %-15s \n", con->data[i].name, con->data[i].sex,
con->data[i].age, con->data[i].telephone, con->data[i].address);
}
else
printf("通讯录中没有此人!\n");
}
void ContactUpdate(Contact* con) {
assert(con);
if (con->count == 0) {
printf("通讯录中无用户!\n");
return;
}
printf("请输入需要更新的人的姓名:>");
char name[20] = { 0 };
scanf("%s", name);
int i = 0;
for (;i < con->count;++i) {
if (strcmp(con->data[i].name, name) == 0) {
break;
}
}
if (i < con->count) {
printf("请输入新的人的姓名:>");
scanf("%s", con->data[i].name);
printf("请输入新的的性别:>");
scanf("%s", con->data[i].sex);
printf("请输入新的的年龄:>");
scanf("%s", con->data[i].age);
printf("请输入新的电话号码:>");
scanf("%s", con->data[i].telephone);
printf("请输入新的的家庭住址:>");
scanf("%s", con->data[i].address);
printf("更新成功!\n");
}
else
printf("通讯录中没有此人!\n");
}
void ContactClear(Contact* con) {
assert(con);
con->count = 0;
printf("已清空!\n");
}
void ContactSort(Contact* con) {
assert(con);
if (con->count == 0) {
printf("通讯录中无用户!\n");
return;
}
for (int i = 0;i < con->count;++i) {
int flag = 0;
for (int j = 0;j < con->count - 1 - i;++j) {
if (strcmp(con->data[j].name, con->data[j + 1].name) > 0) {
People p = con->data[j];
con->data[j] = con->data[j + 1];
con->data[j + 1] = p;
flag = 1;
}
}
if (flag == 0)
break;
}
printf("排序完成!\n");
}
void run() {
Contact contact;
ContactInit(&contact);
int select = 0;
do {
printf("*******************************************\n");
printf("* 简易通讯录 *\n");
printf("* 1.添加 2.删除 *\n");
printf("* 3.查找 4.修改 *\n");
printf("* 5.显示所有联系人 *\n");
printf("* 6.清空所有联系人 *\n");
printf("* 7.排序所有联系人 *\n");
printf("* 0.退出 *\n");
printf("*******************************************\n");
printf("请输入你的选择:>");
scanf("%d", &select);
system("cls");
switch (select) {
case EXIT:
printf("已退出。\n");
return 0;
case ADD:
ContactInsert(&contact);
break;
case DELETE:
ContactDelete(&contact);
break;
case FIND:
ContactFind(&contact);
break;
case UPDATE:
ContactUpdate(&contact);
break;
case SHOW:
ContactShow(&contact);
break;
case CLEAR:
ContactClear(&contact);
break;
case SORT:
ContactSort(&contact);
break;
default:
printf("选择出现错误,请重新输入。\n");
}
} while (select);
}
int main() {
//运行
run();
return 0;
}