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

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

时间:2024-09-13 09:05:02浏览次数:1  
标签:---- 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......
  • 电商API接口安全:构建稳固的数字防线
    电子商务的蓬勃发展带来了前所未有的便利,同时也带来了新的安全挑战。API接口作为电商系统的核心组件,其安全性直接关系到企业的数据安全和业务连续性。因此,评估和加固电商API接口的安全性变得尤为重要。电商API接口安全的重要性电商API接口安全不仅涉及到数据的保密性、完整性和......
  • 解决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......
  • PbootCMS英文站搜索页包屑中文修改
    通过修改 {pboot:position} 标签的参数,可以轻松地将面包屑中的中文文本修改为英文,并自定义分隔符和分割图标。具体步骤如下:打开模板文件:打开需要修改的模板文件,例如 search.php。找到面包屑标签:找到 {pboot:position} 标签。修改标签参数:修改分隔符:separato......
  • 开单非必填字段,如何在单据保存的时候设置成必填
    开单非必填字段,如何在单据保存的时候设置成必填比如:采购订单的到货时间设置为必填1、启用这张单表体的一个自定义字段:启用、必填、只读。自定义显示名称改成:到货时间  2、这张单据的这个自定义字段,设置设置公式:zte( 【表头.到货时间】) 3、效果如下: ......
  • 未检测到您服务器环境的sqlite3数据库扩展,请检查php.ini中是否已经开启该扩展
    当你遇到“未检测到您服务器环境的sqlite3数据库扩展,请检查php.ini中是否已经开启该扩展”的提示时,这表明PHP当前的安装环境中没有启用SQLite3支持。SQLite3是一个轻量级的嵌入式数据库引擎,它通常用于不需要完整服务器端数据库解决方案的应用场景。解决方法1.检查 ph......
  • 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
    昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所有的表通过showtables能看到,但是select的过程中却报“Tabledoesn'texist”。于是,建议他试试可传输表空间。同......
  • Langchain入门概述
    1. Langchain概述LangChain是一个强大的框架,帮助开发人员使用语言模型构建端到端的应用程序它会提供了一套工具、组件和接口,可简化创建由大型语言模型(LLM)和聊天模型提供支持的应用程序的过程  主要价值在:组件化:为使用语言模型提供抽象层,以及每个抽象层的一组实现。......
  • 最全元器件焊接指南,从小白到精通!
    如果你觉得焊接是一件轻松的事,那我可得提醒你,焊接不仅需要技巧,还需要大量的练习。每一块完美的焊点背后都是数不清的尝试和经验积累!焊接贴片元器件的心得最近累积了不少项目(坑)在焊接过程中,本来以为自己焊接技术还不错(bushi),但实际操作中发现自己还有很多需要提高的地方。......