水果超市管理系统

利用GUI完成水果超市管理系统

水果超市登录界面:
在这里插入图片描述
超市货物管理页面:
在这里插入图片描述
水果超市登录界面分析:有图标,文字标题,窗体,进入系统按钮,北区图片区,内容含有一张图片,正文为按钮区,被北区挤到到了下面,内涵一个按钮。
**超市货物管理页面:**有表格,有表格视口,JScrollPan,有不同属性的输入文本框Label,不同功能的按钮JButton;

  1. 创建项目,实现系统欢迎窗口类的定义
package view;

import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

/**
 * 主窗口
 *水果超市登录界面
 */
public abstract class AbstractMainFrame extends JFrame{
    private JLabel titleLabel = new JLabel(new ImageIcon("F:\\Java\\Eclipse\\images\\fruit.jpg"));//导入相片
    private JButton btn = new JButton("进入系统");//顾客按钮
    //构造函数
    public AbstractMainFrame(){
		this.init(); // 初始操作
		this.addComponent();// 添加组件
		this.addListener();  // 添加监听器;
	}
	/**
	 * // 初始操作
	 */
	private void init() {
		// TODO Auto-generated method stub
		this.setTitle("水果超市欢迎你"); // 标题
		this.setSize(600,400); //  窗体大小与位置
		
		GUITools.center(this); //设置窗口上位置
		GUITools.setTiTleImage(this, "F:\\JAVA\\java开发\\内容\\Chapter08\\bin\\a.jpg");
		this.setResizable(false);  // 窗体大小固定
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭窗口
	}
	private void addComponent() {
		// TODO Auto-generated method stub
		//窗体使用默认的边界布局,北区放入图片
		this.add(this.titleLabel,BorderLayout.NORTH);
		//创建Jpanel对象
		JPanel btnPanel =new JPanel();
		//清理布局,使JPanel中的组件可以自定义位置
		btnPanel.setLayout(null);
		
		//将JPanel对象添加入窗体zhong
		this.add(btnPanel);
		//定义边界位置
		btn.setBounds(240, 20, 120, 50);
		btnPanel.add(btn);
	}
	/**
	 *添加监听器
	 */
	private void addListener() {
		// TODO Auto-generated method stub
		btn.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
			showAdminDialog();
			}
		});
		}
	   //展示管理员界面方法
		public abstract void showAdminDialog();	
}

备注:一般分三大步走,1初始化操作,2添加组件,3添加监听器

  1. 复杂工具类,用来设置窗口居中的方法
package view;

import java.awt.Component;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class GUITools {
 //java提供的gui默认工具类对象
	/**
	 * 工具类
	 */
	static Toolkit kit =Toolkit.getDefaultToolkit();
	//将指定组件屏幕剧中
	public static void center(Component c) {
		int x = (kit.getScreenSize().width-c.getWidth())/2;
		int y = (kit.getScreenSize().height-c.getHeight())/2;
		c.setLocation(x, y);
	}
	//为指定窗口设置图标
	public static void setTiTleImage(JFrame frame,String titleIconPath) {
		frame.setIconImage(kit.createImage(titleIconPath));
	}
}

  1. 定义超市货物管理窗口类
package view;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

/**
 * @author 定义超市货物管理窗口类
 *
 */
public abstract class AbstractAdminDialog extends JDialog{
     //定义界面使用到的组件作为成员变量
	private JLabel  tableLabel = new JLabel("水果列表");// 定义列表标题
	private JScrollPane tablePane = new JScrollPane(); // 滚动视口
	protected JTable table =new JTable(); //水果列表
	
	private JLabel numberLabel = new JLabel("水果编号"); //编号标题
	private JLabel nameLabel =new JLabel("水果名称"); // 名称标题
	private  JLabel priceLabel = new JLabel("水果单价");// 单价标题
	private JLabel unitLabel = new JLabel("计价单位i");//计价单位标题
	
	//添加功能组件
	protected JTextField addNumberText = new JTextField(6);//添加编号文本框
	protected JTextField addNameText = new JTextField(6); //添加名称文本框
	protected JTextField addPriceText = new JTextField(6);//添加单价文本框
	protected JTextField addUnitText = new JTextField(6);// 添加计价单位标题
	private JButton addBtn =new JButton ("添加水果");//添加按钮
	
