Java零钱通+作业

项目需求:使用Java开发零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能。

代码改进:用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或者n。在收益入账和消费时,判断金额是否合理,并给出相应的提示。将面向对象的代码修改成面向对象的方法,编写SmallChanageSysOOP.java类,并使用SmallChanageSysApp.java完成测试。

package com.edu.smallchange;

import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.Date;
public class SmallChangeSys {
    public static void main(String[] args) {
        Scanner myScanner = new Scanner(System.in);

        String details = "------------零钱通明细------------";
        boolean loop = true;
        double money = 0;
        double shop = 0;
        double balance = 0;
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        do {
            System.out.println("------------零钱通------------");
            System.out.println("\t\t\t1 零钱通明细");
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消   费");
            System.out.println("\t\t\t4 退   出");

            System.out.println("请选择(1-4):");
            String cho = myScanner.next();
            String idex;
            //
            switch (cho) {
                case "1":
                    System.out.println(details);
                    break;
                case "2":
                    System.out.println("收益入账金额:");
                    money = myScanner.nextDouble();
                    //money的值应该校验
                    if(money>0){
                        balance += money;
                        date = new Date();   //原始的时间格式是国际标准
                        details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
                    }else{
                        System.out.println("收益金额应该大于0");
                    }
                    break;
                case "3":
                    System.out.println("消费金额:");
                    shop = myScanner.nextDouble();
                    //money的值应该校验
                    if(balance>=shop){
                        System.out.println("消费说明:");
                        String note = myScanner.next();
                        balance -= shop;
                        date = new Date();   //原始的时间格式是国际标准 需进行转化
                        details += "\n"+ note +"\t-" + shop + "\t" + sdf.format(date) + "\t余额:" + balance;
                    }else{
                        System.out.println("您的金额不足~~请理性消费");
                    }
                    break;
                case "4":
                    while (true){
                        System.out.println("你确定要退出吗?y/n");
                        idex = myScanner.next();
                        if(idex.equals("y")||idex.equals("n")){
                            break;
                        }
                    }
                    if(idex.equals("y")){
                        loop = false;
                        break;
                    }

                default:
                    System.out.println("菜单选择有误,请重新选择");
            }
        } while (loop);
        System.out.println("--------退出了零钱通--------");
    }
}

面向对象的方式

package com.edu.smallchange.oop;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * 面向对象(OOP) 完成相应功能
 * 将各个功能对应一个方法
 */
public class SmallChangeSysOOP {

    //属性
    Scanner myScanner = new Scanner(System.in);
    String details = "------------零钱通明细OOP版------------";
    boolean loop = true;
    double money = 0;
    double shop = 0;
    double balance = 0;
    Date date = null;
    String cho;
    String idex;
    String note;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");

    public void mainMenu(){
        do {
            System.out.println("------------选择零钱通------------");
            System.out.println("\t\t\t1 零钱通明细");
            System.out.println("\t\t\t2 收益入账");
            System.out.println("\t\t\t3 消   费");
            System.out.println("\t\t\t4 退   出");

            System.out.println("请选择(1-4):");
            cho = myScanner.next();

            //
            switch (cho) {
                case "1":
                    this.detail();
                    break;
                case "2":
                    this.income();
                    break;
                case "3":
                    this.pay();
                    break;
                case "4":
                    this.exit();
                    break;
                default:
                    System.out.println("菜单选择有误,请重新选择");
            }
        } while (loop);
    }

    public void detail(){
        System.out.println(details);
    }

    //完成收益入账
    public void income(){
        System.out.println("收益入账金额:");
        money = myScanner.nextDouble();
        //money的值应该校验
        if(money>0){
            balance += money;
            date = new Date();   //原始的时间格式是国际标准
            details += "\n收益入账\t+" + money + "\t" + sdf.format(date) + "\t余额:" + balance;
        }else{
            System.out.println("收益金额应该大于0");
            return;//退出方法 不再执行后面的代码
        }
    }

    public void pay(){
        System.out.println("消费金额:");
        shop = myScanner.nextDouble();
        //money的值应该校验
        if(balance>=shop){
            System.out.println("消费说明:");
            note = myScanner.next();
            balance -= shop;
            date = new Date();   //原始的时间格式是国际标准 需进行转化
            details += "\n"+ note +"\t-" + shop + "\t" + sdf.format(date) + "\t余额:" + balance;
        }else{
            System.out.println("您的金额不足~~请理性消费");
        }
    }

