《Java程序设计》实验报告

2023-11-07

实验内容:面向对象程序设计

1、定一个名为Person的类,其中含有一个String类型的成员变量name和一个int类型的成员变量age, 分别为这两个变量定义访问方法和修改方法,另外再为该类定义一个名为speak的方法, 在其中输出name和age的值。编写一应用程序,使用上面定义的Person类,实现数据的访问、修改。

package com.itheima.demo;



public class Person {

    private String name;

    private int 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;

    }

    public void speak(){

        System.out.println("Name:"+getName());

        System.out.println("Age:"+getAge());

    }

}

class Persontest1{

    public static void main(String[] args) {

        Person P=new Person();

        P.setName("李四");

        P.setAge(21);

        P.speak();

    }

}
 

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

2、定义一个名为Rectangle的类表示矩形,其中含有length、width两个double型的成员变量表示矩形的长和宽。 要求为每个变量定义访问方法和修改方法,定义求矩形周长的方法perimeter()和求面积的方法area()。 编写一个类测试这个矩形类。3、为上题(第2题)的Rectangle类编写一个带参数的构造方法,通过用户给出的长、宽创建矩形对象, 再编写一个默认构造方法(无参构造方法),使用默认构造方法创建矩形对象,然后通过setter方法为对象属性赋值。编写一个类测试这个矩形类。

package com.itheima.demo;

public class Rectangle {

    private double length;

    private double width;



    public double getLength() {

        return length;

    }



    public void setLength(double length) {

        this.length = length;

    }



    public double getWidth() {

        return width;

    }



    public void setWidth(double width) {

        this.width = width;

    }

    public double perimeter(){

        return (getLength()+getWidth())*2;

    }

    public double area(){

        return getLength()*getWidth();

    }

    public Rectangle(double length,double width){

        this.length=length;

        this.width=width;

    }

    public Rectangle(){



    }

}

public class Rectangletest {

    public static void main(String[] args) {

        Rectangle R=new Rectangle();

        R.setWidth(2.0);

        R.setLength(3.0);

        System.out.println("周长:"+R.perimeter());

        Rectangle M=new Rectangle(4,2);

        System.out.println("面积:"+M.area());

    }

}
正在上传…重新上传取消

4、定义一个Triangle类表示三角形,其中包括3个double型变量a、b、c,用于表示3条边长。为该类定义两个构造方法 :默认构造方法(无参构造方法)设置三角形的3条边长都为0.0;带3个参数的构造方法通过传递3个参数创建三角形 对象。定义求三角形面积的方法area(),面积计算公式为:area=Math.sqrt(s*(s-a)(s-b)(s-c)),其中s=(a+b+c) /2。编写程序测试该类。

package com.itheima.demo;



public class Triangle {

    private double a;

    private double b;

    private double c;



    public Triangle(double a, double b, double c) {

        this.a = a;

        this.b = b;

        this.c = c;

    }



    public Triangle() {



    }

    public double area(){

        double s=(a+b+c)/2;

        return Math.sqrt(s*(s-a)*(s-b)*(s-c));

    }

}
package com.itheima.demo;



public class Triengletest {

    public static void main(String[] args) {

        Triangle T=new Triangle();

        System.out.println(T.area());

        Triangle T1=new Triangle(10,10,10);

        System.out.println(T1.area());

    }



}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

5、定义一个表示二维平面上的点Point类,并在该类中定义一个计算两点之间距离的方法,其格式如下:

• public double getDistance(Point p)

编写一个类测试这个Point类。

package com.itheima.demo;



public class Point {

    private double x;

    private double y;

    public Point(double x,double y){

        this.x=x;

        this.y=y;

    }

    public double getDistance(Point p){

        return Math.sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));

    }

}

public class Pointtest {

