您的位置:首页 > 编程语言 > C语言/C++

【C语言基础】C语言实现静态通讯录

2018-01-13 22:39 513 查看
通讯录可以用来存储1000个人的信息,每个人的信息包括: 
姓名、性别、年龄、电话、住址 
提供方法: 
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: