引言
本项目利用JCBC技术来实现,目的是为了对Java程序开发有更加深入的了解。同时,也是对Java面向对象特性的一次深入了解;并且,本项目结构采用MVC结构,更加符合实际程序结构。同时,没有太过复杂的业务逻辑处理,适合新手练习(源码下载)。
分析
以下是对程序的结构分析:
1.模块结构图:
2.业务流程图(不规范):
3.数据库分析:
其中,一个表单对应一个实体类,方便数据交换
4.系统文件文件夹组织结构
各文件夹功能简介:
1)实体类:与表单一致
2)持久层:负责与数据库进行数据交换
3)业务逻辑层:负责业务逻辑处理
4) 控制层: 封装底层类,提供控制入口
5)视图层:负责进行人机交互
5.重要代码分析(其余代码见源程序):
import com.smj.supermarket.dao.GoodsDao;
import com.smj.supermarket.dao.MemberDao;
import com.smj.supermarket.dao.OrderDao;
import com.smj.supermarket.dao.impl.IGoodsDao;
import com.smj.supermarket.dao.impl.IMemberDao;
import com.smj.supermarket.dao.impl.IOrderDao;
import com.smj.supermarket.db.DBConnection;
import com.smj.supermarket.entity.Goods;
import com.smj.supermarket.entity.Member;
import com.smj.supermarket.entity.Order;
import com.smj.supermarket.entity.Orderdetail;
import com.smj.supermarket.util.StringUtil;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
/**
* 结账业务逻辑处理
*/
public class OrderServer {
private final Connection conn;
private OrderDao orderDao;
private MemberDao memberDao;
private GoodsDao goodsDao;
public OrderServer(){
this.conn = DBConnection.getInstance().getConn();
this.orderDao = new IOrderDao(conn);
this.goodsDao = new IGoodsDao(conn);
this.memberDao = new IMemberDao(conn);
}
/**
* 根据编号获取会员信息
*/
public Member getMember(String number){
if(StringUtil.isEmpty(number)){
return null;
}
try {
return memberDao.getMember(number);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
/**
* 根据商品名称获取商品信息
*/
public Goods getGoods(String name){
if(StringUtil.isEmpty(name)){
return null;
}
try {
return goodsDao.getGoods(name);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
/**
* 结账———商品订单、商品详情、修改库存、修改会员积分
*/
public boolean checkout(Order order, List<Orderdetail> list,String number){
//参数非空校验
if(order == null){
return false;
}
if(list == null || list.size() ==0){
return false;
}
int i = 0;
boolean re = false;
try {
conn.setAutoCommit(false); //修改自动提交事务
//插入订单表数据
i = orderDao.addOrder(order);
//插入订单详情表
i = orderDao.addOrderDeatils(list);
if (number != null) {//会员结账,修改会员积分
i = memberDao.setMember(number, null, (int)order.getTotal()/10);
}
//修改库存
for (Orderdetail detail:list) {
i += goodsDao.updateByname(new Goods(null,detail.getGoodsname(),null,-detail.getCount()));
}
if(i>0) {
conn.commit();
re = true;
}else{
conn.rollback(); //事务回滚
}
conn.setAutoCommit(true); //修改事务自动提交
}catch (Exception e){
e.printStackTrace();
}
return re;
}
}
本段代码为结账功能模块的业务逻辑处理。其中出现了MySQL的事务处理。想了解更多可以网上搜索。MySQL默认为事务自动提交,而此处出现了多条sql语句,因此将其设置为手动提交事务。注意:在处理完毕之后,一定要将其还原为自动提交,否则后面的数据库交互会出现问题;
以上,便是项目的全部分析,如果想要获取源码点击页首源码下载进行下载(内附程序演示视频以及实训报告)
以上为本人学习、实训项目。其中难免有不足之处,望指教!
本文含有隐藏内容,请 开通VIP 后查看