1. 程式人生 > >張季躍 201771010139《面向物件程式設計(java)》第十八週學習總結

張季躍 201771010139《面向物件程式設計(java)》第十八週學習總結

張季躍 201771010139《面向物件程式設計(java)》第十八周學習總結

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)點選視窗關閉,程式退出。

程式程式碼:

 

package 測試程式5;

import java.awt.EventQueue;

import javax.swing.JFrame;

public class Mian {
    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            demo page = new
demo(); }); } }

 

package 測試程式5;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.Window;

public class WinCenter {
    public static void center(Window win){
        Toolkit tkit = Toolkit.getDefaultToolkit();
        Dimension sSize = tkit.getScreenSize();
        Dimension wSize 
= win.getSize(); if(wSize.height > sSize.height){ wSize.height = sSize.height; } if(wSize.width > sSize.width) { wSize.width = sSize.width; } win.setLocation((sSize.width - wSize.width)/ 2, (sSize.height - wSize.height)/ 2); } }
package 測試程式5;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
public class demo extends JFrame {
    public demo() {
        JPanel panel1 = new JPanel();
        panel1.setPreferredSize(new Dimension(700, 45));
        panel1.setLayout(new GridLayout(1, 4));
        JLabel label1 = new JLabel("Name:");
        JTextField j1 = new JTextField("");
        JLabel label2 = new JLabel("Qualification:");
        JComboBox<Object> j2 = new JComboBox<>();
        j2.addItem("Graduate");
        j2.addItem("Not Graduate");
        panel1.add(label1);
        panel1.add(j1);
        panel1.add(label2);
        panel1.add(j2);

        JPanel panel2 = new JPanel();
        panel2.setPreferredSize(new Dimension(700, 50));
        panel2.setLayout(new GridLayout(1, 4));
        JLabel label3 = new JLabel("Address:");
        JTextArea j3 = new JTextArea();
        JLabel label4 = new JLabel("Hobby:");
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(3, 1));
        p.setBorder(BorderFactory.createLineBorder(null));
        JCheckBox c1 = new JCheckBox("Reading");
        JCheckBox c2 = new JCheckBox("Singing");
        JCheckBox c3 = new JCheckBox("Dancing");
        p.add(c1);
        p.add(c2);
        p.add(c3);
        panel2.add(label3);
        panel2.add(j3);
        panel2.add(label4);
        panel2.add(p);

        JPanel panel3 = new JPanel();
        panel3.setPreferredSize(new Dimension(700, 150));
        FlowLayout flowLayout1 = new FlowLayout(FlowLayout.LEFT, 20, 40);
        panel3.setLayout(flowLayout1);
        JLabel label5 = new JLabel("Sex:");
        JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(2,1));
        p1.setBorder(BorderFactory.createLineBorder(null));
        ButtonGroup bu = new ButtonGroup();
        JRadioButton jr1 = new JRadioButton("Male");
        JRadioButton jr2 = new JRadioButton("Female");
        bu.add(jr1);
        bu.add(jr2);
        p1.add(jr1);
        p1.add(jr2);
        panel3.add(label5);
        panel3.add(p1);
        add(panel1);
        add(panel2);
        add(panel3);

        JPanel panel4 = new JPanel();
        panel4.setPreferredSize(new Dimension(700, 150));
        JButton b1 = new JButton("Validate");
        panel4.add(b1);
        JButton b2 = new JButton("Reset");
        panel4.add(b2);
        add(panel4);

        FlowLayout flowLayout = new FlowLayout();
        this.setLayout(flowLayout);
        this.setTitle("Students Detail");
        this.setBounds(200, 200, 800, 400);
        this.setVisible(true);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        b1.addActionListener(new ActionListener() {

        
            public void actionPerformed(ActionEvent e) {
                // TODO 自動生成的方法存根
                String xueli = j2.getSelectedItem().toString();
                System.out.println("Name:" + j1.getText());
                System.out.println("Qualification:" + xueli);
                String hobbystring = "Hobby:";
                if (c1.isSelected()) {
                    hobbystring += "Reading";
                }
                if (c2.isSelected()) {
                    hobbystring += "Singing";
                }
                if (c3.isSelected()) {
                    hobbystring += "Dancing";
                }
                System.out.println("Address:" + j3.getText());
                if (jr1.isSelected()) {
                    System.out.println("Sex:Male");
                }
                if (jr2.isSelected()) {
                    System.out.println("Sex:Female");
                }
                System.out.println(hobbystring);
            }
        });
        b2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                // TODO 自動生成的方法存根
                j1.setText(null);
                j3.setText(null);
                j2.setSelectedIndex(0);
                c1.setSelected(false);
                c2.setSelected(false);
                c3.setSelected(false);
                bu.clearSelection();
            }
        });
    }

    public static void main(String args[]) {
        new demo();
    }

}

 

 

執行結果:

 

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

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

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

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

查詢最小年齡人員資訊;

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

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

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

 

程式程式碼:

 

package IDcard;

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("C:\\Users\\張季躍\\Desktop\\第十週實驗報告\\身份證號.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 IDcard;

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";

}



}
package IDcard;

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);
             });        
        }
 
}

執行結果:

 

 

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

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

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

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

 

程式程式碼:

package test;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class New {

     public static void main (String args[])
        {
             Toolkit t=Toolkit.getDefaultToolkit();
            Dimension s=t.getScreenSize(); 
            EventQueue.invokeLater(() -> {
                JFrame frame = new Demo();
                frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2);
                frame.setTitle("第四組");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });        
        }
 
}
package test;

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 Demo 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 Demo()  {
        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("0");
        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();

            }

    }   
}

 

執行結果:

 

任務3:本學期課程已結束,請彙總《面向物件程式設計課程學習進度條》的資料,統計個人專業能力提升的資料。並從學習內容、學習方法、學習心得幾個方面進行課程學習總結,也希望你對課程的不足提出建議和意見。

 實驗總結:

    這一學期裡我初次接觸了Java這門特殊的程式語言,在我最初的想法裡面,Java和c語言並沒有太大的區別,就算有也只是在程式設計語法上面有不一樣的地方。但在老師的講解後我初步明白了這門語言與其它語言的不同之處和難學之處。不過雖然難,但在老師的教導和學長的幫助下我還是學到了許多知識的。說實話,剛開學發書的時候我還是有點被嚇到了,這本Java教材可以說是我從小到大見到的最厚的教材了,對於能不能在一學期之內把這本書學完我是抱懷疑態度的。沒想到一學期下來在老師和學長的幫助下雖然沒有真正學完,但裡面的東西也學了不少。在這個學習的過程中,老師和學長的幫助起到了很大的作用,不管是老師那特殊的教學方式還是學長每週晚上在QQ上的指導都很有用。

    經過這一學期對Java的學習,我算是對Java這門語言有了一個初步的瞭解與認識,雖說不能像那些大神一樣隨手敲出一大堆程式碼搞出一個很NB的程式,但再怎麼說也寫過一些小程式了,雖然在這個過程中別人的幫助不可或缺,但自己寫程式的經歷到底是給了我不小的鍛鍊,相信在這一學期的學習之後,我不僅能學到現有的知識,在接下來的幾個學期中這份經歷也會帶給我不小的幫助。