系列文章目录
第一章 JAVA集中学习第一周学习记录(一)
第二章 JAVA集中学习第一周项目实践
第三章 JAVA集中学习第一周学习记录(二)
第四章 JAVA集中学习第一周课后习题
第五章 JAVA集中学习第二周学习记录(一)
第六章 JAVA集中学习第二周项目实践
第七章 JAVA集中学习第二周学习记录(二)
第八章 JAVA集中学习第二周课后习题
第九章 JAVA集中学习第二周学习记录(三)
第十章 JAVA集中学习第二周学习记录(四)
第十一章 JAVA集中学习第三周学习记录(一)
第十二章 JAVA集中学习第三周小组项目开发
文章目录
前言
我消失了几天,大家可能不知道我去干什么了,其实我是回我们ൠ♄§星参加我朋友∰◉░ · ▚バが的脱单party了,顺便跟我的三位好组员做了个项目。本项目题材由不可名状的好心教育机构提供。最近一直在忙这个party,嗨呀,累死我啦!在下乃攸攸太上,现居地球,又想一起去海王星玩的外星同胞可以联系我。
代码有些,我用百度网盘存下了——全部代码网盘链接
通过百度网盘分享的文件:240731_warehouseManageProject
链接:https://pan.baidu.com/s/1YirCVHhmviq5y98GmCUGKA?pwd=0803
提取码:0803
一、项目介绍
1.项目要求
1.1 数据库表结构:
1.2 实现以下功能(详细要求会在具体实现功能时讲解):
1.3 题目要求
1、进入某个菜单后根据实际情况添加返回上一级菜单。
2、删除操作要进行二次确认。
3、分页展示处理操作菜单选项外,还要有翻页操作按钮。
4、库存类型包括三种:常温、低温、高温,产品类型同库存类型。
二、代码实现
2.1 项目分析
主菜单结构(递归):
要使用的sql语句:
2.2 重难点分析
1、分页仓库数据,每页10条数据。
计数器++ == 10后,让用户输入回车,计数器=0,继续输出
2、修改容量要判断当前仓库存放的货物容量是否充足。
遍历所有库存数据,根据仓库主键判断是否为此仓库下的,将所有此仓库下的库存容量求和,跟改变后的容量比较
3、删除仓库要判断仓库是否有货物,如果有货物不允许删除。
遍历库存表,将此仓库下的库存容量求和,如果容量不为0说明有货物
4、要校验库存容量是否超过仓库容量。
同2
5、删除操作要进行二次确认。
删除前加一个请用户输入0返回菜单
2.3 功能实现
2.3.1 用户管理
注册:
输入用户名、密码、确认密码,注册新用户
Dao层
public int insertUser(User user) {
String sql = "insert into user values(?, ?, ?)";
return db.update(sql, user.getuId(), user.getuName(), user.getuPassword());
}
Service层
private UserDao ud = new UserDaoImpl();
static Scanner scanner = new Scanner(System.in);
public boolean addUser() {
User user = new User();
user.setuId((UUID.randomUUID().toString().substring(24)));
System.out.println("请输入要注册用户的名字:");
String name = scanner.next();
user.setuName(name);
System.out.println("请输入要注册用户的密码:");
String password = scanner.next();
user.setuPassword(password);
return ud.insertUser(user) != 0 ? true : false;
}
登录:
通过用户名和密码登录
Dao层
public int selectUser(String name, String password) {
String sql = "select * from user where uName = ? and uPassword = ?";
return db.query(sql, User.class, name, password).size();
}
Service层
public boolean login() {
System.out.println("请输入要登录用户的名字:");
String name = scanner.next();
System.out.println("请输入要登录用户的密码:");
String password = scanner.next();
return ud.selectUser(name, password) != 0 ? true : false;
}
2.3.2 仓库管理
1、新建仓库
输入项:仓库名称、仓库容量、仓库地址。
Dao层
public int insertWarehouse(Warehouse warehouse) {
String sql = "insert into warehouse values(?, ?, ?, ?, ?)";
return db.update(sql, warehouse.getwId(), warehouse.getwNo(), warehouse.getwName(), warehouse.getwVol(), warehouse.getwAdress());
}
Service层
ReserveDao rd = new ReserveDaoImpl();
WarehouseDao wd = new WarehouseDaoImpl();
ProductService ps = new ProductServiceImpl();
Scanner scanner = new Scanner(System.in);
public boolean addWarehouse() {
Warehouse warehouse = new Warehouse();
System.out.println("请输入要新建仓库的编号(数字only):");
int no = scanner.nextInt();
System.out.println("请输入要新建仓库的名字:");
String name = scanner.next();
System.out.println("请输入要新建仓库的容量(数字only):");
int vol = scanner.nextInt();
System.out.println("请输入要新建仓库的地址:");
String adress = scanner.next();
warehouse.setwId((UUID.randomUUID().toString().substring(24)));
warehouse.setwNo(no);
warehouse.setwName(name);
warehouse.setwVol(vol);
warehouse.setwAdress(adress);
return wd.insertWarehouse(warehouse) != 0 ? true : false;
}
2、删除仓库
删除在列表中选中的仓库。
注意:删除仓库要判断仓库是否有货物,如果有货物不允许删除。
Dao层
public int deleteWarehouseById(String wId) {
String sql = "delete from warehouse where wId = ?";
return db.update(sql, wId);
}
Service层
public boolean deleteWarehouse() {
System.out.println("请输入要删除的仓库的主键:");
String id = scanner.next();
int volSum = 0;
ArrayList<Reserve> rlist = rd.selectReserve(id);
for (Reserve reserve :
rlist) {
volSum += reserve.getrVol();
}
if (volSum > 0){
System.out.println("仓库内有库存,无法删除");
return false;
}
System.out.println("确认删除请输入0,不删除请输入其他数字");
if (0 != scanner.nextInt())
return false;
return wd.deleteWarehouseById(id) != 0 ? true : false;
}
3、修改仓库
首先在仓库列表中选中仓库,然后对仓库数据进行修改
输入项:仓库名称、仓库容量、仓库地址。
注意:修改容量要判断当前仓库存放的货物容量是否充足。
Dao层
public int updateWarehouse(Warehouse warehouse) {
String sql ="update warehouse set wName = ?, wVol = ?, wAdress = ? where wId = ?";
return db.update(sql, warehouse.getwName(), warehouse.getwVol(), warehouse.getwAdress(), warehouse.getwId());
}
Service层
public boolean changeWarehouse() {
Warehouse warehouse = new Warehouse();
System.out.println("请输入要修改的仓库的主键:");
String id = scanner.next();
System.out.println("请输入修改后的仓库的名字:");
String name = scanner.next();
System.out.println("请输入修改后的仓库的容量:");
int vol = scanner.nextInt();
ArrayList<Reserve> rlist = rd.selectReserve(id);
int volSum = 0;
for (Reserve reserve :
rlist) {
volSum += reserve.getrVol();
}
if (volSum >vol){
System.out.println("仓库容量不足以容纳以前库存");
return false;
}
System.out.println("请输入修改后的仓库的地址:");
String adress = scanner.next();
warehouse.setwId(id);
warehouse.setwName(name);
warehouse.setwVol(vol);
warehouse.setwAdress(adress);
return wd.updateWarehouse(warehouse) != 0 ? true : false;
}
4、仓库查询
可以根据用户输入的数据按照仓库名称或仓库类型查询仓库。分页仓库数据,每页10条数据。
展示项包括:仓库标识、仓库名称、仓库容量、仓库地址。
Dao层
public ArrayList<Warehouse> selectWarehouse(Warehouse warehouse) {
String sql = "select * from warehouse where wId = ?";
return db.query(sql, Warehouse.class, warehouse.getwId());
}
Service层
public boolean searchWarehouse() {
int i = 0;
boolean b = false;
Warehouse warehouse = new Warehouse();
System.out.println("请输入要查询的仓库的主键:");
String id= scanner.next();
warehouse.setwId(id);
ArrayList list = wd.selectWarehouse(warehouse);
Iterator<Warehouse> iterator = list.iterator();
System.out.println("仓库标识\t仓库名称\t\t仓库容量\t\t仓库地址");
while (iterator.hasNext()){
b = true;
Warehouse next = iterator.next();
System.out.println(next.getwNo() + "\t\t" + next.getwName() + "\t\t" + next.getwVol().toString() + "\t\t" + next.getwAdress());
if (i++ == 10){
System.out.println("输入回车翻页");
scanner.next();
i = 0;
}
}
ps.warnProductByDeadTime();
return b;
}
2.3.3 库存管理
1、添加库存
首先选择仓库,添加库存。
输入项:库存容量、库存已用容量、库存预警容量、库存类型。
注意:要校验库存容量是否超过仓库容量。
Dao层
public int insertReserve(Reserve reserve) {
String sql = "insert into reserve values(?, ?, ?, ?, ?, ?)";
return db.update(sql, reserve.getrId(), reserve.getRwId(), reserve.getrVol(), reserve.getrVolUsed(), reserve.getrVolWarn(), reserve.getrType());
}
Service层
ReserveDao rd = new ReserveDaoImpl();
WarehouseDao wd = new WarehouseDaoImpl();
ProductService ps = new ProductServiceImpl();
Scanner scanner = new Scanner(System.in);
public boolean addReserve() {
String id = (UUID.randomUUID().toString().substring(24));
System.out.println("请输入你要添加到那个仓库的主键:");
String wid = scanner.next();
Warehouse warehouse = new Warehouse();
warehouse.setwId(wid);
ArrayList<Warehouse> wlist = wd.selectWarehouse(warehouse);
if (wlist.size() == 0){
System.out.println("输入仓库不存在,返回菜单");
return false;
}
System.out.println("请输入要新建库存的容量(数字only):");
int vol = scanner.nextInt();
ArrayList<Reserve> rlist = rd.selectReserve(wid);
int volSum = vol;
for (Reserve reserve :
rlist) {
volSum += reserve.getrVol();
}
if (volSum > wlist.get(0).getwVol()){
System.out.println("库存不足以添加新库存");
return false;
}
System.out.println("请输入要新建库存的已用容量(数字only):");
int volUsed = scanner.nextInt();
System.out.println("请输入要新建库存的预警容量(数字only):");
int volWarn = scanner.nextInt();
System.out.println("请输入要新建库存的库存类型(仅限常温、低温、高温):");
String type = scanner.next();
Reserve reserve = new Reserve(id, wid, vol, volUsed, volWarn, type);
return rd.insertReserve(reserve) != 0 ? true : false;
}
2、库存查询
分页展示库存数据,每页10条数据。
展示项包括:库存标识、仓库名称、库存类型、库存最大容量、库存已用容量、预警容量、仓库地址。
Dao层
public ArrayList<Reserve> selectReserve(String rwId) {
StringBuffer sql = new StringBuffer("select * from reserve");
if (rwId != null){
sql.append(" where rwId = ?");
return db.query(sql.toString(), Reserve.class, rwId);
}
return db.query(sql.toString(), Reserve.class);
}
Service层
public boolean searchReserve() {
boolean b = false;//红绿灯判断器
int i = 0;//翻页计数
System.out.println("库存标识\t\t\t仓库名称\t库存类型\t库存最大容量\t库存已用容量\t预警容量\t仓库地址");
Warehouse warehouse = new Warehouse();//需要根据库存找到仓库数据
ArrayList<Reserve> list = rd.selectReserve(null);
Iterator<Reserve> iterator = list.iterator();
while (iterator.hasNext()){//迭代所有的库存数据
b = true;//红绿灯变!
Reserve next = iterator.next();
warehouse.setwId(next.getRwId());//准备selectWarehouse方法参数
ArrayList<Warehouse> warehouses = wd.selectWarehouse(warehouse);//根据库存表存储的仓库主键寻找仓库数据
warehouse = warehouses.get(0);//主键UUID唯一,所以如果有仓库,一定会返回一条数据
System.out.println(next.getrId() + "\t" + warehouse.getwName() + "\t" + next.getrType() + "\t" + next.getrVol() + "\t" + next.getrVolUsed() + "\t" + next.getrVolWarn() + "\t" + warehouse.getwAdress());
if (i++ == 10){//实现回车翻页
System.out.println("输入随机字母后回车翻页");
scanner.next();
i = 0;
}
}
ps.warnProductByDeadTime();//按照题目要求,输出快过期的商品
return b;//返回红绿灯成功与否
}
3、存量预警
在库存操作中要监控库存容量,如果超出限制,给出提示,没有超出限制则不做任何操作。
Dao层
public ArrayList<Reserve> selectReserve(String rwId) {
StringBuffer sql = new StringBuffer("select * from reserve");
if (rwId != null){
sql.append(" where rwId = ?");
return db.query(sql.toString(), Reserve.class, rwId);
}
return db.query(sql.toString(), Reserve.class);
}
Service层
public boolean warnReserve() {
boolean b = false;
ArrayList<Reserve> list = rd.selectReserve(null);
Iterator<Reserve> iterator = list.iterator();
while (iterator.hasNext()){
b = true;
Reserve next = iterator.next();
if (next.getrVolUsed() > next.getrVolWarn())
System.out.println(next.toString() + "已超过内存警戒线!!请注意!!");
}
return b;
}
2.3.4 产品管理
1、产品入库
输入产品编号、数量,根据产品编号和数量查询可以存放产品的库存,选择要存放的库存,将产品存入仓库。
产品数据不需要系统维护,从产品表中获取。
注意:存入产品要根据类型校验库存是否可以存放该产品。例如,冰淇淋不能存放在常温仓库中。同样产品数量和库存容量也要做校验。
Dao层
public ArrayList<Product> selectProduct(String pId) {
StringBuffer sql = new StringBuffer("select * from product");
if (pId != null){
sql.append(" where pId = ?");
return db.query(sql.toString(), Product.class, pId);
}
return db.query(sql.toString(), Product.class);
}
public int insertProRes(ProRes proRes) {
String sql = "insert into prores values(?, ?, ?, ?)";
return db.update(sql, proRes.getPrId(), proRes.getpId(), proRes.getrId(), proRes.getInTime());
}
public int insertProWare(ProWare proWare) {
String sql = "insert into proware values(?, ?, ?)";
return db.update(sql, proWare.getPwId(), proWare.getpId(), proWare.getwId());
}
Service层
ProductDao pd = new ProductDaoImpl();
ReserveDao rd = new ReserveDaoImpl();
ProResDao prd = new ProResDaoImpl();
ProWareDao pwd = new ProWareDaoImpl();
Scanner scanner = new Scanner(System.in);
public boolean addProduct() {
System.out.println("请输入产品主键:");
String pId = scanner.next();
Product product = pd.selectProduct(pId).get(0);
System.out.println("请输入要存入的库存主键:");
String rId = scanner.next();
ArrayList<Reserve> list = rd.selectReserve(null);
Reserve reserve = null;
Iterator<Reserve> iterator = list.iterator();
while (iterator.hasNext()){
Reserve next = iterator.next();
if (next.getrId().equals(rId)){
reserve = next;
break;
}
}
if (reserve == null){
System.out.println("该库存不存在,返回菜单");
return false;
}
if (!product.getpType().equals(reserve.getrType())){
System.out.println("库存类型(" + reserve.getrType() + ")与商品类型(" + product.getpType() + ")不匹配,返回菜单");
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());
ProRes proRes = new ProRes("", product.getpId(), reserve.getrId(), date);
ProWare proWare = new ProWare("", product.getpId(), reserve.getRwId());
proRes.setPrId((UUID.randomUUID().toString().substring(24)));
proWare.setPwId((UUID.randomUUID().toString().substring(24)));
int i = prd.insertProRes(proRes);
int j = pwd.insertProWare(proWare);
return i * j != 0 ? true : false;
}
2、产品出库
输入产品编号、数量,根据产品编号和数量查询满足条件的库存,选择库存,将产品出库。
Dao层
public ArrayList<ProRes> selectProRes(String prId) {
StringBuffer sql = new StringBuffer("select * from prores");
if (prId != null){
sql.append(" where prId = ?");
return db.query(sql.toString(), ProRes.class, prId);
}
return db.query(sql.toString(), ProRes.class);
}
public int deleteProResById(String prId) {
String sql = "delete from prores where prId = ?";
return db.update(sql, prId);
}
public ArrayList<ProWare> selectProWare(String pwId) {
StringBuffer sql = new StringBuffer("select * from proware");
if (pwId != null){
sql.append(" where pwId = ?");
return db.query(sql.toString(), ProWare.class, pwId);
}
return db.query(sql.toString(), ProWare.class);
}
public int deleteProWareById(String pwId) {
String sql = "delete from proware where pwId = ?";
return db.update(sql, pwId);
}
Service层
public boolean deleteProduct() {
System.out.println("请输入产品主键:");
String pId = scanner.next();
System.out.println("请输入库存主键:");
String rId = scanner.next();
System.out.println("确认删除请输入0,不删除请输入其他数字");
if (0 != scanner.nextInt())
return false;
int i = 0, j = 0;
ArrayList<ProRes> PRList = prd.selectProRes(null);
Iterator<ProRes> PRIterator = PRList.iterator();
ProRes PRMatch = null;
while (PRIterator.hasNext()){
ProRes PRGet = PRIterator.next();
if (PRGet.getrId().equals(rId) && PRGet.getpId().equals(pId)){
PRMatch = PRGet;
i = prd.deleteProResById(PRGet.getPrId());
ArrayList<ProWare> PWList = pwd.selectProWare(null);
Iterator<ProWare> PWIterator = PWList.iterator();
while (PWIterator.hasNext()){
ProWare PWGet = PWIterator.next();
ArrayList<Reserve> RList = rd.selectReserve(null);
Iterator<Reserve> RIterator = RList.iterator();
Reserve RGet = null;
while (RIterator.hasNext()){
RGet = RIterator.next();
if (RGet.getrId().equals(PRMatch.getrId())){
break;
}
}
if (PWGet.getwId().equals(RGet.getRwId()) && PWGet.getpId().equals(pId)){
j = pwd.deleteProWareById(PWGet.getPwId());
break;
}
}
break;
}
}
return i * j != 0 ? true : false;
}
3、产品调拨
输入产品编号、数量,根据产品编号和数量查询满足条件的库存,选择库存,再查询可以存放产品的库存,进行产品调拨。
Dao层
public int insertProRes(ProRes proRes) {
String sql = "insert into prores values(?, ?, ?, ?)";
return db.update(sql, proRes.getPrId(), proRes.getpId(), proRes.getrId(), proRes.getInTime());
}
public int deleteProResById(String prId) {
String sql = "delete from prores where prId = ?";
return db.update(sql, prId);
}
public ArrayList<ProRes> selectProRes(String prId) {
StringBuffer sql = new StringBuffer("select * from prores");
if (prId != null){
sql.append(" where prId = ?");
return db.query(sql.toString(), ProRes.class, prId);
}
return db.query(sql.toString(), ProRes.class);
}
public int insertProWare(ProWare proWare) {
String sql = "insert into proware values(?, ?, ?)";
return db.update(sql, proWare.getPwId(), proWare.getpId(), proWare.getwId());
}
@Override
public int deleteProWareById(String pwId) {
String sql = "delete from proware where pwId = ?";
return db.update(sql, pwId);
}
@Override
public int updateProWare(ProWare proWare) {
return 0;
}
@Override
public ArrayList<ProWare> selectProWare(String pwId) {
StringBuffer sql = new StringBuffer("select * from proware");
if (pwId != null){
sql.append(" where pwId = ?");
return db.query(sql.toString(), ProWare.class, pwId);
}
return db.query(sql.toString(), ProWare.class);
}
Service层
public boolean productChangeReserve() {
//获取用户输入
System.out.println("请输入产品主键:");
String pId = scanner.next();
System.out.println("请输入要更改的库存主键:");
String rIdb = scanner.next();//reserveBefore
System.out.println("请输入要存入的库存主键:");
String rida = scanner.next();//reserveAfter
//确认删除操作
System.out.println("确认更改请输入0,不删除请输入其他");
if (0 != scanner.nextInt())
return false;
Product product = pd.selectProduct(pId).get(0);
int i = 0, j = 0, a = 0, b = 0;//用于最后判断
ArrayList<Reserve> RListA = rd.selectReserve(null);
Reserve reserve = null;
Iterator<Reserve> RIteratorA = RListA.iterator();
while (RIteratorA.hasNext()){//循环遍历获取要存的库存
Reserve RSet = RIteratorA.next();
if (RSet.getrId().equals(rida)){
reserve = RSet;
break;
}
}
//以下判断库存是否符合要求
if (reserve == null){
System.out.println("该库存不存在,返回菜单");
return false;
}
if (!product.getpType().equals(reserve.getrType())){
System.out.println("库存类型(" + reserve.getrType() + ")与商品类型(" + product.getpType() + ")不匹配,返回菜单");
return false;
}
//以上为新增部分,以下为删除部分
ArrayList<ProRes> PRList = prd.selectProRes(null);
Iterator<ProRes> PRIterator = PRList.iterator();
ProRes PRMatch = null;
while (PRIterator.hasNext()){//循环遍历产品库存关联表
ProRes PRGet = PRIterator.next();
if (PRGet.getrId().equals(rIdb) && PRGet.getpId().equals(pId)){
//库存Id和产品Id匹配
PRMatch = PRGet;
i = prd.deleteProResById(PRMatch.getPrId());
ArrayList<Reserve> RList = rd.selectReserve(null);
Iterator<Reserve> RIterator = RList.iterator();
Reserve RGet = null;
while (RIterator.hasNext()){//循环遍历库存表
RGet = RIterator.next();
if (RGet.getrId().equals(PRMatch.getrId())){
break;
}
}
ArrayList<ProWare> PWList = pwd.selectProWare(null);
Iterator<ProWare> PWIterator = PWList.iterator();
while (PWIterator.hasNext()){//循环遍历产品仓库关联表
ProWare PWGet = PWIterator.next();
if (PWGet.getwId().equals(RGet.getRwId()) && PWGet.getpId().equals(pId)){
//仓库Id和产品Id是否匹配
j = pwd.deleteProWareById(PWGet.getPwId());
break;
}
}
break;
}
}
//多线程可能好点,不是多线程可能中途死机时多出来数据少一条数据
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());
ProRes proRessave = new ProRes("", product.getpId(), reserve.getrId(), date);
ProWare proWare = new ProWare("", product.getpId(), reserve.getRwId());
proRessave.setPrId((UUID.randomUUID().toString().substring(24)));
proWare.setPwId((UUID.randomUUID().toString().substring(24)));
a = prd.insertProRes(proRessave);
b = pwd.insertProWare(proWare);
return a * b * i * j != 0 ? true : false;
}
4、质量预警
查询仓库或库存时,根据产品保质期提示10天内要过期的产品,并显示所在仓库和库存。
Dao层
public ArrayList<ProRes> selectProRes(String prId) {
StringBuffer sql = new StringBuffer("select * from prores");
if (prId != null){
sql.append(" where prId = ?");
return db.query(sql.toString(), ProRes.class, prId);
}
return db.query(sql.toString(), ProRes.class);
}
public ArrayList<ProWare> selectProWare(String pwId) {
StringBuffer sql = new StringBuffer("select * from proware");
if (pwId != null){
sql.append(" where pwId = ?");
return db.query(sql.toString(), ProWare.class, pwId);
}
return db.query(sql.toString(), ProWare.class);
}
Service层
public boolean warnProductByDeadTime() {
ArrayList<Product> products = pd.selectProduct(null);
ArrayList<Product> dyingProducts = new ArrayList<>();
Iterator<Product> iterator = products.iterator();
int i = 0, j = 0;
ProRes proRes = null;
while (iterator.hasNext()){//循环获取快到期或已过期的产品组成新集合
Product next = iterator.next();
if (countTime(next.getpDeadDate()) < 10){
dyingProducts.add(next);
}
}
Iterator<Product> iterator1 = dyingProducts.iterator();
while (iterator1.hasNext()){//迭代器循环快过期的商品集合
Product next = iterator1.next();
ArrayList<ProRes> proRes1 = prd.selectProRes(null);
Iterator<ProRes> iterator2 = proRes1.iterator();
while (iterator2.hasNext()){//遍历产品库存关联表找到快过期的产品的库存
ProRes next1 = iterator2.next();
if (next1.getpId().equals(next.getpId())){
System.out.println(next.toString() + "快过期了!!");
System.out.println("所在库存主键为" + next1.getrId());
ArrayList<ProWare> proWare1 = pwd.selectProWare(null);
Iterator<ProWare> iterator3 = proWare1.iterator();
ArrayList<Reserve> list = rd.selectReserve(null);
Iterator<Reserve> iterator4 = list.iterator();
Reserve next4 = null;
while (iterator4.hasNext()){//遍历获得库存数据,为了获得数据内仓库Id
next4 = iterator4.next();
if (next4.getrId().equals(next1.getrId())){
break;//不break外层,以防有不同库存同时存储同一产品
}
}//需要判断库存的仓库Id,而不是直接使用产品仓库关联表根据产品Id查找是为了以防有不同库存同时存储同一产品
while (iterator3.hasNext()){//获得仓库Id,以及确认库存——产品——仓库三者互相对应
ProWare next2 = iterator3.next();
if (next2.getpId().equals(next1.getpId()) && next2.getwId().equals(next4.getRwId())){
System.out.println("所在仓库主键为" + next2.getwId());
break;
}
}
//不break,以防有不同库存同时存储同一产品
//break;
}
}
}
return true;
}
public int countTime(String dead1){
SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd");//设置格式化
try{
String nowTime1 = sdFormat.format(new Date());//获取格式化的当前时间
Date nowTime2 = sdFormat.parse(nowTime1);
long nowTime3 = nowTime2.getTime();
Date dead2 = sdFormat.parse(dead1);
long dead3 = dead2.getTime();
return ((int)((dead3 - nowTime3)/1000/60/60/24));//将毫秒数转化为天数
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
全部代码网盘链接
总结
写的还是太慢了,本来11点就能结束的任务硬生生拖到凌晨1点,接口定的也没考虑周到。
但逻辑错误很少,也是这个题没什么逻辑复杂的地方。
本人sql语句都忘光了,所以只用了基础的增删改查,产品调拨的地方有很多不必要的循环,很多能用一句sql语句实现。
总的来说,忙得不可开交,结果还说得过去,80分吧。
以下是时间节点:
7.31进度:
3:00——4:00定数据库结构,创建数据库,做方法和表的思维导图分享给另外两位组长
4:00——5:50根据数据库内容创建pojo层,Dao层,Service层,以及Dao层、Service层的impl,向Dao层中每个接口添加基础的增删改查方法
7:00——8:00为了更好实现dbHelper类的多态,学习反射知识,学习如何改进dbHelper,以及如何导出导入数据库中的表
8:00——9:30写service层接口并添加详细注释,根据需求修改思维导图
9:30——9:55向组员介绍导入数据库方法,写好的pojo、Dao、Service层实体类与接口,介绍所有方法的实现方法、基本思路
9:55——10:30修改Dao层输入,以更好的接受Service层的传入,总结今日内容
8.01进度
8:00——9:00考虑到安全性,我将所有主键从int型改为UUID生成的String型,写Dao层的注册用户,测试写好的DBHelper能否正确运行
9:00——9:50写完注册、登录方法
9:50——11:30写完仓库表所用四个方法,未进行调试
12:10——12:30进行仓库表调试
12:30——1:21进行库存表增删改查
2:09——3:33给组员讲题
3:33——4:37进行库存表三个方法实现
5:10——6:00/6:30——10:30进行产品表、产品仓库关联表、产品库存关联表的方法实现。目前所有功能已经完成,主菜单还未实现
12:30——12:40绘制主菜单思维导图
12:45——1:09编写并调试主菜单