Java程序设计 作业4

6-1 学生、大学生、研究生类

分数 20

全屏浏览题目

切换布局

作者 温彦

单位 山东科技大学

定义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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


class Student
{
	private int id;
	private String name;
	private String sex;
	Student(int id,String name,String sex)
	{
		this.id = id;
		this.name = name;
		this.sex = sex;
	}
	public String getName()
	{
		return name;
	}
	public void attendClass(String className)
	{
		System.out.println(name+"is attending class");
	}
	public void print()
	{
		System.out.print("no: "+id+"\n"+"name: "+name+"\n"+"sex: "+sex+"\n");
	}
}

class CollegeStudent extends Student
{
	private String major;
	CollegeStudent(int id,String name,String sex,String major)
	{
		super(id,name,sex);
		this.major = major;
	}
	public String getName()
	{
		return super.getName();
	}
	public void print()
	{
		super.print();
		System.out.print("major: "+major+"\n");
	}
}
class GraduateStudent extends CollegeStudent
{
	private String supervisor;
	GraduateStudent(int no,String name,String sex,String major,String supervisor)
	{
		super(no,name,sex,major);
		this.supervisor = supervisor;
	}
	public void print()
	{
		super.print();
		System.out.print("supervisor: "+supervisor+"\n");
	}
	public void doResearch()
	{
		System.out.println(super.getName()+" is doing research");
	}
}

6-2 图书和音像租赁

分数 15

全屏浏览题目

作者 温彦

单位 山东科技大学

图书和音像店提供出租服务,包括图书和DVD的出租。图书包括书名(String,一个词表示)和价格(double),DVD包括片名(String,一个词表示)。它们都是按天出租,但租金计算方式却不同,图书的日租金为图书价格的1%,DVD的日租金为固定的1元。构造图书和DVD类的继承体系,它们均继承自Media类,且提供方法getDailyRent()返回日租金,构造音像店类MediaShop,提供静态函数double calculateRent(Media[] medias, int days)。
在main函数中构造了Media数组,包含图书和DVD的对象,调用calculateRent方法得到并输出租金,保留小数点两位

输入描述:

待租图书和DVD的数量

图书和DVD的详细信息

租借天数

输出描述:

总的租金

裁判测试程序样例:

 
 

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); Media[] ms = new Media[n]; for (int i=0; i<n; i++) { String type = sc.next(); if (type.equals("book")) { ms[i] = new Book(sc.next(), sc.nextDouble()); }else { ms[i] = new DVD(sc.next()); } } double rent = MediaShop.calculateRent(ms, sc.nextInt()); System.out.printf("%.2f", rent); } } /* 请在这里填写答案 */

输入样例:

5
book Earth 25.3
book Insights 34
dvd AI
dvd Transformer
book Sun 45.6
20

输出样例:

60.98

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

abstract class Media
{
	 abstract public double getDailyRent();
}

class Book extends Media
{
	private String name;
	private double price;
	Book(String name,double price)
	{
		this.name = name;
		this.price = price;
	}
	public double getDailyRent()
	{
		return price*0.01;
	}
}
class DVD extends Media
{
	private String name;
	DVD(String name)
	{
		this.name = name;
	}
	public double getDailyRent()
	{
		return 1;
	}
}
class MediaShop 
{
	public static double calculateRent(Media[] m,int days)
	{
		double sum = 0;
		for(int i=0;i<m.length;i++)
		{
			sum+=m[i].getDailyRent();
		}
		return sum*days;
	}
}

6-3 Animal动物工厂

分数 20

全屏浏览题目

作者 sy

单位 西南石油大学

已知有如下Animal抽象类,请编写其子类Dog类与Cat类,另外再编写一个生产动物的Factory工厂类,具体要求如下。

已有的Animal抽象类定义:

 
 

