• 20165230 《Java程序设计》实验一(Java开发环境的熟悉)实验报告


    20165230 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    一、实验报告封面

    课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩

    指导教师:娄嘉鹏 实验日期:2018年4月2日
    实验时间:13:45 - 3:25

    实验序号:实验一 实验名称:Java开发环境的熟悉

    实验题目:实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)

    实验内容

    1. 使用JDK编译、运行简单的Java程序;
    2. 使用IDEA 编辑、编译、运行、调试Java程序。

    实验要求

    1. 没有Linux基础的同学建议先学习《Linux基础入门(新版)》《Vim编辑器》 课程;
    2. 完成实验、撰写实验报告,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等)、解决办法(空洞的方法如“查网络”、“问同学”、“看书”等一律得0分)以及分析(从中可以得到什么启示,有什么收获,教训等);
    3. 实验报告中统计自己的PSP(Personal Software Process)时间;
    4. 严禁抄袭。

    二、实验内容及步骤

    (一)使用JDK编译、运行简单的java程序

    1. 建立“20165230exp1”的目录 ;

    2. 在“20165230exp1”目录下建立src,bin等目录;

    3. 在“20165230exp1”目录下通过javac -d bin src/Hello.java编译;通过java -cp bin tky.Hello运行,得到结果

    4. 再用tree查看目录结构,截图如下:

    5. 代码提交码云:

    (二)IDEA下Java程序开发、调试

    1、创建HelloJDB项目,输入如下代码:
    package tky;
    public class HelloJDB {
        public static void main(String[] args) {
            int i = 5;
            int j = 6;
            int sum = add(i, j);
            System.out.println(sum);
    
            sum = 0;
            for (i = 0; i < 100; i++)
                sum += i;
    
            System.out.println(sum);
        }
    
        public static int add(int augend, int addend) {
            int sum = augend + addend;
            return sum;
        }
    }
    
    
    2、运行代码
    • 通过run运行(或快捷键Alt+Shift+F10):
    3、设置断点
    • 通过在左侧行数栏单击行数(或快捷键Ctrl+F8
    4、单步调试
    • 通过Debug开始调试(或使用Alt+Shift+F9快捷键)

    • 使用Step Into(或快捷键F7)和 Step Over(或快捷键F8)继续向下运行程序

    • 注意区别

    1. 使用Step Into(或快捷键F7):单步执行,遇到子函数就进入并且继续单步执行
    2. Step Over(或快捷键F8):在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步
    3. Run to Cursor:程序将运行至光标处
    5、设置条件断点
    • 设置断点后点击右键,在Condition栏里设置判断条件,此处将条件设置为i==50
    6、继续运行程序
    • 通过Resume(或快捷键F9),或者直接点击红色方框处的图标,程序将从上一个断点运行至下一个断点(此处为运行至条件断点

    (三)练习

    1、设计思路

    根据题目要求初步设计四个类:

    1. 首先设计一个Student类封装学生的基本信息,包括学号、姓名、成绩、平均成绩、总成绩
    2. 设计主程序,显示所要操作的界面与结果输出
    3. 具体设计一个Operation操作类,实现各种功能,包括增删改,排序,查找
    4. 最后设计一个wrongException测试类,用来测试异常情况
    2、代码
    (1)Student.java
    class Student{
        private int ID;
        private String name;
        private int grade;
    
        public int getID(){
            return ID;
        }
        public void setID(int ID){
            this.ID=ID;
        }
    
        public String getName(){
            return name;
        }
        public void setName(String name){
            this.name=name;
        }
    
        public int getGrade() {
            return grade;
        }
    
        public void setGrade(int grade) {
            this.grade = grade;
        }
    
    }
    
    (2)Test.java
    
    import java.lang.*;
    import java.io.*;
    import java.util.*;
    public class Test{//主程序
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            System.out.println("请输入学生人数:");
            Student[] stuArr = new Student[in.nextInt()];
            Operation adminStu = new Operation();
            while(true){
                System.out.println("-----请选择你要执行的功能-----");
                System.out.println("1:添加一个学生");
                System.out.println("2:查找一个学生");
                System.out.println("3:根据学生编号更新学生基本信息");
                System.out.println("4:录入学生成绩");
                System.out.println("5:根据成绩进行排序");
                System.out.println("6:删除学生信息");
                System.out.println("7:退出系统");
    
                String number = in.next();
                if(number.equals("1")){
                    System.out.println("请输入学生的学号:");
                    int num = in.nextInt();
                    System.out.println("请输入学生的姓名:");
                    String name = in.next();
                    System.out.println("请输入学生的成绩:");
                    int grade = in.nextInt();
                    try{
                        adminStu.Create(num,name,grade,stuArr);//添加学生
                    }
                    catch(wrongException e){
                        System.out.println("出现错误");
                        System.out.println(e.warnMess());
                    }
                }else if(number.equals("2")){
                    System.out.println("请输入学生的学号进行查找:");
                    int num = in.nextInt();
                    try{
                        adminStu.find(num,stuArr);//查找学生
                    }
                    catch(wrongException e){
                        System.out.println("出现错误");
                        System.out.println(e.warnMess());
                    }
                }else if(number.equals("3")){
                    System.out.println("请输入需要更改的学生的学号:");
                    int num = in.nextInt();
                    System.out.println("请输入学生的姓名:");
                    String name = in.next();
                    System.out.println("请输入学生的成绩:");
                    int grade = in.nextInt();
                    try{
                        adminStu.update(num,name,grade,stuArr);//更新学生基本信息
                    }
                     catch(wrongException e){
                        System.out.println("出现错误");
                        System.out.println(e.warnMess());
                    }
                }else if(number.equals("4")){
                    System.out.println("执行输入成绩操作");
                    System.out.println("请输入学生的学号:");
                    int num = in.nextInt();
                    try {
                        adminStu.input(num, stuArr);//输入成绩
                    }
                    catch(wrongException e){
                        System.out.println("出现错误");
                        System.out.println(e.warnMess());
                    }
                }else if(number.equals("5")){
                    System.out.println("根据成绩排序操作");
                    adminStu.Sort(stuArr);//按总分排序
                }else if(number.equals("6")) {
                    System.out.println("请输入需要删除的学生学号");
                    int num = in.nextInt();
                    try {
                        adminStu.delete(num, stuArr);
                    }
                    catch(wrongException e){
                        System.out.println("出现错误");
                        System.out.println(e.warnMess());
                    }
                } else if(number.equals("7")){
                    System.out.println("程序已退出");
                    //break;
                    System.exit(0);
                }
            }
        }
    }
    
    (3)Operation.java
    import java.util.*;
    public class Operation {//用来管理学生的一个类
    
        public boolean exist(int num, Student stu) {//判断学生是否存在的方法
            if (stu != null) {
                if (stu.getID() == num) {
                    return true;
                } else {
                    return false;
                }
            }
            return false;
        }
        public void Create(int num,String name,int grade,Student[] arr)throws wrongException{//添加学生的方法
            Student stu = new Student();
            stu.setID(num);
            stu.setName(name);
            stu.setGrade(grade);
            int i = this.setIndex(arr);
            if(i==99999){
                throw new wrongException("学生人数已添满,不能再添加了");
            }
              else {
                arr[i] = stu;
            }
    
            System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
        }
        public int setIndex(Student[] arr){//返回数组为空的下标
            for(int i=0;i<arr.length;i++){
                if(arr[i]==null){
                    return i;
                }
            }
            return 99999;
        }
    
    
    
        public void delete(int num, Student[] arr) throws wrongException {//删除学生成绩
    
            for (int i = 0; i < arr.length; i++) {
                if (this.exist(num, arr[i])) {
                    if (arr[i].getID() == num) {
                        arr[i] = null;
                        System.out.println("已成功删除");
                        return;
                    }
                }
            }
            throw new wrongException("没有这个学生存在");
        }
    
        public void find(int num, Student[] arr) throws wrongException {//查询学生的方法
            for (int i = 0; i < arr.length; i++) {//判断学生是否存在
                if (this.exist(num, arr[i])) {
                    System.out.println("有这个学生,信息如下");
                    System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
                    return;
                }
            }
            throw new wrongException("没有这个学生的存在");
        }
    
        public void update(int num, String name, int grade, Student[] arr) throws wrongException {//更新学生基本信息的方法
            for (int i = 0; i < arr.length; i++) {
                if (this.exist(num, arr[i])) {
                    arr[i].setName(name);
                    arr[i].setGrade(grade);
                    System.out.println("更新学生信息成功!");
                    return;
                }
            }
            throw new wrongException("没找到这个学生更新信息失败");
        }
    
        public void input(int num, Student[] arr) throws wrongException {//输入学生成绩的方法
            for (int i = 0; i < arr.length; i++) {
                if (this.exist(num, arr[i])) {
    
                    System.out.println("请输入成绩:");
                    Scanner in = new Scanner(System.in);
                    if (in.hasNextInt()) {//输入非整形数则不执行
                        arr[i].setGrade(in.nextInt());
                    } else {
                        return;
                    }
                    System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
                    return;
                }
            }
        }
    
        public void Sort(Student[] arr) {//根据成绩从高到低排序的方法
            for (int i = 0; i < arr.length; i++) {
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[i] != null && arr[j] != null) {
                        if (arr[i].getGrade() < arr[j].getGrade()) {
                            Student t = arr[i];
                            arr[i] = arr[j];
                            arr[j] = t;
                        }
    
                    }
                }
            }
            for (int i = 0; i < arr.length; i++) {
                if (arr[i] != null) {
                    System.out.println("学号:" + arr[i].getID() + " 姓名:" + arr[i].getName() + " 成绩: " + arr[i].getGrade());
                }
            }
        }
    }
    
    
       
    
    (4)wrongException.java
    class wrongException extends Exception {   //自定义异常
            String Message;
            public wrongException(String s) {
                Message = s;
            }
            public String warnMess( ){
                return Message;
            }
        }
    
    
    
    3、运行结果
    命令行实现:
    • 功能1:添加一个学生

    • 功能2:查找一个学生

    • 功能3:更新学生信息

    • 功能4:录入学生成绩

    • 功能5:根据成绩排序

    • 功能6:删除一个学生

    IDEA测试:
    • 功能1调试:

    • 功能2调试:

    • 异常情况:

    4、实验遇到的问题

    • 问题1:录入同样的学号,没有提示添加同一个人的错误,而是继续往里添加

    • 问题1解决方案:通过throw添加抛出异常情况,解决问题

    • 问题2:在测试异常的时候出现两句"学生已存在,不能添加"

    • 问题2解决方案:发现是将该句写入了for循环里

    • 问题3:排序功能无法实现

    • 问题3解决方案: 通过检查代码发现是在添加学生的方法里,没有实现上一个学生添加完后保存进数组,而是在添加下一个后将上一个覆盖,最后通过反复修改与测试,成功实现排序功能

    5、实验心得

    本次实验需要实现的要求比较多,一开始拿到题目时没有思路,通过学习教材和学长学姐的博客,找到了设计基本的思路:首先根据需求构建框架,进行抽象与封装;然后设计主类与具体实现的类;最后还需要进行异常测试。在实验的过程中,遇到了很多问题,通过在网上查询和询问同学都一一解决。我意识到写一个程序就是逐步精益求精的过程,刚开始程序只能实现简单的功能,通过慢慢向功能类中添加功能代码并测试,再加上异常测试,不断的完善与进步。同时还有许多知识需要我不断的学习与积累,才能实现功能的强大。

    6、码云代码链接

    https://gitee.com/BESTI-IS-JAVA-2018/20165230/commit/14789a6afe780ca47651d866afc347036ff493c1

    7、PSP时间

    步骤 耗时 百分比
       |需求分析           |   10min           | 2%            |       |
           |  设计         | 40min            |     10%   |
    | 代码实现          |   30min          | 8%             |       |
      |分析总结          |   120min          | 30%            |
  • 相关阅读:
    practice
    C#Hello World
    Merge
    Python学习面向对象编程
    Python学习Python操作数据库
    jmeter压力测试
    Python学习基础常用模块
    Python学习Python操作excel
    Python学习网络编程
    Python学习函数
  • 原文地址:https://www.cnblogs.com/tiankunye/p/8708243.html
Copyright © 2020-2023  润新知