20145233 《Java程序设计》实验报告一:Java开发环境的熟悉

实验要求

使用JDK编译、运行简单的Java程序;

使用IDEA 编辑、编译、运行、调试Java程序。

实验内容

命令行下Java程序开发

IDEA下Java程序开发、调试

练习(通过命令行和IDEA两种方式实现,在IDEA下练习调试程序)

设计学生成绩管理系统

实验步骤

前期准备

1.预先安装好JDK,并配置好环境变量,相关操作在第一篇博客环境变量的配置中已经进行了说明。

2.接下来下载idea,这里我使用的老师共享的idea资源。

需求分析

1.设计一个管理系统,可以录入学生的信息,以及每个学生各科目的成绩。

2.可以计算每个学生的平均分。

3.可以用某一门的成绩来进行排序。

设计

主类的设计:

首先要定义接口:java.util.Scanner;,提供用户输入的功能;

定义主函数,记录三个输入变量,分别是左右操作数(double型),以及中间的运算符(字符串型)

将结果进行输出

测试类的设计:

对一些易错的输入实例进行测试,需要调用主类;

修改错误,完成测试。

代码实现&调试

1.打开idea,穿件一个名为shiyan1的文件夹,将所有的.java文件都放在里面,便于调试和运行。

2.分别创建Test.java,Hanshu.java,Student.java三个文件。

3.Test类代码

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()];
Hanshu adminStu = new Hanshu();
while(true){
System.out.println("-----请选择需要执行的功能-----");
System.out.println("01:添加一个学生");
System.out.println("02:查找一个学生");
System.out.println("03:根据学生学号更新学生基本信息");
System.out.println("04:根据学生学号删除学生");
System.out.println("05:根据学号输入学生各门成绩");
System.out.println("06:根据某门成绩进行排序");
System.out.println("07:根据总分进行排序");
System.out.println("00:退出系统"); String number = in.next();
if(number.equals("01")){
System.out.println("请输入学生的学号:");
int num = in.nextInt();
System.out.println("请输入学生的姓名:");
String name = in.next();
System.out.println("请输入学生的年龄:");
int age = in.nextInt();
adminStu.Create(num,name,age,stuArr);//添加学生
}else if(number.equals("02")){
System.out.println("执行查找学生基本信息的操作");
System.out.println("请输入学生的学号进行查找:");
int num = in.nextInt();
adminStu.find(num,stuArr);//查找学生
}else if(number.equals("03")){
System.out.println("执行更新学员的基本信息操作");
System.out.println("请输入学生的学号:");
int num = in.nextInt();
System.out.println("请输入学生的姓名:");
String name = in.next();
System.out.println("请输入学生的年龄:");
int age = in.nextInt();
adminStu.update(num,name,age,stuArr);//更新学生基本信息
}else if(number.equals("04")){
System.out.println("执行删除学生操作");
System.out.println("请输入学生学号:");
int num = in.nextInt();
adminStu.delete(num,stuArr);//删除学生
}else if(number.equals("05")){
System.out.println("执行输入成绩操作");
System.out.println("请输入学生学号:");
int num = in.nextInt();
adminStu.input(num, stuArr);//输入成绩
}else if(number.equals("06")){
System.out.println("执行根据选择的科目成绩排序操作");
System.out.println("请选择需要排序的科目名(1.java 2.C语言):");
int num = in.nextInt();
adminStu.courseSort(num,stuArr);//按科目成绩排序
}else if(number.equals("07")){
System.out.println("执行根据总分排序操作");
adminStu.sumSort(stuArr);//按总分高低排序
}else if(number.equals("00")){
System.out.println("--------程序已退出--------");
//break;
System.exit(0);
}
}
}
}

4.创建Student类代码

public class Student {//学生类
private int num;
private String name;
private int age;
private int java;
private int C;
private int sum;
private double avg; public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getJava() {
return java;
}
public void setJava(int java) {
this.java = java;
}
public int getC() {
return C;
}
public void setC(int c) {
C = c;
}
public int getSum() {
return sum;
}
public void setSum() {
this.sum = this.java+this.C;
}
public double getAvg() {
return avg;
}
public void setAvg() {
this.avg=this.sum/2;
}
public String toString(){
String str = "\t"+this.num+"\t\t"+this.name+"\t\t"+this.age+"\t\t"
+this.java+"\t\t"+this.C +"\t\t"+this.sum+"\t\t"+this.avg;
return str;
}
}

5.创建Hanshu类代码:

