Java面向对象编程实验报告

【任务一】:设计并实现一个直线(Line2D)类,可以通过四个构造函数分别使用一般式、点斜式、两点式和截距式四种方法来构造直线。并对直线做简单的比较。
要求:

  1. 点需要使用 Point2D 类表示,
    1.1 Point2D 应该有两个 double 类型的私有属性,分别表示笛卡尔坐标系上点的横坐标和纵坐标。
    1.2 Point2D 类至少应该提供一个构造函数具有参数(double x, double y)。有能力可以考虑以极坐标的方式创建点
    (不做要求)。
    1.3 重写 Point2D 类的 equals()方法,来判断两个点是否是同一个点。
  2. 提供合理的直线带参的四种构造函数:一般式三个参数(double a, double b, double c)、点斜式两个参数(Point2D point, double slope)、两点式两个参数(Point2D point1, Point2D point2)和截距式(double interceptX, double interceptY)
  3. 重写 Line2D 类的 equals()方法,判断两条直线是否是同一条。
  4. 添加 boolean isParallel(Line2D anotherLine)方法,判断两条直线是否平行。
    提示:
  5. 使用两点式构造直线时,注意两点重合则无法唯一确定一条直线,此时直线不合法。不合法的直线和任何直线对
    比都为假。
  6. 使用点斜式时,当直线平行于 y 轴时,斜率为无穷大,但是 Java 语言中 double 类型是可以表示无穷大,请参阅
    Java API 文档:Double. NEGATIVE_INFINITY 和 Double. POSITIVE_INFINITY,此外,double 类型还可能是 Double.NAN。
  7. 注意,用不同构造函数创建的直线也需要进行比较,建议在类的内部将三种构造函数统一成一种表示方法,以方便比较直线是否相等。(可以在对象构造的时候就将直线表示成同一种表示方法)。
  8. 在判断两条直线是否平行时,首先要排除两条直线重合的情况。
  9. 所有非法的直线,在判断平行时,一律不平行。
  10. 注意只要是对象的引用作为函数的参数,则这个函数的调用者,可能会传空值进来。
  11. 所有不合法的直线和点的情况,不能只在输入时判断,需要类本身能够识别非法情况,并且在比较和判断平行时
    做出正确判断。
    /*
     * @Author:苘山楂树
     * @Description:实现四种方法对直线的构造
     * @Date: 2019/10/16
     * @Modified By:苘山楂树
     */
public class Line2D {
   
    private double A;
    private double B;
    private double C;
    public Line2D(double a,double b,double c){
    //一般式
        A = a;
        B = b;
        C = c;
    }
    public Line2D(Point2D point, double slope){
     //点斜式
        if(Double.isInfinite(slope) || Double.isNaN(slope)){
   
            System.out.println("The slope is infinite or none value!");
        }
        else {
   
            A = slope;
            B = -1;
            C = point.getY() - slope * point.getX();
        }
    }
    public Line2D(Point2D point1,Point2D point2){
     //两点式
        if(!point1.equals(point2)){
   
            A = point1.getY()-point2.getY();
            B = point2.getX()-point2.getX();
            C = point2.getY()*(point1.getX()-point2.getX())-point2.getX()*(point1.getY()-point2.getY());
        }
        else {
    //两点重合无法唯一确定一条直线
            System.out.println("These two points are the same!");
            System.exit(0);
        }
    }
    public Line2D(double interceptX,double interceptY){
     //截距式
        A = 1/interceptX;
        B = 1/interceptY;
        C = -1;
    }

    public boolean isParallel(Line2D anotherLine){
   
        return A * anotherLine.B == B * anotherLine.A && C != anotherLine.C;
    }
}

public class Point2D {
   
    private double x,y;
    public Point2D(double param_x,double param_y){
   
        x = param_x;
        y = param_y;
    }
    public boolean equals(Point2D p) {
   
        return x == p.x && y == p.y;
    }

    public double getX() {
   
        return x;
    }
    public double getY() {
   
        return y;
    }
}

【任务二】:用面向对象的方式改进日记系统的用户注册和登录过程。实现简单的写日记功能。
要求:

  1. 在实现实验二中任务二的所有功能的基础上,改进用户注册和登录的设计。
    1.1. 在上一次实验任务二的基础上,添加 User 类。
    1.2. 使用封装的方式将 User 类中相关属性的验证方法封装到 User 类中。
    1.3. 在 User 类中添加方法用来判断用户登录是否成功。
    1.4. 在主类中添加一个 static 属性用来判断用户是否登录,以及保存当前登录的用户信息。
  2. 实现写日记功能。
    2.1 基于以前实验的结果,用户在如下的菜单中
  3. 登录系统;
  4. 系统设置;
  5. 写日记;
  6. 查找日记;
  7. 退出系统;
    请选择:
    选择功能 3 的时候,进入写日记功能。
    2.2 创建一个 Diary 类用来保存用户日记的所有信息。
    2.2.1 Diary 类应该至少包含这些属性:日期、天气、心情、标题和内容。
    2.2.2 其中天气和心情属性的类型应该是枚举类型。
    2.2.3 其中日期使用自定义的日期类(Date)。该类应该包含一个通过字符串构造的日期函数Date(String date),
    还应该包含一个 static 方法用来判断用户输入的日期是否正确,在构造日期之前先用该方法判断日期是否合法。
    2.2.4 重写 Diary 类的 toString()方法,显示 Diary 的日期、天气、心情、标题和内容。
    2.3 当用户进入写日记功能时,先让用户选择天气和当时的心情。
    2.4 随后让用户输入日期,默认为当前日期,若用户输入的日期不正确,则一直到用户输入正确为止。
    2.6 让用户输入标题,并且标题不能超过 12 个字。
    2.6 随后让用户输入日记内容。
    2.7 当用户提交之后创建 Diary 对象用来保存用户的日记。
    2.8 输出 Diary 对象的内容(提示:通过重写 Diary 对象的 toString()方法,可以直接打印出 Diary 对象)。
    这次实验比较难的部分就应该是判断日期和封装User类了,刚开始对封装完全蒙蔽啊(好叭现在还是有点儿蒙蔽,好在有厉害的大牛牛->如果看到请不要骄傲:) 看了笔记之后真的是醍醐灌顶啊 好叭来讲讲我理解的封装,封装其实就是字面意思,打包封装并且将里面的属性方法私有化,要用的时候再用get或者set来得到,既然讲了那么就有时间写篇博客来谈谈~
    /*
     * @Author:苘山楂树
     * @Description:实现用户登录注册等功能
     * @Date: 2019/10/18
     * @Modified By:苘山楂树
     */
import java.lang.invoke.SwitchPoint;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Log {
   
        static int index;
        static boolean logIn = false;
        static User[] users = new User[100];
        /*private static String[] userNameArray = new String[100] ;
        private static String[] screenNameArray = new String[100];
        private static String[] passwordArray = new String[100];
        private static String[] emailAddressArray = new String[100];
        private static String[] answerArray = new String[100];*/
        private static int userCount = 0;
        static String[] testAnswers = {
   "","1.Q1","2.Q2","3.Q3","4.Q4","5.Q5"};
        public static void main(String[] args){
   
            mainMenu();
        }
        private static void mainMenu() {
   
            Scanner input = new Scanner(System.in);
            System.out.println("1.系统登陆");
            System.out.println("2.系统设置");
            System.out.println("3.写日记");
            System.out.println("4.查找日记");
            System.out.println("5.退出系统");
            System.out.println("请选择:");
            int option = input.nextInt();
            while (!(option >= 1 && option <= 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值