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

通讯录可以用来存储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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值