基于C++的物资管理系统的设计与实现

LOSER

发布日期: 2018-10-19 14:40:42 浏览量: 328
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

一 需求分析

程序需实现以下功能:

  • 新物资信息录入(编号、名称、库存)

  • 查询已录入的所有物资信息(编号或名称为索引)

  • 添加物资信息(编号或名称为索引)

  • 领物资并生成领料单(编号或名称为索引)

  • 浏览领料单或物资库存清单

  • 物资信息保存,创建格式化文本

二 程序设计

程序流程图如下所示:

三 程序实现

3.1 开发环境

  • Windows XP

  • Microsoft Visual C++ 6.0

3.2 程序结构

3.2.1 函数头

  1. #include <iostream.h> //包括cin , cout , 等函数
  2. #include <string.h> //包括 类,对象,数组,等函数定义
  3. #include <fstream.h> //包括 文本文档的读/写/复制 等函数
  4. #include <stdlib.h> //包括 exit等函数

3.2.2 主函数

  1. void main ()

3.2.3 子函数

  1. void Entering(fstream); //新物资信息录入
  2. void Inquire(fstream); //单一物资查询
  3. void Append(fstream); //旧物资的添加
  4. void Getthing(fstream); //领物资
  5. void Showthing(fstream); //领料单及库存清单
  6. void CreateTxt(fstream); //物资信息生成

3.3 关键类与函数实现

3.3.1 物资类

建立一个物资类,功能模块为成员函数,物资信息为私有成员,封装性得到保证,其中,ID[10]用来存放物资编号,thingname[40]用来存放物资名称,sum是物资库存量。

  1. class Material
  2. {
  3. public:
  4. void Entering(fstream); //新物资信息录入
  5. void Inquire(fstream); //单一物资查询
  6. void Append(fstream); //旧物资的添加
  7. void Getthing(fstream); //领物资
  8. void Showthing(fstream); //物资库存清单
  9. void CreateTxt(fstream); //物资信息保存
  10. private:
  11. char ID[10];
  12. char thingname[40];
  13. long sum;
  14. };

3.3.2 录入函数

函数开头和结尾都使用system(“cls”)清除所有显示的信息。

  1. fs.write((char*)this,sizeof(Material));

将新物资信息持续录入到文件中储存

在for()中镶嵌if语句,输入choice,if(choice==0)break;退出信息录入

返回主菜单

3.3.3 查询函数

考虑到使用时不可能记得所有物资编号,所以运用了2种查询方式,包含按名称查询和按编号查询2种模式查询,实用性更高一点。

在for语句中内嵌switch语句,进行选择操作,

  1. do
  2. {
  3. fs.read((char*)this,sizeof(Material));
  4. }while(strcmp(thingname,name)!=0&&fileend!=fs.tellg());

当输入物资名称与保存在文件中的物资名称不同时,程序将文件中的信息写入内存中。

每次将信息读入内存后读指针后移,不断移动后,当输入要查询的物资名name与文件中保存的物资信息名称相同时,输出物资信息到显示器上。

按编号查询功能同上。

3.3.4 添加函数

同样运用2种模式进行添加(按名称进行添加,按编号进行添加)

在该功能模块中

  1. do
  2. {
  3. fs.read((char*)this,sizeof(Material));
  4. }while(strcmp(thingname,name)!=0&&fileend!=fs.tellg());

当输入物资名称与保存在文件中的物资名称不同时,程序将文件中的信息写入内存中,当名称相同时就输出物资的信息(相当与库存多少),而后cin>>num,当num正确时,就添加物资库存数量。

完成一次添加操作后,

  1. fs.seekp(-long(sizeof(Material)), ios::cur ); // 指针复位
  2. fs.write( (char *)this , sizeof(Material)); // 写入文件
  3. cout << "现库存量:"<< sum<< endl;

将写指针复位,将实行了添加的物资信息重新写入到文件中,同时显示已添加物资的库存信息,确保已经完成添加工作。

按编号添加功能模块大致同上

3.3.5 领物资函数

  1. do
  2. {
  3. fs.read((char*)this,sizeof(Material));
  4. }while(strcmp(thingname,name)!=0&&fileend!=fs.tellp());

将物料信息读取到内存中

  1. if(strcmp(thingname,name)==0)

当输入的物资名称和已报存的物资名称相同时,领取物料,减少库存

  1. outfile<<"第"<<i<<"次:\t"<<"领取"<<thingname<<"数量: "<<num<<" "<<"库存:"<<sum<<endl;

将领料记录用outfile输入到”领料记录文件”中,方便领料单的查询。

将领料之后的剩余库存信息重新保存到物资库存清单中,修改实际库存量。

编号查询模式大致功能代码同上。

3.3.6 库存清单及领料单函数

该函数包含领料单浏览和物资库存清单浏览2个模块。

模块1:领料单浏览

  1. char s[1024];
  2. while(fh.getline(s,1024))
  3. cout<<s<<endl;

fh.getline从领料记录文件中持续读取一行字符存放到内存s[1024]中,然后将领料记录完全展示在显示器上,实现领料单的浏览。

模块2:物资库存清单浏览

将读指针移动到“物资库存清单.dat”文件的开始,然后用do..while及成员函数read将“物资库存清单.dat”中的物资信息全部读取到内存中,而后逐个输出到显示器上,实现物资库存清单的浏览。

3.3.7 信息生成函数

从二进制文件“物资库存清单.dat”中读记录,不断将信息导入到ASCII文件“物资信息文本”中,可以直接查看物资信息。

ASCII文件“物资信息文本”建立成功。提示是否查看,输入指令,运用getline函数将信息读取到内存,展示到显示器上,实现对物资信息的保存,创建格式化文本。

四 程序运行

主菜单如下图所示:

  • 物资添加功能 选中后,可以选择2种物资添加模式(按编号或名称添加),而后输入要添加的物资的编号(或名称),即可显示该物资现有信息,输入需要添加的数量,即添加成功;添加成功后可以选择继续添加或是返回上一级菜单

  • 物资领取功能 选中后,可以选择2种物资领取模式(按编号或名称领取),而后输入要领取的物资的编号(或名称),即可显示该物资现有信息,输入需要领取的数量,即领取成功,同时保存领料记录;物资领取成功后,可以选择继续领取物资或是返回主菜单

  • 库存清单和领料单功能 选中后,输入要显示的模块(库存清单或领料单);完成物资库存清单或领料单的显示后,可以选择继续或是返回主菜单

  • 物资信息生成功能 选中后,程序会显示物资信息文档保存成功,是否查看(可选择是否查看);完成该功能模块后,以选择继续或是返回主菜单

  • 退出程序 选中后,按任意键,退出程序

五 参考文献

《C++程序设计(第二版)》 谭浩强 编著

上传的附件 cloud_download 基于C++的物资管理系统的设计与实现.zip ( 754.72kb, 6次下载 )
error_outline 下载需要11点积分

发送私信

越是憧憬,越要风雨兼程

7
文章数
9
评论数
最近文章
eject