Java OJ 作业3

131 - 员工类

Description

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

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

Input

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

Output

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

Sample Input

12000
3000 5000
22 200

Sample Output

12000
8000
4400

HINT


MyAnswer

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Employee e1,e2,e3;
        Scanner scan = new Scanner(System.in);
        int mangersalary = scan.nextInt();
        e1 = new Manager(mangersalary);
        int salesmanbase = scan.nextInt();
        int salesmanextra = scan.nextInt();
        e2 = new Salesman(salesmanbase,salesmanextra);
        int days = scan.nextInt();
        int workerbase = scan.nextInt();
        e3 = new Worker(days,workerbase);
        System.out.println(e1.getSalary());
        System.out.println(e2.getSalary());
        System.out.println(e3.getSalary());
    }
}
class Employee {
    int salary;
    public int getSalary(){
       return 0;
    }
}

class Manager extends Employee{
    Manager(int s){
        this.salary = s;
    }

    public int getSalary() {
        return salary;
    }
}


class Salesman extends Employee{
    int base;
    int extra;
    Salesman(int a,int b){
        this.base = a;
        this.extra = b;
        this.salary = a+b;
    }

    @Override
    public int getSalary() {
        return salary;
    }
}

class Worker extends Employee{
    int days;
    int base;
    Worker(int d,int b){
        this.base = b;
        this.days = d;
        this.salary = d*b;
    }

    public int getSalary(){
        return salary;
    }
}

132 - 员工类-2

Description

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

Input

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

Output

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

Sample Input

12000
3000 5000
22 200

Sample Output

12000
8000
4400

HINT


MyAnswer

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Employee e1,e2,e3;
        Scanner scan = new Scanner(System.in);
        int mangersalary = scan.nextInt();
        e1 = new Manager(mangersalary);
        int salesmanbase = scan.nextInt();
        int salesmanextra = scan.nextInt();
        e2 = new Salesman(salesmanbase,salesmanextra);
        int days = scan.nextInt();
        int workerbase = scan.nextInt();
        e3 = new Worker(days,workerbase);
        System.out.println(e1.getSalary());
        System.out.println(e2.getSalary());
        System.out.println(e3.getSalary());
    }
}
abstract class Employee {
    int salary;
    public abstract int getSalary();
}

class Manager extends Employee{
    Manager(int s){
        this.salary = s;
    }

    public int getSalary() {
        return salary;
    }
}


class Salesman extends Employee{
    int base;
    int extra;
    Salesman(int a,int b){
        this.base = a;
        this.extra = b;
        this.salary = a+b;
    }

    @Override
    public int getSalary() {
        return salary;
    }
}

class Worker extends Employee{
    int days;
    int base;
    Worker(int d,int b){
        this.base = b;
        this.days = d;
        this.salary = d*b;
    }

    public int getSalary(){
        return salary;
    }
}

133 - Shape类-2

Description

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

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

Input

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

Output

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

Sample Input

1
1 2
2

Sample Output

4.00 1.00
6.00 2.00
12.57 12.57

HINT


MyAnswer

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

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

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

        scan.close();
    }
}

abstract class Shape{
    public abstract double getPerimeter();
    public abstract double getArea();
}

class Square extends Shape {
    double length;
    Square(double length){
        this.length = length;
    }
    @Override
    public double getPerimeter(){
        return 4*length;
    }

    @Override
    public double getArea() {
        return length*length;
    }
}

class Rectangle extends Square{
    double width;
    Rectangle(double length,double width){
        super(length);
        this.width = width;
    }

    @Override
    public double getArea() {
        return length*width;
    }

    @Override
    public double getPerimeter() {
        return 2*(length+width);
    }
}

class Circle extends Shape {
    double r;
    Circle(double rr){
        this.r = rr;
    }

    @Override
    public double getPerimeter() {
        return 2*Math.PI*r;
    }

    @Override
    public double getArea() {
        return Math.PI*r*r;
    }
}

134 - Shape类-3

Description

修改题目133,将Shape类改为抽象类

Input

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

Output

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

Sample Input

1
1 2
2

Sample Output

4.00 1.00
6.00 2.00
12.57 12.57

HINT


MyAnswer

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

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

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

        scan.close();
    }
}

abstract class Shape{
    public abstract double getPerimeter();
    public abstract double getArea();
}

class Square extends Shape {
    double length;
    Square(double length){
        this.length = length;
    }
    @Override
    public double getPerimeter(){
        return 4*length;
    }

    @Override
    public double getArea() {
        return length*length;
    }
}

class Rectangle extends Square{
    double width;
    Rectangle(double length,double width){
        super(length);
        this.width = width;
    }

    @Override
    public double getArea() {
        return length*width;
    }

    @Override
    public double getPerimeter() {
        return 2*(length+width);
    }
}

class Circle extends Shape {
    double r;
    Circle(double rr){
        this.r = rr;
    }

    @Override
    public double getPerimeter() {
        return 2*Math.PI*r;
    }

    @Override
    public double getArea() {
        return Math.PI*r*r;
    }
}

137 - 学生、大学生、研究生类-2

Description

修改题目125(学生类-本科生类-研究生类)
为学生类添加属性成绩,添加相应的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()方法输出等级

