本人小菜鸟一只~这是我大三下学期软件工程课设的项目,都是自己写的哦~答辩成绩A~
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.sql.*;
public class Account
{
JFrame frame=new JFrame("记账簿");
JFrame jf=new JFrame("新建");
JFrame jj=new JFrame("统计");
JFrame jf1 =new JFrame("查询");
JLabel jl=new JLabel("请输入日期(如2013-03-08)");
JTextField jt=new JTextField(18);
JButton jb=new JButton("确定");
JLabel date=new JLabel("日期");
JLabel item=new JLabel("项目");
JLabel type=new JLabel("类型");
JLabel type1=new JLabel("类型");
JLabel pay=new JLabel("支出");
JLabel month=new JLabel("月份");
JLabel year=new JLabel("年份");
JLabel year1=new JLabel("年份");
JLabel a=new JLabel("年");
JLabel b=new JLabel("月");
JLabel c=new JLabel("日");
JTextField jt1=new JTextField(18);
JTextField jt2=new JTextField(18);
JTextField jt3=new JTextField(18);
JTextField jt4=new JTextField(18);
Box y=Box.createVerticalBox();
Box x1=Box.createHorizontalBox();
Box x2=Box.createHorizontalBox();
Box x3=Box.createHorizontalBox();
Box x4=Box.createHorizontalBox();
Box x5=Box.createHorizontalBox();
JButton ok=new JButton("确定");
JButton ok1=new JButton("确定");
JButton ok2=new JButton("确定");
JButton add=new JButton("添加");
JButton query=new JButton("查询");
JButton sum=new JButton("统计");
JButton back=new JButton("返回");
JMenuBar menubar=new JMenuBar();
JMenu file=new JMenu("文件");
JMenu look=new JMenu("查看");
JMenuItem create=new JMenuItem("新建");
JMenuItem save1=new JMenuItem("保存");
JMenuItem result=new JMenuItem("本月总支出");
JMenuItem search=new JMenuItem("查询");
private JScrollPane scrollPane;
private ResultSetTableModel model;
private ResultSet rs;
private Connection conn;
private Statement stmt;
JPanel p=new JPanel();
JPanel jp=new JPanel();
private JComboBox jc1=new JComboBox<>();
private JComboBox jc2=new JComboBox<>();
private JComboBox jc3=new JComboBox<>();
private JComboBox jc4=new JComboBox<>();
private JComboBox jc5=new JComboBox<>();
private JComboBox jc6=new JComboBox<>();
private JComboBox jc7=new JComboBox<>();
private JComboBox jc8=new JComboBox<>();
private JComboBox jc9=new JComboBox<>();
void init() throws ClassNotFoundException, IOException
{
jc1.addItem("01");
jc1.addItem("02");
jc1.addItem("03");
jc1.addItem("04");
jc1.addItem("05");
jc1.addItem("06");
jc1.addItem("07");
jc1.addItem("08");
jc1.addItem("09");
jc1.addItem("10");
jc1.addItem("11");
jc1.addItem("12");
jc7.addItem("01");
jc7.addItem("02");
jc7.addItem("03");
jc7.addItem("04");
jc7.addItem("05");
jc7.addItem("06");
jc7.addItem("07");
jc7.addItem("08");
jc7.addItem("09");
jc7.addItem("10");
jc7.addItem("11");
jc7.addItem("12");
jc8.addItem("01");
jc8.addItem("02");
jc8.addItem("03");
jc8.addItem("04");
jc8.addItem("05");
jc8.addItem("06");
jc8.addItem("07");
jc8.addItem("08");
jc8.addItem("09");
jc9.addItem("伙食饭费");
jc9.addItem("零食饮料");
jc9.addItem("学习用品");
jc9.addItem("娱乐活动");
jc9.addItem("医疗保健");
jc9.addItem("网上购物");
jc9.addItem("服装鞋袜");
jc9.addItem("洗澡理发");
jc3.addItem("合计");
jc3.addItem("伙食饭费");
jc3.addItem("零食饮料");
jc3.addItem("学习用品");
jc3.addItem("娱乐活动");
jc3.addItem("医疗保健");
jc3.addItem("网上购物");
jc3.addItem("服装鞋袜");
jc3.addItem("洗澡理发");
jc4.addItem("合计");
jc4.addItem("伙食饭费");
jc4.addItem("零食饮料");
jc4.addItem("学习用品");
jc4.addItem("娱乐活动");
jc4.addItem("医疗保健");
jc4.addItem("网上购物");
jc4.addItem("服装鞋袜");
jc4.addItem("洗澡理发");
for(int i=10;i<=31;i++)
{
jc8.addItem(String.valueOf(i));
}
for(int i=1949;i<=2013;i++)
{
jc2.addItem(String.valueOf(i));
}
for(int i=1949;i<=2013;i++)
{
jc5.addItem(String.valueOf(i));
}
for(int i=1949;i<=2013;i++)
{
jc6.addItem(String.valueOf(i));
}
show();
jp.add(add);
jp.add(query);
jp.add(sum);
jp.add(back);
frame.add(jp,BorderLayout.NORTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
initFrame();
add.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Box y=Box.createVerticalBox();
Box x1=Box.createHorizontalBox();
Box x2=Box.createHorizontalBox();
Box x3=Box.createHorizontalBox();
Box x4=Box.createHorizontalBox();
Box x5=Box.createHorizontalBox();
x1.add(date);
x1.add(jc6);
x1.add(a);
x1.add(jc7);
x1.add(b);
x1.add(jc8);
x1.add(c);
x2.add(item);
x2.add(jt2);
x3.add(type);
x3.add(jc9);
x4.add(pay);
x4.add(jt4);
x5.add(ok);
y.add(Box.createVerticalStrut(6));
y.add(x1);
y.add(Box.createVerticalStrut(16));
y.add(x2);
y.add(Box.createVerticalStrut(16));
y.add(x3);
y.add(Box.createVerticalStrut(16));
y.add(x4);
y.add(Box.createVerticalStrut(16));
y.add(x5);
y.add(Box.createVerticalStrut(16));
jf.add(y);
jf.pack();
jf.setBounds(616, 288, 240, 236);
jf.setVisible(true);
}
});
ok.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String year=(String)jc6.getSelectedItem();
String month=(String)jc7.getSelectedItem();
String day=(String)jc8.getSelectedItem();
String item=jt2.getText();
String type=(String)jc9.getSelectedItem();
String cost=jt4.getText();
try{
if(item.equals(""))
{
JOptionPane.showMessageDialog(frame, "项目不能 为空!请输入项目!");
}
else if(cost.equals(""))
{
JOptionPane.showMessageDialog(frame,"支出不能为空!");
}
else if(!(cost.matches("^[0-9]+$")))
{
JOptionPane.showMessageDialog(frame,"支出必须为数字!");
jt4.setText("");
}
else
{
stmt.executeUpdate("insert into account"+
"(日期,项目,类型,支出) values"
+"('"+year+"-"+month+"-"+day+"','"+item+"','"+type+"','"+cost+"')");
JOptionPane.showMessageDialog(frame, "添加成功!");
}
try
{
// 如果装载JTable的JScrollPane不为空
if (scrollPane != null)
{
// 从主窗口中删除表格
frame.remove(scrollPane);
}
String query = "select * from account ";
// 查询用户选择的数据表
rs = stmt.executeQuery(query);
// 使用查询到的ResultSet创建TableModel对象
model = new ResultSetTableModel(rs);
rs.last();
// 使用TableModel创建JTable,并将对应表格添加到窗口中
JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.validate();
jf.setVisible(false);
}
catch (SQLException e2)
{
e2.printStackTrace();
}
}
catch (SQLException e1)
{
//e1.printStackTrace();
JOptionPane.showMessageDialog(frame,"添加失败,请检查输入!");
}
}
});
query.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Box y=Box.createVerticalBox();
Box x1=Box.createHorizontalBox();
Box x2=Box.createHorizontalBox();
x1.add(jl);
x1.add(jt);
x2.add(jb);
y.add(Box.createVerticalStrut(16));
y.add(x1);
y.add(Box.createVerticalStrut(16));
y.add(x2);
y.add(Box.createVerticalStrut(16));
jf1.add(y);
jf1.pack();
jf1.setVisible(true);
}
});
jb.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String date1=jt.getText();
jt.setText("");
jf1.setVisible(false);
try
{
// 如果装载JTable的JScrollPane不为空
if (scrollPane != null)
{
// 从主窗口中删除表格
frame.remove(scrollPane);
}
String query1 = "select * from account where 日期='"+date1+"'";
// 查询用户选择的数据表
ResultSet rst=stmt.executeQuery(query1);
if(rst.next())
{
// 使用查询到的ResultSet创建TableModel对象
model = new ResultSetTableModel(rst);
JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.validate();
}
else
{
show();
JOptionPane.showMessageDialog(frame, "无查询结果!请输入有效日期!");
Box y=Box.createVerticalBox();
Box x1=Box.createHorizontalBox();
Box x2=Box.createHorizontalBox();
x1.add(jl);
x1.add(jt);
x2.add(jb);
y.add(Box.createVerticalStrut(16));
y.add(x1);
y.add(Box.createVerticalStrut(16));
y.add(x2);
y.add(Box.createVerticalStrut(16));
jf1.add(y);
jf1.pack();
jf1.setVisible(true);
}
}
catch (SQLException | ClassNotFoundException | IOException e3)
{
e3.printStackTrace();
JOptionPane.showMessageDialog(frame, "请重新输入!");
}
}
});
sum.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Box y=Box.createVerticalBox();
Box x1=Box.createHorizontalBox();
Box x2=Box.createHorizontalBox();
x1.add(year1);
x1.add(Box.createHorizontalStrut(10));
x1.add(jc5);
x1.add(Box.createHorizontalStrut(10));
x1.add(month);
x1.add(Box.createHorizontalStrut(10));
x1.add(jc1);
x1.add(Box.createHorizontalStrut(10));
x1.add(type);
x1.add(Box.createHorizontalStrut(10));
x1.add(jc3);
x1.add(Box.createHorizontalStrut(10));
x1.add(ok1);
x1.add(Box.createHorizontalStrut(10));
x2.add(year);
x2.add(Box.createHorizontalStrut(10));
x2.add(jc2);
x2.add(Box.createHorizontalStrut(10));
x2.add(type1);
x2.add(Box.createHorizontalStrut(10));
x2.add(jc4);
x2.add(Box.createHorizontalStrut(10));
x2.add(ok2);
x2.add(Box.createHorizontalStrut(10));
y.add(Box.createVerticalStrut(16));
y.add(x1);
y.add(Box.createVerticalStrut(16));
y.add(x2);
y.add(Box.createVerticalStrut(16));
jj.add(y);
jj.setVisible(true);
jj.pack();
}
});
ok1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
String year=(String)jc5.getSelectedItem();
String month=(String)jc1.getSelectedItem();
String type=(String)jc3.getSelectedItem();
// 如果装载JTable的JScrollPane不为空
if (scrollPane != null)
{
// 从主窗口中删除表格
frame.remove(scrollPane);
}
String query1;
String query2="select * from account where 日期 like'"+year+"-"+month+"%'";
if(type=="合计")
query1="select sum(支出) 共消费(元) from account where 日期 like'"+year+"-"+month+"%' ";
else
query1 = "select sum(支出) 共消费(元) from account where 日期 like'"+year+"-"+month+"%' and 类型='"+type+"'";
// 查询用户选择的数据表
ResultSet rstt=stmt.executeQuery(query2);
if(!rstt.next())
JOptionPane.showMessageDialog(frame, "无查询结果!");
ResultSet rst=stmt.executeQuery(query1);
// 使用查询到的ResultSet创建TableModel对象
model = new ResultSetTableModel(rst);
JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.validate();
}
catch (SQLException e3)
{
e3.printStackTrace();
}
}
});
ok2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
String year=(String)jc2.getSelectedItem();
String type=(String)jc4.getSelectedItem();
// 如果装载JTable的JScrollPane不为空
if (scrollPane != null)
{
// 从主窗口中删除表格
frame.remove(scrollPane);
}
String query1;
String query3="select * from account where 日期 like'"+year+"%' ";
if(type=="合计")
query1="select sum(支出) 共消费(元) from account where 日期 like'"+year+"%'";
else
query1 = "select sum(支出) 共消费(元) from account where 日期 like'"+year+"%' and 类型='"+type+"'";
// 查询用户选择的数据表
ResultSet rstp=stmt.executeQuery(query3);
if(!rstp.next())
JOptionPane.showMessageDialog(frame, "无查询结果!");
ResultSet rst=stmt.executeQuery(query1);
// 使用查询到的ResultSet创建TableModel对象
model = new ResultSetTableModel(rst);
JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.validate();
}
catch (SQLException e3)
{
e3.printStackTrace();
}
}
});
back.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
try
{
show();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
});
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
try
{
if (conn != null) conn.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
});
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void show() throws ClassNotFoundException, IOException
{
try
{
// 如果装载JTable的JScrollPane不为空
if (scrollPane != null)
{
// 从主窗口中删除表格
frame.remove(scrollPane);
}
// 如果结果集不为空,则关闭结果集
if (rs != null)
{
rs.close();
}
String query = "select * from account";
// 获取数据库连接
conn = JDBC.getConnection();
// 创建Statement
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE
, ResultSet.CONCUR_UPDATABLE);
// 查询用户选择的数据表
rs = stmt.executeQuery(query);
// 使用查询到的ResultSet创建TableModel对象
model = new ResultSetTableModel(rs);
// 使用TableModel创建JTable,并将对应表格添加到窗口中
JTable table = new JTable(model);
scrollPane = new JScrollPane(table);
frame.add(scrollPane, BorderLayout.CENTER);
frame.validate();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
public void initFrame()
{
JLabel jlpic = new JLabel();
ImageIcon icon = new ImageIcon("D:\\scenery.jpg");
icon.setImage(icon.getImage().getScaledInstance(icon.getIconWidth(),
icon.getIconHeight(), Image.SCALE_DEFAULT));
jlpic.setBounds(0, 0, 100, 100);
jlpic.setHorizontalAlignment(0);
jlpic.setIcon(icon);
frame.setSize(1366, 888);
frame.add(jlpic,BorderLayout.SOUTH);
}
public static void main(String[] args) throws Exception
{
new LoginFrame().initial();
}
}
import java.sql.*;
import java.io.*;
import java.util.*;
class JDBC
{
static Connection getConnection()
throws SQLException, IOException , ClassNotFoundException
{
Properties props = new Properties();
FileInputStream in = new FileInputStream("account.ini");
props.load(in);
in.close();
String driver=props.getProperty("driver");
String url = props.getProperty("url");
String user = props.getProperty("user");
String pass = props.getProperty("pass");
// 加载数据库驱动
Class.forName(driver);
// 取得数据库连接
return DriverManager.getConnection(url, user, pass);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.sql.*;
public class LoginFrame
{
// 登录界面的GUI组件
private JFrame jf = new JFrame("登录");
private JLabel use = new JLabel("账户");
private JLabel pas = new JLabel("密码");
private JTextField userField = new JTextField(20);
private JPasswordField passField = new JPasswordField(20);
private JButton loginButton = new JButton("登录");
public void initial()throws Exception
{
// 为登录按钮添加事件监听器
loginButton.addActionListener(new ActionListener()
{
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e)
{
// 登录成功则显示"登录成功"
if (validate(userField.getText(), passField.getText()))
{
try
{
new Account().init();
}
catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
jf.setVisible(false);
}
// 否则显示"登录失败"
else
{
JOptionPane.showMessageDialog(jf, "账号或密码错误,请重新登录");
}
}
});
char ch=new Character('*');
passField.setEchoChar(ch);
JPanel p=new JPanel();
p.add(use);
p.add(userField);
JPanel pp=new JPanel();
pp.add(pas);
pp.add(passField);
jf.add(p , BorderLayout.NORTH);
jf.add(pp);
jf.add(loginButton , BorderLayout.SOUTH);
jf.pack();
jf.setVisible(true);
}
private boolean validate(String userName, String userPass)
{
try(
Connection conn = JDBC.getConnection();
PreparedStatement pstmt = conn.prepareStatement(
"select * from id where id=? and pass=?"))
{
pstmt.setString(1, userName);
pstmt.setString(2, userPass);
try(
ResultSet rs = pstmt.executeQuery())
{
//如果查询的ResultSet里有超过一条的记录,则登录成功
if (rs.next())
{
return true;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return false;
}
}
import javax.swing.table.*;
import java.sql.*;
@SuppressWarnings("serial")
class ResultSetTableModel extends AbstractTableModel {
private ResultSet rs;
private ResultSetMetaData rsmd;
// 构造器,初始化rs和rsmd两个属性
public ResultSetTableModel(ResultSet aResultSet)
{
rs = aResultSet;
try
{
rsmd = rs.getMetaData();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
// 重写getColumnName方法,用于为该TableModel设置列名
public String getColumnName(int c)
{
try
{
return rsmd.getColumnName(c + 1);
}
catch (SQLException e)
{
e.printStackTrace();
return "";
}
}
// 重写getColumnCount方法,用于设置该TableModel的列数
public int getColumnCount()
{
try
{
return rsmd.getColumnCount();
}
catch (SQLException e)
{
e.printStackTrace();
return 0;
}
}
// 重写getValueAt方法,用于设置该TableModel指定单元格的值
public Object getValueAt(int r, int c)
{
try
{
rs.absolute(r + 1);
return rs.getObject(c + 1);
}
catch(SQLException e)
{
e.printStackTrace();
return null;
}
}
// 重写getColumnCount方法,用于设置该TableModel的行数
public int getRowCount()
{
try
{
rs.last();
return rs.getRow();
}
catch(SQLException e)
{
e.printStackTrace();
return 0;
}
}
// 重写isCellEditable返回true,让每个单元格可编辑
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return true;
}
// 重写setValueAt()方法,当用户编辑单元格时,将会触发该方法
public void setValueAt(Object aValue , int row,int column)
{
try
{
// 结果集定位到对应的行数
rs.absolute(row + 1);
// 修改单元格多对应的值
rs.updateObject(column + 1 , aValue);
// 提交修改
rs.updateRow();
// 触发单元格的修改事件
fireTableCellUpdated(row, column);
}
catch (SQLException evt)
{
evt.printStackTrace();
}
}
}