1、山东理工职业学院单元教学过程设计首页课程所属院(部):软件工程学院 2019-2020学年 第一学期课程名称Java语言编程基础任课教师单元标题任务3.2学生成绩输入功能的改进(二)上课地点课时4授课班级授课时间第 周第 周第 周第 周第 周第 周星期 星期 星期 星期 星期 星期 第 节第 节第 节第 节第 节第 节月 日月 日月 日月 日月 日月 日教学目标能力目标知识目标1. 文件类的使用、对象的定义域引用、异常的应用1 对象的定义与引用2 FileWriter类3 异常的处理教学任务将输入的学生信息与成绩存入记事本文档教学重、难点重点:文件类的使用难点:对象的定义域引用、异常的应用教学
2、材料或用具教材、教案、课件、课程标准、案例素材及Eclipse开发软件课后任务在Stu类中定义output()方法,其功能是输出学生的学号、姓名、班级、成绩等信息。山东理工职业学院单元教学过程设计步骤及时间教学内容教师活动学生活动5分钟5分钟20分钟40分钟90分钟20分钟【组织教学】1、检查学生出勤,作好学生考勤记录。2、课堂提问,了解学生掌握所学知识情况。3、强调课堂纪律,加强互动,活跃课堂气氛。【课题导入】将任务二中的成绩输入功能进行改进,通过学生类实例化对象的方法来操作学生对象的各个属性,将输入的学生信息与成绩存入记事本文档。系统最多支持一次输入100个学生信息,支持输入、修改、删除、
3、显示学生信息,但是需要用户检查这些数据后,再将其写入txt文档。这里,需要注意的是,显示学生信息只是针对本次输入的学生数据,修改、删除也只是针对本次输入的数据。一旦数据写入txt文档中,将无法进行修改、删除、显示等操作。【新课讲授】3.2.4.1对象的定义与引用对象:是在程序执行过程中创建生成的,所占空间是动态分配的,当对象使用完后,java垃圾回收机制会把空间收回,对象的声明周期:创建-使用-销毁。1对象的声明和创建格式: 类名 对象名; 对象名= new 类名(实参列表);等价于 类名 对象名= new 类名(实参列表);例如:Student stu1=new Student();此时会调
4、用Student类的无参构造方法。2对象的引用引用属性:对象名.属性引用方法:对象名.方法名(参数列表)【例3.2】定义立方体类class Cubedouble length;double width;double height;public double getVol() return length * width * height;public class Exp32public static void main(String args) double v;Cube Cube1 = new Cube();Cube1.length = 20;Cube1.width = 30;Cube1.he
5、ight = 40;v = Cube1.getVol();System.out.println(v1= + v);Cube Cube2 = new Cube();Cube2.length = 50;Cube2.width = 50;Cube2.height = 60;v = Cube2.getVol();System.out.println(v2= + v);运行结果:v1=24000.0v2=150000.0【注意】这里直接用赋值符号对Cube对象的属性进行赋值,是因为其私有属性在Cube类内是可见的,类外则需要使用setter方法进行赋值。3.2.4.2异常1异常处理的必要性没有异常处理机
6、制的语言要捕获到可能发生的错误,就必须使用大量的判断语句,这种做法未必能捕捉到所有错误,但降低了程序运行效率。Java的异常处理机制改进了这点,因此可以增进程序的稳定性及效率。2异常的概念系统运行错误,即程序运行过程中出现的影响语句正常运行顺序的意外或特殊事件。简单说,异常就是正常执行程序过程中出现的不正常情况。(1)编译错误编译错误是由于所编写的程序存在语法问题,未能通过由源代码到目标码(Java语言中由源代码到字节码)的编译过程而产生的,它由语言的编译系统负责检测和报告。(2)运行错误系统运行错误:系统运行错误是指程序在执行过程中发生的错误,它会中断程序的正常执行。逻辑运行错误:没有了编译
7、错误和系统运行错误,还有可能有逻辑运行错误,逻辑运行错误是指程序不能实现程序设计人员的设计意图和设计功能而产生的错误,例如排序时不能正确排序。2. 异常的处理机制Java语言有两种异常处理机制:(1) 捕获异常(catch):积极的处理异常的机制。当运行环境得到一个异常对象时,它将按照方法调用的顺序进行查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法为止。格式:try 可能出现异常的代码块catch(Exception ex) 对异常的处理finally 无论异常是否发生都一定要执行的代码【例3.3】import java.io.*;public class Exp33 publi
8、c static void main(String args) String s=; System.out.print(请输入一个字符串:); try BufferedReader in=new BufferedReader(new InputStreamReader(System.in); s=in.readLine(); catch(IOException e) System.out.println(“捕捉异常”); System.out.println(您输入的字符串是:+s); (2)抛出异常(throws和throw):消极的处理异常的机制。如果一个方法不知道如何处理出现的异常,则可
9、抛出异常,即产生一个异常事件,生成一个异常对象,并把它交给运行系统,由系统寻找相应的代码处理异常。格式:thorws IOException(或其他Exception的子类)【例3.4】import java.io.*;public class Exp34 public static void main(String args) throws IOException String s=; System.out.print(请输入一个字符串:); BufferedReader in=new BufferedReader(new InputStreamReader(System.in); s=in
10、.readLine(); System.out.println(您输入的字符串是:+s); (3)自定义异常Java中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中的异常情况。例如定义一个division()方法,要求其被除数不能为负数,如是负数,需要报告异常。为了解决此类问题,Java中允许用户自定义异常,但自定义的异常需要继承自Exception类或其子类。【例3.5】/类DivideByMinusExceptionclass DivideByMinusException extends Exception public Div
11、ideByMinusException() super();/调用Exception无参的构造方法 public DivideByMinusException(String message) super(message);/调用Exception有参的构造方法 /类Exp35public class Exp35 public static int division(int x, int y) throws DivideByMinusException if (y 0) throw new DivideByMinusException(被除数为负数);int result = x / y;ret
12、urn result;/ 返回结果public static void main(String args) try int result = division(10, -1);System.out.println(result); catch (DivideByMinusException ex) System.out.println(捕获的异常信息为: + ex.getMessage();运行结果:图3-2-2 例3.5运行结果【知识拓展】3.2.6.1异常的种类与继承关系图3-2-2 异常类的继承关系表3-2-2 常见的异常类异常说明RuntimeExceptionjava.lang包中多
13、数异常的基类ArithmeticException算术错误,如除以0IllegalArgumentException方法收到非法参数ArrayIndexOutOfBoundsException数组下标出界NullPointerException试图访问null对象引用SecurityException试图违反安全性IOExceptionI/O异常的根类FileNotFoundException不能找到文件EOFException文件结束【技能训练】一、 任务分析任务概览:public class Studentpublic class SMS menu();/主菜单 add();/添加学生信息
14、 select();/显示本次录入学生信息 modify();/修改学生信息delete();/删除学生信息writeFile ();/ 将确认无误的学生信息写入txt文件 judge();/判断本次是否录入了学生信息main();操作步骤如下:步骤一:判断输入学生的学号是否重复;步骤二:如不重复则将学生信息存储到Student数组s中,如重复,则提示重新输入;步骤三:判断是否继续输入,如果是,继续输入;如果否,判断是否返回主菜单,如是返回,如果否退出应用程序。二、任务实施package com.sdlgzy.sgmcli;import java.io.File;import java.io.
15、FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;public class SMS / 定义学生对象数组,最多输入100名学生信息private static Student s = new Student100; private int n = 0;private Scanner In = new Scanner(System.in);private File file = new File(D:/stu.txt);public static void main(S
16、tring args) SMS sms = new SMS();for (int i = 0; i 100; i+) / 实例化学生数组si = new Student();try sms.menu(); catch (IOException e) e.printStackTrace(); public void menu() throws IOException int choice;/ 定义操作选择System.out.println(*学生成绩管理系统*);System.out.println(* 1.录入学生成绩信息 *);System.out.println(* 2.显示学生成绩信息
17、 *);System.out.println(* 3.修改学生成绩信息 *);System.out.println(* 4.删除学生成绩信息 *);System.out.println(* 5.将学生成绩写入文件 *);System.out.println(* 0.退出管理系统 *);System.out.println(*);System.out.print(请选择(05):);choice = In.nextInt();while (choice 5) System.out.print(输入无效,请重新输入:);choice = In.nextInt();switch (choice) c
18、ase 1:this.add();/添加学生信息,最多一次输入100个学生信息,后续任务定义break;case 2:this.select();/查询此次输入学生信息,后续任务定义break;case 3:this.modify();/修改此次输入学生信息,后续任务定义break;case 4:this.delete();/删除此次输入学生信息,后续任务定义break;case 5:this.writeFile();/ 将确认无误的学生信息写入txt文件,后续任务定义break;case 0:System.out.println(成功退出系统!);System.exit(0);break;
19、public void add() throws IOException String sno; / 定义暂时存放学生学号的变量snoFileWriter fw = new FileWriter(file, true); / 将学生成绩存入到指定路径的文件int continueflag = 1;/ 定义是否循环输入学生成绩信息的标志String cfirmstr;/ 定义是否继续输入学生成绩信息的结果字符串 / 定义是否继续输入学生成绩信息的字符串的首字符,为“Y或N(包括小写)char cfirmchar;String cfirmrestr;/ 定义存放是否返回主菜单时输入的字符串 / 定
20、义存放是否返回主菜单时输入的字符串的首字符,为“Y或N(包括小写)char cfirmrechar; while (continueflag = 1) System.out.println(请输入学生学号:);sno = In.next();/ 判断学号是否重复for (int i = 0; i n; i+) while (si.getSno() = sno) System.out.println(已存在此学号,请重新输入);System.out.print(请输入学号:);sno = In.next();sn.setSno(sno);sno = String.valueOf(sno);Sys
21、tem.out.println(请输入学生姓名:);sn.setName(In.next();System.out.println(请输入学生班级:);sn.setClassname(In.next();System.out.println(请输入学生sql成绩:);sn.setSql(In.nextFloat();System.out.println(请输入学生java成绩:);sn.setJava(In.nextFloat();System.out.println(请输入学生网页设计成绩:);sn.setWebdesign(In.nextFloat();System.out.println
22、(请输入学生体育成绩:);sn.setGym(In.nextFloat();n+;System.out.println();System.out.println(是否继续添加(Y/N);cfirmstr = In.next();cfirmchar = cfirmstr.charAt(0);while (cfirmchar != N & cfirmchar != n & cfirmchar != Y & cfirmchar != y) System.out.println(输入无效,请重新输入:);cfirmstr = In.next();cfirmchar = cfirmstr.charAt(
23、0);if (cfirmchar = N | cfirmchar = n) fw.close();break;System.out.println();System.out.print(是否返回系统主菜单(Y/N);cfirmrestr = In.next();cfirmchar = cfirmrestr.charAt(0);while (cfirmchar != Y & cfirmchar != y & cfirmchar != N & cfirmchar != n) System.out.println(输入无效,请重新输入:);cfirmrestr = In.next();cfirmch
24、ar = cfirmrestr.charAt(0);if (cfirmchar = Y | cfirmchar = y) this.menu();if (cfirmchar = N | cfirmchar = n) System.out.println();System.out.println(你已退出系统!);System.exit(0);三、分组练习按班级人数分成小组,小组内成员合作完成相应的任务。四、巡回指导精确操作步骤,指导学生,及时解决学生在上机过程中遇到的问题。【任务总结】 1、展示评价完成的课堂任务总结。2、本节课知识点提问。【布置作业】在Stu类中定义output()方法,其功能是输出学生的学号、姓名、班级、成绩等信息。组织教学任务导入展示案例效果课件讲解代码实操操作演示完整案例制作方法适当提问对学生提出的问题给于指导巡回指导分享优秀创意根据优秀作品提出新要求配合教师组织教学聆听互动聆听简单记录重要知识点、回答提问,观看并记忆制作过程记录并记忆回答教师提出的疑问记忆代码含义上机实践操作任务、自主探究和小组协作利用课上剩余时间或课下时间完善任务讨论可行性制作方案