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 数据设计structGoods
{
stringname;
intcount=0;
doubleprime_costs=0;
doubleselling_price=0;
Goods*next=NULL;
}
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商品。
voidadd_goods(stringname,intcount,doubleprime_costs,doubleselling_price);
它有两个子函数:
更新库存信息,对应增加库存子功能,对name商品新增count数量
voidincrease_count(stringname,intcount);
更新库存列表,对应新增商品子功能,新增name商品且初始数量为count
voidadd_to_list(stringname,intcount,doubleprime_costs,doubleselling_price);
出货,对应出货模块,表示当前出货一批数量为count的name商品,如果该货物 不存在,返回0,否则,返回1,表示成功取出。
intdelete_goods(stringname,intcount);
它有两个子函数:
更新库存信息,对应减少库存子功能,对name商品减少count数量
booldecrease_count(stringname,intcount);
更新库存列表,对应删除商品子功能,删除商品列表中name商品,
booldelete_from_list(stringname);
显示当前库存列表,包括商品名及其库存量,成本价,售价;普通成员不可以看到成本价
voidshow_goods();
查看仓库中的name商品的一系列参数,普通成员不可以看到成本价,函数返回的是指向查找得到的商品的指针;如果仓库没有这个商品,返回一个默认构造的goods变量(这个变量的count是0,以此判断该商品不存在)
Goods*find_goods(stringname);
4.3 新增功能函数
新增的功能,总共有管理者函数和用户函数两部分:
4.3.1 管理者函数
首先应该包括所有的basicfunction里面的函数:
add_goods, increase_count, add_to _list;
delete_goods, decrease_count, delete_from_list;
show_goods, find_goods
修改仓库访问密码:
voidchange_password(stringpassword);
修改售价,根据商品名称进行修改。(如果存在这个商品,返回1表示修改成功,否则返回0表示修改)
intchange_price(stringname,doubleprice);
管理员查看所有用户操作(包括普通用户和管理员)如果存在该用户id,返回1表示访问成功,否则返回0表示访问失败。
intopen_file(stringid);
用户函数包括:
voidshow_goods();
Goods*find_goods(stringname);
4.4 存档所有信息函数,包括密码信息,仓库信息,用户操作信息等等
每次运行程序将之前保存的仓库信息,密码信息,用户数目写入程序
voidwrite_back(void);
这个函数用来保存关闭程序时仓库的存储情况,以免退出程序后数据丢失
而对应的文件“txt2”,就是专门用来保存仓库信息的
voidPlace_on_file(void);
这个函数可以向存储用户信息的文件写入时间信息,从而记录用户进行某一个操作的时间,返回操作具体时间
stringget_time(void);
// 本来应该有一个专门根据用户的选择,向文件输出,记录用户操作的函数
// 但是用户每个不同的操作,有不同的输入,而每个操作用户只输出一次,所以不适合把‘写向屏幕’和‘写向文件’的操作分成两个函数
// 如果非要这么做,要么(1)要么需要传递很多变量,多分很多情况,要么(2)需要定义很多全局变量,
// 所以干脆统一写在choose_function()里面了
//总之,,水平有限,,,,,,时间精力有限,,,,,,
4.5 异常处理函数voidcheck(intnum);// 用于检测用户输入是否正确
5 总结本来还想实现每个用户都有一个密码(包括管理员,普通用户,但是管理员还有管理权限密码,即管理员有两个密码),另外有一个管理员才知道的管理权限密码,并且一旦管理员注册过后,系统会知道这个ID的用户是管理员,不要再输入管理权限密码就可以进行管理员操作
还有,自己的代码重复度很高,查找算法也不好
6 程序测试
如果觉得《基于linux的银行管理 课内资源 - 基于Linux的仓库管理系统》对你有帮助,请点赞、收藏,并留下你的观点哦!