Java学习之综合案例

您所在的位置:网站首页 网上生鲜超市 Java学习之综合案例

Java学习之综合案例

2023-09-13 07:37| 来源: 网络整理| 查看: 265

案例介绍:

水果超市管理系统包括两个界面:系统欢迎界面和超市货物管理界面,在系统欢迎界面中,通过单击“进入系统”按钮,进入超市货物管理界面。在超市货物管理界面中,可以对水果信息实现具体的操作。例如,每当有新水果运送到超市时,就需要系统管理人员在系统中增加新水果的信息;若超市中的某种水果售罄,则删除该水果的信息;若水果的数量、价格等需要变更,则及时进行修改。这些操作都可以在水果超市管理系统中完成。

案例目标: 实现添加数据、修改数据和删除数据的功能。

运行环境: Jdk、Eclipse

案例代码:

首先,我们需要按照以下形式在Eclipse中创建相应的包和类。

在这里插入图片描述 先创建一个工程"fruitstore",下面开始就是代码了。

(1)先创建cn.example.fruitstore.app包,在此包下创建MainApp.java类。

package cn.example.fruitstore.app; import cn.example.fruitstore.controller.MainFrameController; /** * 项目运行 */ public class MainApp { public static void main(String[] args) { new MainFrameController().setVisible(true); } }

(2)先创建cn.example.fruitstore.controller包,在此包下创建AdminDialogController.java类和MainFrameController.java类。

//AdminDialogController.java类代码如下 package cn.example.fruitstore.controller; import java.awt.Frame; import java.util.ArrayList; import javax.swing.JOptionPane; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import cn.example.fruitstore.domain.FruitItem; import cn.example.fruitstore.service.AdminService; import cn.example.fruitstore.view.AbstractSdminDialog; /** * 管理员界面操作类*/ @SuppressWarnings("serial") public class AdminDialogController extends AbstractSdminDialog{ //定义服务类,提供完整功能服务 private AdminService adminService = new AdminService(); //构造方法 public AdminDialogController(){ super(); } public AdminDialogController(Frame owner,boolean modal) { super(owner, modal); //创建对象时展示数据 queryFruitItem(); } //查询方法 @Override public void queryFruitItem(){ //定义表格头 String[] thead ={"水果编号", "水果名称", "水果单价(/元)","计价单位"}; //调用adminService的查询服务 ArrayList dataList = adminService.queryFruitItem(); //调用list2Array方法,将查询到的集合转换为数组,方便为JTable赋值 String[][] tbody = list2Array(dataList); //用查询到的结果为table赋值 TableModel dataModel = new DefaultTableModel(tbody, thead); table.setModel (dataModel); } //集合数据转换为二维数组方法 public String[][] list2Array(ArrayList list){ //根据EruitItem类的model与集合数据,定义JTable 数据的二维数组 String[][] tbody = new String[list.size()][4]; for (int i=0; i //获取数据 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 public void updateFruitItem(){ //获取数据 String updateNumber = updateNumberText.getText(); String updateName= updateNameText.getText(); String updatePrice = updatePriceText.getText(); String updateUnit = updateUnitText.getText(); //调用adminService的修改服务 boolean updateSuccess = adminService.updateFruitItem(updateNumber, updateName, updatePrice, updateUnit); //若修改成功 if(updateSuccess){ //修改后刷新表格 queryFruitItem(); }else{ //若没有修改成功,则弹出错误提示 JOptionPane.showMessageDialog(this,"没有这个编号的水果,请检查数据!"); } } //删除方法 @Override public void delFruitItem(){ //获取数据 String delNumber = delNumberText.getText(); //调用 adminService的删除服务 boolean delSuccess = adminService.delFruitItem(delNumber) ; //若删除成功 if(delSuccess){ //删除后刷新表格 queryFruitItem(); }else{ //若没有删除成功,则弹出错误提示 JOptionPane.showMessageDialog(this,"没有这个编号的水果,请检查数据! "); } } } //MainFrameController.java类代码如下 package cn.example.fruitstore.controller; import cn.example.fruitstore.view.AbstractMainFrame; /** *主界面操作类 */ @SuppressWarnings("serial") public class MainFrameController extends AbstractMainFrame { @Override public void showAdminDialog(){ //在该方法中创建管理员界面并显示 // this为父窗体(主界面),true表示设置为模态窗体展示 new AdminDialogController(this, true).setVisible(true); } }

(3)先创建cn.example.fruitstore.dao包,在此包下创建AdminDao.java类。

