Java

您所在的位置:网站首页 java开发单机版程序有哪些 Java

Java

2024-07-17 04:00:01| 来源: 网络整理| 查看: 265

做这个系统是为了加强对前面学习的设计模式的应用,该系统运用了MVC开发模式,工厂模式,值对象,单例等设计模式,并且遵守一定的设计原则。

体验:做这个系统花了我快两周的课余时间,在这半个月中认识到MVC开发模式的种种好处,在大二时,做过一个类似的课设,但是和这个书店管理系统相比较发现:采用MVC开发模式看起来需要分很多层,而且严格遵守层间交互原则和面向接口原则。虽然设计起来很繁琐,但是在图书模块发生变动时,我很欣然的发现进货模块,销售模块,库存模块的影响很小,只有在接口交接处才会发生问题,改起来特别方便。对比大二做的学生信息管理系统,那时学生信息模块发生变动时,基本上这个程序都出问题了,想要改动基本上可以说是要重做,可以说是很痛苦。

        感受:设计模式,设计思想确实很强大,向前人(大牛)致敬。

话不多说,下面开始介绍书店管理系统:

项目功能需求:

1、能进行操作用户的注册,修改基本信息,删除和查询。 2、能对图书的基本信息进行增加、删除、修改和查询操作。 3、能填写进货单,一张进货单带有多条具体的进货信息,进货的书籍必须是图书管理里面已经有的;进货的同时修改库存对应书籍的存货量。 4、能填写销售单,一张销售单带有多条具体的销售信息,销售的书籍必须是图书管理里面已经有的,而且销售的数量不能超过当前库存的数量;销售的同时修改库存对应书籍的存货量。 5、可以查看库存的明细,可以按照条件进行查找具体的图书的库存值。 6、权限方面进行简化,做固定的权限控制。把用户按照模块分成不同操作权限的人员,特设一个admin的用户,可以操作全部的功能。

项目基本设计:         架构设计:

                    整体框架、模块划分

                    模块划分:用户、图书、进货、销售和库存5个模块

        系统功能结构设计:

                    每个功能模块的具体功能子模块

        数据库设计

                    采用文件存储,加强对文件IO的认识   

        项目框架实现:分模块、分层、分包、构建应用程序 数据库详细设计: 1.用户(因为是专用于书店管理,所有没有注册功能,会有个超级管理员的信息:账号:admin 密码:123) 用户管理(user.info)

2.图书 图书管理(book.info)

3.进货单 进货管理(inMain.info)

4.进货明细 进货明细管理(inDetail.info)

5.销售单 销售管理(outMain.info)

6.销售明细 销售明细管理(outDetail.info)

7.库存 库存管理(stock.info)

项目分包:

以in模块为例: 包:

数据层(展现接口,具体看各个模块细分,以及源码): package cn.hncu.booksManagementSystem.in.dao.dao; import java.util.Collection; import cn.hncu.booksManagementSystem.in.vo.InMainModel; import cn.hncu.booksManagementSystem.in.vo.InMainQueryModel; /** * CreateTime: 2018年4月20日 下午11:04:18 * @author 宋进宇 Email:[email protected] * Description: * InMainDAO进货管理DAO */ public interface InMainDAO { /** * 添加一条进货单 * @param inMain 进货单 * @return true-添加成功 ,false-添加失败 */ public boolean add(InMainModel inMain); /** * 通过进货单的id删除一条信息 * @param id 进货单的id * @return true-删除成功 ,false-删除失败 */ public boolean detelte(String id); /** * 更新一条进货单 * @param inMain 进货单 * @return true-更新成功 ,false-更新失败 */ public boolean update(InMainModel inMain); /** * 通过进货单的id获得一条进货单 * @param id 进货单的id * @return null-没有对应的进货单,否则有 */ public InMainModel getInMainInfoById(String id); /** * 获得所有进货单 * @return 所有进货单的集合 */ public Collection getAll(); /** * 通过查询条件获取符合条件的进货单集 * @param idqm 查询值对象 * @return 符合条件的进货单的集合 */ public Collection getInMainsByCondition(InMainQueryModel imqm); }

具体数据存放在该项目的子文件夹(data)中

