考虑到目前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语言)完成!
标签:arr,--,scanf,counter,C语言,int,嵌入式软件,printf,id From: https://blog.csdn.net/zx18831955136/article/details/140998621