计算机19-1/2/3/4-作业4

1.Shape类

定义一个形状类Shape,提供计算周长getPerimeter()和面积getArea()的函数
定义一个子类正方形类Square继承自Shape类,拥有边长属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()
定义一个子类长方形类Rectangle继承自Square类,拥有长、宽属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()
定义一个子类圆形类Circle继承自Shape,拥有半径属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

在main函数中,分别构造三个子类的对象,并输出他们的周长、面积.
提示:用System.out.printf(“%.2f”,d)进行格式化输出

输入描述:

正方形类的边长
长方形类的长宽
圆类的半径

输出描述:

正方形的周长、面积
长方形的周长、面积
圆形的周长、面积

裁判测试程序样例:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         double length = scan.nextDouble();
         Square s = new Square(length);
         System.out.printf("%.2f ",s.getPerimeter());
         System.out.printf("%.2f\n",s.getArea());

         length = scan.nextDouble();
         double wide = scan.nextDouble();
         Rectangle r = new Rectangle(length,wide);
         System.out.printf("%.2f ",r.getPerimeter());
         System.out.printf("%.2f\n",r.getArea());

         double radius = scan.nextDouble();
         Circle c = new Circle(radius);
         System.out.printf("%.2f ",c.getPerimeter());
         System.out.printf("%.2f\n",c.getArea());

         scan.close(); 
    }
}

/* 你的代码被嵌在这里 */

输入样例:

在这里给出一组输入。例如:

1
1 2
2

输出样例:

在这里给出相应的输出。例如:

4.00 1.00
6.00 2.00
12.57 12.57

自己的代码:

abstract class Shape{
	abstract double getPerimeter();
	abstract double getArea();
}
class Square extends Shape{
	double len;
	Square(double len){
		this.len=len;
	}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 4*len;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*len;
	}
	
}
class Rectangle extends Square{
	double width;
	Rectangle(double len,double width) {
		super(len);
		// TODO Auto-generated constructor stub
		this.width=width;
	}
	
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*(len+width);
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*width;
	}
	
}
class Circle extends Shape{
	double r;
	double pi=3.142;
	Circle(double r){this.r=r;}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*pi*r;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return pi*r*r;
	}
	
}






2.学生、大学生、研究生类

定义Student学生类:

  • 拥有学号、姓名、性别属性,提供构造函数,以及相应属性的get set函数
  • 提供函数attendClass(String className)表示上课。

定义CollegeStudent大学生类:

  • 继承自Student类,拥有新增属性专业,提供构造函数,提供新增属性的get和set函数

定义GraduateStudent研究生类:

  • 继承自CollegeStudent类,拥有新增属性导师,提供构造函数,提供新增属性的get和set函数,
  • 提供函数doResearch() 表示做研究(打印xx is doing research)。

main函数中对构造的类进行测试

输入描述:

学生类信息,学号、姓名、性别
大学生类信息,学号、姓名、性别、专业
研究生类信息,学号、姓名、性别、专业、导师

输出描述:

学生类信息 大学生类信息 研究生类信息

裁判测试程序样例:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         int no = scan.nextInt();
         String name = scan.next();      
         String sex = scan.next();      
         Student s = new Student(no, name, sex);
         s.print();

         no = scan.nextInt();
         name = scan.next();      
         sex = scan.next();      
         String major = scan.next();
         CollegeStudent c = new CollegeStudent(no, name, sex, major);
         c.print();

         no = scan.nextInt();
         name = scan.next();      
         sex = scan.next();      
         major = scan.next();
         String supervisor = scan.next();
         GraduateStudent g = new GraduateStudent(no, name, sex, major, supervisor );
         g.print();
         g.doResearch();
         scan.close(); 
    }
}

/* 你的代码被嵌在这里*/

输入样例:

在这里给出一组输入。例如:

1 liu female
2 chen female cs
3 li male sc wang

输出样例:

在这里给出相应的输出。例如:

no: 1
name: liu
sex: female
no: 2
name: chen
sex: female
major: cs
no: 3
name: li
sex: male
major: sc
supervisor: wang
li is doing research

自己的代码:

class Student{
	int no;
	String name,sex;
	Student(int no,String name,String sex){this.no=no;this.name=name;this.sex=sex;}
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	
	 void attendClass(String className) {}
	 void print() {
		 System.out.println("no: "+no+"\n"+
	                        "name: "+name+"\n"+
				             "sex: "+sex);
	 }
		
	
}
class CollegeStudent extends Student{
	String major;
	CollegeStudent(int no,String name,String sex,String major){
		super(no,name,sex);
		this.major=major;
	}
	public String getMajor() {
		return major;
	}
	public void setMajor(String major) {
		this.major = major;
	}
	
