此文档是练习题代码。没有解释。 


文章目录


前言

一.零钱通项目

二.本章作业

1.定义Person类(name,age,job),初始化对象数组有3个person对象,并且按照age从大到小排。使用冒泡

2.通过继承实现员工工资核算

3.假定Grand、Father、Son在同一个包,问this与super能够访问的参数

 4.体会重写好处,如图题目

5.重写Object的equals()方法

6.多态数组问题视频13

7.什么是多态?

 8.Java动态绑定机制是什么?

9.==与equals区别

三.房屋出租项目

 3.1自己尝试

 3.2标准写法:

总结


前言

本文主要是Java语法项目实践

提示:以下是本篇文章正文内容,下面案例可供参考


一.零钱通项目

软件需求:实现收益入账、消费、查看明细、退出系统等功能,如下图所示

中级java需不需要架构设计 java中级项目_System

中级java需不需要架构设计 java中级项目_i++_02

import java.text.SimpleDateFormat;
import java.util.*;
public class SmallChangeSysOOP {
    boolean loop = true;
    Scanner scanner = new Scanner(System.in);
    String key = "";
    String details = "------------------零钱通明细-------------------";
    double money = 0;
    double balance = 0;
    Date date = null;//时间
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    String note = "";//消费原因

    public void mainMenu() {
        do{
            System.out.println("---------------零钱通菜单---------------");
            System.out.println("               1.零钱通明细");
            System.out.println("               2.收益入账");
            System.out.println("               3.消费");
            System.out.println("               4.退       出");
            System.out.println("请选择(1-4):");
            key = scanner.next();
            switch (key) {
                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 = scanner.nextDouble();
        if (money <= 0) {
            System.out.println("收益入账金额需要大于0");
            return;
        }
        balance += money;
        date = new Date();
        details += "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + balance;
    }

    public void pay()
    {
        System.out.println("消费金额");
        money = scanner.nextDouble();
        if (money <= 0 || money > balance) {
            System.out.println("你的消费金额应该在0-" + balance);
            return;
        }
        System.out.print("消费说明:");
        note = scanner.next();
        balance -= money;
        date = new Date();
        details += "\n" + note + "\t" + money + "\t" + sdf.format(date) + "\t" + balance;
    }

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



public class SmallChangeSysApp {
    public static void main(String[] args)
    {
        SmallChangeSysOOP smallChangeSysOOP = new SmallChangeSysOOP();
        smallChangeSysOOP.mainMenu();

    }
}

二.本章作业

1.定义Person类(name,age,job),初始化对象数组有3个person对象,并且按照age从大到小排。使用冒泡

public class HouseWork1 {
    public static void main(String[] args)
    {
        Person[] person=new Person[3];//这只是创造3个数组
        person[0]=new Person("z",8,"g");//创造对象
        person[1]=new Person("k",15,";L");
        person[2]=new Person("p",25,"H");
        Person temp;
        for(int j=0;j<person.length-1;j++){
            for(int i=0;i<person.length-1-j;i++)
            {
                if(person[i].getAge()<person[i+1].getAge())
                {
                    temp=person[i];
                    person[i]=person[i+1];
                    person[i+1]=temp;

                }
            }
        }
        for(int i=0;i<person.length;i++)
        {
            System.out.println(person[i].getAge());
        }


    }
}
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;
    }
}

2.通过继承实现员工工资核算

中级java需不需要架构设计 java中级项目_i++_03

package com.Middle;

public class HomeWork3 {
    public static void main(String[] args)
    {
        Worker worker=new Worker("zz",200,30,1.0);
        Employee employee=worker;
        employee.printshow();
        Manager manager=new Manager("kk",300,30,1.2,1000);
        Employee employee1=manager;
        employee1.printshow();
    }
}

class Employee
{
    private String name;
    private int daysalary;
    private int days;
    public Employee(String name, int daysalary, int days) {
        this.name = name;
        this.daysalary = daysalary;
        this.days = days;
    }
    public String getName() {
        return name;
    }

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