	//修改功能组件
	protected JTextField  updateNumberText = new JTextField(6);
	protected JTextField  updateNameText = new JTextField(6);
	protected JTextField updatePriceText =new JTextField(6);
	protected JTextField  updateUnitText = new JTextField(6);
	private JButton updateBtn =new JButton("修改水果");
	
	//删除功能租金按
	protected JTextField delNumberText =new JTextField(6);// 添加编号文本
	private JButton delBtn =new JButton("删除水果");// 删除按钮
	//构造方法
	public AbstractAdminDialog() {
	 this(null,true);
	}
	public AbstractAdminDialog(Frame owner, boolean modal) {
		// TODO Auto-generated constructor stub
         super(owner,modal);
         this.init();//初始化
         this.addComponent();//添加组件
         this.addListener();//添加监听器
	}
	private void init() {
		// TODO Auto-generated method stub
		this.setTitle("超市货物管理"); // 标题
		this.setSize(600,400); //窗体大小与位置
		GUITools.center(this);   // 设置窗口在屏幕上的位置
		this.setResizable(false);  //窗体大小固定 
	}
	//添加组件
	private void addComponent() {
		// TODO Auto-generated method stub
		//取消布局
		this.setLayout(null);
        //表格标题
		tableLabel.setBounds(265, 20, 70, 25);
		this.add(tableLabel);
		
		//表格
	    table.getTableHeader().setReorderingAllowed(false);//列不能移动
	    table.getTableHeader().setResizingAllowed(false);//不能拉动表格
	    table.setEnabled(false); //不能更改数据
	    tablePane.setBounds(50, 50, 500, 200);
	    tablePane.setViewportView(table);//视口装入表格
	    this.add(tablePane); 
	    
	    //字段标题
	    numberLabel.setBounds(50, 250, 70, 25);
	    nameLabel.setBounds(150, 250, 70, 25);
	    priceLabel.setBounds(250, 250, 70, 25);
	    unitLabel.setBounds(350, 250, 70, 25);
	    this.add(numberLabel);
	    this.add(nameLabel);
	    this.add(priceLabel);
	    this.add(unitLabel);
	    
	    //增加组件
	    addNumberText.setBounds(50, 280,80, 25);
	    addNameText.setBounds(150, 280, 80, 25);
	    addPriceText.setBounds(250, 280, 80, 25);
	    addUnitText.setBounds(350, 280, 80, 25);
	    this.add(addNumberText);
	    this.add(addNameText);
	    this.add(addPriceText);
	    this.add(addUnitText);
	    addBtn.setBounds(460, 280, 90, 25);
	    this.add(addBtn);
	    //修改组件
	    updateNumberText.setBounds(50, 310, 80, 25);
	    updateNameText.setBounds(150, 310, 80, 25);
	    updatePriceText.setBounds(250, 310, 80, 25);
	    updateUnitText.setBounds(350, 310, 80, 25);
	    this.add(updateNumberText);
	    this.add(updateNameText);
	    this.add(updatePriceText);
	    this.add(updateUnitText);
	    updateBtn.setBounds(460, 310, 90, 25);
	    this.add(updateBtn);
	   
	    //删除租金按
	    delNumberText.setBounds(50, 340, 80, 25);
	    this.add(delNumberText);
	    delBtn.setBounds(460, 340, 90, 25);
	    this.add(delBtn);
	}
	// 添加监听器
	private void addListener() {
		// TODO Auto-generated method stub                             
		addBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				addFruitItem();
			}
		});
		//修改监听器
		updateBtn.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				updateFruitItem();
			}
		});
		//删除监听器
		delBtn.addActionListener(new ActionListener() { 	
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				delFruitItem();
			}
		});
	}
	//查询方法
	public abstract void queryFruitItem();
	
	abstract void addFruitItem();
	abstract void updateFruitItem();	
	abstract void delFruitItem();
}

  1. 编写水果项的实体类
package view;

public class FruitItem {
 private String number ;//编号
 private String name; // 名称
 private double price; //价格
 private String unit ; //单位
	// 构造方法

	public FruitItem() {
		super();
		// TODO Auto-generated constructor stub
	}
	//有参构造方法
public FruitItem(String number, String name, double price, String unit) {
	super();
	this.number = number;
	this.name = name;
	this.price = price;
	this.unit = unit;
}
 //get/set方法
public String getNumber() {
	return number;
} 
public void setNumber(String number) {
	this.number = number;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public double getPrice() {
	return price;
}
public void setPrice(double price) {
	this.price = price;
}
public String getUnit() {
	return unit;
}
public void setUnit(String unit) {
	this.unit = unit;
}
}

