馮誌霞201771010107《面向對象程序設計(java)》第十八周學習總結
實驗十八 總復習
實驗時間 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)點擊窗口關閉,程序退出。
import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JTextArea; import javax.swing.JTextField; public class A extends JFrame{ private JPanel panel1; private JPanel panel2; private JPanel panel3; private JPanel panel4; //private JLabel label; private JComboBox jComboBox; private JTextField jTextField; private JTextArea textArea; private JCheckBox checkBox1; private JCheckBox checkBox2; private JCheckBox checkBox3; private JRadioButton radioButton1; private JRadioButton radioButton2; private JButton button1; private JButton button2; private ButtonGroup buttonGroup; private Object submit; public A(){ //初始化 this.setVisible(true); this.setSize(800, 450); this.setDefaultCloseOperation(EXIT_ON_CLOSE); panel1=new JPanel(); panel2=new JPanel(); panel3=new JPanel(); panel4=new JPanel(); setPanel1(panel1); setPanel2(panel2); setPanel3(panel3); setPanel4(panel4); FlowLayout flowLayout = new FlowLayout(); this.setLayout(flowLayout); this.add(panel1); this.add(panel2); this.add(panel3); this.add(panel4); } private void setPanel1(JPanel panel) { panel.setLayout(new GridLayout(1, 4)); panel.setPreferredSize(new Dimension(700, 45)); JLabel label1= new JLabel("Name:",JLabel.CENTER); jTextField = new JTextField(" "); JLabel jLabel2 = new JLabel("Qualification:",JLabel.CENTER); //jLabel2.setSize(80, 40); jComboBox=new JComboBox(); jComboBox.addItem("本科"); jComboBox.addItem("研究生"); jComboBox.addItem("博士生"); panel.add(label1); panel.add(jTextField); panel.add(jLabel2); panel.add(jComboBox); } private void submit() { // TODO Auto-generated method stub String s1=jTextField.getText().toString().trim(); String s2=textArea.getText().toString().trim(); String s3=jComboBox.getSelectedItem().toString().trim(); String s4=" "; System.out.println(s1); System.out.println(s2); System.out.println(s3); if(radioButton1.isSelected()) { System.out.println("boy"); } if(radioButton2.isSelected()) { System.out.println("gril"); } if(checkBox1.isSelected()) { s4+="Sing "; } if(checkBox2.isSelected()) { s4+="Dance "; } if(checkBox3.isSelected()) { s4+="Draw "; } System.out.println(s4); } private void setPanel3(JPanel panel) { // TODO Auto-generated method stub //String sex = new JLabel(sex, JLabel.CENTER); panel.setPreferredSize(new Dimension(700, 150)); //panel.setLayout(new GridLayout(1, 2)); JLabel sex = new JLabel("sex:", JLabel.CENTER); JPanel selectBox = new JPanel(); selectBox.setPreferredSize(new Dimension(300, 100)); FlowLayout flowLayout = new FlowLayout(); panel.setLayout(flowLayout); selectBox.setBorder(BorderFactory.createTitledBorder("")); selectBox.setLayout(new GridLayout(2, 1)); buttonGroup = new ButtonGroup(); radioButton1=new JRadioButton("boy"); radioButton2=new JRadioButton("gril"); buttonGroup.add(radioButton1); buttonGroup.add(radioButton2); selectBox.add(radioButton1); selectBox.add(radioButton2); panel.add(sex); panel.add(selectBox); } private void setPanel2(JPanel panel) { // TODO Auto-generated method stub panel.setPreferredSize(new Dimension(700, 80)); panel.setLayout(new GridLayout(1, 4)); JLabel jLabel = new JLabel("Address:",JLabel.CENTER); textArea=new JTextArea(); //textArea.setPreferredSize(new Dimension(80, 60)); Label label2 = new Label(" Hobby: ", JLabel.CENTER); JPanel selectBox = new JPanel(); selectBox.setBorder(BorderFactory.createTitledBorder("")); selectBox.setLayout(new GridLayout(3, 1)); checkBox1=new JCheckBox("Sing"); checkBox2=new JCheckBox("Dance"); checkBox3=new JCheckBox("Draw"); selectBox.add(checkBox1); selectBox.add(checkBox2); selectBox.add(checkBox3); panel.add(jLabel); panel.add(textArea); panel.add(label2); panel.add(selectBox); } private void setPanel4(JPanel panel) { // TODO Auto-generated method stub panel.setPreferredSize(new Dimension(750, 50)); button1=new JButton("submit"); button2=new JButton("reset"); FlowLayout flowLayout = new FlowLayout(); //panel.set panel.setLayout(flowLayout); panel.add(button1); panel.add(button2); button1.addActionListener((e) -> submit()); button2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub jTextField.setText(null); textArea.setText(null); jComboBox.setSelectedIndex(0); checkBox1.setSelected(false); checkBox2.setSelected(false); checkBox3.setSelected(false); buttonGroup.clearSelection(); } }); } }
import java.awt.EventQueue; import javax.swing.JFrame; public class b { public static void main(String[] args) { EventQueue.invokeLater(() ->{ A page=new A(); }); } }
練習2:采用GUI界面設計以下程序:
l 編制一個程序,將身份證號.txt 中的信息讀入到內存中;
l 按姓名字典序輸出人員信息;
l 查詢最大年齡的人員信息;
l 查詢最小年齡人員信息;
l 輸入你的年齡,查詢身份證號.txt中年齡與你最近人的姓名、身份證號、年齡、性別和出生地;
l 查詢人員中是否有你的同鄉。
l 輸入身份證信息,查詢所提供身份證號的人員信息,要求輸入一個身份證數字時,查詢界面就顯示滿足查詢條件的查詢結果,且隨著輸入的數字的增多,查詢匹配的範圍逐漸縮小。
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; //import java.util.Arrays; import java.util.Collections; import java.util.Scanner; import java.util.TimerTask; //import java.awt.*; import javax.swing.*; import java.awt.event.*; public class c extends JFrame { private static ArrayList studentlist; private static ArrayList<Student> list; private JPanel buttonPanel; // private JPanel panel; Scanner scanner = new Scanner(System.in); public c() { studentlist = new ArrayList<>(); // Timer timer=new Timer(); JTextArea jt = new JTextArea(); jt.setBounds(300, 100, 800, 600); buttonPanel = new JPanel(); JButton jButton = new JButton("字典排序"); JButton jButton1 = new JButton("年齡最大和年齡最小"); JLabel lab = new JLabel("猜猜你的老鄉"); JTextField jt1 = new JTextField(); JLabel lab1 = new JLabel("找找同齡人(年齡相近):"); JTextField jt2 = new JTextField(); JLabel lab2 = new JLabel("輸入你的身份證號碼:"); JTextField jt3 = new JTextField(); JButton jButton2 = new JButton("退出"); buttonPanel. setLayout(null); jButton.setBounds(0, 50, 100, 30); jButton1.setBounds(0, 100, 160, 30); lab2.setBounds(0, 200, 100, 30); lab.setBounds(0, 150, 150, 30); jt1.setBounds(150, 150, 100, 30); lab1.setBounds(0, 250, 150, 30); jt2.setBounds(100, 250, 160, 30); jt3.setBounds(100, 200, 160, 30); jButton2.setBounds(0, 300, 60, 30); buttonPanel.add(jButton); buttonPanel.add(jButton1); buttonPanel.add(lab); buttonPanel.add(jt1); buttonPanel.add(lab1); buttonPanel.add(jt2); buttonPanel.add(lab2); buttonPanel.add(jt3); buttonPanel.add(jButton2); add(buttonPanel); buttonPanel.add(jt); try { BufferedReader in = new BufferedReader(new FileReader("身份證號.txt")); String temp = null; while ((temp = in.readLine()) != null) { Scanner linescanner = new Scanner(temp); linescanner.useDelimiter(" "); String name = linescanner.next(); String number = linescanner.next(); String sex = linescanner.next(); String age = linescanner.next(); String province = linescanner.nextLine(); Student student = new Student(); student.setName(name); student.setnumber(number); student.setsex(sex); int a = Integer.parseInt(age); student.setage(a); student.setprovince(province); studentlist.add(student); } } catch (FileNotFoundException e) { System.out.println("學生信息文件找不到"); e.printStackTrace(); } catch (IOException e) { System.out.println("學生信息文件讀取錯誤"); e.printStackTrace(); } jButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jt.setText(null); Collections.sort(studentlist); jt.setText(studentlist.toString()); // jt.append(studentlist.toString()); } }); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int max = 0, min = 100; int j, k1 = 0, k2 = 0; for (int i = 1; i < studentlist.size(); i++) { j = ((Student) studentlist.get(i)).getage(); if (j > max) { max = j; k1 = i; } if (j < min) { min = j; k2 = i; } } jt.setText("年齡最大:" + studentlist.get(k1) + "年齡最小:" + studentlist.get(k2)); } }); jButton2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); System.exit(0); } }); jt1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String find = jt1.getText(); String text=""; String place = find.substring(0, 3); for (int i = 0; i < studentlist.size(); i++) { if (((Student) studentlist.get(i)).getprovince().substring(1, 4).equals(place)) { text+="\n"+studentlist.get(i); jt.setText("老鄉:" + text); } } } }); jt2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String yourage = jt2.getText(); int a = Integer.parseInt(yourage); int near = agenear(a); int value = a - ((Student) studentlist.get(near)).getage(); jt.setText("年齡相近:" + studentlist.get(near)); } }); jt3.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { list = new ArrayList<>(); Collections.sort(studentlist); String key = jt3.getText(); for (int i = 1; i < studentlist.size(); i++) { if (((Student) studentlist.get(i)).getnumber().contains(key)) { list.add((Student) studentlist.get(i)); jt.setText("你可能是:\n" + list); } } } }); } public static int agenear(int age) { int min = 53, value = 0, k = 0; for (int i = 0; i < studentlist.size(); i++) { value = ((Student) studentlist.get(i)).getage() - age; if (value < 0) value = -value; if (value < min) { min = value; k = i; } } return k; } }
public class Student implements Comparable<Student> { private String name; private String number ; private String sex ; private int age; private String province; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getnumber() { return number; } public void setnumber(String number) { this.number = number; } public String getsex() { return sex ; } public void setsex(String sex ) { this.sex =sex ; } public int getage() { return age; } public void setage(int age) { this.age= age; } public String getprovince() { return province; } public void setprovince(String province) { this.province=province ; } public int compareTo(Student o) { return this.name.compareTo(o.getName()); } public String toString() { return name+"\t"+sex+"\t"+age+"\t"+number+"\t"+province+"\n"; } }
import java.awt.*; import javax.swing.*; /** * @version 1.34 2015-06-12 * @author Cay Horstmann */ public class e { public static void main(String[] args) { EventQueue.invokeLater(() -> { JFrame frame = new c(); frame.setTitle("查詢"); frame.setBounds(50, 50, 500, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); } }
練習3:采用GUI界面設計以下程序
l 編寫一個計算器類,可以完成加、減、乘、除的操作
l 利用計算機類,設計一個小學生100以內數的四則運算練習程序,由計算機隨機產生10道加減乘除練習題,學生輸入答案,由程序檢查答案是否正確,每道題正確計10分,錯誤不計分,10道題測試結束後給出測試總分;
l 將程序中測試練習題及學生答題結果輸出到文件,文件名為test.txt。
import java.awt.Button; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Collections; import java.util.Scanner; import javax.swing.*; import java.math.*; public class jisuanqi extends JFrame { private String[] c=new String[10]; private String[] c1=new String[10]; private int[] list=new int[10]; int i=0,i1=0,sum = 0; private PrintWriter out = null; private JTextArea text,text1; private int counter; public jisuanqi() { JPanel Panel = new JPanel(); Panel.setLayout(null); JLabel JLabel1=new JLabel(""); JLabel1.setBounds(500, 800, 400, 30); //JLabel1.setFont(new Font("Courier",Font.PLAIN,35)); JButton Button = new JButton("生成題目"); Button.setBounds(50,150,150,50); // Button.setFont(new Font("Courier",Font.PLAIN,20)); Button.addActionListener(new Action()); JButton Button2 = new JButton("確定答案"); Button2.setBounds(300,150,150,50); // Button2.setFont(new Font("Courier",Font.PLAIN,20)); Button2.addActionListener(new Action1()); JButton Button3 = new JButton("讀出文件"); Button3.setBounds(500,150,150,50); Button3.setFont(new Font("Courier",Font.PLAIN,20)); Button3.addActionListener(new Action2()); text=new JTextArea(30,80);text.setBounds(30, 50, 200, 50); text.setFont(new Font("Courier",Font.PLAIN,35)); text1=new JTextArea(30,80); text1.setBounds(270, 50, 200, 50); text1.setFont(new Font("Courier",Font.PLAIN,35)); Panel.add(text); Panel.add(text1); Panel.add(Button); Panel.add(Button2); Panel.add(Button3); Panel.add(JLabel1); add(Panel); } private class Action implements ActionListener { public void actionPerformed(ActionEvent event) { text1.setText(""); if(i<10) { int a = 1+(int)(Math.random() * 99); int b = 1+(int)(Math.random() * 99); int m= (int) Math.round(Math.random() * 3); switch(m) { case 0: while(a<b){ b = (int) Math.round(Math.random() * 100); a = (int) Math.round(Math.random() * 100); } c[i]=(i+":"+a+"/"+b+"="); list[i]=Math.floorDiv(a, b); text.setText(i+":"+a+"/"+b+"="); i++; break; case 1: c[i]=(i+":"+a+"*"+b+"="); list[i]=Math.multiplyExact(a, b); text.setText(i+":"+a+"*"+b+"="); i++; break; case 2: c[i]=(i+":"+a+"+"+b+"="); list[i]=Math.addExact(a, b); text.setText(i+":"+a+"+"+b+"="); i++; break ; case 3: while(a<=b){ b = (int) Math.round(Math.random() * 100); a = (int) Math.round(Math.random() * 100); } c[i]=(i+":"+a+"-"+b+"="); text.setText(i+":"+a+"-"+b+"="); list[i]=Math.subtractExact(a, b); i++; break ; } } } } private class Action1 implements ActionListener { public void actionPerformed(ActionEvent event) { if(i<10) { text.setText(null); String daan=text1.getText().toString().trim(); int a = Integer.parseInt(daan); if(text1.getText()!="") { if(list[i1]==a) sum+=10; } c1[i1]=daan; i1++; } } } private class Action2 implements ActionListener { public void actionPerformed(ActionEvent event) { try { out = new PrintWriter("text.txt"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } for(int counter=0;counter<10;counter++) { out.println(c[counter]+c1[counter]); } out.println("成績"+sum); out.close(); } } }
import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Toolkit; import javax.swing.JFrame; public class yunsuan { public static void main (String args[]) { Toolkit t=Toolkit.getDefaultToolkit(); Dimension s=t.getScreenSize(); EventQueue.invokeLater(() -> { JFrame frame = new jisuanqi(); frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }); } }
任務3:本學期課程已結束,請匯總《面向對象程序設計課程學習進度條》的數據,統計個人專業能力提升的數據。並從學習內容、學習方法、學習心得幾個方面進行課程學習總結,也希望你對課程的不足提出建議和意見。
Java 學習總結:
一二章:Java特點及其開發環境的配置
第三章:
- 原始數據類型
整型(int),浮點型(double),布爾型(Boolean),字符型(char)
每個變量都有自己的類型並存儲了一個合法的值
用+,-,*,/,!,&& ,||,^等運算符來實現對各種類型的操作。
- 數組
數組能夠順序存儲相同類型的多個數據。
數組的起始索引是0。這個習慣來源於機器語言,計算一個數組元素的地址需要將數組的起始地址加上該元素的索引,第一個元素的地址 就是數組的起始地址。
過程:
1. 聲明數組。數組名是整個數組的引用。
2. 創建數組。數組一經創建,大小就是固定的。
3. 初始化數組。int默認初始值為0,double默認初始值0.0,boolean默認初始值false。
- 字符串
字符串是由一串字符(char)組成的。
在創建並賦值字符串時:
String s1, s2;
s1 = new String("abc");
s2 = "abc";123
- 變量
實例變量:為該類的對象保存了數據類型的值。作用域是整個對象。
靜態變量:由static修飾,該類的所有對象所共享,是類級別的變量。作用域為類的所有對象。
參數變量:由方法的簽名定義,在方法被調用時參數方法會被初始化為調用者提供的值。作用域是整個方法。
局部變量:在方法的主體中定義。作用域是從被定義之後到方法結束。
- 方法
方法封裝了由一系列語句所描述的運算。
構造方法:名稱與類名相同。作用是初始化實例變量,每個構造函數都將創建一個對象並向調用者返回一個該對象的應用。
實例方法:描述了對象的行為,可以訪問和操作靜態變量和實例變量。通過實例才能調用。
靜態方法:由static修飾,是一組在被調用時會被順序執行的語句。可以通過類直接調用,只能訪問操作類中靜態變量,不能訪問實例變量。
- 庫
庫大多數是靜態方法庫,也有部分是數據類型的定義並包含了一些靜態方法。
可以自己定義庫,也可以使用外部庫。
用import導入庫。
- 抽象數據類型
數據類型:一組值和一組對這些值的操作的集合。
數據抽象:定義和使用數據類型的過程。
Java編程的基礎主要是使用class關鍵字構造被稱為引用類型的數據類型。這種編程風格稱為面向對象編程。
抽象數據類型:ADT,一種能夠對使用者隱藏數據表示的數據類型。它將數據和函數的實現相關聯,並將數據的表示方式隱藏起來。
數據類型定義的基礎是一組值的集合,但在API可見的僅是對它們的操作,而非它們的意義。
使用Java的類(class)實現抽象數據類型。
首先要定義表示數據類型的值的實例變量。之後是實現對數據類型的值的操作的構造函數和實例方法。
第四五六章:類,繼承,接口
接口的關鍵字:interface
接口格式:interface 接口名 { }
實現接口的關鍵字是:implements 表示
實現接口的格式:class 類名 implements 接口名 { }
接口的作用:擴展功能、定義約束來規範、程序解耦合性。
重點:
接口本身就是一個特殊的類;
接口不能實例化(不能new,但是可是使用多態去進行實例化);
接口的子類可以是抽象類,也可以是具體類(重寫接口類裏的所有方法);
接口的成員變量(默認是常量):
成員特點:只能是常量,並且是靜態,因為默認情況下接口成員變量的修飾符是:public static final;
構造方法:接口沒有構造方法;
成員方法:只能是抽象方法,其中默認修飾符是:public abstract
註意:
接口不能創建對象;
接口沒有構造方法;
因為接口是提供給類使用,當非抽象類去實現一個接口時,必須把接口中所有方法都實現。
第13章
Java應用程序部署
(第14章)
— Java異常處理編程模型 — Java GUI編程模型 ? Java並發程序設計)
Thread的子類創建線程的關鍵操作 ?
設計Thread的子類,重寫父類的run方法 ?
用Thread類或子類創建線程對象 ?
使用start方法啟動線程
通過Runnable接口實現多線程的關鍵操作:
? 設計一個實現Runnable接口的類,重寫run方法; ?
以該類的對象為參數建立Thread類的對象; ?
調用Thread類對象的start方法啟動線程,將執行 權轉交到run方法。
本學期對java的學習也是蠻辛苦的,現在回頭看看學習java的過程也是很豐富,老師找的助教給我們幫了很大的忙,就是上課過程挺枯燥的,要是上課不單單是聽,而是去實驗室上課老師邊講我們邊做驗證,可能效果好一點,也沒有那麽乏味。老師每周布置得作業也很有必要,雖然有時量有一點點大,但這些都是學習過程中不可讓避免的。所以謝謝老師和助教的辛勤付出
馮誌霞201771010107《面向對象程序設計(java)》第十八周學習總結