实现一个通讯录,通讯录中保存人的信息:名字,年龄,性别,电话,住址
要求:1.通讯录中可以存放100个人的信息。
2.增加联系人
3.删除指定联系人
4.修改指定联系人
5.查找指定联系人
6.显示所有联系人信息
7.排序功能
通过三个文件实现:test.c(主文件),contact.h(类型的声明),contact.c(函数的实现)
目录
一、test.c的实现
1、菜单(menu)
void menu() {
printf("***********************************");
printf("****** 1、add 2、delete *******");
printf("****** 3、search 4、modify *******");
printf("****** 5、show 6、sort *******");
printf("****** 0、exit *******");
printf("***********************************");
}
2、主函数
int main() {
int input = 0;//把input放do上面,如果定义在do里面,while里就用不了了
contact con;//定义一个通讯录con
initcontact(&con);//初始化通讯录,把con地址传过去
do {
menu();
printf("请选择\n");
scanf("%d", &input);
switch (input) {
case 1:
add(&con);
break;
case 2:
delete(&con);
break;
case 3:
search(&con);
break;
case 4:
modify(&con);
break;
case 5:
show(&con);
break;
case 6:
sort(&con);//按年龄排
break;
case 0:
printf("退出\n");
break;
default:
printf("错了,请重输\n");
break;
}
} while (input);
return 0;
}
二、contact.h的实现
1、创建一个人的信息
#pragma once
#include<string.h>
#include<stdio.h>
#define max 100
#define max_name 10
#define max_sex 5
#define max_telephone 12
#define max_address 30
typedef struct people {
char name[max_name];
int age;
char sex[max_sex];
char telephone[max_telephone];
char address[max_address];
}people;
2、定义一个通讯录
typedef struct contact {
people date[max];//把人放进去
int sz;//计数的
}contact;
3、各类函数的声明
void initcontact(contact* pc);
void add(contact* pc);
void show(const contact* pc);//不会修改,加const修饰
void delete(contact* pc);
void search(const contact* pc);
void modify(contact* pc);
void sort(contact* pc);
三、contact. c的实现
1、初始化通讯录函数
void initcontact(contact* pc) {//把通讯录里面的值全清空
memset(pc->date, 0, size(pc->date));
pc->sz = 0;
}
2、添加联系人函数
void add(contact* pc) {
if (pc->sz==max) {
printf("通讯录满了,无法添加\n");
return;
}
printf("请输入名字\n");
scanf("%s", pc->date[pc->sz].name);
printf("请输入年龄\n");
scanf("%d", &(pc->date[pc->sz].age));
printf("请输入性别\n");
scanf("%s", pc->date[pc->sz].sex);
printf("请输入电话\n");
scanf("%s", pc->date[pc->sz].telephone);
printf("请输入地址\n");
scanf("%s", pc->date[pc->sz].address);
pc->sz++;
printf("成功增加该联系人\n");
}
3、显示联系人函数
void show(contact* pc) {
int i = 0;
printf("%-10s\t%-5s\t%-5s\t%-12s\t%-10s\n", "姓名","年龄","性别","电话","地址");
for (i = 0; i < pc->sz; i++) {
printf("%-10s\t%-5d\t%-5s\t%-12s\t%-10s\n", pc->date[i].name, pc->date[i].age, pc->date[i].sex, pc->date[i].telephone, pc->date[i].address);
}
}
4、删除联系人函数
int find(contact* pc,char* name) {
int i = 0;
for (i = 0; i < pc->sz; i++) {
if (strcmp(pc->date[i].name, name) == 0) {
return i;
}
}
return 0;
}
void delete(contact* pc) {
printf("要删联系人的姓名:");
char name[max_name] = { 0 };
scanf("%s", name);
int m = find(pc,name);
if (m == 0) {
printf("要找的人不存在\n");
return;
}
else {
int i = 0;
for (i = m; i < pc->sz-1; i++) {
pc->date[i] = pc->date[i + 1];
}
pc->sz--;
printf("成功删除该联系人\n");
}
}
5、查找联系人函数
void search(contact* pc) {
printf("要查找联系人的姓名:");
char name[max_name] = { 0 };
scanf("%s", name);
int m = find(pc, name);
if (m == 0) {
printf("要找的人不存在\n");
return;
}
else {
printf("%-10s\t%-5s\t%-5s\t%-12s\t%-10s\n", "姓名", "年龄", "性别", "电话", "地址");
printf("%-10s\t%-5d\t%-5s\t%-12s\t%-10s\n", pc->date[m].name, pc->date[m].age, pc->date[m].sex, pc->date[m].telephone, pc->date[m].address);
}
}
6、修改联系人函数
void modify(contact* pc) {
printf("输入要修改的名字\n");
char name[max_name] = { 0 };
scanf("%s", name);
int m = find(pc, name);
if (m == 0) {
printf("要修改的人不存在\n");
return;
}
else {
printf("输入名字\n");
scanf("%s", pc->date[m].name);
printf("输入年龄\n");
scanf("%d", &(pc->date[m].age));
printf("输入性别\n");
scanf("%s", pc->date[m].sex);
printf("输入电话\n");
scanf("%s", pc->date[m].telephone);
printf("输入地址\n");
scanf("%s", pc->date[m].address);
printf("修改成功\n");
}
}
7、给联系人排序(按年龄)
void sort(contact* pc) {
int i = 0;
for (i = 0; i < pc->sz; i++) {
int j = 0;
for (j = 0; j < pc->sz - 1; j++) {
if (pc->date[j].age > pc->date[j + 1].age) {
people t = pc->date[j];
pc->date[j] = pc->date[j + 1];
pc->date[j + 1] = t;
}
}
}
show(pc);
}
这样就完成啦。