首页 > 其他分享 >嵌入式软件--C语言项目 客户信息管理系统

嵌入式软件--C语言项目 客户信息管理系统

时间:2024-08-13 18:55:45浏览次数:12  
标签:arr -- scanf counter C语言 int 嵌入式软件 printf id

考虑到目前C语言的学习是以为嵌入式做基础而进行的,项目所使用到的语法和结构都是嵌入式常用到的,这是较为特殊和针对性的项目,不与其他同名项目作比较。若有参考着谨慎借鉴。

实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。

1.需求说明

(1)主菜单

进入系统,展示主菜单,输入各功能对应的数字编号选择要进行的操作,如下图:

(2)添加客户

输入1,进入“添加客户”界面,需要填写姓名、性别、年龄、电话、邮箱这些信息,如下图:

(3)显示客户列表

输入4,进入“客户列表”,显示客户列表信息,如下图:

(4)修改客户

输入 2,进入“修改客户”,首先要输入要修改客户的编号,然后填写信息,如下图:

(5)删除客户

输入 3,进入“删除客户”,输入要删除客户的编号,再确认是否删除,如下图:

(6)退出

输出5,经过确认后退出系统,如下图:

2.过程分析:

(1)先打印主菜单

#include <stdio.h>

int main()
{
    printf("\n----------客户信息管理软件------------");
    printf("\n          1.添 加 客 户");
    printf("\n          2.修 改 客 户");
    printf("\n          3.删 除 客 户");
    printf("\n          4.客 户 列 表");
    printf("\n          5.退       出");
    printf("\n          请选择(1-5):");
    return 0;
}

(2)再附加不停选择的功能

#include <stdio.h>

int main()
{
while(1)//死循环
{
    printf("\n----------客户信息管理软件------------");
    printf("\n          1.添 加 客 户");
    printf("\n          2.修 改 客 户");
    printf("\n          3.删 除 客 户");
    printf("\n          4.客 户 列 表");
    printf("\n          5.退       出");
    printf("\n          请选择(1-5):");
    int n;
    scanf("%d",&n);
    switch(n)
    {
        case 1:
        printf("请添加客户。");
        break;
        case 2:
        printf("请修改客户。");
        break;
        case 3:
        printf("请删除客户。");
        break;
        case 4:
        printf("显示客户列表。");
        break;
        case 5:
        printf("退出!");
        break;
        default:
        printf("请输入正确的数字!");
    }
}
    return 0;
}

(3)实现条件退出的功能

需要做到,输入字符‘N’能返回选择菜单,输入“Y”能够退出,输入其他字符,重新进行退出确认!

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
   int limit_length=100;
  
