刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结
Posted lzm7343
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结相关的知识,希望对你有一定的参考价值。
实验十八 总复习
实验时间 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+" "+sex+" "+age+" "+ID+" "+birthplace+" "; } }
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)+" "+"年龄最小: "+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,在这个学习过程当中幸好有老师和助教的耐心讲解,在我们不懂得时候老师与助教相互配合,不仅在课堂上详细讲解,还在课下我们不懂的地方助教会每周固定时间答疑,在平时如果有问题老师和助教会热心解答回复我们的疑惑之处。
以上是关于刘志梅 201771010115 《面向对象程序设计(java)》 第十八周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
刘志梅201771010115.《面向对象程序设计(java)》第十四周学习总结
刘志梅201771010115.《面向对象程序设计(java)》第六周学习总结
刘志梅201771010115.《面向对象程序设计(java)》第十五周学习总结
刘志梅 201771010115 《面向对象程序设计(java)》 第七周学习总结