abstract class Animal{ private String name; //名字 private int age; //年龄 public abstract void info(); //返回动物信息 public abstract void speak(); //动物叫 public Animal(String name, int age) { this.name = name; this.age = age; } 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; } }

需要你编写的Dog子类:

增加violence(凶猛程度)属性(int型),重写info和speak方法

info方法输出Dog的name、age和violence属性,输出格式样例为:该狗的名字是Mike,年龄是2岁,凶猛程度是78度 (注意:输出结果中没有空格,逗号为英文标点符号)

speak方法输出Dog 的叫声,输出格式样例为:旺旺

需要你编写的Cat子类:

增加mousingAbility(捕鼠能力)属性(int型),重写info和speak方法

info方法输出Cat的name、age和mousingAbility属性,输出格式样例为:该猫的名字是Kitty,年龄是4岁,捕鼠能力是88分 (注意:输出结果中没有空格,逗号为英文标点符号)

speak方法输出Cat 的叫声,输出格式样例为:喵喵

需要你编写的Factory工厂类:

Animal getAnimalByType(int type,String name, int age, int ownAttribute):根据传入的子类类型和属性值,返回一个Animal类型的上转型对象,type为1代表狗类,type为2代表猫类

已有的Main类定义:

 
 

public class Main { public static void main(String[] args) { Factory factory=new Factory(); Scanner input=new Scanner(System.in); int type=input.nextInt(); String name=input.next(); int age=input.nextInt(); int ownAttribute=input.nextInt(); Animal a=factory.getAnimalByType(type, name, age, ownAttribute); a.info(); a.speak(); System.out.println(a.getName()); System.out.println(a.getAge()); input.close(); } } /*请在这里填写你编写的Dog类、Cat类和Factory类 */

输入样例:

(本题的评分点与输入样例无关)

1 Mike 2 78

输出样例:

该狗的名字是Mike,年龄是2岁,凶猛程度是78度
旺旺
Mike
2

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

class Dog extends Animal
{
	private int violence;
	Dog(String name,int age,int v)
	{
		super(name,age);
		this.violence = v;
	}
	public void info()
	{
		System.out.println("该狗的名字是"+super.getName()+",年龄是"+super.getAge()+"岁,凶猛程度是"+violence+"度");
	}
	public void speak()
	{
		System.out.println("旺旺");
	}
}
class Cat extends Animal
{
	private int mousingAbility;
	Cat(String name,int age,int m)
	{
		super(name,age);
		this.mousingAbility = m;
	}
	public void info()
	{
		System.out.println("该猫的名字是"+super.getName()+",年龄是"+super.getAge()+"岁,捕鼠能力是"+mousingAbility+"分");
	}
	public void speak()
	{
		System.out.println("喵喵");
	}
}
class Factory
{
	public Animal getAnimalByType(int type,String name, int age, int ownAttribute)
	{
		Animal animal;
		if(type==1)
		{
			Animal dog = new Dog(name,age,ownAttribute);
			return dog;
		}
		else
		{
			Animal cat = new Cat(name,age,ownAttribute);
			return cat;
		}
	}
}

6-4 Animal接口

分数 20

全屏浏览题目

作者 sy

单位 西南石油大学

已知有如下Animal抽象类和IAbility接口,请编写Animal子类Dog类与Cat类,并分别实现IAbility接口,另外再编写一个模拟器类Simulator调用IAbility接口方法,具体要求如下。

已有的Animal抽象类定义:

 
 

abstract class Animal{ private String name; //名字 private int age; //年龄 public Animal(String name, int age) { this.name = name; this.age = age; } 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; } }

已有的IAbility接口定义:

 
 

interface IAbility{ void showInfo(); //输出动物信息 void cry(); //动物发出叫声 }

需要你编写的Dog子类:

实现IAbility接口

showInfo方法输出Dog的name、age,输出格式样例为:我是一只狗,我的名字是Mike,今年2岁(注意:输出结果中没有空格,逗号为英文标点符号)

cry方法输出Dog 的叫声,输出格式样例为:旺旺

需要你编写的Cat子类:

实现IAbility接口

showInfo方法输出Cat的name、age,输出格式样例为:我是一只猫,我的名字是Anna,今年4岁(注意:输出结果中没有空格,逗号为英文标点符号)

cry方法输出Cat 的叫声,输出格式样例为:喵喵

需要你编写的模拟器类Simulator:

void playSound(IAbility animal):调用实现了IAbility接口类的showInfo和cry方法,并显示传入动物的名字和年龄

已有的Main类定义:

 
 

public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); IAbility animal=null; int type=input.nextInt(); String name=input.next(); int age=input.nextInt(); if (type==1) animal=new Dog(name,age); else animal=new Cat(name,age); Simulator sim=new Simulator(); sim.playSound(animal); input.close(); } } /***请在这里填写你编写的Dog类、Cat类和Simulator类** */

输入样例:

(本题的评分点与输入样例无关)

第一个整数代表动物类型,1为狗类,2为猫类

1 Mike 2

输出样例:

我是一只狗,我的名字是Mike,今年2岁
旺旺
Mike
2

代码长度限制

16 KB

时间限制

4000 ms

内存限制

64 MB

class Dog extends Animal implements IAbility
{
	Dog(String name,int age)
	{
		super(name,age);
	}
	public String getName()
	{
		return super.getName();
	}
	public int getAge()
	{
		return super.getAge();
	}
	public void showInfo()
	{
		System.out.println("我是一只狗,我的名字是"+super.getName()+",今年"+super.getAge()+"岁");
	}
	public void cry()
	{
		System.out.println("旺旺");
	}
}
class Cat extends Animal implements IAbility
{
	Cat(String name,int age)
	{
		super(name,age);
	}
	public String getName()
	{
		return super.getName();
	}
	public int getAge()
	{
		return super.getAge();
	}
	public void showInfo()
	{
		System.out.println("我是一只猫,我的名字是"+super.getName()+",今年"+super.getAge()+"岁");
	}
	public void cry()
	{
		System.out.println("喵喵");
	}
}

