首页 > 其他分享 >C语言----使用链表实现的客户管理系统

C语言----使用链表实现的客户管理系统

时间:2024-09-13 09:05:02浏览次数:18  
标签:---- people scanf next 链表 printf C语言 输入 getchar

实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。
学完了C语言和链表没事情干拿出来写一写,检测下学习成果

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
    int num;
    char name[20];
    char gender;
    char year;
    char phone[14];
    char email[30];
    struct Node *next;
} people;
typedef struct Head // 头指针
{
    people *next;
} list;
void Initlinkedlist(list *p) // 初始化链表
{
    p->next = NULL;
}
void AddPeoplelinkedlist(list *head) // 添加成员,尾插
{
    printf("\n--------------添加成员--------------");
    people *p = head->next;
    people *q;
    if (p == NULL)
    {
        q = (people *)malloc(sizeof(people));
        if (q == NULL)
        {
            printf("err");
            exit(0);
        }
        printf("\n请输入姓名:");
        getchar();
        scanf("%s", q->name);
        printf("\n请输入性别:");
        getchar();
        scanf("%c", &q->gender);
        printf("\n请输入年龄:");
        getchar();
        scanf("%c", &q->year);
        printf("\n请输入电话号码:");
        getchar();
        scanf("%s", q->phone);
        printf("\n请输入电子邮箱:");
        getchar();
        scanf("%s", q->email);

        q->num = 1;
        head->next = q;
        q->next = NULL;
    }
    else
    {
        q = (people *)malloc(sizeof(people));
        if (q == NULL)
        {
            printf("err");
            exit(0);
        }
        printf("\n请输入姓名:");
        getchar();
        scanf("%s", &q->name);
        printf("\n请输入性别:");
        getchar();
        scanf("%c", &q->gender);
        printf("\n请输入年龄:");
        getchar();
        scanf("%c", &q->year);
        printf("\n请输入电话号码:");
        getchar();
        scanf("%s", &q->phone);
        printf("\n请输入电子邮箱:");
        getchar();
        scanf("%s", &q->email);
        while (p->next != NULL)
        {
            p = p->next;
        }
        q->num = p->num + 1;
        p->next = q;
        q->next = NULL;
    }
}
void TraverseLinkedList(list *head) // 遍历打印
{
    people *q;
    q = head->next;
    printf("\n--------------客户列表--------------");
    printf("\n编号\t\t姓名\t\t性别\t\t年龄\t\t电话\t\t邮箱");
    while (q != NULL)
    {

        printf("\n%d", q->num);
        printf("\t\t%s", q->name);
        printf("\t\t%c", q->gender);
        printf("\t\t%c", q->year);
        printf("\t\t%s", q->phone);
        printf("\t\t%s", q->email);
        q = q->next;
    }
}
void deleteLinkedList(int n, list *q) // 删除元素
{
    people *t, *p;
    int data;
    p = q->next;
    if (n > 1)
    {
        for (; (p->next)->num != n;)
        {
            p = p->next;
        }
        t = p->next;
        p->next = t->next;
        free(t);
        printf("删除成功");
    }
    if (n == 1)
    {

        t = q->next;
        q->next = t->next;
        free(t);
        printf("删除成功");
    }
}
void changeLinkedlist(int n, list *q) // 修改元素
{
    people *t, *p;
    int data;
    p = q->next;
    if (n > 1)
    {
        for (; (p->next)->num != n;)
        {
            p = p->next;
        }
        p = p->next;
        printf("\n请输入姓名:");
        getchar();
        scanf("%s", p->name);
        printf("\n请输入性别:");
        getchar();
        scanf("%c", &p->gender);
        printf("\n请输入年龄:");
        getchar();
        scanf("%c", &p->year);
        printf("\n请输入电话号码:");
        getchar();
        scanf("%s", p->phone);
        printf("\n请输入电子邮箱:");
        getchar();
        scanf("%s", p->email);
        printf("修改成功");
    }
    if (n == 1)
    {
        printf("\n请输入姓名:");
        getchar();
        scanf("%s", p->name);
        printf("\n请输入性别:");
        getchar();
        scanf("%c", &p->gender);
        printf("\n请输入年龄:");
        getchar();
        scanf("%c", &p->year);
        printf("\n请输入电话号码:");
        getchar();
        scanf("%s", p->phone);
        printf("\n请输入电子邮箱:");
        getchar();
        scanf("%s", p->email);
        printf("修改成功");
    }
}
void menu(list *customer) // 菜单显示
{
    while (1)
    {
        int i, n;
        char flag;
        printf("\n--------------客户信息管理软件--------------");
        printf("\n\t\t1添加客户");
        printf("\n\t\t2修改客户");
        printf("\n\t\t3删除客户");
        printf("\n\t\t4客户列表");
        printf("\n\t\t5退出\n请输入1-5:");
        scanf("%d", &i);
        switch (i)
        {
        case 1:
            AddPeoplelinkedlist(customer);
            break;
        case 2:
            printf("\n输入要修改的客户的编号(-1退出):");
            scanf("%d", &n);
            if (n == -1)
            {
                break;
            }
            else
            {
                changeLinkedlist(n, customer);
            }
            break;
        case 3:
            printf("\n输入要删除的客户的编号(-1退出):");
            scanf("%d", &n);
            if (n == -1)
            {
                break;
            }
            else
            {
                deleteLinkedList(n, customer);
            }
            break;
        case 4:
            TraverseLinkedList(customer);
            break;
        case 5:
            printf("是否确认要退出(Y或N): ");
            getchar(); // 过滤回车
            scanf("%c", &flag);
            if (flag == 'Y' || flag == 'y')
            {
                printf("已退出");
                exit(0);
            }
            if (flag == 'N' || flag == 'n')
            {
                break;
            }
        default:
            printf("请输入1-5的值!");
            break;
        }
    }
}
void main()
{
    list *customer;
    customer->next = NULL;
    Initlinkedlist(customer);
    menu(customer);
}

