STiNA维修管理系统

该博客主要围绕Java输入输出系统展开,构建了一个名为STiNA的信息管理系统。包含数据的插入、查询、更新等操作,通过多个类实现了图形用户界面,利用Vector存储数据,还涉及数据库操作,处理数据时会捕获异常。
Java Input Output System

import java.sql.*;
public class STiNA
{
 private String indate;
 private String client;
 private String type;
 private int count;
 private String remark;
 private String people;
 private String outdate;
 private ApplicationGUI gui;
 private ApplicationData data;
 
 public static void main(String[] args)
 {
  STiNA stina = new STiNA();
  stina.initApplication();
 }
 
 public void initApplication()
 {
  indate = "";
  client = "";
  type = "";
  count = 0;
  remark = "";
  people = "";
  outdate = "";
  data = new ApplicationData();
  gui = new ApplicationGUI("STiNA信息管理系统", this);
 }

 public void addRecoard(String cmd)
 {
  data.insertData(cmd);
 }
 
 public ResultSet queryRecoard(String cmd)
 {
  return data.searchData(cmd);
 }
 
 public void updateRecoard(String cmd)
 {
  data.updateData(cmd);
 }
 
 protected void finalize()
 {
  data.finalize();
  data = null;
  gui = null;
 }
}

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.util.Vector;
import java.sql.*;

class ApplicationGUI extends JFrame
{
  JLabel label1;
  JTextField date;
  JLabel label2;
  JTextField client;
  JLabel label3;
  JTextField type;
  JLabel label4;
  JTextField number;
  JLabel label5;
  JTextField remark;
  JLabel label6;
  JTextField people;
  JButton enter;
  JButton save;
  JButton edit;
 
  JTable table;
  STiNA stina;
  StinaTableModel stinatable;
  QueryTableModel qtm;
  OutTableModel otm;
 
  JLabel label7;
  JTextField indates;
  JLabel label8;
  JTextField clients;
  JLabel label9;
  JTextField types;
  JLabel label10;
  JTextField outdates;
  JLabel label11;
  JTextField sendCompanys;
  JLabel label12;
  JTextField sendNumbers;
  JButton noOutSearch;
  JButton alreadyOutSearch;
  JLabel label13;
  JTextField inputOutDate;
  JLabel label14;
  JLabel label16;
  JTextField sendNumberin;
  JTextField sendCompanyPeople;
  JLabel label15;
  JTextField telNumber;
  JButton out;
  JButton saveout;
  JButton editout;
  JTable searchTable;
  JTable outTable;
  int indexOfSearchTable;
 
 public ApplicationGUI(String title, STiNA stina)
 {
  super(title);
  this.stina = stina;
  setDefaultCloseOperation(EXIT_ON_CLOSE);
  setResizable(false);
  setBounds(0, 0, 800, 600);
  initGUI();
  setVisible(true);
 }
 
