通讯录管理系统

数据结构课设:简单的通讯录系统设计

这两天数据结构课设,本人选题为:简单的通讯录系统设计,选题非常简单,但在做的过程中深感基础不牢,
链表的基本操作也不是太熟悉。不过还是终于完成了, 参考了这位前辈的博客,链接在此

#include <stdio.h>
#include <stdlib.h>
typedef struct NODE      //具体个人信息
{
    char bianhao[10];
    char name[10];
    char phone[15];
} Datatype;
typedef struct node     //节点
{
    Datatype d;
    struct node *next;
} Linknode;
typedef Linknode *LinkList;
void creat(LinkList &l, int m)      //创建链表
{
    LinkList r, s;
    Datatype dk;
    l = (LinkList)malloc(sizeof(Linknode));
    l->next = NULL;
    r = l;
    for (int i = 0; i < m; i++)
    {
        s = (LinkList)malloc(sizeof(Linknode));
        printf("请输入你第%d位的信息:\n", i + 1);
        printf("请依次输入编号、姓名、电话:\n");
        scanf("%s", dk.bianhao);
        scanf("%s", dk.name);
        scanf("%s", dk.phone);
        s->d = dk;
        s->next = NULL;
        r->next = s;
        r = s;
    }
}
int Listlength(LinkList l)      //测链表长度
{
    int j = 0;
    LinkList p = l->next;
    while (p)
    {
        j++;
        p = p->next;
    }
    return j;
}
int LinkInsert(LinkList &l, int i, Datatype d)     //插入节点信息
{
    LinkList p, s;
    int j = 1;
    p = l->next;
    int length = Listlength(l);
    if (!p || i > length + 1)
        return 0;
    while (p && j < i - 1)
    {
        p = p->next;
        j++;
    }
    s = (LinkList)malloc(sizeof(Linknode));
    s->d = d;
    s->next = p->next;
    p->next = s;
    return 1;
}
int LinkDelete(LinkList &l, int i)    //删除节点信息
{
    LinkList p, q;
    int j = 0;
    p = l;
    int length = Listlength(l);
    if (!p || i > length)
        return 0;
    while (p && j < i - 1)
    {
        p = p->next;
        j++;
    }
    q = p->next;
    printf("要删除人的具体信息为:\n");
    printf("编号:%s\t姓名:%s\t电话:%s\n", q->d.bianhao, q->d.name, q->d.phone);
    p->next = q->next;
    return 1;
}
int Getlem(LinkList l, int i)         //查询某个人的信息
{
    int j = 1;
    LinkList p = l->next;
    int length = Listlength(l);
    if (!p || i > length)
        return 0;
    while (j < i)
    {
        p = p->next;
        j++;
    }
    printf("要查人的具体信息为:\n");
    printf("编号:%s\t姓名:%s\t电话:%s\n", p->d.bianhao, p->d.name, p->d.phone);
    return 1;
}
void print(LinkList l)           //输出所有信息
{
    LinkList p = l->next;
    while (p)
    {
        printf("编号:%s\t姓名:%s\t电话:%s\n", p->d.bianhao, p->d.name, p->d.phone);
        p = p->next;
    }
}

int main()
{
    LinkList l;
    int n, locate, m;
    Datatype dk;
    int w;
    printf("欢迎进入通讯录管理系统!\n");
    printf("************建立通讯录请按1************\n");
    printf("************插入信息请按2************\n");
    printf("************查询信息请按3************\n");
    printf("************删除信息请按4************\n");
    printf("************输出信息请按5************\n");
    printf("************退出系统请按0************\n");
p:
    scanf("%d", &n);
    switch (n)
    {
    case /* constant-expression */ 1:
        /* code */
        printf("请问你要建立有多少个人的通讯录\n");
        scanf("%d", &m);
        creat(l, m);
        printf("请问你接下来要进行的操作是\n");
        goto p;
    case 2:
        printf("请问你要在第几位插入:\n");
        scanf("%d", &locate);
        printf("请输入插入人的具体信息:\n");
        printf("依次输入编号、姓名、电话:\n");
        scanf("%s", dk.bianhao);
        scanf("%s", dk.name);
        scanf("%s", dk.phone);
        LinkInsert(l, locate, dk);
        printf("请问你接下来要进行的操作是\n");
        goto p;
    case 3:
        printf("请问你要查询第几位的信息\n");
        scanf("%d", &locate);
        Getlem(l, locate);
        printf("请问你接下来要进行的操作是\n");
        goto p;
    case 4:
        printf("请问你要删除第几位的信息\n");
        scanf("%d", &locate);
        LinkDelete(l, locate);
        printf("请问你接下来要进行的操作是\n");
        goto p;
    case 5:
        print(l);
        printf("请问你接下来要进行的操作是\n");
        goto p;
    case 0:
        printf("成功退出系统!\n");
        exit(0);
    default:
        printf("操作错误,请重新输入!\n");
        goto p;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冰冰web

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

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

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

打赏作者

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

抵扣说明:

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

余额充值