學生信息管理系統(GUI)

數據庫的內容:



GUI界面:






代碼:StudentManagerment.java

package 學生基本信息;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class StudentManagement extends JFrame implements ActionListener{

	JTabbedPane dbTabPane;
	JPanel inputPanel;      //錄入面板
	JPanel viewPanel;      //瀏覽面板
	JPanel updatePanel;      //更新面板
	JPanel deletePanel;      //刪除面板
	
	JButton inputBtn;            //錄入
	JButton clearBtn1;
	StudentPanel inputInnerPanel;
	
	JTextArea viewArea;     //瀏覽
	JButton viewBtn;
	
	StudentPanel updateInnerPanel;   //修改數據
	JLabel updateInputLbl;
	JTextField updateInputText;
	JButton updateBtn;
	
	StudentPanel deleteInnerPanel;
	JLabel inputNoLabel;
	JTextField inputNoField;
	JButton deleteBtn;
	
	Connection conn;
	Statement stmt;
	
	public StudentManagement(){
		super("學生基本信息管理系統");
		serGUIComponent();
	}
	
	public void serGUIComponent() {
		// TODO Auto-generated method stub
		Container c = getContentPane();
		c.setLayout(new BorderLayout());
		dbTabPane = new JTabbedPane();
		
		//定義錄入面板
		inputPanel = new JPanel();
		inputPanel.setLayout(new FlowLayout());
		inputBtn = new JButton("錄入");
		clearBtn1 = new JButton("清除");
		/*使用this對象,可以不用聲明內部類而直接在本類中實現接口覆蓋接口的方法。*/
		inputBtn.addActionListener(this);
		clearBtn1.addActionListener(this);
		inputInnerPanel = new StudentPanel();
		inputPanel.add(inputInnerPanel);
		inputPanel.add(inputBtn);
		inputPanel.add(clearBtn1);
		dbTabPane.add("錄入數據", inputPanel);
		
		//定義瀏覽面板
		viewPanel = new JPanel();
		viewPanel.setLayout(new BorderLayout());
		viewArea = new JTextArea(6,35);
		viewBtn = new JButton("瀏覽");
		viewPanel.add(new JScrollPane(viewArea), BorderLayout.CENTER);
		viewPanel.add(viewBtn,BorderLayout.SOUTH);
		viewBtn.addActionListener(this);
		dbTabPane.addTab("瀏覽數據", viewPanel);
		
		//定義更新面板
		updateInnerPanel = new StudentPanel();
		updateInputLbl = new JLabel("輸入學號:");
		updateInputText = new JTextField(10);
		updateInputText.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//將更新面板的顯示內容清除
				viewARecord(updateInputText.getText(),updateInnerPanel);
				updateInputText.setText("");
			}
		});
		updateBtn = new JButton("修改");
		updateBtn.addActionListener(this);
		updatePanel = new JPanel();
		updatePanel.add(updateInnerPanel);
		updatePanel.add(updateInputLbl);
		updatePanel.add(updateInputText);
		updatePanel.add(updateBtn);
		dbTabPane.add("修改數據", updatePanel);
		
		//定義刪除面板
		deleteInnerPanel = new StudentPanel();
		inputNoLabel = new JLabel("輸入學號:");
		inputNoField = new JTextField(10);
		inputNoField.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				//將刪除面板的顯示內容清除
				viewARecord(inputNoField.getText(),deleteInnerPanel);
				inputNoField.setText("");
			}
		});
		deleteBtn = new JButton("刪除");
		deleteBtn.addActionListener(this);
		deletePanel = new JPanel();
		deletePanel.add(deleteInnerPanel);
		deletePanel.add(inputNoLabel);
		deletePanel.add(inputNoField);
		deletePanel.add(deleteBtn);
		dbTabPane.add("刪除數據", deletePanel);
		
		c.add(BorderLayout.NORTH,dbTabPane);
		
	}
	
	public void connection(){      //建立連接數據庫
		try{
			Class.forName("com.hxtt.sql.access.AccessDriver"); //JDBC-ODBC橋接器
			System.out.println("驅動已加載");
			conn = DriverManager.getConnection("jdbc:Access:///E:/java程序設計/java數據庫編程/Access2/student.mdb","","");
			stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
		}catch(ClassNotFoundException e1){
			e1.printStackTrace();
		}catch(SQLException e2){
			e2.getSQLState();
			e2.getMessage();
		}
	}
	
	public void close(){    //關閉執行語句和數據庫
		try{
			if(stmt != null)
				stmt.close();
			if(conn != null)
				conn.close();
		}catch(SQLException e2){
			System.out.println("不能正常關閉");
		}
	}
	
	public void inputRecords(){      //錄入學生數據
		String no = inputInnerPanel.getNo();
		String name = inputInnerPanel.getName();
		String gender = inputInnerPanel.getGender();
		String birth = inputInnerPanel.getBirth();
		String address = inputInnerPanel.getAddress();
		String tel = inputInnerPanel.getTel();
		
		try{
			connection();
			String InsSQL;
			InsSQL = "INSERT INTO student(學號,姓名,性別,出生年月,家庭住址,聯繫電話)"+"VALUES("+"'"+no+"',"+"'"+name+"',"+"'"+gender+"',"+"'"+birth+"',"+"'"+address+"',"+"'"+tel+"')";
			stmt.execute(InsSQL);
			JOptionPane.showMessageDialog(null, "插入成功");
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			close();
		}
	}
	
	public void viewARecord(String no, StudentPanel p){
		try{
			connection();
			String viewSQL = "SELECT * From student where 學號='"+no+"'";
			ResultSet rs = stmt.executeQuery(viewSQL);
			if(rs.next()){
				p.setNo(rs.getString("學號"));
				p.setName(rs.getString("姓名"));
				p.setGender(rs.getString("性別"));
				p.setBirth(rs.getString("出生年月"));
				p.setAddress(rs.getString("家庭住址"));
				p.setTel(rs.getString("聯繫電話"));
			}
		}catch(SQLException e){
			System.out.println("瀏覽學生記錄失敗");
			e.printStackTrace();
		}finally{
			close();
		}
	}
	
	public void viewRecords(){
		try{
			viewArea.setText("");
			String viewString = "";
			connection();
			ResultSet rs = stmt.executeQuery("SELECT * From student");
			ResultSetMetaData rsMeta = rs.getMetaData();
			int nums = rsMeta.getColumnCount();
			//獲得字段名稱
			for(int i = 1; i <= nums; i++){
				viewString+=rsMeta.getColumnName(i) + "\t";
			}
			viewString += "\n";
			
			//獲得數據表student的記錄
			while(rs.next()){
				for(int i = 1; i <= nums; i++){
					viewString += rs.getString(i) + "\t";
				}
				viewString += "\n";
				viewArea.setText(viewString);
			}
			rs.close();
		}catch(SQLException e){
			System.out.println("瀏覽學生記錄失敗");
			e.printStackTrace();
		}finally{
			close();
		}
	}
	
	public void updateRecord(String no){    //修改學號爲no學生的記錄
		String updateSQL = "update student set 姓名 =?,"+"性別=?,"+"出生年月=?,"+"家庭住址=?,"+"聯繫電話=?"+""+"where 學號='"+no+"'";
		PreparedStatement stmt;
		
		try{
			connection();
			stmt = conn.prepareStatement(updateSQL);
			stmt.setString(1, updateInnerPanel.getName());
			stmt.setString(2, updateInnerPanel.getGender());
			stmt.setString(3, updateInnerPanel.getBirth());
			stmt.setString(4, updateInnerPanel.getAddress());
			stmt.setString(5, updateInnerPanel.getTel());
			stmt.execute();
			stmt.close();
			JOptionPane.showMessageDialog(null, "修改數據成功");
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			close();
		}
	}
	
	public void deleteRecord(String no){
		String delStr = "delete from student where 學號='"+no+"'";
		try{
			connection();
			stmt.execute(delStr);
			JOptionPane.showMessageDialog(null, "刪除成功");
		}catch(SQLException e){
			System.err.println("刪除失敗");
			e.printStackTrace();
		}finally{
			close();
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StudentManagement app = new StudentManagement();
		app.setSize(500,260);
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		app.setVisible(true);
	}


	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if(e.getSource() == inputBtn){
			inputRecords();
		}else if(e.getSource() == viewBtn){
			viewRecords();
		}else if(e.getSource() == updateBtn){
			updateRecord(updateInnerPanel.getNo());
		}else if(e.getSource() == deleteBtn){
			deleteRecord(deleteInnerPanel.getNo());
			deleteInnerPanel.clearContent();
		}else if(e.getSource() == clearBtn1){
			inputInnerPanel.clearContent();
		}
	}

}

