一:项目------客户信息管理系统
实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。
(1)主菜单
进入系统,展示主菜单,输入各功能对应的数字编号选择要进行的操作,如下图:
(2)添加客户
输入1,进入"添加客户"界面,需要填写姓名、性别、年龄、电话、邮箱这些信息,如下图:
(3)显示客户列表
输入4,进入"客户列表",显示客户列表信息,如下图 :
(4)修改客户
输入 2,进入"修改客户",首先要输入要修改客户的编号,然后填写信息,如下图:
(5)删除客户
输入 3,进入"删除客户",输入要删除客户的编号,再确认是否删除,如下图:
(6)退出
输出5,经过确认后退出系统,如下图:
二:代码实现
写法1
cpp
#include <stdio.h>
#define TOTAL 100
// 定义客户信息相关结构
typedef struct
{
// 成员需要有哪些
int id; // 客户编号,从1开始递增
char name[20]; // 客户名字
char sex; // m==代表男士 g代表女生
int age; // 客户的年龄
char phone[20]; // 客户的手机号
char email[20]; // 客户邮箱
} Custom;
// 结构体类型的数组,保存客户信息
Custom customArray[TOTAL];
// 数组的最大角标
int limit_length = 99;
// 定义记录已经添加客户个数
int counter = 0;
int update(int id)
{
// 判断编号是否合法
if (id < 1 || id > counter)
{
printf("\n请输入合法的编号");
return 0;
}
// 修改的编号是合法的
int index = id - 1;
// 缓冲区数组
char buffer[20];
getchar();
printf("\n姓名(%s):", customArray[index].name);
// 键盘输入的数据存储到缓冲区进行判断
fgets(buffer, sizeof buffer, stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customArray[index].name);
}
printf("\n性别(%c):", customArray[index].sex);
// 键盘输入的数据存储到缓冲区进行判断
fgets(buffer, sizeof buffer, stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%c", &customArray[index].sex);
}
printf("\n年龄(%d):", customArray[index].age);
// 键盘输入的数据存储到缓冲区进行判断
fgets(buffer, sizeof buffer, stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%d", &customArray[index].age);
}
printf("\n电话(%s):", customArray[index].phone);
// 键盘输入的数据存储到缓冲区进行判断
fgets(buffer, sizeof buffer, stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customArray[index].phone);
}
printf("\n邮箱(%s):", customArray[index].email);
// 键盘输入的数据存储到缓冲区进行判断
fgets(buffer, sizeof buffer, stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customArray[index].email);
}
// 修改成功
return 1;
}
// 更新客户信息界面
void updateCustom()
{
// 存储修改客户的编号
int id;
// 修改客户信息
printf("\n**********修改客户**********");
printf("\n请您输入修改客户的编号(-1退出):");
scanf("%d", &id);
// 退出
if (id == -1)
{
printf("\n退出");
return;
}
// 判断更新成功还是失败
if (update(id))
{
printf("\n更新成功");
}
else
{
printf("\n更新失败");
}
}
// 返回数值:1代表删除成功 0删除失败
// 形参ID是客户的编码,删除需要条件
int DeleteCustomById(int id)
{
// 条件判断:删除客户ID合法的
if (id < 1 || id > counter)
{
printf("\n请您输入正确编号");
// 返回0代表删除失败
return 0;
}
/**********************干掉客户***************************/
// 删除掉客户下角标
int index = id - 1;
for (int i = index; i < counter; i++)
{
// 后者覆盖前者
customArray[i] = customArray[i + 1];
// 每次后者前移动的时候id-1
customArray[i].id -= 1;
}
// 客户的人数减少一个
counter--;
return 1;
}
// 删除客户
void deleteCustom()
{
int id;
char choose;
// 保存用户输入的编号
// 删除客户提示文字
printf("\n**********删除客户**********");
printf("\n请您输入要删除客户的编号(-1退出):");
scanf("%d", &id);
// 进行判断:万一半路输入-1,人家不想删除了,退出即可!!!
if (id == -1)
{
printf("\n退出!");
return;
}
// 提示:让用户输入Y/N确定删除操作
printf("\n确定是否删除(Y/N):");
// 换行取出(缓冲区)
getchar();
scanf("%c", &choose);
// 进行判断:用户输入进来choose==Y,进行删除客户操作
if (choose == 'Y')
{
// 删除客户的业务---单独封装一个函数
if (DeleteCustomById(id))
{
// 删除成功
printf("\n删除成功");
}
else
{
// 删除失败
printf("\n删除失败");
}
}
}
// 查看客户列表
void lookList()
{
printf("\n**********客户列表**********");
printf("\n编号\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", customArray[i].id, customArray[i].name, customArray[i].sex, customArray[i].age, customArray[i].phone, customArray[i].email);
}
}
// 添加客户
void addCustom()
{
// 先判断还能不能再添加
if (counter > limit_length)
{
printf("\n会员已经达到上限!");
// 代表后面的语句不在执行
return;
}
printf("\n**********添加客户**********");
// 客户编号+1,后期递增+1
customArray[counter].id = counter + 1;
// 姓名
printf("\n姓名:");
scanf("%s", customArray[counter].name);
// 性别
printf("\n性别:");
getchar();
scanf("%c", &customArray[counter].sex);
// 年龄
printf("\n年龄:");
getchar();
scanf("%d", &customArray[counter].age);
// 电话
printf("\n电话:");
getchar();
scanf("%s", customArray[counter].phone);
// 邮箱
printf("\n邮箱:");
getchar();
scanf("%s", customArray[counter].email);
// 统计客户的人员个数+1
counter++;
}
// 主菜单的code
void mainMenu()
{
// 定义一个变量存储用户选项值[1-5]
int select;
// 定义一个变量,去控制循环语句是不是死循环
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):");
scanf("%d", &select);
// 条件语句进行条件判断
switch (select)
{
case 1:
// 添加客户
addCustom();
break;
case 2:
// 修改客户
updateCustom();
break;
case 3:
// 删除客户
deleteCustom();
break;
case 4:
// 查看列表
lookList();
break;
case 5:
// 输入的如果不是Y|N,一直询问....直到这大哥终于输入Y|N
char choose;
do
{
printf("确认是否退出Y/N:");
// 换行符从缓冲区取出
getchar();
scanf("%c", &choose);
} while (choose != 'Y' && choose != 'N');
// 执行到这里如果输入的Y真的退出
if (choose == 'Y')
{
// 终止死循环
loop = 0;
printf("\n退出客户系统管理");
}
break;
default:
printf("\n请您输入正确选项");
break;
}
}
}
int main()
{
// 主菜单
mainMenu();
return 0;
}
写法2:
cpp
#include <stdio.h>
#include <string.h>
// 客户结构体
typedef struct
{
int id;
char name[20];
char sex;
int age;
char phone[20];
char emal[30];
} Customer;
Customer customer[100]; // 创建客户数组
int cont = 0, max_len = 99; // 定义客户数量,和最大限制
int flag = 1;
// 添加客户函数
void add_customer()
{
printf("----------1添加客户----------\n");
customer[cont].id = cont + 1;
printf("姓名\n");
getchar();
char buffer[20];
fgets(buffer,sizeof buffer,stdin);
sscanf(buffer,"%s",customer[cont].name);
printf("性别\n");
scanf("%c", &customer[cont].sex);
printf("年龄\n");
scanf("%d", &customer[cont].age);
printf("电话\n");
scanf("%s", customer[cont].phone);
printf("邮箱\n");
scanf("%s", customer[cont].emal);
cont++;
printf("----------添加完成----------\n");
}
// 客户列表
void customer_list()
{
printf("----------客户列表---------------------------------------\n");
printf("编号\t姓名\t性别\t年龄\t电话\t\t邮箱\n");
for (int i = 0; i < cont; i++)
{
printf("%d\t%s\t%c\t%d\t%s\t%s\n", customer[i].id, customer[i].name, customer[i].sex, customer[i].age, customer[i].phone, customer[i].emal);
}
}
// 修改客户
void modify_customer()
{
printf("----------修改客户----------\n");
printf("请选择待修改客户编号(-1退出)\n");
int modify_id;
scanf("%d", &modify_id);
if (modify_id >= 1)
{
char buffer[20];
printf("姓名(%s)\n", customer[modify_id - 1].name);
getchar();
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customer[modify_id - 1].name);
}
printf("性别(%c)\n", customer[modify_id - 1].sex);
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%c", &customer[modify_id - 1].sex);
}
printf("年龄(%d)\n", customer[modify_id - 1].age);
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%d", &customer[modify_id - 1].age);
}
printf("电话(%s)\n", customer[modify_id - 1].phone);
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customer[modify_id - 1].phone);
}
printf("邮箱(%s)\n", customer[modify_id - 1].emal);
fgets(buffer, sizeof(buffer), stdin);
if (buffer[0] != '\n')
{
sscanf(buffer, "%s", customer[modify_id - 1].emal);
}
printf("----------修改完成----------\n");
printf("----------修改成功!!!----------\n");
}
}
// 退出系统
void customer_exit()
{
char ch;
do
{
printf("是否确定退出Y/N\n");
getchar();
scanf("%c", &ch);
} while (ch != 'Y' && ch != 'N');
if (ch == 'Y')
{
flag = 0;
}
}
// 删除客户
void del_customer()
{
printf("----------删除客户----------\n");
printf("请选择待删除客户编号(-1退出)\n");
int dle_id;
scanf("%d", &dle_id);
if (dle_id >= 1)
{
if (dle_id > cont)
{
printf("没有该用户,删除失败\n");
}
else
{
char ch;
do
{
printf("确认是否删除(Y/N)\n");
getchar();
scanf("%c", &ch);
} while (ch != 'Y' && ch != 'N');
if (ch == 'Y')
{
for (int i = dle_id - 1; i < cont; i++)
{
strcpy(customer[i].name, customer[i + 1].name);
customer[i].sex = customer[i + 1].sex;
customer[i].age = customer[i + 1].age;
strcpy(customer[i].phone, customer[i + 1].phone);
strcpy(customer[i].emal, customer[i + 1].emal);
}
cont--;
printf("----------删除成功----------\n");
}
else
{
printf("----------取消删除----------\n");
}
}
}
}
// 主视图函数
void view()
{
int choose;
while (flag)
{
printf("----------客户信息管理软件----------\n");
printf(" 1 添加客户\n");
printf(" 2 修改客户\n");
printf(" 3 删除客户\n");
printf(" 4 客户列表\n");
printf(" 5 退 出\n");
printf(" 请选择(1-5):\n");
scanf("%d", &choose);
switch (choose)
{
case 1:
add_customer();
break;
case 2:
modify_customer();
break;
case 3:
del_customer();
break;
case 4:
customer_list();
break;
case 5:
customer_exit();
break;
default:
printf("请输入正确的数字\n");
break;
}
}
}
int main()
{
view();
return 0;
}