 public void initGUI()
 {
  JTabbedPane tabPane = new JTabbedPane();
  JPanel addpane = new JPanel();
  JPanel seapane = new JPanel();
 
  label1 = new JLabel("日期:");
  date = new JTextField(6);
  label2 = new JLabel("客户姓名:");
  client = new JTextField(8);
  label3 = new JLabel("型号:");
  type = new JTextField(8);
  label4 = new JLabel("数量:");
  number = new JTextField(3);
  label5 = new JLabel("备注:");
  remark = new JTextField(12);
  label6 = new JLabel("经手人:");
  people = new JTextField(8);
  enter = new JButton("确定");
  enter.addActionListener(new ActionListener(){
                              public void actionPerformed(ActionEvent e)
                              {
                               stinatable.setValues(date.getText(), client.getText(), type.getText(), number.getText(), remark.getText(), people.getText());
                               stinatable.fireTableDataChanged();
                               date.setText("");
                               client.setText("");
                               type.setText("");
                               number.setText("");
                               remark.setText("");
                               people.setText("");
                              }
  });
  save = new JButton("保存");
  save.addActionListener(new ActionListener(){
                            public void actionPerformed(ActionEvent e)
                            {
                             Vector recoard;
                             for(int i = 0; i < stinatable.getRowCount(); i ++)
                             {
                              String cmd = "INSERT INTO weixiu (入库日期, 客户, 型号, 数量, 备注, 经手人)VALUES (";
                              String cmdend = ");";
                              recoard = stinatable.getRecoard(i);
                              for(int j = 0; j < stinatable.getColumnCount(); j ++)
                                      cmd = cmd + "'" +(String)recoard.elementAt(j) + (((j + 1) == stinatable.getColumnCount()) ? "'" : "',");
                              cmd = cmd + cmdend;
                              System.out.println(cmd);
                              stina.addRecoard(cmd);
                             }
                             stinatable.clearData();
                             stinatable.fireTableDataChanged();
                            }
  });
  edit = new JButton("编辑");
  edit.addActionListener(new ActionListener(){
                             public void actionPerformed(ActionEvent e)
                             {
                              int selectRecoard;
                              Vector editRecoard;
                             
                              selectRecoard = table.getSelectedRow();
                              if(selectRecoard == -1) return;
                              editRecoard = stinatable.getRecoard(selectRecoard);
                              date.setText((String)editRecoard.elementAt(0));
                              client.setText((String)editRecoard.elementAt(1));
                              type.setText((String)editRecoard.elementAt(2));
                              number.setText((String)editRecoard.elementAt(3));
                              remark.setText((String)editRecoard.elementAt(4));
                              people.setText((String)editRecoard.elementAt(5));
                              stinatable.removeRecoard(selectRecoard);
                              stinatable.fireTableDataChanged();
                             }
  });
  table = new JTable(stinatable = new StinaTableModel());
 
  GridBagLayout gridbag = new GridBagLayout();
  GridBagConstraints constraints = new GridBagConstraints();
  addpane.setLayout(gridbag);
  constraints.gridx = constraints.gridy = 0;
  constraints.anchor = constraints.WEST;
  constraints.fill = constraints.NONE;
  constraints.weightx = 1.0;
  constraints.weighty = 1.0;
  gridbag.setConstraints(label1, constraints);
  addpane.add(label1);
  constraints.gridx = 1;
  constraints.weightx = 3.0;
  gridbag.setConstraints(date, constraints);
  addpane.add(date);
  constraints.gridx = 2;
  constraints.weightx = 1.0;
  gridbag.setConstraints(label2, constraints);
  addpane.add(label2);
  constraints.gridx = 3;
  constraints.weightx = 3.0;
  gridbag.setConstraints(client, constraints);
  addpane.add(client);
  constraints.gridx = 5;
  constraints.weightx = 5.0;
  gridbag.setConstraints(enter, constraints);
  addpane.add(enter);
  constraints.gridx = 0;
  constraints.gridy = 1;
  constraints.weightx = 1.0;
  gridbag.setConstraints(label3, constraints);
  addpane.add(label3);
  constraints.gridx = 1;
  constraints.weightx = 3.0;
  gridbag.setConstraints(type, constraints);
  addpane.add(type);
  constraints.gridx = 2;
  constraints.weightx = 1.0;
  gridbag.setConstraints(label4, constraints);
  addpane.add(label4);
  constraints.gridx = 3;
  constraints.weightx = 3.0;
  gridbag.setConstraints(number, constraints);
  addpane.add(number);
  constraints.gridx = 5;
  constraints.weightx = 5.0;
  gridbag.setConstraints(save, constraints);
  addpane.add(save);
  constraints.gridx = 0;
  constraints.gridy = 2;
  constraints.weightx = 1.0;
  gridbag.setConstraints(label5, constraints);
  addpane.add(label5);
  constraints.gridx = 1;
  constraints.weightx = 3.0;
  gridbag.setConstraints(remark, constraints);
  addpane.add(remark);
  constraints.gridx = 2;
  constraints.weightx = 1.0;
  gridbag.setConstraints(label6, constraints);
  addpane.add(label6);
  constraints.gridx = 3;
  constraints.weightx = 3.0;
  gridbag.setConstraints(people, constraints);
  addpane.add(people);
  constraints.gridx = 5;
  constraints.weightx = 5.0;
  gridbag.setConstraints(edit, constraints);
  addpane.add(edit);
  constraints.gridwidth = constraints.gridheight = 6;
  constraints.gridx = 0;
  constraints.gridy = 3;
  constraints.fill = constraints.BOTH;
  constraints.weighty = 14;
  JScrollPane jsp = new JScrollPane(table);
  gridbag.setConstraints(jsp, constraints);
  addpane.add(jsp);
 
  label7 = new JLabel("入库日期:");
  indates = new JTextField(6);
  label8 = new JLabel("客户:");
  clients = new JTextField(8);
  label9 = new JLabel("型号:");
  types = new JTextField(8);
  label10 = new JLabel("出库日期:");
  outdates = new JTextField(6);
  label11 = new JLabel("发货公司(人):");
  sendCompanys = new JTextField(12);
  label12 = new JLabel("货运单号");
  sendNumbers = new JTextField(6);
  noOutSearch = new JButton("未出库记录查询");
  noOutSearch.addActionListener(new ActionListener() {
                                    public void actionPerformed(ActionEvent e)
                                    {
                                     ResultSet rest;
                                     String cmd = "SELECT 入库日期, 客户, 型号, 数量, 备注, 经手人 FROM weixiu";
                                     String insertCmd = "";
                                     if(!indates.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + "入库日期 like '" + indates.getText() +  "' ";
                                     if(!clients.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 客户 like '" + clients.getText() + "' ";
                                     if(!types.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 型号 like '" + types.getText() + "' ";
                                     String endOfCmd = (insertCmd.equals("") ? " WHERE " : " AND ") + "出库日期 IS Null";
                                     indates.setText("");
                                     clients.setText("");
                                     types.setText("");

                                     cmd = cmd + insertCmd + endOfCmd;
                                     System.out.println(cmd);
                                     try{
                                         rest = stina.queryRecoard(cmd);
                                         //ResultSetMetaData rsmd = rest.getMetaData();
                                         qtm.brushTable(rest);
                                         //for(int i = 0; i < rsmd.getColumnCount(); i++)
                                           //  System.out.println(rsmd.getColumnLabel(i+1));
                                     }catch(Exception e1){}
                                     /* 测试用
                                     try{rest.next();
                                     for(int i = 1; i < 7; i ++)
                                     System.out.print(rest.getString(i) + "/t");
                                     }catch(Exception eb)
                                     {}*/

                                     qtm.fireTableStructureChanged();
                                     inputOutDate.setEnabled(true);
                                     sendCompanyPeople.setEnabled(true);
                                     sendNumberin.setEnabled(true);
                                     telNumber.setEnabled(true);
                                     out.setEnabled(true);
                                     saveout.setEnabled(true);
                                     editout.setEnabled(true);
                                     //System.out.println(cmd);
                                    }
  });
  alreadyOutSearch = new JButton("已出库记录查询");
  alreadyOutSearch.addActionListener(new ActionListener() {
                                         public void actionPerformed(ActionEvent e){
                                                ResultSet rest;
                                     String cmd = "SELECT * FROM weixiu";
                                     String insertCmd = "";
                                     if(!indates.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + "入库日期 like '" + indates.getText() +  "' ";
                                     if(!clients.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 客户 like '" + clients.getText() + "' ";
                                     if(!types.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 型号 like '" + types.getText() + "' ";
                                     if(!outdates.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 出库日期 like '" + outdates.getText() + "' ";
                                     if(!sendCompanys.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 发货公司 like '" + sendCompanys.getText() + "' ";
                                     if(!sendNumbers.getText().equals(""))
                                     insertCmd = insertCmd + (insertCmd.equals("") ? " WHERE " : " AND ") + " 货单号码 like '" + sendNumbers.getText() + "' ";
                                     String endOfCmd = (insertCmd.equals("") ? " WHERE " : " AND ") + "出库日期 IS NOT Null";
                                     indates.setText("");
                                     clients.setText("");
                                     types.setText("");
                                     outdates.setText("");
                                     sendCompanys.setText("");
                                     sendNumbers.setText("");

                                     cmd = cmd + insertCmd + endOfCmd;
                                     System.out.println(cmd);
                                     try{
                                         rest = stina.queryRecoard(cmd);
                                         //ResultSetMetaData rsmd = rest.getMetaData();
                                         qtm.brushTable(rest);
                                         //for(int i = 0; i < rsmd.getColumnCount(); i++)
                                           //  System.out.println(rsmd.getColumnLabel(i+1));
                                     }catch(Exception e1){}
                                     /* 测试用
                                     try{rest.next();
                                     for(int i = 1; i < 7; i ++)
                                     System.out.print(rest.getString(i) + "/t");
                                     }catch(Exception eb)
                                     {}*/

                                     qtm.fireTableStructureChanged();
                                     inputOutDate.setEnabled(false);
                                     sendCompanyPeople.setEnabled(false);
                                     sendNumberin.setEnabled(false);
                                     telNumber.setEnabled(false);
                                     out.setEnabled(false);
                                     saveout.setEnabled(false);
                                     editout.setEnabled(false);
                                     //System.out.println(cmd);
                                         }
  });
  searchTable = new JTable(qtm = new QueryTableModel());
  label13 = new JLabel("出库日期:");
  inputOutDate = new JTextField(6);
  inputOutDate.setEnabled(false);
  label14 = new JLabel("发货公司(发货人):");
  sendCompanyPeople = new JTextField(12);
  sendCompanyPeople.setEnabled(false);
  label15 = new JLabel("货运单号:");
  sendNumberin = new JTextField(6);
  sendNumberin.setEnabled(false);
  label16 = new JLabel("联系电话:");
  telNumber = new JTextField(6);
  telNumber.setEnabled(false);
  out = new JButton("出库");
  out.addActionListener(new ActionListener() {
                            public void actionPerformed(ActionEvent e)
                            {
                             Vector recoard;
                             if(searchTable.getSelectedRow() >= 0)
                             {
                                                          recoard = qtm.getRecoard(searchTable.getSelectedRow());
                             }
                             else {
                                 JOptionPane.showMessageDialog(ApplicationGUI.this, "清选择未出库的记录!");
                                 return;
                             }
                             if(inputOutDate.getText().equals("") || sendCompanyPeople.getText().equals("") || sendNumberin.getText().equals("") || telNumber.getText().equals("")) {
                                                                  JOptionPane.showMessageDialog(ApplicationGUI.this, "清填写[出库日期]、[发货公司(发货人)]、[货运单号]、[联系电话]等内容!");
                                                                  return;
                             }
                             else {
                                  indexOfSearchTable = qtm.getRecoardIndex(recoard);
                                  qtm.removeRecoard(recoard);
                                  recoard.addElement(inputOutDate.getText());
                                  recoard.addElement(sendCompanyPeople.getText());
                                  recoard.addElement(sendNumberin.getText());
                                  recoard.addElement(telNumber.getText());
                                  inputOutDate.setText("");
                                  sendCompanyPeople.setText("");
                                  sendNumberin.setText("");
                                  telNumber.setText("");
                                  otm.addRecoard(recoard);
                                  otm.fireTableDataChanged();
                                  qtm.fireTableDataChanged();
                             }
                            }
  });
  out.setEnabled(false);
  saveout = new JButton("保存");
  saveout.addActionListener(new ActionListener(){
                                public void actionPerformed(ActionEvent e)
                                {
                                       Vector recoard;
                                       String cmd = "UPDATE weixiu SET ";
                                       String insertCmd;
                                       String filterCmd;
                                       for(int i = 0; i < otm.getRowCount(); i ++)
                                       {
                                        insertCmd = "";
                                        filterCmd = "";
                                        recoard = otm.getRecoard(i);
                                        insertCmd = "出库日期='" + (String)recoard.elementAt(6) + "' , 发货公司='" + (String)recoard.elementAt(7) + "' , 货单号码='" + (String)recoard.elementAt(8) + "' , 电话='" + (String)recoard.elementAt(9) + "' ";
                                        filterCmd = "WHERE 入库日期='" + (String)recoard.elementAt(0) + "' AND 客户='" + (String)recoard.elementAt(1) + "' AND 型号='" + (String)recoard.elementAt(2) + "' AND 数量='" + (String)recoard.elementAt(3) + "' AND 备注='" + (String)recoard.elementAt(4) + "' AND 经手人='" + (String)recoard.elementAt(5) + "';";
                                        cmd = cmd + insertCmd + filterCmd;
                                        stina.updateRecoard(cmd);
                                        System.out.println(cmd);
//                                        stina.addRecoard(cmd);
                                       }
                                       //stina.updateRecoard("UPDATE weixiu SET 出库日期='100' , 发货公司='100' WHERE 入库日期='1'");
                                       otm.clearData();
                                       otm.fireTableDataChanged();
                                }
  });
  saveout.setEnabled(false);
  editout = new JButton("编辑");
  editout.addActionListener(new ActionListener(){
                                public void actionPerformed(ActionEvent e)
                                {
                                             Vector recoard;
                                             if(outTable.getSelectedRow() >= 0)
                                             {
                                                                             recoard = otm.getRecoard(outTable.getSelectedRow());
                                                                             otm.removeRecoard(recoard);
                                                                             otm.fireTableDataChanged();
                                                                             telNumber.setText((String)recoard.elementAt(9));
                                                                             recoard.remove(9);
                                                                             sendNumberin.setText((String)recoard.elementAt(8));
                                                                             recoard.remove(8);
                                                                             sendCompanyPeople.setText((String)recoard.elementAt(7));
                                                                             recoard.remove(7);
                                                                             inputOutDate.setText((String)recoard.elementAt(6));
                                                                             recoard.remove(6);
                                                                             qtm.insertRecoard(recoard, indexOfSearchTable);
                                                                             qtm.fireTableDataChanged();
                                             }
                                }
  });
  editout.setEnabled(false);
  outTable = new JTable(otm = new OutTableModel());

 
  GridBagLayout gbl = new GridBagLayout();
  GridBagConstraints gbc = new GridBagConstraints();
  seapane.setLayout(gbl);

  gbc.anchor = gbc.WEST;
  gbc.gridx = gbc.gridy = 0;
  gbc.gridheight = gbc.gridwidth = 1;
  gbc.fill = gbc.HORIZONTAL;
  gbl.setConstraints(label7, gbc);
  seapane.add(label7);
  gbc.gridx = 1;
  gbl.setConstraints(indates, gbc);
  seapane.add(indates);
  gbc.gridx = 2;
  gbl.setConstraints(label8, gbc);
  seapane.add(label8);
  gbc.gridx = 3;
  gbl.setConstraints(clients, gbc);
  seapane.add(clients);
  gbc.gridx = 4;
  gbl.setConstraints(label9, gbc);
  seapane.add(label9);
  gbc.gridx = 5;
  gbl.setConstraints(types, gbc);
  seapane.add(types);
  gbc.gridx = 7;
  gbc.gridwidth = 1;
  gbc.fill = gbc.NONE;
  gbc.anchor = gbc.CENTER;
  gbl.setConstraints(noOutSearch, gbc);
  seapane.add(noOutSearch);
  gbc.fill = gbc.HORIZONTAL;
  gbc.anchor = gbc.WEST;
  gbc.gridwidth = 1;
  gbc.gridx = 0;
  gbc.gridy = 1;
  gbc.gridheight = 1;
  gbl.setConstraints(label10, gbc);
  seapane.add(label10);
  gbc.gridx = 1;
  gbl.setConstraints(outdates, gbc);
  seapane.add(outdates);
  gbc.gridx = 2;
  gbl.setConstraints(label11, gbc);
  seapane.add(label11);
  gbc.gridx = 3;
  gbl.setConstraints(sendCompanys, gbc);
  seapane.add(sendCompanys);
  gbc.gridx = 4;
  gbl.setConstraints(label12, gbc);
  seapane.add(label12);
  gbc.gridx = 5;
  gbl.setConstraints(sendNumbers, gbc);
  seapane.add(sendNumbers);
  gbc.gridx = 7;
  gbc.gridheight = 1;
  gbc.gridwidth = 1;
  gbc.fill = gbc.NONE;
  gbc.anchor = gbc.CENTER;
  gbl.setConstraints(alreadyOutSearch, gbc);
  seapane.add(alreadyOutSearch);
  gbc.fill = gbc.BOTH;
  gbc.anchor = gbc.WEST;
  gbc.gridy = 2;
  gbc.gridx = 0;
  gbc.gridheight = 1;
  gbc.gridwidth = 8; //gbc.REMAINDER;
  gbc.weightx = gbc.weighty = 1.0;
  JScrollPane jsp1 = new JScrollPane(searchTable);
  gbl.setConstraints(jsp1, gbc);
  seapane.add(jsp1);
  gbc.weightx = gbc.weighty = 0.0;
  gbc.gridy = 4;
  gbc.gridx = 0;
  gbc.gridwidth = 1;
  gbc.gridheight = 1;
  gbl.setConstraints(label13, gbc);
  seapane.add(label13);
  gbc.gridx = 1;
  gbl.setConstraints(inputOutDate, gbc);
  seapane.add(inputOutDate);
  gbc.gridx = 2;
  gbl.setConstraints(label14, gbc);
  seapane.add(label14);
  gbc.gridx = 3;
  gbl.setConstraints(sendCompanyPeople, gbc);
  seapane.add(sendCompanyPeople);
  gbc.gridx = 4;
  gbl.setConstraints(label15, gbc);
  seapane.add(label15);
  gbc.gridx = 5;
  gbc.weightx = 0.2;
  gbl.setConstraints(sendNumberin, gbc);
  seapane.add(sendNumberin);
  gbc.gridx = 6;
  gbl.setConstraints(label16, gbc);
  seapane.add(label16);
  gbc.gridx = 7;
  gbc.weightx = 0.1;
  gbl.setConstraints(telNumber, gbc);
  seapane.add(telNumber);
  gbc.gridx = 1;
  gbc.gridy = 5;
  gbc.fill = gbc.NONE;
  gbc.anchor = gbc.WEST;
  gbl.setConstraints(out, gbc);
  seapane.add(out);
  gbc.gridx = 2;
  gbl.setConstraints(saveout, gbc);
  seapane.add(saveout);
  gbc.gridx = 3;
  gbl.setConstraints(editout, gbc);
  seapane.add(editout);
  JScrollPane jsp2 = new JScrollPane(outTable);
  gbc.gridx = 0;
  gbc.gridy = 7;
  gbc.gridheight = 1;
  gbc.gridwidth = 8;
  gbc.fill = gbc.BOTH;
  gbc.weightx = gbc.weighty = 1.0;
  gbl.setConstraints(jsp2, gbc);
  seapane.add(jsp2);

  addpane.setBorder(new TitledBorder(new LineBorder(Color.GRAY), "数据录入"));
  seapane.setBorder(new TitledBorder(new LineBorder(Color.GRAY), "数据查询[出库]"));
  tabPane.add("入库记录", addpane);
  tabPane.add("检索记录(出库)", seapane);
  Container container = getContentPane();
  container.add(tabPane);
 }
}

import java.sql.*;

class ApplicationData
{
 Connection con;
 Statement statement;
 ResultSet result;
 int operationCount;
 
 public ApplicationData()
 {
  try{
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  }catch(Exception e)
  {
   System.err.println("载入驱动程序出错!");
   System.exit(1);
  }
  String sourceURL = "jdbc:odbc:input";
  try{
    con = DriverManager.getConnection(sourceURL);
    statement = con.createStatement();
  }catch(Exception e)
  {
   System.err.println("建立数据库连接出错!");
   System.exit(1);
  }
 }
 
 public int insertData(String cmd)
 {
  try{
      operationCount = statement.executeUpdate(cmd);
  }catch(Exception e)
  {
   System.err.println("入库操作出错!");
   System.exit(1);
  }finally{
           return operationCount;
  }
 }
 
 public int updateData(String cmd)
 {
  try{
      operationCount = statement.executeUpdate(cmd);
  }catch(Exception e)
  {
   System.err.println("出库操作出错!");
   System.exit(1);
  }
  finally{
          return operationCount;
  }
 }
 
 public ResultSet searchData(String cmd)
 {
  try{
      result = statement.executeQuery(cmd);
  }catch(Exception e)
  {
   System.err.println("查询操作出错!");
   System.exit(1);
  }finally{
           return result;
  }
 }
 
 protected void finalize()
 {
  try{
      statement.close();
      con.close();
      System.out.println("数据库正常关闭!");
  }catch(Exception e)
  {
   System.err.println("数据库关闭出错!");
  }
 }
 
 /*public void closeConnection()
 {
  try{
      con.close();
      System.out.println("数据库连接正常关闭!程序退出。");
  }catch(Exception e)
  {
   System.err.println("关闭连接出错!");
   System.exit(1);
  }
 }*/
}

import javax.swing.table.*;
import java.util.*;

public class StinaTableModel extends AbstractTableModel
{
 String[] columnHeaders = {"入库日期", "客户", "型号", "数量", "备注", "经手人"};

 Vector clumnNames = new Vector(7);
 Vector dataValues = new Vector(1);
 
 public StinaTableModel()
 {
  for(int i = 0; i < columnHeaders.length; i ++)
          clumnNames.addElement(columnHeaders[i]);
 }

 public int getColumnCount()
 {
  return clumnNames.size();
 }
 
 public int getRowCount()
 {
  return dataValues.size();
 }
 
 public Object getValueAt(int row, int column)
 {
  Vector recVector = (Vector)dataValues.elementAt(row);
  return recVector.elementAt(column);
 }
 
 public String getColumnName(int column)
 {
  return (String)clumnNames.elementAt(column);
 }
 
 public void setValues(String indate, String client, String type, String number, String remark, String people)
 {
  Vector recVector = new Vector(6);
  recVector.addElement(indate);
  recVector.addElement(client);
  recVector.addElement(type);
  recVector.addElement(number);
  recVector.addElement(remark);
  recVector.addElement(people);
 
  dataValues.addElement(recVector);
 }
 
 public void clearData()
 {
  dataValues = new Vector();
 }
 
 public Vector getRecoard(int row)
 {
  return (Vector)dataValues.elementAt(row);
 }
 
 public void removeRecoard(int row)
 {
  dataValues.remove(row);
 }
}

import java.util.*;
import javax.swing.table.*;
import java.sql.*;

public class QueryTableModel extends AbstractTableModel{
       private Vector columnHeaders;
       private Vector dataValues;
      
       public QueryTableModel()
       {
        columnHeaders = new Vector();
        dataValues = new Vector();
       }

       public int getColumnCount()
       {
        return columnHeaders.size();
       }
      
       public int getRowCount()
       {
        return dataValues.size();
       }
      
       public Object getValueAt(int row, int column)
       {
        Vector recoard = (Vector) dataValues.elementAt(row);
        return recoard.elementAt(column);
       }
      
       public void brushTable(ResultSet rest)
       {

        try{
            dataValues.removeAllElements();
        columnHeaders.removeAllElements();
        fireTableStructureChanged();
            Vector recoard;
            ResultSetMetaData rsmd = rest.getMetaData();
            columnHeaders = new Vector(rsmd.getColumnCount());
            for(int i = 1; i <= rsmd.getColumnCount(); i ++)
            {
             columnHeaders.addElement(rsmd.getColumnName(i));
            }
            while(rest.next())
            {
             recoard = new Vector(columnHeaders.size());
             for(int i = 1; i <= rsmd.getColumnCount(); i ++)
                     recoard.addElement(rest.getString(i));
             dataValues.addElement(recoard);
            }
        }catch(Exception e)
        {
         System.err.println("更新查询数据表错误!");
         System.exit(1);
        }
       
        System.out.println("查询结果为:" + columnHeaders.size() + "列");
        System.out.println("查询结果有:"+dataValues.size()+"行");
       }
      
       public String getColumnName(int column)
       {
        return (String)columnHeaders.elementAt(column);
       }
      
       public Vector getRecoard(int row)
       {
        return (Vector)dataValues.elementAt(row);
       }
      
       public void removeRecoard(Vector rec)
       {
        dataValues.removeElement(rec);
       }
      
       public int getRecoardIndex(Vector rec)
       {
        return dataValues.indexOf(rec);
       }
      
       public void insertRecoard(Vector rec, int index)
       {
        dataValues.insertElementAt(rec, index);
       }
}

import java.util.*;
import javax.swing.table.*;
import java.sql.*;

public class OutTableModel extends AbstractTableModel {
       private Vector dataValues;
      
       private String[] columnNames = {"入库日期", "客户", "型号", "数量", "备注", "经手人", "出库日期", "发货公司", "货单号码", "电话"};

       public OutTableModel()
       {
        dataValues = new Vector();
       }

       public int getColumnCount()
       {
        return columnNames.length;
       }

       public int getRowCount()
       {
        return dataValues.size();
       }

       public Object getValueAt(int row, int column)
       {
        Vector recoard = (Vector) dataValues.elementAt(row);
        return recoard.elementAt(column);
       }

       public String getColumnName(int column)
       {
        return columnNames[column];
       }
      
       public Vector getRecoard(int row)
       {
        return (Vector)dataValues.elementAt(row);
       }
      
       public void addRecoard(Vector rec)
       {
        dataValues.addElement(rec);
       }
      
       public void removeRecoard(Vector rec)
       {
        dataValues.removeElement(rec);
       }
      
       public void clearData()
       {
        dataValues = null;
        dataValues = new Vector();
       }
}

源码链接: https://pan.quark.cn/s/a4b39357ea24 斐讯K2是一款广受用户青睐的无线路由器,其运行表现稳定且具备较高的可操作性,在DIY爱好者群体中拥有极高的声誉。本资料将系统性地阐述斐讯K2的固件刷机方法及其关联的技术要点。固件升级是路由器爱好者改善设备性能、扩展功能的一种普遍手段,经由替换出厂固件,能够达成更加个性化的网络配置、增强安全防护等目标。斐讯K2固件资源库涵盖了多种知名的非官方固件,诸如Tomato Pheonix 不死鸟、高恪、PandoraBox 潘多拉等,这些固件均具备独特的优势,能够适配不同用户的需求。 1. Tomato Pheonix 不死鸟:Tomato是一款立足于Linux的开源固件,以其精巧、高效而备受推崇。不死鸟版本是专门为华硕及斐讯路由器优化的分支,提供了卓越的QoS(服务质量)配置、详尽的图表监控以及便捷的固件升级途径。对于那些需要精准调控带宽和监测网络状态的用户而言,这是一个理想的选项。 2. 高恪:高恪固件是OpenWrt的定制化版本,着重于操作的便捷性和运行的可靠性,特别适合对路由器操作不甚熟悉的用户群体。它提供了一些实用的功能,例如内置的广告屏蔽、快速测速工具等,同时保留了OpenWrt的适应性。 3. PandoraBox 潘多拉:潘多拉盒是另一款基于OpenWrt的固件,它以丰富的插件库和强大的自定义潜力而闻名。用户能够依据个人需求安装各类插件,实现更多功能,如远程接入、DDNS(动态域名解析服务)等。 4. 官方固件的纯净版本与定制版本:官方固件通常更侧重于稳定性,纯净版意味着未预置额外的应用或服务,适合注重稳定性的用户。定制版则可能包含了制造商的特色功能或优...
源码下载地址: https://pan.quark.cn/s/926926948560 AS3.0与XML结合的通用图片滚动功能,是一种基于ActionScript 3.0和XML技术的动态图像展示方案,非常适合初学者进行学习和实践应用。此项目的关键在于借助XML文件作为数据媒介,用来保存图像的相关参数,例如图像的链接地址、展示的次序等,接着在AS3.0环境中对XML进行解析,并动态地载入和展示这些图像,达成图像的滚动或是循环播放的目的。 我们需要明确ActionScript 3.0(AS3.0)是Adobe Flash Professional以及Flex Builder等开发工具中采用的编程语言,用于构建交互式内容以及丰富的互联网应用。相较于先前的版本,AS3.0在性能上有了大幅度的提升,并且引入了更为规范的面向对象编程模式,涵盖了类、接口以及包等概念。 XML(可扩展标记语言)是一种简明且高效的数据传输格式,既便于人类阅读和编写,也易于机器进行解析和生成。在该项目中,XML文件用于存储图像数据,例如图像的URL、延时的时长、动画的样式等,通过这种方式可以将数据与程序代码分离,从而增强代码的可维护性与可扩展程度。 实施这一图片滚动功能,主要涉及到以下AS3.0的核心知识点: 1. **XML解析**:运用`XML`类来载入并解析XML文件,从而获取图像的清单。AS3.0提供了简便的API来操作XML节点,例如`children()`、`attributes()`等,用以获取子节点和属性值。 2. **事件监听**:借助`EventDispatcher`类来监控载入和解析过程中的事件,比如`Event.OPEN`、`Event.PROGRESS`、`Event...
内容概要:本文介绍了软件许可管理的技术实现方式及相关工具资源,重点阐述了加密外壳(EMS)和API加密两种保护机制。加密外壳通过将程序(如.exe、.dll、.apk)封装在加密壳中,实现运行时内存解密,防止静态反编译和代码篡改,同时支持对数据文件、系统参数及部分代码的加密,并依赖硬件锁(HL)或软件锁(SL)进行授权控制。API加密则通过在代码中嵌入安全验证调用,确保授权合法后才执行核心逻辑。文章还说明了锁的类型(HL/SL)、模式(有驱/AdminMode与无驱/UserMode)、升级路径以及虚拟时钟功能,并描述了产品授权流程从功能定义到产品创建、授权生成的全过程,支持通过C2V文件或锁ID复制已有授权状态。文中附带多个开源平台链接和技术博客参考资源。; 适合人群:从事软件版权保护、授权系统开发或安全技术研究的研发人员,尤其是具备一定逆向工程、软件安全基础的1-3年经验开发者。; 使用场景及目标:①构建安全的软件授权体系,防止盗版和非法使用;②实现灵活的功能授权管理(如时效、并发、硬件绑定);③选择合适的加密方案(硬件锁/软锁、有驱/无驱)并集成到现有产品中;④学习加密外壳与API验证的实际应用方法; 阅读建议:此资源侧重于软件许可的技术架构与实施细节,建议结合提供的GitHub、Gitee项目链接及CSDN技术文章深入理解实现原理,并通过实际调试加密壳和模拟授权流程加强实践能力。
内容概要:本文聚焦于“风光制氢合成氨系统优化研究”,系统阐述了基于Cplex求解器对该耦合系统进行数学建模与优化求解的全过程,并提供了完整的Matlab代码实现。研究整合风能、光伏等可再生能源发电与电解水制氢、合成氨化工工艺,构建涵盖系统容量配置与运行调度的联合优化模型,旨在提升绿电就地消纳水平、降低碳排放强度并实现综合能源利用效率的最大化。文中详细解析了优化模型的核心构成,包括以综合成本最小化或能源效率最大化为目标的目标函数设计,以及涵盖设备出力能力、系统能量动态平衡、设备启停特性等关键环节的约束条件建模方法,利用Cplex求解器进行高效精确求解,模型适用于并网与离网等多种运行场景。; 适合人群:具备一定能源系统建模与优化理论基础,熟练掌握Matlab编程语言及常用优化工具箱(如YALMIP)应用的科研人员与工程技术从业者,特别适用于从事综合能源系统规划、绿色氢能与绿氨生产、可再生能源高效集成等前沿领域的硕士、博士研究生及高校科研人员。; 使用场景及目标:①复现高水平学术论文中关于风光制氢合成氨系统的复杂优化模型;②深入掌握Cplex求解器在大规模、多约束能源系统优化问题中的高级建模与调用技巧;③开展面向“双碳”战略的绿氢、绿氨生产项目的可行性分析、规划设计与运行策略研究,为清洁能源项目的科学决策与工程落地提供量化依据和技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码与相关领域的权威文献进行对照学习,重点剖析模型构建的物理逻辑与数学推导过程,熟练掌握Cplex与Matlab的接口调用方法;鼓励读者通过调整系统参数、修改目标函数或扩展模型结构(如引入更多不确定性因素)等方式进行二次开发,以适应不同的实际应用场景,进一步深化对综合能源系统优化的理解与实践能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值