	 void print() {
		 super.print();
		 System.out.println("major: "+major);
	                        
	 }
}
class GraduateStudent extends CollegeStudent{
	String supervisor;
	GraduateStudent(int no, String name, String sex, String major,String supervisor) {
		super(no, name, sex, major);
		// TODO Auto-generated constructor stub
		this.supervisor=supervisor;
	}
	public String getSupervisor() {
		return supervisor;
	}
	public void setSupervisor(String supervisor) {
		this.supervisor = supervisor;
	}
	
	void doResearch() {System.out.println(name+" is doing research");}
	 void print() {
		 super.print();
		 System.out.println("supervisor: "+supervisor);
	                        
	 }
}






3. 租车服务

某租车公司提供租车服务,针对不同的车辆类型,日租金的计算方式不同,具体地:

  • 对于货车而言,根据载重量load(单位是吨)计算,公式为loadx 1000;
  • 对于大型客车而言,根据车内座位数seats计算,公式为seatsx50;
  • 对于小型汽车而言,根据车辆等级和折旧年数计算,公式为200*level/sqrt(year),其中sqrt表示平方根。

设计合适的类继承结构实现上述功能,构造租车公司类CarRentCompany,提供静态函数rentVehicles,能够给定一组待租车辆,计算日租金总额。
在main函数中,读入多个车辆数据,并计算总的日租金。

输入描述:

汽车数量 汽车种类 该类汽车相关属性 其中1表示货车,2表示大型客车,3表示小型汽车

输出描述:

总的日租金,保留两位小数

裁判测试程序样例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int c = sc.nextInt();
        Vehicle[] vs = new Vehicle[c];
        for (int i=0;i<c;i++) {
            int type = sc.nextInt();
            Vehicle v = null;
            if (type == 1) {//货车
                vs[i] = new Truck (sc.nextDouble());
            } else if (type == 2) {
                vs[i] = new Keche(sc.nextInt());
            } else if (type == 3) {
                vs[i] = new Car(sc.nextInt(), sc.nextInt());
            }
        }

        System.out.printf("%.2f",CarRentCompany.rentVehicles(vs));

    }
}

/* 你的代码被嵌在这里 */

输入样例:

在这里给出一组输入。例如:

3
1 3
2 50
3 5 5

输出样例:

在这里给出相应的输出。例如:

5947.21

自己的代码:

abstract class Vehicle{
	abstract double daycost();
}
class Truck extends Vehicle{
	double load;
	Truck(double load){this.load=load;}
	@Override
	double daycost() {
		return load*1000;
	}
	
}
class Keche extends Vehicle{
	int seat;
	Keche(int seat){this.seat=seat;}
	@Override
	double daycost() {
		// TODO Auto-generated method stub
		return (double)(seat*50.0);
	}
	
}
class Car extends Vehicle{
	int level;
	int year;
	Car(int level,int year){this.level=level;this.year=year;}
	@Override
	double daycost() {
		// TODO Auto-generated method stub
		return (double)(200*level)/Math.sqrt(year);
	}
	
}
class CarRentCompany{
	static double rentVehicles(Vehicle[] vs) {
		double sum=0;
		for(Vehicle a:vs) {
			sum+=a.daycost();
		}
		return sum;
	
	}
}






4.员工类

假定要为某个公司编写雇员工资支付程序,这个公司有各种类型的雇员(Employee),不同类型的雇员按不同的方式支付工资(都是整数):
(1)经理(Manager)——每月获得一份固定的工资
(2)销售人员(Salesman)——在基本工资的基础上每月还有销售提成
(3)一般工人(Worker)——则按他每月工作的天数计算工资

在Employee中提供函数getSalary()计算每个雇员一个月的工资,并在子类中重写。

在main函数中构造Employee的三个变量,分别指向Manager、Salesman、Worker的对象,调用getSalary函数,输出三个对象的工资

输入描述:

经理的月工资 销售人员的基本工资 销售人员的提成 工人的工作天数 工人每天的工资

输出描述:

经理的工资 销售人员的工资 工人的工资

输入样例:

在这里给出一组输入。例如:

12000
3000 5000
22 200

输出样例:

在这里给出相应的输出。例如:

12000
8000
4400

自己的代码:

import java.util.Scanner;
abstract class Employee{
	abstract void salaryprint();
}
class Manager extends Employee{
	int salary;
	Manager(int salary){this.salary=salary;}

