打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
java项目超市管理系统

一.概述

1.鹏哥前面有写过java项目超市管理系统项目,传送门

2.收到很多朋友私信给我,也很感谢老铁们的反馈和交流,前面这个项目只是对java基础知识和面向对象的思想练习,但是没有涉及到java如何操作数据库,如何通过java将数据从数据库拿出来,如果存进去这些问题。对于java新手来说,这些问题不知道从何处下手。有很多刚入门的java新手建议我写个java操作数据库的实战项目供入门者参考,我想如果能帮助他们少花点时间出坑,何乐不为?鹏哥就特意思考了一天,整理了一下思路,今天就抽时间写个超市购物管理系统.....go go go

3.超市购物管理系统涉及到的知识:java基础语法,java面向对象的开发思想,java如何操作数据库,集合方面的知识

4.适合java入门,不知道java如何操作数据库

5.基本所有的代码鹏哥会打上注释,方便阅读

6.因为是java操作数据库的实战项目,不会详细讲解java环境搭建,数据库安装,sql语法这些知识。太多了,我写一周不见得写完.....或者可以去鹏哥站 java一号 查看相关文章。所以开始之前你总的把java开发环境安装好吧、数据库安装好吧、

7.开发工具eclipse;jdk是1.8;数据库用的是mysql5.5 (当然sqlserver数据库完全可以)

8.源码获取:我会将核心代码粘贴出来,所有的代码关注鹏哥公众号  java一号  实战项目中会给出

二:效果演示

=================欢迎使用超市购物管理系统=================1.商品入库2.根据商品编号查询商品3.商品列表4.购买商品5.删除商品6.更新商品0.退出系统请输入要执行的操作3编号	名称	单价	数量	1234	苹果	12.0	35	1235	衣服	123.0	0	1236	篮球	200.0	20	输入y继续/否则退出y1.商品入库2.根据商品编号查询商品3.商品列表4.购买商品5.删除商品0.退出系统请输入要执行的操作4输入购买商品的编号1235输入购买商品的数量1此商品库存0  无法购买;输入y继续购买/输入其他结算y输入购买商品的编号1234输入购买商品的数量2购买成功输入y继续购买/输入其他结算1236编号	名称	数量	总价1234	苹果	2	24.0总计消费:24.0元输入y继续/否则退出y1.商品入库2.根据商品编号查询商品3.商品列表4.购买商品5.删除商品0.退出系统请输入要执行的操作5输入要刪除的商品编号4564沒有此商品输入y继续/否则退出y1.商品入库2.根据商品编号查询商品3.商品列表4.购买商品5.删除商品0.退出系统请输入要执行的操作3编号	名称	单价	数量	1234	苹果	12.0	33	1235	衣服	123.0	0	1236	篮球	200.0	20	输入y继续/否则退出y1.商品入库2.根据商品编号查询商品3.商品列表4.购买商品5.删除商品0.退出系统请输入要执行的操作4输入购买商品的编号1234输入购买商品的数量2购买成功输入y继续购买/输入其他结算y输入购买商品的编号1234输入购买商品的数量2购买成功输入y继续购买/输入其他结算t编号	名称	数量	总价1234	苹果	4	48.0总计消费:48.0元输入y继续/否则退出

三:创建项目

在eclipse创建一个ShopManager项目

接着我们将数据库驱动jar包引入(可以去官网下载或者在我的公众号 java一号  回复  jdbc  即可获取,);

java和这个数据库驱动有什么关系呢?简单理解就是这个数据库驱动是java和数据库中间的桥梁,用于两者通信。

创建lib的文件夹

将我们准备好的驱动复制到这个lib中

在这个驱动上右键执行

最后完整的结构

创建项目结构,很重要,很重要,很重要,这些都是开发要注意的,对于这些小项目而言,完全可以将所有的代码类都放在src下,但是以后项目越来越大,所有的类成千上百个,都放在src,没有分包的的话,项目项目其他开发者看到代码什么承受多少点伤害。

这个系统中比较简单,下面四个包就可以,其中app包用于放系统主入口类,pojo放系统涉及的实体类,service放系统业务,utils放系统中的工具类;test临时测试类

四:连接数据库

因为系统会涉及到多次对数据库中数据的访问,所以我们将连接数据库操作写成一个工具类DbUtil,不要每次涉及到操作数据库就写重复的连接代码。

