利用Swing組件學生信息管理系統(Java)

斷斷續續寫了三四天,看了很多代碼,查了很多資料,初步寫成,功能我覺得還不全,但還有一星期期末考了,沒時間寫了,先整理出來,以後再補充。

我寫了兩個思路的,第一個學生信息是在文本框內顯示的,因爲沒學過swing裏的表格,準確來說上課只講過awt。一系列操作都是現在本地的文本中實現,再導入到JTextArea,還能看,就是感覺有點奇怪。第二個版本自己看了一些簡單的JTable操作,是用表格顯示數據的,由於目前不懂數據庫,也不懂怎麼導入,就在網上找了導出數據到excel的方法。第一個版本功能有自動導入本地文本數據,添加,刪除(按名字刪除),查找。第二個只有添加,刪除(選中刪除),修改(直接表格上操作),排序(表頭點擊三次),導出excel。

第一個版本

package hhuc.InfoSystem;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class InfoSystem {
	public static void main(String[] args) {
		new Init();
	}
}

class Init {
	private JFrame jf;
	private JButton jb1;
	private JLabel jl;

	public Init() {
		jf = new JFrame();
		jf.setSize(250, 200);
		jf.setLocationRelativeTo(null);// 居中
		jf.setTitle("學生信息管理系統!");
		jf.setLayout(null);// 無佈局管理器

		// 標籤及按鈕
		jl = new JLabel("歡迎來到學生信息管理系統");
		jl.setBounds(20, 20, 250, 20);
		jb1 = new JButton("進入系統");
		jb1.setBounds(20, 60, 100, 50);
		
		// 添加進窗體
		jf.add(jl);
		jf.add(jb1);
		
		// 事件處理
		Event();

		jf.setVisible(true);
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		;
	}

	public void Event() {
		jb1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				new Init2();
				jf.dispose();//關閉窗體
			}

		});
	}
}

class Init2 {
	private JFrame jf2;
	private JTextArea jtextArea;// 顯示信息的文本框
	private JLabel lname, lid, lsex, lmajor;// 學生的姓名,學號,性別,專業
	private JTextField tname, tid, tsex, tmajor, tfind;
	private JButton add, delete, find;// 添加,刪除,查找
	private File file;