package cn.example.fruitstore.dao; import java.util.ArrayList; import cn.example.fruitstore.data.DataBase; import cn.example.fruitstore.domain.FruitItem; /* *管理员数据访问类 */ public class AdminDao{ //获取所有数据 public ArrayList queryAllData(){ return DataBase.data; } //添加数据 public void addFruitItem(FruitItem fruitItem) { DataBase.data.add(fruitItem); } //删除数据 public void delFruitItem(String delNumber){ //查询集合中数据 for(int i = 0; i DataBase.data.remove(i); } } } }

(4)先创建cn.example.fruitstore.data包,在此包下创建DataBase.java类。

package cn.example.fruitstore.data; import java.util.ArrayList; import cn.example.fruitstore.domain.FruitItem; /** * 存储数据 */ public class DataBase{ public static ArrayList data = new ArrayList(); //初始数据 static{ data.add(new FruitItem("1","苹果",5.0,"kg")); } }

(5)先创建cn.example.fruitstore.domain包,在此包下创建FruitItem.java类。

package cn.example.fruitstore.domain; /* * 水果项数据模型 */ public class FruitItem { //属性 private String number; //水果编号 private String name; //水果名称 private double price;//水果单价 private String unit;//计价单位 //构造方法 public FruitItem(){ } //存储数据 public FruitItem(String number, String name,double price,String unit) { super(); this.number = number; this.name = name; this.price = price; this.unit = unit; } // getter和 setter方法 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; } }

(6)先创建cn.example.fruitstore.service包,在此包下创建AdminService.java类。

package cn.example.fruitstore.service; import java.util.ArrayList; import cn.example.fruitstore.dao.AdminDao; import cn.example.fruitstore.domain.FruitItem; /* *管理员服务类 */ public class AdminService{ private AdminDao adminDao = new AdminDao(); //查询服务 public ArrayList queryFruitItem(){ //调用Dao层的获取所有数据方法获取所有数据 ArrayList data = adminDao.queryAllData(); //返回数据 return data; } //添加服务 public boolean addFruitItem(String number,String name,String price, String unit){ //调用Dao层的获取所有数据方法获取所有数据 ArrayList data = queryFruitItem() ; //使用输入的编号与所有数据对比 for(int i=0;i return false; } } //若没有重复编号,将数据封装为FruitItem对象 FruitItem thisFruitItem = new FruitItem(number,name, Double.parseDouble(price), unit); //调用Dao层的添加数据方法 adminDao.addFruitItem(thisFruitItem); //在添加数据后,返回添加成功 return true; } //修改服务 public boolean updateFruitItem(String number,String name, String price,String unit){ //调用 Dao层的获取所有数据方法,获取所有数据 ArrayList data = queryFruitItem(); //使用输入的编号与所有数据对比 for(int i=0;i //调用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) { //调用Dao层的获取所有数据方法获取所有数据 ArrayList data = queryFruitItem() ; //使用输入的编号与所有数据对比 for(int i = 0; i //调用 Dao层的删除指定编号数据方法 adminDao.delFruitItem(delNumber); //在删除数据后,返回添加成功 return true; } } //若不存在相同编号数据,则不可以删除 return false; } }

(7)先创建cn.example.fruitstore.test包,在此包下创建AbstractAdminDialogTest.java类和AbstractMainFrameTest.java类。

//AbstractAdminDialogTest.java类代码如下 package cn.example.fruitstore.test; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import cn.example.fruitstore.view.AbstractSdminDialog; /*管理界面测试类*/ @SuppressWarnings("serial") public class AbstractAdminDialogTest extends AbstractSdminDialog{ //定义构造方法初始化数据 public AbstractAdminDialogTest(){ super(); queryFruitItem();//测试数据 } //加入测试table数据 @Override public void queryFruitItem(){ String [] thead = new String []{ "水果编号", "水果名称", "水果单价(/元)","计价单位"}; String[][] tbody = new String[][]{ {"1","苹果","5.0", "kg"}, {"2","葡萄","3.2","斤"}, {"3","雪梨","3.8","斤"}, {"4","大榴莲", "120","个"} }; TableModel data = new DefaultTableModel(tbody, thead); table.setModel(data); } @Override public void addFruitItem(){ } @Override public void updateFruitItem(){ } @Override public void delFruitItem(){ } public static void main(String[] args) { new AbstractAdminDialogTest().setVisible(true); } } //AbstractMainFrameTest.java类代码如下 package cn.example.fruitstore.test; import cn.example.fruitstore.view.AbstractMainFrame; /*主窗体测试类*/ @SuppressWarnings("serial") public class AbstractMainFrameTest extends AbstractMainFrame { //定义主函数 public static void main(String[] args){ new AbstractMainFrameTest().setVisible(true); } //覆盖父类中展示管理员界面的方法 @Override public void showAdminDialog(){ System.out.println("进入管理界面"); } }

(8)先创建cn.example.fruitstore.tools包,在此包下创建GUITools.java类。

package cn.example.fruitstore.tools; 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)); } }

