实验十八 总复习
实验时间 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+=" "+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("你可能是: " + 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+" "+sex+" "+age+" "+number+" "+province+" "; } }
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的过程也是很丰富,老师找的助教给我们帮了很大的忙,就是上课过程挺枯燥的,要是上课不单单是听,而是去实验室上课老师边讲我们边做验证,可能效果好一点,也没有那么乏味。老师每周布置得作业也很有必要,虽然有时量有一点点大,但这些都是学习过程中不可让避免的。所以谢谢老师和助教的辛勤付出