	public Init2() {
		jf2 = new JFrame();
		jf2.setSize(500, 800);
		jf2.setLocationRelativeTo(null);
		jf2.setTitle("學生信息管理系統!");
		jf2.setLayout(null);
		jf2.setResizable(false);// 窗口大小無法調節
		
		// 設置每個插件的位置座標
		jtextArea = new JTextArea();
		jtextArea.setBounds(10, 10, 400, 400);
		lname = new JLabel("姓名");
		lname.setBounds(10, 450, 50, 20);
		lid = new JLabel("學號");
		lid.setBounds(10, 500, 50, 20);
		lsex = new JLabel("性別");
		lsex.setBounds(10, 550, 50, 20);
		lmajor = new JLabel("專業");
		lmajor.setBounds(10, 600, 50, 20);
		tname = new JTextField(10);
		tname.setBounds(60, 450, 100, 20);
		tid = new JTextField(10);
		tid.setBounds(60, 500, 100, 20);
		tsex = new JTextField(10);
		tsex.setBounds(60, 550, 100, 20);
		tmajor = new JTextField(10);
		tmajor.setBounds(60, 600, 100, 20);
		tfind = new JTextField(10);
		tfind.setBounds(10, 700, 100, 20);
		add = new JButton("添加");
		add.setBounds(10, 650, 70, 20);
		delete = new JButton("刪除");
		delete.setBounds(200, 650, 70, 20);
		find = new JButton("查找");
		find.setBounds(120, 700, 70, 20);
		
		// 添加
		jf2.add(add);
		jf2.add(delete);
		jf2.add(find);
		jf2.add(jtextArea);
		jf2.add(lid);
		jf2.add(lmajor);
		jf2.add(lname);
		jf2.add(lsex);
		jf2.add(tfind);
		jf2.add(tid);
		jf2.add(tmajor);
		jf2.add(tname);
		jf2.add(tsex);
		
		// 事件處理
		Event2();
		
		// 可視,窗口可關
		jf2.setVisible(true);
		jf2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		// 讀取文檔,第一次會新建
		file = new File("f:\\管理系統學生信息.txt");
		if (!file.exists()) {
			try {// 文件不存在則創建文件,先創建目錄
				File dir = new File(file.getParent());
				dir.mkdirs();
				file.createNewFile();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
		try {
			BufferedReader read = new BufferedReader(new FileReader(file));
			String str = null;
			while ((str = read.readLine()) != null) {
				jtextArea.append(str + "\n");
			}
			read.close();
		} catch (FileNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
	}

	public void Event2() {
		add.addActionListener(new ActionListener() {//添加功能

			@Override
			public void actionPerformed(ActionEvent e) {
				if (!jtextArea.getText().contains(tname.getText())) {//重複信息不會寫入
					jtextArea.append(tname.getText() + "\t" + tid.getText() + "\t" + tsex.getText() + "\t"
							+ tmajor.getText() + "\n");
					output();//重新寫入數據
				}else
					System.out.println("該同學信息已經存在");
				tname.setText("");
				tid.setText("");
				tsex.setText("");
				tmajor.setText("");
			}

		});

		delete.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				jtextArea.setText("");
				
				//刪除此學生信息並重新讀取數據(文本里操作)
				InputStreamReader read = null;
				try {
					read = new InputStreamReader(new FileInputStream(file));
				} catch (FileNotFoundException e2) {
					e2.printStackTrace();
				}
		        BufferedReader bufferedReader = new BufferedReader(read);  
		        String line = null;  
		        try {
					while ((line = bufferedReader.readLine()) != null) {  
					    
					    if (line.contains(tname.getText())) { 
					    	System.out.println("刪除了" + line); 
					    	line = line.replace(line, "");
					         
					    }
					    jtextArea.append(line + "\n");
					}
				} catch (IOException e1) {
					e1.printStackTrace();
				} 
		        
		        //重新寫入數據
		        output();
				
				tname.setText("");
				tid.setText("");
				tsex.setText("");
				tmajor.setText("");
			}

		});
		
		find.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				jtextArea.setText("");
				
				//選出符合條件數據並重新讀取
				InputStreamReader read = null;
				try {
					read = new InputStreamReader(new FileInputStream(file));
				} catch (FileNotFoundException e2) {
					e2.printStackTrace();
				}
		        BufferedReader bufferedReader = new BufferedReader(read);  
		        String line = null;  
		        try {
					while ((line = bufferedReader.readLine()) != null) {  
					    
					    if (line.contains(tfind.getText())) { 
					    	jtextArea.append(line + "\n");
					         
					    }
					    
					}
				} catch (IOException e1) {
					e1.printStackTrace();
				} 
		        tfind.setText("");
			}
			
		});
	}
	
	public void output() {//寫入文本數據
		String str = jtextArea.getText();
		try {
			FileOutputStream out = new FileOutputStream(file);
			byte[] Byte = str.getBytes();// 將字符串轉化成字節數組
			out.write(Byte, 0, Byte.length);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
	

}

這個有點醜,可以忽略了

第二個版本

package hhuc.newInfoSystem;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import javax.swing.JScrollPane;
import javax.swing.JTable;

import javax.swing.JTextField;
import javax.swing.RowSorter;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

public class NewInfoSystem {
	private JFrame jf;

	private JTable jtable;
//	private TableModel model;//每次顯示數據都要new DefaultTableModel
	// 定義二維數組作爲數據
	Vector tableData = null;
	// 定義一維數組作爲標題
	Vector columnTitle = null;
//	private JTextArea jtextArea;// 顯示信息的文本框
	private JLabel lname, lid, lsex, lmajor;// 學生的姓名,學號,性別,專業
	private JTextField tname, tid, tsex, tmajor;
	private JButton add, delete, writeout;// 添加,刪除

	public void init() {
		tableData = new Vector();
		columnTitle = new Vector();
		columnTitle.addElement("姓名");
		columnTitle.addElement("學號");
		columnTitle.addElement("性別");
		columnTitle.addElement("專業");
		
		jf = new JFrame();
		jf.setSize(500, 800);
		jf.setLocationRelativeTo(null);
		jf.setTitle("學生信息管理系統!");
		jf.setLayout(null);
		jf.setResizable(false);// 窗口大小無法調節
		
		// 設置每個插件的位置座標
//		jtextArea = new JTextArea();
//		jtextArea.setBounds(10, 10, 400, 400);
//		model = new DefaultTableModel(tableData, columnTitle);
		jtable = new JTable(tableData, columnTitle);
		JScrollPane js = new JScrollPane(jtable);// 有滾動條
		js.setBounds(10, 10, 450, 400);
		
		lname = new JLabel("姓名");
		lname.setBounds(10, 450, 50, 20);
		lid = new JLabel("學號");
		lid.setBounds(10, 500, 50, 20);
		lsex = new JLabel("性別");
		lsex.setBounds(10, 550, 50, 20);
		lmajor = new JLabel("專業");
		lmajor.setBounds(10, 600, 50, 20);
		tname = new JTextField(10);
		tname.setBounds(60, 450, 100, 20);
		tid = new JTextField(10);
		tid.setBounds(60, 500, 100, 20);
		tsex = new JTextField(10);
		tsex.setBounds(60, 550, 100, 20);
		tmajor = new JTextField(10);
		tmajor.setBounds(60, 600, 100, 20);
//		tfind = new JTextField(10);
//		tfind.setBounds(10, 700, 100, 20);
		add = new JButton("添加");
		add.setBounds(10, 650, 70, 20);
		delete = new JButton("刪除");
		delete.setBounds(200, 650, 70, 20);
		writeout = new JButton("導出");
		writeout.setBounds(10, 700, 70, 20);
//		find = new JButton("查找");
//		find.setBounds(120, 700, 70, 20);
		// 添加
		jf.add(add);
		jf.add(delete);
		jf.add(writeout);
//		jf.add(find);
//		jf2.add(jtextArea);
		jf.add(js);
		jf.add(lid);
		jf.add(lmajor);
		jf.add(lname);
		jf.add(lsex);
//		jf.add(tfind);
		jf.add(tid);
		jf.add(tmajor);
		jf.add(tname);
		jf.add(tsex);
		
		// 事件處理
		Event();
		
		// 可視,窗口可關
		jf.setVisible(true);
		jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		
		
	}

	public void Event() {
		
		
//		
		jtable.getTableHeader().addMouseListener(new MouseListener() {

			@Override
			public void mouseClicked(MouseEvent e) {
				// TODO Auto-generated method stub
//				int row = jtable.getSelectedRow();// 獲取表格中被選中的行
//				TableRowSorter s = new TableRowSorter(jtable); 
				
				//排序包裝類,點擊表頭三次可排序,但是都按照字符串排序
				if (e.getClickCount() == 3) {
					DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
					RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
					jtable.setRowSorter(sorter);
				}
			}

			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub

			}

			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub

			}
		});

		add.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				add();
			}
		});

		delete.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub

				int row = jtable.getSelectedRow();// 獲取表格中被選中的行
				tableData.removeElementAt(row);
				DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
				jtable.setModel(tableModel);
				JOptionPane.showMessageDialog(null, "刪除成功");

			}
		});
		
		writeout.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				try {  
                    ExcelExporter exp = new ExcelExporter();  
                    exp.exportTable(jtable, new File("results.xls"));  
                } catch (IOException ex) {  
                    System.out.println(ex.getMessage());  
                    ex.printStackTrace();  
                }  
				JOptionPane.showMessageDialog(null, "導出成功");
			}
		});

