实验3 类和对象的创建与使用一、实验目的1、掌握类的定义和对象的创建;2、掌握构造方法的作用、格式及重载;3、掌握修饰词对成员存取权限的限制。
4、掌握实例成员、类成员的定义和使用方法。
二、实验内容1、定义储蓄账户类,并创建对象模拟银行基本操作。
2、两游戏角色决斗。
给定二个不同的角色,判定交手的胜负关系。
(选做)3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。
三、实验步骤说明:请将第1,3题代码写入实验报告实验步骤处。
1、模拟银行账户功能。
编写程序,模拟银行账户功能。
要求如下:属性:账号、姓名、地址、存款余额、最小余额。
方法:存款、取款、查询。
根据用户操作显示储户相关信息。
如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。
取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。
具体显示信息可据方便性原则自拟。
public class AccountOperation{public static void main(String [] args){Account account1=new Account("650101","柳眉","天河学院",800.00);Account account2=new Account("650102","郑杰","天河学院",200.00);account1.transfer(account1,account2,300.0);account1.deposit(300.5);account1.withdraw(200);account1.withdraw(300);account1.query();System.out.println(account1.toString());//System.out.println(); error!!}}class Account{private String account;private String name;private String address;private double balance;static double minBalance=10.0;public Account(String account,String name,String address,double balance){this.account=account;this.address=address;=name;this.balance=balance;}public void deposit(double cash){System.out.print("您账户原有余额:"+balance+" ");System.out.print("现存入:"+cash+" ");balance+=cash;System.out.println("现有余额:"+balance);}public void withdraw(double cash){double temp=balance-cash;if(temp<minBalance)System.out.println("至少保留余额:"+minBalance);else{balance=temp;System.out.println("取款成功!取款"+cash+" "+"现有余额:"+balance);}}public void tranfer(Account a1,Account a2,double cash){double temp=a1.balance-cash;if(temp<minBalance)System.out.println("余额不足!");else{a1.balance-=cash;a2.balance+=cash;System.out.println("转账成功!");System.out.println(+"转出"+cash+","++"转入"+cash);System.out.println(+"现有余额:"+a1.balance+","++"现有余额:"+a2.balance);}}public void query(){System.out.println("现有余额:"+balance);}public String toString(){return "账号:"+account+" "+"姓名:"+name+" "+"地址:"+address+" "+"现有余额:"+balance;}}2、两游戏角色决斗。
(选做,不需写作业本上)角色1交手次数+1,生命值-1,经验值+2;角色2交手次数+1,生命值-2,经验值+3。
经验值每增加50时,生命值+1;生命值<0判为负。
生命值初始为1000,经验值初始为0。
给定二个不同的角色,判定交手的胜负关系。
提示:step1:建立角色类,给出相应的成员,并能以生命值、经验值初始化角色对象。
step2:建立fight方法,接收二个角色类型的参数,返回胜者。
step3:初始化二角色,调用fight方法。
class Role{int n,exp,hp; //n:交手次数exp:经验值hp:生命值Role(int h,int e) //构造函数,以生命值、经验值初始化角色对象{hp=h;exp=e;}Role fight(Role r1,Role r2) //接收两个角色类型的参数,返回胜者{while(r1.hp>=0 && r2.hp>=0) //执行计算决斗胜负的逻辑{r1.n++;//交手次数+1r1.hp--;//生命值-1r1.exp+=2;//经验值+2if( r1.exp%50==0)r1.hp++;//经验值每增加50时,生命值+1r2.n++;//交手次数+1r2.hp-=2;//生命值-2r2.exp+=3;//经验值+3if(r2.exp%50==0)r2.hp++;//经验值每增加50时,生命值+1}if(r1.hp>=0)//判断胜负System.out.print("角色1获胜");return r1;}else{System.out.print("角色2获胜");return r2;}}public static void main(String[] args){Role r1=new Role(1000,0);//初始化角色1Role r2=new Role(1000,0);//初始化角色2Role win=r1.fight(r1,r2);//决斗,返回胜者System.out.println(",双方交手了"+win.n+"次");}}3、根据分数录取学生。
设计一个学校类,其中包含成员变量line(录取分数线)和对该变量值进行设置和获取的方法。
编写一个学生类,它的成员变量有考生的name(姓名)、id(考号)、total(综合成绩)、sports(体育成绩)。
它还有获取学生的综合成绩和体育成绩的方法。
编写一个录取类,它的一个方法用于判断学生是否符合录取条件。
其中录取条件为:综合成绩在录取分数线之上,或体育成绩在96以上并且综合成绩大于300。
在该类的main()方法中,建立若干个学生对象,对符合录取条件的学生,输出其信息及“被录取”。
class School{int line;void setLine(int x){line=x;}int getLine(){return line;}}class Student{String name;int total;int sports;public Student(String a,String b,int c,int d){name=a;id=b;total=c;sports=d;}public int getTotal(){return total;}public int getSports(){return sports;}public void getMessage(){System.out.println(name+" "+id+" "+total+" "+sports);}}class Enroll{static void enrollOrNot(Student a,School b){if(a.getTotal()>=b.getLine()||a.getTotal()>=300&&a.getSports()>=96) {a.getMessage();System.out.println("被录取!");}}public static void main(String [] args){School thxy=new School();thxy.setLine(390);Student s1=new Student("Tom","01",460,70);Student s2=new Student("Jerry","02",350,98);Student s3=new Student("Peter","03",290,96);enrollOrNot(s1,thxy);enrollOrNot(s2,thxy);enrollOrNot(s3,thxy);}}四、实验记录与分析(可自拟或选择)1、重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。
2、每个对象拥有各自的实例成员变量,而所有对象共享一个类成员变量。