这是我第一次接触Oracle数据库并且利用JavaSwing图形界面编写的一个简单的超市管理系统,其实整体代码后续看了一下,因为JDBC刚接触以及之前JavaSE没学清楚,弄得代码逻辑很繁杂,后面想改又懒,就先记着,有空的话再说==。
具体要求如下:
某超市需要开发购物管理系统进行收银管理,需要为:
(1)系统用户分为管理员和收银员,管理员有用户管理,会员管理和商品管理的功能,收银员通过系统进行收银;
(2)只有会员能在超市购买商品;
(3)系统有一些统计分析功能,如每个月销售最好的商品,不同年龄层(如10年分类一个年龄层)的购物类别,单月收银最高的收银员等。
要求:
(1)后台数据库使用的是Oracle;
(2)超市购物管理系统的所有操作均在可视化界面下进行,前台开发工具不限;
(3)最后提交材料包括代码和文档。
具体代码如下:
dao包
管理员操作
package supermaket.dao;
//对货物信息表进行操作的数据访问类
import chaoshiguanli.entity.Good;
import supermaket.entity.GoodsInfo;
import supermaket.entity.Cashier;
import supermaket.entity.Member;
import supermaket.until.JDBCUtils;
import java.sql.*;
import java.util.ArrayList;
/*
管理员操作类
通过调用sql查询获取数据库信息,并更新前端表格
*/
public class AdminDao {
//仓库管理
// 获取所有数据,不需要文本框,就一个按钮,点击会全部跳出结果
public ArrayList<GoodsInfo> queryAllData() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<GoodsInfo> list = new ArrayList<GoodsInfo>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement 对象
stmt = conn.createStatement();
// 发送SQL语句,select * from scott.t_goods
String sql = "SELECT * FROM scott.t_goods order by g_num";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
GoodsInfo sgoods = new GoodsInfo();
sgoods.setNum(rs.getString("g_num"));
sgoods.setName(rs.getString("g_name"));
sgoods.setPrice(rs.getString("g_price"));
sgoods.setCount(rs.getString("g_count"));
list.add(sgoods);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);// 关闭数据库
}
return null;
}
//需要修改,修改成一个单独查询按钮,点击跳出对应查询结果
// 查询数据
public GoodsInfo 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 scott.t_goods where g_num='" + cnumber + "'";
rs = stmt.executeQuery(sql);
if (rs.next()) {
System.out.println("查询数据成功!");
GoodsInfo goodsInfo=new GoodsInfo();
goodsInfo.setNum(rs.getString("g_num"));
goodsInfo.setName(rs.getString("g_name"));
goodsInfo.setPrice(rs.getString("g_price"));
goodsInfo.setCount(rs.getString("g_count"));
return goodsInfo;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
// 添加数据
// ✔
public void add(GoodsInfo mr) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句,insert into scott.t_goods values(g_seq.nextval,name,price,count)
//insert into scott.t_goods values(g_seq.nextval,'饼干',5,200)
String sql = "INSERT INTO scott.t_goods VALUES(scott.g_seq.nextval,'" + mr.getName() + "'," + Integer.valueOf(mr.getPrice())
+ "," + Integer.valueOf(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();
// 首先执行查询语句判断商品存在,select * from scott.t_goods where g_num=num
rs = stmt.executeQuery("select * from scott.t_goods where g_num='" + delNumber + "'");
System.out.println(delNumber);
if (rs.next()) {
//sql语句。delete from scott.t_goods where g_num=num
String sql = "DELETE FROM scott.t_goods WHERE g_num='" + delNumber + "'";
System.out.println(sql);
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语句,update scott.t_good set g_name = name,g_price=price,g_count=count where g_num=num
String sql = "UPDATE scott.t_goods set g_name='" + mr.getName() + "',g_price=" + Integer.valueOf(mr.getPrice()) + ",g_count="
+ Integer.valueOf(mr.getCount()) + " where g_num='" + mr.getNum() + "'";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("更新数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
//会员管理
/**
* 添加会员
* @param new_mem:会员账号,会员密码,会员名,会员年龄
*/
public void addMem(Member new_mem){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句,INSERT INTO scott.t_member VALUES(m_seq.nextval,accout,psw,name,age)
String sql = "INSERT INTO scott.t_member VALUES(scott.m_seq.nextval,'" + new_mem.getAccout() + "','" + new_mem.getPsw() +
"','" + new_mem.getName()+"'," + new_mem.getAge() + ")";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("插入数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
/**
* 删除会员
* @param delAccout:会员账号
*/
public void delMem(String delAccout){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 首先执行查询语句判断会员是否存在,select * from scott.t_member where m_acc=acc;
rs = stmt.executeQuery("select * from scott.t_member where m_acc='" + delAccout + "'");
System.out.println(delAccout);
if (rs.next()) {
String sql = "DELETE FROM scott.t_member WHERE m_acc='" + delAccout + "'";
System.out.println(sql);
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("删除数据成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
/**
* 更新会员细腻些
* @param mem:会员账号,会员密码,会员姓名,会员年龄
*/
public void updateMem(Member mem){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
// update scott.t_member set m_acc=acc,m_pwd=pwd,m_name=name.m_age=age where m_acc=acc;
String sql = "UPDATE scott.t_member set m_acc='" + mem.getAccout() + "',m_pwd='" + mem.getPsw() +"',m_name='"+
mem.getName() +"',m_age="+ mem.getAge()+" where m_acc='" + mem.getAccout() + "'";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("更新数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
/**
* 查询全部会员
* @return 会员信息链表
*/
public ArrayList<Member> queryAllMem() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Member> list = new ArrayList<Member>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement 对象
stmt = conn.createStatement();
// 发送SQL语句
// select* from scott.t_member
String sql = "SELECT * FROM scott.t_member";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
Member member = new Member();
member.setAccout(rs.getString("m_acc"));
member.setPsw(rs.getString("m_pwd"));
member.setName(rs.getString("m_name"));
member.setAge(rs.getInt("m_age"));
list.add(member);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);// 关闭数据库
}
return null;
}
//查询单个会员信息
public Member queMem(String acc){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句 select * from scott.t_member where m_acc=acc;
String sql = "select * from scott.t_member where m_acc='" + acc + "'";
rs = stmt.executeQuery(sql);
if (rs.next() ) {
System.out.println("查询数据成功!");
Member member = new Member();
member.setAccout(rs.getString("m_acc"));
member.setPsw(rs.getString("m_pwd"));
member.setName(rs.getString("m_name"));
member.setAge(rs.getInt("m_age"));
return member;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
//收银员管理
//增加会员,
public void addCash(Cashier cashier){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句,INSERT INTO scott.t_cashier VALUES(c_seq.nextval,accout,psw,name)
String sql = "INSERT INTO scott.t_cashier VALUES(scott.c_seq.nextval,'" + cashier.getAccout() + "','" + cashier.getPsw() +
"','"+cashier.getName()+"')";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("插入数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
//删除会员
public void delCash(String delAccout){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 首先执行查询语句判断会员是否存在,select * from scott.t_cashier where m_acc=acc;
rs = stmt.executeQuery("select * from scott.t_cashier where c_acc='" + delAccout + "'");
System.out.println(delAccout);
if (rs.next()) {
String sql = "DELETE FROM scott.t_cashier WHERE c_acc='" + delAccout + "'";
System.out.println(sql);
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("删除数据成功!");
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
//修改会员
public void updateCash(Cashier cashier){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
// update scott.t_cashier set c_acc=acc,c_pwd=pwd,c_name=name.c_age=age where c_acc=acc;
String sql = "UPDATE scott.t_cashier set c_acc='" + cashier.getAccout() + "',c_pwd='" + cashier.getPsw() +"',c_name='"+
cashier.getName() +"' where c_acc='" + cashier.getAccout() + "'";
int num = stmt.executeUpdate(sql);
if (num > 0) {
System.out.println("更新数据成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
}
//查询全部会员信息
public ArrayList<Cashier> queryAllCash() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Cashier> list = new ArrayList<Cashier>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement 对象
stmt = conn.createStatement();
// 发送SQL语句
// select* from scott.t_cashier
String sql = "SELECT * FROM scott.t_cashier";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
Cashier cashier = new Cashier();
cashier.setAccout(rs.getString("c_acc"));
cashier.setPsw(rs.getString("c_pwd"));
cashier.setName(rs.getString("c_name"));
list.add(cashier);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);// 关闭数据库
}
return null;
}
//查询单个会员信息
//✔
public Cashier queCash(String acc){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句 select * from scott.t_cashier where c_acc=acc;
String sql = "select * from scott.t_cashier where c_acc='" + acc + "'";
rs = stmt.executeQuery(sql);
if (rs.next() ) {
System.out.println("CASH查询数据成功!");
Cashier cashier = new Cashier();
cashier.setAccout(rs.getString("c_acc"));
cashier.setPsw(rs.getString("c_pwd"));
cashier.setName(rs.getString("c_name"));
return cashier;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
//统计服务
/**
* 查询历史销售额
* @return
*/
public String[][] allsale(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
//长度查询
String leng_sql="select count(*)as num from scott.t_goods_sal ";
rs=stmt.executeQuery(leng_sql);
int leng=0;
if (rs.next())
leng=rs.getInt("num");
System.out.println("长度为"+leng);
// 发送SQL语句 select g_num,g_price,sum(g_sales)as sale from scott.t_goods_sal group by g_num,g_name,g_price
String sql="select g_num,g_name,g_price,sum(g_sales)as sale from scott.t_goods_sal " +
"group by g_num,g_name,g_price order by sale";
rs=stmt.executeQuery(sql);
String [][] list=new String[leng][4];
int i=0;
while (rs.next()&&leng!=0){
list[i][0]=rs.getString("g_num");
list[i][1]=rs.getString("g_name");
list[i][2]=rs.getString("g_price");
list[i][3]=rs.getString("Sale");
i++;
if (i==leng)
break;;
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
/**
* 返回最大销量或者最小销量
* @param choice,0-->最大值,1-->最小值
* @return 最大值||最小值
*/
public String[] maxorminsale(int choice){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
String sql;
if (choice==0) {
//最大
// 发送SQL语句 select g_num,g_price,sum(g_sales)as sale from scott.t_goods_sal group by g_num,g_name,g_price
sql = "select g_num,g_name,g_price,sum(g_sales)as sale from scott.t_goods_sal" +
" where g_num in (select g_num from (select g_num,sum(g_sales)as sales" +
" from scott.t_goods_sal group by g_num) where sales=(Select max(sales) From(select g_num,sum(g_sales)as sales" +
" from scott.t_goods_sal group by g_num)))group by g_num,g_name,g_price";
}
else{
sql="select g_num,g_name,g_price,sum(g_sales)as sale from scott.t_goods_sal" +
" where g_num in (select g_num from (select g_num,sum(g_sales)as sales" +
" from scott.t_goods_sal group by g_num) where sales=(Select min(sales) From(select g_num,sum(g_sales)as sales" +
" from scott.t_goods_sal group by g_num)))group by g_num,g_name,g_price";
}
rs=stmt.executeQuery(sql);
if(rs.next()){
String[] goodsdata=new String[4];
goodsdata[0]=rs.getString("g_num");
goodsdata[1]=rs.getString("g_name");
goodsdata[2]=rs.getString("g_price");
goodsdata[3]=rs.getString("sale");
return goodsdata;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
/**
* 返回总的收银账单
* @return list, String[][]类型账单列表
*/
public String[][] allcash(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
int leng=0;
String leng_sql="select count(*)as num from scott.t_cashier_cash";
rs=stmt.executeQuery(leng_sql);
if (rs.next())
leng=rs.getInt("num");
System.out.println("长度为"+leng);
// 发送SQL语句 select g_num,sum(cash)as cash from scott.t_cashier_cash group by g_num;
String sql="select c_acc,sum(cash)as cashs from scott.t_cashier_cash group by c_acc";
rs=stmt.executeQuery(sql);
String [][] list=new String[leng][2];
int i=0;
while (rs.next()&&leng!=0){
list[i][0]=rs.getString("c_acc");
list[i][1]=rs.getString("cashs");
i++;
if (i==leng)
break;
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
public String[] turnover(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
String sql="select c_acc,sum(cash)as Cashs from scott.t_cashier_cash" +
" where c_acc in (select c_acc from (select c_acc,sum(cash)as cashs" +
" from scott.t_cashier_cash group by c_acc) where cashs=(Select max(cashs) from" +
" (select c_acc,sum(cash)as cashs from scott.t_cashier_cash group by c_acc))) group by c_acc";
rs=stmt.executeQuery(sql);
if (rs.next()){
String[] cashdata=new String[2];
cashdata[0]=rs.getString("c_acc");//收银员编号
cashdata[1]=rs.getString("Cashs");//对应的收银额
return cashdata;
}else
return null;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
public String[] buy(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
// 发送SQL语句
String sql="select m_acc,sum(buy)as Buy from scott.t_goods_mem" +
" where m_acc in (select m_acc from (select m_acc,sum(buy)as buys" +
" from scott.t_goods_mem group by m_acc) where buys=(Select max(buy) from" +
" (select m_acc,sum(buy)as buys from scott.t_goods_mem group by m_acc))) group by m_acc";
rs=stmt.executeQuery(sql);
if (rs.next()){
String [] data=new String[2];
data[0]=rs.getString("m_acc");
data[1]=rs.getString("Buy");
return data;
}else
return null;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
public String[][] ageforgoods(){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement对象
stmt = conn.createStatement();
String[][]data=new String[6][3];
int loc=0;
for (int i=0;i<=60;i=i+10){
String sql="select g_num,g_name from scott.t_goods_age where age between " +i+" and "+(i+10)+
" group by g_num,g_name";
rs=stmt.executeQuery(sql);
if (rs.next()){
data[loc][0]=i+"~"+(i+10);
data[loc][1]=rs.getString("g_num");
data[loc][2]=rs.getString("g_name");
loc++;
}
}
if (loc!=0)
return data;
else
return null;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);
}
return null;
}
/**
* 查询全部会员
* @return 会员信息链表
*/
public ArrayList<Member> querymemhis() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Member> list = new ArrayList<Member>();
try {
conn = JDBCUtils.getConnection();
stmt = conn.createStatement();
// 发送SQL语句
String sql = "select * from scott.t_member_his";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
Member member = new Member();
member.setAccout(rs.getString("m_acc"));
member.setPsw(rs.getString("m_pwd"));
member.setName(rs.getString("m_name"));
member.setAge(rs.getInt("m_age"));
list.add(member);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);// 关闭数据库
}
return null;
}
public ArrayList<Good> querygoodhis() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<Good> list = new ArrayList<Good>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement 对象
stmt = conn.createStatement();
String sql = "SELECT * FROM scott.t_goods_his";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
Good sgoods = new Good();
sgoods.setNum(rs.getString("g_num"));
sgoods.setName(rs.getString("g_name"));
sgoods.setPrice(rs.getString("g_price"));
list.add(sgoods);
}
return list;
} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCUtils.release(rs, stmt, conn);// 关闭数据库
}
return null;
}
}
收银员操作
package supermaket.dao;
import supermaket.entity.GoodsInfo;
import supermaket.entity.Member;
import supermaket.until.JDBCUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class CashierDao {
// 获取所有数据,不需要文本框,在会员界面只会在初始情况自动调用,还有购物车结算后自动调用
public ArrayList<GoodsInfo> queryAllData() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList<GoodsInfo> list = new ArrayList<GoodsInfo>();
try {
// 获得数据的连接
conn = JDBCUtils.getConnection();
// 获得Statement 对象
stmt = conn