C实现的简易通讯录
虽然代码有点冗余,但条理还是很清晰的.
用结构体数组实现的固定人数,可用链表实现成可增长结构.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct People
{
char name[10];
int sex; //0 为男, 1为女
int age;
char phone[15];
char address[20];
};
struct mail_list
{
struct People people[1000];
int count;
};
//通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:
//1. 添加联系人信息
void add_people(struct mail_list* p);
//2. 删除指定联系人信息
void del_people(struct mail_list* p);
//3. 查找指定联系人信息
void search_people(struct mail_list* p);
//4. 修改指定联系人信息
void change_people(struct mail_list* p);
//5. 显示所有联系人信息
void display(struct mail_list* p);
//6. 清空所有联系人
void clear(struct mail_list* p);
//7. 以名字排序所有联系人
void sort_people(struct mail_list* p);
//0 初始化通讯录
void init(struct mail_list* p) {
p->count = 0;
}
//1. 添加联系人信息
void add_people(struct mail_list* p) {
if (p->count > 1000) {
printf("该通讯录人数已超过限制!\n");
return;
}
printf("请输入你要添加的人的名字:");
scanf("%s", p->people[p->count].name);
printf("请输入你要添加的人的性别(0为男,1为女):");
scanf("%d", &(p->people[p->count].sex));
printf("请输入你要添加的人的年龄:");
scanf("%d", &(p->people[p->count].age));
printf("请输入你要添加的人的电话:");
getchar();
scanf("%s", p->people[p->count].phone);
printf("请输入你要添加的人的地址:");
scanf("%s", p->people[p->count].address);
p->count++;
}
//2. 删除指定联系人信息
void del_people(struct mail_list* p) {
char str[20];
printf("请输入你要删除的联系人的名字:");
scanf("%s", str);
int i = 0;
while (i < p->count) {
if (!strcmp(str, p->people[i].name)) {
memcpy(p + i, p + i + 1, sizeof(struct mail_list)*(p->count - i - 1));
printf("删除成功\n");
p->count--;
return;
}
i++;
}
if (i == p->count) {
printf("没有该联系人!");
}
}
//3. 查找指定联系人信息
void search_people(struct mail_list* p)
{
int i = 0;
char str[20];
printf("请输入你要查找的联系人的名字:");
scanf("%s", str);
while (i < p->count) {
if (!strcmp(str, p->people[i].name)) {
printf("该联系人信息是:\n");
printf("名字:%s\n", p->people[i].name);
printf("性别:%d\n", p->people[i].sex);
printf("年龄:%d\n", p->people[i].age);
printf("电话:%s\n", p->people[i].phone);
printf("地址:%s\n", p->people[i].address);
return;
}
i++;
}
printf("没有该联系人!\n");
}
// 4.修改指定联系人信息
void change_people(struct mail_list* p)
{
char str[20];
printf("请输入你要修改的联系人的名字:");
scanf("%s", str);
int i = 0;
while (i < p->count) {
if (!strcmp(str, p->people[i].name)) {
printf("请输入你要修改名字为:");
scanf("%s", p->people[i].name);
printf("请输入你要修改性别(0为男,1为女)为:");
scanf("%d", &(p->people[i].sex));
printf("请输入你要修改年龄为:");
scanf("%d", &(p->people[i].age));
printf("请输入你要修改电话为:");
getchar();
scanf("%s", p->people[i].phone);
printf("请输入你要修改地址为:");
scanf("%s", p->people[i].address);
return;
}
i++;
}
printf("该人不存在!!!\n");
}
//5. 显示所有联系人信息
void display(struct mail_list* p)
{
int i = 0;
while (i < p->count) {
printf("\n");
printf("第%d个人的信息:\n", i+1);
printf("名字:%s\n", p->people[i].name);
printf("性别:%d\n", p->people[i].sex);
printf("年龄:%d\n", p->people[i].age);
printf("电话:%s\n", p->people[i].phone);
printf("地址:%s\n", p->people[i].address);
i++;
}
}
//6. 清空所有联系人
void clear(struct mail_list* p) {
init(p);
}
void swap_str(char* str1, char* str2)
{
char tmp[20];
strcpy(tmp, str1);
strcpy(str1, str2);
strcpy(str2, tmp);
}
void swap_int(int* a, int* b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
void swap_people(struct People* p1, struct People* p2)
{
if (strcmp(p1->name, p2->name) > 0) {
swap_str(p1->name, p2->name);
swap_int(&p1->age, &p2->age);
swap_int(&p1->sex, &p2->sex);
swap_str(p1->phone, p2->phone);
swap_str(p1->address, p2->address);
}
}
//7. 以名字进行排序
void sort_people(struct mail_list* p)
{
int i = 0, j = 0;
while (i < p->count) {
for (j = p->count - 1; j > i; j--) {
swap_people(&(p->people[j - 1]), &(p->people[j]));
}
i++;
}
}
int main()
{
struct mail_list list;
init(&list);
while (1) {
int choice;
printf("\n");
printf("0.退出\t\t1.添加联系人\n");
printf("2.删除联系人\t\t3.查找联系人\n");
printf("4.修改联系人信息\t\t5.显示所有联系人信息\n");
printf("6.清空所有联系人\t\t7.以名字排序所有联系人\n");
printf("请输入你要进行的操作:\n");
scanf("%d", &choice);
if (choice == 0) {
printf("bye!!!");
break;
}
switch (choice) {
case 1:
add_people(&list);
break;
case 2:
del_people(&list);
break;
case 3:
search_people(&list);
break;
case 4:
change_people(&list);
break;
case 5:
display(&list);
break;
case 6:
clear(&list);
break;
case 7:
sort_people(&list);
break;
default:
printf("你没有进行任何操作\n");
}
}
system("pause");
return 0;
}