//		find.addActionListener(new ActionListener() {
//
//			@Override
//			public void actionPerformed(ActionEvent e) {
//				// TODO Auto-generated method stub
//				Object[] arr = tableData.toArray();
//
//				for (int i = 0; i < arr.length; i++) {
//					
//					System.out.println(arr[i]);
//					System.out.println(arr[i].toString());
//					
//					
//				}
				 
//			}
//
//		});
	}

	public void add() {

//	    System.out.println(jtable.getRowCount());//錯的
//		tableData[jtable.getRowCount()][0] = tname.getText();
//		tableData[jtable.getRowCount()][1] = tid.getText();
//		tableData[jtable.getRowCount()][2] = tsex.getText();
//		tableData[jtable.getRowCount()][3] = tmajor.getText();
		Vector<String> ve = new Vector<String>();
		ve.addElement(tname.getText());
		ve.addElement(tid.getText());
		ve.addElement(tsex.getText());
		ve.addElement(tmajor.getText());
		int row = jtable.getSelectedRow();
		//添加時可以在選中行下一行插入,默認最後一行
		if (row >= 0) {
			tableData.insertElementAt(ve, row + 1);
		} else {
			tableData.addElement(ve);
		}
		// 用於顯示標題和數據
		DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
		jtable.setModel(tableModel);
		JOptionPane.showMessageDialog(null, "添加成功");

		tname.setText("");
		tid.setText("");
		tsex.setText("");
		tmajor.setText("");
		
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new NewInfoSystem().init();
	}

}


class ExcelExporter  {//導出到excel文件  
    public ExcelExporter() { }  
    public void exportTable(JTable table, File file) throws IOException {  
        TableModel model = table.getModel();  
        FileWriter out = new FileWriter(file);  
          
        for(int i=0; i < model.getColumnCount(); i++) {  
            out.write(model.getColumnName(i) + "\t");  
        }  
        out.write("\n");  
        for(int i=0; i< model.getRowCount(); i++) {  
            for(int j=0; j < model.getColumnCount(); j++) {  
                out.write(model.getValueAt(i,j).toString()+"\t");  
            }  
            out.write("\n");  
        }  
        out.close();  
        System.out.println("write out to: " + file);  
    }
}

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