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


    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+="
    "+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!你可能是:
    " + 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 + "	" + sex + "	" + age + "	" + id + "	" + birthplace + "
    ";
        }
    }

    实验结果:

    按字典序输出:

    查找最大和最小年龄:

     

    查找同乡:

     

    找年龄相近的人:

     

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

  • 相关阅读:
    一个好用的,个人记事本应用,软件joplin
    aws EKS EFS 上安装mysql Operation notpermitted
    多变量的线性回归
    批量梯度下降BGD、随机梯度下降SGD和小批量梯度下降MBGD对比
    单变量线性回归
    数据库限制内存使用方法
    C# 调用 Excel 宏的方法
    Markdown 使用方法总结
    VBA注意事项
    将CSV文件中的数据导入到SQL Server 数据库中
  • 原文地址:https://www.cnblogs.com/D980321/p/10199825.html
Copyright © 2020-2023  润新知