设备管理系统设计说明书 工程力学 高云鹏.docx
《设备管理系统设计说明书 工程力学 高云鹏.docx》由会员分享,可在线阅读,更多相关《设备管理系统设计说明书 工程力学 高云鹏.docx(47页珍藏版)》请在冰豆网上搜索。
设备管理系统设计说明书工程力学高云鹏
C程序设计课程设计
任务书及说明书
设计题目设备信息管理系统
学院理学院
专业、年级工程力学
学生高云鹏
学号_____13530104
指导教师於时才
时间2014年春季学期
1摘要……………………………………………………………3
2前言……………………………………………………………4
3正文……………………………………………………………5
3.1系统分析
3.2系统总体设计
3.3详细设计
3.4系统测试及使用(操作)说明
4参考文献………………………………………………………14
5总结……………………………………………………………15
附录:
程序源代码
1摘要
本次课程设计采用C语言,开发了一个基本的设备信息管理系统,该系统具备了对设备信息的录入,按设备ID删除或者按设备名称删除,按设备ID或者名称查找数据,输出全部设备信息数据等。
对设备信息的的管理也可以更加方便快捷。
关键词:
C语言;课程设计;设备信息管理系统
2前言
随着学校的发展和对大学生要求越来越高,所需设备的数量逐渐增多,但是在设备管理是出现设备名称,设备负责人等常常出现错误。
本文针对上述问题,采用软件工程的开发原理,根据软件流程过程规范,按照需求分析、概要设计、详细设计、程序编码、测试、软件应用、软件维护等过程开发了一个设备信息管理系统。
采用c语言作为开发工具,设计了这个设备信息管理系统,解决了设备信息管理中存在的数据安全性、数据一致性等问题。
3、正文
3.1系统分析
3.3.1.设计要求
该设计要求学生以学校设备信息管理业务为背景,设计、开发一套“设备信息管理系统”软件。
通过该题目的设计过程,可以培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
得到软件工程的综合训练,提高解决实际问题的能力。
3.3.2设计任务
1、以设备信息管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;
2、完成软件结构设计和算法设计;
3、完成系统的软件开发和测试工作
设备信息包括:
设备号,设备名称,领用人,所属部门,数量,购买时间价格。
设计“设备信息管理系统”,使之能提供以下功能:
1.系统以菜单方式工作;
2.添加记录;
3.删除记录,修改记录;
4.显示记录,查询记录;
5.统计记录;
6.保存记录;
7.总价估计;
8.返回菜单;
9.退出系统;
3.2系统总体设计
一.流程图
二.总体数据结构
本系统采用结构体为主要数据结构,将设备信息,包括:
设备号,设备名称,领用人,所属部门,数量,购买时间,价格。
以链表的形式储存到计算机中。
p=(Node*)malloc(sizeof(Node));//申请空间
strcpy(p->data.ID,id);//将id指向的字符复制到p->data.ID中
printf("\n请输入设备名称:
");
scanf("%s",p->data.name);
printf("\n请输入领用人姓名:
");
scanf("%s",p->data.person);
printf("\n请输入所属部门:
");
scanf("%s",&p->data.department);
printf("\n请输入设备数量:
");
scanf("%d",&p->data.number);
printf("提示:
时间格式为2007-02-25\n");
printf("\n请输入设备购买时间:
");
scanf("%s",&p->data.time);
printf("\n请输入设备价格:
");
scanf("%d",&p->data.price);
printf("提示:
已经完成一条记录的添加。
\n");
p->next=NULL;
r->next=p;//这一步是必需的,将p与先前的链表连起来构成一条新链表
r=p;//也是必需的.将r又重设为新链的最后一个有用结点
shoudsave=1;
3.3详细设计
(1)函数及参数说明
函数原型Add()
函数功能输入数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Modify()
函数功能函数原型删除一组新数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型search()
函数功能按设备ID号查找并提示输入0以返回欢迎界面查看选项。
参数说明:
无参数要求
函数原型search()
函数功能按照设备名称查找并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Del()
函数功能按设备号查找并删除数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Del()
函数功能按设备名称查找并删除数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Disp()
函数功能输出数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Save()
函数功能保存数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型Tongji()
函数功能统计数据并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
函数原型zongjia()
函数功能总价估算并提示输入0以返回欢迎界面查看选项
参数说明:
无参数要求
(2)模块说明
模块一
voidAdd(Linkequip)//添加记录
{
Node*p,*r,*s;
charid[20];//先用于输入ID,也用于判断是否跳出循环
r=equip;
s=equip->next;//使s为第一个有用的结点
while(r->next!
=NULL)//这个循环的作用是使r为最后一个有用的结点
r=r->next;//将指针置于最末尾
while
(1)
{
printf("提示:
输入0则返回主菜单!
\n");
printf("\n请你输入设备ID号:
");
scanf("%s",id);
if(strcmp(id,"0")==0)//判断是否跳出循环
break;
while(s)//判断设备号是否已存在,如果存在,不添加
{
if(strcmp(s->data.ID,id)==0)
{
printf("=====>提示:
ID号为'%s'的设备已经存在!
\n",id);
printf("----------------------------------------------------\n");
Outname();
Out(s);
printf("----------------------------------------------------\n");
printf("\n");
return;
}
s=s->next;
}
p=(Node*)malloc(sizeof(Node));//申请空间
strcpy(p->data.ID,id);//将id指向的字符复制到p->data.ID中
printf("\n请输入设备名称:
");
scanf("%s",p->data.name);
printf("\n请输入领用人姓名:
");
scanf("%s",p->data.person);
printf("\n请输入所属部门:
");
scanf("%s",&p->data.department);
printf("\n请输入设备数量:
");
scanf("%d",&p->data.number);
printf("提示:
时间格式为2007-02-25\n");
printf("\n请输入设备购买时间:
");
scanf("%s",&p->data.time);
printf("\n请输入设备价格:
");
scanf("%d",&p->data.price);
printf("提示:
已经完成一条记录的添加。
\n");
p->next=NULL;
r->next=p;//这一步是必需的,将p与先前的链表连起来构成一条新链表
r=p;//也是必需的.将r又重设为新链的最后一个有用结点
shoudsave=1;
}
}
模块二
voidDel(Linkequip)//删除
{
intsel;
Node*r,*q;
if(!
equip->next)//若链表为空
{
printf("\n提示:
没有资料可以删除!
\n");
return;
}
printf("提示:
\n=====<1>按设备号删除\n=====<2>按设备名称删除\n");
printf("请选择1或2:
");
scanf("%d",&sel);
if(sel==1)
{
printf("请输入要删除的设备号:
");
scanf("%s",findmess);
q=equip;
r=equip->next;
while(r!
=NULL)
{
if(strcmp(r->data.ID,findmess)==0)//如果找到的话返回的是符合要求
break;
q=r;
r=r->next;
}
if(r)//若找到
{
q->next=r->next;//重置链表
free(r);//释放待删除的元素所占用的空间
printf("\n提示:
该设备资料已经成功删除!
\n");
shoudsave=1;
}
else//若找不到
printf("\n提示:
你要删除的信息不存在!
\n");
}
elseif(sel==2)
{
printf("请输入要删除的设备名称:
");
scanf("%s",findmess);
q=equip;r=equip->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)//如果找到的话返回的是符合要求
break;
q=r;
r=r->next;
}
if(r)//若找到
{
q->next=r->next;//重置链表
free(r);//释放待删除的元素所占用的空间
printf("\n提示:
该记录已经成功删除!
\n");
shoudsave=1;
}
else//若找不到
printf("\n提示:
你要删除的信息不存在!
\n");
}
}模块三
voidModify(Linkequip)//修改
{
Node*p;
if(!
equip->next)
{
printf("\n提示:
没有资料可以修改!
\n");
return;
}
printf("请输入要修改的设备ID号:
");
scanf("%s",findmess);
p=equip->next;
while(p!
=NULL)
{
if(strcmp(p->data.ID,findmess)==0)//如果找到的话返回的是符合要求
break;
p=p->next;
}
if(p)//若找到
{
intx;
menu2();
while
(1)
{
printf("请选择修改内容的序号,完成修改请输入0:
");
scanf("%d",&x);
if(x==0)
{break;}
switch(x)
{
case1:
{
printf("请输入新设备号(原来是%s):
",p->data.ID);
scanf("%s",p->data.ID);
}break;
case2:
{
printf("请输入新设备名称(原来是%s):
",p->data.name);
scanf("%s",p->data.name);
}break;
case3:
{
printf("请输入新设备领用人名称(原来是%s):
",p->data.person);
scanf("%s",p->data.person);
}break;
case4:
{
printf("请输入新设备所属部门名称(原来是%s):
",p->data.department);
scanf("%s",p->data.department);
}break;
case5:
{
printf("请输入新设备数量(原来是%d):
",p->data.number);
scanf("%d",p->data.number);
}break;
case6:
{
printf("请输入新设备购买时间(原来是%s):
",p->data.person);
printf(">>>>>>>>>>提示:
时间格式为2007-02-25\n");
scanf("%s",p->data.time);
}break;
case7:
{
printf("请输入新设备价格(原来是%d):
",p->data.price);
scanf("%d",p->data.price);
}break;
default:
printf("\n提示:
输入错误!
\n");break;
}
printf("\n提示:
该项记录资料已经成功修改!
\n");
shoudsave=1;
}
}
elseprintf("\n提示:
你要修改的信息不存在!
\n");
}
模块四
voidDisp(Linkequip)//输出记录
{
intcount=0;//count用于标记记录个数
Node*p;
//p=equip->next;
p=equip;
if(!
p)
{
printf("\n提示:
没有记录可以显示!
\n");
return;
}
printf("\t\t\t\t显示结果\n");
printf("----------------------------------------------------------------------------\n");
Outname();
while(p)
{
Out(p);
p=p->next;
}
printf("\n--------------------------------------------------------------------------\n");
printf("\n");
}}
模块五
voidTongji(Linkequip)//统计
{
Linkp,q,r,s,t;
charfindmess[20];
intsel;
intflag2=0,ha=0;//flag2用于判断保存是否成功
q=equip;
p=equip->next;
if(!
equip->next)//若链表为空
{
printf("\n提示:
没有资料可以统计!
\n");
return;
}
printf(">>>>>>>>>>提示:
\n=====<0>退出\n=====<1>按设备名称统计\n=====<2>按设备所属部门统计\n");
printf("请选择0或1或2:
");
scanf("%d",&sel);
if(sel==1)
{
printf("\n输入你要统计的设备名称:
");
scanf("%s",findmess);
while(p)
{
if(strcmp(p->data.name,findmess)==0)
{
flag2++;
}
if(flag2==1&&ha!
=flag2)
{Outname();
Out(p);
ha=flag2;
}
elseif(flag2>ha){Out(p);ha=flag2;}
p=p->next;
}
if(flag2)
{
printf("\n**********************按设备名称%s统计的有%d条记录:
*********************\n\n",findmess,flag2);
}
else{printf("\n按设备名称%s统计的结果为0个\n\n",findmess);}
}
elseif(sel==2)
{
printf("\n输入你要统计的设备所属部门名称:
");
scanf("%s",findmess);
while(p)
{
if(strcmp(p->data.department,findmess)==0)
{
flag2++;
}
if(flag2==1&&ha!
=flag2)
{Outname();
Out(p);
ha=flag2;
}
elseif(flag2>ha){Out(p);ha=flag2;}
p=p->next;
}
if(flag2)
{
printf("\n***************按设备所属部门名称%s统计的有%d条记录:
****************\n\n",findmess,flag2);
}
else{printf("\n按设备所属部门名称%s统计的结果为0个\n\n",findmess);}
}
elseif(sel==0)return;
}
模块六
voidSave(Linkequip)//保存
{
FILE*fp;//指向文件的指针的定义
Node*p;
intflag=1,count1=0;//flag用于判断保存是否成功,count用于标记记录个数
fp=fopen("设备管理系统","wb");//及wb是:
为输出打开一个二进制文件
if(fp==NULL)//若打开文件失败(即文件本来不存在)
{
printf("\n提示:
重新打开文件时发生错误!
\n");
exit
(1);
}
p=equip->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)//把p所指向的sizeof(Node)个字节输出到fp所指向的文件中
{
p=p->next;
count1++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n提示:
文件保存成功.(有%d条记录已经保存.)\n",count1);
shoudsave=0;
}
fclose(fp);
模块七
voidzongjia(Linkequip)//总价估算
{
intsum=0;
Node*p;
printf("所有设备的总价值为:
");
p=equip->next;
while(p!
=NULL)
{
sum=sum+(p->data.price)*(p->data.number);
p=p->next;
}
printf("%d",sum);
printf("\n");
}
模块八
voidsearch(Linkequip)
{
inti;
Node*r;
if(!
equip)//若链表为空
{
printf("\n提示:
没有资料可以查找!
\n");
return;
}
printf("提示:
\n=====<1>按设备号查找\n=====<2>按设备名查找\n");
printf("请选择1或2:
");
scanf("%d",&i);
if(i==1)
{
printf("请输入要查找的设备号:
");
scanf("%s",findmess);
r=equip;
while(r!
=NULL)
{
if(strcmp(r->data.ID,findmess)==0)//如果找到的话返回的是符合要求
{
printf("Year");
Disp(r);
break;
}
else
r=r->next;
}
//printf("\n提示:
你要查找的信息不存在!
\n");
}
elseif(i==2)
{
printf("请输入要查找的设备名称:
");
scanf("%s",findmess);
r=equip->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)//如果找到的话返回的是符合要求
break;
r=r->next;
}
if(r)//若找到
{
Disp(r);
}
else//若找不到
printf("\n提示:
你要查找的的信息不存在!
\n");
}
}
}3.4系统测试
1.欢迎界面并创建文件
2.录入设备信息
运行结果
3.设备信息修改
运行结果
4.设备信息查询
运行结果:
5.删除
运行结果:
6.设备总价估计
运行结果:
4参考文献
(1)C/C++程序设计,王连相等,中国科学技术出版社,2004
(2)C语言程序设计,谭浩强,清华大学出版社,1999
(3)C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
(4)C语言使用程序荟萃,西安电子科技大学出版社,1993
(5)C语言函数手册,机械工业出版社,1999
(6)C语言的实际应用,安徽科学技术出版社,2000
5程序设计总结
结束语:
通过这几天来对这个C课程的设计,使我们充分体会到了编程给我们带来的乐趣,其中我们也会遇到编译错误,有时也会令程序无法运行,但我们没有放弃,而是几个人一起讨论,仔细查找造成问题的原因。
既锻炼了我们的思维能力,有培养了我们的意志和毅力,使我们对C语言编程方面的能力得到了提高,而这些是我们在课本上所学不到的!
当然,在这次课程设计中也暴露出我们的一些不足,比如编程时想当然,一些我们表面上看似成立的程序,实际上却可能根本无法运行,只有实际用C语言编译环境中运行一下才知道程序中存在的问题。
这都是我们没有养成良好的编程习