C项目-客户信息管理系统

客户信息管理系统

1 项目需求说明

  • 模拟实现基于文本界面的《客户信息管理软件》
  • 该软件能够实现对客户对象的插入,修改,和删除(用数组实现),并能够打印客户明细表

2 项目界面

  • 项目采用分级菜单方式:主菜单如下

-------------------客户信息管理软件------------------

​ 1 添加客户

​ 2 修改客户

​ 3 删除客户

​ 4 客户列表

​ 5 退出

​ 请选择(1-5):

---------------------添加客户-------------------------------

姓名:张三

性别:男

年龄:30

电话:010-56253825

邮箱:zhang@abc.com

​ 请选择(1-5):

-----------------------修改客户--------------------------

请选择修改客户编号(-1退出):

姓名(张三):

性别(男):

年龄(30):

电话(010-56253825):

邮箱(zhang@ab.com):

---------------------------修改完成------------------------

--------------------------删除客户------------------------

请选择待删除客户编号(-1退出):

确认是否删除(Y/N):

--------------------------删除完成-----------------------

---------------------------------客户列表-----------------

编号 姓名 性别 年龄 电话 邮箱

1 张三 男 30 010-56253825 abc@email.com

---------------------------客户列表完成--------------------

3 项目设计-程序框架图

程序框架图:描述该项目包含多少个文件/函数,明确文件与文件之间的调用关系

4 项目功能实现-完成Customer结构体

  • 思路

    • Customer结构体含有的成员,应该从给出的界面来分析
    • 分析出有六个成员,数据类型可以分析
    • 编写一个函数,输出给出的某个Customer变量的信息
  • 代码

#include <stdio.h>

//定义结构体数据类型
struct Customer{
    int id;//编号
    int age;//年龄
    char name[10];//名字
    char gender;
    char phone[16];
    char email[20];
};
//显示一个Customer变量的信息
//这里我们接收的是结构体指针,提高效率
void getCustomerInfo(struct Customer * customer){
    printf("%d\t%s\t%c\t%d\t%s\t%s",(*customer).id,(*customer).name,(*customer).gender,(*customer).age,(*customer).phone,(*customer).email);
}

5 项目功能实现-显示主菜单和完成退出软件功能

  • 功能说明:

    • 用户打开软件,可以看到主菜单,输入5退出软件
  • 思路分析

    • 在customerManage.c中,编写一个函数mainMenu,显示菜单,在main函数中调用
  • 代码实现

//在原来的customerManage.c增加了代码
int loop=1;//控制是否退出主菜单
char key;

//显示主菜单
void mainMenu(){
    do{
        printf("-------------客户信息管理软件-------------");
        printf("		1 添加客户");
        printf("		2 修改客户");
        printf("		3 删除客户");
        printf("		4 客户列表");
        printf("		5 退出");
        printf("请选择(1-5)");
        scanf("%c",&key);
        getchar();
        
        switch(key){
            case '1':
                printf("添加客户");
                break;
            case '2':
                printf("修改客户");
                break;
            case '3':
                printf("删除客户");
                break;
            case '4':
                printf("客户列表");
                break;
            case '5':
                loop=0;
                break;
            default:
                printf("你输入有误,请重新输入");
                break;
        }
        
    }while(loop);
    printf("你退出了客户管理系统");
    getchar();
}
void main(){
    mainMenu();//调用函数,显示菜单
}

6 完成显示客户列表的功能

  • 功能说明

  • 思路分析

    • 因为需要将多个客户保存起来,因此我们需要使用结构体数组-Customer结构体数组
    • 编写一个函数listCustomers函数来显示客户信息
    • 在主菜单调用listCustomers函数即可
  • 代码实现

//在customerManage中增加代码

