//实现一个通讯录;
//通讯录可以用来存储1000个人的信息,每个人的信息包括:
//姓名、性别、年龄、电话、住址
//提供方法:
//1. 添加联系人信息 已完成
//2. 删除指定联系人信息 已完成
//3. 查找指定联系人信息 已完成
//4. 修改指定联系人信息 已完成
//5. 显示所有联系人信息 已完成
//6. 清空所有联系人 已完成
//7. 以名字排序所有联系人 已完成
#define _CRT_SECURE_NO_WARNINGS
#define _warn_unused_result
#define max_Person 1000
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
typedef struct Member_Information {
char name[1024];
char sex[20];
char phone[100];
char address[1024];
int age;
}Member_Information;
typedef struct Address_Book {
Member_Information person[max_Person];
int size; //当前有效成员数
}Address_Book;
//初始化
void Init(Address_Book* Address) {
assert(Address != NULL);
Address->size = 0;
for (int i = 0; i < 1000; i++) {
memset(Address->person[i].name, 0, 1024);
memset(Address->person[i].sex, 0, 20);
memset(Address->person[i].phone, 0, 100);
memset(Address->person[i].address, 0, 1024);
Address->person[i].age = 0;
}
}
//附属菜单
void find_menu() {
printf("========================\n");
printf("1.姓名\n");
printf("2.性别\n");
printf("3.电话号\n");
printf("4.住址\n");
printf("5.年龄\n");
printf("0.退出\n");
printf("========================\n");
}
//主菜单
void menu() {
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");
}
//1.增加联系人
void Add(Address_Book* Address) {
assert(Address != NULL);
/*Address->capacity = 3;
if (Address->size==Address->capacity){
Member_Information* tmp = (Member_Information*)realloc(Address->person,
(Address->capacity + 3) * sizeof(Member_Information));*/
if (Address->size ==max_Person ) {
printf("内存空间不足!\n");
}
int choice = 0;
while (1) {
int a = (Address->size);
if (Address->size == 1000) {
printf("联系人已满,需删除之后才可继续添加新的联系人!\n");
return;
}else {
printf("请输入姓名:");
scanf("%s", (Address->person[a].name));
printf("\n");
printf("请输入性别:");
scanf("%s",(Address->person[a].sex));
printf("\n");
printf("请输入电话号:");
scanf("%s",(Address->person[a].phone));
printf("\n");
printf("请输入住址:");
scanf("%s",(Address->person[a].address));
printf("\n");
printf("请输入年龄:");
scanf("%d",&(Address->person[a].age));
printf("\n");
(Address->size)++;
printf("是否继续添加下一个联系人信息?,1表示继续添加,0表示退出添加\n");
scanf("%d", &choice);
if (choice==0) {
break;
}
}
}
}
//2. 删除指定联系人信息
void Delete(Address_Book* Address) {
assert(Address != NULL);
if (Address->size == 0) {
printf("无联系人信息可删!\n");
return;
}
int a = 0;
printf("所有联系人信息如下\n");
for (int i = 0; i < Address->size; i++) {
printf("序号%3d: 姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%3d\n",
i + 1, Address->person[i].name, Address->person[i].sex
, Address->person[i].phone, Address->person[i].address, Address->person[i].age);
}
while (1) {
printf("你想删除谁的信息?请输入它的序号");
scanf("%d", &a);
if (a<1 || a>Address->size) {
printf("你的输入有误!请重新输入\n");
continue;
}else {
break;
}
}
memset(Address->person[a - 1].name, 0, 1024); //memset函数可以简单实现赋0操作
memset(Address->person[a - 1].sex, 0, 20);
memset(Address->person[a - 1].phone, 0, 100);
memset(Address->person[a - 1].address, 0, 1024);
Address->person[a - 1].age = 0;
for (int i = a - 1; i < Address->size; i++) {
strcpy(Address->person[i].name, Address->person[i + 1].name);
strcpy(Address->person[i].name, Address->person[i + 1].name);
strcpy(Address->person[i].name, Address->person[i + 1].name);
strcpy(Address->person[i].name, Address->person[i + 1].name);
Address->person[i].age = Address->person[i + 1].age;
}
printf("删除成功!\n");
(Address->size)--;
}
//3. 查找指定联系人信息
void Find(Address_Book* Address) {
assert(Address != NULL);
if (Address->size == 0) {
printf("无联系人信息可查\n");
return;
}
char name1[20], sex1[20], phone1[20], address1[20];
int age1;
int choice = 0,count=0,choice1=0;
while (1){
count = 0;
find_menu();
printf("你想按那种方式查找?\n");
scanf("%d", &choice);
system("cls");
if (choice == 0) {
return;
}else if (choice < 0 || choice>5) {
printf("你的输入有误!\n");
continue;
}else if (choice == 1) {
printf("请输入姓名:");
scanf("%s", name1);
for (int i = 0; i < (Address->size); i++) {
if (strcmp(Address->person[i].name,name1 )==0){
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,
Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
Address->person[i].age);
count++;
}
}
if (count == 0) {
printf("无此人\n");
continue;
}
}else if (choice == 2) {
printf("请输入性别:");
scanf("%s", sex1);
for (int i = 0; i < (Address->size); i++) {
if (strcmp(Address->person[i].sex, sex1) == 0) {
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,
Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
Address->person[i].age);
count++;
}
}
if (count == 0) {
printf("无此人\n");
continue;
}
}else if (choice == 3) {
printf("请输入电话号:");
scanf("%s", &phone1);
for (int i = 0; i < (Address->size); i++) {
if (strcmp(Address->person[i].phone,phone1) == 0) {
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,
Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
Address->person[i].age);
count++;
}
}
if (count == 0) {
printf("无此人\n");
continue;
}
}else if(choice==4){
printf("请输入住址:");
scanf("%s", &address1);
for (int i = 0; i < (Address->size); i++) {
if (strcmp(Address->person[i].address, address1) == 0) {
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,
Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
Address->person[i].age);
count++;
}
}
if (count == 0) {
printf("无此人\n");
continue;
}
}else if (choice == 5) {
printf("请输入年龄:");
scanf("%d", &age1);
for (int i = 0; i < (Address->size); i++) {
if ((Address->person[i].age)==age1) {
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,
Address->person[i].sex, Address->person[i].phone, Address->person[i].address,
Address->person[i].age);
count++;
}
}
if (count == 0) {
printf("无此人\n");
continue;
}
}
printf("是否继续查找,1继续,0退出");
scanf("%d", &choice1);
if (choice1 == 0) {
return;
}
}
}
//4. 修改指定联系人信息
void Modification(Address_Book* Address) {
assert(Address != NULL);
if (Address->size == 0) {
printf("无联系人信息!\n");
return;
}
//char name1[100] = { 0 };
int a = 0;
printf("所有联系人信息如下\n");
for (int i = 0; i < Address->size; i++) {
printf("序号%3d: 姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%3d\n",
i+1, Address->person[i].name, Address->person[i].sex
, Address->person[i].phone, Address->person[i].address, Address->person[i].age);
}
while (1) {
printf("请输入你想修改的联系人的编号:");
scanf("%d", &a);
if (a<1 || a>Address->size) {
printf("你的输入有误,请重新输入:\n");
continue;
}else {
break;
}
}
while(1){
int choice = 0;
printf("你想修改他(她)的什么信息,1全部,2姓名,3性别,4电话号,5住址,6年龄,0退出\n");
scanf("%d", &choice);
if (choice < 0 || choice>6) {
printf("你的输入有误请重新输入:");
continue;
}else if (choice == 1) {
memset(Address->person[a-1].name, 0, 1024);
memset(Address->person[a-1].sex, 0, 20);
memset(Address->person[a-1].phone, 0, 100);
memset(Address->person[a-1].address, 0, 1024);
Address->person[a-1].age = 0;
printf("请输入姓名:");
scanf("%s", (Address->person[a-1].name));
printf("\n");
printf("请输入性别:");
scanf("%s", (Address->person[a-1].sex));
printf("\n");
printf("请输入电话号:");
scanf("%s", (Address->person[a-1].phone));
printf("\n");
printf("请输入住址:");
scanf("%s", (Address->person[a-1].address));
printf("\n");
printf("请输入年龄:");
scanf("%d", &(Address->person[a-1].age));
printf("\n");
}else if (choice == 2) {
memset(Address->person[a-1].name, 0, 1024);
printf("请输入姓名:");
scanf("%s", (Address->person[a-1].name));
printf("\n");
}else if (choice == 3) {
memset(Address->person[a-1].sex, 0, 1024);
printf("请输入性别:");
scanf("%s", (Address->person[a-1].sex));
printf("\n");
}else if (choice == 4) {
memset(Address->person[a-1].phone, 0, 1024);
printf("请输入电话号:");
scanf("%s", (Address->person[a-1].phone));
printf("\n");
}else if (choice == 5) {
memset(Address->person[a-1].address, 0, 1024);
printf("请输入住址:");
scanf("%s", (Address->person[a-1].address));
printf("\n");
}else if (choice == 6) {
Address->person[a-1].age = 0;
printf("请输入年龄:");
scanf("%d", &(Address->person[a-1].age));
printf("\n");
}else if (choice == 0) {
printf("已退出\n");
return;
}
int choice1 = 0;
printf("是否继续修改其他联系人信息,1是,0否\n");
scanf("%d", &choice1);
if (choice1 == 1) {
while (1) {
printf("请输入你想修改的联系人的编号:");
scanf("%d", &a);
if (a<1 || a>Address->size) {
printf("你的输入有误,请重新输入:\n");
continue;
}else {
break;
}
}
}else {
return;
}
}
}
//5. 显示所有联系人信息
void Show_everyone(Address_Book* Address) {
if (Address->size == 0) {
printf("无联系人\n");
return;
}
for (int i = 0; i < Address->size; i++) {
printf("姓名:%5s 性别%5s 电话号%5s 住址%5s 年龄%5d\n", Address->person[i].name,Address->person[i].sex
,Address->person[i].phone,Address->person[i].address,Address->person[i].age);
}
}
//6.清空所有联系人
void Delete_every(Address_Book* Address) {
assert(Address != NULL);
Init(Address);
return;
}
//7.以名字排序所有联系人
void Name_sort(Address_Book* Address) {
assert(Address != NULL);
if (Address->size == 0) {
printf("无联系人!");
return;
}
Member_Information temp;
for (int i = 0; i < (Address->size)-1; i++) {
for (int j = 0; j < (Address->size) - 1 - i; j++) {
if (strcmp(Address->person[j].name, Address->person[j + 1].name)>0) {
temp = Address->person[j];
Address->person[j] = Address->person[j + 1];
Address->person[j + 1] = temp;
}
}
}
}
Address_Book Address;
typedef void(*func)(Address_Book*);
int main() {
Init(&Address);
int choice = 0;
//转移表
func func_table[] = { NULL,Add,Delete,Find,Modification,Show_everyone,Delete_every,Name_sort };
while (1) {
menu();
printf("请输入你的选择:");
scanf("%d", &choice);
if (choice == 0) {
printf("已退出\n");
return;
}else if(choice<0||choice>9){
printf("你的输入有误!\n");
continue;
}else {
system("cls");
func_table[choice](&Address);
}
}
system("pause");
return 0;
}
简单的静态通讯录
最新推荐文章于 2023-09-11 00:52:55 发布