基于Linux的仓库管理系统

Tenderne

发布日期: 2018-11-05 21:48:32 浏览量: 652
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

1 需求分析

要求的仓库管理系统的功能如下:

  • 查看仓库库存列表功能

  • 查询功能:可以随时查看当前仓库的库存中的某些商品的一系列信息,包括商品名,剩余量

  • 进货功能:(以下两个功能是根据输入自动选择的)

    • 在仓库进货时,如果仓库中没有此商品,则为仓库增添新的商品项目
    • 在仓库进货时,如果仓库中已有此商品,则增加此商品的库存量
  • 出货功能:

    • 在仓库出货时,减少对应商品的库存量
    • 在仓库出货时,如果这是货物是此商品的最后一批货(库存量为0),则删除仓库中此商品项目
  • 退出程序时存储仓库信息

  • 记录仓库管理日志

仓库管理系统的功能如下(分为管理员和普通用户):

管理员可以执行的功能

  • 退出程序

  • 查看仓库库存列表功能

  • 查询功能:可以随时查看当前仓库的库存中的某些商品的一系列信息,包括商品名,剩余量,售价(管理员还可以查看成本价)

  • 进货功能:(以下两个功能是根据输入自动选择的)

    • 在仓库进货时,如果仓库中没有此商品,则为仓库增添新的商品项目
    • 在仓库进货时,如果仓库中已有此商品,则增加此商品的库存量
  • 出货功能:

    • 在仓库出货时,减少对应商品的库存量
    • 在仓库出货时,如果这是货物是此商品的最后一批货(库存量为0),则删除仓库中此商品项目
  • 更改产品价格功能

  • 管理员可以更改获取管理权限的密码

  • 管理员可以查看所有用户的操作历史记录

普通用户可以执行的功能

  • 退出程序

  • 查看仓库库存列表

  • 查询功能:可以随时查看当前仓库的库存中的某些商品的一系列信息,包括商品名,剩余量,售价

仓库资料库功能(有一个固有文件txt1,存储管理密码和用户数目;一个固有文件存储仓库信息txt2)

  • 退出程序时存储仓库信息 (每次运行程序时,将txt2中的仓库信息写入程序,同时将txt1里面的密码;程序结束前,把仓库信息保存到txt2里面,同时也保存密码信息进入txt1)

  • 记录仓库管理日志(每个注册的用户都会在注册时产生一个记录其操作历史的文件,文件名就是ID号,由txt1里面的用户总数产生,每次注册 “用户总数”++,产生该文件。)

输入异常处理功能

  • 每次用户输入都会检测用户输入是否正确(一个check()函数)

2 实现思路

2.1 功能结构图

本仓库管理系统主要分为出货、进货、查询、列表库存、修改商品价格、修改管理密码、查看历史记录。七大模块,分别对出货、进货、查询、修改商品价格、修改管理密码、查看历史记录等的操作进行管理。

进货模块中又细分为增加库存和新增商品子功能,当进货时,若此商品在仓库中没有库存,则在仓库库存条目中新增此商品项目,若已有此类商品,则根据进货量增加对应的库存量。
出货模块中又细分为减少库存和删除商品子功能,当出货时,减少对应商品的数目,注意到当库存不足时,出货失败,且若出货成功并且库存为0时,删除仓库目录中此商品项目。

具体的实现方法是:

  • 设计一个链表,通过遍历链表打印商品信息来 实现显示商品库存的函数

  • 通过遍历链表,比较用户输入的name查找商品来 实现查找商品的函数

  • 然后在进货时,通过查找函数判断库存中是否有该商品,从而决定执行新增商品/增加库存

  • 同样在出货时,通过查找函数判断库存中是否有该商品,如果有,再进一步判断商品的数目与用户想要的数目,从而选择delete商品/decrease商品

  • 修改价格时 通过查找函数得到指向该商品的指针,从而更改价格

  • 修改管理密码则是直接更改全局变量Password,最后把改完的结果输入txt1

  • 查看历史记录是根据用户(管理员)输入的ID打开相应的用户文件,把文件内容写到终端

通过以上方法,最终实现了:七个主要功能(对普通用户而言只有两个功能,即1,2功能)、一个简单加密管理系统、生成文件并存储用户操作记录、存档仓库信息。

3 数据设计

  1. struct Goods
  2. {
  3. string name;
  4. int count = 0;
  5. double prime_costs = 0;
  6. double selling_price = 0;
  7. Goods *next = NULL;
  8. }

name表示名称,count表示数量,prime_cost表示进价,selling_cost表示售价,count表示货物数量。其中,管理员可以访问所有变量,并赋予所有变量初始值,并且可以在之后更改售价。用户只能读取除了进价以外的数据,不能进行写操作。

4 函数设计

