简易通讯录的实现

实现一个通讯录;
通讯录可以用来存储个人的信息,每个人的信息包括:
姓名、性别、年龄、电话、住址

  1. 添加联系人信息
  2. 删除指定联系人信息
  3. 查找指定联系人信息
  4. 修改指定联系人信息
  5. 显示所有联系人信息
  6. 清空所有联系人
  7. 以名字排序所有联系人
  8. 保存联系人到文件
  9. 加载联系人

头文件:

#pragma once
#define NAME_MAX 200
#define GENDER_MAX 10
#define TELE_MAX 20
#define ADDR_MAX 100
#define MAX 200
#define DEFAULT 10

//定义联系人信息
typedef struct information{
	char name[NAME_MAX];
	char gender[GENDER_MAX];
	int age;
	char tele[TELE_MAX];
	char addr[ADDR_MAX];
}info;

//通讯录内容 静态存储
//typedef struct contact{
//	info data[MAX];
//	int size;
//}contact,*pcontact;

//动态存储
typedef struct contact{
	info* data;
	int size;
	int capacity;//空间大小
}contact, *pcontact;

//1.初始化
void Init(pcontact pc);
//检查空间
int cheak_capacity(pcontact pc);
//2. 添加联系人信息
void Add(pcontact pc);
//查找是否存在
int Find(pcontact pc, char* name);
//3. 删除指定联系人信息
void Delete(pcontact pc);
//4. 查找指定联系人信息
void Sear(pcontact pc);
//5. 修改指定联系人信息
void Modify(pcontact pc);
//6. 显示所有联系人信息
void Show(pcontact pc);
//7. 清空所有联系人
void Empty(pcontact pc);
//8. 以名字排序所有联系人
void Sort(pcontact pc);
//9. 保存联系人到文件
void Save(pcontact pc);
//10. 加载联系人
void Load(pcontact pc);

主函数:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "contact.h"

//1.初始化
void Init(pcontact pc){
	pc->size = 0;
	pc->data = (info*)malloc(sizeof(info*)*DEFAULT);
	pc->capacity = DEFAULT;
}

//2. 添加联系人信息

//检查空间
int cheak_capacity(pcontact pc){
	if (pc->size == pc->capacity){
		/*pc->data = (info*)realloc(pc->data, sizeof(info)* pc->capacity + 10);
		if (pc->data == NULL){
			return 0;*/
		info* tmp = (info*)malloc(sizeof(info)*(pc->capacity + 10));
		if (tmp==NULL){
			return 0;
		}
		memcpy(tmp, pc->data, sizeof(info)*pc->size);
		free(pc->data);
		pc->data = tmp;
		pc->capacity += 10;
	}
	return 1;
}

//添加联系人信息
void Add(pcontact pc){
	info curinfo;
	if (cheak_capacity(pc)==0){
		printf("通讯录已满!添加失败!\n");
		return;
	}
	else{
		printf("请输入姓名:\n");
		scanf("%s", curinfo.name);
		printf("请输入性别:\n");
		scanf("%s", curinfo.gender);
		printf("请输入年龄:\n");
		scanf("%d", &curinfo.age);
		printf("请输入电话:\n");
		scanf("%s", curinfo.tele);
		printf("请输入地址:\n");
		scanf("%s", curinfo.addr);
		pc->data[pc->size] = curinfo;
		pc->size++;
	}

}

//3. 删除指定联系人信息

