c程序课程设计实验室管理系统.docx
《c程序课程设计实验室管理系统.docx》由会员分享,可在线阅读,更多相关《c程序课程设计实验室管理系统.docx(22页珍藏版)》请在冰豆网上搜索。
c程序课程设计实验室管理系统
目录
1需求分析5
2总体设计6
2.1程序的总体设计6
2.2数据结构6
3详细设计7
3.1主控模块设计7
3.2实验设备信息录入模块设计8
3.3实验设备信息更改模块设计9
3.4实验设备信息删除模块设计10
4.主要函数功能描述12
4.1添加设备函数addEequipment()12
4.2输入到文件函数fpintE12
4.3修改设备信息函数changeEquipment()12
4.4删除设备信息函数deleteEquipment()12
5测试与调试13
6个人设计小结与心得体会14
参考文献14
致谢15
附件1程序源代码15
前言
现在,科学技术的飞速发展把人类社会推向了一个崭新的时代─信息时代。
这已是无可争议的事实;信息对社会经济发展的巨大推动作用,使其与物质能源一起并列为现代社会的三大支柱,这已在全社会达到共识。
随着对信息作为一种资源来管理的需求日益加强,信息研究领域出现了一种新的管理思想和模式─信息管理。
计算机管理以其快捷高效的特点在很多领域已经取代了传统的手工管理方式,尤其是在繁复琐碎的物资设备管理中,计算机管理手段的这一优势更显得十分突出。
与传统管理方式相比较,设备管理系统能更加有效的进行信息管理。
设备管理系统应用数据库,对信息数据以数据库形式表示,更容易更新和管理。
传统的管理方式往往以表格的形式进行管理,一旦数据过于庞大,要对这些数据进行管理时,就要花费大量的时间,而且很容易出错。
由于现代信息化的普及化,因此现代信息化的设备管理模式很快取代了传统模式的管理方式。
摘要
在此次课程设计中我们小组的课设题目是实验室设备信息管理系统,我们使用软件VisualC++6.0及C语言来完成此次课程设计。
我在课设过程中实现了系统的主菜单,设备信息录入,设备信息修改,设备信息删除等功能。
利用开发程序对实验室设备进行方便、有效、合理的管理。
系统使用VisualC++6.0。
关键词:
数据库;信息管理;VisualC++6.0
1需求分析
(1)问题
根据需求,该系统所应包含的信息有以下一些:
实验室设备的基本信息:
实验设备编号、实验设备名称、型号、购入时间、价格
根据需求,该系统所应实现的功能有以下一些:
各种基本数据的录入。
如:
实验室设备基本信息录入。
各种基本数据的修改与删除。
即:
允许对已经录入的数据重新进行编辑、修改、删除。
例如修改或删除实验室设备指定信息
基于各种数据的查询。
例如输入实验室设备名称,查询实验室设备的编号、购入时间、价格。
基于各种数据的排序。
即:
实验室设备按编号排序。
各种数据的浏览。
如:
浏览实验室设备所有信息。
(2)系统
采用C语言实现,开发环境为VC,可以运行在操作系统windows98及以上皆可。
(3)运行要求
能不受限制的录入实验室设备信息
界面友好,操作方便,例如删除前需要提示用户是否删除
2总体设计
2.1程序的总体设计
图1.程序总体设计图
2.2数据结构
根据系统要求,系统中需要保存的数据有设备的信息,其结构如表1:
数据项名称
数据项系统表示
数据类型
数据长度
备注
编号
num
字符串
名称
name
字符串
20
型号
model
字符串
20
购入时间
time
字符串
20
价格
price
字符串
20
表1.结构体
使用C语言创建的结构体如下:
typedefshebei/*定义数据结构*/
{
intnum;//编号
charname[20];//名称
charmodel[20];//型号bnm
charprice[20];//价格
charbuy_date[20];//购买日期
structequipment*next;
charrepair_time[20];
typedefshebei*next;
};
3详细设计
3.1主控模块设计
控制整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图2所示。
图2.主模块流程图
3.2实验设备信息录入模块设计
信息输入,在系统中输入相关信息流程图如图3所示。
图3.实验设备信息录入模块流程图
3.3实验设备信息更改模块设计
修改信息,系统要求用户输入要修改的设备编号,用户只需将设备新的信息按要求输入即可对信息进行修改,流程图如图4。
图4.实验设备信息更改模块流程图
3.4实验设备信息删除模块设计
删除信息,系统要求用户输入要删除的设备编号,输入后即可删除设备信息,流程图如图5。
图5.实验设备信息删除模块流程图
4.主要函数功能描述
4.1添加设备函数addEequipment()
函数原型:
voidfprintE(Equipment*head)
功能描述:
添加设备信息,如果编号不存在,则输入设备名称、型号、价格、购买日期;如果编号存在,则输入失败。
函数流程图如图3所示。
4.2输入到文件函数fpintE
函数原型:
voidfprintE(Equipment*head)
功能描述:
打开"data.txt"文件,将设备当前信息指针指向头部,当设备当前信息不为空,将数目、名称、模型、价格、购买日期按指定格式写入到文本文件中。
4.3修改设备信息函数changeEquipment()
函数原型:
voidchangeEquipment(Equipment*head,intnum)
功能描述:
先查找设备,如果没有会要求先录入设备,会对设备信息进行修改,包括设备的名称,型号,价格,购买日期,若未找到,会提示操作失败。
函数流程图如图4所示。
4.4删除设备信息函数deleteEquipment()
函数原型:
voiddeleteEquipment(Equipment*head,intnum)
功能描述:
先查找设备,如果没有会要求先录入设备,找到设备后可以删除该设备信息,并提示删除成功。
函数流程图如图5所示。
5测试与调试
1、程序菜单测试
图6
2、设备信息录入测试
测试数据
输入:
1显微镜11112342013.7
2望远镜2223456782013.7
图7
3、设备信息更改测试
将设备编号1改为3,型号改为333,价格改为4321,购买时间改为2012.7
图8
4、设备信息删除测试
将设备编号为3的设备信息删除
图9
6个人设计小结与心得体会
经过一周的调查、学习、研究和设计,系统的设计接近了尾声。
在这里我将系统设计做如下总结。
1.本系统的功能已经达到设计的要求。
系统中各个模块的功能均已实现,为整体系统的构建奠定了基础。
2.系统模块的功能可以被进一步扩展。
3.系统中模块划分明确,模块功能设计有较强的针对性。
4.系统的设计遵循软件开发的全过程,使我对软件系统的开发过程有了更深刻的认识。
系统的设计没有完美无缺的,这个系统在某些地方可能存在不足,还需要我们进一步的改进和完善。
参考文献
[1]严蔚敏,吴伟民.数据结构(C语言版).北京:
清华大学出版社,2007
[2]张长海.C语言程设计[M].北京:
高等教育出版社,2006
[3]陈建新,李志敏.数据结构实验指导与课程设计教程.北京:
科学出版社,2010
[4]吴玉蓉,李劲.数据结构(C语言版).北京:
中国水利水电出版社,2008
[5]谭浩强.C语言程设计.北京:
清华大学出版社,2005
[6]王为青,刘变红.C语言高级编程及实例剖析.北京:
人民邮电出版社,2007
[7]王连相,赵付清.C/C++程序设计教程.北京:
中国铁道出版社,2011
致谢
在本次课程设计过程中,得到了指导老师张墨逸老师的细心指导与支持。
在此特别感谢张墨逸老师的大力帮助同时也特别感谢我的同学他们在我的这次课程设计中给了我很大的帮助。
有了张墨逸老师的悉心指导和大力支持,我在总体结构、功能的把握上给予了非常大的帮助,同时给我们提供了非常优越的设计环境,并对我在编程等细节工作上给予了耐心的指导。
在此我一并向她表示感谢。
通过这次课程设计我还明白了作为一名信息与计算科学专业的学生,我们要会的不仅仅是编写代码,更重要的是要有整体把握系统设计的能力。
附件1程序源代码
#include//宏定义函数
#include//动态存储分配函数头文件
#include//调用系统函数
typedefstructequipment{
intnum;//编号
charname[20];//名称
charmodel[20];//型号bnm
charprice[20];//价格
charbuy_date[20];//购买日期
structequipment*next;
charrepair_time[20];
}Equipment;
voidfprintE(Equipment*head);//将设备信息输出到文件
voidaddEquipment(Equipment*head);//添加设备信息
voiddeleteEquipment(Equipment*head,intnum);//删除设备信息
voidchangeEquipment(Equipment*head,intnum);//修改设备信息
voidfindEquipment();//设备查找
Equipment*fscanE();//从文件读取设备信息
voidrepairEquipment();//维修管理
voidprintList(Equipment*head);//输出设备信息列表
intcheckNum(Equipment*head,intnum);//检查信息
//将设备信息输出到文件
voidaddEquipment(Equipment*head){
Equipment*tail=head;//指针指向头部
while(tail->next!
=NULL)tail=tail->next;//当尾部不为空时,继续
Equipment*newnode=(Equipment*)malloc(sizeof(Equipment));//动态分配空间
printf("请输入设备编号:
");
scanf("%d",&newnode->num);//输出数据
if(checkNum(head,newnode->num)){
printf("输入编号已有,输入失败!
");
return;
}
printf("请输入设备名称:
");
scanf("%s",&newnode->name);
printf("请输入设备型号:
");
scanf("%s",&newnode->model);
printf("请输入设备价格:
");
scanf("%s",&newnode->price);
printf("请输入设备购买日期:
");
scanf("%s",&newnode->buy_date);
tail->next=newnode;
newnode->next=NULL;
fprintE(head);
printf("录入成功!
");
}
//将链表输入到文件
voidfprintE(Equipment*head){
FILE*fp=fopen("data.txt","w");
Equipment*current=head->next;
while(current){
fprintf(fp,"%d\n",current->num);
fprintf(fp,"%s\n",current->name);
fprintf(fp,"%s\n",current->model);
fprintf(fp,"%s\n",current->price);
fprintf(fp,"%s\n",current->buy_date);
//printf("%d%s%s%s%s",current->num,current->name,current->model,current->price,current->buy_date);
current=current->next;
}
fclose(fp);
}
//删除设备信息
voiddeleteEquipment(Equipment*head,intnum){
if(head->next==NULL){
printf("没有设备!
请先录入设备!
");
return;
}
Equipment*current=head;
Equipment*current_next=current->next;
while(current_next){
if(current_next->num==num){
current->next=current_next->next;
printf("删除成功!
");
fprintE(head);
return;
}
current=current->next;
current_next=current_next->next;
}
printf("删除失败,没有找到设备编号!
");
}
//修改设备信息
voidchangeEquipment(Equipment*head,intnum){
if(head->next==NULL){
printf("没有设备!
请先录入设备!
");
return;
}
Equipment*current=head->next;
while(current&&(current->num!
=num)){
current=current->next;
}
if(current!
=NULL){
printf("请输入修改后的数据:
\n");
printf("请输入设备编号:
");
scanf("%d",¤t->num);
printf("请输入设备名称:
");
scanf("%s",¤t->name);
printf("请输入设备型号:
");
scanf("%s",¤t->model);
printf("请输入设备价格:
");
scanf("%s",¤t->price);
printf("请输入设备购买日期:
");
scanf("%s",¤t->buy_date);
fprintE(head);
}else{
printf("操作失败,没有找到设备编号!
");
}
}
//设备查找
voidfindEquipment(){
Equipment*head=fscanE();
if(head->next==NULL){
printf("没有设备!
请先录入设备!
");
return;
}
intnum;
printf("请输入查找设备的编号:
");
scanf("%d",&num);
while(head){
if(head->num==num){
printf("编号为%d的信息为:
\n",num);
printf("编号:
%d\n",head->num);
printf("名称:
%s\n",head->name);
printf("型号:
%s\n",head->model);
printf("价格:
%s\n",head->price);
printf("购买日期:
%s\n",head->buy_date);
return;
}
head=head->next;
}
printf("查找失败,没有找到设备编号!
");
}
//从文件读取设备信息
Equipment*fscanE(){
Equipment*head1=(Equipment*)malloc(sizeof(Equipment));
head1->next=NULL;
Equipment*current=head1;
FILE*fp=fopen("data.txt","r");
while(!
feof(fp)){
Equipment*newnode=(Equipment*)malloc(sizeof(Equipment));
fscanf(fp,"%d\n",&newnode->num);
fscanf(fp,"%s\n",newnode->name);
fscanf(fp,"%s\n",newnode->model);
fscanf(fp,"%s\n",newnode->price);
fscanf(fp,"%s\n",newnode->buy_date);
current->next=newnode;
newnode->next=NULL;
current=current->next;
}
fclose(fp);
returnhead1;
}
//维修信息管理
voidrepairEquipment(){
intnum;
intoper;
chartime[16];
printf("请输入维修操作(1~2):
\n1.记录\t2.查找\n");
scanf("%d",&oper);
getchar();
switch(oper){
case1:
{
FILE*fp=fopen("myfile.txt","a");
printf("请输入维修编号:
");
scanf("%d",&num);
printf("请输入维修时间(xxxx-xx-xx):
");
scanf("%s",&time);
fprintf(fp,"%d\n",num);
fprintf(fp,"%s\n",time);
fflush(fp);
fclose(fp);
printf("记录成功!
");
break;
}case2:
{
intt=0;
printf("请输入查找编号:
");
scanf("%d",&num);
intrnum;
FILE*fp=fopen("myfile.txt","r");
while(!
feof(fp)){
fscanf(fp,"%d\n",&rnum);
fscanf(fp,"%s\n",&time);
if(rnum==num){
printf("编号:
%d,维修时间:
%s\n",rnum,time);
t=1;
}
}
if(t==0){
printf("查询错误,没有找到维修记录!
");
}
fclose(fp);
break;
}
default:
{
printf("输入有误,操作失败!
");
}
}
}
//输出设备信息列表
voidprintList(Equipment*head){
if(head->next==NULL){
printf("没有设备,请先录入设备!
");
return;
}
Equipment*current=head->next;
printf("=====================================================\n");
printf("编号名称型号价格购买日期\n");
while(current){
printf("\t%d\t%s\t%s\t%s\t%s\n",current->num,current->name,current->model,current->price,current->buy_date);
current=current->next;
}
printf("===================================================\n");
}
//检查设备编号是否相同
intcheckNum(Equipment*head,intnum){
if(head->next==NULL)return0;
Equipment*current=head->next;
while(current){
if(current->num==num){
return1;
}
current=current->next;
}
return0;
}
intmain(){
Equipment*head=(Equipment*)malloc(sizeof(Equipment));
head->next=NULL;
intnum=-1;
while(num!
=0){
printf("~~~~~~~~~~欢迎进入实验室设备信息管理系统!
~~~~~~~~~~~\n");
printf("\n~~~~~~~~~~请输入您选择的操作(0~7):
~~~~~~~~~~~~~~\n");
printf("1.设备信息录入\t2.设备信息更改\t");
printf("3.设备信息删除\n4.设备查找\t5.维修记录管理\t6.显示所有设备\n\t7.关于\t\t\t0.退出\n");
printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
scanf("%d",&num);
intnum1;
system("cls");
switch(num){
case0:
{break;}
case1:
{
addEquipment(head);
break;
}
case2:
{
printf("请输入更改信息的设备编号:
");
scanf("%d",&num1);
getchar();
changeEquipment(head,num1);
break;
}
case3:
{
printf("请输入需要删除的设备编号:
");
scanf("%d",&num1);
getchar();
deleteEquipment(head,num1);
break;
}
case4:
{
findEquipment();
break;
}
case5:
{
repairEquipment();
break;
}case6:
{
printList(head);
break;
}