逻辑层(展现接口,具体看各个模块细分,以及源码): package cn.hncu.booksManagementSystem.in.business.ebi; import java.util.Collection; import java.util.List; import cn.hncu.booksManagementSystem.in.vo.InDetailModel; import cn.hncu.booksManagementSystem.in.vo.InDetailQueryModel; import cn.hncu.booksManagementSystem.in.vo.InMainModel; import cn.hncu.booksManagementSystem.in.vo.InMainQueryModel; /** * CreateTime: 2018年4月23日 上午10:31:35 * @author 宋进宇 Email:[email protected] * @Description: * InEbi */ public interface InEbi { /** * 添加一条订单记录和多条订单明细 * @param inMain 一条订单记录 * @param details 多条订单明细 * @return true-成功,false-失败 */ public boolean add(InMainModel inMain,List details); /** * 通过查询值对象,筛选符合的进货单 * @param imqm 查询值对象1 * @param idqm 查询值对象2 * @return 进货单的集合 */ public Collection getInMainsByCondition(InMainQueryModel imqm, InDetailQueryModel idqm ); } 表现层(展现接口,具体看各个模块细分,以及源码): package cn.hncu.booksManagementSystem.in.ui; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.Collection; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingConstants; import cn.hncu.booksManagementSystem.in.business.ebi.InMainEbi; import cn.hncu.booksManagementSystem.in.business.factory.InMainEbiFactory; import cn.hncu.booksManagementSystem.in.vo.InDetailQueryModel; import cn.hncu.booksManagementSystem.in.vo.InMainModel; public class ListPanel extends JPanel { private static final long serialVersionUID = 1L; private JFrame mainFrame; private JList JList; public static Collection col = null; public static InDetailQueryModel idqm = null; //注入inMainEbi InMainEbi inMainEbi = InMainEbiFactory.getInstanceOfInMainEbi(); /** * Create the panel. */ public ListPanel( JFrame mainFrame) { this.mainFrame = mainFrame; initContentPane(); initJListData(); } public ListPanel(JFrame mainFrame, Collection resCol, InDetailQueryModel idqm) { this.mainFrame = mainFrame; col = resCol; ListPanel.idqm = idqm; initContentPane(); initJListData(); } private void initJListData() { if (col==null) { JList.setListData(inMainEbi.getAll()); }else { JList.setListData(col.toArray( new InMainModel[0])); } } private void initContentPane() { setLayout(null); JLabel label = new JLabel("进货管理"); label.setHorizontalAlignment(SwingConstants.CENTER); label.setForeground(Color.RED); label.setFont(new Font("微软雅黑", Font.BOLD, 36)); label.setBounds(310, 35, 145, 38); add(label); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(124, 103, 561, 220); add(scrollPane); JList = new JList(); scrollPane.setViewportView(JList); JList.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (e.getClickCount()==2) { InMainModel inMain = JList.getSelectedValue(); if (inMain==null) { JOptionPane.showMessageDialog(mainFrame, "请选择您要查看的订单"); return; } mainFrame.setContentPane(new DetailPanel(mainFrame, inMain,idqm)); mainFrame.validate(); } } }); JList.setFont(new Font("微软雅黑", Font.PLAIN, 16)); JButton btnToInPanel = new JButton("填写进货订单"); btnToInPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { mainFrame.setContentPane(new InPanel(mainFrame)); mainFrame.validate(); } }); btnToInPanel.setForeground(Color.BLUE); btnToInPanel.setFont(new Font("微软雅黑", Font.BOLD, 24)); btnToInPanel.setBounds(169, 363, 190, 50); add(btnToInPanel); JButton btnToQueryPanel = new JButton("查询..."); btnToQueryPanel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { mainFrame.setContentPane(new Querypanel(mainFrame)); mainFrame.validate(); } }); btnToQueryPanel.setForeground(Color.BLUE); btnToQueryPanel.setFont(new Font("微软雅黑", Font.BOLD, 24)); btnToQueryPanel.setBounds(465, 363, 128, 50); add(btnToQueryPanel); JLabel lblNewLabel = new JLabel("提示:"); lblNewLabel.setForeground(Color.RED); lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 16)); lblNewLabel.setBounds(476, 50, 61, 27); add(lblNewLabel); JLabel label_1 = new JLabel("双击进货单可以查看进货单明细"); label_1.setFont(new Font("微软雅黑", Font.PLAIN, 16)); label_1.setBounds(496, 74, 241, 27); add(label_1); } /** * 初始化 静态属性 col和idqm */ public static void initStaticAttribute() { col = null; idqm = null; } } 各个模块细分:

用户模块界面、包以及关键性代码

图书模块界面、包以及关键性代码

进货模块界面、包以及关键性代码

销售模块界面、包以及关键性代码

库存模块界面、包以及关键性代码

源码:

链接:点击打开链接 密码:rvdi

注意:

该项目没有使用到数据库,使用的是对象流进行数据的存储,所以data目录下的xxx.info文件中的数据都是乱码。

有兴趣的小伙伴可以改dao包下持久化数据的接口,改为存储到数据库即可。

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