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

考虑到目前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语言)完成!

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值