1.需求说明
1.1 主菜单
1.2 添加客户
1.3 修改客户
1.4 删除客户
1.5 显示客户
1.6 退出系统
2. 代码实现
#include <stdio.h>
// 定义一个结构体 表示用户
typedef struct
{
int id; // 用户编号
char name[20];
char gender; // f 或者 m
int age;
char phone[20];
char email[40];
} Customer;
// 定义结构体数组 存储用户信息
Customer customers[100];
// 定义变量 存储能够存储的用户总数(数组最大索引)
int limit_number = 99;
// 定义变量 存储已经记录的用户数量(数组的当前索引)
int customer_count = 0;
// 执行修改
// 参数:编号
// 返回:1 修改成功 0修改失败
int edit(int id)
{
// 判断编号是否存储
if (id < 1 || id > customer_count)
{
return 0;
}
// 获取当前要修改元素的索引
int index = id - 1;
// 定义字符数组作为输入缓冲区
char buffer[40];
// 修改姓名
printf("\n修改姓名(%s):", customers[index].name);
getchar();
fgets(buffer, sizeof buffer, stdin);
// 判断用户有没有直接按换行
if (buffer[0] != '\n')
{
// 修改原来的姓名
sscanf(buffer, "%s", customers[index].name);
}
// 修改性别
printf("\n修改性别(%c):", customers[index].gender);
fgets(buffer, sizeof buffer, stdin);
// 判断用户没有直接按换行
if (buffer[0] != '\n')
{
// 修改原来的性别
sscanf(buffer, "%c", &customers[index].gender);
}
// 修改年龄
printf("\n修改年龄(%d):", customers[index].age);
fgets(buffer, sizeof buffer, stdin);
// 判断用户没有直接按换行
if (buffer[0] != '\n')
{
// 修改原来的年龄
sscanf(buffer, "%d", &customers[index].age);
}
// 修改手机号
printf("\n修改手机号(%s):", customers[index].phone);
fgets(buffer, sizeof buffer, stdin);
// 判断用户没有直接按换行
if (buffer[0] != '\n')
{
// 修改原来的手机号
sscanf(buffer, "%s", customers[index].phone);
}
// 修改邮箱
printf("\n修改邮箱(%s):", customers[index].email);
fgets(buffer, sizeof buffer, stdin);
// 判断用户没有直接按换行
if (buffer[0] != '\n')
{
// 修改原来的邮箱
sscanf(buffer, "%s", customers[index].email);
}
// 返回
return 1;
}
// 进入修改界面 获取输入的编号
void editView()
{
int id; // 存储用户编号
printf("\n---------------客户修改-----------------");
printf("\n请输入待修改的客户编号(-1退出):");
scanf("%d", &id);
// 判断是否退出
if (id == -1)
{
printf("\n放弃修改!");
return;
}
// 调用执行修改
if (edit(id))
{
printf("\n修改成功!");
}
else
{
printf("\n修改失败,用户编号不存在!");
}
}
// 定义函数 实现用户添加
void add()
{
if (customer_count > limit_number)
{
printf("\n用户数量已经超过最大限制");
return;
}
printf("\n----------添加客户----------\n");
// 设置编号 编号自动设置 依次 递增
customers[customer_count].id = customer_count + 1;
// 获取用户输入
printf("\n姓名:");
scanf("%s", customers[customer_count].name);
printf("\n性别(f或m):");
getchar();
scanf("%c", &customers[customer_count].gender);
printf("\n年龄:");
scanf("%d", &customers[customer_count].age);
printf("\n手机号:");
scanf("%s", customers[customer_count].phone);
printf("\n邮件:");
scanf("%s", customers[customer_count].email);
// 当前索引 ++
customer_count++;
printf("\n添加完成!");
}
// 定义函数 实现用户列表
void list()
{
printf("\n----------客户列表----------\n");
printf("编号\t姓名\t年龄\t性别\t电话\t\t\t邮箱");
// 循环客户数组
for (int i = 0; i < customer_count; i++)
{
printf("\n%d\t%s\t%d\t%c\t%s\t\t\t%s", customers[i].id, customers[i].name, customers[i].age, customers[i].gender, customers[i].phone, customers[i].email);
}
}
// 定义函数 实现删除用户
// 执行删除
// 参数 客户编号
// 返回值 删除成功 1 删除失败 0
int delete(int id)
{
// 判断编号不存在
if (id < 1 || id > customer_count)
{
return 0;
}
// 获取被删除元素的索引
int index = id - 1;
// 执行删除
// 让后面的元素依次向前移动
for (int i = index; i < customer_count - 1; i++)
{
customers[i] = customers[i + 1];
customers[i].id -= i;
}
customer_count--;
return 1;
}
// 删除客户界面 用户输入编号和确认
void deleteView()
{
int id; // 获取编号
char choice; // 获取是否删除
printf("\n----------------删除客户---------------");
printf("\n请选择删除客户的编号(-1退出):");
scanf("%d", &id);
// 如果-1
if (id == -1)
{
printf("\n 放弃删除");
return;
}
// 确认
printf("\n确认是否删除(Y/N):");
getchar();
scanf("%c", &choice);
// 判断
if (choice == 'Y' || choice == 'y')
{
// 执行删除
if (delete (id))
{
printf("\n-------------------删除成功!------------------");
}
else
{
printf("\n删除失败!该用户编号不存在!");
}
}
}
// 实现主菜单和退出的函数
void menu()
{
// 定义变量 控制死循环
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 selection;
scanf("%d", &selection);
// 判断
switch (selection)
{
case 1:
add();
break;
case 2:
editView();
break;
case 3:
deleteView();
break;
case 4:
list();
break;
case 5:
char choose;
// 直到用户输入Y或者N才结束do while 循环
do
{
printf("请确认是否退出(Y/N):");
getchar();
scanf("%c", &choose);
} while (choose != 'Y' && choose != 'y' && choose != 'N' && choose != 'n');
// 判断
if (choose == 'Y' || choose == 'y')
{
loop = 0;
printf("\n退出系统!欢迎下次再来!");
}
break;
default:
printf("\n请输入正确的选项!");
break;
}
}
}