int customerNum=1;//表示当前有多少个客户
//客户结构体数组
struct Customer customers[100];//最多有100个客户,超过100个,可以扩展
//显示客户信息列表
void listCustomer(){
    int i=0;
    printf("--------------客户列表--------------");
    printf("编号\t姓名\t性别\t年龄\t电话\t邮箱");
    for(i=0;i<customerNum;i++){//表示客户的编号
        getCustomerInfo(&customers[i]);
    }
}
void  main(){
    //为了测试显示客户信息,我们可以先初始化一个客户,后面可以通过界面来添加
    customers[0].id=1;
    customers[0].age=10;
    strcpy(customers[0].email,"yy@sohu.com");
    customers[0].gender='f';
    strcpy(customer[0].name,"zs");
    strcpy(customers[0].phone,"110");
    
    mainMenu();//调用函数,显示菜单
}

7 添加客户的功能

  • 功能说明

  • 思路分析

    • 编写一个add函数,在该函数中完成添加客户的功能
    • 在mainMenu调用即可
  • 代码实现

//核心代码
//添加代码
void add(){
    customers[customerNum].id=customerNum+1;//编号按照自增规则
    printf("--------------添加客户-------------");
    printf("姓名:");
    scanf("%s",customers[customerNum].name);
    getchar();
    printf("性别");
    scanf("%c",&(customers[customerNum].gender));
    getchar();
    printf("年龄:");
    scanf("%d",&(cunstomers[customerNum].age));
    getchar();
    printf("电话");
    scanf("%s",customers[customerNum].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",customers[customerNum].email);
    getchar();
    printf("--------------添加完成---------------");
    customerNum++;//自增
}
//在mainMenu调用即可

8 完成删除客户的功能

  • 功能说明

  • 思路分析

    • 先编写一个函数findIndex,根据用户的id去查找该id是否存在customers结构体数组中,如果存在,就返回该ID对应的index,因为id和index不是对应的关系,如果id存在,则返回对应的index,否则返回-1
    • 编写一个函数del,该函数根据接收的index来判断是否可以删除,如果接收到的index是-1,就不删除,否则就删除该index对应的客户
    • 编写delView函数,让用户可以输入要删除的id,并再mainMenu函数中调用
  • 代码实现

//根据输入的id,返回index,如果没有,就返回-1
int findIndex(int id){
    int index=-1;
    int i;
    for(i=0;i<customerNum;i++){
        if(customers[i].id==id){
            index=i;
        }
    }
    return index;
}

//说明
//1 返回int ,如果1就说明删除成功
//2 返回0,表示删除失败
//3 接收到的是要删除的客户id
int del(int id){
    int index=findIndex(id);
    int i;
    if(index==-1){
        //说明不存在id这个客户
        return 0;
    }else {
        //说明存在,就要删除,删除的本质就是将编号为id的这个客户移出
        //customers数组从index+1位置开始,整体前移
        for(i=index+1;i<customerNum;i++){
            customers[i-1]=customers[i];
        }
        customerNum--;
        return 1;
    }
}
//显示删除客户的界面,然后调用
void delView(){
    int id=0;
    char choice=' ';
    printf("------------删除客户-----------");
    printf("请选择带删除客户编号(-1退出):");
    scanf("%d",&id);
    getchar();
    if(id==-1){
        printf("你放弃删除了");
        return ;
    }
    printf("确认是否删除(Y/N):");
    scanf("%c",&choice);
    getchar();
    if(choice=='Y'){
        if(!del(id)){
            printf("-------删除失败,id不存在");
        }else{
            printf("----------删除成功------------");
        }
    }
}
//在mainMenu调用delView函数

9 完善退出确认功能

  • 功能说明

    • 要求用户在退出时提示“确认是否退出(Y/N):”用户必须输入Y/N,否则循环提示
  • 思路分析

    • 使用do-while循环,提示用户输入Y/N,如果输入的不是Y/N,就反复提示
    • 需要在增加一个全局变量choice,表示用户的一个选择
  • 代码实现

//核心代码
//增加一个全局变量
char choice='';

do{
    printf("确认是否退出");
    scanf("%c",&choice);
    getchar();
}while(choice!='Y'&&choice!='N');
if(choice=='Y'){
    loop=0;
}//如果输入的时N,不做处理,进行显示菜单
break;

10 完成修改客户的功能

11 完成根据id查找客户的功能

  • 分析:修改客户时,需要先查找该用户,如果该用户不存在,就需要提示,并结束修改,如果找到该用户,就先显示该用户信息,然后提示输入新的信息,id不能修改

整体代码

#include<stdio.h>
#include<string.h>

//定义结构体数据类型
struct Customer{
    int id;//编号
    int age;//年龄
    char name[10];
    char gender;
    char phone[16];
    char email[20];
};
int loop=1;
char key;
int customerNum=1;
char choice='';
struct Customer customers[100];

void getCustomerInfo(struct Customer *customer){
    printf("%d\t%s\t%c\t%d\t%s",(*customer).id,(*customer).name,(*customer)gender,(*customer).age,(*customer).phone,(*customer).email);
}

void add(){
    customers[customerNum].id=customerNum+1;
    printf("姓名");
    scanf("%s",customers[customerNum].name);
    getchar();
    printf("性别:");
    scanf("%c",&(customers[customerNum].gender));
    getchar();
    printf("年龄:");
    scanf("%d",&(customers[customerNum].age));
    getchar();
    printf("电话:");
    scanf("%s",customers[customerNum].phone);
    getchar();
    printf("邮箱:");
    scanf("%s",customers[customerNum].email);
    getchar();
    printf("----------添加完成-----------");
    customNum++;
}

int findIndex(int id){
    int index=-1;
    int i;
    for(i=0;i<customerNum;i++){
        if(customers[i].id==id){
            index=i;
        }
    }
    return index;
}

int del(int id){
    int index=findIndex(id);
    int i;
    if(index==-1){
        return 0;
    }else{
        for(i=index+1;i<customerNum;i++){
            customers[i-1]=customers[i];
        }
        customerNum--;
        return 1;
    }
    
}
void delView(){
    int id=0;
    char choice='0';
    printf("--------------删除客户------------");
    printf("请选择带删除客户编号(-1退出)");
    scanf("%d",&id);
    getchar();
    if(id==-1){
        printf("-------你放弃删除了------------");
        return;
    }
    printf("确认是否删除(Y/N)");
    scanf("%c",&choice);
    getchar();
    if(choice=='Y'){
        if(!(del(id))){
            printf("-------删除失败,id不存在----------");
        }else{
            printf("-----------删除成功-------------");
        }
    }
}

//显示客户信息列表
void listCustomers(){
    int i=0;
    printf("---------------客户列表---------------");
    printf("编号\姓名\t性别\t年龄\t电话\t邮箱");
    for(i=0;i<customerNum;i++){
        getCustomerInfo(&customers[i]);
    }
}
//显示主菜单
void mainMenu(){
    do{
        printf("-------客户信息管理软件--------");
        printf("		1 添加客户");
        printf("		2 修改客户");
        printf("		3 删除客户");
        printf("		4 客户列表");
        printf("		5 退出");
        printf("请选择(1-5)");
        scanf("%c",&key);
        getchar();
        switch(key){
            case '1':
                add();
                break;
            case '2':
                printf("修改客户");
                break;
            case '3':
                delView();
                break;
            case '4':
                listCustomers();
                break;
            case '5':
                do{
                    printf("确认是否退出(Y/N)");
                    scanf("%c",&choice);
                    getchar();
                }while(choice!='Y'&&choice!='N');
                if(choice=='Y'){
                    loop=0;
                }
                break;
            default:
                printf("你输入有误,请重新输入");
                break;
        }
    }while(loop);
    printf("你退出了客户管理系统");
    getchar();
}
void main(){
    customers[0].id=1;
    customers[0].age=10;
    strcpy(customers[0].email,"yy@sohu.com");
    customers[0].gender='f';
    strcpy(customers[0].name,"zs");
    strcpy(customers[0].phone,"110");
    
    mainMenu();
}
posted @ 2021-02-20 23:13  mx_info  阅读(391)  评论(0)    收藏  举报