1. 程式人生 > >【JAVA】科研資訊管理系統

【JAVA】科研資訊管理系統

一、前言
本學期學習了JAVA語言,在學期的結束,寫一個有操作介面,與資料庫關聯的管理系統,用來鞏固自己本學習所學的知識。
用到的知識:JAVA基礎,JAVA介面設計(GUI),Oracle資料庫(需要掌握資料庫的基本操作語句),連結資料庫。
使用的開發工具:MyEclipse Professional 2014
二、設計
我們管理的屬性有:專案編號,專案名稱,參與人員,負責人,專案開始時間,結束時間。科研專案系統主要有四個功能,對科研專案的增加、刪除、修改、查詢。以及為增加系統安全性所設計的登陸模式。
2.1 增加:向資料庫的表中增加科研專案的所有資訊

這裡寫圖片描述
新增後在控制檯使用SQL語句查詢,驗證是否已新增至資料庫中。
這裡寫圖片描述

2.2 查詢:通過具有唯一性的專案編號查詢該專案的所有資訊

這裡寫圖片描述

2.3 修改:根據專案編號選中要修改的專案,並重新輸入專案資訊進行修改

這裡寫圖片描述
這裡寫圖片描述

2.4 刪除:通過具有唯一性的專案編號刪除對應專案的所有資訊
這裡寫圖片描述

三、窗體原始碼
3.1 登入介面