    public static void main(String[] args) {

        Point P=new Point(2,3);

        Point P1=new Point(5,7);

        double part=P1.getDistance(P);

        System.out.println("两点相距:"+part);

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

  1. 定义一个名为Student的类,它继承Person类(Person类中包含String类型的name和int类型的age),其中定义sno(表示学号)和major(表示专业)两个成员变量和封装这两个变量的方法。编写主程序,检查新建类中的所有变量和方法。

package com.itheima.demo;



public class Person {

    private String name;

    private int 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;

    }

    public Person(String name,int age){

        this.name=name;

        this.age=age;

    }

    public void speak(){

        System.out.println("Name:"+getName());

        System.out.println("Age:"+getAge());

    }

}
 
class Student extends Person{

private String sno;

private String major;

public Student(String name,int age,String sno,String major){

    super(name,age);

    this.sno=sno;

    this.major=major;

}

public void speak(){

    System.out.println("name="+getName()+"age="+getAge()+"sno="+sno+"major="+major);

}

}

public class PersonStudentStest {

    public static void main(String[] args) {

        Student S=new Student("张三",21,"6021203152","计算机");

        S.speak();

    }



}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

2、设计一个汽车类Auto,其中包含一个表示速度的double型的成员变量speed和表示启动的start()方法、表示加速的speedUp()方法以及表示停止的stop()方法。再设计一个Auto类的子类Bus表示公共汽车,在Bus类中定义一个int型的、表示乘客数量的成员变量passenger,另外定义两个方法gotOn()和gotOff()表示乘客上车和下车。编写一个应用程序,测试Bus类的使用。

package com.itheima.demo;



public class Auto {

    private double speed;

    public void start(){

        System.out.println("启动");

    }

    public void speedUp(){

        System.out.println("加速");

    }

    public void stop(){

        System.out.println("停止");

    }

}

public class Bus extends Auto{

    private int passenger;

    public void gotOn(){

        System.out.println("乘客上车");

    }

    public void gotOff(){

        System.out.println("乘客下车");

    }

}

public class AutoBustest {