    public void exit(){
        while (true){
            System.out.println("你确定要退出吗?y/n");
            idex = myScanner.next();
            if(idex.equals("y")||idex.equals("n")){
                break;
            }
        }
        if(idex.equals("y")){
            loop = false;
            return;
        }

    }

}

在SmallChangeSysApp里调用SmallChangeSysOOP

package com.edu.smallchange.oop;
//调用SmallChangeSysOOP显示主菜单即可
public class SmallChangeSysApp {
    public static void main(String[] args) {
        new SmallChangeSysOOP().mainMenu();
    }
}

作业

package com.edu.homework;

import age.length;

// 定义一个Person类{name,age,job},初始化对象数组,
// 有三个Person对象,按照age从大到小排序,使用冒泡排序
public class Homework01 {
    public static void main(String[] args) {
        Person person[] = new Person[3];
        person[0] = new Person("jack",29,"厨师");
        person[1] = new Person("tom",35,"工程师");
        person[2] = new Person("rose",25,"PUP");
        for(int i = 0;i< person.length;i++){
            System.out.println(person[i]);
        }
        //对年龄进行排序
        Person temp = null;//临时变量
        for(int i = 0;i<person.length;i++){
            for(int j = 0;j<person.length-i-1;j++){
                if(person[j].getAge()<person[j+1].getAge()){
                    temp = person[j];
                    person[j] = person[j+1];
                    person[j+1] = temp;
                }
            }
        }
        for(int i = 0;i< person.length;i++){
            System.out.println(person[i]);
        }
    }
}

class Person{
    private String name;
    private int age;
    private String job;

    public Person(String name, int age, String job) {
        this.name = name;
        this.age = age;
        this.job = job;
    }

    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 String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", job='" + job + '\'' +
                '}';
    }
}

 

package com.edu.homework;

public class Homework03 {
    public static void main(String[] args) {
        Professor professor = new Professor("tom",32,"教授",5000,1.3);
        professor.introduce();
    }
}
package com.edu.homework;

public class Teacher {
    private String name;
    private int age;
    private String post;
    private double salary;
    //增加工资级别
    private double grade;

    public Teacher(String name, int age, String post, double salary, double grade) {
        this.name = name;
        this.age = age;
        this.post = post;
        this.salary = salary;
        this.grade = grade;
    }

    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 String getPost() {
        return post;
    }

    public void setPost(String post) {
        this.post = post;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }

    public void introduce(){
        System.out.println("教师基本信息:\n姓名:"+name+"\t年龄:"+age+
                "\t职称:"+post+"\t基本工资:"+salary+"\t级别:"+grade);
    }
}
package com.edu.homework;

public class Professor extends Teacher{
    public Professor(String name, int age, String post, double salary, double grade) {
        super(name, age, post, salary, grade);
    }

    @Override
    public void introduce() {
        System.out.println("这是教授的信息");
        super.introduce();
    }

}
package com.edu.homework;

public class Lecturer extends Teacher{
    public Lecturer(String name, int age, String post, double salary, double grade) {
        super(name, age, post, salary, grade);
    }

    @Override
    public void introduce() {
        System.out.println("这是讲师的信息");
        super.introduce();
    }
}
package com.edu.homework;

public class AssProfessor extends Teacher{
    public AssProfessor(String name, int age, String post, double salary, double grade) {
        super(name, age, post, salary, grade);
    }

    @Override
    public void introduce() {
        System.out.println("这是副教授的信息");
        super.introduce();
    }
}

package com.edu.homework;

public class Homework04 {
    public static void main(String[] args) {
        Manager manager = new Manager("张飞",200,20,1.2);
        manager.setBonus(2000);
        manager.show();
        Pubemployee pubemployee = new Pubemployee("刘备",150,25,1.0);
        pubemployee.show();
        
    }
}
package com.edu.homework;

public class Employee {
    private String name;//姓名
    private double salary;//单日工资
    private int day;//工作天数
    private double grade;
    public Employee(String name, double salary, int day, double grade) {
        this.name = name;
        this.salary = salary;
        this.day = day;
        this.grade = day;
    }

