【C语言】通讯录管理系统
C语言通讯录管理系统
- 前言
- 一、系统框架搭建
- 1.成员信息创建
- 2.菜单实现
- 3.系统功能声明
- 二、系统功能实现
- 1.初始化通讯录
- 2.添加信息
- 3.打印信息
- 4.根据姓名查找位置
- 5.删除信息
- 6.查找信息
- 7.修改信息
- 8.排序信息
- 三、源文件展示
- 1.test.c
- 2.contact.c
- 3.contact.h
前言
通过使用C语言来创建一个通讯录的管理系统,管理人员可对成员信息进行管理。成员信息包括姓名、年龄、电话、性别以及住址,执行操作有增删改查这四项基本操作以及成员信息全览和信息排序。
一、系统框架搭建
1.成员信息创建
由于成员信息较多,可以选择通过结构体来创建一个通讯录结构体和一个成员信息结构体。
通讯录结构体内部会嵌套一个成员信息结构体和一个表示成员数量的变量。
struct Infor
{char name[nlen];int age;char tele[tlen];char sex[slen];char addres[alen];
};struct Contact
{struct Infor data[MAX];int size;
};
2.菜单实现
首先对于通讯录来说,建立一个菜单是非常重要的,这就好比在一个餐厅里,只有提供了一份菜单,顾客就可以根据自己的意愿的点菜,在操作界面显示一个完整简明的菜单,才能更好地管理通讯录系统。
void menu()
{printf("************************************\n");printf("******* 通讯录管理系统 *******\n");printf("************************************\n");printf("******* 1.add *******\n");//添加信息printf("******* 2.delete *******\n");//删除信息printf("******* 3.update *******\n");//更改信息printf("******* 4.read *******\n");//查找信息printf("******* 5.show *******\n");//打印信息printf("******* 6.sort *******\n");//排序信息printf("******* 0.exit *******\n");//退出printf("************************************\n");
}
3.系统功能声明
//初始化通讯录
void InitContact(struct Contact* stu);//添加信息
void AddContact(struct Contact* stu);//打印信息
void ShowContact(const struct Contact* stu);//根据姓名查找位置
int FindByName(const struct Contact* stu, char name[nlen]);//删除信息
void DeleteContact(struct Contact* stu);//查找信息
void ReadContact(const struct Contact* stu);//修改信息
void UpdateContact(struct Contact* stu);//排序信息
void SortContact(struct Contact* stu);
二、系统功能实现
1.初始化通讯录
为什么要对通讯录进行初始化呢,因为在创建了通讯录之后,里边的所有信息的以随机值的形式存在,不知道的还以为这个通讯录里已经存放了成员信息。
void InitContact(struct Contact* stu)
{memset(stu->data, 0, sizeof(stu->data));stu->size = 0;
}
2.添加信息
void AddContact(struct Contact* stu)
{if (stu->size == MAX){printf("通讯录已满,无法添加信息!\n");}else{printf("请添加姓名:");scanf("%s", (stu->data)[stu->size].name);printf("请添加年龄:");scanf("%d", &((stu->data)[stu->size].age));printf("请添加电话:");scanf("%s", (stu->data)[stu->size].tele);printf("请添加性别:");scanf("%s", (stu->data)[stu->size].sex);printf("请添加地址:");scanf("%s", (stu->data)[stu->size].addres);stu->size++;printf("添加成功\n");}
}
3.打印信息
void ShowContact(const struct Contact* stu)
{if (stu->size == 0){printf("通讯录为空\n");}else{printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");for (int i = 0; i < stu->size; i++){printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[i].name,stu->data[i].age,stu->data[i].tele,stu->data[i].sex,stu->data[i].addres);}}
}
4.根据姓名查找位置
这个函数的存在就是为了通讯录管理人员通过成员姓名来查找该成员信息所处的位置。
static int FindByName(const struct Contact* stu,char name[nlen] )
{int i = 0;for (i = 0; i < stu->size; i++){if (0 == strcmp(stu->data[i].name, name)){return i;}}return -1;
}
5.删除信息
void DeleteContact(struct Contact* stu)
{if (stu->size == 0){printf("通讯录为空,无法删除\n");}char name[nlen];printf("请输入要删除信息人的名字:");scanf("%s", name); int ret = FindByName(stu, name);if (ret == -1){printf("您要删除的信息不存在!\n");}else{for (int j = ret; j < stu->size - 1; j++){stu->data[j] = stu->data[j + 1];}stu->size--;printf("删除成功\n");}
}
6.查找信息
void ReadContact(const struct Contact* stu)
{printf("请输入要查找信息人的名字:");char name[nlen];scanf("%s", name);int ret = FindByName(stu, name);if (ret == -1){printf("您要查找的信息不存在\n");}else{printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[ret].name,stu->data[ret].age,stu->data[ret].tele,stu->data[ret].sex,stu->data[ret].addres);}
}
7.修改信息
void UpdateContact(struct Contact* stu)
{printf("请输入要该信息人的名字:");char name[nlen];scanf("%s", name);int ret = FindByName(stu, name);if (ret == -1){printf("您要修改的信息不存在\n");}else{printf("请添加姓名:");scanf("%s", (stu->data)[ret].name);printf("请添加年龄:");scanf("%d", &((stu->data)[ret].age));printf("请添加电话:");scanf("%s", (stu->data)[ret].tele);printf("请添加性别:");scanf("%s", (stu->data)[ret].sex);printf("请添加地址:");scanf("%s", (stu->data)[ret].addres);printf("修改成功\n");}
}
8.排序信息
在排序这一模块,我们选择使用qsort函数来进行排序,对这个函数不清楚的朋友可以看一下我之前写的一篇关于qsort函数的博客。
int cmp_s(const void* elem1, const void* elem2)
{return strcmp((char*)elem1, (char*)elem2);
}void SortContact(struct Contact* stu)
{qsort(stu, stu->size, sizeof(stu->data[0]), cmp_s);printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");for (int i = 0; i < stu->size; i++){printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[i].name,stu->data[i].age,stu->data[i].tele,stu->data[i].sex,stu->data[i].addres);}
}
三、源文件展示
1.test.c
#include "contact.h"void menu()
{printf("************************************\n");printf("******* 通讯录管理系统 *******\n");printf("************************************\n");printf("******* 1.ADD *******\n");printf("******* 2.DELETE *******\n");printf("******* 3.UPDATE *******\n");printf("******* 4.READ *******\n");printf("******* 5.SHOW *******\n");printf("******* 6.SORT *******\n");printf("******* 0.EXIT *******\n");printf("************************************\n");
}enum option
{EXIT,ADD,DELETE,UPDATE,READ,SHOW,SORT
};int main()
{int input = 0;struct Contact stu;InitContact(&stu);do{menu();printf("请选择操作:");scanf("%d", &input);switch (input){case ADD:AddContact(&stu);break;case DELETE:DeleteContact(&stu);break;case UPDATE:UpdateContact(&stu);break;case READ:ReadContact(&stu);break;case SHOW:ShowContact(&stu);break;case SORT:SortContact(&stu);break;case EXIT:printf("退出通讯录\n");break;default:printf("输入错误,请从新操作:\n");break;}} while (input);return 0;
}
2.contact.c
#include "contact.h"void InitContact(struct Contact* stu)
{memset(stu->data, 0, sizeof(stu->data));stu->size = 0;
}void AddContact(struct Contact* stu)
{if (stu->size == MAX){printf("通讯录已满,无法添加信息!\n");}else{printf("请添加姓名:");scanf("%s", (stu->data)[stu->size].name);printf("请添加年龄:");scanf("%d", &((stu->data)[stu->size].age));printf("请添加电话:");scanf("%s", (stu->data)[stu->size].tele);printf("请添加性别:");scanf("%s", (stu->data)[stu->size].sex);printf("请添加地址:");scanf("%s", (stu->data)[stu->size].addres);stu->size++;printf("添加成功\n");}
}void ShowContact(const struct Contact* stu)
{if (stu->size == 0){printf("通讯录为空\n");}else{printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");for (int i = 0; i < stu->size; i++){printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[i].name,stu->data[i].age,stu->data[i].tele,stu->data[i].sex,stu->data[i].addres);}}
}static int FindByName(const struct Contact* stu,char name[nlen] )
{int i = 0;for (i = 0; i < stu->size; i++){if (0 == strcmp(stu->data[i].name, name)){return i;}}return -1;
}void DeleteContact(struct Contact* stu)
{if (stu->size == 0){printf("通讯录为空,无法删除\n");}char name[nlen];printf("请输入要删除信息人的名字:");scanf("%s", name); int ret = FindByName(stu, name);if (ret == -1){printf("您要删除的信息不存在!\n");}else{for (int j = ret; j < stu->size - 1; j++){stu->data[j] = stu->data[j + 1];}stu->size--;printf("删除成功\n");}
}void ReadContact(const struct Contact* stu)
{printf("请输入要查找信息人的名字:");char name[nlen];scanf("%s", name);int ret = FindByName(stu, name);if (ret == -1){printf("您要查找的信息不存在\n");}else{printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[ret].name,stu->data[ret].age,stu->data[ret].tele,stu->data[ret].sex,stu->data[ret].addres);}
}void UpdateContact(struct Contact* stu)
{printf("请输入要该信息人的名字:");char name[nlen];scanf("%s", name);int ret = FindByName(stu, name);if (ret == -1){printf("您要修改的信息不存在\n");}else{printf("请添加姓名:");scanf("%s", (stu->data)[ret].name);printf("请添加年龄:");scanf("%d", &((stu->data)[ret].age));printf("请添加电话:");scanf("%s", (stu->data)[ret].tele);printf("请添加性别:");scanf("%s", (stu->data)[ret].sex);printf("请添加地址:");scanf("%s", (stu->data)[ret].addres);printf("修改成功\n");}
}int cmp_s(const void* elem1, const void* elem2)
{return strcmp((char*)elem1, (char*)elem2);
}void SortContact(struct Contact* stu)
{qsort(stu, stu->size, sizeof(stu->data[0]), cmp_s);printf("%-10s\t%-5s\t%-10s\t%-5s\t%-10s\n", "姓名", "年龄", "电话", "性别", "地址");for (int i = 0; i < stu->size; i++){printf("%-10s\t%-5d\t%-10s\t%-5s\t%-10s\n",stu->data[i].name,stu->data[i].age,stu->data[i].tele,stu->data[i].sex,stu->data[i].addres);}
}
3.contact.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 1000
#define nlen 20
#define tlen 11
#define slen 10
#define alen 10struct Infor
{char name[nlen];int age;char tele[tlen];char sex[slen];char addres[alen];
};struct Contact
{struct Infor data[MAX];int size;
};void InitContact(struct Contact* stu);void AddContact(struct Contact* stu);void ShowContact(const struct Contact* stu);void DeleteContact(struct Contact* stu);void ReadContact(const struct Contact* stu);int FindByName(const struct Contact* stu, char name[nlen]);void UpdateContact(struct Contact* stu);void SortContact(struct Contact* stu);
注:此文章是一篇初级版的通讯录管理系统,后续还要对其进行优化处理。
【C语言】通讯录管理系统相关推荐
- ❤️C语言通讯录管理系统(简易版)❤️
❤️C语言通讯录管理系统(简易版)❤️
- c语言通讯录管理系统_通讯录管理系统(C语言)
#include<stdio.h> #include<stdlib.h> //动态内存分配malloc的头文件 #include<conio.h> #include ...
- 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统
用数据结构里面线性结构的链表实现,供大家参考,具体内容如下 文件操作未写 有登录操作,复制源码需要更改登录模块的密码文件存放位置 使用VS2017编译器需要保留开头:#define _CRT_SECU ...
- C语言通讯录管理系统(含完整代码)
课题3:通讯录管理系统 设计内容: 设计一个通讯录管理系统,以实现以下功能:信息添加.查询.修改.删除.排序等功能. 设计要求: 1) 每条信息至包含 :姓名.电话.工作单位等信息 2) 作为一个完整 ...
- C语言通讯录管理系统
本文转载自:http://blog.csdn.net/hackbuteer1/article/details/6573488 实现了通讯录的录入信息.保存信息.插入.删除.排序.查找.单个显示等功能. ...
- 链表实现c语言通讯录管理系统,C++链表实现通讯录管理系统.pdf
C++链链表表实实现现通通讯讯录录管管理理系系统统 用数据结构里面线性结构的链表实现,供大家参考,具体内容 下 文件操作未写 有登录操作,复复制制源源码码需需要要更更改改登登录录模模块块的的密密码码文 ...
- c语言个人通讯录管理系统实验报告_C语言实现个人通讯录管理系统
如何用c语言制作简易的个人通讯录管理系统?想必这是每一位初步学习c语言的同学需要解决的一个大问题.如何将这些数据类型不完全相同的数据元素存储并访问呢?采用结构体便能轻松解决这个问题! #include ...
- android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...
- c语言3级菜单_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
说明: 本系统基于C语言实现班级通讯录管理系统,为大一时学习C语言刚入门所做的课程设计.功能包括增.删.查.改等,非常适合初学者练手.通讯录包括的个人信息有姓名.学号.性别.籍贯.政治面貌.手机号.Q ...
- c语言通讯录程序线性表,数据结构(C语言)课设1——单位员工通讯录管理系统(线性表应用)...
数据结构(C语言)课设1--单位员工通讯录管理系统(线性表应用) 题目要求: 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息 ...
最新文章
- python登录程序编写-初学Python3 - 写一个登录程序
- python 条件语句漫画解析_【Python】解析Python中的条件语句和循环语句
- python timer使用-关于定时器的两种使用方法
- Java 包(package)
- 【资讯干货】2015两会报告中,与互联网有关的41条必收“干货”
- 关于 SAP UI5 系统测试工具 UIVeri5 的 Chromedriver 版本问题
- [C语言]一个很实用的服务端和客户端进行UDP通信的实例
- iOS-QQ临时对话、QQ群申请跳转
- jupyter中保存图片_露哥的摸爬滚打| Jupyter从零开始
- 消息称高通可供货华为:麒麟处理器真将绝版?
- Spring data Jpa,Mybatis,读写锁,@Lock 使用
- libvirt 创建的文件
- 关于补码--看锆石fpga计算峰峰值时的疑问启示
- c语言二进制十进制十六进制之间的转化(详解,含源代码)
- 壮观性能服务器图片介绍,配至强7500 图解惠普ProLiant DL980 G7
- 我的秋招圆满落幕了,很开心
- python3安装库报错ERROR: Exception: Traceback (most recent call last): File “A:\ProgramData\Anacon
- 二值化神经网络——BNN
- SCSI子系统基础学习笔记 (之UFS子系统) - 3. UFS命令处理
- 对接华为存储iSCSI
热门文章
- dns备用服务器信息,dns服务器地址(dns首选和备用填多少)
- Android 软件行为监控系统 的原理 主要是利用binder机制原理添加一个filter
- 最土团购系统常见问题的汇总
- 50个查询系列-第七个查询:查询学过“叶平”老师所教的所有课的同学的学号、姓名...
- 【机器学习】损失函数MAE
- 久邦GOMO总裁朱志在2018校招生交流会分享
- 【读书笔记】《Web全栈工程师的自我修养》
- 织梦dedecms建站流程
- 计算机权限全部用户,允许所有人权限应用于匿名用户 (Windows 10) - Windows security | Microsoft Docs...
- 如何给服务器IIS配置文件夹配置everyone权限