1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C语言实现通讯录管理系统(简易版)

C语言实现通讯录管理系统(简易版)

时间:2023-12-27 20:57:51

相关推荐

C语言实现通讯录管理系统(简易版)

实现一个通讯录:

通讯录可以用来存储个人信息,当通讯录空间已满时,可以自动扩充通讯录的存储空间,每个人的信息包括:姓名、性别、年龄、电话、住址。

提供方法:

1.添加联系人信息;

2.删除指定联系人信息;

3.查找指定联系人信息;

4.修改指定联系人信息;

5.显示所有联系人信息;

6.清空所有联系人;

7.以名字排序所有联系人。

根据上述需求,我们依次定义出所需要的结构体、自定义函数等等。

个人信息结构体定义:

#define MAX_NAME_SIZE 20#define MAX_SEX_SIZE 3#define MAX_TEL_SIZE 12#define MAX_ADDR_SIZE 256typedef struct PersonInfo{char name[MAX_NAME_SIZE];char sex[MAX_SEX_SIZE];int age;char tel[MAX_TEL_SIZE];char address[MAX_ADDR_SIZE];}PersonInfo;

在定义了个人信息结构体后,还需要定义出通讯录结构体,按照满足题目要求 “当通讯录空间已满时,可以自动扩充通讯录的存储空间”,通讯录结构体定义如下:

typedef struct Contact{PersonInfo* pCont;size_t capacity;//通讯录的最大容量size_t size;};

根据题目要求,初步定义出以下函数接口:

void InitContact(Contact* pcnt);//初始化通讯录void AddContact(Contact* pcnt);//添加联系人信息void DelContact(Contact* pcnt);//删除指定联系人信息void FindContact(Contact* pcnt);//查找指定联系人信息void ModifyContact(Contact* pcnt);//修改指定联系人信息void ShowContact(Contact* pcnt);//显示所有联系人信息void ClearContact(Contact* pcnt);//清除所有联系人void SortContact(Contact* pcnt);//以名字排序所有联系人

根据题目要求,利用顺序表的相关知识实现通讯录管理系统,代码如下:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<string.h>#include<stdbool.h>#define MAX_NAME_SIZE 20#define MAX_SEX_SIZE 3#define MAX_TEL_SIZE 12#define MAX_ADDR_SIZE 256#define DEFAULT_CONTACT_SIZE 128//通讯录默认空间大小#define CONTACT_INC_SIZE 20//通讯录空间每次扩容大小enum { QUIT, ADD, DEL, FIND, MODIFY, SHOW, CLEAR, SORT };typedef struct PersonInfo{char name[MAX_NAME_SIZE];char sex[MAX_SEX_SIZE];int age;char tel[MAX_TEL_SIZE];char address[MAX_ADDR_SIZE];}PersonInfo;typedef struct Contact{PersonInfo* pCont;size_t capacity;size_t size;}Contact;//函数声明void InitContact(Contact* pcnt);//初始化通讯录void AddContact(Contact* pcnt);//添加联系人信息void DelContact(Contact* pcnt);//删除指定联系人信息void FindContact(Contact* pcnt);//查找指定联系人信息void ModifyContact(Contact* pcnt);//修改指定联系人信息void ShowContact(Contact* pcnt);//显示所有联系人信息void ClearContact(Contact* pcnt);//清除所有联系人void SortContact(Contact* pcnt);//以名字排序所有联系人void DestroyContact(Contact* pcnt);//程序结束时摧毁通讯录,防止内存泄漏int FindByName(Contact* pcnt, char Name[]);bool CheckCapacity(Contact* pcnt);bool IsEmpty(Contact* pcnt);int main(int argc, char* argv[]){//初始化通讯录Contact cont;InitContact(&cont);int select = 1;while (select){printf("**************通 讯 录*****************\n");printf("* [1] Add [2] Del*\n");printf("* [3] Find [4] Modify *\n");printf("* [5] Show [6] Clear *\n");printf("* [7] Sort [0] Quit System *\n");printf("***************************************\n");printf("请选择:>");scanf("%d", &select);if (select == QUIT)break;switch (select){case ADD:AddContact(&cont);break;case DEL:DelContact(&cont);break;case FIND:FindContact(&cont);break;case MODIFY:ModifyContact(&cont);break;case SHOW:ShowContact(&cont);break;case CLEAR:ClearContact(&cont);break;case SORT:SortContact(&cont);break;}}printf("GoodBye,退出通讯录系统...\n");DestroyContact(&cont);return 0;}void InitContact(Contact* pcnt){pcnt->pCont = (PersonInfo*)malloc(sizeof(PersonInfo) * DEFAULT_CONTACT_SIZE);memset(pcnt->pCont, 0, sizeof(PersonInfo) * DEFAULT_CONTACT_SIZE);//将开辟的空间全部初始化为0pcnt->capacity = DEFAULT_CONTACT_SIZE;pcnt->size = 0;}bool CheckCapacity(Contact* pcnt){if (pcnt->size >= pcnt->capacity){//扩容PersonInfo* new_cont = (PersonInfo*)realloc(pcnt->pCont,sizeof(PersonInfo) * (pcnt->capacity + CONTACT_INC_SIZE));if (pcnt->pCont == NULL)return false;pcnt->pCont = new_cont;pcnt->capacity += CONTACT_INC_SIZE;printf("扩容成功.\n");}return true;}bool IsEmpty(Contact* pcnt){return pcnt->size == 0;}void AddContact(Contact* pcnt){if (!CheckCapacity(pcnt)){printf("通讯录已满,不能增加联系人信息...\n");return;}printf("姓名:>");scanf("%s", pcnt->pCont[pcnt->size].name);printf("性别:>");scanf("%s", pcnt->pCont[pcnt->size].sex);printf("年龄:>");scanf("%d", &pcnt->pCont[pcnt->size].age);printf("电话:>");scanf("%s", pcnt->pCont[pcnt->size].tel);printf("住址:>");scanf("%s", pcnt->pCont[pcnt->size].address);pcnt->size++;printf("增添联系人信息成功...\n");}void DelContact(Contact* pcnt){printf("请输入要删除的联系人姓名:>");char Name[MAX_NAME_SIZE];scanf("%s", Name);int index = FindByName(pcnt, Name);if (index = -1){printf("要删除的联系人不存在...\n");return;}for (int i = index; i < pcnt->size; i++){pcnt->pCont[i] = pcnt->pCont[i + 1];}pcnt->size--;printf("删除信息成功...\n");}void FindContact(Contact* pcnt){if (IsEmpty(pcnt)){printf("通讯录为空,不能查找...\n");return;}char Name[MAX_NAME_SIZE];scanf("%s", Name);int index = FindByName(pcnt, Name);if (index = -1){printf("要查找的联系人不存在...\n");return;}printf("%-8s%-6s%-6d%-13s%s\n", pcnt->pCont[index].name,pcnt->pCont[index].sex,pcnt->pCont[index].age,pcnt->pCont[index].tel,pcnt->pCont[index].address);}void ModifyContact(Contact* pcnt){if (IsEmpty(pcnt)){printf("通讯录为空,不能修改...\n");return;}char Name[MAX_NAME_SIZE];scanf("%s", Name);int index = FindByName(pcnt, Name);if (index = -1){printf("要修改的联系人不存在...\n");return;}printf("%s", "你想修改什么信息(1-姓名 2-性别 3-年龄 4-电话 5-住址)");int select;scanf("%d", &select);switch (select){case 1:printf("请输入要修改的姓名:>");scanf("%s", pcnt->pCont[index].name);break;case 2:printf("请输入要修改的性别:>");scanf("%s", pcnt->pCont[index].sex);break;case 3:printf("请输入要修改的年龄:>");scanf("%d", &pcnt->pCont[index].age);break;case 4:printf("请输入要修改的电话:>");scanf("%s", pcnt->pCont[index].tel);break;case 5:printf("请输入要修改的住址:>");scanf("%s", pcnt->pCont[index].address);break;}printf("修改信息成功...\n");}void ShowContact(Contact* pcnt){printf("%-8s%-6s%-6s%-13s%s\n", "姓名", "性别", "年龄", "电话", "地址");for (int i = 0; i < pcnt->size; ++i){printf("%-8s%-6s%-6d%-13s%s\n", pcnt->pCont[i].name,pcnt->pCont[i].sex,pcnt->pCont[i].age,pcnt->pCont[i].tel,pcnt->pCont[i].address);}}void ClearContact(Contact* pcnt){printf("是否确定清除通讯录<Y/N>:>");fflush(stdin); //清除上一次的\nchar ch = getchar();if (ch == 'N' || ch == 'n'){printf("清除通讯录取消....\n");return;}else if (ch == 'Y' || ch == 'y'){pcnt->size = 0;printf("清除通讯录成功....\n");return;}printf("输入错误.....\n");}void SortContact(Contact* pcnt){for (int i = 0; i < pcnt->size - 1; ++i){for (int j = 0; j < pcnt->size - i - 1; ++j){if (strcmp(pcnt->pCont[j].name, pcnt->pCont[j + 1].name) > 0){PersonInfo tmp = pcnt->pCont[j];pcnt->pCont[j] = pcnt->pCont[j + 1];pcnt->pCont[j + 1] = tmp;}}}printf("排序成功.\n");}void DestroyContact(Contact* pcnt){free(pcnt->pCont);pcnt->pCont = NULL;pcnt->capacity = pcnt->size = 0;}int FindByName(Contact* pcnt, char Name[]) {for (int i = 0; i < pcnt->size; i++){if (strcmp(pcnt->pCont[i].name, Name) == 0)return i;}return -1;}

部分调试界面:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。