package 科研資訊管理系統;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public  class LoginWindows extends Frame implements WindowListener,ActionListener 
{
public Label lgLabel; //使用者名稱標籤 public Label pwdLabel; //密碼標籤 public TextField lgText; //使用者名稱文字框 public TextField pwdText; //密碼文字框 public Button lgBt; //登入按鈕 public Button quitBt; //退出按鈕 public LoginWindows() { super(); this.setSize(400
, 300); this.setTitle("科研資訊管理系統"); this.setLayout(null); lgLabel=new Label(); lgLabel.setText("登入賬號:"); lgLabel.setSize(60, 30); lgLabel.setLocation(70,70); pwdLabel=new Label(); pwdLabel.setText("密 碼:"); pwdLabel.setSize(60,30); pwdLabel.setLocation(70, 150); lgText=new TextField(); lgText.setSize(180, 30); lgText.setLocation(140, 70); pwdText=new TextField(); pwdText.setSize(180,30); pwdText.setLocation(140, 150); lgBt=new Button(); lgBt.setLabel("登入"); lgBt.setSize(60,30); lgBt.setLocation(120, 220); quitBt=new Button(); quitBt.setLabel("退出"); quitBt.setSize(60,30); quitBt.setLocation(220,220); quitBt.addActionListener(this); lgBt.addActionListener(this); this.addWindowListener(this); this.add(lgLabel); this.add(pwdLabel); this.add(lgText); this.add(pwdText); this.add(lgBt); this.add(quitBt); this.setVisible(true); } public static void main(String args[]) { LoginWindows main=new LoginWindows(); } @Override public void actionPerformed(ActionEvent e) { Button bt=(Button) e.getSource(); if(bt.getLabel().equals("退出")) { System.exit(0); } else { if ((lgText.getText().equals(""))||(pwdText.getText().equals(""))) { JOptionPane.showMessageDialog(this,"賬號或密碼為空"); } else { if ((lgText.getText().equals("admin"))&&(pwdText.getText().equals("111"))) //if((lgText.getText().equals(""))||(pwdText.getText().equals(""))) { this.setVisible(false); // Sqlwindow sql=new Sqlwindow(); WindowsView w=new WindowsView(); w.SciencePro(); } else { JOptionPane.showMessageDialog(this, "沒有許可權"); } }}} @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method busb } @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method busb System.exit(0); } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method busb } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method busb } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method busb } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method busb } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method busb } }

3.2主窗體原始碼

package 科研資訊管理系統;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

import javax.swing.event.*;
import javax.swing.tree.*;

public class WindowsView implements TreeSelectionListener,ActionListener  //視窗類
{
    JFrame main;
    JPanel leftPa;
    JPanel upPa;
    JPanel downPa;

    ///查詢用控制元件
    JLabel numLa;  //通過專案編號查詢
    JTextField numTxt;
    JButton numBt;

    JTextField nameTxt;  //顯示專案名稱的文字框
    JTextField peopleTxt;   //顯示參與人員
    JTextField principalTxt;  //顯示主要負責人
    JTextField timeStartTxt;  //顯示開始時間的文字框
    JTextField timeEndTxt;    //顯示預期結束時間的文字框

    //增加用控制元件
    JLabel anumLa;  
    JLabel anameLa;
    JLabel apeopleLa;
    JLabel aprincipalLa;
    JLabel atimeStartLa;
    JLabel atimeEndLa;

    JTextField anumTxt;
    JTextField anameTxt;
    JTextField apeopleTxt;
    JTextField aprincipalTxt;
    JTextField atimeStartTxt;
    JTextField atimeEndTxt;
    JButton addBt;
    JTable showTable;

    //刪除用控制元件
    JLabel dnumLa; 
    JButton dnumBt;
    JTextField dnumTxt;

    //修改用控制元件
    JLabel alnumLa;  
    JTextField allnumTxt;
    JButton alseBt;
    JButton alBt;

    JLabel allnumLa;  
    JLabel alnameLa;
    JLabel alpeopleLa;
    JLabel alprincipalLa;
    JLabel altimeStartLa;
    JLabel altimeEndLa;
    JTextField alnumTxt;
    JTextField alnameTxt;
    JTextField alpeopleTxt;
    JTextField alprincipalTxt;
    JTextField altimeStartTxt;
    JTextField altimeEndTxt;

    public void SciencePro()
    {
        main=new JFrame();
        main.setSize(800,800);
        main.setTitle("科研資訊管理");
        main.setLayout(null);


        leftPa=new JPanel();
        leftPa.setSize(150, 600);
        leftPa.setLocation(0, 0);
        leftPa.setBackground(Color.white);
        initLeftPanel();
        main.add(leftPa);

        upPa=new JPanel();
        upPa.setSize(650, 400);
        upPa.setLocation(150, 0);
        upPa.setBackground(Color.gray);
        main.add(upPa);

        downPa=new JPanel();
        downPa.setSize(650, 400);
        downPa.setLocation(150, 400);
        downPa.setBackground(Color.orange);
        main.add(downPa);


        main.setVisible(true);
    }

    private void initLeftPanel()
    {
        String[] strs={"查詢","增加","刪除","修改"};
        JTree tree=new JTree(strs);
        tree.addTreeSelectionListener(this);
        leftPa.add(tree);
    }

    public void valueChanged(TreeSelectionEvent e)
    {
        JTree tree=(JTree)e.getSource();
        DefaultMutableTreeNode selectionNode =(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
        String str=selectionNode.toString();
        if(str.equals("查詢"))
        {
            initUpDownPaWhenSearch();
        }
        if(str.equals("增加"))
        {
            initUpDownPaWhenAdd();
        }
        if(str.equals("刪除"))
        {
            initUpDownPaWhenDelete();
        }
        if(str.equals("修改"))
        {
            initUpDownPaWhenAlert();
        }
    }

    private void initUpDownPaWhenSearch()
    {
        //清空上下面板上的控制元件
        upPa.removeAll();
        downPa.removeAll();
        //動態的載入上面板的控制元件
        upPa.setLayout(null);
        numLa=new JLabel();
        numLa.setText("請輸入專案編號");
        numLa.setLocation(40, 60);
        numLa.setSize(100, 40);


        numTxt=new JTextField();
        numTxt.setLocation(180, 60);
        numTxt.setSize(200, 30);


        numBt=new JButton();
        numBt.setText("查詢");
        numBt.addActionListener(this);
        numBt.setLocation(250, 160);
        numBt.setSize(60, 30);
        upPa.add(numLa);
        upPa.add(numTxt);
        upPa.add(numBt);
        upPa.validate();
        upPa.repaint();
        numBt.addActionListener(this);
        //動態的載入下面板的控制元件

        nameTxt=new JTextField();
        nameTxt.setLocation(80, 50);
        nameTxt.setSize(300, 30);

        peopleTxt=new JTextField();
        peopleTxt.setLocation(80, 100);
        peopleTxt.setSize(300, 30);

        principalTxt=new JTextField();
        principalTxt.setLocation(80, 150);
        principalTxt.setSize(300, 30);

        timeStartTxt=new JTextField();
        timeStartTxt.setLocation(80, 200);
        timeStartTxt.setSize(300, 30);

        timeEndTxt=new JTextField();
        timeEndTxt.setLocation(80,250);
        timeEndTxt.setSize(300, 30);

        downPa.setLayout(null);
        downPa.add(nameTxt);
        downPa.add(peopleTxt);
        downPa.add(principalTxt);
        downPa.add(timeStartTxt);
        downPa.add(timeEndTxt);
        downPa.validate();
        downPa.repaint();

    }

    public void actionPerformed(ActionEvent e)
    {
        JButton bt=(JButton)e.getSource();
        //bt.addActionListener(this);
        if(bt.getText().equals("查詢"))
        {
            if(numTxt.getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "請輸入專案編號");
            }
            else
            {
                DealSearch deal=new DealSearch();
                String inf=deal.findProByNum(Integer.parseInt(numTxt.getText().trim()));
                if((inf!=null)&&(!inf.equals("")))
                {
                  String[] strs=inf.split(",");
                  nameTxt.setText(strs[1]);
                  peopleTxt.setText(strs[2]);
                  principalTxt.setText(strs[3]);
                  timeStartTxt.setText(strs[4]);
                  timeEndTxt.setText(strs[5]);
                }
            }
        }
        if(bt.getText().equals("新增"))
        {
            if (anumTxt.getText().equals("")||anameTxt.getText().equals("")||apeopleTxt.getText().equals("")||aprincipalTxt.getText().equals("")||atimeStartTxt.getText().equals("")||atimeEndTxt.getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "輸入中不能有空值!!");
            }
            else
            {
                ScienceProject s=new ScienceProject();
                s.SetNum(Integer.parseInt(anumTxt.getText()));
                s.SetName(anameTxt.getText());
                s.SetPeople(apeopleTxt.getText());
                s.SetLeader(aprincipalTxt.getText());
                s.SetTimeStart(atimeStartTxt.getText());
                s.SetTimeFinish(atimeEndTxt.getText());
                DealAdd deal=new DealAdd();
                deal.add(s);
            }
        }
        if(bt.getText().equals("刪除"))
        {
            if(Integer.parseInt(dnumTxt.getText())==0)
            {
                JOptionPane.showMessageDialog(null, "不能刪除空的專案編號!!");
            }
            else
            {
                DealDelete deal=new DealDelete();
                deal.delete(Integer.parseInt(dnumTxt.getText().trim()));
            }
        }
        if(bt.getText().equals("提交"))
        {
            if(Integer.parseInt(allnumTxt.getText())==0)
            {
                JOptionPane.showMessageDialog(null, "不能修改空的專案編號!!");
            }
            else
            {
                DealSub deal=new DealSub();
                deal.submit(Integer.parseInt(allnumTxt.getText()));
            }
        }
        if(bt.getText().equals("修改"))
        {
            if (alnameTxt.getText().equals("")||alpeopleTxt.getText().equals("")||alprincipalTxt.getText().equals("")||altimeStartTxt.getText().equals("")||altimeEndTxt.getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "輸入中不能有空值!!");
            }
            else
            {
                ScienceProject s=new ScienceProject();
                s.SetNum(Integer.parseInt(allnumTxt.getText()));

                s.SetName(alnameTxt.getText());
                s.SetPeople(alpeopleTxt.getText());
                s.SetLeader(alprincipalTxt.getText());
                s.SetTimeStart(altimeStartTxt.getText());
                s.SetTimeFinish(altimeEndTxt.getText());
                DealAlter deal=new DealAlter();
                deal.alter(s);
            }
        }
    }

    private void initUpDownPaWhenAdd()
    {
        //清空上下面板上的控制元件
        upPa.removeAll();
        downPa.removeAll();
        //動態的載入上面板的控制元件
        upPa.setLayout(null);

        anumLa=new JLabel();
        anumLa.setText("請輸入要增加的專案編號");
        anumLa.setLocation(30, 50);
        anumLa.setSize(150, 40);

        anumTxt=new JTextField();
        anumTxt.setLocation(200, 50);
        anumTxt.setSize(250, 30);

        anameLa=new JLabel();
        anameLa.setText("請輸入要增加的專案名稱");
        anameLa.setLocation(30, 100);
        anameLa.setSize(150, 40);

        anameTxt=new JTextField();
        anameTxt.setLocation(200, 100);
        anameTxt.setSize(250, 30);

        apeopleLa=new JLabel();
        apeopleLa.setText("請輸入專案參與人員");
        apeopleLa.setLocation(30, 150);
        apeopleLa.setSize(150, 40);

        apeopleTxt=new JTextField();
        apeopleTxt.setLocation(200, 150);
        apeopleTxt.setSize(250, 30);

        aprincipalLa=new JLabel();
        aprincipalLa.setText("請輸入專案負責人");
        aprincipalLa.setLocation(30, 200);
        aprincipalLa.setSize(150, 40);

        aprincipalTxt=new JTextField();
        aprincipalTxt.setLocation(200, 200);
        aprincipalTxt.setSize(250, 30);

        atimeStartLa=new JLabel();
        atimeStartLa.setText("請輸入專案開始時間");
        atimeStartLa.setLocation(30, 250);
        atimeStartLa.setSize(150, 40);

        atimeStartTxt=new JTextField();
        atimeStartTxt.setLocation(200, 250);
        atimeStartTxt.setSize(250, 30);

        atimeEndLa=new JLabel();
        atimeEndLa.setText("請輸入專案結束時間");
        atimeEndLa.setLocation(30, 300);
        atimeEndLa.setSize(150, 40);

        atimeEndTxt=new JTextField();
        atimeEndTxt.setLocation(200, 300);
        atimeEndTxt.setSize(250, 30);

        addBt=new JButton();
        addBt.setText("新增");
        addBt.addActionListener(this);
        //addBt.addMouseListener(this);
        addBt.setLocation(250, 340);
        addBt.setSize(60, 30);

        upPa.add(addBt);
        upPa.add(anumLa);
        upPa.add(anameLa);
        upPa.add(apeopleLa);
        upPa.add(aprincipalLa);
        upPa.add(atimeStartLa);
        upPa.add(atimeEndLa);
        upPa.add(anameTxt);
        upPa.add(anumTxt);
        upPa.add(apeopleTxt);
        upPa.add(aprincipalTxt);
        upPa.add(atimeStartTxt);
        upPa.add(atimeEndTxt);
        upPa.validate();
        upPa.repaint();

        downPa.validate();
        downPa.repaint();
    }

    private void initUpDownPaWhenDelete()
    {
        //清空上下面板上的控制元件
        upPa.removeAll();
        downPa.removeAll();
        //動態的載入上面板的控制元件
        upPa.setLayout(null);
        numLa=new JLabel();
        numLa.setText("請輸入要刪除的專案編號");
        numLa.setLocation(40, 60);
        numLa.setSize(150, 40);

        dnumTxt=new JTextField();
        dnumTxt.setLocation(200, 60);
        dnumTxt.setSize(250, 30);

        dnumBt=new JButton();
        dnumBt.setText("刪除");
        dnumBt.addActionListener(this);
        dnumBt.setLocation(270, 170);
        dnumBt.setSize(60, 30);

        upPa.add(numLa);
        upPa.add(dnumTxt);
        upPa.add(dnumBt);
        upPa.validate();
        upPa.repaint();

        downPa.validate();
        downPa.repaint();
    }

    private void initUpDownPaWhenAlert()
    {
        //清空上下面板上的控制元件
        upPa.removeAll();
        downPa.removeAll();
        //動態的載入上面板的控制元件
        upPa.setLayout(null);
        alnumLa=new JLabel();
        alnumLa.setText("請輸入要修改的專案編號");
        alnumLa.setLocation(40, 60);
        alnumLa.setSize(150, 40);

        alseBt=new JButton();
        alseBt.setText("提交");
        alseBt.addActionListener(this);
        alseBt.setLocation(270, 170);
        alseBt.setSize(60, 30);

        allnumTxt=new JTextField();
        allnumTxt.setLocation(200, 60);
        allnumTxt.setSize(200, 30);

        upPa.add(alnumLa);
        upPa.add(alseBt);
        upPa.add(allnumTxt);
        upPa.validate();
        upPa.repaint();

        alBt=new JButton();
        alBt.setText("修改");
        alBt.addActionListener(this);
        alBt.setLocation(450, 170);
        alBt.setSize(60, 30);

 /*     allnumLa=new JLabel();
        allnumLa.setText("請輸入修改後的專案編號");
        allnumLa.setLocation(30, 00);
        allnumLa.setSize(150, 40);

        alnumTxt=new JTextField();
        alnumTxt.setLocation(180, 00);
        alnumTxt.setSize(250, 30);*/

        alnameLa=new JLabel();
        alnameLa.setText("請輸入修改後專案名稱");
        alnameLa.setLocation(30, 50);
        alnameLa.setSize(150, 40);

        alnameTxt=new JTextField();
        alnameTxt.setLocation(180, 50);
        alnameTxt.setSize(250, 30);

        alpeopleLa=new JLabel();
        alpeopleLa.setText("請重設參與人員");
        alpeopleLa.setLocation(30, 100);
        alpeopleLa.setSize(150, 40);

        alpeopleTxt=new JTextField();
        alpeopleTxt.setLocation(180, 100);
        alpeopleTxt.setSize(250, 30);

        alprincipalLa=new JLabel();
        alprincipalLa.setText("請重設專案負責人");
        alprincipalLa.setLocation(30, 150);
        alprincipalLa.setSize(150, 40);

        alprincipalTxt=new JTextField();
        alprincipalTxt.setLocation(180, 150);
        alprincipalTxt.setSize(250, 30);

        altimeStartLa=new JLabel();
        altimeStartLa.setText("請重設專案開始時間");
        altimeStartLa.setLocation(30, 200);
        altimeStartLa.setSize(150, 40);

        altimeStartTxt=new JTextField();
        altimeStartTxt.setLocation(180, 200);
        altimeStartTxt.setSize(250, 30);

        altimeEndLa=new JLabel();
        altimeEndLa.setText("請重設專案結束時間");
        altimeEndLa.setLocation(30, 250);
        altimeEndLa.setSize(150, 40);

        altimeEndTxt=new JTextField();
        altimeEndTxt.setLocation(180, 250);
        altimeEndTxt.setSize(250, 30);
        downPa.add(alBt);
        //downPa.add(allnumLa);
        downPa.add(alnameLa);
        downPa.add(alpeopleLa);
        downPa.add(alprincipalLa);
        downPa.add(altimeStartLa);
        downPa.add(altimeEndLa);
        downPa.add(alnameTxt);
        //downPa.add(alnumTxt);
        downPa.add(alpeopleTxt);
        downPa.add(alprincipalTxt);
        downPa.add(altimeStartTxt);
        downPa.add(altimeEndTxt);
        downPa.setLayout(null);
        downPa.validate();
        downPa.repaint();
    }
}

3.3 組織SQL語句,連結資料庫部分

package 科研資訊管理系統;
import java.sql.*;
import java.util.Scanner;

public class Sql {
  public void AddScienceProject(ScienceProject scienceProject)
  {
      try
      {
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String conStr="jdbc:oracle:thin:@localhost:1521:XE";
          Connection con=DriverManager.getConnection(conStr,"system","1");
          StringBuffer sql=new StringBuffer("insert into science values("+scienceProject.GetNum()+",'"+scienceProject.GetName()+"','"+scienceProject.GetPeople()+"','"+scienceProject.GetLeader()+"','"+scienceProject.GetTimeStart()+"','"+scienceProject.GetTimeFinish()+"')");

          Statement st=con.createStatement();
          st.execute(sql.toString());
          st.close();
          con.close();    
      } 
      catch (Exception e) 
      {
        // TODO: handle exception

       System.out.println(e.toString());
      }
  }
  public void DelScienceProject(ScienceProject scienceProject)
  {
      try 
      {
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
        String conStr="jdbc:oracle:thin:@localhost:1521:XE";
        Connection con=DriverManager.getConnection(conStr,"system","1");
        StringBuffer sql=new StringBuffer("delete from science where num="+scienceProject.GetNum()+""); 
        Statement st=con.createStatement();
        st.execute(sql.toString());
        st.close();
        con.close();
      } 
      catch (Exception e) 
      {
        // TODO: handle exception
       System.out.println(e.toString());
      }

  }
  public void UpdScienceProject(ScienceProject scienceProject)
  {
      try 
      {
        Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
        String conStr="jdbc:oracle:thin:@localhost:1521:XE";
        Connection con=DriverManager.getConnection(conStr,"system","1");
        StringBuffer sql =new StringBuffer("update science set name='"+scienceProject.GetName()+"',workpeople='"+scienceProject.GetPeople()+"',manager='"+scienceProject.GetLeader()+"',timestart='"+scienceProject.GetTimeStart()+"',timeend='"+scienceProject.GetTimeFinish()+"' where num="+scienceProject.GetNum()+"");
        Statement st=con.createStatement();
        st.execute(sql.toString());
        st.close();
        con.close();
      }
      catch (Exception e) 
      {
        // TODO: handle exception
          System.out.println("修改異常");
      System.out.println(e.toString());
      }
  }
  public ScienceProject Findbynum(int num)
  {
      ScienceProject scienceProject=new ScienceProject();
      try 
      {
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String conStr="jdbc:oracle:thin:@localhost:1521:XE";
          Connection con=DriverManager.getConnection(conStr,"system","1");
          StringBuffer sql=new StringBuffer("select * from science where num="+num+"");
          Statement st=con.createStatement();
          ResultSet rs=st.executeQuery(sql.toString());
          while(rs.next())
          {