4.1 关于交互信息的函数

  • 询问用户是不是管理员并审核,如果是manager,返回真且ret全局变量置为1,表示表示manager,不是manager返回真且ret=0,否则输入错误,返回假,要求重新输入
    bool is_manager(void);

  • 打印该仓库系统的功能:int print_function();

  • 根据用户所选数字确定对应的用户想要的功能,如果用户选择退出程序,返回0;否则正常执行,返回1。int choose_function();

4.2 基本函数声明

进货,对应进货模块,表示当前进货一批数量为count的name商品。

  1. void add_goods(string name, int count, double prime_costs, double selling_price);

它有两个子函数:

  • 更新库存信息,对应增加库存子功能,对name商品新增count数量
  1. void increase_count (string name, int count);
  • 更新库存列表,对应新增商品子功能,新增name商品且初始数量为count
  1. void add_to_list(string name, int count, double prime_costs, double selling_price);

出货,对应出货模块,表示当前出货一批数量为count的name商品,如果该货物 不存在,返回0,否则,返回1,表示成功取出。

  1. int delete_goods(string name, int count);

它有两个子函数:

  • 更新库存信息,对应减少库存子功能,对name商品减少count数量
  1. bool decrease_count(string name, int count);
  • 更新库存列表,对应删除商品子功能,删除商品列表中name商品,
  1. bool delete_from_list(string name);

显示当前库存列表,包括商品名及其库存量,成本价,售价;普通成员不可以看到成本价

  1. void show_goods();

查看仓库中的name商品的一系列参数,普通成员不可以看到成本价,函数返回的是指向查找得到的商品的指针;如果仓库没有这个商品,返回一个默认构造的goods变量(这个变量的count是0,以此判断该商品不存在)

  1. Goods* find_goods(string name);

4.3 新增功能函数

新增的功能,总共有管理者函数和用户函数两部分:

4.3.1 管理者函数

首先应该包括所有的basicfunction里面的函数:

  • add_goods, increase_count, add_to _list;

  • delete_goods, decrease_count, delete_from_list;

  • show_goods, find_goods

修改仓库访问密码:

  1. void change_password(string password);

修改售价,根据商品名称进行修改。(如果存在这个商品,返回1表示修改成功,否则返回0表示修改)

  1. int change_price(string name, double price);

管理员查看所有用户操作(包括普通用户和管理员)如果存在该用户id,返回1表示访问成功,否则返回0表示访问失败。

  1. int open_file(string id);

用户函数包括:

  1. void show_goods();
  2. Goods* find_goods(string name);

4.4 存档所有信息函数,包括密码信息,仓库信息,用户操作信息等等

每次运行程序将之前保存的仓库信息,密码信息,用户数目写入程序

  1. void write_back(void);

这个函数用来保存关闭程序时仓库的存储情况,以免退出程序后数据丢失
而对应的文件“txt2”,就是专门用来保存仓库信息的

  1. void Place_on_file(void);

这个函数可以向存储用户信息的文件写入时间信息,从而记录用户进行某一个操作的时间,返回操作具体时间

  1. string get_time(void);
  2. // 本来应该有一个专门根据用户的选择,向文件输出,记录用户操作的函数
  3. // 但是用户每个不同的操作,有不同的输入,而每个操作用户只输出一次,所以不适合把‘写向屏幕’和‘写向文件’的操作分成两个函数
  4. // 如果非要这么做,要么(1)要么需要传递很多变量,多分很多情况,要么(2)需要定义很多全局变量,
  5. // 所以干脆统一写在choose_function()里面了
  6. //总之,,水平有限,,,,,,时间精力有限,,,,,,

4.5 异常处理函数

  1. void check(int num); // 用于检测用户输入是否正确

5 总结

  • 本来还想实现每个用户都有一个密码(包括管理员,普通用户,但是管理员还有管理权限密码,即管理员有两个密码),另外有一个管理员才知道的管理权限密码,并且一旦管理员注册过后,系统会知道这个ID的用户是管理员,不要再输入管理权限密码就可以进行管理员操作

  • 还有,自己的代码重复度很高,查找算法也不好

6 程序测试

上传的附件 cloud_download 基于Linux的仓库管理系统.7z ( 1.79mb, 54次下载 )
error_outline 下载需要5点积分

keyboard_arrow_left上一篇 : 基于JSP的房屋出租管理系统设计与实现 基于JAVA的贪吃蛇游戏 : 下一篇keyboard_arrow_right



Tenderne
2018-11-05 21:49:00
基于Linux的仓库管理系统
洋葱味西瓜
2019-05-13 14:04:43
是不是给错附件了。不应该是仓库的吗?
Tenderne
2019-05-13 18:58:11
已经更正了,谢谢楼上~~

发送私信

回首才能读懂人生,但频频回首会耽误你往前走

11
文章数
17
评论数
最近文章
eject