C语言课程设计论文实验室管理系统Word下载.docx
《C语言课程设计论文实验室管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计论文实验室管理系统Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
实现对设备的查询,提供查找操作,查询可以按照设备编号、设备种类、设备名称、设备购入日期、是否报废、报废日期等多种方式查询;
另外提供键盘是选择菜单以实现功能选择。
3总体设计
根据上面的分析,可以将这个系统分为如下六大模块:
实验室设备输入模块、实验设备信息添加模块、、实验设备分类统计模块、实验设备查询模块和退出模块。
其中主要模块是前五个模块。
4详细设计
4.1主函数
【数据结构】
原始数据有设备编号、设备名称、设备种类、设备价格、设备购入时期、是否报废、报废日期,所以定义一个全局结构体数组equipment用于保存原始数据。
【数据结构代码】
structequipment
{
charnum[4];
编号
charname[20];
名称
chartype[20];
种类
floatprice;
价格
charindate[15];
购入日期
charout[2];
是否报废(是为y,否为n)
charoutdate[15];
报废日期
}equ[N];
N为全局变量,暂定为100
主函数初始化工作完成之后执行menu()显示主菜单。
【程序】
voidmain()//入口函数
menu();
//显示主菜单
}
menu()显示主菜单
用于显示菜单,获取用户选项进入相应模块。
voidmenu()
intn,w1;
do
{
puts("
************************菜单*********************\n"
);
\t\t\t\t1.输入新数据\n"
\t\t\t\t2.修改数据\n"
\t\t\t\t3.添加数据\n"
\t\t\t\t4.浏览全部\n"
\t\t\t\t5.搜索\n"
\t\t\t\t6.排序\n"
\t\t\t\t7.退出\n"
**************************************************\n"
printf("
选择数字(1-7):
[]\b\b"
scanf("
%d"
&
n);
if(n<
1||n>
7)
w1=1;
getchar();
elsew1=0;
}
while(w1==1);
switch(n)
case1:
enter();
break;
case2:
modify();
case3:
add();
case4:
browse();
case5:
search();
case6:
order();
case7:
exit(0);
4.2各功能模块设计
4.2.1设备输入模块
voidenter()
{inti,n;
添加多少设备?
:
"
\n\n"
for(i=0;
i<
n;
i++)
输入第%d个数据"
i+1);
input(i);
if(i!
=0)save(n);
printf_back();
4.2.2设备信息添加模块
voidadd()
inti,n,m,k;
FILE*fp;
n=load();
printf("
你想输入多少设备(0-%d)?
:
N-1-n);
scanf("
m);
k=m+n;
for(i=0;
m;
\n输入第%d个设备的数据\n"
input(i);
if((fp=fopen("
data.txt"
"
ab"
))==NULL)
找不到文件\n"
if((fwrite(&
equ[i],sizeof(structequipment),1,fp))!
=1);
fclose(fp);
printf_back();
4.2.3设备信息更改模块
【程序】
voidmodify()
structequipmente;
inti,n,w0=1,w1,w2=0,k;
do
k=-1;
printf_face();
{if((i!
=0)&
&
(i%10==0))
记住你要改的序号,任意键继续..\n"
puts("
printf_one(i);
\n输入你要修改的设备的序号:
NO.:
%s"
e.num);
if(strcmp(e.num,equ[i].num)==0)
k=i;
e=equ[i];
if(k==-1)printf("
\n\n不存在,请重新输入"
}while(k==-1);
printf_one(k);
w1=modify_data(k,n);
if(w1==1)
\n恭喜~还想再改吗?
\n\n1).是\t2).返回并保存\t[]\b\b"
w0);
w2=1;
else
w0=0;
if(w2==1)
equ[k]=e;
if(w0!
=1&
w2==1)
save(n);
while(w0==1);
4.2.4设备分类统计模块
voidorder()
{intn,w1;
***********************分类统计选项**************************\n"
\t\t\t1.设备编号\n"
\t\t\t2.名称\n"
\t\t\t3.种类\n"
\t\t\t4.价格\n"
\t\t\t5.购入日期\n"
\t\t\t6.是否报废\n"
\t\t\t7.报废日期\n"
\t\t\t8.退出\n"
***************************\n"
请输入号码[]\b\b"
if(n<
w1=1;
elsew1=0;
while(w1==1);
switch(n)
case1:
num_order();
case2:
name_order();
case3:
type_order();
case4:
price_order();
case5:
indate_order();
case6:
out_order();
case7:
outdate_order();
case8:
4.2.5设备查询模块
voidsearch()
{intn,w1;
*************************************************************\n"
8)
num_search();
name_search();
type_search();
price_search();
indate_search();
out_search();
outdate_search();
4.2.6设备信息浏览模块
voidbrowse()
inti,n;
if(i%10==0)
\n\t有%d个记录\n"
n);
任意键继续~\n"
4.2.7退出模块
exit(0)为系统函数
4.3公共函数
4.3.1【程序】
voidsave(intn)//保存函数
inti;
FILE*fp;
if((fp=fopen("
wb"
cannotopenfile~"
return;
if(fwrite(&
equ[i],sizeof(structequipment),1,fp)!
=1)
filewriteerror~"
fclose(fp);
4.3.2【程序】
intload()//加载函数
inti;
rb"
return0;
!
feof(fp);
if(fread(&
;
return(i-1);
4.3.3【程序】
voidno_input(inti,intn)//学号输入函数
intj,k,w;
w=0;
printf("
编号:
scanf("
equ[i].num);
for(j=0;
equ[i].num[j]!
='
\0'
j++)
if(equ[i].num[j]<
'
0'
||equ[i].num[j]>
9'
)
{
printf("
输入错误,只能由纯数字构成,请重新输入!
\n"
w=1;
}
if(w!
for(k=0;
k<
k++)
if(k!
=i&
strcmp(equ[k].num,equ[i].num)==0)
{
printf("
此数据已存在,请重新输入\n"
w=1;
}
while(w==1);
voidprintf_back2()
{
intw;
接下来您想?
\n\n1).返回主菜单\t\t2).返回排序菜单继续排序:
[]\b\b"
w);
if(w==1)menu();
elseorder();
4.3.4【程序】
voidprintf_back()//任务结束选择浏览还是返回函数
\n\n恭喜!
操作成功!
\n\n1).浏览浏览操作后全部数据\t\t2).返回主菜单:
if(w==1)browse();
elsemenu();
4.3.5【程序】
voidprintf_back1()//任务结束选择浏览还是返回继续继续搜索
\n\n1).返回主菜单\t\t2).返回搜索菜单继续搜索:
elsesearch();
4.3.6【程序】
voidprintf_back2()//任务结束时选择浏览还是返回继续排序
inti,n;
4.3.7【程序】
voidprintf_face()//显示数据结构函数
\n\tNO.nametypepriceindateoutoutdate\n"
4.3.8【程序】
voidprintf_one(inti)//显示一个记录的函数
%10s%10s%10s%-6.3f%-10s%-8s%-15s"
equ[i].num,equ[i].name,equ[i].type,equ[i].price,equ[i].indate,equ[i].out,equ[i].outdate);
4.3.9【程序】
intmodify_data(inti,intn)//修改单个数据函数
intc,w1;
修改按照=>
\n\n1).编号2).名称3).类型4).价格5).购入时间6).是否报废7).报废时间\n"
c);
if(c>
8||c<
1)
{puts("
\n选择错误哟,重新输入~"
while(c>
1);
switch(c)
名称:
equ[i].name);
类型:
%"
equ[i].type);
价格:
%f"
equ[i].price);
购入时间:
equ[i].indate);
是否报废:
equ[i].out);
报废时间:
equ[i].outdate);
确定?
\n\n\t1).确定2).不,重新修改3).退出(不保存)[]\b\b"
w1);
while(w1==2);
return(w1);
5运行结果(附图)
程序运行结果:
1.
输入4组数据:
编号名称种类价格购入日期是否报废报废日期
001hpmicromachine400001999.04.06n2013.05.03
002dellprinter30002003.12.07y2009.12.07
004scannersharp200002008.03.12n2012.01.01
003ibmscreen200002010.4.13n2015.12.01
(其中第3组数据中购入日期格式错误,第2组名称和种类位置颠倒)
2.浏览:
3.发现其中有错误,调用修改函数
此时已修改所有错误,返回主菜单并显示修改后数据如下
4.添加第五组数据:
005asuskeyboard2002010.06.21n2012.01.01
5搜索:
6.排序:
附录本程序代码
#include<
stdio.h>
string.h>
stdlib.h>
#defineN100
voidnum_order()
voidprintf_back2();
intload();
voidsave(intn);
inti,j,k,n;
chara[30];
floate;
for(i=0;
n-1;
for(j=i+1;
j<
if(strcmp(equ[k].num,equ[j].num)>
0)k=j;
strcpy(a,equ[i].num);
strcpy(equ[i].num,equ[k].num);
strcpy(equ[k].num,a);
strcpy(a,equ[i].name);
strcpy(equ[i].name,equ[k].name);
strcpy(equ[k].name,a);
strcpy(a,equ[i].type);
strcpy(equ[i].type,equ[k].type);
strcpy(equ[k].type,a);
strcpy(a,equ[i].indate);
strcpy(equ[i].indate,equ[k].indate);
strcpy(equ[k].indate,a);
strcpy(a,equ[i].outdate);
strcpy(equ[i].outdate,equ[k].outdate);
strcpy(equ[k].outdate,a);
strcpy(a,equ[i].out);
strcpy(equ[i].out,equ[k].out);
strcpy(equ[k].out,a);
e=equ[i].price;
equ[i].price=equ[k].price;
equ[k].price=e;
k=0;
save(n);
printf_back2();
voidtype_order()
if(strcmp(equ[k].type,equ[j].type)>
strcpy(a,equ