实现一个通讯录
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<Windows.h>
#pragma warning(disable:4996)
#define size 1000
#define nameSize 8
#define telSize 12
#define addrSize 20
/*
实现一个通讯录;
通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
*/
typedef struct information{
char name[nameSize];
char sex;
int age;
char tel[telSize];
char addr[addrSize];
}Note;
void menu()
{
printf("***************************************\n");
printf("************ 通讯录选项 *************\n");
printf("***************************************\n");
printf("******* 1、添加联系人信息 *******\n");
printf("******* 2、删除指定联系人信息 *******\n");
printf("******* 3、查找指定联系人信息 *******\n");
printf("******* 4、修改指定联系人信息 *******\n");
printf("******* 5、显示所有联系人信息 *******\n");
printf("******* 6、清空所有联系人 *******\n");
printf("******* 7、以名字排序所有联系人 *******\n");
printf("******* 0、退出 *******\n");
printf("***************************************\n");
printf("please input your choice:");
}
void myAdd(Note arr[], int num, int *personSum)
{
printf("please input information<name sex age tel addr>:\n");
Note note;
scanf("%s %c %d %s %s", note.name, &(note.sex), &(note.age), note.tel, note.addr);
if (num > *personSum){
*(arr + (*personSum)++) = note;
printf("add succeed!\n");
}
else{
printf("address book is Full!\n");
}
}
void myDelete(Note arr[], int *personSum)
{
printf("please input the person of name you want to delete:");
char tmp[nameSize];
scanf("%s", tmp);
int i = 0;
while (i < *personSum){
if (!strcmp(arr[i].name, tmp)){
if (*personSum == 1){
*personSum = 0;
return;
}
//将数组添加的最后一个元素移至此覆盖当前值
arr[i] = *(arr + (*personSum - 1));
(*personSum)--;
printf("delete succeed!\n");
return;
}
i++;
}
printf("There is no this person!\n");
}
void myFind(Note arr[], int *personSum)
{
printf("please input the person of name you want to find:");
char tmp[nameSize];
scanf("%s", tmp);
int i = 0;
while (i < *personSum){
if (!strcmp(arr[i].name, tmp)){
printf("name:%-10ssex:%-5cage:%-5dtel:%-15saddr:%-22s\n", arr[i].name, \
arr[i].sex, arr[i].age, arr[i].tel, arr[i].addr);
return;
}
i++;
}
printf("There is no this person!\n");
}
void myModify(Note arr[], int *personSum)
{
printf("please input the person of name you want to modify:");
char tmp[nameSize];
scanf("%s", tmp);
int i = 0;
while (i < *personSum){
if (!strcmp(arr[i].name, tmp)){
printf("please input information<name sex age tel addr>:\n");
scanf("%s %c %d %s %s", arr[i].name, &(arr[i].sex), &(arr[i].age), arr[i].tel, arr[i].addr);
printf("modify succeed!\n");
return;
}
i++;
}
printf("There is no this person!\n");
}
void myShow(Note arr[], int *personSum)
{
int i = 0;
if (!*personSum){
printf("no one!\n");
}
while (i < *personSum){
printf("name:%-10ssex:%-5cage:%-5dtel:%-15saddr:%-22s\n", arr[i].name, \
arr[i].sex, arr[i].age, arr[i].tel, arr[i].addr);
i++;
}
}
void myClear(int *personSum)
{
*personSum = 0;
printf("clear succeed!\n");
}
int myCmpNote(const void * note1, const void *note2)
{
Note *x = (Note *)note1;
Note *y = (Note *)note2;
int res = strcmp((*x).name, (*y).name);
if (res > 0){
return 1;
}
else if (res < 0){
return -1;
}
else{
return 0;
}
}
void mySort(Note arr[], int *personSum)
{
int num = *personSum;
qsort(arr, num, sizeof(Note), myCmpNote);
myShow(arr, personSum);
}
void branch(Note arr[], int num, int sel, int *personSum)
{
switch (sel){
case 1:
myAdd(arr, num, personSum);
break;
case 2:
myDelete(arr, personSum);
break;
case 3:
myFind(arr, personSum);
break;
case 4:
myModify(arr, personSum);
break;
case 5:
myShow(arr, personSum);
break;
case 6:
myClear(personSum);
break;
case 7:
mySort(arr, personSum);
break;
default:
perror("switch error");
}
}
int main()
{
int personSum = 0;
Note arr[size];
int sel;
do{
menu();
scanf("%d", &sel);
system("cls");
if (!sel){
exit(EXIT_FAILURE);
}
else if (sel > 7 && sel < 0){
printf("enter error!please try again:[0,7]");
}
else{
branch(arr, size, sel, &personSum);
}
} while (1);
system("pause");
return 0;
}
测试结果:
运行界面:
首先,添加(1)两个联系人;
然后,显示所有联系人(5)
然后,查找指定联系人(3)
然后,修改指定联系人(4)
修改成功后,显示所有,修改成功!
以名字排序(7);
删除指定联系人(2)
删除后测试:
清空所有联系人(6)
显示所有测试,已清空!