    public int getDaysalary() {
        return daysalary;
    }
    public void setDaysalary(int daysalary) {
        this.daysalary = daysalary;
    }
    public int getDays() {
        return days;
    }
    public void setDays(int days) {
        this.days = days;
    }
    public void printshow()
    {
        System.out.println(name+"员工工资是"+daysalary*days);
    }
}
class Worker extends Employee
{
    private double grade;
    public Worker(String name,int daysalay,int days,double grade)
    {
        super(name,daysalay,days);
        this.grade=grade;
    }
    public void printshow()
    {
        super.printshow();
    }
}

class Manager extends Employee
{
    private double grade;
    private int bonus;
    public Manager(String name,int daysalay,int days,double grade,int bonus)
    {
        super(name,daysalay,days);
        this.grade=grade;
        this.bonus=bonus;
    }
    public void printshow()
    {
        System.out.println(super.getName()+"经理员工工资是"+(super.getDays()*super.getDaysalary()*grade+bonus));
    }
}

3.假定Grand、Father、Son在同一个包,问this与super能够访问的参数

注意:this是从当前对象查找,当前类没有再去父类。也遵循就近原则

中级java需不需要架构设计 java中级项目_System_04

 4.体会重写好处,如图题目

中级java需不需要架构设计 java中级项目_i++_05

package com.Middle;

public class HomeWork4 {
    public static void main(String[] args)
    {
        SavingsAccount savingsAccount=new SavingsAccount(1000);
        savingsAccount.withdraw(200);
        System.out.println(savingsAccount.getBalance());
        savingsAccount.deposit(100);
        System.out.println(savingsAccount.getBalance());
        savingsAccount.deposit(100);
        System.out.println(savingsAccount.getBalance());
        savingsAccount.deposit(100);
        System.out.println(savingsAccount.getBalance());
        savingsAccount.withdraw(200);
        System.out.println(savingsAccount.getBalance());
    }
}

class BankAccount
{
    private double balance;

    public BankAccount(int balance) {
        this.balance = balance;
    }
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
    public void deposit(double amount)
    {
        balance+=amount;
    }
    public void withdraw(double amount)
    {
        balance-=amount;
    }
}

class CheckingAccount extends BankAccount
{
    public CheckingAccount(int balance) {
        super(balance);
    }
    public void deposit(double amount)
    {
        //super.setBalance(super.getBalance()+amount-1);
        super.deposit(amount-1);//巧妙使用父类方法
    }
    public void withdraw(double amount)
    {
//        super.setBalance(super.getBalance()-amount-1);
        super.deposit(amount+1);
    }
}

class SavingsAccount extends BankAccount
{
    private int count=0;
    private double rate=0.01;
    public SavingsAccount(int balance) {
        super(balance);
    }
    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 void earnMonthlyInterest(double interest)
    {
        count=0;
        super.deposit(super.getBalance()*interest);
    }
    public void deposit(double amount)
    {
        if(count>3)
        {
            //super.setBalance(super.getBalance()+amount-1);
            super.deposit(amount-1);
        }
        //super.setBalance(super.getBalance()+amount);
        super.deposit(amount);
        count++;
    }
    public void withdraw(double amount)
    {
        if(count>3)
        {
            //super.setBalance(super.getBalance()-amount-1);
            super.withdraw(amount+1);
        }
        super.withdraw(amount);
        count++;
        //super.setBalance(super.getBalance()-amount);
    }
}

5.重写Object的equals()方法

中级java需不需要架构设计 java中级项目_System_06

6.多态数组问题视频13

中级java需不需要架构设计 java中级项目_java_07

public class HouseWork13 {
    public static void main(String[] args)
    {
        Students s=new Students("小明", '男', 15, "00023102");
        s.showinfo();
        System.out.println("=======================");
        Teacher t=new Teacher("张飞", '男', 30, 5);
        t.showinfo();
        HouseWork13 houseWork13=new HouseWork13();
        Person[] person =new Person[4];
        person[0]=new Students("小明", '男', 15, "00023102");
        person[1]=new Students("小华", '男', 17, "00023112");
        person[2]=new Teacher("张飞", '男', 30, 5);
        person[3]=new Teacher("张da", '男', 28, 4);

        houseWork13.bubbleSort(person);
        for(int i=0;i<person.length;i++)
        {
            System.out.println(person[i].getName());
        }
        for(int i=0;i<person.length;i++)
        {
            houseWork13.test(person[i]);
        }

    }

    public void bubbleSort(Person[] person) {
        Person temp = null;
        for (int i = 0; i < person.length-1; i++){
            for(int j=0;j<person.length-1-i;j++)
            {
                if(person[j].getAge()>person[j+1].getAge())
                {
                    temp=person[j];
                    person[j]=person[j+1];
                    person[j+1]=temp;
                }
            }
        }
    }
    public void test(Person person)
    {
        if(person instanceof Students)
        {
            ((Students)person).study();
        }
        else if(person instanceof Teacher)
        {
            ((Teacher)person).teach();
        }
        else {
            System.out.println("啥也不用干");
        }
    }


}

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 void play()
    {}
    public String showbasic()
    {
        return "姓名:"+getName()+"\n年纪:"+getAge()+"\n性别:"+getSex();
    }
}

