项目需求:使用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、当调用对象的方法时,该方法会和对象的内存地址/运行类型绑定,调用对象的属性时没有动态绑定机制,哪里声明那里使用。
第八章终于学完了!!