  1. 定义存储数据类
package view;

import java.util.ArrayList;

public class DataBase {
public static ArrayList<FruitItem>data   =new ArrayList<FruitItem>();
//初始化数据
static {
	data.add(new FruitItem("1","苹果",5.0,"kg"));
}
}
  1. 分层编写存放数据的操作类、存放实现业务逻辑的服务类和实现管理员操作的控制类
    (1、创建数据访问类)
package view;

import java.util.ArrayList;

/*
 * 管理员数据方法类
 */
public class AdminDao {
   //获取所有的数据
	public ArrayList<FruitItem>queryAllDate(){
		return DataBase.data;
	}
	//添加数据
	public void addFruitItem(FruitItem fruitItem) {
		DataBase.data.add(fruitItem);
	}
	//删除数据
	public void delFruitItem(String delNumber) {
		//查询集合中数据
		for (int i = 0; i < DataBase.data.size(); i++) {
			FruitItem thisFruitItem =DataBase.data.get(i);
			//如果有水果项的编号与传入编号相同,则从集合中删除
			if(thisFruitItem.getNumber().equals(delNumber)) {
				DataBase.data.remove(i);
			}
		}
		
		
	}
}

(2创建管理服务类)

package view;

import java.util.ArrayList;

public class AdminService {
private AdminDao adminDao =new AdminDao();
//查询服务
public ArrayList<FruitItem>queryFruitItem(){
	ArrayList<FruitItem>data =adminDao.queryAllDate();
	return data;
}
  //添加服务
   public boolean addFruitItem(String number,String name,
		   String price,String unit) {
	   //调用dao层的获取所有数据方法获取所有数据
	   ArrayList<FruitItem>data = queryFruitItem();
	   //使用输入的编号与所有数据对比
	   for(int i=0;i<data.size();i++) {
		   FruitItem fruitItem =data.get(i);
		   //如果存在重复编号数据,则添加不成功
		   if(number.equals(fruitItem.getNumber())) {
			   return false;
		   }
	   }
	   //如果没有重复编号,将数据封装为FruitItem对象
	   FruitItem thisFruitItem = new FruitItem(number,name,
			   Double.parseDouble(price),unit);
	   //调用dao层的添加数据方法
	   adminDao.addFruitItem(thisFruitItem);
	   //在添加数据后,返回添加添加成功
	   return true;
   }
	   //修改服务
	   public boolean updataFruitItem (String number,String name,String price ,String unit) {
		//调用dao层的获取所有数据方法获取所有数据
		   ArrayList<FruitItem> data= queryFruitItem();
		   //使用输入的编号与所有数据对比
		   for(int i=0;i<data.size();i++) {
			FruitItem fruitItem =data.get(i)  ;
			if(number.equals(fruitItem.getNumber())) {
				//调用dao层删除指定编号数据方法
				adminDao.delFruitItem(number);
				//如果没有重复编号,将数据封装FruitItem对象
				FruitItem thisFruitItem =new FruitItem(number ,name,
						Double.parseDouble(price),unit);
				//调用dao层的添加数据烦方法;
				adminDao.addFruitItem(thisFruitItem);
				return true;
			}
		   }
		   return false;
		   //删除服务
	   }
		   public boolean delFruitItem(String delNumber) {
			   ArrayList<FruitItem> data = queryFruitItem();
	         	for(int i=0;i<data.size();i++) {
	         		FruitItem fruitItem =data.get(i);
	         		//如果存在相同编号数据,则可以删除
	         		if(delNumber.equals(fruitItem.getNumber())) {
	         			adminDao.delFruitItem(delNumber);
	         			return true;
	         		}
	         	}
			   return false;
			   
		   }
	   
   
}

(3、创建管理员界面操作类)

package view;

import java.awt.Frame;
import java.util.ArrayList;

import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class AdminDialogController extends AbstractAdminDialog {
 /*
  * 管理员界面操作
  */
	//定义服务类,提供完整功能服务
    private AdminService adminService =new AdminService();
    //构造方法
	public AdminDialogController() {
		super();
		// TODO Auto-generated constructor stub
	}

	public AdminDialogController(Frame owner, boolean modal) {
		super(owner, modal);
		// TODO Auto-generated constructor stub
		//创建对象时展示数据
		queryFruitItem();
	}
   // 查询方法
		public void queryFruitItem() {
			// TODO Auto-generated method stub
			//定义表头
			String []thead = {"水果编号","水果名称","水果单价(/元)","计价单位"};
			//调用adminService的查询服务
			ArrayList<FruitItem> dataList=adminService.queryFruitItem();
			//调用list2Array方法,将查询到的集合转化数组,方便为JTable赋值
			String [][]tbody = list2Array(dataList);
			//将查询到的结果为table赋值
			TableModel dataModel =new DefaultTableModel(tbody,thead);
			table.setModel(dataModel);
		}
	private String[][] list2Array(ArrayList<FruitItem> list) {
			// TODO Auto-generated method stub
		//根据FruitItem的model与集合数据定义JTable的数据二维数组
		String [][]tbody = new String [list.size()][4];
		for(int i=0;i<list.size();i++) {
			FruitItem fruitItem =list.get(i);
			tbody[i][0]=fruitItem.getNumber();
			tbody[i][1]=fruitItem.getName();
			tbody[i][2]=fruitItem.getPrice()+"";
			tbody[i][3]=fruitItem.getUnit();
			
		}
		
		return tbody;
		}
    //添加方法
	@Override
	void addFruitItem() {
		// TODO Auto-generated method stub
		//获取数据
		String addNumber =addNumberText.getText();
		String addName =addNameText.getText();
		String addPrice =addPriceText.getText();
		String addUnit =addUnitText.getText();
		//调用adminService的添加服务
		boolean addSuccess =adminService.addFruitItem(addNumber,
				addName, addPrice, addUnit);
		//如果添加成功
		if(addSuccess) {
			//添加后刷新表格
			queryFruitItem();
		}else {
			JOptionPane.showMessageDialog(this, "水果编号不能重复,请检擦数据!");
		}
	}
  
	@Override
	void updateFruitItem() {
		// TODO Auto-generated method stub
		String updateNumber =addNumberText.getText();
		String updateName =addNameText.getText();
		String updatePrice =addPriceText.getText();
		String updateUnit =addUnitText.getText();
		boolean updateSuccess =adminService.updataFruitItem(updateNumber, 
				updateName, updatePrice, updateUnit);
		//如果修改成功
		if(updateSuccess) {
			queryFruitItem();
		}else {
			JOptionPane.showMessageDialog(this, "没有这个编号的水果,请检查数据!");
		}

	}

	@Override
	void delFruitItem() {
		// TODO Auto-generated method stub
		String delNumber =delNumberText.getText();
		boolean delSucces = adminService.delFruitItem(delNumber);
		if(delSucces) {
			queryFruitItem();
		}else {
			JOptionPane.showMessageDialog(this, "没有这个编号3");
		}
	}

}

