hello,各位小伙伴们大家好!你们今天有敲代码嘛?
如果有熟悉的小伙伴看到我,就知道又可以来学习源码项目了!没错,咱们今天要分享的同样也是经典管理系统项目之一:通讯录管理系统!我们一起来看看吧!
知识点:C语言,链表
开发工具:VS2022/2019(没有VS的话也可以来文末领取哦)

完成一个通讯录管理系统,具体要求如下:
1. 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等
2. 能够提供添加、删除和修改通讯录信息的功能
3. 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询
4. 将通讯录保存在文件中
5. 能够按表格方式输出通讯录信息
6. 退出程序
也不说太多多余的话了,先看一下效果图:

为了照顾那些想要快速完成项目设计的同学,咱们就不进行源码的解析了,直接上全部源码吧!
源码分享:
typedef struct //定义每个人员信息结构体
{
char num[5]; //编号
char name[9];//姓名
char sex[3]; //性别
char phone[13]; //电话
char addr[31]; //地址
}DataType;
typedef struct node //定义链表类型
{
DataType data; //数据域
struct node *next; //指针域
}ListNode;
typedef ListNode *LinkList;
void CreateList(LinkList &L,int m)//通讯录链表的建立
{ int i;
LinkList s,r;
L=(LinkList)malloc(sizeof(ListNode));
L->next=NULL;
r=L; //尾节点
for(i=0;i
{ s=(LinkList)malloc(sizeof(ListNode)); //新建的节点
printf("输入第%d位编号:",i+1);
scanf("%s",&s->data.num);
printf("
输入姓名:");
scanf("%s",&s->data.name);
printf("
输入性别:");
scanf("%s",&s->data.sex);
printf("
输入电话:");
scanf("%s",&s->data.phone);
printf("
输入地址:");
scanf("%s",&s->data.addr);
s->next=NULL;
r->next=s; //插入尾节点之后
r=s;
}
}
int ListLength(LinkList L) //求通讯录链表的长度
{ LinkList p;
int length=0;
p=L->next;
while(p)
{ length++;
p=p->next;
}
return length;
}
int ListInsert(LinkList &L,int i,DataType d) //通讯录链表的插入
{ LinkList p,s;
int length;
length=ListLength(L);
p=L->next;
int j=1;
if(!p||i>length+1) //如果是空表或者查询位置不符合要求
return 0;
while(p&&j-1) //使p指向要添加位置的前一个元素
{
p=p->next;
j++;
}
s=(LinkList)malloc(sizeof(LinkList));
s->data=d;
s->next=p->next;
p->next=s;
return 1;
}
int ListDelete(LinkList &L,int i)
{ LinkList p,q;//p为要删除的前一个节点,q为要删除的节点
p=L;
int j=0;
int length;
length=ListLength(L);
if(!p||i>length) //如果是空表或者查询位置不符合要求
return 0;
while(p&&j-1) //使p指向要删除位置的前一个元素
{ p=p->next;
j++;
}
q=p->next; //q指向后一个元素
printf("
被删除的人员信息为:
");
printf("
编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",q->data.num,q->data.name,q->data.sex,q->data.phone,q->data.addr);
p->next=q->next;
return 1;
}
int GetElem(LinkList L,int i,DataType &d) //查询第i个成员信息
{ LinkList p;
p=L->next;
int j=1;
int length;
length=ListLength(L);
if(!p||i>length) //如果是空表或者查询位置不符合要求
return 0;
while(j
{p=p->next;
j++;
}
d=p->data;
return 1;
}
void print(LinkList L) //打印通讯录人员信息
{ LinkList p;
p=L->next;
while(p)
{
printf("
编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
p=p->next;
}
}
void menu()
{ printf("--------------------------------------------1.通讯录链表的建立----------------------------------------------------------");
printf("
--------------------------------------------2.通讯者节点的插入----------------------------------------------------------");
printf("
--------------------------------------------3.通讯者节点的查询----------------------------------------------------------");
printf("
--------------------------------------------4.通讯者节点的删除----------------------------------------------------------");
printf("
--------------------------------------------5.通讯录链表的输出----------------------------------------------------------");
printf("
--------------------------------------------0.退出管理系统--------------------------------------------------------------");
}
int main()
{
LinkList L;
DataType d,d1;
int m,location,length,choose;
menu();
p:
printf("
请输入你的选项:");
scanf("%d",&choose);
switch(choose)
{ case 1:printf("请输入通讯录人数:");scanf("%d",&m);CreateList(L,m);goto p;
case 2:printf("
输入要插入的位置:");scanf("%d",&location);printf("输入插入人员的编号:"); scanf("%s",&d.num);printf("
输入姓名:"); scanf("%s",&d.name); printf("
输入性别:");scanf("%s",&d.sex);printf("
输入电话:");scanf("%s",&d.phone);printf("
输入地址:");scanf("%s",&d.addr);ListInsert(L,location,d);goto p;
case 3:printf("
请输入查询位置");scanf("%d",&location);GetElem(L,location,d); printf("查询到的人员信息为:
");printf("
编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s",d.num,d.name,d.sex,d.phone,d.addr);goto p;
case 4:printf("
输入要删除的位置:");scanf("%d",&location);ListDelete(L,location);goto p;
case 5:print(L);goto p;
case 0:printf("系统已退出。");exit(0);
default:printf("输入错误,请重新输入");goto p;
}
return 0;
}
通讯录管理系统就到此结束啦,大家赶紧试试吧!
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7646浏览量
146190 -
管理系统
+关注
关注
1文章
2942浏览量
38702
原文标题:C/C++项目开发:通讯录管理系统源码,C语言链表实现
文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
如何实现与OPC UA协议远程通讯?
实现OPC UA协议的远程通讯需要从协议特性、网络架构、安全机制及典型应用四个维度系统化构建解决方案。作为工业自动化领域的通用语言,OPC UA通过内置的信息建模能力和跨平台特性,为设
C语言主要特点
指针类型数据,使用十分灵活和多样化,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
4.具有结构化的控制语句。用函数作为程序的模块单位,便于实现程序的模块化。C
发表于 01-05 07:41
触拓科技会议预约系统使用操作手册
的内部成员的账号和密码由管理员进入系统的组织架构(通讯录)去新增门牌上线和管理2.1门牌通电联网通电联网的四种方式1、POE供电供网(推荐)2、电源供电WIFI供网3、电源供电网线供网
发表于 12-25 16:56
•0次下载
C语言内存池使用
内存池我们就可以使用单链表来进行维护,下面通过一个通讯录的程序来说明内存池的运用。
普通的版本:
//Example 04 V1
#include
#include
#include
发表于 12-11 07:57
无数据域双向链表的代码
);
return 0;
}
在这个示例中,我们定义了一个包含指向前一个节点和后一个节点的结构体 Node,以及一个包含整数数据和 Node 结构体的结构体 Data。然后实现了插入和打印链表的函数。在打
发表于 12-11 06:56
C语言和C++之间的区别是什么
(STL),包含多种容器(如vector、list、map等)、算法以及迭代器,极大地提高了开发效率和代码复用性。
而C语言的标准库相对较小,虽然也提供了基本的数据结构(如数组、链表等)和算法的支持,但不
发表于 12-11 06:23
C语言的编程技巧
和效率:通过位段、内联汇编和尾递归优化等技巧,可以有效提高代码的执行效率。
10、内存管理和系统级编程:通过内存池技术、复合字面量初始化结构体以及信号处理等功能,实现高效的内存管理
发表于 11-27 06:46
C语言程序的结构
1系统的改进
可以说,这个用ASM51实现的代码是没有什么组织性可言的,要什么功能就加入什么功能,弄得程序的结构非常松散,其实这也是导致笔者最终决定重新改写这些代码的原因。
大家知道
发表于 11-26 08:12
C语言在嵌入式开发中的应用
资源有限的嵌入式设备上实现完整的网络功能 。
5、软件固件开发:嵌入式系统的基石
软件固件是嵌入式系统中最基本的软件,它负责控制硬件设备的运行,并提供基本的系统功能。
发表于 11-21 08:09
SaaS云门诊系统源码,诊所his系统源码
一套成熟的SaaS云门诊系统源码,采用B/S架构,基于SpringBoot+Vue.js技术栈开发。 云门诊系统支持医保结算,包含预约挂号、医生工作站、收费管理、药房发药、库存
鸿蒙ArkTS+ArkUI仿微信通讯录页面制作【2】
' , '#C7CEEA' , '#A8E6CF' , '#FFD3A5' , '#FD9644' , '#9BB5FF' , '#98D8C8' , '#F7DC6F' , '#BB8FCE' , '#85C
通讯录管理系统源码,C语言链表实现
评论