class Students extends Person{
    private String stu_id;
    public Students(String name, char sex, int age, String stu_id)
    {
        super(name,sex,age);
        this.stu_id=stu_id;
    }

    public String getStu_id() {
        return stu_id;
    }

    public void study()
    {
        System.out.print("我承诺,我会好好学习");
    }
    @Override
    public void play() {
        System.out.println(getName()+"爱玩足球");
    }
    public void showinfo()
    {
       System.out.println(super.showbasic());
        study();
        System.out.println();
        play();
    }
}

class Teacher extends Person{
    private int work_age;
    public Teacher(String name, char sex, int age, int work_age) {
        super(name,sex,age);
        this.work_age = work_age;
    }

    public int getWork_age() {
        return work_age;
    }

    public void teach()
    {
        System.out.print("我承诺,我会认真教课");
    }

    @Override
    public void play() {
        System.out.println(getName()+"爱玩象棋");
    }
    public void showinfo()
    {
        System.out.println(super.showbasic());
        teach();
        System.out.println();
        play();
    }
}

7.什么是多态?

        方法或对象具有多种形态,是OOP第三大特征,是建立在封装和继承基础之上,多态具体体现在方法多态(方法重载、重写),对象多态:对象编译类型与运行类型不一致。编译类型在定义时确定,不能变化。对象的运行类型可以变化。可以通过getClass()查看运行类型,编译类型看=号左边,运行类型在等号右边

 8.Java动态绑定机制是什么?

当调用对象方法时,该方法会和对象的内存地址即运行类型绑定。开始查找要访问的方法,以运行类型方法为主(要符合访问机制)。当调用对象属性时,没有动态绑定机制。遵守哪里声明,那里使用。

9.==与equals区别

中级java需不需要架构设计 java中级项目_开发语言_08

三.房屋出租项目

具有新增房源、查找房源、删除房源、修改房屋信息如果不想修改某个信息直接回车、房屋列表。

中级java需不需要架构设计 java中级项目_System_09

 3.1自己尝试

public class Housepay {
    public static void main(String[] args)
    {

        Scanner scanner=new Scanner(System.in);
        House[] house=new House[100];
        boolean loop=true;
        int length=0;
        int id;
        char xuanze;
        while (loop)
        {
            System.out.println("--------房屋出租系统--------");
            System.out.println("\t1.新增房源\t");
            System.out.println("\t2.查找房屋\t");
            System.out.println("\t3.删除房屋\t");
            System.out.println("\t4.修改房屋信息\t");
            System.out.println("\t5.房屋列表\t");
            System.out.println("\t6.退     出\t");
            System.out.println("请选择1-6");
            int choose=scanner.nextInt();
            switch (choose){
                case 1:
                    System.out.println("------新增房屋------");
                    id=length;
                    System.out.print("姓名:");
                    String name=scanner.next();
                    System.out.println();
                    System.out.print("电话:");
                    String iphone=scanner.next();
                    System.out.println();
                    System.out.print("地址:");
                    String position=scanner.next();
                    System.out.println();
                    System.out.print("月租:");
                    int money=scanner.nextInt();
                    System.out.println();
                    System.out.print("状态(未出租/已出租):");
                    String access=scanner.next();
                    house[length]=new House(id, name, iphone, position, money, access);
                    length++;
                    System.out.print("------添加完成------");
                    break;
                case 2:
                    System.out.println("------查找房屋------");
                    System.out.print("请输入要查找的Id:");
                    id=scanner.nextInt();
                    while (id>100)
                    {
                        System.out.println("id号不合理,请重新输入");
                        id=scanner.nextInt();
                    }
                    if(id>length)
                    {
                        System.out.println("没有该房屋");
                    }
                    else
                    {
                        System.out.println(house[id-1]);
                    }
                    break;
                case 3:
                    System.out.println("------删除房屋------");
                    System.out.print("请输入要删除房屋的Id(-1退出):");
                    id=scanner.nextInt();
                    System.out.println("确认是否删除(Y/N)请小心选择");
                    System.out.println("请输入你的选择Y/N");
                    xuanze=scanner.next().charAt(0);
                    if(xuanze=='Y'||xuanze=='y')
                    {

                        System.out.println("------删除完成------");
                    }
                    else{
                        break;
                    }

                    break;
                case 4:
                    System.out.println("------修改房屋信息------");
                    System.out.print("请输入要修改的Id(-1退出):");
                    id=scanner.nextInt();
                    System.out.println();
                    System.out.print("姓名("+house[id-1].getName()+")");
                    name=scanner.next();
                    house[id-1].setName(name);
                    System.out.print("电话("+house[id-1].getIphone()+")");
                    iphone=scanner.next();
                    house[id-1].setIphone(iphone);
                    System.out.print("地址("+house[id-1].getPosition()+")");
                    position=scanner.next();
                    house[id-1].setPosition(position);
                    System.out.print("租金("+house[id-1].getMoney()+")");
                    money=scanner.nextInt();
                    house[id-1].setMoney(money);
                    System.out.print("状态("+house[id-1].getAccess()+")");
                    access=scanner.next();
                    house[id-1].setAccess(access);
                    System.out.println("------修改完成------");
                    break;
                case 5:
                    System.out.println("------房屋列表------");
                    System.out.println("编\t房主\t电话\t地址\t月租\t状态(未出租/已出租)");
                    for(int i=0;i<=length;i++)
                    {
                        System.out.println(house[i].toString());
                    }
                    System.out.println("------房屋列表完成------");
                    break;
                case 6:
                    System.out.println("------退出------");
                    System.out.print("请输入你的选择(Y/N):");
                    xuanze=scanner.next().charAt(0);
                    if(xuanze=='Y'||xuanze=='y')
                    {
                        System.out.println("你退出程序");
                        loop=false;
                    }
                    else if(xuanze=='n'||xuanze=='N')
                    {
                        continue;
                    }
                    else
                    {
                        System.out.println("选择错误,请重新输入只能输入Y/N");
                    }
                    break;
                default:
                    System.out.println("您输入的数字不合理,请重新输入");
                    break;
            }
        }

    }
}

