上海建桥学院实验报告
课程名称: 面向对象程序设计 实验类型: 设计型
实验项目名称: 类的封装
实验地点: 实验日期: 2022 年 5 月 1 日
成绩:
一、实验目的及要求
掌握软件包的创建和使用,要求能够熟练运用访问控制符对应用程序中的类的成员变量和成员方法进行不同级别的封装,处理程序中的异常,并能够按照实验要求完成实验,输出结果。
二、实验环境及要求
Jdk1.8以上的开发环境,可使用任何编辑器。
三、实验内容及相应程序
实验内容:
设计一个基于控制台的购书系统。该系统主要有以下类完成
(1) 设计一个图书类(Book),该类处于shopping.book包中,该类具有以下成员变量和成员方法。
成员变量:图书编号(bookid),图书名称(bookname),图书单价(bookprice),库存数量(bookstorage);其中图书单价和库存数量均被private修饰
成员方法:计算图书折扣率的方法getBookDiscount(),当库存数量<50本时,原有价格打5折;当100>库存数量=>50本时,原有价格打6折;当200>库存数量=>100本时,原有价格打8折;当库存数量>=200时,不打折。
建议:由于同学们还未接触过数据库和文件存储数据,所以可以在Book类中直接为图书编号、图书名称、库存数量赋初值。如:
public String bookname=“Java程序设计”;
private float bookprice=28.2f;
private int bookstorage=150;
(2) 设计一个图书管理类(BookManger),该类处于shopping.manager包中,该类的主要功能是接受控制台中来自用户的输入信息,并进行相应的处理,同时通过不同功能的成员方法将处理结果返回,如能够返回图书编号、价格、折扣价格和共支付总额的信息。 建议每一个返回信息均通过不同的方法完成,如可在该类中创建getBookId()的方法,返回图书编号信息,其它依此类推。
如当用户在命令行后输入:Java 程序设计 20
BookManger类会将处理结果,图书编号:100123345 ,价格:28.2元,折扣价:20元,共支付:400元,分别通过getBookId()等4个不同的方法返回对应信息。
(3) 编写测试类AllUsers,当用户从命令行后输入书名和数量时,会显示该书图书编号、价格,以及用户需要支付的金额。
四、实验代码及实验结果(包括输入不合法时的,异常处理提示结果)
package shopping.book;
public class Book {
String bookid;
String bookname;
private float bookprice;
private int bookstorage;
public float getBookDiscount(){
if(this.bookstorage<50)
{
this.bookprice=(float) (this.bookprice*0.5);
}
else if(this.bookstorage>=50&&this.bookstorage<100)
{
this.bookprice=(float) (this.bookprice*0.6);
}
else if(this.bookstorage>=100&&this.bookstorage<200)
{
this.bookprice=(float) (this.bookprice*0.8);
}
return this.bookprice;
}
public void setBookDiscount(int shuliang,float price) {
this.bookprice=price;
this.bookstorage=shuliang;
}
}
//copyright by axuan12651
package shopping.manager;
import shopping.book.Book;
public class BookManger {
String bookid;
float Bookprice;
float Discountprice;
int Booknum;
float Booksumprice;
Book book=new Book();
public String getBookId() {
this.bookid="9787302456925";
return this.bookid;
}
public float getBookPrice() {
this.Bookprice=28.2f;
return this.Bookprice;
}
public float getDiscountprice() {
book.setBookDiscount(this.Booknum, this.Bookprice);
return book.getBookDiscount();
}
public float getBooksumprice() {
this.Booksumprice=this.getDiscountprice()*this.Booknum;
return this.Booksumprice;
}
public void setBook(float jiage,int num) {
this.Bookprice=jiage;
this.Booknum=num;
}
}
//copyright by axuan12651
import java.util.Scanner;
import shopping.manager.BookManger;
public class AllUsers {
public static void main(String[] args) {
BookManger b=new BookManger();
Scanner in=new Scanner(System.in);
System.out.println("输入书名:");
String bookname=in.nextLine();
System.out.println("输入数量:");
int num=in.nextInt();
if(num<0) {
System.out.println("数量输入错误!请重新输入:");
num=in.nextInt();
}
in.close();
float jiage=0.0f;
b.setBook(jiage,num);
System.out.println("书名:"+bookname+"\t图书编号:"+b.getBookId()+"\t数量:"+num+" \t价格:"+b.getBookPrice()+"\t折扣价:"+b.getDiscountprice()+"\t共支付:"+b.getBooksumprice());
}
}
//@作者:axuan12651
五、分析与讨论(实验过程中发现的重点与难点)
//这仅代表俺自己的观点,每个人的重点与难点不一样
调试过程:
编写代码的整个过程没有太大的问题,只是对JAVA的语法规则不太熟悉,唯一一个小的bug是关于double强制转换float的问题,已经通过(float)(this.bookprice)解决了这个问题,最后就是对部分代码和算法进行了优化。
总结:
初步掌握了Eclipse集成开发环境。 掌握Java 基本数据类型、运算符与表达式的使用方法,语法结构,掌握顺序结构、判断结构语法的程序设计方法。对JAVA程序设计有初步的了解。
其次,初步掌握了包的创建,导入使用,同时也对封装有了更深的认识。
,最后就是对部分代码和算法进行了优化。
总结:
初步掌握了Eclipse集成开发环境。 掌握Java 基本数据类型、运算符与表达式的使用方法,语法结构,掌握顺序结构、判断结构语法的程序设计方法。对JAVA程序设计有初步的了解。
其次,初步掌握了包的创建,导入使用,同时也对封装有了更深的认识。