void ke()
{
    //先判断能不能添加
    if(counter>limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
}

    
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(4)添加客户功能的实现

如果主函数中代码过多,看起来不方便,可以使用函数进行封装。函数的声明放在主函数外部,全局可用。

#include <stdio.h>
void ke()
{
    static int counter = 0; // 计数器
    typedef struct
    {
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
    Hu arr[99];//定义结构体数组,最多100个客户
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
    counter++;//自增,必须的,每一次加一,就有一个用户被存入。
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
           
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
            printf("显示客户列表。");
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(5)显示列表功能,将输入的数据打印。

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
  
void ke()
{
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
}

    
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            printf("请删除客户。");
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(6)删除功能的实现

C语言无法对数组进行直接操作,只能通过角标进行。通过让后边的元素数据覆盖前方要删除的数据,在让编号减一,做到删除。

#include <stdio.h>
int counter = 0; // 计数器
 typedef struct
    {
        int id;
        char name[30];
        char sex;
        int age;
        char phone[30];
        char email[30];
    }Hu;
   Hu arr[99];//定义结构体数组,最多100个客户
   int limit_length=99;
int deletebyld(int id)//返回值1代表成功,0代表失败
{
    if(id<1||id>counter)
    {
        printf("请您输入正确的编号!");
        return 0;
    }
    int index=id-1;//删掉客户的下角标
    for(int i=index;i<counter;i++)
    {
        arr[i]=arr[i+1];//后者覆盖前者
        arr[i].id=arr[i].id-1;
    }
    counter--;
    return 1;
}
void ke()
{
    //先判断能不能添加
    if(counter>limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s",arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c",&arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d",&arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s",arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
     arr[counter].id=counter+1;
     counter++;//自增,必须的,每一次加一,就有一个用户被存入
} 
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for(int i=0;i<counter;i++){
     printf("\n%d\t%s\t%c\t%d\t%s\t%s\t",arr[i].id,arr[i].name,arr[i].sex,arr[i].age,arr[i].phone,arr[i].email);
    }
    
}
void delete()
{
        int id;//保存用户输入的编号
        char choose;
        printf("\n--------------删除客户---------------\n");
        printf("请选择待删除客户编号(-1退出):\n");
        scanf("%d",&id);//输入编号
        if(id==-1)//不想退出,就输入-1
        {
            printf("退出!\n");
            return;//不返回,终止
        }
        printf("确认是否删除(Y/N)\n");
        getchar();
        scanf("%c",&choose);//请做选择
        if(choose=='Y')
        {
              if(deletebyld(id))//删除成功与否的函数进行封装,返回值1和0代表着可行与不可行。
              {
                printf("\n--------------------删除成功-------------------\n");
              }else{
                printf("\n--------------------删除失败-------------------\n");
              }
        }
    
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            printf("请修改客户。");
            break;
        case 3:
            delete();
            break;
        case 4:
           looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

(7)修改功能的实现

这里的功能需要显示原来的数据,输入的数据更新掉原来的数据。在此基础上增设一个功能,如果输入的是回车符号,表示原来的数据不做更改,继续改下一个数据。

#include <stdio.h>
int counter = 0; // 计数器
typedef struct
{
    int id;
    char name[30];
    char sex;
    int age;
    char phone[30];
    char email[30];
} Hu;
Hu arr[99]; // 定义结构体数组,最多100个客户
int limit_length = 99;
int update(int id)
{
    // 判断id是否合法
    if (id < 1 || id > counter)
    {
        printf("请输入正确的编号。");
        return 0;
    }
    int index = id - 1;
    char buffer[20]; // 缓冲区
    printf("\n姓名:(%s)", arr[index].name);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].name);
    }
    getchar();
    printf("\n性别:(%c)", arr[index].sex);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%c", &arr[index].sex);
    }
    printf("\n年龄:(%d)", arr[index].age);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%d", &arr[index].age);
    }
    printf("\n电话:(%s)", arr[index].phone);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].phone);
    }
    printf("\n邮箱:(%s)", arr[index].email);
    fgets(buffer, sizeof buffer, stdin);
    if (buffer[0] != '\n')
    {
        sscanf(buffer, "%s", arr[index].email);
    }
    return 1;
}
void updatekehu()
{
    printf("\n-------------------修改客户-----------------------\n");
    printf("请选择输入的客户编号(-1退出):");
    int id;
    scanf("%d", &id);
    if (id == -1)
    {
        printf("退出!");
        return;
    }
    if (update(id))
    {

        printf("\n--------------------修改成功----------------------\n");
    }
    else
    {
        printf("\n---------------------修改失败---------------------\n");
    }
}
int deletebyld(int id) // 返回值1代表成功,0代表失败
{
    if (id < 1 || id > counter)
    {
        printf("请您输入正确的编号!");
        return 0;
    }
    int index = id - 1; // 删掉客户的下角标
    for (int i = index; i < counter; i++)
    {
        arr[i] = arr[i + 1]; // 后者覆盖前者
        arr[i].id = arr[i].id - 1;
    }
    counter--;
    return 1;
}
void ke()
{
    // 先判断能不能添加
    if (counter > limit_length)
    {
        printf("会员已到上限!");
    }
    printf("\n--------------------------添加客户----------------------------\n");
    printf("姓名:");
    scanf("%s", arr[counter].name);
    getchar();
    printf("性别:");
    scanf("%c", &arr[counter].sex);
    printf("年龄:");
    getchar();
    scanf("%d", &arr[counter].age);
    getchar();
    printf("电话:");
    scanf("%s", arr[counter].phone);
    getchar();
    printf("邮箱:");
    scanf("%s", arr[counter].email);
    getchar();
    printf("\n--------------------------添加完成----------------------------\n");
    arr[counter].id = counter + 1;
    counter++; // 自增,必须的,每一次加一,就有一个用户被存入
}
void looklist()
{
    printf("\n--------------------------客户列表----------------------------\n");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱\t");
    for (int i = 0; i < counter; i++)
    {
        printf("\n%d\t%s\t%c\t%d\t%s\t%s\t", arr[i].id, arr[i].name, arr[i].sex, arr[i].age, arr[i].phone, arr[i].email);
    }
}
void delete()
{
    int id; // 保存用户输入的编号
    char choose;
    printf("\n--------------删除客户---------------\n");
    printf("请选择待删除客户编号(-1退出):\n");
    scanf("%d", &id); // 输入编号
    if (id == -1)     // 不想退出,就输入-1
    {
        printf("退出!\n");
        return; // 不返回,终止
    }
    printf("确认是否删除(Y/N)\n");
    getchar();
    scanf("%c", &choose); // 请做选择
    if (choose == 'Y')
    {
        if (deletebyld(id)) // 删除成功与否的函数进行封装,返回值1和0代表着可行与不可行。
        {
            printf("\n--------------------删除成功-------------------\n");
        }
        else
        {
            printf("\n--------------------删除失败-------------------\n");
        }
    }
}
int main()
{
    int loop = 1;
    while (loop) // 死循环
    {
        printf("\n----------客户信息管理软件------------");
        printf("\n          1.添 加 客 户");
        printf("\n          2.修 改 客 户");
        printf("\n          3.删 除 客 户");
        printf("\n          4.客 户 列 表");
        printf("\n          5.退       出");
        printf("\n          请选择(1-5):");
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 1:
            ke();
            break;
        case 2:
            // 开始定义修改客户数据的函数
            updatekehu();
            break;
        case 3:
            delete ();
            break;
        case 4:
            looklist();
            break;
        case 5:
            char ch;

            do
            {
                printf("确认是否退出(Y/N):");
                getchar();
                scanf("%c", &ch);
            } while (ch != 'Y' && ch != 'N');
            if (ch == 'Y')
            {
                loop = 0; // 循环终止
                printf("你退出了客户管理系统。");
            }
            break;
        default:
            printf("请输入正确的数字!");
        }
    }
    return 0;
}

