【C/C++】课程设计:通讯录管理系统源码,C语言链表实现

大家好呀,亲爱的小伙伴们!你们今天有在编写代码吗?

如果有熟悉的小伙伴看到我,就会知道又到了学习源码项目的好时机了!没错,今天要分享的同样是一个经典的管理系统项目:通信录管理系统!我们一起来探索一下吧!

涉及知识领域: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++学习问题无法解决,可以来我下方粉丝群交流提问!

粉丝群:(同时也是更多源码素材获取通道):点击加入

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C语言小火车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值