20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
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)的更多相关文章
- 20145314郑凯杰 《Java程序设计》实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告
20145314郑凯杰 <Java程序设计>实验一 Java开发环境的熟悉(Windows + Eclipse)实验报告 实验要求 •使用JDK编译.运行简单的Java程序: •使用Ecl ...
- 20145316《Java程序设计》实验一:Java开发环境的熟悉(Windows + IDEA)
20145316<Java程序设计>实验一:Java开发环境的熟悉(Windows + IDEA) 一.DOC命令行下Java程序开发 1.打开cmd,输入 mkdir 20145316命 ...
- 20145239 实验一 Java开发环境的熟悉(Windows + IDEA)
实验一 Java开发环境的熟悉(Windows + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序:2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验知识点 1.JV ...
- 20145301《Java程序设计》实验报告一:Java开发环境的熟悉
20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习& ...
- 2018-2019-2-20175303 实验二 《Java开发环境的熟悉》实验报告
2018-2019-2-20175303 实验二 <Java开发环境的熟悉>实验报告 姓名:柴轩达 学号:20175303 班级:1753 实验课程:JAV ...
- 2018-2019-2-20175225 实验二《Java开发环境的熟悉》实验报告
姓名:张元瑞 学号:20175225 班级:1752 实验课程:JAVA程序设计 实验名称:Java面向对象程序设计 实验时间:2019.4.16 指导老师:娄嘉鹏 实验内容 测试点一 - " ...
- 20145312《Java第一次实验报告》
20145312<Java第一次实验报告> Java开发环境的熟悉(Windows+Idea) 一.实验内容 使用Idea编辑.编译.运行.调试Java程序. 使用JDK编译.运行简单的J ...
- 20145212《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDE)
20145212<Java程序设计>实验报告一:Java开发环境的熟悉(Windows+IDE) 实验内容及步骤 1.命令行下的JAVA程序开发 建立并进入实验目录: 撰写简单的Hello ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
随机推荐
- su su -
http://www.ha97.com/4001.html su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环 ...
- 如何使用emacs编写c语言程序,并编译运行
vi和emacs被分别被称为编辑器之神和神之编辑器.vi的入门精通都很难,emacs入门容易,精通难:vi使用起来不停地切换模式,而emacs则不停地ctrl,meta等组合键.因此,高德纳大师说操作 ...
- [部署]CentOS安装apache
环境 虚拟机:VMWare10.0.1 build-1379776 操作系统:CentOS7 64位 步骤 1.使用yum安装 yum install httpd httpd-devel 2.启动 a ...
- oracle 11g dataguard创建的简单方法
oracle 10g可以通过基于备份的rman DUPLICATE实现dataguard,通过步骤需要对数据库进行备份,并在standby侧进行数据库的恢复.而到了11g,oracle推出了Dupli ...
- DFS cdoevs 3100 蜗牛
cdoevs 3100 蜗牛 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在 ...
- codeforces 719E E. Sasha and Array(线段树)
题目链接: E. Sasha and Array time limit per test 5 seconds memory limit per test 256 megabytes input sta ...
- python中如何将str转换成dict
>>>user "{'a':'b'}" >>>b = eval(user) >>>b {'a':'b'}
- nginx 一二事(2) - 创建虚拟静态服务器
一.什么是nginx 是一个C语言开发的HTTP反向代理服务器,性能非常高 一个俄罗斯的哥们开发的,官方提供的测试性能能够达到5W的并发,我的天呐~,实际测试差不多是2W,而淘宝的牛人可以优化到200 ...
- cnblog code syntaxhighlighter view
wlw代码插件 测试多款 wlw插入代码插件 在博客园的代码高亮效果 1.Code Snippet 1: public override void Update() 2: { 3: base.Upda ...
- box unboxing(装箱 拆箱) C#编程指南
box(装箱)消耗大 box在堆栈中创建一个新的对象,性能消耗大 int i = 123; // Boxing copies the value of i into object o. object ...