C语言课程设计报告实验设备管理系统董冰川Word文档格式.docx
《C语言课程设计报告实验设备管理系统董冰川Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告实验设备管理系统董冰川Word文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
设备编号、设备种类(如:
微机打印机扫描仪等等)、设备名称、设备价格、设备购入日期、是否报废、报废日期等。
试设计一实验设备信息管理系统,使之能提供以下功能:
(1)能够完成对设备的录入和修改
(2)对设备进行分类统计
(3)设备的查询
1需求分析
实验室设备信息用文件存储,提供文件的输入输出操作;
要能够完成设备的录入和修改,需要提供设备添加和修改操作;
实现对设备进行分类统计,需要提供排序操作;
实现对设备查询需要提供查找操作,设备的查询可根据设备编号设备种类设备购入日期正常设备(未报废的)等多种方式查询;
另外还要根据键盘式选择菜单以实现功能选择。
2总体设计与模块的划分
整个系统可设计为实验设备信息输入模块实验设备信息添加模块实验设备信息修改模块实验设备分类统计模块和实验设备查询模块。
4建立实验设备信息结构体,结构体成员包括设备编号设备种类设备名称设备价格设备购入日期是否报废报废日期。
3详细设计
3.1流程图显示
3.2程序代码设计
A主函数
主函数是整个程序的核心。
主函数的功能主要是实现“设备管理系统”文件的读写,将接点指针接入已经建立好的链表中。
并完成住操作页面的输出显示。
voidmain()
{
Node*equip;
FILE*fp;
intflag;
Node*p,*q;
printf("
\t\t\t\t设备管理系统\n"
);
equip=(Node*)malloc(sizeof(Node));
equip->
next=NULL;
p=equip;
fp=fopen("
设备管理系统"
"
wb+"
q=(Node*)malloc(sizeof(Node));
if(fread(q,sizeof(Node),1,fp))//将文件的内容放入接点中
q->
p->
next=q;
p=q;
//将该接点挂入链表中
}
fclose(fp);
//关闭文件
while
(1)
***********************操作目录********************************"
\n1添加记录\n"
\n2修改记录\n"
\n3显示记录\n"
\n4统计分类记录\n"
\n\n\n\n\n***************************************************制作人:
052093班董冰川\n"
\n0*-EXIT-*\n"
请输入你要操作的序号:
"
scanf("
%d"
&
flag);
switch(flag)
case0:
printf("
\n>
>
提示:
已经退出系统,ByeBye!
\n"
break;
case1:
Add(equip);
break;
//增加记录
case2:
Modify(equip);
//修改记录
case3:
Disp(equip);
//显示记录信息
case4:
Tongji(equip);
//统计记录
default:
输入错误!
}
B各功能模块设计
(1)输入模块
建立“shebei”结构体,以整型格式完成对每一个设备信息的输入。
Structshebei
{charID[10];
charname[15];
charkind[15];
charover[15];
charyesno[10];
chartime[10];
charprice[10];
};
(2)追加模块
输入每一个设备的信息
voidAdd(Node*equip)//添加记录
Node*p,*r,*s;
charid[10];
//先用于输入ID,也用于判断是否跳出循环
r=equip;
s=equip->
next;
//使s为第一个有用的结点
while(r->
next!
=NULL)//这个循环的作用是使r为最后一个有用的结点
r=r->
//将指针置于最末尾
输入0则返回主菜单!
\n请你输入设备ID号:
%s"
id);
if(strcmp(id,"
0"
)==0)break;
p=(Node*)malloc(sizeof(Node));
//申请空间
strcpy(p->
data.ID,id);
\n请输入设备名称:
p->
data.name);
\n请输入设备种类:
data.kind);
\n请输入报废日期:
data.over);
\n请输入设备是否报废:
data.yesno);
\n请输入设备购买时间:
data.time);
\n请输入设备价格:
data.price);
已经完成一条记录的添加。
r->
next=p;
//这一步是必需的,将p与先前的链表连起来构成一条新链表
r=p;
//也是必需的.将r又重设为新链的最后一个有用结点
(3)修改模块
先判断有无要修改的信息,如有需要又该的内容,则依次输出要修改的项目提示进行逐项修改,完成各项修改后输出提示:
“完成修改请输入0否则输入任意数再进行修改”输入“0”后结束修改操作
voidModify(Node*equip)//修改
Node*p;
charfind[20];
if(!
next)
没有资料可以修改!
return;
请输入要修改的设备ID号:
find);
p=equip->
while(p!
=NULL)
if(strcmp(p->
data.ID,find)==0)//如果找到的话返回的是符合要求
p=p->
if(p)//若找到
intx;
while
(1)
完成修改请输入0否则输入任意数再进行修改:
x);
if(x==0)
{break;
请输入新设备号(原来是%s):
data.ID);
请输入新设备名称(原来是%s):
请输入新设备设备种类名称(原来是%s):
请输入新设备报废日期名称(原来是%s):
请输入新设备是否报废(原来是%s):
请输入新设备购买时间(原来是%s):
请输入新设备价格(原来是%s):
该项记录资料已经成功修改!
elseprintf("
你要修改的信息不存在!
(4)输出记录
voidDisp(Node*equip)//输出记录
p)
没有记录可以显示!
\t\t\t\t显示结果\n"
设备号码设备名称设备种类报废日期是否报废购买时间价格\n"
while(p)
\n%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n"
data.ID,p->
data.name,p->
data.kind,p->
data.over,p->
data.yesno,p->
data.time,p->
(5)统计与查询模块
本模块将统计功能与查询功能很好的结合在了一起。
首先功能页面提示两种统计查询方式。
一个是按设备名称进行分类统计。
比如按设备名称”罗盘“统计则程序将所有设备信息中的罗盘现实输出在主页面上(具体见调试检测中的截图所示)。
如果选车按设备好统计则进入查询功能,只需根据提示内容输入设备的ID号即可将所对应的设备信息显示在主页面上。
voidTongji(Node*equip)//统计
intsel;
intflag2=0,ha=0;
charfind[20];
next)//若链表为空
没有资料可以统计分类!
\n=====>
0退出\n=====>
1按设备号统计\n=====>
2按设备名称统计\n"
sel);
if(sel==1)
\n输入你要统计分类的设备号:
while(p)
data.ID,find)==0)
flag2++;
if(flag2==1&
&
ha!
=flag2)
{printf("
ha=flag2;
elseif(flag2>
ha){printf("
if(flag2)
\n*************************按设备号%s统计分类的有%d条记录:
*************************\n\n"
find,flag2);
else{printf("
\n按设备号%s统计的结果为0个\n\n"
elseif(sel==2)
首先功能页面提示两种统计查询方式。
\n输入你要统计分类的设备名称:
data.name,find)==0)
\n******************按设备名称%s统计的有%d条记录:
********************\n\n"
\n按设备名称%s统计分类的结果为0个\n\n"
elseif(sel==0)return;
4、调试与检测
执行程序时,显示如下信息
选择不同的选项,执行相应的功能。
选择1,添加记录
选择2,修改设备信息。
选择3,可显示信息。
选择4可统计分类记录,可按两种不同方式统计
这一次课程设计着实考研了我们对C语言知识的掌握情况。
开始的几天真可谓是让我无从下手,焦头烂额啊。
因为我们在大一的时候虽然学过C语言这一门课程,但从未进行过系统的C语言编程训练,让我们设计一个无懈可击的程序简直比登天还难。
刚开始感觉确实有点力不从心,但是经过几天的学习、摸索,我的程序也终于初具雏形了。
虽然在许多的功能方面有所欠缺,但是我觉得我是在进步的。
经过几天的上机实践学习,给我的不只是疲惫更多的是收获。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。
在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。
老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?
在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。
没有了柳暗花明的一天,那么我怎么能说经受住了考验?
谢谢老师的那句话,她说:
人力有所不能及,然而,人的精神是不会败倒的。
我鼓起勇气,到处问,到处查资料,黄天不负有心人,我的程序设计终于得以问世。
课程设计到此算是基本结束,在程序设计中暴露出的我自身的问题却是非常明显!
!
首先,基础掌握不牢固。
许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,更重要研究课本,设计效率底。
其次,经典算法掌握不牢。
在编写程序的时候常常会停下来求助于书本,查看各种算法。
再次,程序量过大的时候,头绪理不清。
杂乱无章,无系统性,不便调试和阅览,自己也易于出错。
比如说少加分号,大括号,忘了先定义后使用的原则。
回顾这一周,我感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,函数,算法……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在陈老师的辛勤指导下,终于游逆而解。
同时,在陈老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!
#include"
stdio.h"
stdlib.h"
string.h"
structshebei
{
charID[10];
charname[15];
charkind[15];
charover[15];
charyesno[10];
chartime[10];
typedefstructnode
structshebeidata;
structnode*next;
//建立一个链表。
}Node;
voidAdd(Node*equip)//添加记录
//先用于输入ID,也用于判断是否跳出循环
//使s为第一个有用的结点
=NULL)//这个循环的作用是使r为最后一个有用的结点
//将指针置于最末尾
while
(1)
scanf("
if(strcmp(id,"
p=(Node*)malloc(sizeof(Node));
//申请空间
strcpy(p->
p->
r->
//这一步是必需的,将p与先前的链表连起来构成一条新链表
r=p;
voidModify(Node*equip)//修改
next)
return;
p=equip->
while(p!
{
if(strcmp(p->
data.ID,find)==0)//如果找到的话返回的是符合要求
p=p->
}
if(p)//若找到
intx;
while
(1)
if(x==0)
{break;
p-