class House{
    private int id;
    private  String name;
    private  String iphone;
    private String position;
    private int money;
    private String access;

    public House() {
    }
    public House(int id, String name, String iphone, String position, int money, String access) {
        this.id = id;
        this.name = name;
        this.iphone =iphone;
        this.position = position;
        this.money = money;
        this.access = access;
    }
    @Override
    public String toString() {
        return
                "id=" + id +
                ", name='" + name + '\'' +
                ", iphone='" + iphone + '\'' +
                ", position='" + position + '\'' +
                ", money=" + money +
                ", access='" + access + '\''
                ;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getIphone() {
        return iphone;
    }

    public void setIphone(String iphone) {
        this.iphone = iphone;
    }

    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    public String getAccess() {
        return access;
    }
    public void setAccess(String access) {
        this.access = access;
    }
}

 3.2标准写法:

 为了方便管理,需要使用模式管理。

1.明确系统有哪些类

2.明确类与类调用关系

3.HouseView类 用于显示界面、接收用户输入、调用HouseService类完成对房屋信息各种操作,界面层编写mainmenu,显示主菜单

4.1:HouseService类,响应HouseView调用,完成对房屋信息增删改查crud,业务层

4.2:获取各种用户输入

5.House类,一个House对象表示一个房屋信息。

6.HouseRentApp是程序入口,创建HouseView对象,调用对象创建显示。

public class House {
    private int id;
    private  String name;
    private  String phone;
    private String address;
    private int rent;
    private String state;

    public House(int id, String name, String phone, String address, int rent, String state) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.address = address;
        this.rent = rent;
        this.state = state;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getRent() {
        return rent;
    }

    public void setRent(int rent) {
        this.rent = rent;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return
                id +'\t'+
                name + '\t' +
                phone + '\t' +
                address + '\t' +
                rent +'\t'+
                state;
    }
}
public class HouseServer {
    private House[] houses;
    private int houseNum=1;
    private int idCount=1;
    public HouseServer(int size) {
        houses=new House[size];
        houses[0]=new House(idCount++, "sas", "112", "fajda", 1000, "未出租");
    }
    public House[] list()
    {
        return houses;
    }

