此文档是练习题代码。没有解释。
文章目录
前言
一.零钱通项目
二.本章作业
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语法项目实践
提示:以下是本篇文章正文内容,下面案例可供参考
一.零钱通项目
软件需求:实现收益入账、消费、查看明细、退出系统等功能,如下图所示
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.通过继承实现员工工资核算
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是从当前对象查找,当前类没有再去父类。也遵循就近原则
4.体会重写好处,如图题目
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()方法
6.多态数组问题视频13
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区别
三.房屋出租项目
具有新增房源、查找房源、删除房源、修改房屋信息如果不想修改某个信息直接回车、房屋列表。
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);
}
}
总结
这次练习题着重重视多态与动态绑定机制的使用。