# 2019-12-16 上課範例
[TOC]
## Student.java
```java=
/**
* 學生類別
*
* @author kChen
* @version 0.1.0
*
*/
public class Student {
/**
* 學生學號
*/
private String id;
/**
* 學生姓名
*/
private String name;
/**
* 學生的中文成績
*/
private int chinese;
/**
* 學生的英文成績
*/
private int english;
/**
* 學生的數學成績
*/
private int math;
/**
* 建構子,預設學生資料
*/
public Student() {
name = "老王";
id = "S01";
chinese = 95;
english = 60;
math = 78;
}
/**
* 自行輸入資料的建構子
*
* @param id 學生學號
* @param name 學生姓名
* @param chinese 中文成績
* @param english 英文成績
* @param math 數學成績
*/
public Student(String id, String name, int chinese, int english, int math) {
this.id = id;
this.name = name;
this.chinese = chinese;
this.english = english;
this.math = math;
}
/**
* 計算學生各科的總合
*
* @return 學生各科的總合
*/
public int sum() {
return this.chinese + this.english + this.math;
}
/**
* 計算學生各科的平均
*
* @return 學生的各科的平均
*/
public double avg() {
return this.sum() / 3.0;
}
@Override
public String toString() {
String str = this.id+ ",";
str += this.name + ",";
str += this.chinese + ",";
str += this.english + ",";
str += this.math + ",";
str += this.sum() + ",";
str += this.avg();
return str;
}
}
```
## StudentDabase.java
```java=
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
public class StudentDatabase {
// 我們自己宣告的Feild
private ArrayList<Student> studentList;
// WindowBuilder 宣告的
private JFrame frame;
private JTextField txtName;
private JTextField txtStudentID;
private JTextField txtChinese;
private JTextField txtEnglish;
private JTextField txtMath;
private JTextArea txtrOutput;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StudentDatabase window = new StudentDatabase();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public StudentDatabase() {
// WindowBuilder 初始化
initialize();
// 我們自己的初始化
this.studentList = new ArrayList<Student>();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setTitle("學生資料庫");
frame.setBounds(100, 100, 660, 469);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txtName = new JTextField();
txtName.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtName.setText("張三");
txtName.setBounds(99, 71, 108, 30);
frame.getContentPane().add(txtName);
txtName.setColumns(10);
JLabel lblName = new JLabel("姓名");
lblName.setHorizontalAlignment(SwingConstants.RIGHT);
lblName.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblName.setBounds(40, 74, 49, 25);
frame.getContentPane().add(lblName);
JLabel lblStudentID = new JLabel("學號");
lblStudentID.setHorizontalAlignment(SwingConstants.RIGHT);
lblStudentID.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblStudentID.setBounds(40, 29, 49, 25);
frame.getContentPane().add(lblStudentID);
txtStudentID = new JTextField();
txtStudentID.setText("S01");
txtStudentID.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtStudentID.setColumns(10);
txtStudentID.setBounds(99, 26, 108, 30);
frame.getContentPane().add(txtStudentID);
txtChinese = new JTextField();
txtChinese.setText("76");
txtChinese.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtChinese.setColumns(10);
txtChinese.setBounds(289, 26, 108, 30);
frame.getContentPane().add(txtChinese);
JLabel lblChinese = new JLabel("中文");
lblChinese.setHorizontalAlignment(SwingConstants.RIGHT);
lblChinese.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblChinese.setBounds(225, 29, 49, 25);
frame.getContentPane().add(lblChinese);
JLabel lblEnglish = new JLabel("英文");
lblEnglish.setHorizontalAlignment(SwingConstants.RIGHT);
lblEnglish.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblEnglish.setBounds(225, 74, 49, 25);
frame.getContentPane().add(lblEnglish);
txtEnglish = new JTextField();
txtEnglish.setText("80");
txtEnglish.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtEnglish.setColumns(10);
txtEnglish.setBounds(289, 71, 108, 30);
frame.getContentPane().add(txtEnglish);
JLabel lblMath = new JLabel("數學 ");
lblMath.setHorizontalAlignment(SwingConstants.RIGHT);
lblMath.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblMath.setBounds(435, 29, 49, 25);
frame.getContentPane().add(lblMath);
txtMath = new JTextField();
txtMath.setText("66");
txtMath.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtMath.setColumns(10);
txtMath.setBounds(493, 26, 108, 30);
frame.getContentPane().add(txtMath);
JButton btnAdd = new JButton("新增");
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AddClick();
}
});
btnAdd.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
btnAdd.setBounds(514, 74, 87, 25);
frame.getContentPane().add(btnAdd);
txtrOutput = new JTextArea();
txtrOutput.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtrOutput.setBounds(44, 141, 558, 256);
frame.getContentPane().add(txtrOutput);
}
protected void AddClick() {
// 取得視窗資料
String id = this.txtStudentID.getText();
String name = this.txtName.getText();
String strChinese = this.txtChinese.getText();
String strEnglish = this.txtEnglish.getText();
String strMath = this.txtMath.getText();
// 將字串轉換成數值
int chinese = Integer.parseInt(strChinese);
int english = Integer.parseInt(strEnglish);
int math = Integer.parseInt(strMath);
// 產生學生物件
Student st = new Student(id, name, chinese, english, math);
// 將學生物件加入至 ArrayList
this.studentList.add(st);
int n = this.studentList.size();
// 將 studentList 顯示至畫面
String strStudentList = "";
for (int i = 0; i < n; i++) {
strStudentList += this.studentList.get(i)+"\n";
}
this.txtrOutput.setText(strStudentList);
}
}
```
## StudentList.java
```java=
import java.util.ArrayList;
/**
* 學生清單類別
* @author kChen
* @version 0.0.1
* @since 2019/12/16
*
*/
public class StudentList {
private ArrayList<Student> studentList;
/**
* 建構子
*/
public StudentList() {
studentList = new ArrayList<Student>();
}
/**
* 插入學生資料在第 index 筆
* @param index 一個int數字,為插入學生資料的編號
* @param element 一個Student,為欲插入的學生資料
*/
public void add(int index, Student element) {
studentList.add(index, element);
}
/**
* 新增學生資料
* @param e 一個Student類別,為欲新增的學生資料
* @return
*/
public boolean add(Student e) {
return studentList.add(e);
}
public void clear() {
studentList.clear();
}
/**
* 取得第index的學生資料
* @param index 一個int,為要讀取的學生編號
* @return
*/
public Student get(int index) {
return studentList.get(index);
}
/**
* 移除第 index 的學生資料
* @param index 一個int,為要移除的學生編號
* @return
*/
public Student remove(int index) {
return studentList.remove(index);
}
public int size() {
return studentList.size();
}
/**
* 覆寫 toString() 改成學生清單
*/
@Override
public String toString() {
// 將 studentList 顯示至畫面
String strStudentList = "";
for (int i = 0; i < this.studentList.size(); i++) {
strStudentList += this.studentList.get(i)+"\n";
}
return strStudentList;
}
}
```
## StudentDatabase2.java
```java=
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import java.awt.Font;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.awt.event.ActionEvent;
public class StudentDatabase2 {
// 我們自己宣告的Feild
private StudentList studentList;
// WindowBuilder 宣告的
private JFrame frame;
private JTextField txtName;
private JTextField txtStudentID;
private JTextField txtChinese;
private JTextField txtEnglish;
private JTextField txtMath;
private JTextArea txtrOutput;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StudentDatabase2 window = new StudentDatabase2();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public StudentDatabase2() {
// WindowBuilder 初始化
initialize();
// 我們自己的初始化
this.studentList = new StudentList();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setTitle("學生資料庫");
frame.setBounds(100, 100, 660, 469);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(null);
txtName = new JTextField();
txtName.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtName.setText("張三");
txtName.setBounds(99, 71, 108, 30);
frame.getContentPane().add(txtName);
txtName.setColumns(10);
JLabel lblName = new JLabel("姓名");
lblName.setHorizontalAlignment(SwingConstants.RIGHT);
lblName.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblName.setBounds(40, 74, 49, 25);
frame.getContentPane().add(lblName);
JLabel lblStudentID = new JLabel("學號");
lblStudentID.setHorizontalAlignment(SwingConstants.RIGHT);
lblStudentID.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblStudentID.setBounds(40, 29, 49, 25);
frame.getContentPane().add(lblStudentID);
txtStudentID = new JTextField();
txtStudentID.setText("S01");
txtStudentID.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtStudentID.setColumns(10);
txtStudentID.setBounds(99, 26, 108, 30);
frame.getContentPane().add(txtStudentID);
txtChinese = new JTextField();
txtChinese.setText("76");
txtChinese.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtChinese.setColumns(10);
txtChinese.setBounds(289, 26, 108, 30);
frame.getContentPane().add(txtChinese);
JLabel lblChinese = new JLabel("中文");
lblChinese.setHorizontalAlignment(SwingConstants.RIGHT);
lblChinese.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblChinese.setBounds(225, 29, 49, 25);
frame.getContentPane().add(lblChinese);
JLabel lblEnglish = new JLabel("英文");
lblEnglish.setHorizontalAlignment(SwingConstants.RIGHT);
lblEnglish.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblEnglish.setBounds(225, 74, 49, 25);
frame.getContentPane().add(lblEnglish);
txtEnglish = new JTextField();
txtEnglish.setText("80");
txtEnglish.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtEnglish.setColumns(10);
txtEnglish.setBounds(289, 71, 108, 30);
frame.getContentPane().add(txtEnglish);
JLabel lblMath = new JLabel("數學 ");
lblMath.setHorizontalAlignment(SwingConstants.RIGHT);
lblMath.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
lblMath.setBounds(435, 29, 49, 25);
frame.getContentPane().add(lblMath);
txtMath = new JTextField();
txtMath.setText("66");
txtMath.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtMath.setColumns(10);
txtMath.setBounds(493, 26, 108, 30);
frame.getContentPane().add(txtMath);
JButton btnAdd = new JButton("新增");
btnAdd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AddClick();
}
});
btnAdd.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
btnAdd.setBounds(514, 74, 87, 25);
frame.getContentPane().add(btnAdd);
txtrOutput = new JTextArea();
txtrOutput.setFont(new Font("微軟正黑體", Font.PLAIN, 18));
txtrOutput.setBounds(44, 141, 558, 256);
frame.getContentPane().add(txtrOutput);
}
protected void AddClick() {
// 取得視窗資料
String id = this.txtStudentID.getText();
String name = this.txtName.getText();
String strChinese = this.txtChinese.getText();
String strEnglish = this.txtEnglish.getText();
String strMath = this.txtMath.getText();
// 將字串轉換成數值
int chinese = Integer.parseInt(strChinese);
int english = Integer.parseInt(strEnglish);
int math = Integer.parseInt(strMath);
// 產生學生物件
Student st = new Student(id, name, chinese, english, math);
// 將學生物件加入至 StudentList
this.studentList.add(st);
// 將 studentList 顯示至畫面
this.txtrOutput.setText(studentList.toString());
}
}
```
###### tags: `Java計算機程式設計` `108-1`