    public boolean add(House newhouse)
    {
        if(houseNum==houses.length)
        {
            System.out.println("数组已满");
            return false;
        }
        houses[houseNum++]=newhouse;
        newhouse.setId(++idCount);
        return true;
    }
    public boolean del(int delid)
    {//删除对应房屋信息下标
        int index=-1;
        for(int i=0;i<houseNum;i++)
        {
            if (delid==houses[i].getId())
            {
                index=i;
            }
        }
        if(index==-1)//不存在
        {
            return false;
        }
        for(int i=index;i<houseNum-1;i++)
        {
            houses[i]=houses[i+1];
        }
        houses[--houseNum]=null;
        return true;
    }

    public House find(int findid)//对象返回类型返回值可以为null
    {
        for(int i=0;i<houseNum;i++)
        {
            if(findid==houses[i].getId())
            {
                return houses[i];
            }
        }
        return null;
    }

}
@SuppressWarnings({"all"})
public class HouseView {
    Scanner scanner=new Scanner(System.in);
    boolean loop=true;

    private HouseServer houseServer=new HouseServer(10);
    House[] house=houseServer.list();
    public void listHouses()
    {
        System.out.println("--------房屋列表--------");
        System.out.println("编号\t房主\t电话\t地址\t月租\t状态(未出租/已出租)");
        for(int i=0;i<house.length;i++)
        {
            if(house[i]==null){
                break;
            }
            System.out.println(house[i]);
        }
        System.out.println("------房屋列表完成------");
    }
    public void addHouse()
    {
        int id=1;
        System.out.print("姓名:");
        String name=scanner.next();
        System.out.println();
        System.out.print("电话:");
        String iphone=scanner.next();
        System.out.println();
        System.out.print("地址:");
        String position=scanner.next();
        System.out.println();
        System.out.print("月租:");
        int money=scanner.nextInt();
        System.out.println();
        System.out.print("状态(未出租/已出租):");
        String access=scanner.next();
        House newhouse = new House(id, name, iphone, position, money, access);
        if(houseServer.add(newhouse))
        {
            System.out.print("------添加完成------");
        }
        else {
            System.out.print("------添加失败------");
        }

    }

    public void delhouse()
    {
        System.out.println("删除");
        System.out.println("请输入待删除房屋编号(-1退出)");
        int delid=scanner.nextInt();
        if(delid==-1)
        {
            System.out.println("你放弃删除删除");
            return;
        }
        System.out.println("请确认是否删除(Y/N)");
        char choice=scanner.next().charAt(0);
        if(choice=='Y'||choice=='y')
        {
            if(houseServer.del(delid))
            {
                System.out.println("=====删除房屋信息成功========");
            }
            else {
                System.out.println("=====房屋编号不存在========");
            }

        }else {
            System.out.println("=====放弃删除房屋信息========");
        }

    }

    public void findHouse()
    {
        System.out.println("=====查找房屋信息========");
        System.out.println("请输入要查找的id");
        int findId=scanner.nextInt();
        House house=houseServer.find(findId);
        if(house!=null)
        {
            System.out.println(house);
        }
        else {
            System.out.println("房屋信息不存在");
        }
    }

    public void update()
    {
        System.out.println("修改房屋信息");
        System.out.println("请输入要修改房屋信息id(-1表示退出)");
        int updateid=scanner.nextInt();
        if(updateid==-1)
        {
            System.out.println("======放弃修改房屋信息=======");
            return;
        }
        House house=houseServer.find(updateid);
        if(house==null)
        {
            System.out.println("修改房屋信息编号不存在");
            return;
        }
    }


    public void mainMenu()
    {
        do{
            System.out.println("--------房屋出租系统--------");
            System.out.println("\t1.新增房源\t");
            System.out.println("\t2.查找房屋\t");
            System.out.println("\t3.删除房屋\t");
            System.out.println("\t4.修改房屋信息\t");
            System.out.println("\t5.房屋列表\t");
            System.out.println("\t6.退     出\t");
            System.out.println("请选择1-6");
            int choose=scanner.nextInt();
            switch (choose){
                case 1:
                    System.out.println("新增");
                    addHouse();
                    break;
                case 2:
                    System.out.println("查找");
                    findHouse();
                    break;
                case 3:
                    delhouse();
                    break;
                case 4:
                    System.out.println("修改房屋信息");
                    update();
                    break;
                case 5:
                    System.out.println("房屋列表");
                    listHouses();
                    break;
                case 6:
                    char c=scanner.next().charAt(0);
                    if(c=='Y')
                    {
                        loop=false;
                    }
                    break;
                default:
                    System.out.println("您输入的数字不合理,请重新输入");
                    break;
            }
        }while(loop);
    }

}

总结

这次练习题着重重视多态与动态绑定机制的使用。