	@Override
	void salaryprint() {
		System.out.println(salary);
	}
	
}
class Salesman extends Employee{
	int salary;
	int another;
	Salesman(int salary,int another){this.salary=salary;this.another=another;}
	@Override
	void salaryprint() {
		System.out.println((salary+another));
	}
	
}
class Worker extends Employee{
	int days;
	int base;
	Worker(int days,int base){this.days=days;this.base=base;}
	@Override
	void salaryprint() {
		System.out.println(days*base);
	}
	
}
public class Main{
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		Employee[] test=new Employee[3];
		test[0]=new Manager(in.nextInt());
		test[1]=new Salesman(in.nextInt(),in.nextInt());
		test[2]=new Worker(in.nextInt(),in.nextInt());
		for(Employee a:test) {
			a.salaryprint();
		}
	}
}






5.员工类-2

修改上题的员工类,使得Employee类为抽象类,getSalary()方法是抽象方法

输入描述:

经理的月工资 销售人员的基本工资 销售人员的提成 工人的工作天数 工人每天的工资

输出描述:

经理的工资 销售人员的工资 工人的工资

输入样例:

在这里给出一组输入。例如:

12000
3000 5000
22 200

输出样例:

在这里给出相应的输出。例如:

12000
8000
4400

自己的代码:

import java.util.Scanner;
abstract class Employee{
	abstract void getSalary();
}
class Manager extends Employee{
	int salary;
	Manager(int salary){this.salary=salary;}

	@Override
	void getSalary() {
		System.out.println(salary);
	}
	
}
class Salesman extends Employee{
	int salary;
	int another;
	Salesman(int salary,int another){this.salary=salary;this.another=another;}
	@Override
	void getSalary() {
		System.out.println((salary+another));
	}
	
}
class Worker extends Employee{
	int days;
	int base;
	Worker(int days,int base){this.days=days;this.base=base;}
	@Override
	void getSalary() {
		System.out.println(days*base);
	}
	
}
public class Main{
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		Employee[] test=new Employee[3];
		test[0]=new Manager(in.nextInt());
		test[1]=new Salesman(in.nextInt(),in.nextInt());
		test[2]=new Worker(in.nextInt(),in.nextInt());
		for(Employee a:test) {
			a.getSalary();
		}
	}
}






6.Shape类-2

定义一个形状类Shape,提供计算周长getPerimeter()和面积getArea()的函数

  • 定义一个子类正方形类Square继承自Shape类,拥有边长属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()
  • 定义一个子类长方形类Rectangle继承自Square类,拥有长、宽属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()
  • 定义一个子类圆形类Circle继承自Shape,拥有半径属性,提供构造函数,能够计算周长getPerimeter()和面积getArea()

在main函数中,分别构造三个Shape类的变量,分别指向一个Square、Rectangle、Circle对象,并输出他们的周长、面积.

输入描述:

正方形类的边长 长方形类的长宽 圆类的半径

输出描述:

正方形的周长、面积 长方形的周长、面积 圆形的周长、面积

输入样例:

在这里给出一组输入。例如:

1
1 2
2

输出样例:

在这里给出相应的输出。例如:

4.00 1.00
6.00 2.00
12.57 12.57

自己的代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         double length = scan.nextDouble();
         Square s = new Square(length);
         System.out.printf("%.2f ",s.getPerimeter());
         System.out.printf("%.2f\n",s.getArea());

         length = scan.nextDouble();
         double wide = scan.nextDouble();
         Rectangle r = new Rectangle(length,wide);
         System.out.printf("%.2f ",r.getPerimeter());
         System.out.printf("%.2f\n",r.getArea());

         double radius = scan.nextDouble();
         Circle c = new Circle(radius);
         System.out.printf("%.2f ",c.getPerimeter());
         System.out.printf("%.2f\n",c.getArea());

         scan.close(); 
    }
}

/* 你的代码被嵌在这里 */
abstract class Shape{
	abstract double getPerimeter();
	abstract double getArea();
}
class Square extends Shape{
	double len;
	Square(double len){
		this.len=len;
	}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 4*len;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*len;
	}
	
}
class Rectangle extends Square{
	double width;
	Rectangle(double len,double width) {
		super(len);
		// TODO Auto-generated constructor stub
		this.width=width;
	}
	
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*(len+width);
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*width;
	}
	
}
class Circle extends Shape{
	double r;
	double pi=3.142;
	Circle(double r){this.r=r;}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*pi*r;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return pi*r*r;
	}
	
}






7.Shape类-3

修改上题,将Shape类改为抽象类

输入描述:

正方形类的边长 长方形类的长宽 圆类的半径

输出描述:

正方形的周长、面积 长方形的周长、面积 圆形的周长、面积

