C语言课程设计实验室设备信息管理系统.docx
《C语言课程设计实验室设备信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验室设备信息管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
![C语言课程设计实验室设备信息管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/18/bf8dd3e3-7660-4e91-9437-f20260a8b792/bf8dd3e3-7660-4e91-9437-f20260a8b7921.gif)
C语言课程设计实验室设备信息管理系统
***大学
二○一五~二○一六学年第一学期
电子与信息工程系
课程设计报告书
课程名称:
程序设计基础实践
班级:
学号:
姓名:
指导教师:
二○一五年十二月
实验室设备信息管理系统
1..实验室设备信息管理系统功能
(1).每一条记录包括实验室的设备编号、设备名称、设备型号、设备价格、设备购买日期信息。
(2).实验设备信息录入:
可以一次完成诸多条记录的录入。
(3).实验设备信息更改:
可实现对实验设备信息更改的信息进行适当的修改。
(4).报废设备信息删除:
对实验损毁设备信息予以删除。
(5).实验设备信息查询:
本系统提供两种查询实验设备的方法:
1.按器材名称查询.
2.按器材编号查询.
从而完成按实验设备的查找查找功能,并显示。
(6).实验设备信息排序:
根据实验设备的编号进行排序,以实现实验设备的有序全局查看。
实验设备信息显示功能:
完成全部学生记录的显示。
(7).简单帮助:
提供实验室负责人简单的信息。
(8).保存功能:
将学生记录保存在任何自定义的文件中,如保存在:
c:
\score。
(9).读取功能:
将保存在文件中的学生记录读取出来。
(10).有一个清晰美观界面来调用各个功能
2.设计内容
2.1程序的总体设计
整个系统除了主函数外,另外还有11个函数,实现以下功能:
实验室设备录入功能、显示功能、查找功能、排序功能、读出与写入取功能。
各个函数的详细设计说明分别如下:
2.2数据结构
根据系统要求,系统中设计实验器材具体信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度
备注
编号
bianhao
字符串
名称
name
字符串
20
型号
model
字符串
20
购入时间
buy_date
字符串
20
价格
price
字符串
20
使用C语言创建的结构体如下:
typedefEquipment/*定义数据结构*/
{
charbianhao;//编号
charname[20];//名称
charmodel[20];//型号bnm
charprice[20];//价格
charbuy_date[20];//购买日期
};
3详细设计
控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图1所示。
通过switch进入分支结构从而调用执行不同的函数,以实现菜单选择的功能。
程序如下:
voidmain()
{
intchoice;
intchoice2;
IO_ReadInfo();
system("cls");
while
(1)
{
/*主菜单*/
printf("\n\n\n\n\n\t\t------苏州科技学院实验器材管理系统------\n\n");
printf("\t\t\t1.实验设备信息录入\n");
printf("\t\t\t2.实验设备信息更改\n");
printf("\t\t\t3.报废设备信息删除\n");
printf("\t\t\t4.实验设备信息查询\n");
printf("\t\t\t5.实验设备信息排序\n");
printf("\t\t\t6.帮助\n");
printf("\t\t\t7.退出\n");
printf("\n\t\t------*------*-----*-----*-----*-----*------\n");
printf("\n\n\n请选择(1-7):
");
scanf("%d",&choice);
getchar();
system("cls");
switch(choice)
{
case1:
Equipment_Insert();
break;
case2:
Equipment_Modify();
break;
case3:
Equipment_Delete();
break;
case4:
printf("\n\n\n\n\n\t请选择(1/2)→1.按器材名称查询\n");
printf("2.按器材编号查询\n\n\n");
scanf("%d",&choice2);
switch(choice2)
{
case1:
Equipment_nameSelect();
break;
case2:
Equipment_bianhaoSelect();
break;
}
break;
case5:
voidEquipment_paixu();
Equipment_Display();
break;
case6:
printf("\n\n\n\n\n\n\t\t\t---**---电子与通信工程学院实验室---**---\n\n");
printf("\t\t\t\t负责人:
sdiwen\n\n");
printf("\t\t\t\t办公室:
A-201\n\n");
printf("\t\t\t\tTel:
*************\n\n");
printf("\t\t\t---**---**---**---**---**---**------**---\n\n");
printf("\t\t\t\t\t||→madebywangluoyang\n\n");
break;
case7:
exit(0);
break;
}
system("Pause");
system("cls");
IO_WriteInfo();
}
}
N
图1.主模块流程图
其运行界面如下:
3.2一些辅助函数
通过设备编号返回数组下标(intEquipment_SearchByIndex(charid[]))
通过(strcmp(equipment[i].bianhao,id)==0)进行比较,从而反馈回对应设备的数组下标。
以方便查询函数,与显示函数的执行。
程序如下:
intEquipment_SearchByIndex(charid[])
{
inti;
for(i=0;i{
if(strcmp(equipment[i].bianhao,id)==0)
{
returni;
}
}
return-1;
}
通过设备名称返回数组下标(intEquipment_SearchByName(charname[]))
通过(strcmp(equipment[i].name,name)进行比较,从而反馈回对应设备的数组下标。
以方便查询函数,与显示函数的执行。
程序如下:
intEquipment_SearchByName(charname[])
{
inti;
for(i=0;i{
if(strcmp(equipment[i].name,name)==0)
{
returni;
}
}
return-1;
}
显示单条设备记录(voidEquipment_DisplaySingle(intindex))
为报废设备删除提供信息的显示。
如下所示,即是调用单条显示函数。
voidEquipment_DisplaySingle(intindex)
{
printf("\n\n\n设备编号设备名称设备型号设备价格设备购买日期\n");
printf("-------------------------------------------------------------\n");
printf("%5s%12s%10s%12s%15s\n",equipment[index].bianhao,equipment[index].name,
equipment[index].model,equipment[index].price,equipment[index].buy_date);
}
显示在库设备信息(voidEquipment_Display())
通过for循环语句将结构体数组中所有的内容显示出来,为排序函数提供显示提出,排序函数最后显示即需要调用显示函数。
voidEquipment_Display()
{
inti;
printf("设备编号设备名称设备型号设备价格设备购买日期\n");
printf("-------------------------------------------------------------\n");
for(i=0;i{
printf("%5s%12s%10s%12s%15s\n",equipment[i].bianhao,equipment[i].name,
equipment[i].model,equipment[i].price,equipment[i].buy_date);
}
}
将设备信息从文件读出voidIO_ReadInfo()
将设备信息写入文件voidIO_WriteInfo()
这两条函数即是将所录入系统的信息保存在database.txt中,以便下次使用时信息的读取与保存。
voidIO_ReadInfo()
{
FILE*fp;
inti;
if((fp=fopen("Database.txt","rb"))==NULL)
{
printf("不能打开文件!
\n");
return;
}
if(fread(&num,sizeof(int),1,fp)!
=1)
{
num=-1;
}
else
{
for(i=0;i{
fread(&equipment[i],sizeof(structEquipment),1,fp);
}
}
fclose(fp);
}
/*将设备信息写入文件*/
voidIO_WriteInfo()
{
FILE*fp;
inti;
if((fp=fopen("Database.txt","wb"))==NULL)
{
printf("不能打开文件!
\n");
return;
}
if(fwrite(&num,sizeof(int),1,fp)!
=1)
{
printf("写入文件错误!
\n");
}
for(i=0;i{
if(fwrite(&equipment[i],sizeof(structEquipment),1,fp)!
=1)
{
printf("写入文件错误!
\n");
}
}
fclose(fp);
}
信息输入时,设计思想为通过while
(1)死循环,不断输入字符串的值保存在结构体数组中,通过if(getchar()=='n')
{
break;
}
来判定是否跳出循环。
在系统