1. 程式人生 > >20177101010101 白瑪次仁《面向物件程式設計》第十八週學習總結

20177101010101 白瑪次仁《面向物件程式設計》第十八週學習總結

實驗十八  總複習

實驗時間 2018-12-30

1、實驗目的與要求

(1) 綜合掌握java基本程式結構;

(2) 綜合掌握java面向物件程式設計特點;

(3) 綜合掌握java GUI 程式設計結構;

(4) 綜合掌握java多執行緒程式設計模型;

(5) 綜合程式設計練習。

2、實驗內容和步驟

任務1:填寫課程課後調查問卷,網址:https://www.wjx.cn/jq/33108969.aspx。

任務2:綜合程式設計練習

練習1:設計一個使用者資訊採集程式,要求如下:

(1) 使用者資訊輸入介面如下圖所示:

 

(1)使用者點選提交按鈕時,使用者輸入資訊顯示控制檯介面;

(2)使用者點選重置按鈕後,清空使用者已輸入資訊;

(3)點選視窗關閉,程式退出。

 

 
 1 package AA;
 2 
 3 import java.awt.Dimension;  4 import java.awt.Toolkit;  5 import java.awt.Window;  6  7 public class WinCenter {  8 public static void center(Window win){  9 Toolkit tkit = Toolkit.getDefaultToolkit(); 10 Dimension sSize = tkit.getScreenSize(); 11 Dimension wSize = win.getSize(); 12 if(wSize.height > sSize.height){ 13 wSize.height = sSize.height; 14  } 15 if(wSize.width > sSize.width){ 16 wSize.width = sSize.width; 17  } 18 win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2); 19  } 20 }
 

 

 
  1 package AA;
  2 
  3 import java.awt.Dimension;  4 import java.awt.FlowLayout;  5 import java.awt.GridLayout;  6  7 import javax.swing.BorderFactory;  8 import javax.swing.ButtonGroup;  9 import javax.swing.JButton;  10 import javax.swing.JCheckBox;  11 import javax.swing.JComboBox;  12 import javax.swing.JFrame;  13 import javax.swing.JLabel;  14 import javax.swing.JPanel;  15 import javax.swing.JRadioButton;  16 import javax.swing.JTextField;  17  18 public class DemoJFrame extends JFrame {  19 private JPanel jPanel1;  20 private JPanel jPanel2;  21 private JPanel jPanel3;  22 private JPanel jPanel4;  23 private JTextField fieldname;  24 private JComboBox comboBox;  25 private JTextField fieldadress;  26 private ButtonGroup bg;  27 private JRadioButton Male;  28 private JRadioButton Female;  29 private JCheckBox read;  30 private JCheckBox sing;  31 private JCheckBox dance;  32  33 public DemoJFrame() {  34 // 設定視窗大小  35 this.setSize(800, 400);  36 // 設定可見性  37 this.setVisible(true);  38 // 設定標題  39 this.setTitle("程式設計練習一");  40 // 設定關閉操作  41 this.setDefaultCloseOperation(EXIT_ON_CLOSE);  42 // 設定視窗居中  43 WinCenter.center(this);  44 // 建立四個面板物件  45 jPanel1 = new JPanel();  46  setJPanel1(jPanel1);  47 jPanel2 = new JPanel();  48  setJPanel2(jPanel2);  49 jPanel3 = new JPanel();  50  setJPanel3(jPanel3);  51 jPanel4 = new JPanel();  52  setJPanel4(jPanel4);  53 // 設定容器的為流佈局  54 FlowLayout flowLayout = new FlowLayout();  55 this.setLayout(flowLayout);  56 // 將四個面板新增到容器中  57 this.add(jPanel1);  58 this.add(jPanel2);  59 this.add(jPanel3);  60 this.add(jPanel4);  61  62  }  63  64 /*  65  * 設定面一  66 */  67 private void setJPanel1(JPanel jPanel) {  68 // TODO 自動生成的方法存根  69 jPanel.setPreferredSize(new Dimension(700, 45));  70 // 給面板的佈局設定為網格佈局 一行4列  71 jPanel.setLayout(new GridLayout(1, 4));  72  73 JLabel name = new JLabel("name:");  74 name.setSize(100, 50);  75 fieldname = new JTextField("");  76 fieldname.setSize(80, 20);  77  78 JLabel study = new JLabel("qualification:");  79 comboBox = new JComboBox();  80 comboBox.addItem("初中");  81 comboBox.addItem("高中");  82 comboBox.addItem("本科");  83  jPanel.add(name);  84  jPanel.add(fieldname);  85  jPanel.add(study);  86  jPanel.add(comboBox);  87  88  }  89  90 /*  91  * 設定面板二  92 */  93 private void setJPanel2(JPanel jPanel) {  94 // TODO 自動生成的方法存根  95 jPanel.setPreferredSize(new Dimension(700, 50));  96 // 給面板的佈局設定為網格佈局 一行4列  97 jPanel.setLayout(new GridLayout(1, 4));  98  99 JLabel name = new JLabel("address:"); 100 fieldadress = new JTextField(); 101 fieldadress.setPreferredSize(new Dimension(150, 50)); 102 103 JLabel study = new JLabel("hobby:"); 104 JPanel selectBox = new JPanel(); 105 selectBox.setBorder(BorderFactory.createTitledBorder("")); 106 selectBox.setLayout(new GridLayout(3, 1)); 107 read = new JCheckBox("reading"); 108 sing = new JCheckBox("singing"); 109 dance = new JCheckBox("danceing"); 110  selectBox.add(read); 111  selectBox.add(sing); 112  selectBox.add(dance); 113  jPanel.add(name); 114  jPanel.add(fieldadress); 115  jPanel.add(study); 116  jPanel.add(selectBox); 117  } 118 119 /* 120  * 設定面板三 121 */ 122 private void setJPanel3(JPanel jPanel) { 123 // TODO 自動生成的方法存根 124 jPanel.setPreferredSize(new Dimension(700, 150)); 125 FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT); 126  jPanel.setLayout(flowLayout); 127 JLabel sex = new JLabel("性別:"); 128 JPanel selectBox = new JPanel(); 129 selectBox.setBorder(BorderFactory.createTitledBorder("")); 130 selectBox.setLayout(new GridLayout(2, 1)); 131 bg = new ButtonGroup(); 132 Male = new JRadioButton("male"); 133 Female = new JRadioButton("female"); 134  bg.add(Male ); 135  bg.add(Female); 136  selectBox.add(Male); 137  selectBox.add(Female); 138  jPanel.add(sex); 139  jPanel.add(selectBox); 140 141  } 142 143 /* 144  * 設定面板四 145 */ 146 private void setJPanel4(JPanel jPanel) { 147 // TODO 自動生成的方法存根 148 jPanel.setPreferredSize(new Dimension(700, 150)); 149 FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 50, 10); 150  jPanel.setLayout(flowLayout); 151  jPanel.setLayout(flowLayout); 152 JButton sublite = new JButton("提交"); 153 JButton reset = new JButton("重置"); 154 sublite.addActionListener((e) -> valiData()); 155 reset.addActionListener((e) -> Reset()); 156  jPanel.add(sublite); 157  jPanel.add(reset); 158  } 159 160 /* 161  * 提交資料 162 */ 163 private void valiData() { 164 // TODO 自動生成的方法存根 165 // 拿到資料 166 String name = fieldname.getText().toString().trim(); 167 String xueli = comboBox.getSelectedItem().toString().trim(); 168 String address = fieldadress.getText().toString().trim(); 169  System.out.println(name); 170  System.out.println(xueli); 171 String hobbystring=""; 172 if (read.isSelected()) { 173 hobbystring+="reading "; 174  } 175 if (sing.isSelected()) { 176 hobbystring+="singing "; 177  } 178 if (dance.isSelected()) { 179 hobbystring+="dancing "; 180  } 181  System.out.println(address); 182 if (Male.isSelected()) { 183 System.out.println("male"); 184  } 185 if (Female.isSelected()) { 186 System.out.println("female"); 187  } 188  System.out.println(hobbystring); 189  } 190 191 /* 192  * 重置 193 */ 194 private void Reset() { 195 // TODO 自動生成的方法存根 196 fieldadress.setText(null); 197 fieldname.setText(null); 198 comboBox.setSelectedIndex(0); 199 read.setSelected(false); 200 sing.setSelected(false); 201 dance.setSelected(false); 202  bg.clearSelection(); 203  } 204 }

 

結果圖:

 

練習2:採用GUI介面設計以下程式:

編制一個程式,將身份證號.txt 中的資訊讀入到記憶體中;

按姓名字典序輸出人員資訊;

查詢最大年齡的人員資訊;

查詢最小年齡人員資訊;

輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;

查詢人員中是否有你的同鄉。

輸入身份證資訊,查詢所提供身份證號的人員資訊,要求輸入一個身份證數字時,查詢介面就顯示滿足查詢條件的查詢結果,且隨著輸入的數字的增多,查詢匹配的範圍逐漸縮小。

複製程式碼 複製程式碼
package 框圖;

//import javax.swing.JFrame;

import java.awt.BorderLayout; 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.IOException; import java.io.InputStreamReader; import java.util.*; import java.util.Timer; import javax.swing.*; public class Main1 extends JFrame { private static ArrayList<Person> Personlist; Scanner scanner = new Scanner(System.in); File file = new File("D:\\身份證號.txt"); private JPanel Panel; private JLabel JLabel1; private JButton Button, Button2, Button3; private JTextArea text, text1, text2, text3; boolean tru = true; public Main1() { Panel = new JPanel(); Panel.setLayout(null); Button = new JButton("1:按姓名字典序輸出人員資訊"); Button2 = new JButton("2:查詢最大年齡與最小年齡人員資訊"); Button3 = new JButton("查詢相近年齡"); JLabel1 = new JLabel("輸入身份證號或者地址查詢"); JLabel1.setBounds(900, 50, 400, 30); text = new JTextArea(30, 80); text.setBounds(50, 180, 700, 700); text1 = new JTextArea(1, 30); text1.setBounds(900, 80, 400, 30); text2 = new JTextArea(30, 80); text2.setBounds(900, 180, 700, 700); text3 = new JTextArea(30, 80); text3.setBounds(420, 100, 200, 40); Button.addActionListener(new Action()); Button.setBounds(50, 50, 300, 40); Button2.addActionListener(new Action1()); Button2.setBounds(50, 100, 300, 40); Button3.addActionListener(new Action2()); Button3.setBounds(650, 100, 120, 40); Panel.add(JLabel1); Panel.add(Button); Panel.add(Button2); Panel.add(Button3); Panel.add(text); Panel.add(text2); Panel.add(text1); Panel.add(text3); add(Panel); Timer timer = new Timer(); TimerTask timeTask = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub text2.setText(null); String place = text1.getText().toString().trim(); for (int i = 0; i < Personlist.size(); i++) { String Str = (String) Personlist.get(i).getbirthplace(); if (Str.contains(place) && !place.equals("")) { text2.append(Personlist.get(i).toString()); } } for (int i = 0; i < Personlist.size(); i++) { String Str = (String) Personlist.get(i).getID(); if (Str.contains(place) && !place.equals("")) { text2.append(Personlist.get(i).toString()); } } } }; timer.schedule(timeTask, 0, 100); Personlist = new ArrayList<>(); try { FileInputStream fis = new FileInputStream(file); BufferedReader in = new BufferedReader(new InputStreamReader(fis)); String temp = null; while ((temp = in.readLine()) != null) { Scanner linescanner = new Scanner(temp); linescanner.useDelimiter(" "); String name = linescanner.next(); String ID = linescanner.next(); String sex = linescanner.next(); String age = linescanner.next(); String place = linescanner.nextLine(); Person Person = new Person(); Person.setname(name); Person.setID(ID); Person.setsex(sex); int a = Integer.parseInt(age); Person.setage(a); Person.setbirthplace(place); Personlist.add(Person); } } catch (FileNotFoundException e) { System.out.println("查詢不到資訊"); e.printStackTrace(); } catch (IOException e) { System.out.println("資訊讀取有誤"); e.printStackTrace(); } } private class Action implements ActionListener { public void actionPerformed(ActionEvent event) { text.setText(null); Collections.sort(Personlist); text.append(Personlist.toString()); } } private class Action1 implements ActionListener { public void actionPerformed(ActionEvent event) { text.setText(null); int max = 0, min = 100; int j, k1 = 0, k2 = 0; for (int i = 1; i < Personlist.size(); i++) { j = Personlist.get(i).getage(); if (j > max) { max = j; k1 = i; } if (j < min) { min = j; k2 = i; } } text.append("年齡最大: " + Personlist.get(k1) + "\n" + "年齡最小: " + Personlist.get(k2)); } } private class Action2 implements ActionListener { public void actionPerformed(ActionEvent event) { text.setText(null); int a = Integer.parseInt(text3.getText().toString().trim()); int d_value = a - Personlist.get(agenear(a)).getage(); for (int i = 0; i < Personlist.size(); i++) { int p = Personlist.get(i).getage() - a; if (p == d_value || -p == d_value) text.append(Personlist.get(i).toString()); } } } public static int agenear(int age) { int j = 0, min = 53, d_value = 0, k = 0; for (int i = 0; i < Personlist.size(); i++) { d_value = Personlist.get(i).getage() - age; if (d_value < 0) d_value = -d_value; if (d_value < min) { min = d_value; k = i; } } return k; } }
       
