栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

用C语言实现一个通讯录

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用C语言实现一个通讯录

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 
#include 
#include 
#include 
//通过结构体描述一个人的练习情况
typedef struct PersonInfo {
	char name[1024];
	char phone[1024];
}PersonInfo;
//这个结构体描述了一个通信录
//通信录的长度是1024
//还有一个size,表示当前有多少联系人
typedef struct AddressBook {
	PersonInfo persons[1024];
	int size;
}AddressBook;

//此处全局变量,当前为了实现通讯录
//围绕Address
AddressBook addressBook;

void init(AddressBook* addressBook) {
	//把有效元素个数设置为0
	addressBook->size = 0;
	//可有可无
	
}
int menu() {
	printf("****************************n");
	printf("*******欢迎使用通讯录*******n");
	printf("****************************n");
	printf("                            n");
	printf("****************************n");
	printf("********1. 新增联系人*******n");
	printf("********2. 删除联系人*******n");
	printf("********3. 查看联系人*******n");
	printf("********4. 修改联系人*******n");
	printf("********0. 退出通讯录*******n");
	printf("****************************n");
	printf("请输入选项: ");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}
void insert(AddressBook* addressBook) {
	printf("新增n");
	assert(addressBook != NULL);
	//最大为1024满了的话提示失败
	if (addressBook->size >= 1024) {
		printf("失败n");
		return;
	}
	PersonInfo person = { 0 };
	printf("输入姓名: n");
	scanf("%s", person.name);
	printf("输入电话: n");
	scanf("%s", person.phone);
	//把person结构体放到AdderssBook中
	//当数组为空的时候,size就是0,把新增的元素放到下标为0的位置
	//插入完毕后,把size++ ==> 1
	//下次再插入的时候,size为1,就是把心得元素放到size下标为1的位置
	addressBook->persons[addressBook->size] = person;
	addressBook->size++;
	printf("完成nn");
}
void drop(AddressBook* addressBook) {
	printf("删除n");
	//让用户输入一个序号(数组下标)根据序号删除
	printf("输入序号: n");
	int id = 0;
	scanf("%d", &id);
	if (id < 0 || id >= addressBook->size) {
		printf("错误n");
		return;
	}
	//思路
	//如果是尾删就size--
	//如果中间,就把最后一个元素粘过去,再sie--
	if (id == addressBook->size - 1) {
		addressBook->size--;
		printf("成功n");
		return;
	}
	PersonInfo* lastPerson = &addressBook->persons[addressBook->size - 1];
	addressBook->persons[id] = *lastPerson;
	addressBook->size--;
	printf("成功n");
}
void show(AddressBook* addressBook) {
	printf("查看");
	//直接遍历数组
	for (int i = 0; i < addressBook->size; i++) {
		//最好用指针变量表示这个元素
		//不用指针会涉及到元素的拷贝,把PersonInfo的结构体拷贝了一遍
		PersonInfo* p = &addressBook->persons[i];
		printf("[%d] %st%sn", i, p->name, p->phone);
	}
	printf("查看联系人完毕n一共有 %d 个联系人nn", addressBook->size);
}
void update(AddressBook* addressBook) {
	printf("修改n");
	printf("输入序号: n");
	int id = 0;
	scanf("%d", &id);
	if (id < 0 || id >= addressBook->size) {
		printf("错误n");
		return;
	}
	PersonInfo* p = &addressBook->persons[id];
	char name[1024] = { 0 };
	char phone[1024] = { 0 };
	printf("输入 * 表示该选项不修改n");
	printf("输入新用户名(旧: %s): n", p->name);
	scanf("%s", name);
	if (strcmp(name, "*") != 0) {
		strcpy(p->name, name);
	}
	printf("输入新电话(旧: %s): n", p->phone);
	scanf("%s", phone);
	if (strcmp(phone, "*") != 0) {
		strcpy(p->phone, phone);
	}
	printf("成功n");

}
typedef void(*Func)(AddressBook*);
int main() {
	//进行初始化
	init(&addressBook);
	Func funcs[] = {
		 NULL,//为了能让insert和choice对应上
		 insert,
		 drop,
		 show,
		 update
	};
	//和用户进行交互
	while (1) {
		int choice = menu();
		//if (choice == 1) {
		新增
		//}else if (choice == 2) {
		删除
		//}else if (choice == 3) {
		查看
		//}else if (choice == 4) {
		修改
		//}else if (choice == 0) {
		退出
		//}else {
		错误输入
		//}
		if (choice < 0 || choice >= sizeof(funcs) / sizeof(funcs[0])) {
			printf("输入有误");
			continue;
		}
		if (choice == 0) {
			printf("再见");
			break;
		}
		funcs[choice](&addressBook);
		//Func func = funcs[choice];
		// func(addressBook);
		
		//Sleep(2000);
		system("pause");
		system("cls");
	}
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433357.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号