import java.util.*;
public class Hanshu {//用来管理学生的一个类
String msg = "\t学号\t姓名\t年龄\tjava\tC语言\t总分\t平均分";
public void print(Student[] arr){//刷新学生成绩数据方法
System.out.println(msg);
for(int i=0;i<arr.length;i++){
if(arr[i]!=null){
arr[i].setSum();
arr[i].setAvg();
System.out.println(arr[i]);
}
}
}
public boolean exist(int num,Student stu){//判断这个编号的学生是否存在的方法
if(stu!=null){
if(stu.getNum()==num){
return true;
}else{
return false;
}
}
return false;
}
public void Create(int num,String name,int age,Student[] arr){//添加学生的方法
Student stu = new Student();
stu.setNum(num);
stu.setName(name);
stu.setAge(age);
int i = this.setIndex(arr);
if(i==9999){
System.out.println("学生人数已添满,不能再添加了");
}else{
arr[i]=stu;
}
this.print(arr);
}
public int setIndex(Student[] arr){//返回数组为空的下标
for(int i=0;i<arr.length;i++){
if(arr[i]==null){
return i;
}
}
return 9999;
}
public void find(int num,Student[] arr){//查询学生的方法
for(int i=0;i<arr.length;i++){//判断学生是否存在
if(this.exist(num,arr[i])==true){
System.out.println(msg);
System.out.println(arr[i]);
return;
}
}
System.out.println("-----没有找到这个学生-----");
}
public void update(int num,String name,int age,Student[] arr){//更新学生基本信息的方法
for(int i=0;i<arr.length;i++){
if(this.exist(num, arr[i])==true){
arr[i].setName(name);
arr[i].setAge(age);
System.out.println("--------更新学生信息成功!-------");
this.print(arr);
return;
}
}
System.out.println("------没找到这个学生更新信息失败------");
}
public void delete(int num,Student[] arr){//删除学生的方法
for(int i=0;i<arr.length;i++){
if(this.exist(num,arr[i])){
arr[i] = null;
this.print(arr);
return;
}
}
System.out.println("您所指定学号的学生不存在");
}
public void input(int num,Student[] arr) {//输入学生成绩的方法
for (int i = 0; i < arr.length; i++) {
if (this.exist(num, arr[i])) {
Scanner in = new Scanner(System.in);
System.out.println("请输入" + arr[i].getName() + "java的成绩:");
if (in.hasNextInt()) {//输入非整形数则不执行
arr[i].setJava(in.nextInt());
} else {
return;
}
System.out.println("请输入" + arr[i].getName() + "C语言的成绩:");
if (in.hasNextInt()) {
arr[i].setC(in.nextInt());
} else {
return;
}
this.print(arr);
return;
}
}
}
public void courseSort(int num,Student[] arr){//根据指定科目排序的方法
if(num==1){
//这里不使用冒泡排序(因为冒泡排序是相邻的比较,而相邻的可能不存在,那么相隔的两个就不能交换)
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].getJava()<arr[j].getJava()){
Student t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
}else if(num==2){
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].getC()<arr[j].getC()){
Student t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
}
this.print(arr);
}
public void sumSort(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].getSum()<arr[j].getSum()){
Student t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
}
this.print(arr);
}
}

6.调试

IDEA中调试很简单,Ctrl+Shift+F10,也可以直接鼠标点击run进行选择,即可编译运行;

IDEA可以边编译边纠错,所以编译运行时没有发现什么错误;

不过通过咨询同学,以及在网上查找相关的知识,学到了断点调试、单步执行等方法,可以让JVM只编译你选中的部分,对其中的语法错误可以一句一句纠错,使得发现解决问题的时间大大提高,但是idea的好处就体现在它比较智能,在出现语法问题,或者其他错误的时候,可以变成红色字体来帮助你发现错误,这是很好用的。

idea中的执行结果

1.

2.

命令行下的开发

这里第一个我开始执行的时候出错,我想到这里有三个代码,系统当然没有办法识别其中的代码,我就在想如何正确执行代码,这里我问了高其同学,理解了如何正确使用编译。

所以在编译Test.java文件时,须在命令行下输入以下指令:javac -d . *.java,这样,JVM会把编译生成的.class文件放在文件夹shiyan中,执行时输入指令:java lab01.CalculatorDemo或java lab01.CalculatorTest即可运行以上文件。

这里贴上正确的代码结果在cmd中的运行:

但是,因为我的自作聪明,因为在编译的时候,我使用的是idea,在里面虚拟编译的时候,我在代码中加了很多/t,只为了在显示结果的时候可以对齐,在idea中,确实可以完美运行,但是在cmd中,居然没有对齐,而且格式这么恶心。但是也算是完美运行了。

分析总结

其实在刚刚拿到这个题目的时候,我的头都大了,因为我觉得这个是相当复杂的,因为要对学生成绩录入,这是需要用到之前的很多知识,最后用了一周的时间,再结合向同学咨询以及在网上查的一些资料,终于完成了这个实验,在实验跑起来的时候,我的天,那感觉简直了,高兴,觉得自己这么长时间的努力终于有了回报。