StudentPanel.java

package 學生基本信息;

/**
 * 功能簡介:實現"錄入","修改","瀏覽","刪除"學生基本信息的面板
 */

import java.awt.*;
import javax.swing.*;

public class StudentPanel extends JPanel{
	JLabel nolabel;       //學號標籤
	JLabel namelabel;     //姓名標籤
	JLabel genderlabel;   //性別標籤
	JLabel birthlabel;    //出生年月標籤
	JLabel addresslabel;  //家庭住址標籤
	JLabel tellabel;      //電話標籤
	
	JTextField nofield;     //學號輸入框
	JTextField namefield;   //姓名輸入框
	JTextField genderfield; //性別輸入框
	JTextField birthfield;  //出生年月輸入框
	JTextField addressfield;//家庭住址輸入框
	JTextField telfield;    //電話輸入框
	
	public StudentPanel(){
		setGUIComponent();
	}
	
	public void setGUIComponent() {
		// TODO Auto-generated method stub
		//初始化組件
		nolabel = new JLabel("學號");
		nofield = new JTextField(10);
		namelabel = new JLabel("姓名");
		namefield = new JTextField(10);
		genderlabel = new JLabel("性別");
		genderfield = new JTextField(10);
		birthlabel = new JLabel("出生年月");
		birthfield = new JTextField(10);
		addresslabel = new JLabel("家庭住址");
		addressfield = new JTextField(10);
		tellabel = new JLabel("聯繫電話");
		telfield = new JTextField(10);
		
		//設置組件
		this.setLayout(new GridLayout(3,4));
		this.add(nolabel);
		this.add(nofield);
		this.add(namelabel);
		this.add(namefield);
		this.add(genderlabel);
		this.add(genderfield);
		this.add(birthlabel);
		this.add(birthfield);
		this.add(addresslabel);
		this.add(addressfield);
		this.add(tellabel);
		this.add(telfield);
		this.setVisible(true);
		this.setSize(300,300);
		
	}
	
	//清楚文本框的內容
	public void clearContent(){
		nofield.setText("");
		namefield.setText("");
		genderfield.setText("");
		birthfield.setText("");
		addressfield.setText("");
		telfield.setText("");
	}
	
	//輸入
	public void setNo(String n){
		nofield.setText(n);
	}
	public void setName(String n){
		namefield.setText(n);
	}
	public void setGender(String n){
		genderfield.setText(n);
	}
	public void setBirth(String n){
		birthfield.setText(n);
	}
	public void setAddress(String n){
		addressfield.setText(n);
	}
	public void setTel(String n){
		telfield.setText(n);
	}
	
	//得到文本框內容
	public String getNo(){
		return nofield.getText();
	}
	public String getName(){
		return namefield.getText();
	}
	public String getGender(){
		return genderfield.getText();
	}
	public String getBirth(){
		return birthfield.getText();
	}
	public String getAddress(){
		return addressfield.getText();
	}
	public String getTel(){
		return telfield.getText();
	}
	
}


由於只是自己做着玩,所以使用access數據庫。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章