1. 程式人生 > >學生資訊管理系統(GUI)

學生資訊管理系統(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資料庫。

相關推薦

學生資訊管理系統GUI

資料庫的內容:GUI介面:程式碼:StudentManagerment.javapackage 學生基本資訊; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.Actio

Java——Web開發之MVC設計模式的學生資訊管理系統

為什麼這個標題為“(二)”,其實是對於上一個特別簡單學生資訊管理系統裡功能的完善。 所謂的“(一)”在這:學生資訊管理系統(一) 系統實現的功能: 實現新增學生 顯示查詢到的學生 刪除學生 更新學生資訊 模糊查詢符合相關資訊的學生

jsp學生資訊管理系統

今天看了java1234網的小鋒老師的jsp實戰專案視訊,做了個簡單的登入驗證,寫的不是很好,有點小問題還沒寫好(密碼或賬號錯誤提示) 資料庫連線類 import java.sql.*; import java.util.List; public class ConnD

學生資訊管理系統——系統功能分析

       好多天,沒有學習資料庫了,更別說敲系統了。落下了有些東西又得從頭再來。最近這些天在看第二遍《SQL——入門經典》把基礎知識重溫一下,同時看了看這個小系統,不知道如何下手啊,所以先大致觀察

順序表構建學生資訊管理系統C++

順序表構建學生資訊管理系統–C++樣例 對於本文的任何建議和問題都可留言,我們共同探討,進步和提高。 上次編寫了根據單鏈表進行構建學生管理系統的C++樣例,本次使用順序表進行構建。單鏈表與順序表各有利弊,順序表能夠快速的進行定位,但是必須事先指定表的

學生資訊管理系統c++

         學生資訊管理系統(c++) 該課程設計含有兩個模組:  (1)教師許可權模組  (2)學生許可權模組  學生許可權模組含有1)增加2)顯示3)追加4)查詢  學生資訊功能  教師許可權模組含有1)增加2)顯示3)追加4)查詢 5)修改 6)刪除 學生資訊功能  用到的主要知識   (1)類

學生資訊管理系統sqlite3

 平臺:linux 開發語言:c 需要 sqlite3 軟體環境 在程式目錄先建立 資料檔案:     在終端輸入命令:sqlite3 student.db  --》開啟sqlite3 並建立資料檔案student.db     在sqlite3 中建立資料表:cre

很基礎的學生資訊管理系統僅用於記錄自學

#include<stdio.h> #include<Windows.h> #define N 100 int i, n; void Readscore(int number[], float mathscore[], float chscore[]);//錄入函式 int

Python--學生資訊管理系統簡易版

           學完Python基礎,結合前邊所學的知識,做一個小Demo,一來熟悉程式碼,二來鞏固和複習前邊所學的東西。 程式碼如下: #coding=utf-8 #學生管理系統 #用來儲存學生資訊 nameList = []         print("-"

java+SQL做學生資訊管理系統增刪改查學生新作

java+SQL做學生資訊管理系統(增刪改查) 過程中需要用到的所有工具資料庫以及資料庫管理器等等 密碼:q80t 大學學習java後做的第一個小專案忍不住分享一下,也是我自己的面向物件程式設計的實踐作業啦,有點水,不是很優。廢話不多數,下面進入正題 介面的編

【新手任務】超低配學生資訊管理系統更新中

開發工具:Eclipse Java EE IDE 2018-09 (4.9.0) + MySQL Workbench 8.0 1. 準備資料庫 1.1 新建資料庫 students   1.2 新建兩張表 tblstudents,tblmanagers,用於存放學生資

學生資訊管理系統--Java+MySQL實現

基於Java swing+MySQL實現學生資訊管理系統:主要實現JDBC對學生資訊進行增刪改查,應付一般課設足矣,分享給大家。(由於篇幅原因,程式碼未全部列出,如有需要留下郵箱) 1、開發環境:jdk7+MySQL5+win7 程式碼結構:model-dao

企業框架寫的簡單學生資訊管理系統springMVC,mybatis

雖然搭建企業框架繁雜了些,但是搭建好後寫的程式碼還是少多了聽著用企業框架寫的感覺要高大上一點有木有先看看演示的效果圖:1.輸入:localhost:8080/rjday7/listStudent.action2.輸入id進行查詢3.id查詢結果:可見已經是另一個action了

c語言學生資訊管理系統連結串列、檔案

#include<stdio.h>                                               /*呼叫標頭檔案*/ #include<stdlib.h> #include<string.h> #inclu

物件陣列增刪練習之《學生資訊管理系統使用ArrayList

//請完善實驗給定程式碼,使得工程可以完成學生資訊的管理功能,主要功能包括:新增學生資料、列印學生名單、刪除學生資料三個功能。 import java.io.*; import java.util.ArrayList; import java.util.Scanner;

Python專案:學生資訊管理系統完整版

主要包括有:            完善部分:輸入錯誤;無資料查詢等異常錯誤            新的功能:檔案的操作:檔案的讀寫,其中重點是對文字字串的詳細解析(關於整個解析拆解和重組詳見程式碼,以及添加了註釋)學生資訊管理系統(完整版) 學生資訊管理專案,要求帶操作介面

學生資訊管理系統js與php的資料傳輸

最近期末將至,比較忙,更得比較慢,見諒。 搭建完環境並且確認連線之後,我們可以開始編寫程式了。 然後建表 插入資料 (這裡僅作一個示例) 另外建表的時候要注意,因為要建立檢視,所以應該把要與另一個表連線的項建為外來鍵,然後另一個表通過refer

課程設計————學生資訊管理系統包含歷代思路和程式碼

課程設計————學生管理系統(包含歷代思路和程式碼) 一.前言 學生資訊管理系統是我第一個獨立完成的比較長的程式碼,也算是花費了一些心血,這個系統是我一點點把它從幾百行的程式碼逐漸優化到上千行,功能從簡單到複雜。在這裡我把我的思路分享給大家,希望能給大家

Python實現學生資訊管理系統修改版

在學習之前先要了解sqlite遊標的使用方法python使用sqlite3時遊標的使用方法 繼上篇部落格Python實現學生資訊管理系統後,我就覺得寫的太複雜了,然後又是一通優化、優化、優化; 本次優化主要修改了: 1.使用遊標的方法連線、增、刪、改、查資

學生資訊管理系統c語言

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #define LEN sizeof(STD) typedef st