设备管理系统设计说明书 工程力学 高云鹏.docx

上传人:b****1 文档编号:23254248 上传时间:2023-05-15 格式:DOCX 页数:47 大小:197.53KB
下载 相关 举报
设备管理系统设计说明书 工程力学 高云鹏.docx_第1页
第1页 / 共47页
设备管理系统设计说明书 工程力学 高云鹏.docx_第2页
第2页 / 共47页
设备管理系统设计说明书 工程力学 高云鹏.docx_第3页
第3页 / 共47页
设备管理系统设计说明书 工程力学 高云鹏.docx_第4页
第4页 / 共47页
设备管理系统设计说明书 工程力学 高云鹏.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

设备管理系统设计说明书 工程力学 高云鹏.docx

《设备管理系统设计说明书 工程力学 高云鹏.docx》由会员分享,可在线阅读,更多相关《设备管理系统设计说明书 工程力学 高云鹏.docx(47页珍藏版)》请在冰豆网上搜索。

设备管理系统设计说明书 工程力学 高云鹏.docx

设备管理系统设计说明书工程力学高云鹏

 

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语言编译环境中运行一下才知道程序中存在的问题。

这都是我们没有养成良好的编程习

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1