    public String getName() {
        return name;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public int getDay() {
        return day;
    }

    public void setDay(int day) {
        this.day = day;
    }

    public double getGrade() {
        return grade;
    }

    public void setGrade(double grade) {
        this.grade = grade;
    }

    public void show(){
        System.out.println("姓名:"+name+"\t工资:" + salary * day * grade+"\t");
    }
}
package com.edu.homework;

public class Manager extends Employee{
    private double bonus;

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    public Manager(String name, double salary, int day, double grade) {
        super(name, salary, day, grade);
    }
    @Override
    public void show() {
        System.out.println("经理"+getName()+"工资为:"+(bonus+getDay()*getGrade()*getSalary()));
    }
}
package com.edu.homework;

public class Pubemployee extends Employee{
    public Pubemployee(String name, double salary, int day, double grade) {
        super(name, salary, day, grade);
    }

    @Override
    public void show() {
        super.show();
    }

}

package com.edu.homework.homework05;

import com.edu.homework.Teacher;

public class Homework05 {
    public static void main(String[] args) {
        Scientist scientist = new Scientist("爱因斯坦",5000,15,20000);
        scientist.show();
        Teacher05 teacher05 = new Teacher05("大雁",4500,12,60,23);
        teacher05.show();
        Waiter waiter = new Waiter("tom",2000,12);
        waiter.show();
    }
}
package com.edu.homework.homework05;

public class Employer {
    private String name;
    private double sal;
    private int month;

    public Employer(String name, double sal, int month) {
        this.name = name;
        this.sal = sal;
        this.month = month;
    }

    public String getName() {
        return name;
    }

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

    public double getSal() {
        return sal;
    }

    public void setSal(double sal) {
        this.sal = sal;
    }

    public int getMonth() {
        return month;
    }

    public void setMonth(int month) {
        this.month = month;
    }
    public void show(){
        System.out.println(name+"年工资是:"+(sal*month));
    }
}
package com.edu.homework.homework05;

public class Waiter extends Employer{
    public Waiter(String name, double sal, int month) {
        super(name, sal, month);
    }

    @Override
    public void show() {
        super.show();
    }
}
package com.edu.homework.homework05;

import com.edu.homework.homework05.Employer;

public class Worker extends Employer {
    public Worker(String name, double sal, int month) {
        super(name, sal, month);
    }

    @Override
    public void show() {
        super.show();
    }
}
package com.edu.homework.homework05;

import com.edu.homework.homework05.Employer;

public class Peasant extends Employer {
    public Peasant(String name, double sal, int month) {
        super(name, sal, month);
    }

    @Override
    public void show() {
        super.show();
    }
}
package com.edu.homework.homework05;

public class Scientist extends Employer{
    private double bonus;

    public Scientist(String name, double sal, int month, double bonus) {
        super(name, sal, month);
        this.bonus = bonus;
    }

    @Override
    public void show() {
        System.out.println("科学家");
        System.out.println(getName()+"年工资是:"+(getSal()*getMonth()+bonus));
    }
}
package com.edu.homework.homework05;

import com.edu.homework.homework05.Employer;

public class Teacher05 extends Employer {
    private double classDay;
    private int classSal;

    public Teacher05(String name, double sal, int month, double classDay, int classSal) {
        super(name, sal, month);
        this.classDay = classDay;
        this.classSal = classSal;
    }

    @Override
    public void show() {
        System.out.println("教师");
        System.out.println(getName()+"年工资是:"+(getSal()*getMonth()+classDay*classSal));
    }
}

输出结果为:Test  Demo  Rose  Jack  john  Jack

package com.edu.homework;

public class Homework08 {
    public static void main(String[] args) {
//        CheckingAccount checkingAccount = new CheckingAccount(1000);
//        checkingAccount.deposit(10);
//        checkingAccount.withdraw(9);
//        System.out.println(checkingAccount.getBalance());
        SavingsAccount savingsAccount =  new SavingsAccount(1000,3,0.01);
        savingsAccount.deposit(100);
        savingsAccount.deposit(100);
        savingsAccount.deposit(100);
        System.out.println(savingsAccount.getBalance());
        savingsAccount.earn();
        System.out.println(savingsAccount.getBalance());
    }
}
package com.edu.homework;

public class BankAccount {
    private double balance;
    public BankAccount(double initialBalance){
        this.balance = initialBalance;
    }
    //存款方法
    public void deposit(double amount){
        balance+=amount;
    }
    //取款方法
    public void withdraw(double amount){
        balance-=amount;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}
package com.edu.homework;

public class CheckingAccount extends BankAccount{
    public CheckingAccount(double initialBalance) {
        super(initialBalance);
    }

    @Override
    public void deposit(double amount) {
        super.deposit(amount-1);
    }