(9)先创建cn.example.fruitstore.view包,在此包下创建AbstractMainFrame.java类和AbstractSdminDialog.java类。然后我们需要在src所在的文件夹内存入一个“Fruaitstore.jpg”(任意图片都行,但是敲黑板:必须把“Fruaitstore.jpg”存放在src所在文件夹内,否则图片不会运行出来!)

我就把“Fruaitstore.jpg”放在了这里:

在这里插入图片描述 下面是AbstractMainFrame.java类和AbstractSdminDialog.java类的代码:

//AbstractMainFrame.java类代码如下 package cn.example.fruitstore.view; import java.awt.BorderLayout; 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; import cn.example.fruitstore.tools.GUITools; /** *主窗体类 */ @SuppressWarnings ("serial") public abstract class AbstractMainFrame extends JFrame{//组件 private JLabel titleLabel = new JLabel(new ImageIcon("Fruaitstore.jpg"));//标题图片 private JButton btn = new JButton("进入系统");//按钮 //构造方法 public AbstractMainFrame(){ this.init (); this.addComponent();//添加组件 this.addListener();//添加监听器 } //初始化操作 private void init(){ this.setTitle("水果超市欢迎您!"); this.setSize(600,400);//窗体大小与位置 this.setResizable(true);//窗体大小不固定 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体默认操作 } //添加组件 private void addComponent() { //窗体使用默认的边界布局,北区放入图片 this.add(this.titleLabel, BorderLayout.NORTH); //创建JPanel对象 JPanel btnPanel=new JPanel(); //清除布局,使JPanel中的组件可以自定义位置 btnPanel.setLayout(null); //将JPanel对象添加到窗体中 this.add(btnPanel); //定义边界位置 btn.setBounds(540,20,120,50);//将按钮添加到JPanel对象中 btnPanel.add(btn); } //添加监听器 private void addListener(){ btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ showAdminDialog(); } }); } //展示管理员界面方法 public abstract void showAdminDialog(); } //AbstractSdminDialog.java类代码如下 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; import cn.example.fruitstore.tools.GUITools; /*管理窗体类 */ @SuppressWarnings("serial") public abstract class AbstractSdminDialog 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("水果单价");//计价单位标题 //添加功能组件 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 AbstractSdminDialog(){ this(null,true); } public AbstractSdminDialog (Frame owner, boolean modal){ super(owner,modal); this.init();//初始化操作 this.addComponent();//添加组件 this.addListener();//添加监听器 } //初始化操作 private void init(){ this.setTitle("超市货物管理!");//标题 this.setSize(600,400);//窗体大小与位置 GUITools.center(this);//设置窗体在屏幕上的位置 this.setResizable(false);//窗体大小固定 } //添加组件 private void addComponent() { //取消布局 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(){ //添加按钮监听 addBtn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ //调用添加方法 addFruitItem();} }); //修改按钮监听 updateBtn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ //调用修改方法 updateFruitItem(); } }); //删除按钮监听 delBtn.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ //调用删除方法 delFruitItem(); } }); } //查询方法 public abstract void queryFruitItem(); //添加方法 public abstract void addFruitItem(); //修改方法 public abstract void updateFruitItem(); //删除方法 public abstract void delFruitItem(); }

案例运行结果:

首先,我们运行cn.example.fruitstore.app包下的MainApp.java类文件,再将窗口左右上下拉大后会看到如下画面: 在这里插入图片描述

点击【进入系统】后,出现如下画面(这里画面的关于苹果的数据是我们编码时输入的,也就是系统默认的数据): 在这里插入图片描述 添加数据:

任意输入一种水果的数据(不一定要与在代码里设定的水果数据一样)在输入【水果编号】、【水果名称】、【水果单价】、【计价单价】后,比如“2 黑加仑 15.3 斤”会出现以下画面: 在这里插入图片描述 添加数据成功的画面如下: 在这里插入图片描述 修改数据: 在这里插入图片描述 修改数据成功的画面如下: 在这里插入图片描述 删除数据:

在这里插入图片描述 删除数据成功的画面如下: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3