实验2 Java类和对象(二)(4学时) 1. 实验目的
理解面向对象与面向过程在编程思想上的差异,掌握如何定义一个类,熟练掌握构造方法的定义和调用,掌握包的概念,掌握类中修饰符(public, protected, private)的使用方法和意义,掌握this关键字的使用,掌握static关键字的使用方法,理解静态变量、静态方法和静态代码块的意义,掌握一维数组和二维数组的定义和使用方法,掌握集合类Vector和ArrayList的使用方法,并理解如何将集合类使用为动态数组,掌握String, StringBuffer和StringTokenizer的使用方法。
2. 实验类型
设计型
3. 实验基本要求
1(完善银行顾客例子,与上课实例类似).具体满足如下要求:
(1) 为顾客类创建一个带有4个参数的构造函数,初始化类中的4个成员变量; (2) 为了去掉冗余,将顾客的业务放到顾客类的run()方法中;
(3) 在测试类中创建4个顾客对象,存储在一个对象数组中,提示用户输入账号,根据账号确定执行哪个顾客的业务,即执行相应顾客的run方法(使用for循环);
(4) 顾客类中添加一个静态变量allNum,统计该银行一共有多少位顾客,在构造方法中将变量的值+1。
(5) 在顾客类中添加一个转账的方法,在顾客数组的4个对象之间转账,提示用户输入想转入的账号,在顾客对象的数组中查找是否有该账号,如果有该账号,提示用户输入转账金额,如果转账金额为正数,并且大于剩余金额,提示转账成功,否则提示余额不足,如果转账金额为负数,则执行反转账(从对方账户向自己账户转账),反转账要求知道对方密码(可以调用之前编写的isPass()方法),否则不允许反转账。
(6) 将顾客的数组改为动态数组,可使用Vector或者ArrayList。
(7) 创建一个管理员类,类中包括id,name,password等数据,类中提供添加顾客、删除顾客、计算储蓄总额、打印某个顾客的信息等方法,具体定义及功能列举如下:
? 添加顾客:方法头可以定义为void addCust(Vector st),方法中提示管理员输入账号,密
码,开户金额,顾客名字,用这些信息创建一个Cutomer类,并添加到st参数传进来的Vector中。
6
? 删除顾客:方法头可以定义为void deleteCust(Vector st),方法中提示输入想要删除的顾
客的账号,遍历st参数传进来的Vector,找到后,将其删除。
? 计算储蓄总额:方法头可以定义为void sum(Vector st),遍历st参数传进来的Vector,
将所有账号的金额加起来。
? 打印某个顾客的信息:方法头可以定义为void printOnePerson(Vector st),提示输入想要
查询顾客的账号,遍历st参数传进来的Vector,找到后,将该顾客的信息打印出来。
2.定义一个名为MyRectangle的矩形类,类中有4个私有的整型域,分别是矩形的左上角坐标(xUp,yUp)和右下角坐标(xDown,yDown);类中定义没有参数的构造方法和有4个int参数的构造方法,用来初始化类对象。类中还有以下方法: getW( )——计算矩形的宽度;getH( )——计算矩形的高度;area( )——计算矩形的面积;toString( )——把矩形的宽、高和面积等信息作为为字符串返回。编写应用程序使用MyRectangle类。
3. 小镇的图书馆需要一个新的电子租借系统。该小镇有两个图书馆,每个图书馆提供很多书让客户去租赁。客户可以打印出所有的图书清单,包括现存的,已经借出的和归还的。现在我们需要提供两个类,Book类和Library类,有这两个类提供图书数据库的功能。请补充缺少的方法去完成类的功能。 步骤:
(1)补充完成Book类的定义。这个类需要定义获取图书标题的方法,查看图书的作者,查看是否可用的方法,是否借出方法。图书的状态用“available”和“borrowed”表示。现在的结构框架内缺少这些方法的执行内容,请用合适的功能代码补充方法体的内容。用main方法测试方法,当你运行程序时应该输出的内容:
图书名称:Java程序设计教程
图书作者:丁一 出租状态:出租中 可用状态:不可用
public class Book {
String title; //图书名称 String author; //作者
boolean borrowed; //图书状态,初始状态为可用
//使用给定的图书名称,创建一个新的Book对象 ,并置该对象的初始状态为可用 public Book(String bookTitle,String author){ // Implement this method }
7
// 借书,标记该书为借出状态 public void borrowed() { // Implement this method }
//还书,标记该书为可用状态 public void returned() { // Implement this method }
// Returns true if the book is rented, false otherwise public boolean isBorrowed() {
// Implement this method }
// Returns true if the book is available, false otherwise public Boolean isAvailable(){
// Implement this method }
//返回图书的名称
public String getTitle() {
// Implement this method }
public static void main(String[] arguments){
Book example = new Book(\程序设计教程\System.out.println(\图书名称:\System.out.println(\图书作者:\System.out.println(\出租状态:\System.out.println(\可用状态:\} }
(2)完成library类:我们应该建立一个类用于表示每个图书馆,并且管理每个图书馆的图书,他们有不同的地址和图书数目。建立一个Library类。复制下面的结构代码。我们提供一个main方法用于建立两个图书馆,然后执行一些对书目的操作,图书入库、出借图书和图书归还,当一本处于出租中的图书被借阅时,输出“图书已被出租”,如果没有要借的图书,输出“没有发现要借的图书”。当然,这些所有的方法成员和变量成员都是缺少的,你需要填充这些缺省的部分。解读下面的main方法检查编译错误,填充缺少的方法和成员内容。
8
public class Libaray {
// Add the missing implementation to this class public static void main(String[] args){
// Create two libraries
Library firstLibrary = new Library(\文化路80号\ Library secondLibrary = new Library(\建设路22号\ // Add four books to the first library
firstLibrary.addBook(new Book(\飞鸟集\泰戈尔\firstLibrary.addBook(new Book(\安妮日记\弗兰克\firstLibrary.addBook(new Book(\红楼梦\曹雪芹\
firstLibrary.addBook(new Book(\希腊的神话和传说\斯威布\secondLibrary.addBook(new Book(\安妮日记\弗兰克\secondLibrary.addBook(new Book(\红楼梦\曹雪芹\
secondLibrary.addBook(new Book(\希腊的神话和传说\斯威布\
System.out.println(\图书馆地址:\firstLibrary.printAddress(); secondLibrary.printAddress(); System.out.println();
System.out.println(\从两个图书馆借【飞鸟集】\firstLibrary.borrowBook(\飞鸟集\firstLibrary.borrowBook(\飞鸟集\secondLibrary.borrowBook(\飞鸟集\System.out.println();
/ /输出两个图书馆各自可外借的图书
System.out.println(\可外借的图书:\firstLibrary.printAvailableBooks(); System.out.println();
System.out.println(\可外借的图书:\secondLibrary.printAvailableBooks(); System.out.println();
// 向first library归还【飞鸟集】
System.out.println(\向first library归还【飞鸟集】:\ firstLibrary.returnBook(\飞鸟集\ System.out.println();
//输出first library图书馆可外借的图书
System.out.println(\可外借的图书:\firstLibrary.printAvailableBooks(); } }
9
4. (选做). 链表的每个结点定义如下: class Node {
int data; Node next; }
定义一个链表类,创建一个初始为10个结点的单向链表,结点数据用随机函数产生。 ① 输出该链表:
② 分别在首部,中间和尾部增加一个数据为100的结点,输出链表。
4. 实验思考题
1. 以下程序的运行结果? class StaticDemo { static int x; int y;
public static int getX() { return x; }
public static void setX(int newX) { x = newX; }
public int getY() { return y; }
public void setY(int newY) { y = newY; } }
public class EXP3_4 {
public static void main(String[] args) {
System.out.println(\静态变量x=\ StaticDemo a= new StaticDemo(); StaticDemo b= new StaticDemo(); a.setX(1); a.setY(2); b.setX(3); b.setY(4);
System.out.println(\静态变量a.x=\ System.out.println(\实例变量a.y=\ System.out.println(\静态变量b.x=\ System.out.println(\实例变量b.y=\ } }
10