    @Override
    public void withdraw(double amount) {
        super.withdraw(amount+1);
    }
}
package com.edu.homework;

public class SavingsAccount extends BankAccount{
    private int count;
    private double rate=0.01;
//月末统计上个月利息
    public void earn(){
        count = 3;
        super.deposit(getBalance()*rate);
    }

    @Override
    public void deposit(double amount) {
        if(count>0){
            super.deposit(amount);
        }else{
            super.deposit(amount-1);
        }
        count--;
    }

    @Override
    public void withdraw(double amount) {
        if(count>0){
            super.withdraw(amount);
        }else{
            super.withdraw(amount+1);
        }
        count--;
    }

    public SavingsAccount(double initialBalance, int count, double rate) {
        super(initialBalance);
        this.count = count;
        this.rate = rate;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public double getRate() {
        return rate;
    }

    public void setRate(double rate) {
        this.rate = rate;
    }


}

public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
private String label;

    public LabeledPoint(double x, double y, String label) {
        super(x, y);
        this.label = label;
    }

 第十题先判断两个对象是否相同,再判断obj是不是Doctor类型或者其子类,然后向下转型进行比较。

public boolean equals(Object obj){
        if(this == obj){
            return true;
        }

        if(!(obj instanceof Doctor)){
            return false;
        }
        //向下转型,因为obj的运行类型是Doctor 或者其子类型
        Doctor doctor = (Doctor)obj;
        return this.name.equals(doctor.name) && this.age.equals(doctor.age) &&
                this.gender.equals(doctor.gender) &&this.job.equals(doctor.job) &&
                this.sal.equals(doctor.sal);
    }

11、向上转型:父类的引用指向子类对象

Person p = new Student();

p.run();//student run

p.eat();//person eat

//向下转型:把指向子类对象的父类引用,转成指向子类对象的子类引用

Student s = (Student)p;

s.run();//student run

s.study();//student study..

s.eat();//person eat

12、==比较值或地址,equals比较字符串也就是引用类型。

package com.edu.homework.homework13;

public class Homework13 {
    public static void main(String[] args) {
        Person[] person = new Person[4];
        person[0] = new Teacher("张飞",'男',30,5);
        person[1] = new Teacher("王昭君",'女',35,10);
        person[2] = new Student("小明",'男',15,00023102);
        person[3] = new Student("小丽",'女',18,12024152);
        Person person1 = null;
        for(int i=0;i< person.length;i++){
            for(int j=0;j< person.length-i-1;j++){
                if(person[j].getAge()<person[j+1].getAge()){
                    person1 = person[j];
                    person[j] = person[j+1];
                    person[j+1] = person1;
                }
            }
        }
        for (int i = 0; i < person.length; i++) {
            System.out.println(person[i].basicInfo());
        }
    }
}
package com.edu.homework.homework13;

public class Person {
    private String name;
    private char sex;
    private int age;

    public Person(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public char getSex() {
        return sex;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public String play(){
        return getName();
    }
    public String basicInfo(){
        return "姓名:"+name+"\n年龄:"+age+"\n性别:"+sex;
    }
}
package com.edu.homework.homework13;

public class Student extends Person{

    private int stu_id;//学号

    public Student(String name, char sex, int age, int stu_id) {
        super(name, sex, age);
        this.stu_id = stu_id;
    }
    public void study(){
        System.out.println("我承诺,我会好好学习");
    }

    @Override
    public String play() {
        return super.play()+"爱玩足球";
    }

    @Override
    public String basicInfo() {
        return "学生的信息\n"+super.basicInfo()+"\n学号:"+stu_id+"\n"+play();
    }
}
package com.edu.homework.homework13;

public class Teacher extends Person{
    private double work_age;//工龄

    public Teacher(String name, char sex, int age, double work_age) {
        super(name, sex, age);
        this.work_age = work_age;
    }
    public void teach(){
        System.out.println("我承诺,我会认真教课");
    }

    @Override
    public String play() {
        return super.play() + "爱玩象棋";
    }

    @Override
    public String basicInfo() {
        return "老师的信息\n"+super.basicInfo()+"\n工龄:"+work_age+"\n"+play();
    }
}

14、我是A类

hahah我是B类的有参构造

我是C类的有参构造

我是C类的无参构造

15、多态:方法或对象具有多种形态,是OOP的三大特征,是建立在封装和继承的基础之上

方法重载体现多态,重写体现多态

对象的多态:编译类型跟运行类型不一致

16、当调用对象的方法时,该方法会和对象的内存地址/运行类型绑定,调用对象的属性时没有动态绑定机制,哪里声明那里使用。

第八章终于学完了!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值