大家好呀,亲爱的小伙伴们!你们今天有在编写代码吗?
如果有熟悉的小伙伴看到我,就会知道又到了学习源码项目的好时机了!没错,今天要分享的同样是一个经典的管理系统项目:通信录管理系统!我们一起来探索一下吧!
涉及知识领域:C语言,链表数据结构
开发所需工具:Visual Studio 2022/2019(如果没有安装这款软件,也可以点击获取哦)
完成一个通讯录管理系统,具体要求如下:
1. 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等
2. 能够提供添加、删除和修改通讯录信息的功能
3. 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询
4. 将通讯录保存在文件中
5. 能够按表格方式输出通讯录信息
6. 退出程序
也不说太多多余的话了,先看一下效果图:
为了照顾那些想要快速完成项目设计的同学,咱们就不进行源码的解析了,直接上全部源码吧!
源码分享:
#include <stdio.h>
#include <stdlib.h>typedef struct
{
char num[6]; // 将编号数组大小修改为6,以容纳字符串结尾的'\0'
char name[10]; // 将姓名数组大小修改为10,以容纳字符串结尾的'\0'
char sex[4]; // 将性别数组大小修改为4,以容纳字符串结尾的'\0'
char phone[14]; // 将电话数组大小修改为14,以容纳字符串结尾的'\0'
char addr[32]; // 将地址数组大小修改为32,以容纳字符串结尾的'\0'
} 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("%5s", s->data.num); // 读取最多5个字符到编号数组
printf("\n输入姓名:");
scanf("%9s", s->data.name); // 读取最多9个字符到姓名数组
printf("\n输入性别:");
scanf("%3s", s->data.sex); // 读取最多3个字符到性别数组
printf("\n输入电话:");
scanf("%13s", s->data.phone); // 读取最多13个字符到电话数组
printf("\n输入地址:");
scanf("%31s", s->data.addr); // 读取最多31个字符到地址数组
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->next;
j++;
}
s = (LinkList)malloc(sizeof(ListNode));
s->data = d;
s->next = p->next;
p->next = s;
return 1;
}int ListDelete(LinkList* L, int i)
{
LinkList 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->next;
j++;
}
q = p->next;
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;
free(q);
return 1;
}int GetElem(LinkList L, int i, DataType* d)
{
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("%5s", d.num);
printf("\n输入姓名:");
scanf("%9s", d.name);
printf("\n输入性别:");
scanf("%3s", d.sex);
printf("\n输入电话:");
scanf("%13s", d.phone);
printf("\n输入地址:");
scanf("%31s", 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("系统已退出。");
break;
default:
printf("输入错误,请重新输入");
goto p;
}return 0;
}
通讯录管理系统就到此结束啦,大家赶紧试试吧!如果遇到C语言/C++学习问题无法解决,可以来我下方粉丝群交流提问!
粉丝群:(同时也是更多源码素材获取通道):点击加入