实验十八 总复习
1、实验目的与要求
(1) 综合掌握java基本程序结构;
(2) 综合掌握java面向对象程序设计特点;
(3) 综合掌握java GUI 程序设计结构;
(4) 综合掌握java多线程编程模型;
(5) 综合编程练习。
2、实验内容和步骤
任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx。
任务2:综合编程练习
练习1:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;
public class Yonghu
{
public static void main(String[] args)
{
EventQueue.invokeLater(() -> {
JFrame frame = new FrameTest();
frame.setTitle("信息采集");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
class FrameTest extends JFrame
{
private JPanel panel1;
private JTextArea text1,text2;
private JRadioButton JRadioButton1,JRadioButton2;
private ButtonGroup ButtonGroup1;
private JLabel JLabel1;
private JCheckBox checkboxb1,checkboxb2,checkboxb3;
private JComboBox<String> JComboBox1;
private JButton Button1,Button2;
public FrameTest()
{
setSize(700,500);
panel1=new JPanel();
panel1.setLayout(null);
ButtonGroup1=new ButtonGroup();
JRadioButton1=new JRadioButton("Male",false);
JRadioButton1.setBounds(150,330, 80, 50);
JRadioButton2=new JRadioButton("Female",false);
JRadioButton2.setBounds(150,300, 80,50);
ButtonGroup1.add(JRadioButton1);
ButtonGroup1.add(JRadioButton2);
addJLabel("sex:",100,300);
addJLabel("name:",100,50);
addJLabel("address:",100,150);
addJLabel("Qualification:",400,50);
addJLabel("Hobby:",400,150);
text1=new JTextArea(1,1);
text1.setBounds(150,70, 120, 30);
text1.setLineWrap(true);
text2=new JTextArea(5,3);
text2.setBounds(150,160, 130, 100);
text2.setLineWrap(true);
checkboxb1=new JCheckBox("Reading");
checkboxb1.setBounds(450,160,100,30);
checkboxb2=new JCheckBox("Dancing");
checkboxb2.setBounds(450,180,100,30);
checkboxb3=new JCheckBox("Singing");
checkboxb3.setBounds(450,200,100,30);
JComboBox1=new JComboBox<>();
JComboBox1.addItem("Graduate");
JComboBox1.addItem("Sinior");
JComboBox1.addItem("Junior");
JComboBox1.setBounds(500,65, 100, 20);
Button1 = new JButton("提交");Button1.setBounds(200, 400, 100, 35);
Button2 = new JButton("重置");Button2.setBounds(400, 400, 100, 35);
Button1.addActionListener(new Action1());
Button2.addActionListener(new Action2());
panel1.add(checkboxb1);
panel1.add(checkboxb2);
panel1.add(checkboxb3);
panel1.add(Button1);
panel1.add(Button2);
panel1.add(JComboBox1);
panel1.add(text1);
panel1.add(text2);
panel1.add(JRadioButton1);
panel1.add(JRadioButton2);
add(panel1);
}
public void addJLabel(String n,int a,int b)
{
JLabel1 = new JLabel(n);
JLabel1.setBounds(a,b,100,50);
panel1.add(JLabel1);
}
private class Action1 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
System.out.println("name:"+text1.getText()+"
"+"address:"+text2.getText());
System.out.println("Qualification:"+JComboBox1.getSelectedItem());
System.out.println("Hobby:");
if(checkboxb1.isSelected()==true)System.out.print(checkboxb1.getText());
if(checkboxb2.isSelected()==true)System.out.print(checkboxb2.getText());
if(checkboxb3.isSelected()==true)System.out.print(checkboxb3.getText());
System.out.println("
"+"sex:");
if(JRadioButton1.isSelected()==true)System.out.println(JRadioButton1.getText());
if(JRadioButton2.isSelected()==true)System.out.println(JRadioButton2.getText());
System.out.println("
");
}
}
private class Action2 implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
text1.setText(null);
text2.setText(null);
checkboxb1.setSelected(false);
checkboxb2.setSelected(false);
checkboxb3.setSelected(false);
ButtonGroup1.clearSelection();
JComboBox1.setSelectedIndex(0);
}
}
}


重置后:

练习2:
package ShenF;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Main {
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 ShenF;
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("E:\身份证号.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) + "
" + "年龄最小: " + 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 ShenF;
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 + " " + sex + " " + age + " " + ID + " " + birthplace + "
";
}
}
练习3:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Random;
import javax.swing.*;
public class Text extends JFrame {
JPanel p=new JPanel();
JLabel timeLabel=new JLabel();
JLabel[] label1=new JLabel[10];
JLabel[] label2=new JLabel[10];
JLabel[] label3=new JLabel[10];
JLabel[] label4=new JLabel[10];
JLabel[] label5=new JLabel[10];
JTextField[] field=new JTextField[10];
JLabel[] label6=new JLabel[10];
String[] btn_name= {"开始","重置","提交","重考"};
JButton[] btn=new JButton[4];
Panel2 panel2=null;
int ExamCount=0;
JLabel examLabel=new JLabel();
double[] result=new double[10];
public static void main(String[] args) {
new Text("测试").setVisible(true);
}
public Text(String title) {
setTitle(title);
setLocationRelativeTo(null);
setDefaultCloseOperation(3);
setSize(400,500);
setResizable(false);
setForeground(Color.blue);
add(new Panel1(),BorderLayout.NORTH);
panel2=new Panel2();
add(new JScrollPane(panel2));
add(new Panel3(),BorderLayout.WEST);
}
int rightResultCount=0;
public void startExam() {
int num1=0;
int num2=0;
String[] quots= {"+","-","*","/"};
String quot=null;
Random ran=null;
ran=new Random(System.currentTimeMillis());
Box box=Box.createVerticalBox();
for(int i=0;i<10;i++) {
num1=ran.nextInt(100)+1;
num2=ran.nextInt(100)+1;
int n=ran.nextInt(4);
quot=new String(quots[n]);
switch(quot) {
case "+":
result[i]=num1+num2;
break;
case "-":
result[i]=num1-num2;
break;
case "*":
result[i]=num1*num2;
break;
case "/":
result[i]=num1/(num2*1.0);
result[i]=Math.round(result[i]*100)/100.0;
break;
}
label1[i]=new JLabel("第"+(i+1)+"题:");
label2[i]=new JLabel(num1+"");
label3[i]=new JLabel(quot);
label4[i]=new JLabel(num2+"");
label5[i]=new JLabel("=");
field[i]=new JTextField();
field[i].setPreferredSize(new Dimension(60,20));
field[i].addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent ee) {
if((ee.getKeyChar()>'9' || ee.getKeyChar()<'0') && ee.getKeyChar()!=45 && ee.getKeyChar()!='.') {
ee.consume();
}
}
});
label6[i]=new JLabel("");
Box hbox=Box.createHorizontalBox();
hbox.add(label1[i]);
hbox.add(Box.createHorizontalStrut(20));
hbox.add(label2[i]);
hbox.add(Box.createHorizontalStrut(5));
hbox.add(label3[i]);
hbox.add(Box.createHorizontalStrut(5));
hbox.add(label4[i]);
hbox.add(Box.createHorizontalStrut(5));
hbox.add(label5[i]);
hbox.add(Box.createHorizontalStrut(5));
hbox.add(field[i]);
hbox.add(Box.createHorizontalStrut(20));
hbox.add(label6[i]);
box.add(hbox);
box.add(Box.createVerticalStrut(20));
}
panel2.add(box);
panel2.validate();
}
int submitCount=0;
class Listener implements ActionListener{
public void actionPerformed(ActionEvent e) {
JButton button=(JButton)e.getSource();
if(button==btn[0]) {
startExam();
ExamCount++;
btn[0].setEnabled(false);
for(int i=1;i<4;i++) {
btn[i].setEnabled(true);
}
}
if(button==btn[1]) {
for(int i=0;i<10;i++) {
field[i].setText("");
}
}
if(button==btn[2] ) {
rightResultCount=0;
btn[2].setEnabled(false);
double yourResult=0;
for(int i=0;i<10;i++) {
try {
yourResult=Double.parseDouble(field[i].getText().trim());
}catch(Exception ee) {}
if(yourResult==result[i]) {
rightResultCount++;
label6[i].setText("V");
label6[i].setForeground(Color.BLUE);
}else {
label6[i].setText("X");
label6[i].setForeground(Color.RED);
}
}
examLabel.setText("你答对了 "+rightResultCount+
" 道题,答错了"+(10-rightResultCount)+" 道题!"+
"考试得分是: "+rightResultCount*10+" 分!");
}
if(button==btn[3]) {
btn[2].setEnabled(true);
panel2.removeAll();
startExam();
ExamCount++;
btn[3].setEnabled(false);
for(int i=0;i<10;i++) {
field[i].setText("");
label6[i].setText("");
}
panel2.repaint();
}
if(btn[2].isEnabled()==false && btn[3].isEnabled()==false) {
btn[1].setEnabled(false);
}
}
}
class Panel1 extends JPanel{
public Panel1() {
setPreferredSize(new Dimension(350,120));
setLayout(new GridLayout(3,1,10,10));
JTextArea area=new JTextArea("点击“开始”开始答题,答案中有小数的,保留2位!");
area.setLineWrap(true);
area.setEditable(false);
add(area);
add(examLabel);
p.add(timeLabel);
add(p);
}
}
class Panel2 extends JPanel{
public Panel2() {
setPreferredSize(new Dimension(400,600));
}
}
class Panel3 extends JPanel{
public Panel3() {
setPreferredSize(new Dimension(50,100));
setBackground(Color.LIGHT_GRAY);
for(int i=0;i<4;i++) {
btn[i]=new JButton(btn_name[i]);
btn[i].addActionListener(new Listener());
add(btn[i]);
if(i>0) {
btn[i].setEnabled(false);
}
}
}
}
}

实验总结:
一个学期的java学习已经结束,我发现相较于很多同学来说,我的能力还是不够,我还需比其他同学更加努力。而且我深刻的感到,很多学习是需要耐心和实践才能认识到自己的不足,才能不断完善的。在以后的学习里,我会继续深入学习,不断完善自己的知识面,学会活学活用。
还有对我帮助很多的老师和学长表示感谢。
意见和建议:
因为专业课较多,所以如果实验作业在周四下午发布,周天下午五点提交,在这之间时间比较紧张。
其次,我认为老师课堂教学+助教线上演示+网上教学+章末答疑这种教学方式很新颖也很有用,尤其是助教对我的帮助很大,因为我们在学习中遇到的问题,学长可能也经历过,所以能更好的解答,因为是同龄人,所以交流起来也更自然。还有每周提交完作业后,周一课上的答疑对我帮助也很大。觉得老师可以在以后的学妹学弟们身上继续使用这种教学方式,个人觉得很好。