Input

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

Output

本科生等级
研究生等级

Sample Input

2 chen female cs 90
3 li male sc wang 80

Sample Output

A
B

HINT


MyAnswer

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

        no = scan.nextInt();
        name = scan.next();
        sex = scan.next();
        major = scan.next();
        String supervisor = scan.next();
        score = scan.nextInt();
        s2 = new GraduateStudent(no, name, sex, major, supervisor, score);

        s1.getGrade();
        s2.getGrade();

        scan.close();
    }
}

abstract class Student {
    int no;
    String name;
    String sex;
    int score;
    Student(int no, String name, String sex, int score){
        this.name = name;
        this.no = no;
        this.sex = sex;
        this.score = score;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public int getNo() {
        return no;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public void print(){
        System.out.println("no: "+getNo());
        System.out.println("name: "+getName());
        System.out.println("sex: "+getSex());
    }
    public abstract void getGrade();
}

class CollegeStudent extends Student {
    String major;
    CollegeStudent(int no, String name, String sex, String major, int score){
        super(no,name,sex,score);
        this.major = major;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public void print(){
        super.print();
        System.out.println("major: "+major);
    }

    public void getGrade(){
        if(score>=80){
            System.out.println("A");
        }else if(score>=70){
            System.out.println("B");
        }else if(score>=60){
            System.out.println("C");
        }else if(score>=50){
            System.out.println("D");
        }else{
            System.out.println("E");
        }

    }
}


class GraduateStudent extends CollegeStudent {
    String supervisor;

    GraduateStudent(int no, String name, String sex, String major, String supervisor, int score) {
        super(no, name, sex, major, score);
        this.supervisor = supervisor;
    }

    public String getSupervisor() {
        return supervisor;
    }

    public void setSupervisor(String supervisor) {
        this.supervisor = supervisor;
    }

    public void print() {
        super.print();
        System.out.println("supervisor: " + supervisor);
    }

    public void doResearch() {
        System.out.println(getName() + " is doing research");
    }

    public void getGrade() {
        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 80) {
            System.out.println("B");
        } else if (score >= 70) {
            System.out.println("C");
        } else if (score >= 60) {
            System.out.println("D");
        } else {
            System.out.println("E");
        }
    }
}

138 - 打球过程

Description

利用模板方法来构造相关类实现下述过程:
各种球类的玩法虽然不同,但是球类比赛的过程是类似的,都包含如下几个步骤:
1球员报道-->2比赛开始-->3比赛-->4比赛结束-->5公布比赛成绩,且其中1 2 4步相同 第3步根据球类不同,玩法不同,第5步根据得分不同,公布方式结果不同
构造类BallMatch表示球类比赛,包含方法compete表示真个比赛过程
构造各个比赛过程的函数checkin,start,play,end,annouceResult
打印信息如下:
now checking in
now starting
now playing football
now ending
now annoucing result: 2-3
构造类FootballMatch和BasketBallMatch,实现具体的比赛过程。

在main函数中,读入整数i,如果为1,则构造一个足球比赛过程,如果为2则构造一个篮球比赛过程
打印比赛过程

Input

比赛类型 比分

Output

比赛过程信息

Sample Input

1 2-3

Sample Output

now checking in
now starting
now playing football
now ending
now annoucing result: 2-3

HINT


MyAnswer

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        BallMatch bm;
        int i;
        Scanner scan = new Scanner(System.in);
        i = scan.nextInt();
        String score = scan.next();
        switch (i){
            case 1:
                bm = new FootballMatch(score);
                bm.compete(score);
                break;
            case 2:
                bm = new BasketBallMatch(score);
                bm.compete(score);
                break;
        }
    }
}

abstract class BallMatch{
    public final void compete(String res){
        checkin();
        start();
        play();
        end();
        annouceResult(res);
    }
    public void checkin(){
        System.out.println("now checking in");
    }
    public void start(){
        System.out.println("now starting");
    }
    public abstract void play();
    public void end(){
        System.out.println("now ending");
    }
    public void annouceResult(String result){
        System.out.println("now annoucing result: "+result);
    }
}

class FootballMatch extends BallMatch{
    String result;
    FootballMatch(String res){
        this.result = res;
    }
    public void play(){
        System.out.println("now playing football");
    }
}

class BasketBallMatch extends BallMatch{
    String result;
    BasketBallMatch(String res){
        this.result = res;
    }
    public void play(){
        System.out.println("now playing basketball");
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 116 - Person类 Description Input Output Sample Input Sampl...
    V0W阅读 1,662评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 重点是妈妈,我着急也没用,找哥哥也没用,只有我自己改变了带动妈妈和哥哥的思维改变才可以 早上看到妈妈吃饭的样子,我...
    张严阅读 154评论 0 0
  • 【一】 瓷器与丝绸同成为对外出口的大宗商品 是在明清时期。而在此之前 丝绸早已随着驼队独自探了千年的路。火热而奔放...
    顾顾顾顾顾阿年阅读 150评论 0 2
  • 玉林三月烟雨浓,五彩田园雾朦胧。油菜花海香扑面,蝶舞蜂鸣忙不停。
    九天神游阅读 136评论 0 0