用数据库和JDBC完成控制台版本的简易商品管理系统

一、功能介绍

1、程序运行时,首先显示所有的商品信息,然后提示操作菜单,运行效果图如下:
在这里插入图片描述

2、如果选择菜单A则可以根据用户输入的商品名称的关键字搜索商品,如果有符合条件的数据则显示对应的商品信息,没有符合条件的数据提示相应的信息,效果图如下:
在这里插入图片描述

3、如果选择菜单B则提示用户输入要添加的商品名称、商品类型、销售数量以及单价,注意此处需要做数据验证,商品的名称不能为空,商品的类型必须是数据库中已经存在的类型,销售数量大于等于0,价格必须大于0,如果用户输入的数据符合上述条件则可以进行添加,否则提示相应的错误信息,商品的编号自动生成,不需要用户输入,运行效果图如下:
在这里插入图片描述

4、如果选择菜单C,则根据用户输入的商品编号来删除商品,运行效果图如下:

在这里插入图片描述

5、选择D则结束程序。

二、开发背景

  • 开发工具为mysql+IDEA。
  • 使用经典MVC模式。

M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

三、项目结构

在这里插入图片描述
在这里插入图片描述

四、file.properties

DRIVER = com.mysql.jdbc.Driver
URL = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
USER = root
PWD = root

五、DBUtils工具类

package goodsmanagesystem.utils;


import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;

