oopDay01HomeWork

/**
* 定义一个手机类
* 包含属性为:品牌brand、型号style、价格price、硬盘大小diskSize(单位默认为GB)
* 包含一个方法showInfo,以字符串形式返回当前手机的全部信息
* 包含一个无参构造器和一个带4个参数的构造器,用于简化对象的创建
*/
class Phone {
String brand;//手机品牌
String style;//手机型号
double price;//手机价格
int diskSize;//硬盘大小

//无参构造方法
public Phone(){

}
//带四个参数的构造器
public Phone(String brand,String style,double price,int diskSize){
this.brand = brand;
this.style = style;
this.price = price;
this.diskSize = diskSize;
}
//showInfo()方法,以字符串形式返回当前手机的全部信息
public String showInfo() {
return "Phone{" +
"brand='" + brand + '\'' +
", style='" + style + '\'' +
", price=" + price +
", diskSize=" + diskSize +
'}';
}
}

/**
* Phone测试类
*/
public class PhoneTest {
public static void main(String[] args) {
Phone phone = new Phone("华为","P30 pro",3999.0,128);
System.out.println(phone.showInfo());
}
}

/**
* 模拟学生成绩管理系统:录入3名学生的成绩,并提供信息查询功能。
*
* 程序设计要求:包含3个类
*
* 1、Student 类:表示学生,用于记载学生信息
*
* 包含id(整型),name(字符串),score(整型)三个属性
* 学生的成绩范围为0-100分
* Student类包含一个方法(getInfo),该方法以字符串形式返回当前学生的信息
* 2、RecordSystem 类:表示记录系统,用于提供综合服务(录入数据、查询信息等)
*
* 包含一个 Student 数组类型的属性(studentArray),用于保存所有学生的信息,数组长度为3
* 包含两个方法,分别用于录入学生成绩(addScore)和显示学生信息(showInfo)
* addScore 方法:参数列表中包含2个整型参数,分别是学生id和学生分数,该方法的具体功能是更新studentArray数组中目标id的学生的score属性值
* showInfo方法:参数列表中没有参数,该方法的具体功能是按学生id顺序输出全部学生信息
* 在RecordSystem类的构造器中初始化studentArray数组,并添加3个学生对象到数组中,学生的id和姓名分别是:1 Tom,2 Jerry,3 Spike
* 3、Main 主类
*
* 包含 main 方法,用于启动程序并和用户进行交互
* main方法中,首先创建RecordSystem类的对象和Scanner对象,然后输出菜单,与用户进行交互
*/
class Student {
//id(整型),name(字符串),score(整型)
int id;
String name;
int score;
//无参构造器
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
// Student类包含一个方法(getInfo),该方法以字符串形式返回当前学生的信息
public String getInfo(){
return "Student"+" "+id+" "+name+" "+score;
}
}

/**
*RecordSystem 类:表示记录系统,用于提供综合服务(录入数据、查询信息等)
*包含一个 Student 数组类型的属性(studentArray),用于保存所有学生的信息,数组长度为3
*包含两个方法,分别用于录入学生成绩(addScore)和显示学生信息(showInfo)
*/
class RecordSystem {
Student[] studentArray;//Student数组类型的属性,

//在RecordSystem类的构造器中初始化studentArray数组,并添加3个学生对象到数组中,学生的id和姓名分别是:1 Tom,2 Jerry,3 Spike
public RecordSystem() {
studentArray = new Student[3];
studentArray[0] = new Student(1,"Tom");
studentArray[1] = new Student(2,"Jerry");
studentArray[2] = new Student(3,"Spike");
}
/**
* 更新studentArray数组中目标id的学生的score属性值
* @param id 学生id
* @param score 要更新的学生成绩
*/
public void addScore(int id ,int score){
if (id<1 || id>3){
System.out.println("输入的id错误");
}else if (score<0 ||score>100){
System.out.println("输入的成绩不正确");
}else{
this.studentArray[id-1].score = score;
}
}

/**
* showInfo方法:参数列表中没有参数,该方法的具体功能是按学生id顺序输出全部学生信息
*/
public void showInfo(){
for (int i = 0; i <studentArray.length; i++) {
System.out.println(studentArray[i].getInfo());
}
}
public void sortStudent(){
//复制当前数组
Student[] students = Arrays.copyOf(this.studentArray,this.studentArray.length);
//开始对数组进行排序按照学生的成绩(冒泡排序)
for (int i = 0; i <students.length-1; i++) {
for (int j = 0; j <students.length-i-1 ; j++) {
if (students[j].score<students[j+1].score){
Student temp =students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
//排序完成重新输出学生信息
for (int i = 0; i <students.length ; i++) {
System.out.println(students[i].getInfo());
}
}
}

/**
* 包含 main 方法,用于启动程序并和用户进行交互
* main方法中,首先创建RecordSystem类的对象和Scanner对象,然后输出菜单,与用户进行交互
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
RecordSystem recordSystem = new RecordSystem();
int number = 0;
while (number!=4){
System.out.println("欢迎使用学生成绩录入系统");
System.out.println("1 显示学生信息");
System.out.println("2 录入学生成绩");
System.out.println("3 查询整体成绩");
System.out.println("4 退出");
System.out.println("请输入(1-3):");
number = scanner.nextInt();
switch (number){
case 1:
recordSystem.showInfo();
break;
case 2:
System.out.println("请输入学生id和分数,用空格隔开");
int id = scanner.nextInt();
int score = scanner.nextInt();
recordSystem.addScore(id,score);
break;
case 3:
recordSystem.sortStudent();
case 4:
System.out.println("谢谢使用");
break;
}
}
}
}