C/C++项目开发:通讯录管理系统源码,C语言链表实现

点击蓝字

9f90796b9116c287ca6a75ee68ec6b91.png

关注我们

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

来源于网络,侵删

hello,各位小伙伴们大家好!你们今天有敲代码嘛?

如果有熟悉的小伙伴看到我,就知道又可以来学习源码项目了!没错,咱们今天要分享的同样也是经典管理系统项目之一:通讯录管理系统!我们一起来看看吧!

知识点:C语言,链表

开发工具:VS2022/2019(没有VS的话也可以来文末领取哦)

b9c89e1368161c11285dc9426b4d9c09.png

完成一个通讯录管理系统,具体要求如下:

1. 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等

2. 能够提供添加、删除和修改通讯录信息的功能

3. 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询

4. 将通讯录保存在文件中

5. 能够按表格方式输出通讯录信息

6. 退出程序


也不说太多多余的话了,先看一下效果图:

f21fee01e4e9df23d9694973c211075b.png

为了照顾那些想要快速完成项目设计的同学,咱们就不进行源码的解析了,直接上全部源码吧!

源码分享:

#include <stdlib.h>
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<m;i++){  s=(LinkList)malloc(sizeof(ListNode)); //新建的节点 
printf("输入第%d位编号:",i+1);
scanf("%s",&s->data.num);
printf("\n输入姓名:");
scanf("%s",&s->data.name);
printf("\n输入性别:");
scanf("%s",&s->data.sex);
printf("\n输入电话:");
scanf("%s",&s->data.phone);
printf("\n输入地址:");
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<i-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<i-1) //使p指向要删除位置的前一个元素 { p=p->next;j++;}q=p->next; //q指向后一个元素  
printf("\n被删除的人员信息为:\n");
printf("\n编号:%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<i){p=p->next;j++;}d=p->data;
return 1;}void print(LinkList L) //打印通讯录人员信息 
{ LinkList p;p=L->next;
while(p){
printf("\n编号:%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("\n--------------------------------------------2.通讯者节点的插入----------------------------------------------------------");
printf("\n--------------------------------------------3.通讯者节点的查询----------------------------------------------------------");
printf("\n--------------------------------------------4.通讯者节点的删除----------------------------------------------------------");
printf("\n--------------------------------------------5.通讯录链表的输出----------------------------------------------------------");
printf("\n--------------------------------------------0.退出管理系统--------------------------------------------------------------");}
int main()
{LinkList L;DataType d,d1;
int m,location,length,choose;menu();p:
printf("\n请输入你的选项:");
scanf("%d",&choose);
switch(choose){ case 1:printf("请输入通讯录人数:");scanf("%d",&m);CreateList(L,m);goto p;
case 2:printf("\n输入要插入的位置:");scanf("%d",&location);printf("输入插入人员的编号:"); scanf("%s",&d.num);printf("\n输入姓名:"); scanf("%s",&d.name); printf("\n输入性别:");scanf("%s",&d.sex);printf("\n输入电话:");scanf("%s",&d.phone);printf("\n输入地址:");scanf("%s",&d.addr);ListInsert(L,location,d);goto p;
case 3:printf("\n请输入查询位置");scanf("%d",&location);GetElem(L,location,d); printf("查询到的人员信息为:\n");printf("\n编号:%s  姓名:%s  性别:%s  电话:%s 地址:%s",d.num,d.name,d.sex,d.phone,d.addr);goto p;
case 4:printf("\n输入要删除的位置:");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;}

6d1842a347de5f37fe56421fc8df1f77.gif

如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javafx窗体程序_JavaFX真实世界应用程序:欧洲电视网广播联盟

javafx窗体程序我荣幸地与今年在德累斯顿Saxonia 系统公司工作的Alexander Casall一起在JavaOne上展示了多个JavaFX Real-World应用程序。 在准备本次演讲时&#xff0c;我们向客户和合作伙伴发送了一份调查表&#xff0c;并向他们询问了一些与他们的项目&#xff0c;他们的应用…

spring 数据库 链接db2_Druid,Java语言中最好的数据库连接池

Druid是Java语言中最好的数据库连接池&#xff0c;这话不是我说的&#xff0c;是Druid官方文档自己这样描述的&#xff0c;这是何等的自信&#xff01;连接池的作用&#xff0c;跟线程池的作用大同小异&#xff0c;都是为了减少频繁的创建销毁连接IO&#xff0c;提升性能。drui…

编程知识:既然已经有数组了,为什么还要链表?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删对于不少开发者而言&#xff0c;链表(linked list)这种数据结构既熟悉又陌生&#xff0c;熟悉是因为它确实是非常基础的数据结构&#xff0c;陌生…

jcache_随机JCache内容:多个提供程序和JMX Bean

jcacheJCache&#xff08;JSR 107&#xff09;是用于缓存的Java标准…足够了。 没有更多介绍性的东西。 这是一则速成文章&#xff0c;内容涉及 多个JCache提供程序配置&#xff0c;以及 功能&#xff1a;通过JMX Mbeans的JCache统计信息 管理多个JCache提供程序 如果您只使…

python webbrowser点击_用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!...

引言如果谈到这几年手机上各平台最常见的引流福利&#xff0c;必然是答题赢大奖系列小游戏了。像什么头号英雄&#xff0c;百万玩家之类的&#xff0c;充斥在我们生活中&#xff0c;同时也成为了我们生活中常见的娱乐方式。但是有时候就会想&#xff0c;能不能实现手机自动答题…

程序员的年终总结,各种版本各种残

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删朱自清版这几天心里颇不宁静了&#xff0c;眼看上线的日子越来越临近&#xff0c;而项目Bug之多&#xff0c;密密的交叉着&#xff0c;却无从改起…

securecrt哪个版本好用_电脑跑分测试软件哪个好?好用的电脑跑分软件推荐

想要直观的了解自己电脑状况&#xff0c;那么一款好用的电脑跑分软件无疑是必不可少的&#xff0c;毕竟他能够将测试结果用跑分的形式计算出来。那么&#xff0c;电脑跑分软件哪个比较好呢&#xff1f;下面是小编分享的好用的电脑跑分软件推荐&#xff0c;游戏玩家们可不要错过…

C语言,单片机绕不过的坎,你对C语言内存分配了解多少呢

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删一、static在C语言里面可以用来修饰变量&#xff0c;也可以用来修饰函数。1、 先看用来修饰变量的时候。变量在C语言里面可分为存在全局数据区、…

内存 增量数据持久_内存中数据模型和大数据持久性

内存 增量数据持久ORM框架在需要与关系数据库进行交互时可以帮助开发人员。 对于关系数据库&#xff0c;有许多出色的ORM框架&#xff0c;例如Hibernate和Apache OpenJPA&#xff0c;其中一些确实很棒。 如今&#xff0c;大数据正在涌现&#xff0c;越来越多的人开发在大数据上…

自学编程的6个技巧总结

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删有一天&#xff0c;我的一个在学编程的朋友问我&#xff1a;“我想快速学习编程&#xff0c;你有什么好的推荐吗&#xff1f;”我曾在上大学的时…

C语言如何知自身函数的实际地址与大小

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删事情的起因大概是这样……在很久很久以前&#xff0c;我最早用的是MASM&#xff08;Win32ASM&#xff09;写程序&#xff0c;从平台兼容性、开发…

xtext_使用Xtext为Eclipse和IntelliJ开发DSL

xtext在这篇文章中&#xff0c;我们将看到如何开发一种简单的语言。 我们的目标是&#xff1a; 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示&#xff0c;验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 &#xff0c;但请包含您的兴奋之处&…

sed 插入多行_Linux三剑客之sed

sed命令用法小记版本&#xff1a;CentOS7▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼好久没更新文章了&#xff0c;项目的事情太多&#xff0c;总得给自己的懒惰找个借口&#xff0c;哈哈~话不多说进入正题创建测试数据[aliscaspark02 a]$ cat data#test the sedThis is the header l…

分享一些超级炫酷的C语言小技巧

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C语言常常让人觉得它所能表达的东西非常有限。它不具有类似第一级函数和模式匹配这样的高级功能。但是C非常简单&#xff0c;并且仍然有一些非常…

C++编程新手容易犯的 10 种编程错误

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删公司每年都会有一定的人员流动&#xff0c;相应地也会招一些应届生补充进来&#xff0c;指导应届生已经成为老员工的必修课了。平日里会我们会经…

Linux上C语言程序编译过程详解

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删本文将介绍如何将高层的C/C语言编写的程序转换成为处理器能够执行的二进制代码的过程&#xff0c;包括四个步骤&#xff1a;预处理&#xff08;P…

C语言,动图展示十大经典排序算法

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删以前也零零碎碎发过一些排序算法&#xff0c;但排版都不太好&#xff0c;又重新整理一次&#xff0c;排序算法是数据结构的重要部分&#xff0c;…

java ee各类组件_在Java EE组件中使用骆驼路线

java ee各类组件从现在开始我一直在与Camel合作&#xff0c;我真的很喜欢它的简单性。 在Java EE之上使用它一直是一个挑战&#xff0c;我最近发表了一篇关于如何做到这一点的演讲&#xff0c;而在Java EE中引导Camel的不同方法实际上建议使用WildFly-Camel Subsystem 。 在正在…

5gnr帧结构特点有哪些_真空离子束刻蚀设备的结构特点有哪些

离子束刻蚀设备有立式、卧式两种结构。通常情况下&#xff0c;该设备以卧式的结构居多&#xff0c;因为采用卧式结构的话&#xff0c;离子源发出的离子束为水平喷射方向&#xff0c;大部分的刻蚀溅射物将落在真空室的底部&#xff0c;可在一定程度上将溅射材料的重新沉积减少。…

老了就不能编程?大龄程序员在线“辟谣”:15 年后,我变得更好了

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删几年前&#xff0c;Quora 上的一个提问在程序员圈内掀起热议&#xff1a;“随着年龄的增长&#xff0c;人们会对编程失去兴趣吗&#xff1f;预计…