1.项目设计
这次为大家带来的是基于Oracle数据库下的GUI超市信息管理系统,因还处于Java学习阶段,代码如有缺陷,还请多多指教。话不多说,下面是本次管理系统的主要框架。
本项目模拟真实的超市管理模式,以管理员为面向对象,所要实现的功能是基本的增删改查,具体实现步骤如下:
管理员登录
进入欢迎界面
进入仓库管理界面
管理员进行增删改查
此界面的重点在于对三个按钮的监听:
- 登录按钮logbt:对用户名、密码输入正确与否的判断
- 重置按钮resetbt:用户对当前输入内容进行重置
- 退出按钮exitbt:用户退出登录(这里设置直接退出系统)
部分代码如下:
//定义一个登录界面Login
package cn.itcast.SuperMarketTest.view;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
@SuppressWarnings("serial")
public class Login extends JFrame implements ActionListener{//继承窗体类
private JLabel username_label;//定义用户名标签
private JLabel pwd_label;//定义密码标签
private JLabel permit_label;//定义权限标签
private JTextField text1;
private JPasswordField text2;//定义文本框对象
private JRadioButton jrb1;//定义权限按钮
private Button logbt;
private Button resetbt;//定义按钮对象
private Button exitbt;//定义按钮对象
private ButtonGroup bg;
final String username="admin";
final String pwd="aaaaaa";
JPanel panel;
public Login()
{
this.setSize(700, 600);//设置窗体的大小
GUITools.center(this);
this.setTitle("超市管理系统");//设置窗体标题
this.setLayout(null);//将窗体的默认布局方式设置为无布局方式
username_label = new JLabel("用户名");
pwd_label = new JLabel("密 码");
permit_label = new JLabel("权 限");
logbt = new Button("登录");
resetbt = new Button("重置");
exitbt = new Button("退出");
jrb1=new JRadioButton("管理员");
bg=new ButtonGroup();
bg.add(jrb1);
jrb1.setSize(100,20);
jrb1.setLocation(263,290);
jrb1.setSelected(true); //初始页面默认选择权限为管理员
//设置标签的参数
username_label.setSize(60, 37);
username_label.setLocation(190,150);
pwd_label.setSize(60, 37);
pwd_label.setLocation(190,215);
permit_label.setSize(130, 40);
permit_label.setLocation(190,280);
text1=new JTextField();
text1.setSize(180,30);
text1.setLocation(270, 155);
text1.setFont(new Font("宋体",Font.PLAIN,20));
text2=new JPasswordField();
text2.setSize(180,30);
text2.setLocation(270, 220);
text2.setFont(new Font("宋体",Font.PLAIN,20));
logbt.setSize(45,30);
logbt.setLocation(230,350);
resetbt.setSize(45,30);
resetbt.setLocation(310,350);
exitbt.setSize(45,30);
exitbt.setLocation(390,350);
logbt.addActionListener(this);
resetbt.addActionListener(this);
exitbt.addActionListener(this);
this.add(username_label);
this.add(pwd_label);
this.add(permit_label);
this.add(text1);
this.add(text2);
this.add(jrb1);
this.add(logbt);
this.add(resetbt);
this.add(exitbt);
this.setVisible(true);//设置窗体可见
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="登录")
{
adminlogin(); //连接到管理员界面方法
}
else if(e.getActionCommand()=="重置") {
clear();
}
else if(e.getActionCommand()=="退出") {
System.exit(0);
}
}
@SuppressWarnings("deprecation")
public void adminlogin()
{
if(username.equals(text1.getText())&&pwd.equals(text2.getText()))
{
JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
clear();
dispose();
this.remove(username_label);
this.remove(pwd_label);
this.remove(permit_label);
this.remove(text1);
this.remove(text2);
this.remove(jrb1);
this.remove(logbt);
this.remove(resetbt);
this.remove(exitbt);
JPanel panel = new Enter();
//创建欢迎面板
panel.setLocation(0,0);
this.add(panel);
this.repaint();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置当关闭窗口时,保证JVM也退出
}else if(text1.getText().isEmpty()&&text2.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(text1.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}else if(text2.getText().isEmpty())
{
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}else
{
JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
clear(); //清空输入框
}
}
//清空文本框和密码框
public void clear()
{
text1.setText("");
text2.setText("");
}
}
2.1欢迎界面Enter
欢迎界面是个过渡界面实现的内容相对较少,可写可不写
本界面 主要针对按钮进行了部分优化并设置了面板的背景显示 用户通过点击“进入系统”按钮进入到“管理界面”
部分代码如下:
//定义欢迎界面Enter
package cn.itcast.SuperMarketTest.view;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
//超市管理系统界面
@SuppressWarnings("serial")
public class Enter extends JPanel implements ActionListener {
private JLabel label1 = new JLabel("超市管理系统欢迎您!");
private ImageIcon image=new ImageIcon("images/4.png");
private JLabel label2 = new JLabel(image);
private JButton bt1=new JButton("进入系统");
JPanel panel;
public Enter(){
//设置属性
this.setSize(700,600);
GUITools.center(this);
this.setLayout(null);
this.setVisible(true);
label2.setSize(700,600);
GUITools.center(this);
this.add(label2);
label1.setBounds(220,40,500,300);
label1.setFont(new Font("宋体",Font.PLAIN,25));
this.add(label1);
this.setVisible(true);
bt1.setBounds(295,465,100,35);
bt1.setFont(new Font("宋体",Font.PLAIN,16));
bt1.setBackground(Color.white);
//bt1.setContentAreaFilled(false); //透明度
bt1.setFocusPainted(false); //去掉按钮中文体的边框
bt1.setBorderPainted(false); //去掉边框
bt1.addActionListener(this);
this.add(bt1);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
if(panel!=null)
{
this.remove(panel);
}
if(e.getActionCommand()=="进入系统"){
this.removeAll();
showAdminDialog();
this.setSize(700,600);
this.repaint();
this.setVisible(true);
}
}
public JPanel showAdminDialog(){
new AdminDialogController().setVisible(true);
return panel;
}
}
本界面为管理系统的核心界面,实现了管理员对整个货物系统的增删改查操作
货物列表显示目前仓库的货物基本信息
添加Add():输入相应的属性参数,若用户对后台在库的货物信息进行操作则弹窗提示并要求用户重新输入
修改Update():输入要修改的参数,若用户对后台没在库的货物信息进行操作则弹窗提示并要求用户重新输入
查询Find():输入货物编号查询相关信息
删除Delete():删除相应编号的一条信息记录
部分代码如下:
//定义管理窗口类AbstractAdminDialog
package cn.itcast.SuperMarketTest.view;
import java.awt.Font;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
//管理窗口类
@SuppressWarnings("serial")
public abstract class AbstractAdminDialog extends JDialog{
//定义界面使用到的组件
//成员变量
private JLabel tableLabel = new JLabel("货物列表");//标题
private JScrollPane tablePane = new JScrollPane();//滚动视口
protected JTable table = new JTable();//货物列表
private JLabel numLabel = new JLabel("货物编号");
private JLabel nameLabel = new JLabel("货物名称");
private JLabel priceLabel = new JLabel("货物单价");
private JLabel countLabel = new JLabel("货物数量");
//添加功能组件
protected JTextField addnumText = new JTextField();//添加编号文本框
protected JTextField addnameText = new JTextField();//添加名称文本框
protected JTextField addpriceText = new JTextField();//添加单价文本框
protected JTextField addcountText = new JTextField();//添加货物数量文本框
private JButton addBtn = new JButton("添加");
//修改功能组件
protected JTextField updatenumText = new JTextField();//修改编号文本框
protected JTextField updatenameText = new JTextField();//修改名称文本框
protected JTextField updatepriceText = new JTextField();//修改单价文本框
protected JTextField updatecountText = new JTextField();//修改货物数量文本框
private JButton updateBtn = new JButton("修改");
//删除功能组件
protected JTextField delnumText = new JTextField();//删除编号文本框
private JButton delBtn = new JButton("删除");
//查询功能组件
protected JTextField searchnumText = new JTextField();//查询编号文本框
private JButton findBtn = new JButton("查询");
//构造方法
public AbstractAdminDialog(Frame owner,boolean modal){
super(owner,modal);
this.init();
this.addComponent();
this.addListener();
}
public AbstractAdminDialog() {
this(null,true);
}
//初始化
private void init() {
this.setTitle("超市管理系统");
this.setSize(700, 600);
this.setLocation(150, 30);
GUITools.center(this);
this.setResizable(false);
}
//添加组件
private void addComponent() {
this.setLayout(null);
//表格标题
tableLabel.setBounds(320, 15, 100, 20);//设置位置大小
tableLabel.setFont(new Font("宋体",Font.PLAIN,16));//字体
this.add(tableLabel);
//表格
table.getTableHeader().setReorderingAllowed(false);//列不可移动
table.getTableHeader().setResizingAllowed(false);//不可拉动表格
table.setEnabled(false);//不可更改数据
tablePane.setBounds(30,50,630,270);
tablePane.setViewportView(table);
this.add(tablePane);
//字段标题
numLabel.setBounds(30, 330, 100, 30);//放置四个标签
numLabel.setFont(new Font("宋体",Font.PLAIN,16));
nameLabel.setBounds(150, 330, 100, 30);
nameLabel.setFont(new Font("宋体",Font.PLAIN,16));
priceLabel.setBounds(280, 330, 100, 30);
priceLabel.setFont(new Font("宋体",Font.PLAIN,16));
countLabel.setBounds(410, 330, 100, 30);
countLabel.setFont(new Font("宋体",Font.PLAIN,16));
this.add(numLabel);
this.add(nameLabel);
this.add(priceLabel);
this.add(countLabel);
//增加
addnumText.setBounds(30, 360, 80, 30);
addnameText.setBounds(150, 360, 80, 30);
addpriceText.setBounds(280, 360, 80, 30);
addcountText.setBounds(410, 360, 80, 30);
this.add(addnumText);
this.add(addnameText);
this.add(addpriceText);
this.add(addcountText);
addBtn.setBounds(540, 360, 80, 30);
addBtn.setFont(new Font("宋体",Font.PLAIN,16));
this.add(addBtn);
//修改
updatenumText.setBounds(30, 410, 80, 30);
updatenameText.setBounds(150, 410, 80, 30);
updatepriceText.setBounds(280, 410, 80, 30);
updatecountText.setBounds(410, 410, 80, 30);
this.add(updatenumText);
this.add(updatenameText);
this.add(updatepriceText);
this.add(updatecountText);
updateBtn.setBounds(540, 410, 80, 36);
updateBtn.setFont(new Font("宋体",Font.PLAIN,16));
this.add(updateBtn);
//删除
delnumText.setBounds(30, 510, 80, 36);//510
this.add(delnumText);
delBtn.setBounds(540, 510, 80, 36);//510
delBtn.setFont(new Font("宋体",Font.PLAIN,16));
this.add(delBtn);
//查询
searchnumText.setBounds(30, 460, 80, 36);//460
this.add(searchnumText);
findBtn.setBounds(540, 460, 80, 36);//460
findBtn.setFont(new Font("宋体",Font.PLAIN,16));
this.add(findBtn);
}
//添加监听器
private void addListener() {
//添加按钮监听
addBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//调用修改方法
addGoodsItem();
}
});
//修改按钮监听
updateBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//调用修改方法
updateGoodsItem();
}
});
//删除按钮监听
delBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//调用修改方法
delGoodsItem();
}
});
//查询按钮监听
findBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
//调用修改方法
//queryGoodsItem();
findGoodsItem();
}
});
}
//添加
public abstract void addGoodsItem();
//修改
public abstract void updateGoodsItem();
//删除
public abstract void delGoodsItem();
//输出全部表内容
public abstract void queryGoodsItem();
//查询
public abstract void findGoodsItem();
}
//定义管理员界面操作类AdminDialogController
package cn.itcast.SuperMarketTest.view;
import java.awt.Frame;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
//管理员界面操作
@SuppressWarnings("serial")
public class AdminDialogController extends AbstractAdminDialog{
private AdminService adminService = new AdminService();
public AdminDialogController(){
super();
}
public AdminDialogController(Frame owner,boolean modal){
super(owner,modal);
//创建对象时展示数据
queryGoodsItem();
}
//查询方法
public void queryGoodsItem(){
//定义表格头
String[] thead = {"货物编号","货物名称","货物单价","货物数量"};
//调用adminService 的查询业务
ArrayList dataList = new AdminService().queryAllGoodsItem();
String[][] tbody = list2Array(dataList);
TableModel dataModal = new DefaultTableModel(tbody,thead);
table.setModel(dataModal);
}
//集合数据转为二维数组
public String[][] list2Array(ArrayList list){
String[][] tbody = new String[list.size()][4];
for(int i = 0;i data = queryAllGoodsItem();
//使用输入编号与所有数据对比
for(int i = 0;i queryAllGoodsItem(){
//调用Dao层的获取所有数据方法获取所有数据
ArrayList data = adminDao.queryAllData();
return data;
}
//查询业务
public boolean queryGoodsItem(String findnum){
//调用Dao层的获取所有数据方法获取所有数据
ArrayList data = queryAllGoodsItem();
//使用输入编号与所有数据对比
for(int i = 0;i data = queryAllGoodsItem();
//使用输入编号与所有数据对比
for(int i = 0;i data = queryAllGoodsItem();
//使用输入编号与所有数据对比
for(int i = 0;i data = queryAllGoodsItem();
//使用输入编号与所有数据对比
for(int i = 0;i queryAllData(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList list = new ArrayList();
try{
//获得数据的连接
conn = JDBCUtils.getConnection();
//获得Statement 对象
stmt = conn.createStatement();
//发送SQL语句
String sql = "SELECT * FROM cangku";
rs = stmt.executeQuery(sql);
//处理结果集
while(rs.next()){
GoodsInfo sgoods = new GoodsInfo();
sgoods.setNum(rs.getString("cnumber"));
sgoods.setName(rs.getString("cname"));
sgoods.setPrice(rs.getString("cprice"));
sgoods.setCount(rs.getString("ccount"));
list.add(sgoods);
}
return list;
} catch (Exception e){
e.printStackTrace();
} finally {
JDBCUtils.release(rs,stmt,conn);//关闭数据库
}
return null;
}
//查询数据
public void find(String cnumber){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
//获得数据的连接
conn = JDBCUtils.getConnection();
//获得Statement对象
stmt = conn.createStatement();
//发送SQL语句
String sql = "select * from cangku where cnumber='"+cnumber+"'";
int num = stmt.executeUpdate(sql);
if(num>0){
System.out.println("查询数据成功!");
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
}
//添加数据
public void add(GoodsInfo mr){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
//获得数据的连接
conn = JDBCUtils.getConnection();
//获得Statement对象
stmt = conn.createStatement();
//发送SQL语句
String sql = "INSERT INTO cangku VALUES('"+mr.getNum()+"','"+mr.getName()+"','"+mr.getPrice()+"','"+mr.getCount()+"')";
int num = stmt.executeUpdate(sql);
if(num>0){
System.out.println("插入数据成功!");
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
}
//删除数据
public void del(String delNumber){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
//获得数据的连接
conn = JDBCUtils.getConnection();
//获得Statement对象
stmt = conn.createStatement();
//首先执行查询语句判断商品存在
rs=stmt.executeQuery("select * from cangku where cnumber='"+delNumber+"'");
System.out.println(delNumber);
if (rs.next()){
//将删除的数据放入历史表
//String strSQL = "insert into cangku_hs(cnumber,cname,cprice,ccount) values('"+rs.getString(1)+"','"+rs.getString(2)+"','"+rs.getString(3)+"','"+rs.getString(4)+"')";
//System.out.println(strSQL.toString());
//stmt.execute(strSQL.toString());
//发送SQL语句
String sql = "DELETE FROM cangku WHERE cnumber='"+delNumber+"'";
System.out.println(sql.toString());
int num = stmt.executeUpdate(sql);
if(num>0){
System.out.println("删除数据成功!");
}
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
JDBCUtils.release(rs,stmt,conn);
}
}
//修改数据
public void update(GoodsInfo mr){
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
//获得数据的连接
conn = JDBCUtils.getConnection();
//获得Statement对象
stmt = conn.createStatement();
//发送SQL语句
String sql = "UPDATE cangku set cname='"+mr.getNum()+"',cprice="+mr.getPrice()+"',ccount='"+mr.getPrice()+"' where cnumber='"+mr.getCount()+"'";
int num = stmt.executeUpdate(sql);
if(num>0){
System.out.println("插入数据成功!");
}
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtils.release(rs,stmt,conn);
}
}
}
//创建超市货物数据模型GoodsInfo
package cn.itcast.SuperMarketTest.view;
//超市货物数据模型
public class GoodsInfo {
//超市货物的私有属性
private String num;//货物名称
private String name;//货物名称
private String price;//货物单价
private String count;//货物数量
//构造方法
public GoodsInfo(){
}
public GoodsInfo(String num,String name,String price,String count){
//有参构造方法
super();
this.num=num;
this.name=name;
this.price=price;
this.count=count;
}
public String getNum(){
return num;
}
public void setNum(String num){
this.num = num;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getPrice(){
return price;
}
public void setPrice(String price){
this.price = price;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
}
Oracle数据库的相关创建在此就不多做赘述,本次超市管理系统代码还需进行优化,功能也不够完善,虽然GUI现在用的很少,但目前阶段多做练习也有一定的好处。至此,基于Oracle数据库下的JavaGUI实现的超市管理系统的所有内容均展示完毕,请多多指教。