东文财201771010106《面向对象程序设计(java)》.18

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)点击窗口关闭,程序退出。

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

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

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

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一无所知到现在可以自己编写一些简单的程序,我还有一些进步的,尽管进步不是很明显,但是我也在努力,相信我会在后来的生活中会有更多的进步,感谢老师一学期来对恶我们的教导,也感谢同学们,希望大家在寒假里过的开心,过个快乐的寒假。

以上是 东文财201771010106《面向对象程序设计(java)》.18 的全部内容, 来源链接: utcz.com/z/391564.html

回到顶部