实验十八 总复习
实验时间 2018-12-30
1、实验理论知识
(1)第一个关键词:public称为访问修饰符,用于控制程序的其他部分对代码的访问级别。
第二个关键词:class表明java程序中的全部内容都包含在类中。
第三个关键词:main方法必须声明为public。
boolean(布尔)类型:用于判断逻辑条件;有两个值false和true。
return语句用于函数的终止执行或退出类的方法,并把控制权返回该方法的调用者。
break语句的三种作用:在switch语句中终止一个语句序列;使用break语句直接强行退出循环;使用break语句实现goto的功能。
(2)java面向对象程序设计:抽象;继承;封装;多态性。
继承:指子类拥有父类数据结构的方法和机制,只能是单继承。
封装性:保证程序和数据不受外部干扰且不被误用,目的在于保护信息;优点有:保护类中的信息;隐藏细节信息;提高复用率。
多态性:一个接口,多个方法;允许一个接口被多个同类使用。
对象的特点:对象具有属性和行为;对象具有变化的变化的状态;对象具有唯一性;对象都是某个类别的实例。
面向对象程序设计优点:可重用性(提高开发效率);可扩展性(便于软件修改);可管理性(将数据与功能结合)。
(3)Frame(框架):用于描述顶层窗口。
Swing(用户界面开发工具包):Swing对平台的依赖很小;swing类位于javax.swing包中;所有的swing组件都必须由事件分派线程进行配置。
JFrame:扩展于Frame类,是不绘制在swing组件上的,它的修饰部件 ( 按钮 、标题栏、图标等)由用户的窗口系统绘制。
(4)java多线程的实现方式:继承Thread类,重写run函数;实现Runnable接口,重写run函数;实现Callable接口,重写call函数。
2、实验内容和步骤
任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx。
任务2:综合编程练习
练习1:设计一个用户信息采集程序,要求如下:
(1) 用户信息输入界面如下图所示:
(1)用户点击提交按钮时,用户输入信息显示控制台界面;
(2)用户点击重置按钮后,清空用户已输入信息;
(3)点击窗口关闭,程序退出。
package Project1;
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 reading;
private JCheckBox traveling;
private JCheckBox listening;
public DemoJFrame() {
// 设置窗口大小
this.setSize(600, 400);
// 设置可见性
this.setVisible(true);
// 设置标题
this.setTitle("编程练习一");
// 设置关闭操作
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) {
// TODO 自动生成的方法存根
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(40, 20);
JLabel study = new JLabel("study:");
comboBox = new JComboBox();
comboBox.addItem("junior");
comboBox.addItem("senior");
comboBox.addItem("bachelor");
jPanel.add(name);
jPanel.add(fieldname);
jPanel.add(study);
jPanel.add(comboBox);
}
/*
* 设置面板二
*/
private void setJPanel2(JPanel jPanel) {
// TODO 自动生成的方法存根
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(50, 50));
JLabel study = new JLabel("hobby:");
JPanel selectBox = new JPanel();
selectBox.setBorder(BorderFactory.createTitledBorder(""));
selectBox.setLayout(new GridLayout(3, 1));
reading = new JCheckBox("reading");
traveling = new JCheckBox("traveling");
listening = new JCheckBox("listening");
selectBox.add(reading);
selectBox.add(traveling);
selectBox.add(listening);
jPanel.add(name);
jPanel.add(fieldadress);
jPanel.add(study);
jPanel.add(selectBox);
}
/*
* 设置面板三
*/
private void setJPanel3(JPanel jPanel) {
// TODO 自动生成的方法存根
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() {
// TODO 自动生成的方法存根
// 拿到数据
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 (reading.isSelected()) {
hobbystring+="reading ";
}
if (traveling.isSelected()) {
hobbystring+="traveling ";
}
if (listening.isSelected()) {
hobbystring+="listening ";
}
System.out.println(address);
if (nan.isSelected()) {
System.out.println("男");
}
if (nv.isSelected()) {
System.out.println("女");
}
System.out.println(hobbystring);
}
/*
* 重置
*/
private void Reset() {
// TODO 自动生成的方法存根
fieldadress.setText(null);//只删除旧文本
fieldname.setText(null);
comboBox.setSelectedIndex(0);
reading.setSelected(false);//设置reading按钮状态为faulse
traveling.setSelected(false);
listening.setSelected(false);
bg.clearSelection();//清除选中内容
}
}
package Project1;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
DemoJFrame page = new DemoJFrame();
});
}
}
package Project1;
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);
}
}
练习2:采用GUI界面设计以下程序:
编制一个程序,将身份证号.txt 中的信息读入到内存中;
按姓名字典序输出人员信息;
查询最大年龄的人员信息;
查询最小年龄人员信息;
输入你的年龄,查询身份证号.txt中年龄与你最近人的姓名、身份证号、年龄、性别和出生地;
查询人员中是否有你的同乡。
输入身份证信息,查询所提供身份证号的人员信息,要求输入一个身份证数字时,查询界面就显示满足查询条件的查询结果,且随着输入的数字的增多,查询匹配的范围逐渐缩小。
package 身份查询;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Out {
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 身份查询;
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+"\t"+sex+"\t"+age+"\t"+ID+"\t"+birthplace+"\n";
}
}
package 身份查询;
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("F:\\身份证号.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)+"\n"+"年龄最小: "+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;
}
}
练习3:采用GUI界面设计以下程序
编写一个计算器类,可以完成加、减、乘、除的操作
利用计算机类,设计一个小学生100以内数的四则运算练习程序,由计算机随机产生10道加减乘除练习题,学生输入答案,由程序检查答案是否正确,每道题正确计10分,错误不计分,10道题测试结束后给出测试总分;
将程序中测试练习题及学生答题结果输出到文件,文件名为test.txt。
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class Test {
public static void main (String args[])
{
Toolkit t=Toolkit.getDefaultToolkit();
Dimension s=t.getScreenSize();
EventQueue.invokeLater(() -> {
JFrame frame = new Demo();
frame.setBounds(0, 0,(int)s.getWidth()/2,(int)s.getHeight()/2);
frame.setTitle("计算");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
});
}
}
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 jisuan 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 Demo() {
JPanel Panel = new JPanel();//创建具有双缓冲和流布局的新 JPanel。
Panel.setLayout(null);
JLabel JLabel1=new JLabel("");//创建具有制定文本的标签1
JLabel1.setBounds(500, 800, 400, 30);//给定标签1的大小(x,y,height,width)
JLabel1.setFont(new Font("Courier",Font.PLAIN,35));//根据指定名称、样式和磅值大小,创建一个 Font。
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);//构造30行,80列的new TextArea
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) {
// 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();
}
}
}
任务3:本学期课程已结束,请汇总《面向对象程序设计课程学习进度条》的数据,统计个人专业能力提升的数据。并从学习内容、学习方法、学习心得几个方面进行课程学习总结,也希望你对课程的不足提出建议和意见。
实验总结:这学期学习java的基本概念,程序设计的特点
通过本学期的java课程学习,从刚开始到现在慢慢的学习、了解、熟悉java,在这个学习过程当中幸好有老师和助教的耐心讲解,在我们不懂得时候老师与助教相互配合,不仅在课堂上详细讲解,还在课下我们不懂的地方助教会每周固定时间答疑,在平时如果有问题老师和助教会热心解答回复我们的疑惑之处。