输入样例:

在这里给出一组输入。例如:

1
1 2
2

输出样例:

在这里给出相应的输出。例如:

4.00 1.00
6.00 2.00
12.57 12.57

自己的代码:

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
         Scanner scan = new Scanner(System.in);      
         double length = scan.nextDouble();
         Square s = new Square(length);
         System.out.printf("%.2f ",s.getPerimeter());
         System.out.printf("%.2f\n",s.getArea());

         length = scan.nextDouble();
         double wide = scan.nextDouble();
         Rectangle r = new Rectangle(length,wide);
         System.out.printf("%.2f ",r.getPerimeter());
         System.out.printf("%.2f\n",r.getArea());

         double radius = scan.nextDouble();
         Circle c = new Circle(radius);
         System.out.printf("%.2f ",c.getPerimeter());
         System.out.printf("%.2f\n",c.getArea());

         scan.close(); 
    }
}

/* 你的代码被嵌在这里 */
abstract class Shape{
	abstract double getPerimeter();
	abstract double getArea();
}
class Square extends Shape{
	double len;
	Square(double len){
		this.len=len;
	}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 4*len;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*len;
	}
	
}
class Rectangle extends Square{
	double width;
	Rectangle(double len,double width) {
		super(len);
		// TODO Auto-generated constructor stub
		this.width=width;
	}
	
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*(len+width);
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return len*width;
	}
	
}
class Circle extends Shape{
	double r;
	double pi=3.142;
	Circle(double r){this.r=r;}
	@Override
	double getPerimeter() {
		// TODO Auto-generated method stub
		return 2*pi*r;
	}

	@Override
	double getArea() {
		// TODO Auto-generated method stub
		return pi*r*r;
	}
	
}






8.学生、大学生、研究生类-2

修改题目(学生类-本科生类-研究生类) 为学生类添加属性成绩,添加相应的get和set函数,添加函数getGrade()表示获得等级,该函数应当为抽象函数。 本科生和研究生的等级计算方式不同,如下所示

本科生标准 研究生标准
[80–100) A [90–100) A
[70–80) B [80–90) B
[60–70) C [70–80) C
[50–60) D [60–70) D
50 以下 E 60 以下 E

main函数中构造两个学生Student变量,分别指向本科生和研究生对象,调用getGrade()方法输出等级

输入描述:

本科生类信息,学号、姓名、性别、专业、成绩 研究生类信息,学号、姓名、性别、专业、导师、成绩

输出描述:

本科生等级 研究生等级

输入样例:

在这里给出一组输入。例如:

2 chen female cs 90
3 li male sc wang 80

输出样例:

在这里给出相应的输出。例如:

A
B

自己的代码:

import java.util.Scanner;
abstract class Student{
	int no;
	String name,sex;
	String major;
	int grade;
	Student(int no,String name,String sex,String major,int grade){this.no=no;this.name=name;this.sex=sex;this.major=major;this.grade=grade;}
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getGrade1() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	
	public String getMajor() {
		return major;
	}
	public void setMajor(String major) {
		this.major = major;
	}
	abstract String getGrade();
		
	
}
class CollegeStudent extends Student{
	
	CollegeStudent(int no,String name,String sex,String major,int grade){
		super(no,name,sex,major,grade);
		
	}

	@Override
	String getGrade() {
		String tem;
		if(grade>=80 && grade<100)tem="A";
		else if(grade>=70)tem="B";
		else if(grade>=60)tem="C";
		else if(grade>=50)tem="D";
		else tem="E";
		return tem;
		
	}
	
	
	
}
class GraduateStudent extends Student{
	String supervisor;
	GraduateStudent(int no, String name, String sex, String major,String supervisor,int grade) {
		super(no, name, sex, major,grade);
		// TODO Auto-generated constructor stub
		this.supervisor=supervisor;
	}
	@Override
	String getGrade() {
		String tem;
		if(grade>=90 && grade<100)tem="A";
		else if(grade>=80)tem="B";
		else if(grade>=70)tem="C";
		else if(grade>=60)tem="D";
		else tem="E";
		return tem;
		
	}
	
}
public class Main{
    public static void main(String[] args) {
         Scanner in= new Scanner(System.in);      
        Student[] stu=new Student[2];
        stu[0]=new CollegeStudent(in.nextInt(),in.next(),in.next(),in.next(),in.nextInt());
        stu[1]=new GraduateStudent(in.nextInt(),in.next(),in.next(),in.next(),in.next(),in.nextInt());
        for(Student s:stu) {
        System.out.println(s.getGrade());
        }

        
    }
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说的白是什么白_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值