    public static void main(String[] args) {

        Bus B=new Bus();

        B.gotOff();

        B.gotOn();

        B.speedUp();

        B.start();

        B.stop();

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

3、定义一个名为Cuboid的长方体类,使其继承Rectangle类(Rectangle类中包含double类型的length和width),其中包含一个表示高度的double型成员变量height,定义一个构造方法Cuboid(double length,double width,double height)和一个求长方体体积的volume()方法。编写一个应用程序,在其中求一个长、宽、高分别为10、5、2的长方体的体积。

package com.itheima.demo;



public class Rectangle {

    private double length;

    private double width;



    public double getLength() {

        return length;

    }



    public void setLength(double length) {

        this.length = length;

    }



    public double getWidth() {

        return width;

    }



    public void setWidth(double width) {

        this.width = width;

    }

    public double perimeter(){

        return (getLength()+getWidth())*2;

    }

    public double area(){

        return getLength()*getWidth();

    }

    public Rectangle(double length,double width){

        this.length=length;

        this.width=width;

    }

    public Rectangle(){



    }

}

public class Cuboid extends Rectangle{

    private double height;

    public Cuboid(double length,double width,double height){

        super(length,width);

        this.height=height;

    }

    public double volume(){

        return getLength()*getWidth()*height;

    }

}

public class CuboidRectangleTest {

    public static void main(String[] args) {

        Cuboid C=new Cuboid(10,5,2);

        System.out.println(C.volume());

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

4、定义一个表示圆的Circle类,其中有表示半径的double型的属性radius,计算圆周长的perimeter方法和计算面积的area方法。在Circle类的基础上,定义圆柱体Cylinder类和球体Sphere类,它们分别具备计算表面积的area方法和体积的volume方法,编写测试类进行测试。

package com.itheima.demo;



public class Circle {

    private double radius;



    public double getRadius() {

        return radius;

    }



    public double Perimeter(){

        return 2*(Math.PI)*radius;

    }

    public double area(){

        return Math.PI*radius*radius;

    }

    public Circle(double radius){

        this.radius=radius;

    }

}

public class Cylinder extends Circle{

    private double height;

    public Cylinder(double radius,double height){

        super(radius);

        this.height=height;

    }

    public double area() {

        return (Math.PI*getRadius()*getRadius()*2)+(Math.PI*2*getRadius()*height);

    }

    public double volume(){

        return Math.PI*getRadius()*getRadius()*height;

    }

}

public class Sphere extends Circle{



public double area(){

    return Math.PI*4*getRadius()*getRadius();

}

public double volume(){

    return (4/3.0)*Math.PI*getRadius()*getRadius()*getRadius();

}



    public Sphere(double radius) {

        super(radius);

    }

}

public class CircleTest {

    public static void main(String[] args) {

        Circle C=new Circle(2);

        System.out.println("");

        System.out.println("面积:"+C.area());

        System.out.println("周长:"+C.Perimeter());

        Cylinder cylinder = new Cylinder(2,3);

        System.out.println("圆柱体");

        System.out.println("面积:"+cylinder.area());

        System.out.println("体积:"+cylinder.volume());

        Sphere sphere=new Sphere(3);

        System.out.println("球体");

        System.out.println("面积:"+sphere.area());

        System.out.println("体积:"+sphere.volume());

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

5、编写一个银行账户类,类的构成包括:

(1)数据成员:用户的账号名称、用户的账户余额;

(2)方法包括:开户(设置账户名称及余额),利用构造方法完成;

(3)查询余额。

package com.itheima.demo;





public class Bank {

    private String name;

    private int account;

    public Bank(String name,int account){

        this.name=name;

        this.account=account;

    }

    public void search(){

        System.out.println("姓名:"+name);

        System.out.println("账户余额:"+account);

    }

}

public class Banktest {

    public static void main(String[] args) {

        Bank bank=new Bank("李四",3000);

        bank.search();

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

6、接口应用:接口继承与接口实现

具体要求:

(1)Biology生物接口中定义了breathe()抽象方法;

(2)Animal动物接口继承了Biology接口,增加eat()和sleep()两个抽象方法;

(3)Human人类接口继承了Animal接口,增加think()和learn()两个抽象方法;

(4)定义一个普通人类Person实现Human接口,并进行测试。

package com.itheima.demo;



public interface Biology {

    public void breathe();

}

public interface Animal extends Biology{

    public abstract void eat();

    public abstract void sleep();

}

public interface Human extends Animal {

    public abstract void think();

    public abstract void learn();

}

public class Person1 implements Human{

    @Override

    public void breathe() {

        System.out.println("呼吸");

    }



    @Override

    public void eat() {

        System.out.println("");

    }



    @Override

    public void sleep() {

        System.out.println("睡觉");

    }



    @Override

    public void think() {

        System.out.println("认为");

    }



    @Override

    public void learn() {

        System.out.println("学习");

    }

}

public class PersonTest {

    public static void main(String[] args) {

        Person1 person1=new Person1();

        person1.breathe();

        person1.eat();

        person1.learn();

        person1.sleep();

        person1.think();

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

7、动态多态应用:企业员工工资管理

具体要求:某公司的雇员分为以下若干类:

(1)Employee员工类,包含受保护的属性name(姓名)、birthDate(出生日期),public double getSalary(Employee e)方法(该方法根据传入不同类别的员工,工资计算方法则返回其本月的工资);

(2)SalariedEmployee类继承Employee类,代表领取固定工资的员工,包含私有属性salary(固定工资);

(3)HourlyEmployee类继承Employee类,代表按小时拿工资的员工,包含私有属性hourSalary(每小时的工资)、hours(每月工作的小时数)。工资计算方法:月工资=hourSalary * hours,每月工作超出160小时的部分,按照1.5倍小时工资发放。

(4)SalesEmployee类继承Employee类,代表销售人员,包含受保护的属性sale(月销售额),commissionRate(提成率)。工资计算方法:月工资=sale * commissionRate。

(5)BasePlusSalesEmployee类继承SalesEmployee类,代表有固定底薪的销售人员,工资由底薪加上销售提成部分组成。其私有属性basicSalary(底薪)。工资计算方法:月工资=basicSalary + sale * commissionRate。

(6)根据要求创建SalariedEmployee、HourlyEmployee、SalesEmployee、BasePlusSalesEmployee类的对象各一个,并计算某个月这4个对象的工资。

package com.itheima.demo;



public class Employee {

    protected String name;

    protected String birthDate;

    public double getSalary(Employee e){

        return 0;

    }



    public Employee(String name, String birthDate) {

        this.name = name;

        this.birthDate = birthDate;

    }

}

public class SalariedEmployee extends Employee {

    private double salary;

    public double getSalary(){

        return salary;

    }



    public SalariedEmployee(String name, String birthDate, double salary) {

        super(name, birthDate);

        this.salary = salary;

    }

}

public class HourlyEmployee extends Employee {

    private double hourSalary;

    private double hours;

    public double getSalary(){

        if(hours>160){

            return hourSalary*160+hourSalary*(hours-160)*1.5;

        }

        else {

            return hourSalary * hours;

        }

    }

    public HourlyEmployee(String name, String birthDate, double hourSalary, double hours) {

        super(name, birthDate);

        this.hourSalary = hourSalary;

        this.hours = hours;

    }

}

public class SalesEmployee extends Employee {

    protected double sale;

    protected double commissionRate;

    public double getSalary(){

        return sale*commissionRate;

    }



    public SalesEmployee(String name, String birthDate, double sale, double commissionRate) {

        super(name, birthDate);

        this.sale = sale;

        this.commissionRate = commissionRate;

    }

}

public class BasePulsSalesEmployee extends SalesEmployee {

    private double basicSalary;



    public double getSalary() {

        return basicSalary+sale*commissionRate;

    }



    public BasePulsSalesEmployee(String name, String birthDate, double sale, double commissionRate, double basicSalary) {

        super(name, birthDate, sale, commissionRate);

        this.basicSalary = basicSalary;

    }

}

public class EmployeeTest {

    public static void main(String[] args) {

       SalariedEmployee E=new SalariedEmployee("张三","2021",20000);

        System.out.println("固定工资员工:"+E.name+" "+E.birthDate+" "+E.getSalary());

        HourlyEmployee H=new HourlyEmployee("李四","2001-12-31",20,300);

        System.out.println("小时工资员工:"+H.name+" "+H.birthDate+" "+H.getSalary());

        SalesEmployee S=new SalesEmployee("王五","2003-03-01",1000,2.5);

        System.out.println("销售员工:"+S.name+" "+S.birthDate+" "+S.getSalary());

        BasePulsSalesEmployee B=new BasePulsSalesEmployee("杨六","2003-08-23",62,1.9,2000);

        System.out.println("固定底薪销售员工:"+B.name+" "+B.birthDate+" "+B.getSalary());

    }

}

uploading.4e448015.gif

正在上传…重新上传取消正在上传…重新上传取消正在上传…重新上传取消

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Java程序设计》实验报告 的相关文章

  • 使用 Guice 注入类集合

    我正在尝试用 Google Guice 2 0 注入东西 我有以下结构 FooAction implements Action BarAction implements Action 然后我有一个带有以下构造函数的 ActionLibrar
  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 如何配置 Spring-WS 以使用 JAXB Marshaller?

    感谢您到目前为止对此的帮助 我正在更新问题 因为我没有显示我需要的所有内容 并显示了建议的更改 肥皂输出仍然不是我想要的 servlet xml
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 迁移到Java 9或更高版本时是否需要切换到模块?

    我们目前正在从 Java 8 迁移到 Java 11 但是 升级我们的服务并没有我们预期的那么痛苦 我们基本上只需要更改我们的版本号build gradle文件和服务都顺利启动并运行 我们升级了库以及使用这些库的 微 服务 到目前为止没有问
  • 具有 CRUD 功能的基于 Spring Web 的管理工具

    在 PHP Symfony 世界里有一个工具叫 Sonata Adminhttps sonata project org https sonata project org 基于 AdminLTE 模板 这是一款一体化管理工具 具有登录 菜单
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • 关于Java泛型的一些问题

    假设我有以下接口和实现类 interface Foo
  • Java - JPanel 内有边距和 JTextArea

    我想创建这样的东西 主面板有其边距 x 并且 TextArea 位于该面板的中心 几乎填满了面板 底部是另一个具有自定义尺寸 高度 y 的面板 可以使用某些快捷方式将其切换为可见和不可见 底部面板有 FlowLayout 和几个元素 问题是
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • 如何在 Bean Validation 1.0 中构造 ConstraintViolationException?

    我对 javax validation API 感到困惑 我正在编写一个简单的测试来理解它 Sample sample new Sample Set
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Java:一个函数有多种返回类型...可以使用泛型吗?

    为了简单起见 我有一些程序 如下所示 public String fetchValueAsString String key public DateTime fetchValueAsDateTime String key 我想要类似的东西
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