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();
}

浙公网安备 33010602011771号