//找到信息是否存在
int Find(pcontact pc, char* name){
	for (int i = 0; i < pc->size; i++){
		if (strcmp(pc->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return 0;
}

// 删除指定联系人信息
void Delete(pcontact pc){
	char name[NAME_MAX];
	printf("输入要删除的名字!\n");
	scanf("%s", name);
	int pos = Find(pc, name);
	if (pos == 0){
		printf("此人不存在,删除失败!\n");
		return;
	}
	for (int i = pos; i < pc->size - 1; i++){
		pc->data[i] = pc->data[i - 1];
	}
	pc->size--;
	printf("删除成功!\n");
}
//4. 查找指定联系人信息
void Sear(pcontact pc){
	char name[NAME_MAX];
	printf("输入要查找的名字!\n");
	scanf("%s", name);
	int pos = Find(pc, name);
	if (pos == 0){
		printf("此人不存在,查找失败!\n");
		return;
	}
	printf("===============================\n");
	printf("姓名:%s\n", pc->data[pos].name);
	printf("性别:%s\n", pc->data[pos].gender);
	printf("年龄:%d\n",& pc->data[pos].age);
	printf("电话:%s\n", pc->data[pos].tele);
	printf("地址:%s\n", pc->data[pos].addr);
	printf("===============================\n");
}
//5. 修改指定联系人信息
void Modify(pcontact pc){
	char name[NAME_MAX];
	printf("输入要修改的名字!\n");
	scanf("%s", name);
	int pos = Find(pc, name);
	if (pos == 0){
		printf("此人不存在,修改失败!\n");
		return;
	}
	printf("请输入姓名:\n");
	scanf("%s", pc->data[pos].name);
	printf("请输入性别:\n");
	scanf("%s", pc->data[pos].gender);
	printf("请输入年龄:\n");
	scanf("%d", &pc->data[pos].age);
	printf("请输入电话:\n");
	scanf("%s", pc->data[pos].tele);
	printf("请输入地址:\n");
	scanf("%s", pc->data[pos].addr);
}
//6. 显示所有联系人信息
void Show(pcontact pc){
	for (int i = 0; i < pc->size; i++){
		printf("===========第%d个人============\n",i);
		printf("姓名:%s\n", pc->data[i].name);
		printf("性别:%s\n", pc->data[i].gender);
		printf("年龄:%d\n", &pc->data[i].age);
		printf("电话:%s\n", pc->data[i].tele);
		printf("地址:%s\n", pc->data[i].addr);
		printf("===============================\n");
	}
}
//7. 清空所有联系人
void Empty(pcontact pc){
	pc->size = 0;
}
//8. 以名字排序所有联系人
void Sort(pcontact pc){
	for (int sz = pc->size; sz > 0; sz--){
		for (int i = 0; i < sz; i++){
			if (strcmp(pc->data[i-1].name, pc->data[i].name)>0){
				info tmp = pc->data[i - 1];
				pc->data[i - 1] = pc->data[i];
				pc->data[i] = tmp;
			}
		}
	}
}
//9. 保存联系人到文件
void Save(pcontact pc){
	FILE* pf=fopen("contact.dat", "wb");
	if (pf == NULL){
		printf("保存失败!\n");
		return;
	}
	for (int i = 0; i < pc->size; i++){
		fwrite(pc->data + i, sizeof(info), 1, pf);
	}
	fclose(pf);
}
//10. 加载联系人
void Load(pcontact pc){
	FILE* pf = fopen("contact.dat", "rb");
	if (pf == NULL){
		printf("加载失败!!\n");
		return;
	}
	//读取文件内容
	info curinfo;
	while (fread(&curinfo, sizeof(info), 1, pf)){
		if (cheak_capacity(pc)){
			pc->data[pc->size] = curinfo;
			pc->size++;
		}
	}
	fclose(pf);
}

测试函数:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "contact.h"

enum OPTION{
	EXIT,
	ADD,
	DEL,
	SEAR,
	MOD,
	SHOW,
	EMP,
	SORT,
	SAVE,
	LOAD
};

void menu(){
	printf("==========0:EXIT 1:ADD 2:DEL 3:SEAR 4:MOD==========\n");
	printf("=========5:SHOW 6:EMP 7:SORT 8:SAVE 9:LOAD =========\n");
}

void testcontact(){
	contact ct;
	int option;
	Init(&ct);

	do{
		menu();
		scanf("%d", &option);
		switch (option){
		case EXIT:
			break;
		case ADD:
			Add(&ct);
			break;
		case DEL:
			Delete(&ct);
			break;
		case SEAR:
			Sear(&ct);
			break;
		case MOD:
			Modify(&ct);
			break;
		case SHOW:
			Show(&ct);
			break;
		case EMP:
			Empty(&ct);
			break;
		case SORT:
			Sort(&ct);
			break;
		case SAVE:
			Save(&ct);
			break;
		case LOAD:
			Load(&ct);
			break;
		default:
			printf("输入有误!\n");
		}
	} while (option);
}

int main(){
	testcontact();
	system("pause");
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
Python简易通讯录是一个基于Python语言开发的简单联系人管理系统,它可以帮助用户存储和管理联系人的信息。以下是一个简单的Python通讯录实现示例: ```python class Contact: def __init__(self, name, phone_number): self.name = name self.phone_number = phone_number class AddressBook: def __init__(self): self.contacts = [] def add_contact(self, contact): self.contacts.append(contact) def search_contact(self, name): for contact in self.contacts: if contact.name == name: return contact return None def delete_contact(self, name): contact = self.search_contact(name) if contact: self.contacts.remove(contact) print(f"成功删除联系人:{name}") else: print(f"未找到联系人:{name}") def display_contacts(self): if len(self.contacts) == 0: print("通讯录为空") else: print("通讯录中的联系人:") for contact in self.contacts: print(f"姓名:{contact.name},电话:{contact.phone_number}") # 创建通讯录对象 address_book = AddressBook() # 添加联系人 contact1 = Contact("张三", "123456789") address_book.add_contact(contact1) contact2 = Contact("李四", "987654321") address_book.add_contact(contact2) # 显示所有联系人 address_book.display_contacts() # 搜索联系人 search_name = "张三" result = address_book.search_contact(search_name) if result: print(f"找到联系人:{result.name},电话:{result.phone_number}") else: print(f"未找到联系人:{search_name}") # 删除联系人 delete_name = "李四" address_book.delete_contact(delete_name) # 再次显示所有联系人 address_book.display_contacts() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值