import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class DBUtils {
	//	要连接的驱动类型
	private static String DRIVER = null;
	//要连接的URL
	private static String URL = null;
	//	要连接的数据库的用户名
	private static String USER = null;
	//	要连接的数据库的密码
	private static String PWD = null;

	private static QueryRunner runner ;


	static {
		//建立连接器
		File f = new File("novexam/src/goodsmanagesystem/file.properties");
		Properties p = new Properties();
		FileInputStream fis = null;
		try {
			fis = new FileInputStream(f);
			p.load(fis);
			DRIVER = p.getProperty("DRIVER");
			URL = p.getProperty("URL");
			USER = p.getProperty("USER");
			PWD = p.getProperty("PWD");
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		//连接数据库
		DruidDataSource ds = new DruidDataSource();
		ds.setUrl(URL);
		ds.setUsername(USER);
		ds.setPassword(PWD);
		ds.setDriverClassName(DRIVER);
		runner = new QueryRunner(ds);
	}

	/**
	 * 进行新增、修改、删除操作
	 * @param sql  进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL执行后受影响的行
	 */
	public static int udpate(String sql ,Object... param ){
		try {
			return runner.update(sql, param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0 ;
	}

	/**
	 * 查询1个对象封装成Bean对象
	 * @param sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的Bean对象,如果异常则返回null
	 */
	public static<T> T queryOneToBean(String sql, Class<T> clazz,Object... param  ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询只有1行结果的操作,结果封装成Map
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的1行内容封装到Map中,如果异常则返回null
	 */
	public static Map<String,Object> queryOneToMap(String sql, Object... param  ){
		try {
			return  runner.query(sql,new MapHandler(),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 有多行结果的查询操作,结果封装成List,元素为bean类型
	 * @param sql sql 进行操作的SQL语句
	 * @param clazz 结果封装的Bean类型
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static<T> List<T> queryAllList(String sql, Class<T> clazz,Object... param ){
		try {
			BasicRowProcessor brp = new BasicRowProcessor(new GenerousBeanProcessor());
			return runner.query(sql, new BeanListHandler<T>(clazz,brp),param);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 查询有多行结果的操作,结果封装成List中,元素为map类型
	 * @param sql 进行操作的SQL语句
	 * @param param 操作对应的参数,替代SQL中的占位符
	 * @return SQL操作后的多行内容封装到List中,如果异常则返回null
	 */
	public static List<Map<String,Object>> queryAllMap(String sql, Object... param ){
		try {
			return runner.query(sql,new MapListHandler(),param );
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

}

六、GoodsView(用户界面)

package goodsmanagesystem.view;


import goodsmanagesystem.beans.Good;

import java.util.List;
import java.util.Map;
import java.util.Scanner;

// 用户界面:用于用户交互
public class GoodsView {

    //创建Scanner对象
    private Scanner sc = new Scanner(System.in);

    //显示所有的商品信息
    public void showGoods(){
        System.out.println("商品信息如下:");
        System.out.println("序号\t"+"名称\t"+"类型\t"+"销售数量\t"+"价格\t");
    }

    //主界面
    public String showMenu(){
        System.out.println();
        System.out.println("操作菜单如下:");
        System.out.println("A.按关键字搜索商品");
        System.out.println("B.添加商品");
        System.out.println("C.根据商品编号删除商品");
        System.out.println("D.退出");
        System.out.print("请选择:");
        return sc.next();
    }

    //A.按关键字搜索商品
    public String searchGood(){
        System.out.print("请输入搜索的关键字:");
        return sc.next();
    }
    public void searchResult(List<Map<String, Object>> maps){
        if (maps.isEmpty()){
            System.out.println("对不起!没有符合条件的信息!");
        }else {
            maps.forEach(System.out::println);
        }
    }

    //B添加商品
    public Good insertGood(){
        System.out.print("请输入商品的名称:");
        String goods_name = sc.next();
        System.out.print("请输入商品的类型:");
        String goods_type = sc.next();
        System.out.print("请输入商品的销售数量:");
        int goods_salesnum = sc.nextInt();
        System.out.print("请输入商品的销售价格:");
        double goods_price = sc.nextDouble();
        return new Good(goods_name,goods_type,goods_salesnum,goods_price);
    }
    public void insertResult(int a){
        if (a>0){
            System.out.println("恭喜您!商品添加成功!");
        }else{
            System.out.println("添加失败!");
        }
    }


    //C根据商品编号删除商品
    public int dleGoods(){
        System.out.print("请输入要删除的商品编号:");
        return sc.nextInt();
    }
    public void delResult(int a){
        if (a>0){
            System.out.println("恭喜您!商品删除成功!");
        }else {
            System.out.println("对不起!没有找到,删除失败!");
        }

    }
    
    //退出
    public void logOff(){
        System.out.println("您选择的是退出功能");
        System.out.println("即将退出....");
    }
    
}

七、GoodsModel(业务模型)

package goodsmanagesystem.model;


import goodsmanagesystem.beans.Good;
import goodsmanagesystem.utils.DBUtils;

import java.util.List;
import java.util.Map;

//业务模型:数据处理 跟数据库相关,sql语句、调用增删改查的方法
public class GoodsModel {

    //显示所有的商品信息
    public void showGoods(){
        List<Map<String, Object>> showGoodsMaps = DBUtils.queryAllMap("SELECT * from goods;");
        for (Map m:showGoodsMaps
             ) {
            System.out.println(m.get("goods_id")+"\t"+m.get("goods_name")+"\t"+m.get("goods_type")+"\t"+m.get("goods_salesnum")+"\t"+m.get("goods_price"));
        }
    }

    //A.按关键字搜索商品
    public List<Map<String, Object>> searchGood(String name){
         return DBUtils.queryAllMap("SELECT * from goods where goods_name like \"%\"?\"%\"", name);
    }

    //B添加商品
    public int  insertGood(Good g){
        String sql = "INSERT into goods VALUES (NULL,?,?,?,?);";
        return DBUtils.udpate(sql, g.getGoods_name(), g.getGoods_type(), g.getGoods_salesnum(), g.getGoods_price());
    }

    //C根据商品编号删除商品
    public int delGood(int id){
        return DBUtils.udpate("DELETE from goods where goods_id = ?;", id);
    }
    
}

八、GoodsController(控制器)

package goodsmanagesystem.controller;


import goodsmanagesystem.model.GoodsModel;
import goodsmanagesystem.view.GoodsView;

import java.util.List;
import java.util.Map;

//控制器:调用方法
public class GoodsController {
    private static GoodsView view = new GoodsView();
    private static GoodsModel model = new GoodsModel();

    public static void main(String[] args) {
        boolean isWork=true;//管理系统退出控制器
        //1.显示所有的商品信息
        view.showGoods();
        model.showGoods();
        while (isWork){

        //2.主界面
        String result = view.showMenu();

        //退出
        if(result.equals("D") ){
                view.logOff();
                isWork=false;

        //A.按关键字搜索商品
        }else if(result.equals("A") ){

            List<Map<String, Object>> maps = model.searchGood(view.searchGood());
            view.searchResult(maps);

            //B添加商品
        }else if(result.equals("B") ){
            int insertGoodNum = model.insertGood(view.insertGood());
            view.insertResult(insertGoodNum);

            //C根据商品编号删除商品
        }else if(result.equals("C") ){
            int delGoodNum = model.delGood(view.dleGoods());
            view.delResult(delGoodNum);
        }
        }
    }
}

九、Good商品类

package goodsmanagesystem.beans;
//商品类:名称、类型、销售数量、价格
public class Good {
    private  String goods_name ;
    private String goods_type;
    private int goods_salesnum;
    private double goods_price;

    public Good() {
    }

    public Good(String goods_name, String goods_type, int goods_salesnum, double goods_price) {
        this.goods_name = goods_name;
        this.goods_type = goods_type;
        this.goods_salesnum = goods_salesnum;
        this.goods_price = goods_price;
    }

    public String getGoods_name() {
        return goods_name;
    }

    public void setGoods_name(String goods_name) {
        this.goods_name = goods_name;
    }

    public String getGoods_type() {
        return goods_type;
    }

    public void setGoods_type(String goods_type) {
        this.goods_type = goods_type;
    }

    public int getGoods_salesnum() {
        return goods_salesnum;
    }

    public void setGoods_salesnum(int goods_salesnum) {
        this.goods_salesnum = goods_salesnum;
    }

    public double getGoods_price() {
        return goods_price;
    }

    public void setGoods_price(double goods_price) {
        this.goods_price = goods_price;
    }
}

十、数据库

简易商品管理系统:
创建表
create table goods(
goods_id int PRIMARY key auto_increment,
goods_name VARCHAR(20),
goods_type VARCHAR(20),
goods_salesnum int,
goods_price DOUBLE
);


新增数据
INSERT into goods VALUES (NULL,'小米MIX2','手机',520,2999.00);
INSERT into goods VALUES (NULL,'iPhone8','手机',400,6888.00);
INSERT into goods VALUES (NULL,'联想R720','电脑',380,6399.00);
INSERT into goods VALUES (NULL,'华硕FX60','电脑',370,6999.00);
INSERT into goods VALUES (NULL,'惠普P1106','打印机',300,829.00);



查看数据
SELECT * from goods;

SELECT * from goods where goods_name like "%小米%"

删除数据
DELETE from goods where goods_id = 6;

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
购物系统是一个基于数据库的应用程序,它允许用户浏览和购买商品。使用MySQL数据库Java JDBC、Swing可以很容易地创建一个简易的购物系统。 首先,我们需要创建一个数据库来存储商品信息、用户信息和订单信息。在MySQL数据库中,我们可以创建一个名为“shopping”的数据库,并在其中创建三张表分别为“products”(存储商品信息)、“customers”(存储用户信息)和“orders”(存储订单信息)。 然后,我们可以使用Java JDBC来连接数据库并进行数据的增删改查操作。通过编写Java代码,我们可以在后台与数据库进行交互,实现从数据库中读取商品信息、用户信息以及存储订单信息的功能。 接着,我们可以使用Java Swing来创建用户界面。通过Swing,我们可以设计一个简单直观的界面,包括商品展示页面、用户登录页面、购物车页面等。用户可以通过界面浏览商品,将商品加入购物车,并完成下单操作。 最后,我们将Java JDBC和Swing结合起来,实现用户在界面上对商品的浏览和购买操作。用户可以通过界面选择商品,将商品加入购物车,输入收货信息,生成订单等操作,并且这些操作都能够通过Java JDBC数据库进行数据的增删改查。 通过以上步骤,我们就可以基于MySQL数据库Java JDBC、Swing创建一个简易的购物系统。这个系统可以让用户浏览和购买商品,并且能够通过数据库永久保存商品信息、用户信息和订单信息,实现了一个完整的购物流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝皮蛋瘦肉粥的小饶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值