资源描述
面向对象程序设计(双语)设计报告
一、超市管理系统总体设计
1、系统概述
随着人们生活水平的不断提高,购物已成为一种时尚。每天都有大量的消费者在各大商场中留下消费信息,所以作为商场的管理人员就需要有一个自动化、智能化的管理系统来完成这些信息的处理。由此我们设计开发小超市管理系统。
目前市场上的超市管理系统,大部分为基于分布式数据库的网络管理系统,对于规模较小的超市没有必要花巨资来购买这样功能全面的管理系统,此外,对于那样功能齐全的管理系统也需要花大精力来维护。基于这种情况,我们用所学的java知识,可以开发一种既能节约资金,又能完成小超市日常的管理任务。
本系统所包括的功能主要有:限于不同身份的人登录的登录界面;权限管理功能;商品销售功能;商品管理功能;销售管理功能。在系统的设计中,用户管理功能可以管理登录本系统的人员,如:管理员、用户和超级用户等。在最初的系统使用中只有技术管理员一种身份。商品销售功能;可以完成商品信息的查询。如:输入一种商品的编号在商品信息栏就显示该商品的所有信息,名称、价格、生产日期、生产地。然后选择购买功能,就可以将商品添加到购物信息栏,最后选择提交,所
购买的商品信息同时也添加到数据库中。在商品管理功能中,可以把一种新引进的商品信息添加到小超市管理系统中。在销售管理功能中,可以查看超市的销售情况,所有商品的购买信息都存储在数据库中。
在系统的安全性方面,我们规定了不同权限的登录用户,管理员(主要负责用户管理)可以登录到任何一个管理模块,以及后台的数据库,能够改变任一个登录者的用户名和密码。用户只能进入到销售界面。老板超级主要查看商品的销售情况和商品管理,他可以进入到商品销售管理查看商品的销售情况。通过这样的权限限制就可以方便的控制系统的安全性。
总之,小超市管理系统是一个经济、实惠的应用软件,适合小规模的商店和超市。操作难度小,易学易用。
2、实现功能
对商品进行录入与记录,员工的信息登记,顾客消费的信息记录,有关会员的积分情况、等各种的统计报表,另外还提供各类统计查询。
3、功能模块图
二、数据库设计
2、 数据库连接程序
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;
public class MySqlConnnection {
//私有空构造方法,保证本类不能够被实例化。
private MySqlConnnection() {
}
//获得数据库连接
public static Connection getConnection() {
Connection conn=null;
try {
//加载MySQL JDBC 驱动程序名称
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//数据库连接参数。
String serverName = "localhost:1433"; // 数据库主机名称
String mydatabase = "学生信息管理"; // 数据库名称
String url = "jdbc:sqlserver://"+serverName + ";DatabaseName=" + mydatabase;
String username = "sa"; //MySql用户名
String password = "123456"; //MySql密码
conn = DriverManager.getConnection(url, username, password);//建立连接
} catch (ClassNotFoundException e) {
e.printStackTrace();//[找]不到MySql驱动程序类时,打印异常
} catch (SQLException e) {
e.printStackTrace();//获得数据库连接发生异常
}
return conn;
}
//关闭数据库连接
public static void closeConnection(Connection conn) {
if (conn != null) { //连接是否有效
try {
if (!conn.isClosed()) { //连接是否已关闭
conn.close(); //关闭连接
}
} catch (SQLException ex1) {
ex1.printStackTrace();
}
}
}
//测试连接类
public static void main(String[] args) throws Exception{
Connection conn = MySqlConnnection.getConnection();
String result="";
if (conn == null) {
result="获得数据库连接错误.";
}else {
result="正常获得数据库连接." + conn;
}
JOptionPane.showMessageDialog(null, result);
}
}
3、数据库表的添删改查(包括程序)
--创建管理员表
/*create table Admin
( adminId int identity(1,1), --自增1单位
adminName char(20) not null,
adminPassword char(20) not null,
primary key (adminId)
)*/
/*--插入数据
INSERT INTO Admin (adminName,adminPassword) VALUES('赵一','1')
INSERT INTO Admin (adminName,adminPassword) VALUES('钱二','2')
INSERT INTO Admin (adminName,adminPassword) VALUES('孙四','3')
select * from Admin*/
--删除数据
/*DELETE FROM Admin WHERE adminId=2;
SELECT * FROM Admin*/
--修改数据
/*UPDATE Admin SET adminName='孙三' WHERE adminPassWord='3'
SELECT * FROM Admin*/
}
三、 图形界面设计与实现
登陆界面
表的操作界面
1)admin表
admin表添加
admin表修改
admin表删除
2)student表
student表添加
student表修改
student表删除
3)course表
course表添加
course表修改
course表删除
4) selecourse表
selecourse表添加
Selecourse表修改
Selecourse表删除
整个程序框架
四、 程序测试
1.dbstudent
package db;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import mybean.student;
public class dbstudent {
private dbstudent() {
}
public static void addstudent(student a) {
Connection conn = null;
try {
conn = MySqlConnnection.getConnection(); // 获得数据连接
PreparedStatement ps = DBUtil
.getPreStatment(conn,
"INSERT INTO student (学号,姓名,性别,系别,专业,年级,班级号,家庭住址) VALUES (?,?,?,?,?,?,?,?)");
ps.setString(1, a.getXuehao());// 入库前进行编码转换
ps.setString(2, a.getXingming());// 设置第2个占位符的内容
ps.setString(3, a.getXingbie());
ps.setString(4, a.getXibie());
ps.setString(5, a.getZhuanye());
ps.setString(6, a.getNianji());
ps.setString(7, a.getBanjihao());
ps.setString(8, a.getJiatingzhuzhi());
ps.executeUpdate(); // 执行更新操作
ps.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
MySqlConnnection.closeConnection(conn);
}
}
// 删除管理员
public static void deletestudent(String xuehao) {
Connection conn = null;
try {
conn = MySqlConnnection.getConnection(); // 获得数据连接
PreparedStatement ps = DBUtil.getPreStatment(conn,
"DELETE FROM student WHERE 学号=?");
ps.setString(1, xuehao); // 设置第1个占位符的内容
ps.executeUpdate();// 执行更新操作
ps.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
MySqlConnnection.closeConnection(conn);
}
}
// 修改管理员
public static void updatestudent(student a) {
Connection conn = null;
try {
conn = MySqlConnnection.getConnection();
String Sql = "UPDATE student SET 姓名=?,性别=?,系别=?,专业=?,年级=?,班级号=?,家庭住址 =? WHERE 学号 =?";
PreparedStatement ps = conn.prepareStatement(Sql);
ps.setString(1, a.getXingming());// 入库前进行编码转换
ps.setString(2, a.getXingbie());
ps.setString(3, a.getXibie());// 设置第3个占位符的内容
ps.setString(4, a.getZhuanye());
ps.setString(5, a.getNianji());
ps.setString(6, a.getBanjihao());
ps.setString(7, a.getJiatingzhuzhi());
ps.setString(8,a.getXuehao());
ps.executeUpdate(); // 执行更新操作
ps.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
MySqlConnnection.closeConnection(conn);
}
}
/*
* public static void main(String[] args) { student s = new student();
* s.setZhuanye("jisuanji"); s.setJiatingzhuzhi("bb");
* s.setXuehao("2013020332001"); dbstudent.updatestudent(s);
*
* }
*
* }
*/
// 根据管理员id号查询
public static student getstudent(String xuehao) {
student a = null;
Connection conn = null;
try {
conn = MySqlConnnection.getConnection();// 获得数据连接
// 建立PreparedStatement用于执行SQL操作
PreparedStatement ps = DBUtil.getPreStatment(conn,
"SELECT * FROM student WHERE 学号=?");
ps.setString(1, xuehao); // 设置第一个占位符的内容
ResultSet rs = ps.executeQuery(); // 执行查询,返回结果集
if (rs.next()) { // 因为管理员id是惟一的,所以只返回一个结果既可
a = new student(rs.getString(1), rs.getString(2),
rs.getString(3), rs.getString(4), rs.getString(5),
rs.getString(6), rs.getString(7), rs.getString(8));
}
ps.close();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
MySqlConnnection.closeConnection(conn);
}
return a;
}
public static void main(String[] args) {
student a = getstudent("2013020332001");
System.out.println(a.getXingming());
}
}
}
}
2.student
package mybean;
public class student {
private String xuehao;
private String Xingming;
private String Xingbie;
private String Xibie;
private String Zhuanye;
private String Nianji;
private String Banjihao;
private String Jiatingzhuzhi;
public student(String xuehao, String xingming, String xingbie,
String xibie, String zhuanye, String nianji, String banjihao,
String jiatingzhuzhi) {
super();
this.xuehao = xuehao;
Xingming = xingming;
Xingbie = xingbie;
Xibie = xibie;
Zhuanye = zhuanye;
Nianji = nianji;
Banjihao = banjihao;
Jiatingzhuzhi = jiatingzhuzhi;
}
public student() {
super();
}
public String getXuehao() {
return xuehao;
}
public void setXuehao(String xuehao) {
this.xuehao = xuehao;
}
public String getXingming() {
return Xingming;
}
public void setXingming(String xingming) {
Xingming = xingming;
}
public String getXingbie() {
return Xingbie;
}
public void setXingbie(String xingbie) {
Xingbie = xingbie;
}
public String getXibie() {
return Xibie;
}
public void setXibie(String xibie) {
Xibie = xibie;
}
public String getZhuanye() {
return Zhuanye;
}
public void setZhuanye(String zhuanye) {
Zhuanye = zhuanye;
}
public String getNianji() {
return Nianji;
}
public void setNianji(String nianji) {
Nianji = nianji;
}
public String getBanjihao() {
return Banjihao;
}
public void setBanjihao(String banjihao) {
Banjihao = banjihao;
}
public String getJiatingzhuzhi() {
return Jiatingzhuzhi;
}
public void setJiatingzhuzhi(String jiatingzhuzhi) {
Jiatingzhuzhi = jiatingzhuzhi;
}
}
3.Panelstudent
package gui;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import db.dbstudent;
import mybean.student;
@SuppressWarnings("serial")
public class Panelstudent extends MyPanel{
public Panelstudent(String database, String tableName){
super(database,tableName);
}
@Override
protected void dealAddbtn() {
student a1 = new student(); //改成你自己的bean
a1.setXuehao(fields[0].getText().trim());
a1.setXingming(fields[1].getText().trim());
a1.setXingbie(fields[2].getText().trim());
a1.setXibie(fields[3].getText().trim());
a1.setZhuanye(fields[4].getText().trim());
a1.setNianji(fields[5].getText().trim());
a1.setBanjihao(fields[6].getText().trim());
a1.setJiatingzhuzhi(fields[7].getText().trim());
dbstudent.addstudent(a1);
System.out.println(a1.getXuehao());
tableModel.setQuery("student");// 查询数据库表Admin中的记录,显示在表格中 ,参数填入表名
super.dealAddbtn();
}
protected void dealDelbtn() {
String xuehao=fields[0].getText().trim();
student a1=dbstudent.getstudent(xuehao);
if(a1!=null){
int k=JOptionPane.showConfirmDialog(null, "确认删除?");
if(k==JOptionPane.YES_OPTION){
dbstudent.deletestudent(xuehao);//删除数据库表Admin中记录
JOptionPane.showMessageDialog(null, "删除成功!");
}
else
JOptionPane.showMessageDialog(null, "没有删除!");
}
else{
JOptionPane.showMessageDialog(null, "没有该记录");
}
tableModel.setQuery("student");//查询数据库表Admin中的记录,显示在表格中
}
//修改记录
protected void dealUpdatebtn() {
String xuehao=fields[0].getText().trim();
//从库中查询指定id的记录,若不存在,则返回null
student a1=dbstudent.getstudent(xuehao);
if(a1!=null){
a1.setXuehao(fields[0].getText().trim());
a1.setXingming(fields[1].getText().trim());
a1.setXingbie(fields[2].getText().trim());
a1.setXibie(fields[3].getText().trim());
a1.setZhuanye(fields[4].getText().trim());
a1.setNianji(fields[5].getText().trim());
a1.setBanjihao(fields[6].getText().trim());
a1.setJiatingzhuzhi(fields[7].getText().trim());
dbstudent.updatestudent(a1);//修改记录
tableModel.setQuery("student");
this.highlightRow(xuehao);//表格定位到操作行
}
else{
JOptionPane.showMessageDialog(null, "没有该记录");
}
}
//查询记录
protected void dealQuerybtn() {
student a1=null;
String xuehao=fields[0].getText().trim();
try {
//从库中查询指定id的记录,若不存在,则返回null
a1=dbstudent.getstudent(xuehao);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "请输入整数类型的id号!");
}
if(a1==null){
JOptionPane.showMessageDialog(null, "没有该记录");
}
else
a1.setXingming(fields[0].getText().trim());
a1.setXingbie(fields[1].getText().trim());
a1.setXibie(fields[2].getText().trim());
a1.setZhuanye(fields[3].getText().trim());
a1.setNianji(fields[4].getText().trim());
a1.setBanjihao(fields[5].getText().trim());
a1.setJiatingzhuzhi(fields[6].getText().trim());
this.highlightRow(xuehao);//表格定位到操作行
}
public static void main(String[] args) {
JFrame frame = new JFrame("student表");
frame.getContentPane().add(new Panelstudent("selecourse","student"));
frame.setSize(600, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//测试MyPanel类
/* public static void main(String[] args) {
JFrame frame = new JFrame("学院实验");//窗口名,可以不改,最好改
frame.getContentPane().add(new PanelAdminTest("studentsystem", "Admin"));//第一个参数 是 数据库 ,第二个参数 是表名
frame.setSize(600, 260);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}*/
4.TestFrame
import gui.MyPanel;
import gui.PanelAdminTest;
import gui.Panelcourse;
import gui.Panelselecourse;
import gui.Panelstudent;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import db.dbAdmin;
public class TestFrame extends JFrame {
private static JDesktopPane theDesktop;
JMenuItem loginItem,exitItem,helpItem;//"登录"、"退出"和"帮助内容"菜单项
final String itemString[] = { "Admin", "student", "course","selecourse" };
final JPanel itemPanel[] = { new PanelAdminTest("学生信息管理", "Admin"),
new Panelcourse("学生信息管理", "Course"),
new Panelstudent("学生信息管理", "student") ,
new Panelselecourse("学生信息管理","selecourse")
};
JMenuItem item[] = new JMenuItem[itemString.length];// "题库管理"菜单的4个菜单项:3个表和"生成试卷"
public TestFrame() {
super("学生信息管理");
//1."登录"菜单:有两个菜单项--"登录"和"退出"
JMenu loginMenu = new JMenu("登录");
JMenuItem loginItem = new JMenuItem("登录");
loginMenu.add(loginItem);
loginItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String name=JOptionPane.showInputDialog(null, "请输入登陆名字:");
String password=JOptionPane.showInputDialog(null, "请输入登陆密码:");
if(dbAdmin.isAdmin(name, password)){
JOptionPane.showMessageDialog(null, "登录成功!");
for(int i=0;i<item.length;i++)
item[i].setEnabled(true);
}
else{
JOptionPane.showMessageDialog(null, "密码不对,登录失败!");
}
}
});
JMenuItem exitItem = new JMenuItem("退出");
loginMenu.add(exitItem);
exitItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//2."题库管理"菜单:库中的每个表对应一个菜单项,实现添、删、改、查;"导出试卷"菜单项
JMenu adminMenu = new JMenu("学生信息管理");
for(int i=0;i<item.length;i++)
item[i]=builedAdminMenuItem(adminMenu,itemString[i],itemPanel[i]);
//3."帮助"菜单
JMenu helpMenu = new JMenu("帮助");
JMenuItem helpItem = new JMenuItem("帮助内容");
helpMenu.add(helpItem);
helpItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(TestFrame.this, "运行程序后,看相应的代码");
}
});
//4.创建菜单条,添加菜单
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(loginMenu);
bar.add(adminMenu);
bar.add(helpMenu);
//5.窗口中间放置桌面面板,用来显示内部窗口
theDesktop = new JDesktopPane();
getContentPane().add(theDesktop,BorderLayout.CENTER);
setSize(800, 600);
setVisible(true);
}
//创建菜单项的通用方法:参数menu是菜单项所添加在其上的菜单;
//参数itemName是菜单项的名字,因其在匿名内部类对象中引用,必须声明为final;
//参数panel是点击菜单项后所生成的内部窗口中的面板对象,必须声明为final。
private JMenuItem builedAdminMenuItem(JMenu menu,final String itemName,final JPanel panel){
final JMenuItem menuItem = new JMenuItem(itemName);
menu.add(menuItem);
展开阅读全文