至此所有功能实现,客户信息管理系统(C语言)完成!

标签:arr,--,scanf,counter,C语言,int,嵌入式软件,printf,id
From: https://blog.csdn.net/zx18831955136/article/details/140998621

相关文章

  • Uptime kuma | 一个美观的监控程序
    UptimeKuma是一个开源的、自托管的监控工具,主要用于监测网站、应用程序或服务的在线状态和健康状况。它具有易于使用、多功能性等功能,截止今日,它在Github的star已有54.3kDocker部署首先,为了连接到终端,我们需要一台服务器,这里我们使用雨云的云服务器部署。当用SSH连接到......
  • 【自用10.2】C++结构体-指向结构体的指针&使用结构体传递值
    指向结构体的指针#include<stdio.h>#include<stdlib.h>#include<string.h>struct_friend{charname[32];charsex;//m-男f-女intage;};intmain(void){struct_friendgirl={"小珑",'f',18};stru......
  • 【自用11.】C++枚举
    概念当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 枚举类型的定义enum枚举名{枚举元素1,枚举元素2,……};//例如e......
  • 《SQL 中复杂条件多表关联查询的性能优化秘籍》
    在当今数据驱动的时代,数据库的操作和查询性能对于企业的业务运营至关重要。当面对复杂的业务逻辑和大规模的数据时,实现复杂条件的多表关联查询并确保高效的性能成为了数据库开发者和管理员面临的重要挑战。多表关联查询是在关系型数据库中获取全面和准确数据的常见操作。然......
  • 《优化 SQL 索引策略:提升大规模数据检索效率的关键》
    在当今数字化时代,数据量呈爆炸式增长,企业和组织面临着处理大规模数据的巨大挑战。对于数据库管理员和开发者来说,如何在大规模数据环境中优化SQL中的索引策略,以减少数据检索时间,成为了至关重要的任务。索引是数据库中用于加速数据检索的重要结构。然而,在大规模数据场景下,......
  • 【项目实战】基于Python的网络小说榜单信息爬取与数据可视化系统
    注意:该项目只展示部分功能,如需了解,文末咨询即可。本文目录1.开发环境2系统设计2.1设计背景2.2设计内容3系统页面展示3.1用户页面3.2管理员页面3.3功能展示视频4更多推荐5部分功能代码5.1爬虫代码5.2小说代码1.开发环境开发语言:Python技术框架:Fla......
  • SpringBoot接收参数的几种常用方式
    目录1、路径变量(PathVariables)1.1、接口定义1.2、APIPost测试1.3、详细解释1.4、不写括号里的id的影响1.4.1、情况11.4.2、情况21.4.3、情况3(错误情况)2、请求参数(RequestParameters)2.1、接口定义2.2、APIPost测试2.3、详细解释2.4、`@RequestParam`应用举......
  • iMessage群发 苹果推信真的很好用
    iMessage是苹果设备(iPad、iPhone、iPodtouch)自带的免费信息发送应用。它的信息通过网络发送,不同于运营商短信。目前iMessage日活跃用户1.9亿,日发送约20亿条。和短信分不清不是原因,甚至苹果本来就不希望大家区分imessage和短信因为在很多国家,包括我现在所处的澳大利亚,短信和......
  • javase-day06
    aFile_FileDemo01packagecom.se.aFile;/***绝对路径与相对路径的说明:*1.当前工作空间是/home/user/michael/**需求1:访问/home/user/michael/file1.txt*相对路径:file1.txt*绝对路径:/home/user/michael/file1.txt**需求2:访问/home/user/mi......
  • windows核心编程 第三章,跨越进程边界共享内核对象,对象句柄的继承性,改变句柄的标志,命名
    windows核心编程3.3跨越进程边界共享内核对象3.3.1对象句柄的继承性3.3.2改变句柄的标志3.3.3命名对象3.3.4终端服务器的名字空间3.3.5复制对象句柄文章目录windows核心编程3.3跨越进程边界共享内核对象3.3.1对象句柄的继承性3.3.2改变句柄的标志3.3.3命名......