前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C语言】静态通讯录

【C语言】静态通讯录

作者头像
YoungMLet
发布2024-03-01 09:04:41
730
发布2024-03-01 09:04:41
举报
文章被收录于专栏:C++/Linux
今天我们来实现一个静态的通讯录,该通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

提供方法:

添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 以名字排序所有联系人 清空所有联系人

一、 测试部分

先给一个菜单menu();选择后进入相应的模块。

代码语言:javascript
复制
			#define _CRT_SECURE_NO_WARNINGS 1
			#include "Contact.h" 			//引用自己的头文件
			
			void menu()
			{
				printf("******      1.Add         2.Del     ***********\n");
				printf("******      3.Search      4.Modify  ***********\n");
				printf("******      5.Show        6.Sort    ***********\n");
				printf("******      7.Clean       0.exit    ***********\n");
				printf("***********************************************\n");
			}

创建一个枚举类型,里面的枚举类型从0开始,在switch语句中可读性更强。

代码语言:javascript
复制
			enum Option
			{
				EXIT,
				ADD,
				DEL,
				SEARCH,
				MODIFY,
				SHOW,
				SORT,
				CLEAN
			};

主函数部分(测试部分)

代码语言:javascript
复制
			int main()
			{
				int input = 0;
				Contact con;
				InitContact(&con);
				do
				{
					menu();
					printf("请选择:\n");
					scanf("%d", &input);
					switch (input)
					{
					case ADD:
						AddContact(&con);
						break;
					case DEL:
						DelContact(&con);
						break;
					case SEARCH:
						SearchContact(&con);
						break;
					case MODIFY:
						ModifyContact(&con);
						break;
					case SHOW:
						ShowContact(&con);
						break;
					case SORT:
						SortContact(&con);
						break;
					case CLEAN:
						CleanContact(&con);
						break;
					case EXIT:
						printf("退出通讯录\n");
						break;
					default:
						printf("输入错误。请重新输入:\n");
						break;
					}
				} while (input);
				return 0;
			}

二、函数的实现部分

下面直接看代码的实现以及注释:

代码语言:javascript
复制
			#define _CRT_SECURE_NO_WARNINGS 1
			#include "Contact.h"
			


			//初始化通讯录
			void InitContact(Contact* pc)
			{
				pc->sz = 0;
				memset(pc->data, 0, sizeof(pc->data));
			}
			
			//查找函数
			//加static修饰这个函数是为了这个函数只能在这个.c文件内用,出了这个文件就用不了
			static int FindByName(Contact* pc,char* name)
			{
				int i = 0;
				for (i = 0; i < pc->sz; i++)
				{
					//如果找到了就返回这个下标
					if (strcmp(pc->data[i].name, name) == 0)
					{
						return i;
					}
				}
				return -1;
			}
			
			
			//打印通讯录
			void ShowContact(Contact* pc)
			{
				int i = 0;
				//打印标题
				printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
				for (i = 0; i < pc->sz; i++)
				{
					printf("%-10s %-4d %-5s %-12s %-30s\n",
						pc->data[i].name,
						pc->data[i].age,
						pc->data[i].sex,
						pc->data[i].tele,
						pc->data[i].addr);
				}
				printf("\n");
			}
			
			
			//增加指定联系人
			void AddContact(Contact* pc)
			{
				//如果通讯录中有效信息的个数满,提示
				if (pc->sz == MAX)
				{
					printf("通讯录已满,无法添加\n");
					return;
				}
			
				printf("请输入名字:");
				scanf("%s", pc->data[pc->sz].name);
				printf("请输入年龄:");
				scanf("%d", &(pc->data[pc->sz].age));
				printf("请输入性别:");
				scanf("%s", pc->data[pc->sz].sex);
				printf("请输入电话:");
				scanf("%s", pc->data[pc->sz].tele);
				printf("请输入地址:");
				scanf("%s", pc->data[pc->sz].addr);
			
				//添加完sz的长度++
				pc->sz++;
				printf("添加成功\n");
			}
			
			
			//删除指定联系人
			void DelContact(Contact* pc)
			{
				//通讯录为空
				if (pc->sz == 0)
				{
					printf("通讯录为空,无法删除\n");
					return;
				}
				//不为空,删除
				char name[MAX_NAME];
				printf("请输入名字:");
				scanf("%s", &name);
				//一个查找函数,因为查找功能重复,所以写一个查找函数更好
				int pos = FindByName(pc, name);
				if (pos == -1)
				{
					printf("要删除的不存在\n");
					return;
				}
				int i = 0;
				//将后面的数据往前挪
				for (i = pos; i < pc->sz; i++)
				{
					pc->data[i] = pc->data[i + 1];
				}
				//挪完后有效数据的长度--
				pc->sz--;
				printf("删除成功\n");
			}
			
			
			//在通讯录查找指定的人
			void SearchContact(Contact* pc)
			{
				printf("请输入要查找的人的名字:");
				char name[MAX_NAME];
				scanf("%s", &name);
				int pos = FindByName(pc, name);
				if (pos == -1)
				{
					printf("要查找的人不存在\n");
					return;
				}
				printf("查找成功!\n\n");
				printf("%-10s %-4s %-5s %-12s %-30s\n", "姓名", "年龄", "性别", "电话", "地址");
				//找到了打印数据
				printf("%-10s %-4d %-5s %-12s %-30s\n",
					pc->data[pos].name,
					pc->data[pos].age,
					pc->data[pos].sex,
					pc->data[pos].tele,
					pc->data[pos].addr);
				printf("\n");
			}
			
			
			//修改通讯录的数据
			void ModifyContact(Contact* pc)
			{
				printf("请输入需要修改的人的名字:");
				char name[MAX_NAME];
				scanf("%s", &name);
				int pos = FindByName(pc, name);
				if (pos == -1)
				{
					printf("不存在此人\n");
					return;
				}
				//找到了就修改pos下标的数据
				printf("请重新输入TA的数据\n");
				printf("请输入名字:");
				scanf("%s", pc->data[pos].name);
				printf("请输入年龄:");
				scanf("%d", &(pc->data[pos].age));
				printf("请输入性别:");
				scanf("%s", pc->data[pos].sex);
				printf("请输入电话:");
				scanf("%s", pc->data[pos].tele);
				printf("请输入地址:");
				scanf("%s", pc->data[pos].addr);
				printf("修改成功\n");
			}
			
			
			//按照名字排序
			int cmp_by_name(void* e1, void* e2)
			{
				//强转成PeoInfo*类型
				return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
			}
			
			void SortContact(Contact* pc)
			{
				printf("按照名字排列:\n");
				qsort(pc->data, pc->sz, sizeof(PeoInfo), cmp_by_name);
				printf("排序成功\n\n");
			}
			
			
			//清空通讯录
			void CleanContact(Contact* pc)
			{
				pc->sz = 0;
				memset(pc->data, 0, sizeof(pc->data));
				printf("清空通讯录成功!\n");
			}

三、函数的声明部分

代码语言:javascript
复制
			#define _CRT_SECURE_NO_WARNINGS 1
			#include <stdio.h>
			#include <string.h>
			#include <stdlib.h>
			
			#define MAX 100
			#define MAX_NAME 20
			#define MAX_SEX 5
			#define MAX_TELE 12
			#define MAX_ADDR 30
			
			//表示一个人的信息
			typedef struct PeoInfo
			{
				char name[MAX_NAME];
				int age;
				char sex[MAX_SEX];
				char tele[MAX_TELE];
				char addr[MAX_ADDR];
			}PeoInfo;
			
			//定义另外一个结构体,存放第一个结构体的数据和记录通讯录中有效信息的个数
			typedef struct Contact
			{
				//存放数据
				PeoInfo data[MAX];
				//记录通讯录中有效信息的个数
				int sz;
			}Contact;
			
			
			//初始化通讯录
			void InitContact(Contact* pc);
			
			//打印通讯录
			void ShowContact(Contact* pc);
			
			//增加指定联系人
			void AddContact(Contact* pc);
			
			//删除指定联系人
			void DelContact(Contact* pc);
			
			//在通讯录查找指定的人
			void SearchContact(Contact* pc);
			
			//修改通讯录的数据
			void ModifyContact(Contact* pc);
			
			//排序通讯录
			void SortContact(Contact* pc);
			
			//清空通讯录
			void CleanContact(Contact* pc);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今天我们来实现一个静态的通讯录,该通讯录可以用来存储100个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址
  • 一、 测试部分
  • 二、函数的实现部分
  • 三、函数的声明部分
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档