通讯录可以用来存储1000个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
姓名、性别、年龄、电话、住址
提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人
头文件:
#pragma once
#include<stdio.h>
#define NAME_MAX 200
#define GENDER_MAX 200
#define TEL_MAX 200
#define ADDR_MAX 200
#define NUM_MAX 1000
typedef struct Contact{
char name[NAME_MAX];
char gender[GENDER_MAX];
int age;
char tel[TEL_MAX];
char addr[ADDR_MAX];
}Contact;
typedef struct AddressBook{
struct Contact data[NUM_MAX];
int sz;
}AddressBook;
//初始化通讯录
void InitAddressBook(AddressBook* addr);
//添加联系人信息
void AddContact(AddressBook* addr);
//删除联系人信息
void DeleteContact(AddressBook* addr);
//通过人名查找联系人
int FindContact(AddressBook* addr, char* name);
//查找指定联系人信息
void SearchContact(AddressBook* addr);
//修改指定联系人
void ModifyContact(AddressBook* addr);
//显示所有联系人信息
void ShowContact(AddressBook* addr);
//清空所有联系人
void ClearContact(AddressBook* addr);
//以名字排序所有联系人
void NameSortingContact(AddressBook* addr);
源文件:
#define _CRT_SECURE_NO_WARNINGS 1
#include<string.h>
#include"Address_Book.h"
void InitAddressBook(AddressBook* addr) {
if (addr == NULL) {
return;
}
addr->sz = 0;
}
void AddContact(AddressBook* addr) {
if (addr == NULL) {
//非法输入
return;
}
if (addr->sz == NUM_MAX) {
printf("通讯录已满!!!\n");
}
printf("请输入联系人姓名:");
scanf("%s\n", addr->data[addr->sz].name);
printf("请输入联系人性别:");
scanf("%s\n", addr->data[addr->sz].gender);
printf("请输入联系人年龄:");
scanf("%d\n", &addr->data[addr->sz].age);
printf("请输入联系人电话:");
scanf("%s\n", addr->data[addr->sz].tel);
printf("请输入联系人地址:");
scanf("%s\n", addr->data[addr->sz].addr);
printf("添加成功!\n");
addr->sz++;
}
void ShowContact(AddressBook* addr) {
if (addr == NULL) {
//非法输入
return;
}
if (addr->sz == 0) {
printf("通讯录为空!!");
return;
}
printf("%10s %5s %4s %11s %30s\n",
"姓名","性别","年龄","电话","地址");
int i = 0;
for (; i < addr->sz; i++) {
printf("%10s %5s %4d %11s %30s\n",addr->data[i].name,
addr->data[i].gender,
addr->data[i].age,
addr->data[i].tel,
addr->data[i].addr);
}
}
int FindContact(AddressBook* addr, char* name) {
if (addr == NULL) {
return;
}
int i = 0;
for (; i < addr->sz; i++) {
if (strcmp(addr->data[i].name, name) == 0){
return i;
}
}
if (i > addr->sz) {
return -1;
}
}
void DeleteContact(AddressBook* addr) {
if (addr == NULL) {
//非法输入
return;
}
printf("请输入您需要删除的联系人姓名:");
char name[NAME_MAX];
scanf("%s", &name);
int ret = FindContact(addr, name);
if (ret == -1) {
printf("查无此人\n");
return;
}
//找到了,下标为ret
else {
for (; ret < addr->sz; ret++) {
addr->data[ret] = addr->data[ret + 1];
}
//把联系人数量-1
addr->sz--;
}
}
void SearchContact(AddressBook* addr) {
if (addr == NULL) {
return;
}
char name[NAME_MAX];
printf("请输入您需要查找的人的姓名:");
scanf("%s", name);
int i = FindContact(addr, name);
if (i == -1) {
printf("查无此人");
return;
}
else{
printf("%10s %5s %4s %11s %30s\n",
"姓名", "性别", "年龄", "电话", "地址");
printf("%10s %5s %4d %11s %30s\n",
addr->data[i].name,
addr->data[i].gender,
addr->data[i].age,
addr->data[i].tel,
addr->data[i].addr);
}
}
void ModifyContact(AddressBook* addr) {
if (addr == NULL) {
return;
}
printf("请输入您所需要修改信息的联系人姓名:");
char name[NAME_MAX];
scanf("%s", name);
if (addr->sz == 0) {
printf("通讯录为空!!");
return;
}
int i = FindContact(addr, name);
if (i == -1) {
printf("查无此人");
return;
}
else{
printf("请输入修改的姓名:");
scanf("%s", addr->data[i].name);
printf("请输入修改的性别:");
scanf("%s",addr->data[i].gender);
printf("请输入修改的年龄:");
scanf("%d",&addr->data[i].age);
printf("请输入修改的电话:");
scanf("%s", addr->data[i].tel);
printf("请输入修改的地址:");
scanf("%s", addr->data[i].addr);
printf("修改成功!");
}
}
void ClearContact(AddressBook* addr) {
if (addr == NULL) {
//非法输入
return;
}
addr->sz = 0;
printf("清空成功!!");
}
void NameSortingContact(AddressBook* addr) {
if (addr == NULL) {
return;
}
int i = 0;
for (; i < addr->sz; i++) {
int j = 0;
for (; j < addr->sz - i - 1; j++) {
if (strcmp(addr->data[j].name, addr->data[j].name) > 0) {
Contact tmp = addr->data[j];
addr->data[j] = addr->data[j + 1];
addr->data[j + 1] = tmp;
}
}
}
printf("排序成功\n");
}
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"Address_Book.h"
void menu() {
printf("--------------------------------------\n");
printf(" 1.添加联系人 \n");
printf(" 2.删除联系人 \n");
printf(" 3.查找联系人 \n");
printf(" 4.修改联系人 \n");
printf(" 5.显示联系人 \n");
printf(" 6.清空所有联系人 \n");
printf(" 7.以名字排序所有人 \n");
printf(" 8.退出 \n");
printf("--------------------------------------\n");
}
void test() {
menu();
AddressBook addr;
int i = 0;
InitAddressBook(&addr);
do{
printf("请选择->:");
scanf("%d\n", &i);
switch (i)
{
case 1:
AddContact(&addr);
break;
case 2:
DeleteContact(&addr);
break;
case 3:
SearchContact(&addr);
break;
case 4:
ModifyContact(&addr);
break;
case 5:
ShowContact(&addr);
break;
case 6:
ClearContact(&addr);
break;
case 7:
NameSortingContact(&addr);
break;
case 8:
exit(0);
break;
default:
exit(0);
break;
}
} while (i);
}
int main() {
test();
system("pause");
return 0;
}