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.EventQueue;
import javax.swing.JFrame;
public class Mian {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
DemoJFrame page = new DemoJFrame();
});
}
}
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);//将组件移到新的位置
}
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.Panel;
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.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
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.JTextField;
public class DemoJFrame extends JFrame {
private JPanel jPanel1;
private JPanel jPanel2;
private JPanel jPanel3;
private JPanel jPanel4;
private JTextField fieldname;
private JComboBox comboBox;
private JTextField fieldadress;
private ButtonGroup bg;
private JRadioButton nan;
private JRadioButton nv;
private JCheckBox sing;
private JCheckBox dance;
private JCheckBox draw;
public DemoJFrame() {
// 设置窗口大小
this.setSize(800, 400);
// 设置可见性
this.setVisible(true);
// 设置标题
this.setTitle("Student Detail");
// 设置关闭操作
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// 设置窗口居中
WinCenter.center(this);
// 创建四个面板对象
jPanel1 = new JPanel();
setJPanel1(jPanel1);
jPanel2 = new JPanel();
setJPanel2(jPanel2);
jPanel3 = new JPanel();
setJPanel3(jPanel3);
jPanel4 = new JPanel();
setJPanel4(jPanel4);
// 设置容器为流式布局
FlowLayout flowLayout = new FlowLayout();
this.setLayout(flowLayout);
// 将四个面板添加到容器中
this.add(jPanel1);
this.add(jPanel2);
this.add(jPanel3);
this.add(jPanel4);
}
/*
* 设置面一
*/
private void setJPanel1(JPanel jPanel) {
jPanel.setPreferredSize(new Dimension(700, 45));//设置此组件的首选大小
// 给面板的布局设置为网格布局 一行4列
jPanel.setLayout(new GridLayout(1, 4));
JLabel name = new JLabel("Name:");
name.setSize(100, 50);
fieldname = new JTextField("");
fieldname.setSize(80, 20);
JLabel study = new JLabel("Qualification:");
comboBox = new JComboBox();
comboBox.addItem("Graduate");
comboBox.addItem("senior");
comboBox.addItem("Undergraduate");
jPanel.add(name);
jPanel.add(fieldname);
jPanel.add(study);
jPanel.add(comboBox);
}
/*
* 设置面板二
*/
private void setJPanel2(JPanel jPanel) {
jPanel.setPreferredSize(new Dimension(700, 50));
// 给面板的布局设置为网格布局 一行4列
jPanel.setLayout(new GridLayout(1, 4));
JLabel name = new JLabel("Address:");
fieldadress = new JTextField();
fieldadress.setPreferredSize(new Dimension(150, 50));
JLabel study = new JLabel("Hobby:");
JPanel selectBox = new JPanel();
selectBox.setBorder(BorderFactory.createTitledBorder(""));
selectBox.setLayout(new GridLayout(3, 1));
sing = new JCheckBox("Singing");
dance = new JCheckBox("Dancing");
draw = new JCheckBox("Reading");
selectBox.add(sing);
selectBox.add(dance);
selectBox.add(draw);
jPanel.add(name);
jPanel.add(fieldadress);
jPanel.add(study);
jPanel.add(selectBox);
}
/*
* 设置面板三
*/
private void setJPanel3(JPanel jPanel) {
jPanel.setPreferredSize(new Dimension(700, 150));
FlowLayout flowLayout = new FlowLayout(FlowLayout.LEFT);
jPanel.setLayout(flowLayout);
JLabel sex = new JLabel("Sex:");
JPanel selectBox = new JPanel();
selectBox.setBorder(BorderFactory.createTitledBorder(""));
selectBox.setLayout(new GridLayout(2, 1));
bg = new ButtonGroup();
nan = new JRadioButton("Male");
nv = new JRadioButton("Female");
bg.add(nan);
bg.add(nv);
selectBox.add(nan);
selectBox.add(nv);
jPanel.add(sex);
jPanel.add(selectBox);
}
/*
* 设置面板四
*/
private void setJPanel4(JPanel jPanel) {
// TODO 自动生成的方法存根
jPanel.setPreferredSize(new Dimension(700, 150));
FlowLayout flowLayout = new FlowLayout(FlowLayout.CENTER, 50, 10);
jPanel.setLayout(flowLayout);
jPanel.setLayout(flowLayout);
JButton sublite = new JButton("Validate");
JButton reset = new JButton("Reset");
sublite.addActionListener((e) -> valiData());
reset.addActionListener((e) -> Reset());
jPanel.add(sublite);
jPanel.add(reset);
}
/*
* 提交数据
*/
private void valiData() {
// 拿到数据
String name = fieldname.getText().toString().trim();
String xueli = comboBox.getSelectedItem().toString().trim();
String address = fieldadress.getText().toString().trim();
System.out.println(name);
System.out.println(xueli);
String hobbystring="";
if (sing.isSelected()) {
hobbystring+="Singing ";
}
if (dance.isSelected()) {
hobbystring+="Dancing ";
}
if (draw.isSelected()) {
hobbystring+="Reading ";
}
System.out.println(address);
if (nan.isSelected()) {
System.out.println("Male");
}
if (nv.isSelected()) {
System.out.println("Female");
}
System.out.println(hobbystring);
}
/*
* 重置
*/
private void Reset() {
fieldadress.setText(null);
fieldname.setText(null);
comboBox.setSelectedIndex(0);
sing.setSelected(false);
dance.setSelected(false);
draw.setSelected(false);
bg.clearSelection();
}
}
结果:
练习2:采用GUI界面设计以下程序:
编制一个程序,将身份证号.txt 中的信息读入到内存中;
按姓名字典序输出人员信息;
查询最大年龄的人员信息;
查询最小年龄人员信息;
输入你的年龄,查询身份证号.txt中年龄与你最近人的姓名、身份证号、年龄、性别和出生地;
查询人员中是否有你的同乡。
输入身份证信息,查询所提供身份证号的人员信息,要求输入一个身份证数字时,查询界面就显示满足查询条件的查询结果,且随着输入的数字的增多,查询匹配的范围逐渐缩小。
package ID;
import java.awt.*;
import javax.swing.*;
public class ButtonTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new Test();
frame.setTitle("身份证");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
package ID;
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.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Collections;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame {
private static ArrayList<Citizen> citizenlist;
private static ArrayList<Citizen> list;
private JPanel panel;
private JPanel buttonPanel;
private static final int DEFAULT_WITH = 600;
private static final int DEFAULT_HEIGHT = 300;
public Test(){
citizenlist = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
File file = new File("E:/java/身份证号.txt");
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 birthplace = linescanner.nextLine();
Citizen citizen = new Citizen();
citizen.setName(name);
citizen.setId(id);
citizen.setSex(sex);
int ag = Integer.parseInt(age);
citizen.setage(ag);
citizen.setBirthplace(birthplace);
citizenlist.add(citizen);
}
} catch (FileNotFoundException e) {
System.out.println("信息文件找不到");
e.printStackTrace();
} catch (IOException e) {
System.out.println("信息文件读取错误");
e.printStackTrace();
}
panel = new JPanel();
panel.setLayout(new BorderLayout());
JTextArea jt = new JTextArea();
panel.add(jt);
add(panel, BorderLayout.NORTH);
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(1, 7));
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("退出");
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Collections.sort(citizenlist);
jt.setText(citizenlist.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 < citizenlist.size(); i++) {
j = citizenlist.get(i).getage();
if (j > max) {
max = j;
k1 = i;
}
if (j < min) {
min = j;
k2 = i;
}
}
jt.setText("年龄最大:" + citizenlist.get(k1) + "年龄最小:" + citizenlist.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 < citizenlist.size(); i++) {
if (citizenlist.get(i).getBirthplace().substring(1, 4).equals(place)) {
text+="\n"+citizenlist.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 - citizenlist.get(near).getage();
jt.setText("年龄相近:" + citizenlist.get(near));
}
});
jt3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
list = new ArrayList<>();
Collections.sort(citizenlist);
String key = jt3.getText();
for (int i = 1; i < citizenlist.size(); i++) {
if (citizenlist.get(i).getId().contains(key)) {
list.add(citizenlist.get(i));
jt.setText("emmm!你可能是:\n" + list);
}
}
}
});
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, BorderLayout.SOUTH);
setSize(DEFAULT_WITH, DEFAULT_HEIGHT);
}
public static int agenear(int age) {
int min = 53, value = 0, k = 0;
for (int i = 0; i < citizenlist.size(); i++) {
value = citizenlist.get(i).getage() - age;
if (value < 0)
value = -value;
if (value < min) {
min = value;
k = i;
}
}
return k;
}
}
package ID;
public class Citizen implements Comparable<Citizen> {
private String name;
private String id;
private String sex;
private int age;
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 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 getBirthplace() {
return birthplace;
}
public void setBirthplace(String birthplace) {
this.birthplace = birthplace;
}
public int compareTo(Citizen other) {
return this.name.compareTo(other.getName());
}
public String toString() {
return name + "\t" + sex + "\t" + age + "\t" + id + "\t" + birthplace + "\n";
}
}
结果:
按字典序输出:
查找最大和最小年龄:
查找同乡:
找年龄相近的人:
练习3:采用GUI界面设计以下程序
编写一个计算器类,可以完成加、减、乘、除的操作
利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;
将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt。
package counter;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Count {
public static void main(String args[]) {
Toolkit t = Toolkit.getDefaultToolkit();
Dimension s = t.getScreenSize();
EventQueue.invokeLater(() -> {
JFrame frame = new Calculator();
frame.setBounds(0, 0, (int) s.getWidth() / 2, (int) s.getHeight() / 2);
frame.setTitle("计算器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
package counter;
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 Calculator 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,k=0, sum = 0;
private PrintWriter out = null;
private JTextArea text, text1;
private int counter;
public Calculator() {
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) {
e.printStackTrace();
}
for (int counter = 0; counter < 10; counter++) {
out.println(c[counter] + c1[counter]);
}
out.println("成绩" + sum);
out.close();
}
}
}
结果:
任务3:本学期课程已结束,请汇总《面向对象程序设计课程学习进度条》的数据,统计个人专业能力提升的数据。并从学习内容、学习方法、学习心得几个方面进行课程学习总结,也希望你对课程的不足提出建议和意见。
学习内容:
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章)
学习方法:
老师讲授知识、自主学习
(1)理论课:课前自主学习,老师总结知识,解除疑惑
(2)实验课:通过阅读并运行示例程序学习。和理论知识结合起来作兴应当更改。课后完成老师不知道实验作业
(3)通过老师提供分享的资料自主学习,遇到的问题找老师或助教学长解决。
学习心得:
通过本学期的学习,掌握了java的一些基本知识,对java有了一定的深入了解,并可以通过java编程来解决一些小问题,在实际问题的解决当中依然有问题。和C语言相比较还是挺喜欢java编程的。在今后的学习中还会继续努力学习java,提升运用java编程去解决实际生活中的问题的能力。在今后的学习中会尝试着去学习其他一些与java有关的课程。
感谢老师和助教学长一学期的悉心教导,帮助我完成了java学习的任务。在这一学期的学习中我也收获了很多。
建议和意见:
每周的作业量还是有些大,每次基本上勉强才能把作业按规定时间交上去。
来源:oschina
链接:https://my.oschina.net/u/4415618/blog/4154174