实验设备管理系统C语言课程设计报告.docx
- 文档编号:24490083
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:29
- 大小:133.36KB
实验设备管理系统C语言课程设计报告.docx
《实验设备管理系统C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《实验设备管理系统C语言课程设计报告.docx(29页珍藏版)》请在冰豆网上搜索。
实验设备管理系统C语言课程设计报告
电子信息学院C语言程序设计课程设计
设
计
报
告
课课题题目:
实验设备管理系统
班级:
通信11302班
姓名:
王焱章
班级序号:
19
同组成员:
王炳辉、杨继玲
完成时间:
2015年7月9日
一、课题题目
实验设备管理系统
二、设计目的
1.加深对讲授内容的理解,尤其是一些语法规则;
2.熟悉C语言程序设计的结构化编程的思想,掌握数据的基本类型、自定义类型、函数、文件和指针等知识,能运用这些知识进行综合编程,熟练应用;
3.能够综合运用所学知识,编程解决实际问题;
4.培养团队分工合作的意识,最终使学生提高;编程技能和解决实际问题的能力。
三、总体设计
(1)系统组成框图
(2)系统流程图
开始
定义结构体指针
分配内存空间
显示目录,用于功能选择
输入n,n=0?
n属于(1~9)?
各功能模块选择
提示输入错误
结束
是
否
否
是
开始
显示主界面
是否输入0-9?
输出“输入错误!
”
执行相应子程序
结束
四、详细设计
(1)主函数:
voidmain()
{
Node*equip;
equip=(Node*)malloc(sizeof(Node));
equip->next=NULL;
intflag;否是
printf("\t\t\t\t实验室设备管理系统\n");
while
(1)
{
system("cls");
printf("*************目录*************\n");
printf("\n1.添加记录\n");
printf("\n2.修改记录\n");
printf("\n3.显示记录\n");
printf("\n4.查询设备\n");
printf("\n5.删除设备记录\n");
printf("\n6.用文件保存\n");
printf("\n7.简单的帮助\n");
printf("\n8.分类统计\n");
printf("\n9.从文件输出\n");
printf("\n0.退出\n");
printf("\n请输入你要操作的序号:
\n");
printf("\n提示:
输入0则返回主菜单!
\n");
scanf("%d",&flag);
switch(flag)
{
case0:
system("cls");printf("\n>>>>>>>>>>提示:
已经退出系统,ByeBye!
\n");break;
case1:
system("cls");Add(equip);break;//添加记录
case2:
system("cls");Modify(equip);break;//修改记录
case3:
system("cls");Disp(equip);break;//显示记录
case4:
system("cls");search(equip);break;//查询设备
case5:
system("cls");delet(equip);break;//删除设备记录
case6:
system("cls");Save(equip);break;//用文件保存
case7:
system("cls");help();break;//简单的帮助
case8:
system("cls");Classify(equip);break;//分类统计
case9:
system("cls");Read_From_File();break;//从文件输出
default:
printf("\n>>>>>>>>>>提示:
输入错误!
\n");break;
}
scanf("%d",&flag);
}
}
(2)添加记录模块:
主要功能就是添加设备信息,包括设备编号、设备名称、设备种类、是否报废、报废日期、购买日期、价格等信息。
voidAdd(Node*equip)//添加记录
{
Node*p,*r,*s;
intid;//先用于输入ID,也用于判断是否跳出循环
r=equip;//s=equip->next;//使s为第一个有用的结点
if(r!
=NULL)
输入设备的详细信息
主菜单
{
while(r->next!
=NULL)//使r为最后一个有用的结点
r=r->next;//将指针置于最末尾0
}
while
(1)
{
printf("\n请你输入设备ID号<输入0表示结束>:
");
scanf("%d",&id);1
if(id==0)
{
break;
}
p=(Node*)malloc(sizeof(Node));//申请空间
p->next=NULL;
p->data.ID=id;
while
(1)
{
if(Same(equip,p->data.ID)==1)
{
printf("\n你输入了相同的设备ID号,请重新输入!
<输入0表示结束>:
");
scanf("%d",&id);
p->data.ID=id;
}
else
break;
}
if(id==0)
{
break;
}
printf("\n请输入设备名称:
");
scanf("%s",p->data.name);
printf("\n请输入设备种类:
")
scanf("%s",p->data.kind);
printf("\n请输入报废日期:
");
scanf("%d",&p->data.over);
printf("\n请输入设备是否报废:
");
scanf("%s",&p->data.yesno);
printf("\n请输入设备购买时间:
");
scanf("%d",&p->data.time);
printf("\n请输入设备价格:
");
scanf("%d",&p->data.price);
printf("\n>>>>>>>>>>提示:
已经完成一条记录的添加。
\n");
printf("\n>>>>>>>>>>提示:
输入0则返回主菜单!
\n");
r->next=p;
number++;
}
}
(3)修改记录模块:
主要功能就是对己输入设备信息进行修改,在没有设备信息的情况下将输出“没有资料可以修改!
”,在有设备信息的情况下就调用修改函数对输入编号所对应的设备信息进行修改。
voidModify(Node*equip)//修改记录
{
输入要修改的设备号
是否找到该设备
显示没有记录
对设备信息进行修改
返回主菜单
显示找到该设备,调用修改函数
Node*p;
intfind;
if(!
equip->next)
{
printf("\n>>>>>>>>>>提示:
没有资料可以修改!
\n");
return;
}
printf("请输入要修改的设备ID号:
");否是
scanf("%d",&find);
p=equip->next;
while(p!
=NULL)
{
if(p->data.ID==find)//如果找到的话返回的是符合要求
break;
p=p->next;
}
if(p)//若找到
{
//printf("请输入你想修改设备的ID\n");
printf("请输入新设备名称(原来是%s):
",p->data.name);
scanf("%s",p->data.name);
printf("请输入新设备设备种类名称(原来是%s):
",p->data.kind);
scanf("%s",p->data.kind);
printf("请输入新设备报废日期名称(原来是%d):
",p->data.over);
scanf("%d",&p->data.over);
printf("请输入新设备是否报废(原来是%s):
",p->data.yesno);
scanf("%s",p->data.yesno);
printf("请输入新设备购买时间(原来是%d):
",p->data.time);
scanf("%d",&p->data.time);
printf("请输入新设备价格(原来是%d):
",p->data.price);
scanf("%d",&p->data.price);
printf("\n>>>>>>>>>>提示:
该项记录资料已经成功修改!
\n");
}
else
printf("\n>>>>>>>>>>提示:
你要修改的信息不存在!
\n");
}
(4)输出记录模块:
主要功能就是将所输入设备信息通过显示屏进行输出展示,在没有设备信息的情况下将输出“没有记录可以显示!
”,在有设备信息的情况下将通过窗口输出所有设备记录信息。
输出记录模块
显示无记录
显示设备记录
返回主菜单
是否有记录
voidDisp(Node*equip)//输出记录
{
Node*p;
p=equip->next;
if(!
p)
{
printf("\n>>>>>>>>>>提示:
没有记录可以显示!
\n");否是
return;
}
printf("\t\t\t\t显示结果\n");
printf("设备编号设备名称设备种类报废日期是否报废购买时间价格\n");
while(p)
{
printf("\n%-11d%-11s%-11s%-11d%-11s%-11d%-5d\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
p=p->next;
}
}
五、调试与测试(调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施)
调试过程:
设置断点,一步一步进行执行并输出执行结果。
调试过程中曾出现过出现结果与预期不符、死循环、乱码等情况,经过仔细查找及检查,一步一步执行程序找到出错部位,结合个人所学以及网上资料,还有同学的帮助,最终发现是空指针乱用,遇到死循环,指针乱指,逻辑错误等问题,最终及时改正。
调试方法:
设置断点分步调试
调试过程部分截图:
六、课程设计心得及体会
这一次课程设计着实考验了我们对C语言知识的掌握情况。
真可谓是让我无从下手,焦头烂额啊。
因为我们在大二上学期学的《C语言程序设计》这门课程,大二下期末就让我们进行系统的C语言编程训练,让我们设计一个无懈可击的程序,这简直比登天还难。
刚开始感觉确实有点力不从心,但是经过开始的学习、摸索,我的程序也终于初具雏形了。
虽然在许多的功能方面有所欠缺,但是我觉得我是在进步的。
经过的慢慢上机实践学习,给我的不只是疲惫更多的是收获。
课程设计是培养学生综合运用所学知识发现、提出、分析和解决实际问题、锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。
在本次实践中,给我印象最为深刻的是在文件查询程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。
老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?
在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。
没有了柳暗花明的一天,那么我怎么能说经受住了考验?
然而,人的精神是不会败倒的。
我鼓起勇气,到处问,到处查资料,黄天不负有心人,我的程序设计终于得以问世。
课程设计到此算是基本结束,在程序设计中暴露出的我自身的问题却是非常明显!
!
首先,基础掌握不牢固。
许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,更重要研究课本,设计效率底。
其次,经典算法掌握不牢。
在编写程序的时候常常会停下来求助于书本,查看各种算法。
再次,程序量过大的时候,头绪理不清。
杂乱无章,无系统性,不便调试和阅览,自己也易于出错。
比如说少加分号,大括号,忘了先定义后使用的原则。
回顾这几天,我感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,文件,函数…通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师的辛勤指导下,终于游逆而解。
同时,在老师的身上我学得到很多实用的知识,在次我表示感谢!
最后,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!
七、源程序清单与执行结果
源程序清单:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intnumber=0;
structshebei
{
intID;
charname[100];
charkind[50];
intover;
charyesno[50];
inttime;
intprice;
};
typedefstructnode
{
structshebeidata;
structnode*next;//建立一个链表
}Node;
intSame(Node*equip,inti)
{
if(!
equip->next)
{
return-1;
}
intflag=0;
Node*p;
p=equip->next;
while(p)
{
if(p->data.ID==i)
{
flag=1;
returnflag;
}
p=p->next;
}
returnflag;
}
/********************添加记录模块********************/
voidAdd(Node*equip)//添加记录
{
Node*p,*r,*s;
intid;//先用于输入ID,也用于判断是否跳出循环
r=equip;//s=equip->next;//使s为第一个有用的结点
if(r!
=NULL)
{
while(r->next!
=NULL)//使r为最后一个有用的结点
r=r->next;//将指针置于最末尾
}
while
(1)
{
printf("\n请你输入设备ID号<输入0表示结束>:
");
scanf("%d",&id);
if(id==0)
{
break;
}
p=(Node*)malloc(sizeof(Node));//申请空间
p->next=NULL;
p->data.ID=id;
while
(1)
{
if(Same(equip,p->data.ID)==1)
{
printf("\n你输入了相同的设备ID号,请重新输入!
<输入0表示结束>:
");
scanf("%d",&id);
p->data.ID=id;
}
else
break;
}
if(id==0)
{
break;
}
printf("\n请输入设备名称:
");
scanf("%s",p->data.name);
printf("\n请输入设备种类:
");
scanf("%s",p->data.kind);
printf("\n请输入报废日期:
");
scanf("%d",&p->data.over);
printf("\n请输入设备是否报废:
");
scanf("%s",&p->data.yesno);
printf("\n请输入设备购买时间:
");
scanf("%d",&p->data.time);
printf("\n请输入设备价格:
");
scanf("%d",&p->data.price);
printf("\n>>>>>>>>>>提示:
已经完成一条记录的添加。
\n");
printf("\n>>>>>>>>>>提示:
输入0则返回主菜单!
\n");
r->next=p;
number++;
}
}
/********************修改记录模块********************/
voidModify(Node*equip)//修改
{
Node*p;
intfind;
if(!
equip->next)
{
printf("\n>>>>>>>>>>提示:
没有资料可以修改!
\n");
return;
}
printf("请输入要修改的设备ID号:
");
scanf("%d",&find);
p=equip->next;
while(p!
=NULL)
{
if(p->data.ID==find)//如果找到的话返回的是符合要求
break;
p=p->next;
}
if(p)//若找到
{
//printf("请输入你想修改设备的ID\n");
printf("请输入新设备名称(原来是%s):
",p->data.name);
scanf("%s",p->data.name);
printf("请输入新设备设备种类名称(原来是%s):
",p->data.kind);
scanf("%s",p->data.kind);
printf("请输入新设备报废日期名称(原来是%d):
",p->data.over);
scanf("%d",&p->data.over);
printf("请输入新设备是否报废(原来是%s):
",p->data.yesno);
scanf("%s",p->data.yesno);
printf("请输入新设备购买时间(原来是%d):
",p->data.time);
scanf("%d",&p->data.time);
printf("请输入新设备价格(原来是%d):
",p->data.price);
scanf("%d",&p->data.price);
printf("\n>>>>>>>>>>提示:
该项记录资料已经成功修改!
\n");
}
elseprintf("\n>>>>>>>>>>提示:
你要修改的信息不存在!
\n");
}
/********************输出记录模块********************/
voidDisp(Node*equip)//输出记录
{
Node*p;
p=equip->next;
if(!
p)
{
printf("\n>>>>>>>>>>提示:
没有记录可以显示!
\n");
return;
}
printf("\t\t\t\t显示结果\n");
printf("设备编号设备名称设备种类报废日期是否报废购买时间价格\n");
while(p)
{
printf("\n%-11d%-11s%-11s%-11d%-11s%-11d%-5d\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
p=p->next;
}
}
/********************查询设备模块********************/
voidsearch(Node*equip)//数据查询函数
{
Node*p;
p=equip->next;
intfind;
if(!
p)
{
printf("\n>>>>>>>>>>提示:
没有记录可以显示!
\n");
/return;
}
else
{
printf("请输入要查询设备设备的ID:
");
scanf("%d",&find);
while(p)
{
if(p->data.ID==find)
{
printf("\t\t\t\t显示结果\n");
printf("设备编号设备名称设备种类报废日期是否报废购买时间价格\n");
printf("\n%-11d%-11s%-11s%-11d%-11s%-11d%-5d\n",p->data.ID,p->data.name,p->data.kind,p->data.over,p->data.yesno,p->data.time,p->data.price);
break;
}
p=p->next;
}
}
printf("----------------------------------------\n没有您要查找的设备了...\n");
}
/********************删除记录模块********************/
voiddelet(Node*equip)/*删除函数*/
{
intnum;
Node*p,*pre;
if(equip->next==NULL)
{printf("无可操作的设备信息!
\n");
return;
}
else
{
printf("请输入要删除的设备的ID:
");
scanf("%d",&num);
pre=equip;
p=pre->next;
while(p->data.ID!
=num)
{
if(p->next==NULL)
break;
pre=p;
p=p->next;
}
pre->next=p->next;
free(p);
}
}
/********************简单帮助模块********************/
voidhelp()
{
printf("在主界面输入1-7的数字\n再按回车键可以进入到相应的功能界面进行操作\n另外:
系统保存的文件存放在D:
\\设备管理系统,请勿随便删除!
!
!
\n");
}
/********************分类统计模块********************/
voidClassify(Node*equip)//统计
{
Node*p;
intsel;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 设备管理 系统 语言 课程设计 报告