package  框圖;
import java.awt.*;
import javax.swing.*; public class ButtonTest { public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame frame = new Main1(); frame.setTitle("身份證"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); } }
       
package project3;

import java.awt.Dimension;
import java.awt.EventQueue; import java.awt.Toolkit; import javax.swing.JFrame; public class Out{ public static void main(String args[]) { Toolkit t = Toolkit.getDefaultToolkit(); Dimension s = t.getScreenSize(); EventQueue.invokeLater(() -> { JFrame frame = new Main1(); frame.setBounds(0, 0, (int) s.getWidth(), (int) s.getHeight()); frame.setTitle("身份查詢系統"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); } }
       
package 框圖;

public class Person implements Comparable<Person> { private String name; private String ID; private int age; private String sex; private String birthplace; public String getname() { return name; } public void setname(String name) { this.name = name; } public String getID() { return ID; } public void setID(String ID) { this.ID = ID; } public int getage() { return age; } public void setage(int age) { this.age = age; } public String getsex() { return sex; } public void setsex(String sex) { this.sex = sex; } public String getbirthplace() { return birthplace; } public void setbirthplace(String birthplace) { this.birthplace = birthplace; } public int compareTo(Person o) { return this.name.compareTo(o.getname()); } public String toString() { return name + "\t" + sex + "\t" + age + "\t" + ID + "\t" + birthplace + "\n"; } }
   

 

 

 

 

 

練習3:採用GUI介面設計以下程式

編寫一個計算器類,可以完成加、減、乘、除的操作

利用計算機類,設計一個小學生100以內數的四則運算練習程式,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程式檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;

將程式中測試練習題及學生答題結果輸出到檔案,檔名為test.txt。

   
package 計算器;

public class Main {

    public static void main(String[] args) { MyExGUI lg = new MyExGUI(); // new MyExGUI();  } }
       
package 計算器;

import java.awt.Color;
import java.awt.Graphics; import java.awt.Graphics2D; import java.util.ArrayList; import java.util.Random; import javax.swing.JFrame; public class chart extends JFrame { // 繪製柱形統計圖 ArrayList<Integer> ran = new ArrayList<Integer>(); public chart(ArrayList<Integer> scores) { super(); getContentPane().setForeground(Color.CYAN); setForeground(Color.CYAN); setBackground(Color.CYAN); for (int i = 0; i < scores.size(); i++) { ran.add(scores.get(i)); System.out.println(scores.get(i)); } setTitle("繪製柱形圖"); setSize(600, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void paint(Graphics g) { int Width = getWidth(); int Height = getHeight(); int leftMargin = 20;// 柱形圖左邊界 int topMargin = 50;// 柱形圖上邊界 Graphics2D g2 = (Graphics2D) g; g2.setColor(Color.WHITE);// 繪製白色背景 g2.fillRect(0, 0, Width, Height - 100);// 繪製矩形圖  g2.setColor(Color.black); for (int i = 0; i <= 10; i++) { // 繪製灰色橫線和百分比 g2.drawString((100 - 10 * i) + " ", 15, topMargin + 30 * i); g2.drawLine(10, topMargin + 30 * i, Width, topMargin + 30 * i);// 繪製灰色橫線  } g2.setColor(Color.RED); for (int i = 0; i <= ran.size(); i++) { // 繪製柱形圖 int step = (i + 1) * 40;// 設定每個柱形圖的水平間隔為40 // 繪製矩形 g2.fillRoundRect(leftMargin + step * 2 - 5, (100 - ran.get(i)) * 3 + 50, 40, 300 - (100 - ran.get(i)) * 3, 40, 10); // 列出測試輪數 g2.drawString("第" + (i + 1) + "輪", leftMargin + step * 2, 380); } } }
       
package 計算器;

import java.io.BufferedOutputStream;
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class arithmetic { ArrayList<String> list = new ArrayList<String>(); ArrayList<String> list_timu = new ArrayList<String>(); ArrayList<String> list_answer = new ArrayList<String>(); public arithmetic() { FileOutputStream outSTr = null; BufferedOutputStream Buff = null; int number_n = 10, count; ArrayList<String> list_temp = new ArrayList<String>(); String[] operator = new String[] { "+", "-", "*", "/" }; Random rand = new Random(); File file1 = new File("D:\\test.txt"); if (file1.exists()) { // 建立檔案 try { file1.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } while (number_n > 0) { int[] number_temp = new int[rand.nextInt(2) + 3]; String[] str_temp = new String[number_temp.length - 1]; for (int i = 0; i < number_temp.length; i++) { if (i < number_temp.length - 1) { number_temp[i] = rand.nextInt(100); list_temp.add(String.valueOf(number_temp[i])); str_temp[i] = operator[rand.nextInt(4)]; list_temp.add(str_temp[i]); } else { number_temp[i] = rand.nextInt(100); list_temp.add(String.valueOf(number_temp[i])); } } count = calculate_RPN(produce_RPN(list_temp)); if (count != -1) { list_timu.add(transform_string(list_temp)); list_answer.add(String.valueOf(count)); list_temp.add(" = " + count); list.add(transform_string(list_temp)); number_n--; list_temp.clear(); } else list_temp.clear(); System.out.println(number_n); } try { outSTr = new FileOutputStream(file1); Buff = new BufferedOutputStream(outSTr); for (int i = 0; i < list.size(); i++) { try { Buff.write(list.get(i).getBytes()); Buff.write("\r\n".getBytes()); } catch (IOException e) { e.printStackTrace(); i--; } } Buff.flush(); Buff.close(); } catch (IOException e) { e.printStackTrace(); } // Buff.close(); try { outSTr.close(); } catch (IOException e) { e.printStackTrace(); } for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)); System.out.println(); } System.out.print("計算完畢!"); } public static int calculate_RPN(ArrayList<String> list_temp) { int i = 0, t; double a = 0, b = 0; String l_temp; Stack sk = new Stack(10); for (t = 0; t < list_temp.size(); t++) { l_temp = list_temp.get(i++); if (!isInteger(l_temp)) { b = sk.mypop(); a = sk.mypop(); switch (l_temp) { case "+": sk.mypush(a + b); break; case "-": if (!(a < b)) { sk.mypush(a - b); } else return -1; break; case "*": sk.mypush(a * b); break; case "/": if (b == 0 || a < b) return -1; sk.mypush(a / b); break; } System.out.println("st.mytop: " + sk.mypeek()); } else { sk.mypush((double) Integer.parseInt(l_temp)); } } if (!sk.myisempty()) { a = sk.mypop(); b = a - (int) a; System.out.println("a: " + a); if (a > 0 && b == 0) { return (int) a; } else return -1; } else return -1; } public static ArrayList<String> produce_RPN(ArrayList<String> list_temp) { int t = 0, i = 0; String tmp; Tack mytack = new Tack(10); ArrayList<String> lt_temp = new ArrayList<String>(); while (true) { tmp = list_temp.get(i++); if (isInteger(tmp)) { lt_temp.add(tmp); } else { if (mytack.myisempty()) { mytack.mypush(tmp); } else { if (isCPriority(tmp, mytack.mypeek())) mytack.mypush(tmp); else { lt_temp.add(mytack.mypop()); mytack.mypush(tmp); } } } if (i >= list_temp.size()) { while (!mytack.myisempty()) lt_temp.add(mytack.mypop()); System.out.println(transform_string(list_temp)); list_temp = lt_temp; System.out.println(list_temp); return list_temp; } } } public static boolean isInteger(String str) { for (int i = str.length(); --i >= 0;) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } public static boolean isCPriority(String str, String s) { if ((str + s).equals("*+") || (str + s).equals("*-") || (str + s).equals("/+") || (str + s).equals("/-")) return true; else return false; } public static String transform_string(ArrayList<String> list_temp) { String s = ""; for (int i = 0; i < list_temp.size(); i++) { s += list_temp.get(i); } return s; } static class Stack { int mytop; double stk[]; public Stack(int num) { mytop = -1; stk = new double[num]; } /* 出棧 */ double mypop() { double peek = stk[mytop]; mytop--; return peek; } /* 入棧 */ void mypush(double x) { mytop++; stk[mytop] = x; } /* 判空 */ Boolean myisempty() { if (mytop == -1) return true; else return false; } /* 取棧頂元素 */ double mypeek() { double peek = stk[mytop]; return peek; } /* 棧大小 */ int mysize() { return mytop + 1; } } static class Tack { int mytop; String tk[]; public Tack(int num) { mytop = -1; tk = new String[num]; } /* 出棧 */ String mypop() { String peek = tk[mytop]; mytop--; return peek; } /* 入棧 */ void mypush(String x) { mytop++; tk[mytop] = x; } /* 判空 */ Boolean myisempty() { if (mytop == -1) return true; else return false; } /* 取棧頂元素 */ String mypeek() { String peek = tk[mytop]; return peek; } /* 棧大小 */ int mysize() { return mytop + 1; } } }
       
package 計算器;

import java.awt.*;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import javax.swing.*; public class MyExGUI extends JFrame { ArrayList<String> user_zongti = new ArrayList<String>(); ArrayList<String> user_zonganswer = new ArrayList<String>(); ArrayList<String> user_answer = new ArrayList<String>(); ArrayList<String> true_answer = new ArrayList<String>(); ArrayList<String> jta_timu = new ArrayList<String>(); ArrayList<String> jta_zong = new ArrayList<String>(); ArrayList<Integer> user_fenshu = new ArrayList<Integer>(); JMenuBar jm; // 選單條元件 JMenu menu;// 選單 JMenuItem item1, item2;// 選單項 JMenu build; // 二級選單  JMenuItem file, project; TextArea answer_all = new TextArea(); TextField jta = new TextField(); TextField jta_answer = new TextField(); JLabel num_answer = new JLabel(); JLabel answer; JToolBar jtb;// 工具條  JButton jb1, jb2, jb3, jb4, jb5, jb6, jb7, jb_next; int answer_count; int answer_fenshu; public MyExGUI() { // 建立選單 jm = new JMenuBar(); menu = new JMenu("檔案(F)"); menu.setMnemonic('f'); // 助記符  build = new JMenu("新建"); file = new JMenuItem("檔案"); project = new JMenuItem("答題"); item1 = new JMenuItem("儲存(S)"); item2 = new JMenuItem("退出"); answer = new JLabel("第 1 題"); // 新增選單項至選單上  build.add(file); build.add(project); menu.add(build); menu.add(item1); menu.add(item2); menu.addSeparator(); // 將選單加入至選單欄  jm.add(menu); JPanel contentPanel = new JPanel(); contentPanel.setLayout(null); JLabel daan = new JLabel("答案"); JLabel dengyu = new JLabel("="); num_answer = answer; num_answer.setFont(new Font("宋體", Font.BOLD, 22)); jb_next = new JButton("下一題"); jta.setFont(new Font("宋體", Font.BOLD, 22)); jta_answer.setFont(new Font("宋體", Font.BOLD, 22)); jb_next.setFont(new Font("宋體", Font.BOLD, 22)); daan.setFont(new Font("宋體", Font.BOLD, 22)); dengyu.setFont(new Font("宋體", Font.BOLD, 22)); contentPanel.add(num_answer); contentPanel.add(daan); contentPanel.add(dengyu); contentPanel.add(jta); contentPanel.add(jta_answer); contentPanel.add(answer_all); contentPanel.add(jb_next); num_answer.setBounds(90, 20, 130, 50); daan.setBounds(250, 20, 90, 50); jta.setBounds(50, 70, 150, 30); dengyu.setBounds(205, 70, 20, 20); jta_answer.setBounds(230, 70, 100, 30); jb_next.setBounds(350, 70, 110, 30); answer_all.setBounds(50, 120, 400, 300); this.setJMenuBar(jm); // 新增選單欄,不能設定位置,會自動放在最上部 this.add(contentPanel); this.setTitle("線上答題系統"); this.setSize(600, 500); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); item1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { FileOutputStream outSTr = null; BufferedOutputStream Buff = null; boolean flag = true; File file; // String test ; do { // test = "test"+count;  String inputValue = JOptionPane.showInputDialog("Please input file name"); file = new File(inputValue + "test.txt"); if (!file.exists()) { // 建立檔案 try { flag = file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } flag = false; } else { JOptionPane.showMessageDialog(null, "該檔名已存在,請重新輸入", "ERROR", JOptionPane.ERROR_MESSAGE); flag = true; } } while (flag); // 寫入檔案  String u_answer; try { outSTr = new FileOutputStream(file); Buff = new BufferedOutputStream(outSTr); System.out.println("選擇是後執行的程式碼" + user_zongti.size() + user_answer.size()); for (int i = 0; i < user_zongti.size(); i++) { try { Buff.write(user_zongti.get(i).getBytes()); Buff.write(" ".getBytes()); u_answer = user_answer.get(i); if (u_answer.equals("")) u_answer = "沒有作答"; Buff.write(u_answer.getBytes()); Buff.write("\r\n".getBytes()); } catch (IOException e) { e.printStackTrace(); i--; } } Buff.flush(); Buff.close(); } catch (IOException e) { e.printStackTrace(); } try { outSTr.close(); } catch (IOException e) { e.printStackTrace(); } user_zongti.clear(); user_answer.clear(); } }); project.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { arithmetic art = new arithmetic(); true_answer = art.list_answer; jta_timu = art.list_timu; jta_zong = art.list; answer_count = 1; answer_all.setText(""); for (int i = 0; i < art.list_timu.size(); i++) { user_zongti.add(jta_zong.get(i)); answer_all.append(jta_timu.get(i)); answer_all.append("\r\n"); } num_answer.setText("第 " + answer_count + " 題"); jta.setText(jta_timu.get(answer_count - 1)); answer_count++; } }); jb_next.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { String temp; temp = jta_answer.getText(); if (jta.getText().equals("")) { JOptionPane.showMessageDialog(null, "錯誤,請匯入題庫", "錯誤", JOptionPane.ERROR_MESSAGE); return; } jta_answer.setText(""); if (answer_count <= 10) { if (isInteger(temp)) { user_answer.add(temp); System.out.println("選擇否後執行的程式碼" + temp + "user_size" + user_answer.size()); num_answer.setText("第 " + answer_count + " 題"); jta.setText(jta_timu.get(answer_count - 1)); answer_count++; } else { JOptionPane.showMessageDialog(null, "錯誤", "請輸入數字", JOptionPane.ERROR_MESSAGE); } } else { user_answer.add(temp); System.out.println("選擇否後執行的程式碼" + temp + "user_size" + user_answer.size()); answer_fenshu = 0; for (int i = 0; i < user_answer.size(); i++) { if (user_answer.get(i).equals(true_answer.get(i))) answer_fenshu += 5; } user_fenshu.add(answer_fenshu); Object[] options = { "是", "取消" }; int res = JOptionPane.showOptionDialog(null, "是否檢視成績", "答題完畢", JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, null, options, options[0]); if (res == JOptionPane.YES_OPTION) { chart ct = new chart(user_fenshu); ct.setVisible(true); } else { Object[] option = { "是", "取消" }; int res1 = JOptionPane.showOptionDialog(null, "是否退出程式", "終止框", JOptionPane.DEFAULT_OPTION, JOptionPane.YES_NO_OPTION, null, option, option[0]); if (res1 == JOptionPane.YES_OPTION) { dispose(); System.exit(0); } else { } } } } }); item2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); System.exit(0); } }); } public static boolean isInteger(String str) { for (int i = str.length(); --i >= 0;) { if (!Character.isDigit(str.charAt(i))) { return false; } } return true; } }
   

 

實驗總結:本學期學Java這門課後學到了好多關於計算機語言的出事用法,自己真的學到的內容並不多,但是收穫了很多以前沒接觸過的還有好多。

學期學習總結:學習內容

Java語言特點與開發環境配置(第1章、第2章)

Java基本程式結構(第3章)

Java面向物件程式結構(第4章、第5章、第6章)(重點)

類、類間關係、類圖 

Java JDK預定義類/介面及其API

   (String-第3章、 Arrays-第3章、Files-第3章62頁、LocalDate-第4章、 Object-第5章、物件包裝器-第5章、Comparator-第6章、 異常類-第7章、ArrayList-第5+8章、第9章、第10-12章、 第14章)

Java異常處理程式設計模型

Java GUI程式設計模型 

Java併發程式設計(第14章) 

Java應用程式部署(第13章)

這學期開始最初進入學Java,學完十四章之後還行吧!對於我來說的確很難!

感謝老師和學長的教導!