标签:----,people,scanf,next,链表,printf,C语言,输入,getchar
From: https://www.cnblogs.com/akash1/p/18411530

相关文章

  • depends.exe在x64下使用卡的问题
    Ifdepends.exe(DependencyWalker)HangsDependencyWalker isprobablythebestutilthatbuildsahierarchicaltreediagramofalldependentmodulesofwindows .exe or .dll files.Itcanbeusefulfordebugging,troubleshooting,oroptimizingyourappl......
  • 分库分表之后,id 主键如何处理?
    问:分库分表之后,id主键如何处理? 其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持。所以这都是你实际生产环境中必须考虑的问题。 基于数据库的实现方案 数据库自增id......
  • 解决PbootCMS上传文件大小限制
    你可以配置PHP和Web服务器以支持大文件上传。具体步骤如下:打开 php.ini 文件并配置基本参数:file_uploads=onupload_tmp_dir=/tmpupload_max_filesize=32Mpost_max_size=32M进一步配置其他参数:max_execution_time=600max_input_time=600memory_l......
  • 开单非必填字段,如何在单据保存的时候设置成必填
    开单非必填字段,如何在单据保存的时候设置成必填比如:采购订单的到货时间设置为必填1、启用这张单表体的一个自定义字段:启用、必填、只读。自定义显示名称改成:到货时间  2、这张单据的这个自定义字段,设置设置公式:zte( 【表头.到货时间】) 3、效果如下: ......
  • Langchain入门概述
    1. Langchain概述LangChain是一个强大的框架,帮助开发人员使用语言模型构建端到端的应用程序它会提供了一套工具、组件和接口,可简化创建由大型语言模型(LLM)和聊天模型提供支持的应用程序的过程  主要价值在:组件化:为使用语言模型提供抽象层,以及每个抽象层的一组实现。......
  • 最全元器件焊接指南,从小白到精通!
    如果你觉得焊接是一件轻松的事,那我可得提醒你,焊接不仅需要技巧,还需要大量的练习。每一块完美的焊点背后都是数不清的尝试和经验积累!焊接贴片元器件的心得最近累积了不少项目(坑)在焊接过程中,本来以为自己焊接技术还不错(bushi),但实际操作中发现自己还有很多需要提高的地方。......