package com.javayihao.top.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * @date 2019-12-9 * @Description 连接数据库工具类 * @author com.javayihao.top */public class DbUtil {	//把几个用于连接数据库的字符串定义成常量,不必每次去创建	private static final String USER = "root";//数据库用户名	private static final String UPWD = "root";//数据库密码	//本地数据库shop	private static final String URL = "jdbc:mysql://localhost:3306/shop";	//驱动	private static final String DRIVER = "com.mysql.jdbc.Driver";	//注册驱动	static {		try {			Class.forName(DRIVER);		} catch (ClassNotFoundException e) {			e.printStackTrace();		}	}	//得到数据库连接对象Connection的函数	public static Connection getConnection() throws SQLException {		return DriverManager.getConnection(URL, USER, UPWD);	}	//关闭连接和 执行 的打开资源	public static void close(Connection connection, Statement statement) {		if (statement != null) {			try {				statement.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		if (connection != null) {			try {				connection.close();			} catch (SQLException e) {				e.printStackTrace();			}		}	}	//关闭所有的打开资源	public static void close(Connection connection, Statement statement, ResultSet rs) {		if (statement != null) {			try {				statement.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		if (connection != null) {			try {				connection.close();			} catch (SQLException e) {				e.printStackTrace();			}		}		if (rs != null) {			try {				rs.close();			} catch (SQLException e) {				e.printStackTrace();			}		}	}}

测试

package com.javayihao.top.test;import java.sql.Connection;import java.sql.SQLException;import com.javayihao.top.utils.DbUtil;/** * @date 2019-12-9 * @Description 测试数据库连接类 * @author com.javayihao.top */public class DbUtilTest {	public static void main(String[] args) throws SQLException {		Connection con = DbUtil.getConnection();		System.out.println(con);	}}

如下,说明数据库连接成功

五:创建实体类

package com.javayihao.top.pojo;/** * @date 2019-12-9 * @Description 商品实体 * @author com.javayihao.top */public class Good {	//商品编号	private int id;	//商品名称	private String name;	//商品价格(价格可能涉及到小数,这里使用float,当然真正大型购物平台不会使用float,有兴趣的朋友可以上网了解)	private float price;	//库存	private int num;	//空参构造	public Good() {		super();	}	//打印方法	@Override	public String toString() {		return "Good [id=" + id + ", name=" + name + ", price=" + price + ", num=" + num + "]";	}	//有参构造,方便初始化对象	public Good(int id, String name, float price, int num) {		super();		this.id = id;		this.name = name;		this.price = price;		this.num = num;	}	//set get方法	public int getId() {		return id;	}	public void setId(int id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public float getPrice() {		return price;	}	public void setPrice(float price) {		this.price = price;	}	public int getNum() {		return num;	}	public void setNum(int num) {		this.num = num;	}}

 六:数据库

本地创建数据库shop,创建表t_good

CREATE TABLE `t_good` (  `id` int(5) NOT NULL,  `name` varchar(25) NOT NULL,  `price` float(10,2) NOT NULL,  `num` int(5) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

七.核心业务

package com.javayihao.top.service;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.Scanner;import com.javayihao.top.pojo.Good;import com.javayihao.top.utils.DbUtil;/** * @date 2019-12-9 * @Description 系统主界面 * @author com.javayihao.top */public class ShopView {	//获取键盘输入对象	Scanner input = new Scanner(System.in);	/*	 * 系统运行方法	 */	public void ShopStart() {		System.out.println("=================欢迎使用超市购物管理系统=================");		//是否继续的标志量,默认是		String isGo="y";		do{			//调用菜单那展示的函数				showMenu();				System.out.println("请输入要执行的操作");				//接受键盘的输入,这里使用String,一次性处理数字和字符输入,不建议使用int类型数字				String select =input.next();				//根据输入的选择执行对应的方法				switch (select) {				//执行商品入库方法				case "1":					insertGood();					break;				//执行商品查詢方法				case "2":					System.out.println("输入要查询的商品编号");					int goodId = input.nextInt();					//调用查询商品的方法,					Good good = searchGoodById(goodId);					//存在					if(good!=null){						System.out.println("商品编号:"+goodId+" 商品名称:"+good.getName()						+"  商品价格:"+good.getPrice()+"  商品数量:"+good.getNum());					}else{						System.out.println("此商品不存在");					}					break;				//执行商品列表方法				case "3":					getGoodList();					break;				//执行商品购买方法				case "4":					buyGood();					break;					//执行商品购买方法				case "5":					System.out.println("输入要刪除的商品编号");					int id = input.nextInt();					//调用查询商品的方法,					if(searchGoodById(id)!=null){						deleteGood(id);					}else{						System.out.println("沒有此商品");					}					break;				case "6":					updateGood();					break;				//退出系统				case "0":					System.out.println("*************欢迎下次使用 再见!*************");					//终止程序					System.exit(0);				default:					System.err.println("输入有误 请重新输入!");					continue;			}				System.out.println("输入y继续/否则退出");				isGo = input.next();		}while(isGo.equals("y"));		System.out.println("*************欢迎下次使用 再见!*************");	}	/**	 * 更新商品操作	 * 1.先查询当前要更新的商品存不存在	 * 2.如果存在更新即可,不存在提示	 */	private void updateGood() {		System.out.println("输入要修改的商品id");		int gid = input.nextInt();		Good good = searchGoodById(gid);		System.out.println("商品信息如下");		if(good!=null){			System.out.println("商品编号:"+gid+" 商品名称:"+good.getName()			+"  商品价格:"+good.getPrice()+"  商品数量:"+good.getNum());			System.out.println("修改商品名称");			String name = input.next();			System.out.println("修改商品单价");			float price = input.nextFloat();			System.out.println("修改商品库存");			int num = input.nextInt();			String sql="update t_good set name=?,price=?,num=? where id=? ";			try {				//创建一个操作数据库的对象				Connection con = DbUtil.getConnection();				//创建执行sql的执行对象PreparedStatement				PreparedStatement pst = con.prepareStatement(sql);				//给占位符设置值				pst.setString(1, name);				pst.setFloat(2, price);				pst.setInt(3, num);				pst.setInt(4, gid);				//如果是查询的话execute()返回true,如果是更新或插入的话就返回false				if(!pst.execute()){					System.out.println("更新成功");				}				//关闭连接				DbUtil.close(con, pst);			} catch (Exception e) {				e.printStackTrace();				System.out.println("更新异常"+e.getMessage());			}		}else{			System.out.println("此商品不存在");		}			}		//用于展示系统界面菜单的方法		private void  showMenu() {			System.out.println("1.商品入库");			System.out.println("2.根据商品编号查询商品");			System.out.println("3.商品列表");			System.out.println("4.购买商品");			System.out.println("5.删除商品");			System.out.println("6.更新商品");			System.out.println("0.退出系统");		}	/*	 * 刪除商品	 * 1.首先得判断该商品存在	 * 2.根据商品编号id删除	 */	private void deleteGood(int id) {		String sql = "delete from t_good where id=?";		try {			//创建一个操作数据库的对象			Connection con = DbUtil.getConnection();			//创建执行sql的执行对象PreparedStatement			PreparedStatement pst = con.prepareStatement(sql);			//给占位符设置值			pst.setInt(1, id);			//如果是查询的话execute()返回true,如果是更新或插入的话就返回false			if(!pst.execute()){				System.out.println("刪除成功");			}			//关闭连接			DbUtil.close(con, pst);		} catch (Exception e) {			e.printStackTrace();			System.out.println("删除异常"+e.getMessage());		}	}	/*	 * 商品入库	 * 这里只处理编号不能重复的逻辑,	 * 关于输入的编号是不是数字这里就不做判断,有兴趣的朋友可以试试	 */	private void insertGood(){		//商品编号		int id=0;		System.out.println("输入商品编号");		while(true){			 id= input.nextInt();			//判断当前输入的编号重复没有,重复重新输入			if(searchGoodById(id)==null){				break;			}			System.err.println("编号重复,请重新输入商品编号");		}		System.out.println("输入商品名称");		String name = input.next();		System.out.println("输入商品单价");		float price = input.nextFloat();		System.out.println("输入商品数量");		int num = input.nextInt();		//要执行的sql语句,这里使用占位符防止sql入侵		String sql = "insert into t_good()values(?,?,?,?)";		try {			//创建一个操作数据库的对象			Connection con = DbUtil.getConnection();			//创建执行sql的执行对象PreparedStatement			PreparedStatement pst = con.prepareStatement(sql);			//给占位符设置值			pst.setInt(1, id);			pst.setString(2, name);			pst.setFloat(3, price);			pst.setInt(4, num);			//执行sql语句		    if(!pst.execute()){		    	System.out.println("入库成功");		     }			//关闭连接			DbUtil.close(con, pst);		} catch (Exception e) {			e.printStackTrace();			System.out.println("入库异常"+e.getMessage());		}	}	/*商品查询	 * 返回的是一个商品对象,没有此商品返回null	 */	private Good searchGoodById(int id) {		//执行的sql语句		String sql="select id,name,price,num from t_good where id=?";		try {			//创建一个操作数据库的对象			Connection con = DbUtil.getConnection();			//创建执行sql的对象PreparedStatement			PreparedStatement pst = con.prepareStatement(sql);			pst.setInt(1, id);			ResultSet rs = pst.executeQuery();			if(rs.next()){//有结果,将查到的数据通过构造函数封装成一个商品对象				Good good = new Good(rs.getInt("id"), rs.getString("name"), 						rs.getFloat("price"), rs.getInt("num"));				return good;			}			//关闭连接			DbUtil.close(con, pst);		} catch (SQLException e) {			e.printStackTrace();		}		return null;	}	//商品列表	private void getGoodList(){		//执行的sql语句				String sql="select id,name,price,num from t_good";				try {					//创建一个操作数据库的对象					Connection con = DbUtil.getConnection();					//创建执行sql的对象PreparedStatement					PreparedStatement pst = con.prepareStatement(sql);					ResultSet rs = pst.executeQuery();					System.out.println("编号\t"+"名称\t"+"单价\t"+"数量\t");					if(rs.wasNull()){						System.out.println("没有商品");					}else{						while(rs.next()){//有结果,打印							//通过rs.getxxx("yy")方法参数是数据库列名							System.out.println(rs.getInt("id")+"\t"+rs.getString("name")+"\t"+									rs.getFloat("price")+"\t"+rs.getInt("num")+"\t");						}					}					//关闭连接					DbUtil.close(con, pst);				} catch (SQLException e) {					e.printStackTrace();				}	}	//购买商品	public void buyGood() {		//用来存储购买商品的集合		ArrayList<Good> goods = new ArrayList<>();		//是否继续购买标记		String flag = "y";		do{			System.out.println("输入购买商品的编号");			int id = input.nextInt();			Good good = searchGoodById(id);			if(good!=null){				System.out.println("输入购买商品的数量");				int num = input.nextInt();				if(good.getNum()<num){					System.out.println("此商品库存"+good.getNum()+"  无法购买;");									}else{					try{						String sql="update t_good set num=? where id=?";						//创建一个操作数据库的对象						Connection con = DbUtil.getConnection();						//创建执行sql的对象PreparedStatement						PreparedStatement pst = con.prepareStatement(sql);						pst.setInt(1, good.getNum()-num);//更新库存						pst.setInt(2, id);						if(pst.executeUpdate()==1){							//存入购买商品的集合goods							Good g = new Good(id,good.getName(),good.getPrice(),num);							if(goods.size()>0){								for (int i = 0; i < goods.size(); i++) {									if(goods.get(i).getId()==id){//如果购物车中有该商品 数量加即可										goods.get(0).setNum(num+goods.get(0).getNum());									}else{//如果购物车中没有该商品 数量加即可										goods.add(g);									}								}							}else{//购物车中没有商品,加入到购物车中								goods.add(g);							}							System.out.println("购买成功");						}else{							System.out.println("购买失敗");						}					}catch(Exception e){						e.printStackTrace();						System.out.println("购买异常"+e.getMessage());					}				}				System.out.println("输入y继续购买/输入其他结算");				flag = input.next();				if(!flag.equals("y")){					//结算					account(goods);				}			}else{				System.out.println("没有此商品");			}		}while(flag.equals("y"));	}	//结算购物车	private void account(ArrayList<Good> goods) {		System.out.println("编号\t"+"名称\t"+"数量\t"+"总价");		//lambda表达式遍历集合,当然是用for循环也ok		goods.forEach(in->System.out.println(in.getId()+"\t"+in.getName()+				"\t"+in.getNum()+"\t"+in.getNum()*in.getPrice()));		//合计		float sum=0;		for (int i = 0; i < goods.size(); i++) {			//对总价求和			sum += (goods.get(i).getNum())*(goods.get(i).getPrice());		}		System.out.println("总计消费:"+sum+"元");	}}

总结

至此,项目已经完成了,当然项目本身还是存在不足,比如,在接受键盘输入的合法性判断。对于java操作数据库而言可以参考,不是在搬砖,就是搬砖的路上,希望你的程序永无bug

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Java实现Excel导入数据库,数据库中的数据导入到Excel
分页查询
数据库操作工具类 ConnectionUtils
mysql、sqlserver、oracle分页,java分页统一接口实现
java 调用mysql存储过程
全国疫情统计可视化地图(连接后台数据库,没有使用json传输数据)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服