  1. 创建主界面操作类
package view;

public class AbstractMainFrameTest extends AbstractMainFrame{
	public static void main(String[] args) {
		new AbstractMainFrameTest().setVisible(true);
	}
	@Override
	public void showAdminDialog() {
		// TODO Auto-generated method stub
		System.out.println("进入管理界面");
	}
}

  1. 定义main主界面类
package view;

public class MainApp {
 public static void main(String[] args) {
	new MainFrameController().setVisible(true);
}
}

  1. 数据库连接封装类
package myfurit;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

    public static Connection getConnection() throws ClassNotFoundException, SQLException {
        //加载驱动,并建立数据库连接
    	Class.forName("com.mysql.jdbc.Driver");
    	String url="jdbc:mysql://localhost:3306/jdbc";
    	String username="root";
    	String password ="";
    	Connection conn= DriverManager.getConnection(url, username, password);
    	return conn;
    }
    //关闭数据库连接,释放资源
    public static void release(Statement stmt,Connection conn) {
    	if(stmt!=null) {
    		try {
				stmt.close();    
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    		stmt=null;
    	}
    	if(conn!=null) {
    	   try {
			conn.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
    	   conn =null;
    	}
    }
    
    	public static void release(ResultSet rs,Statement stmt,Connection conn) {
    		if(rs!=null) {
    			try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    			rs =null;
    		}
    		release(stmt,conn);
    	}
    
}

  1. 在数据库创建一张表如下字段
    在这里插入图片描述

框架以上10点,具体定义属性,添加组件,添加监听器,做增删改查,连接数据库还得看具体的代码。完整的代码我已上传。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

金石不渝

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

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

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

打赏作者

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

抵扣说明:

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

余额充值