🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、功能介绍
1.1 查看设备信息
1.2 显示记录
1.3 修改设备信息
1.4 查找设备信息
1.5 删除设备信息
1.6 恢复设备信息
1.7 添加设备信息
1.8 统计设备信息
1.9 保存数据文件
1.10 打开数据文件
二、设计思路
2.1 数据的存储
2.2 数据的写入
2.3 数据的读取
2.4 程序流程图
三、主要功能
3.1 查看设备信息
3.2 显示记录
3.3 修改设备信息
3.4 查找设备信息
3.5 删除设备信息
3.6 恢复设备信息
3.7 添加设备信息
3.8 统计设备信息
3.9 保存数据文件
3.10 打开数据文件
四、总结
本篇文章主要针对想学习 C 语言或者想提升 C 语言实践能力的同学,当然,如果你需要一份这样的课程设计那这正合适,下面就来详细讲解 C 语言教学设备管理系统。
一、功能介绍
教学设备管理系统的主界面如下所示。
教学设备管理系统有 10 个主要功能,如下所示:
1.1 查看设备信息
显示所有存储设备的详细信息,包括:设备号、设备名称、产地、购置日期、台数、单价、金额等。
1.2 显示记录
显示记录可以选择根据具体记录进行显示或者根据设备号进行显示。
1.3 修改设备信息
根据设备号查询具体设备,可以修改对应设备的设备号、设备名称、产地、购置日期、台数、单价、金额等。
1.4 查找设备信息
可以根据设备编号、设备名称、产地、购置日期、台数、单价、金额等进行查询设备。
1.5 删除设备信息
根据设备编号进行设备的删除。
1.6 恢复设备信息
根据设备编号进行设备的恢复。
1.7 添加设备信息
输入设备的设备号、设备名称、产地、购置日期、台数、单价、金额等进行添加。
1.8 统计设备信息
可以根据所有设备的总价值、设备总台数及总金额或按字符表打印教学设备进行统计。
1.9 保存数据文件
将数据保存到文件中。
1.10 打开数据文件
从数据文件中读取数据。
二、设计思路
2.1 数据的存储
数据通过如下结构进行存储。
struct Array
{ //设备编号 设备名称 产地 购置日期 台数 单价 金额 备注
char ano[20], aname[20], origin_place[20], buy_time[20], aamount[20], unit_price[20], aprice[20], remark[20];
int del; //判断是否删除,值为0为未删除,1为已删除。恢复是把1改为0
} a[SIZE];
其中,通过字符串数组 ano、aname、origin_place、buy_time、aamount、uint_price、aprice、remark 分别存储设备编号、设备名称、产地、购置日期、台数、单价、金额以及备注。
del 表示设备是否被删除。
2.2 数据的写入
数据写入文件通过自定义的 write 函数来实现,如下所示。
void write()
{
Print_Start();
Print_Space(60, "保存数据文件\n\n\n");
FILE *fp=fopen("infor.txt","w+");
if(fp == NULL){
printf("open infor.txt error\n");
getchar();
getchar();
return;
}
int i;
for (i = 0; i < No; i++)
fwrite(&a[i],sizeof(struct Array),1,fp);
fclose(fp);
Print_Space(60, "成功保存数据\n\n\n");
getchar();
getchar();
}
通过系统函数 fopen 获得文件句柄 fp,将数组 a 中的数据存储到文件 infor.txt 中。
2.3 数据的读取
读取数据通过自定义的函数 read 来实现,如下所示。
//读取内容
void read()
{
Print_Start();
Print_Space(60, "读入数据\n\n\n");
No = 0;
FILE *fp = fopen("infor.txt","r+"); //读写功能
if(fp == NULL){
fp = fopen("infor.txt","w+"); //若没有则创建一个txt
fclose(fp);
}
int i;
for(i = 0; !feof(fp); i++)
{
fread(&a[i],sizeof(struct Array),1,fp); //一次读取一个
No++;
}
No = No-1;
Print_Space(58, "成功读入数据!\n\n\n");
Print_Space(5, "输入任意键返回主菜单: ");
getchar();
getchar();
fclose(fp);
}
和写入数据一样,通过系统函数 fopen 获取文件句柄 fp,将文件 infor.txt 中的数据读取到结构 a 中。
2.4 程序流程图
程序的主要流程图如下所示。
三、主要功能
下面对教学设备管理系统主要功能进行介绍。
3.1 查看设备信息
显示所有存储设备的详细信息,包括:设备号、设备名称、产地、购置日期、台数、单价、金额等。
void chec()
{
Print_Start();
Print_Space(60, "查看设备信息\n\n\n");
int i;
printf(" 设备号 设备名称 产地 购置日期 台数 单价 金额 备注\n\n");
printf("\n");
for(i=0;i<No;i++)
{
if(a[i].del == 0)
printf("%8s%20s%20s%20s%20s%20s%20s%20s\n",a[i].ano,a[i].aname,a[i].origin_place,a[i].buy_time,a[i].aamount,a[i].unit_price,a[i].aprice,a[i].remark);
}
printf("\n\n");
Print_Space(5, "输入任意键返回主菜单 :");
getchar();
getchar();
menu();
}
如上所示,打印所有设备的信息,排除已经删除的设备。 运行界面如下所示。
3.2 显示记录
显示记录可以选择根据具体记录进行显示或者根据设备号进行显示。
//显示设备信息
void Display()
{
Print_Start();
Print_Space(50, "显示记录\n\n\n");
int space = 39;
Print_Space(space, "1. 根据具体记录进行显示\n");
Print_Space(space, "2. 根据设备号进行显示\n");
Print_Space(10, "请输入:");
int choose;
scanf("%d", &choose);
if(choose == 1){
Display_Record();
Return_Confirm(Display);
}else if(choose == 2){
Display_Id();
Return_Confirm(Display);
}
}
根据用户选择显示设备信息。 运行界面如下所示。
3.3 修改设备信息
根据设备号查询具体设备,可以修改对应设备的设备号、设备名称、产地、购置日期、台数、单价、金额等,运行界面如下所示。
3.4 查找设备信息
可以根据设备编号、设备名称、产地、购置日期、台数、单价、金额等进行查询设备。
//查找记录
void Find()
{
Print_Start();
Print_Space(60, "查找记录\n\n\n");
//char ano[20], aname[20], origin_place[20], buy_time[20], aamount[20], unit_price[20], aprice[20];
int space = 39;
Print_Space(space, "1. 设备编号\n");
Print_Space(space, "2. 设备名称\n");
Print_Space(space, "3. 产地\n");
Print_Space(space, "4. 购置日期\n");
Print_Space(space, "5. 台数\n");
Print_Space(space, "6. 单价\n");
Print_Space(space, "7. 金额\n");
Print_Space(space, "8. 备注\n");
Print_Space(10, "请输入编号: ");
int choose;
scanf("%d", &choose);
Print_Space(10, "请输入要查找的内容: ");
char s[100];
scanf("%s", s);
//设备编号 设备名称 产地 购置日期 台数 单价 金额
printf(" 设备号 设备名称 产地 购置日期 台数 单价 金额 备注\n\n");
//printf(" 设备号 设备名称 领用人 所属部门 数量 购买时间 价格\n\n");
bool flag = false;
int i, m = 0;
for(i = 0; i < No; i++)
{
if(a[i].del == 0){
flag = Judge(s, a[i], choose);
if(flag) {
m++;
printf("%8s%20s%20s%20s%20s%20s%20s%20s\n",a[i].ano,a[i].aname,a[i].origin_place,a[i].buy_time,a[i].aamount,a[i].unit_price,a[i].aprice,a[i].remark);
}
}
}
if(m > 0){
Print_Space(62, "查找成功!\n\n");
}else {
Print_Space(58, "查找失败,并不存在此设备!\n\n");
}
printf("\n\n");
Return_Confirm(Find);
}
运行界面如下所示。
3.5 删除设备信息
根据设备编号进行设备的删除。
//删除设备信息,是按照设备号来删除设备的
void del()
{
Print_Start();
Print_Space(50, "删除设备信息\n\n");
char ch[20], s;
int i;
printf(" 设备号 设备名称 产地 购置日期 台数 单价 金额 备注\n\n");
//printf("序号 设备号 设备名称 领用人 所属部门 数量 购买时间 价格\n");
for(i = 0; i < No; i++)
{
if(a[i].del == 0)
printf("%8s%20s%20s%20s%20s%20s%20s%20s\n",a[i].ano,a[i].aname,a[i].origin_place,a[i].buy_time,a[i].aamount,a[i].unit_price,a[i].aprice,a[i].remark);
}
printf("请输入要删除的设备编号:(0键返回菜单栏) ");
while (1)
{
scanf("%s", ch);
i = atoi(ch);
if (i >= 1 && i <= No)
break;
else if(i == 0)
return;
else puts("信息有误!请检查后重新输入\n");
}
//a[i-1].del = 1;
for(i = 0; i < No; i++)
{
if(!strcmp(ch, a[i].ano)){
a[i].del = 1;
break;
}
}
printf("是否继续删除?(Y/N)(不区分大小写)");
while (1)
{
getchar();
gets(&s);
if (s=='Y'||s=='N'||s=='y'||s=='n')
break;
else puts("信息有误!请检查后重新输入\n");
}
if(s=='Y'||s=='y')
del();
else if(s=='N'||s=='n')
system("cls");
menu();
}
运行界面如下所示。
3.6 恢复设备信息
根据设备编号进行设备的恢复。
//恢复信息
void restore()
{
Print_Start();
Print_Space(60, "恢复信息\n\n\n");
Print_Space(60, "已经删除的设备信息\n\n\n");
printf(" 设备号 设备名称 产地 购置日期 台数 单价 金额 备注\n\n");
//printf(" 设备号 设备名称 领用人 所属部门 数量 购买时间 价格\n\n");
//显示已经删除的设备信息
int i;
for(i = 0; i < No; i++)
{
if(a[i].del == 1)
printf("%8s%20s%20s%20s%20s%20s%20s%20s\n",a[i].ano,a[i].aname,a[i].origin_place,a[i].buy_time,a[i].aamount,a[i].unit_price,a[i].aprice,a[i].remark);
}
printf("\n\n");
Print_Space(5, "请输入设备号 : ");
char choose[20];
scanf("%s", choose);
//寻找对应的设备
bool flag = false;
for(i = 0; i < No; i++){
if(!strcmp(a[i].ano, choose)){
a[i].del = 0;
flag = true;
break;
}
}
if(flag){
Print_Space(60, "恢复信息成功!\n");
}
Return_Confirm(restore);
}
运行界面如下所示。
3.7 添加设备信息
输入设备的设备号、设备名称、产地、购置日期、台数、单价、金额等进行添加。运行界面如下所示。
3.8 统计设备信息
可以根据所有设备的总价值、设备总台数及总金额或按字符表打印教学设备进行统计。运行界面如下所示。
3.9 保存数据文件
将数据保存到文件中。
void write()
{
Print_Start();
Print_Space(60, "保存数据文件\n\n\n");
FILE *fp=fopen("infor.txt","w+");
if(fp == NULL){
printf("open infor.txt error\n");
getchar();
getchar();
return;
}
int i;
for (i = 0; i < No; i++)
fwrite(&a[i],sizeof(struct Array),1,fp);
fclose(fp);
Print_Space(60, "成功保存数据\n\n\n");
getchar();
getchar();
}
3.10 打开数据文件
从数据文件中读取数据。
//读取内容
void read()
{
Print_Start();
Print_Space(60, "读入数据\n\n\n");
No = 0;
FILE *fp = fopen("infor.txt","r+"); //读写功能
if(fp == NULL){
fp = fopen("infor.txt","w+"); //若没有则创建一个txt
fclose(fp);
}
int i;
for(i = 0; !feof(fp); i++)
{
fread(&a[i],sizeof(struct Array),1,fp); //一次读取一个
No++;
}
No = No-1;
Print_Space(58, "成功读入数据!\n\n\n");
Print_Space(5, "输入任意键返回主菜单: ");
getchar();
getchar();
fclose(fp);
}
四、总结
在上面的 C 语言教学设备管理系统中,主要有两部分,界面的显示和各个功能的实现,根据用户的选择执行对应的功能即可。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