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


posted @ posted @ 21-01-24 09:51  admin  阅读量:

Powered by 上海迪昊自动化科技有限公司 @2018 RSS地图 HTML地图