1、项目概要
系统主要功能模块有:
(1)系统设置:主要包括商品修改、供货商设置、客户设置、员工设置、操作员设置的功能
(2)进货管理:主要包括采购进货、采购退货、采购入库、生产入库、来往账务的功能
(3)销售管理:主要包括商品销售、顾客退货、商品销售查询、部门领用、部门退回的功能。
(4)库存管理:主要包括库存盘点、库存调拨、库存报警,库存管理要实现实仓库际物品数量和系统内的数量保存一致,仓库库存数超出最高库存数或者最低库存数时报警。
(5)统计报表:主要包括进销存明细、进销存总汇、收货对账单、发货对账单、发货成本、销售毛利的功能
(6)来往账务:主要包括应收登记、收款登记、应收账表、应付登记、付款登记、应付账表的功能
2、数据库设计
(说明:列出整个数据库表名;业务数据表的字段清单)
2.1 系统数据表
用户表、菜单表、菜单权限表
2.2 基本数据表
品牌表、类别表、颜色表、季节表、尺码表、供应商表、单位表、vip类型表、店铺信息表、vip表
2.3 销售数据表
采购进货表、前台表、商品出货表、退货表
2.4 钱财收支数据表
钱财收入表、钱财支出表
2.5 库存与仓库数据表
库存表、仓库表
3、设计与实现
说明:把自己设计的模块分类进行截图展示、该模块用到的数据表和关系描述、界面层经
典代码截图描述。 经典代码定义:界面层控件的特殊使用、数据逻辑的特殊处理。
3.1 进货管理
3.1-1 功能实现
进货管理:主要包括采购进货、采购退货、采购入库、来往账务的功能。
(一):采购进货:见图一,是采购进货模块实现界面。
图一是采购进货审核成功后显示的页面,点击图一里面的“商品数据”按钮会把图二窗口显示出来,图二是已添加过的商品信息显示出来,显示的商品是全部未审核的商品。
点击图二的“商品新增”按钮会打开图三新增模态框,新增数据,里面可以新增商品数据,也可以新增旧的商品数据。直接打开图三是新增新的商品数据,如果想要新增就的商品数据则需要点击里面的“搜索符号”的按钮,弹出图四。
图三
打开图三的新增,单据编号是自动回填的,无法修改。折后价=吊牌价*销售折扣,折后价如果不满意是可以重新修改的。
图四
图四显示的老商品是已经审核通过了的,如果未审核通过的商品是不会出现在图四上面,而且图四回填新增在图三那里,新增的数据是回到图二那里的,需要审核后,才横出现在图一。
点击图二“审核商品”按钮,会出现提示,如图五所示。点击“确定”按钮,就会提示你审核成功,以及返回到图一界面。如果是误点的,可以点击“取消”按钮。
图五
(二):前台销售见图1,是采购出货模块实现界面。
图1
图1是销售出货的数据,包括已经销售了多少件,以及销售出去的时间。点击“销售商品”按钮就会出现图一/图2已经审核过的商品,从而对商品进行销售。
图2
需要选择一条数据,再点击“售出”按钮,会显示图3,在图3上可以选择需要销售多少数量,图3上面的一些基本数据是不被允许修改的。如果没有选择一条数据就点击“售出”按钮是会被提示没有选择需要售出的商品。如果在图2上面销售商品很多,可以选择上方的模糊查询来查找你想要的商品,从而能过提升效率。
图3
直接回填大部分数据,如果没有VIP卡号的可以直接修改商品数量,然后形成合计金额就可以直接提交数据,就可以售出成功了,然后售出成功的数据出现在图1上面。如果有VIP卡号,则可以点击“搜索”按钮,然后会出现图4,接着选择到你需要的卡号,点击“回填”按钮,就会回到这个页面付款。
图4
最后重复上述操作,就可以点击“提交”按钮,完成一个订单了。
3.1-2 相关业务表关系
(1)商品进货与销售相关表
3.1-3 经典代码
(1)自动生成单据号如下图
代码:
@RequestMapping(value = "orderNumbers", produces = "application/json;charset=utf-8")
@ResponseBody
public String orderNumbers() {
// 获取当前时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
String Datetime = dateFormat.format(new Date());
String addOrderNum = this.merchandiseService.orderNumbers();// 查询数据库最后一条的订单号
String Number = "";
// 判断是否为空
if (addOrderNum == "" || addOrderNum == null) {
Number = "0001";
} else {
String datetime = addOrderNum.substring(2, 10);//获取当前编号中的日期
// 判断编号中的日期是否与当前日期相等
if (datetime.equals(Datetime)) {
// 获取到自增数
int intOrder = Integer.parseInt(addOrderNum.substring(11, 14));
int`Order++;``
// 判断自增数是否等于小于9999
if (intOrder <= 9999) {
Number = Integer.toString(intOrder);
// 判断长度是否等于4,如果不等就往其前面补零
for (int i = 0; i < 4; i++) {
Number = Number.length() < 4 ? 0 + Number : Number;
}
}
} else {
Number = "0001";
}
}
String documentCode = Datetime + Number;// 订单编号
- return documentCode;
}
3.2 基本功能管理
3.2-1 功能实现
基本功能管理:主要包括品牌数据、分类数据、季节数据、尺码数据、颜色数据、单位数据、供应商数据和VIP分类数据。
(一):基本数据:见图 1,是品牌数据摸块实现界面。
图1
图1主要功能是增删查改的基本功能,并且里面的品牌名称不可以重复,重复出现的品牌名称会有相对应的提示。图2是分类的增删查改的基本功能
图2
图2是通过下拉树的模式,图3是季节管理的增删查改基本功能。
图3
图3中的季节名称是不可以重复的,重复出现的季节名称会有相对应的提示。图4是颜色管理,图4上面除了基本的增删查改功能外,还存在导入功能,以及它的颜色编码与颜色名字不可以重复,并且颜色编码是自动生成的,不可以进行修改。
图4
点击图4上面的“导入Excel”按钮,前提是你有需要导入的Excel,然后你点击“导入Excel”按钮,找到你想要导入的Excel。这里的颜色编码与颜色名称同样不能与已有的冲突,也是会出现相对应的提示。
当你不知道什么格式的时候,可以点击图4上面的“下载模板”,然后根据模板进行填写就可以了。
点击图4里面的“新增”按钮就会出现图5的模态框进行编辑,可以看出来,颜色编码那个文本框是不可以进行编辑的。
图5
图6是尺码管理,里面的尺码编码与尺码名称也是不就可以重复的,并且这里的尺码编码也是自动生成的,无法进行手动修改。其余的就是正常的增删查改。
图6
这里的序号是可以进行更改的,当你觉得该尺码的排序不对的时候,可以对该序号进行调整。图7是供应商管理,供应商管理是基本的增删改的功能。
图7
供应商名称与供应商手机是不可以重复的,如果重复了,这里有相对应的提示。图8是单位管理,单位管理的也是基本的增删查改功能。
图8
除了单位名称不可以重复外,别的都可以,不过创建时间是自动生成的,其余是手动生成的。图9是VIP类别管理。
图9
基本的增删改功能,如果重复就会有相对应的提示。
3.2-2 相关业务表关系
(1)基本信息相关表
3.2-3 经典代码
功能实现:自动生成颜色编码
代码:
功能实现
//颜色拼音码的生成
$("#colorName").on("keyup keydown change blur", function () {
//获取颜色名称的文本值
var colorName = $(this).val();
//去除颜色名称后面的色字
//endWith() 用于检测字符串是否使用指定字符串结尾
if (colorName.endsWith("色")) {
colorName = colorName.substr(0, colorName.length - 1);
}
//生成拼音码
var colorCode = pinyin.getFullChars(colorName);
//显示颜色拼音名称
$("#colorCode").val(colorCode);
});
3.3 进货管理
3.3-1 功能实现
系统管理:主要包括用户管理和店铺管理的功能。
(一):用户管理:见图 1,是用户模块实现界面。
图1
用户的增删改、以及授予权限,如图2所示,勾选的就是有权限的范围,需要选择是想要授予哪个角色什么样的权限,点击“授权”按钮,就可以了。
图2
图3是基础的店铺信息内容。
图3
通过店铺名称来获取内容,所以店铺名称是不可以修改的,如果想要修改,请联系管理员进行修改。店铺信息与联系人和联系电话的内容直接展示在图4首页那里。刷新以后就可以看到更改之后的信息了
图4
首页展示了是谁登陆这个系统,以及登陆的时间和一些店铺的基本信息
3.3-2 相关业务表关系
(1)系统信息相关表
3.2-3 经典代码
功能实现:店铺信息的修改
代码:
//商铺信息回填
var shopData = "${sessionScope.login_user.shopName}";
$.post("${ctx}/sysConfiguration/selectData", {shopName: shopData}, function (jsonMsg) {
//数据回填
if (jsonMsg.state) {
$('#formShop [name="id"]').val(jsonMsg.data.id);//店铺名称
$('#formShop [name="shopName"]').val(jsonMsg.data.shopName);//店铺名称
$('#formShop [name="contact"]').val(jsonMsg.data.contact);//联系人
$('#formShop [name="contactPhone"]').val(jsonMsg.data.contactPhone);//联系电话
$('#formShop [name="shopAddress"]').val(jsonMsg.data.shopAddress);//店铺地址
$('#formShop[name="discountPurchase"]').val(jsonMsg.data.discountPurchase);//采购进货默认进货折扣
$('#formShop[name="maxInventory"]').val(jsonMsg.data.maxInventory);//最大库存数
$('#formShop[name="minInventory"]').val(jsonMsg.data.minInventory);//最小库存数
}
}
4、技术总结
经过这次做项目,我们不仅学到一些新的知识,也巩固了在校期间所学到的理论知识。
以前对一些知识要点,只是粗略地知道,而具体的要点都不太清楚理解,用法却是知之甚
少。但现在项目做完了,对这段时间学到的理论知识,它们该怎么用项目的业务逻辑和步
骤,不仅提高了自己的理论水平,同时也增强了自己的实际操作能力。
通过做这次的项目,增强了自己对专业的热情,提高了自己的兴趣,为自己将来能在行业开创天地创造了一个有利条件。现在项目结束了,我也收获很多,同时也认识到了自己的诸多不足,在以后实训的生活中我将更加努力学习,虚心请教老师和同学,让自己尽早能和那些厉害的同学并肩走,同时我也期待下一个项目实训的到来,我相信在下一次项目实训中我会收获更多。我坚信通过这一段做项目的时间,所获得的实践经验对我终身受益,在我毕业后的实际工作中将不断的得到验证,我会不断的理解和体会这次项目中所学到的知识,在未来的工作中我将把我所学到的理论知识和实践经验不断的应用到实际工作来,充分展示自我的个人价值和人生价值。为实现自我的理想和光明的前程努力!