Java学习之综合案例 |
您所在的位置:网站首页 › 网上生鲜超市 › Java学习之综合案例 |
案例介绍: 水果超市管理系统包括两个界面:系统欢迎界面和超市货物管理界面,在系统欢迎界面中,通过单击“进入系统”按钮,进入超市货物管理界面。在超市货物管理界面中,可以对水果信息实现具体的操作。例如,每当有新水果运送到超市时,就需要系统管理人员在系统中增加新水果的信息;若超市中的某种水果售罄,则删除该水果的信息;若水果的数量、价格等需要变更,则及时进行修改。这些操作都可以在水果超市管理系统中完成。 案例目标: 实现添加数据、修改数据和删除数据的功能。 运行环境: Jdk、Eclipse 案例代码: 首先,我们需要按照以下形式在Eclipse中创建相应的包和类。
(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”放在了这里:
案例运行结果: 首先,我们运行cn.example.fruitstore.app包下的MainApp.java类文件,再将窗口左右上下拉大后会看到如下画面: 点击【进入系统】后,出现如下画面(这里画面的关于苹果的数据是我们编码时输入的,也就是系统默认的数据): 任意输入一种水果的数据(不一定要与在代码里设定的水果数据一样)在输入【水果编号】、【水果名称】、【水果单价】、【计价单价】后,比如“2 黑加仑 15.3 斤”会出现以下画面:
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |