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

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

为了照顾那些想要快速完成项目设计的同学,咱们就不进行源码的解析了,直接上全部源码吧!
源码分享:
#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(&#34;输入第%d位编号:&#34;,i+1);
scanf(&#34;%s&#34;,&s->data.num);
printf(&#34;\n输入姓名:&#34;);
scanf(&#34;%s&#34;,&s->data.name);
printf(&#34;\n输入性别:&#34;);
scanf(&#34;%s&#34;,&s->data.sex);
printf(&#34;\n输入电话:&#34;);
scanf(&#34;%s&#34;,&s->data.phone);
printf(&#34;\n输入地址:&#34;);
scanf(&#34;%s&#34;,&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(&#34;\n被删除的人员信息为:\n&#34;);
printf(&#34;\n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s&#34;,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(&#34;\n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s&#34;,p->data.num,p->data.name,p->data.sex,p->data.phone,p->data.addr);
p=p->next;
}
}
void menu()
{ printf(&#34;--------------------------------------------1.通讯录链表的建立----------------------------------------------------------&#34;);
printf(&#34;\n--------------------------------------------2.通讯者节点的插入----------------------------------------------------------&#34;);
printf(&#34;\n--------------------------------------------3.通讯者节点的查询----------------------------------------------------------&#34;);
printf(&#34;\n--------------------------------------------4.通讯者节点的删除----------------------------------------------------------&#34;);
printf(&#34;\n--------------------------------------------5.通讯录链表的输出----------------------------------------------------------&#34;);
printf(&#34;\n--------------------------------------------0.退出管理系统--------------------------------------------------------------&#34;);
}
int main()
{
LinkList L;
DataType d,d1;
int m,location,length,choose;
menu();
p:
printf(&#34;\n请输入你的选项:&#34;);
scanf(&#34;%d&#34;,&choose);
switch(choose)
{ case 1:printf(&#34;请输入通讯录人数:&#34;);scanf(&#34;%d&#34;,&m);CreateList(L,m);goto p;
case 2:printf(&#34;\n输入要插入的位置:&#34;);scanf(&#34;%d&#34;,&location);printf(&#34;输入插入人员的编号:&#34;); scanf(&#34;%s&#34;,&d.num);printf(&#34;\n输入姓名:&#34;); scanf(&#34;%s&#34;,&d.name); printf(&#34;\n输入性别:&#34;);scanf(&#34;%s&#34;,&d.sex);printf(&#34;\n输入电话:&#34;);scanf(&#34;%s&#34;,&d.phone);printf(&#34;\n输入地址:&#34;);scanf(&#34;%s&#34;,&d.addr);ListInsert(L,location,d);goto p;
case 3:printf(&#34;\n请输入查询位置&#34;);scanf(&#34;%d&#34;,&location);GetElem(L,location,d); printf(&#34;查询到的人员信息为:\n&#34;);printf(&#34;\n编号:%s 姓名:%s 性别:%s 电话:%s 地址:%s&#34;,d.num,d.name,d.sex,d.phone,d.addr);goto p;
case 4:printf(&#34;\n输入要删除的位置:&#34;);scanf(&#34;%d&#34;,&location);ListDelete(L,location);goto p;
case 5:print(L);goto p;
case 0:printf(&#34;系统已退出。&#34;);exit(0);
default:printf(&#34;输入错误,请重新输入&#34;);goto p;
}
return 0;
}
通讯录管理系统就到此结束啦,大家赶紧试试吧!如果遇到C语言/C++学习问题无法解决,可以来我下方粉丝群交流提问!
粉丝群&(同时也是更多源码素材获取通道):
【C语言/C++/数据结构与算法学习】 |
|