而且在这段时间内,真的是对之前的所有的东西有了检验,但是在这之间的问题还是很多,有的代码会不知道如何用,还要在开始翻书,自己还是没有办法独立的写出一个程序,这也就表明,看别人的代码觉得简单,实际上自己真的编一个代码还是很难的,这也就是说我还是需要很多努力。

并且使用多了idea的开发环境,我慢慢对于基础的原始的cmd编译有所遗忘,要不是咨询了同学,我这个代码都没有办法在cmd上完成运行。我将本次实验的三个类全部放在了包shiyan中,这就使得用命令行编译时要注意了。不能直接使用java c命令编写,因为这三个类属于特定的包中,必须要用javac -d指令,这样编译的.class文件才能被java指令执行.

PSP时间:

步骤 时间 百分比
需求设计 20min 6.67%
设计 100min 33.3%
代码实现 150min 50%
测试 15min 5%
分析总结 15min 5%

参考资料

《Java学习笔记(第8版)》学习指导

积极主动敲代码,使用JUnit学习Java

20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)的更多相关文章

  1. 20145314郑凯杰 《Java程序设计》实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告

    20145314郑凯杰 <Java程序设计>实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告 实验要求 •使用JDK编译.运行简单的Java程序: •使用Ecl ...

  2. 20145316《Java程序设计》实验一:Java开发环境的熟悉(Windows + IDEA)

    20145316<Java程序设计>实验一:Java开发环境的熟悉(Windows + IDEA) 一.DOC命令行下Java程序开发 1.打开cmd,输入 mkdir 20145316命 ...

  3. 20145239 实验一 Java开发环境的熟悉(Windows + IDEA)

    实验一 Java开发环境的熟悉(Windows + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序:2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1.JV ...

  4. 20145301《Java程序设计》实验报告一:Java开发环境的熟悉

    20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习& ...

  5. 2018-2019-2-20175303 实验二 《Java开发环境的熟悉》实验报告

    2018-2019-2-20175303 实验二 <Java开发环境的熟悉>实验报告 姓名:柴轩达       学号:20175303     班级:1753       实验课程:JAV ...

  6. 2018-2019-2-20175225 实验二《Java开发环境的熟悉》实验报告

    姓名:张元瑞 学号:20175225 班级:1752 实验课程:JAVA程序设计 实验名称:Java面向对象程序设计 实验时间:2019.4.16 指导老师:娄嘉鹏 实验内容 测试点一 - " ...

  7. 20145312《Java第一次实验报告》

    20145312<Java第一次实验报告> Java开发环境的熟悉(Windows+Idea) 一.实验内容 使用Idea编辑.编译.运行.调试Java程序. 使用JDK编译.运行简单的J ...

  8. 20145212《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDE)

    20145212<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDE) 实验内容及步骤 1.命令行下的JAVA程序开发 建立并进入实验目录: 撰写简单的Hello ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. Effective Java 35 Prefer annotations to naming patterns

    Disadvantages of naming patterns Typographical errors may result in silent failures. There is no way ...

  2. Python基本数据结构-字典-创建/访问/基本操作/格式化输出

  3. Nde模块篇

    /*模块分为两种:原生模块和文件模块.原生模块即Node.js API提供的原生模块,原生模块在启动时已经被加载.文件模块即为动态加载模块,加载文件模块的工作主要由原生模块 module 来实现和完成 ...

  4. PHP添加Redis模块及连接

    上几篇文章介绍了Redis的安装及使用,下面将介绍php如何添加Redis扩展! php手册并没有提供Redis的类和方法,也没有提供相关的扩展模块,但我们可以在Redis的官网下载PHP的扩展,里面 ...

  5. hdu 2089 不要62--数位dp入门

    不要62 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  6. C中signed与unsigned

    unsigned ; cout<<i * -; 问结果是多少. 第一反应:-3.不过结果似乎不是这样的,写了个程序,运行了一下,发现是:4294967293. 1)在32位机上,int型和 ...

  7. 查看Ubuntu版本

    一.查看Ubuntu版本号 方法一 root@wiki:~# cat /etc/issue Ubuntu 14.04.1 LTS \n \l 方法二 root@wiki:~# sudo lsb_rel ...

  8. hdu 5800 To My Girlfriend + dp

    传送门:hdu 5800 To My Girlfriend 题意:给定n个物品,其中i,j必选,l,m必不选,问组成体积为s的方法一共有多少种 思路:定义dp[i][j][s1][s2],表示前i种物 ...

  9. PHP基本知识

    PHP是以一种嵌入在HTML代码中的脚本语言,它由服务器负责解释,可以用于管理动态内容.支持数据库.处理会话跟踪.甚至构建整个电子商务站点. PHP支持许多流行.非流行的数据库,包括MySQL.Pos ...

  10. 对Spring的IoC和DI最生动的解释

    首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系 ...