class Simulator
{
	public void playSound(IAbility animal)
	{
		animal.showInfo();
		animal.cry();
		if(animal instanceof Dog)
		{
			Dog dog = (Dog) animal;
			System.out.println(dog.getName());
			System.out.println(dog.getAge());
		}
		else
		{
			Cat cat = (Cat)animal;
			System.out.println(cat.getName());
			System.out.println(cat.getAge());
		}
	}
}

6-5 软件外包公司

分数 15

全屏浏览题目

作者 刘凤良

单位 天津仁爱学院

有一家软件外包公司,可以外派开发人员,该软件公司有两个角色,普通开发人员和项目管理,它们有共同的属性"姓名","年龄" 普通开发人员有自己特有的属性"工作经验",他的工作内容是"开发项目",项目经理有自己特有的属性“项目管理经验”,他的工作内容是项目管理,对外的报价是普通开发人员每天 500 元,超过 60 天每天 400 元,项目经理每天 800 元,超过 60 天每天 600 元,有一家银行需要1名项目经理,2 名开发人员,现场开发 90 天,计算银行需要付给软件公司的总金额。

函数接口定义:

 
 

void work(); //工作内容 double calcMoney(int days); //计算开发 days 天所需金额

裁判测试程序样例:

 
 

import java.util.Scanner; public class Main { public static void main(String[] args) { Employee[] employees = new Employee[3]; Developer d1 = new Developer("小王", 23); Developer d2 = new Developer("小李", 22); Manager manager = new Manager("老张", 32); employees[0] = d1; employees[1] = d2; employees[2] = manager; //输入开发天数 Scanner input = new Scanner(System.in); int days = input.nextInt(); //计算所需金额 double totalMoney = 0; for (Employee employee : employees) { totalMoney += employee.calcMoney(days); } System.out.println("开发:" + days + "天,总共需要支付:" + totalMoney + "元!"); } } /* 请在这里填写答案 */

输入样例:

90

输出样例:

开发:90天,总共需要支付:126000.0元!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

abstract class Employee
{
	private String name;
	private int age;
	Employee(String name,int age)
	{
		this.name = name;
		this.age = age;
	}
	public abstract void work();  //工作内容
	public abstract double calcMoney(int days);  //计算开发 days 天所需金额
}
class Developer extends Employee
{
	private String e;
	Developer(String name,int age)
	{
		super(name,age);
	}
	public void work()
	{
		System.out.println("开发项目");
	}
	public double calcMoney(int days)
	{
		if(days>=0&&days<=60)
			return days*500;
		else
			return days*400;
	}
}
class Manager extends Employee
{
	private String mg;
	Manager(String name,int age)
	{
		super(name,age);
	}
	public void work()
	{
		System.out.println("项目管理");
	}
	public double calcMoney(int days)
	{
		if(days>=0&&days<=60)
			return days*800;
		else
			return days*600;
	}
}

7-1 集体评分2

分数 10

全屏浏览题目

作者 王从银

单位 吉首大学

程序填空题。请补充以下代码,完成题目要求。(注意:需要提交完整代码) 有一个团队由5个人组成。他们每个人给指导老师一个分数,去掉最高分,去掉最低分,剩下的3个分数的平均分就是该团队对指导老师的评分。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                int[] grade = new int[5];
                for(int i=0; i<grade.length; i++){
                      grade[i] = in.nextInt();
                 }

                RR rr = new RT(grade);
                double dd = rr.mark();
                System.out.printf("%.2f",dd);
    }
}
interface RR{
   double mark();
}
class RT implements RR{
   int[] grade;
   public RT(int[] grade){
      this.grade = grade;
   }
}

输入格式:

在一行中给出5个不超过10的正整数(从小到大排列)。

输出格式:

输出集体评分,保留小数点后两位。

输入样例:

1 2 4 6 9

输出样例:

4.00

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
                Scanner in = new Scanner(System.in);
                int[] grade = new int[5];
                for(int i=0; i<grade.length; i++){
                      grade[i] = in.nextInt();
                 }

                RR rr = new RT(grade);
                double dd = rr.mark();
                System.out.printf("%.2f",dd);
    }
}
interface RR{
   double mark();
}
class RT implements RR{
   int[] grade;
   public RT(int[] grade){
      this.grade = grade;
   }
   public double mark()
   {
	   double v = 0;
	   for(int i=1;i<grade.length-1;i++)
	   {
		   v+=grade[i];
	   }
	   return v/(grade.length-2);
   }
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值