超市管理系统(控制台版本)

发布于:2023-07-04 ⋅ 阅读:(395) ⋅ 点赞:(0)

引言

本项目利用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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到