Java语言程序设计A实验1类与对象.docx

上传人:b****5 文档编号:11537253 上传时间:2023-03-19 格式:DOCX 页数:24 大小:159.77KB
下载 相关 举报
Java语言程序设计A实验1类与对象.docx_第1页
第1页 / 共24页
Java语言程序设计A实验1类与对象.docx_第2页
第2页 / 共24页
Java语言程序设计A实验1类与对象.docx_第3页
第3页 / 共24页
Java语言程序设计A实验1类与对象.docx_第4页
第4页 / 共24页
Java语言程序设计A实验1类与对象.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Java语言程序设计A实验1类与对象.docx

《Java语言程序设计A实验1类与对象.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A实验1类与对象.docx(24页珍藏版)》请在冰豆网上搜索。

Java语言程序设计A实验1类与对象.docx

Java语言程序设计A实验1类与对象

实验课程名称:

Java语言程序设计A

实验项目名称

实验1:

类与对象

实验成绩

实验者

专业班级

组别

同组者

开始日期

第一部分:

实验预习报告(包括实验目的及意义,实验基本原理与方法,主要仪器设备及耗材,实验内容及要求,实验方案与技术路线等)

一.实验目的及意义

1.根据实际需求,使用UML类图,合理设计类及其成员(实例变量、方法)。

2.编写、调用构造函数,初始化新建对象。

3.编写、调用方法,完成相关操作。

4.实现信息隐藏与封装。

5.创建对象、调用对象方法。

6.正确使用对象数组。

7.设计、实现算法逻辑。

二.实验基本原理与方法

1.面向对象的概念、思想、思维方式。

2.UML面向对象设计初步。

2.类的概念、结构、定义、使用。

3.构造函数的概念、结构、定义、调用。

4.方法的概念、结构、定义、调用。

5.信息隐藏与封装的概念、实现。

6.对象的概念、创建、使用。

7.对象数组的概念、使用。

8.控制流程。

三.主要仪器设备及耗材

1.PC及其兼容机。

2.计算机操作系统。

3.程序编辑器EditPlus。

4.Java开发工具JDK。

四.实验内容及要求

实验1-1:

请设计一个类Student,该类的实例变量有学号studentNumber、姓名studentName、

专业specialty、学费tuition。

学费tuition要实现封装,最低学费4500元。

请绘制完

整的UML类图,写出类Student的Java源代码。

然后,编写测试类StudentTest,给

出运行结果。

实验1-2:

编写类Book,其实例变量简化为:

bookName

numRated5

numRated4

numRated3

numRated2

numRated1

方法addRating()应保证能接收一个有效整数作为形参,将与形参匹配的评级人数加

1。

例如,如果接收3,则numRated3加1。

方法getAverage(),返回所有评级的平均值。

编写测试类BookReviewTest,在main()方法中,创建一个Book对象,为这本图书评级6次,最后输出这本图书的书名、平均评级。

程序的一种可能的输出结果:

HeadFirstJava,AverageRating:

4.2

实验1-2(数组版本):

重做实验1-2,使用数组代替变量保存图书评级,所有修改只应局限于

类Book内部,测试类BookReviewTest无需修改。

实验1-3(选做):

编写储蓄账户类及测试类,模拟存款,参考以下运行方式:

(1)新开5个储蓄账户,各储蓄账户的编号、户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱。

(2)提示用户从键盘输入储蓄账户编号。

(3)若输入的储蓄账户编号与新开的5个储蓄账户编号之一匹配,则提示用户从键盘输入存款金额,存款金额必须大于0,否则显示错误提示,直到用户输入的存款金额大于0为止。

(4)相应储蓄账户的余额被更新。

(5)存款完成后,提示存款成功,显示该储蓄账户的编号、户名、余额。

(6)若输入的储蓄账户编号与新开的5个储蓄账户编号均无法匹配,显示错误提示,并询问是否还要继续存款。

(7)用户输入yes,继续执行步骤

(2),否则显示退出信息。

最基本要求:

绘制UML类图;储蓄账户的余额必须确保大于等于0。

五.实验方案及技术路线(设计思路、UML类图、算法、注意事项)

1)对于实验1-1,可以对studentNumber,studentName,specialty,tuition四个变量都进行封装,使用private关键字,然后在类中使用get和set方法,实现对这些实例变量的获取和更改。

在setTuition()方法中,首先通过if语句对传入的参数进行判断,若数值大于或等于4500,则修改成功,否则输出错误提示,简略的UML图如下:

2)对于实验1-2中,各个星级人数的统计通过switch(){case}语句即可实现,但要注意的是,最好加上default语句用以处理错误输入的情况。

数组版本只需要将numRated5、numRated4、numRated3、numRated2、numRated1这几个变量放入一个int[]数组中即可。

3)实验1-3中,因为考虑到各个储蓄账号不能重复,并且在每次操作的时候需要进行匹配,若每次都通过for()循环遍历则比较繁琐,操作时间长,说以采用HashMap集合存储账号,账号number为关键字,每个Account对象为值,因为在测试类中会使用到containsKey()等方法,所以在Account类中需要重写toString()、equal()以及hashCode()方法。

简略的UML图如下:

 

第二部分:

实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)

⏹实验1-1

程序代码如下:

1)Student类代码:

publicclassStudent

{

privateStringstudentNumber;

privateStringstudentName;

privateStringspecialty;

privatedoubletuition;

publicStudent(StringstudentNumber,StringstudentName,Stringspecialty,doubletuition)

{

this.studentNumber=studentNumber;

this.studentName=studentName;

this.specialty=specialty;

this.tuition=tuition;

}

publicvoidsetStudentNumber(StringstudentNumber){

this.studentNumber=studentNumber;

}

publicStringgetStudentNumber(){

returnstudentNumber;

}

publicStringgetStudentName(){

returnstudentName;

}

publicvoidsetStudentName(StringstudentName){

this.studentName=studentName;

}

publicStringgetSpecialty(){

returnspecialty;

}

publicvoidsetSpecialty(Stringspecialty){

this.specialty=specialty;

}

publicvoidsetTuition(doubletuition){

if(tuition<4500)

{

System.out.println("最低学费为4500,请不要低于此数值。

");

}

else

{this.tuition=tuition;}

}

publicdoublegetTuition(){

returntuition;

}

}

2)StudentTest类代码:

publicclassStudentTest{

publicstaticvoidmain(String[]args){

//创建学生实例

Studentstudent1=newStudent("学号","姓名","专业",5000);

Studentstudent2=newStudent("学号","姓名","专业",5500);

//修改student2的学号

student2.setStudentNumber("新学号");

//修改student2的姓名

student2.setStudentName("新姓名");

//修改student1的专业信息

student1.setSpecialty("新专业");

//修改student1学费信息

student1.setTuition(4500);

//输出student1和student2的信息

System.out.println("学号:

"+student1.getStudentNumber()+"\n"+

"姓名:

"+student1.getStudentName()+"\n"+

"专业:

"+student1.getSpecialty()+"\n"+

"学费:

"+student1.getTuition()+"\n");

System.out.println("学号:

"+student2.getStudentNumber()+"\n"+

"姓名:

"+student2.getStudentName()+"\n"+

"专业:

"+student2.getSpecialty()+"\n"+

"学费:

"+student2.getTuition()+"\n");

}

}

运行结果如下:

省略

⏹实验1-2

程序代码如下:

1)Book类代码:

publicclassBook{

privateStringbookName;

privateintnumRate1,numRate2,numRate3,numRate4,numRate5;

publicBook(StringbookName)

{

this.bookName=bookName;

//初始化各星级的人数为0

numRate1=0;

numRate2=0;

numRate3=0;

numRate4=0;

numRate5=0;

}

publicStringgetBookName()

{

returnbookName;

}

publicvoidsetBookName(StringbookName)

{

this.bookName=bookName;

}

publicvoidaddRating(intrateIn)

{

switch(rateIn)

{

case1:

numRate1++;break;

case2:

numRate2++;break;

case3:

numRate3++;break;

case4:

numRate4++;break;

case5:

numRate5++;break;

default:

System.err.println("数字"+rateIn+"不在星级评定范围,此次输入无效,请输入数字1-5!

");break;

}

}

publicdoublegetAverage()

{doubleaverage=0;average=(numRate1*1+numRate2*2+numRate3*3+numRate4*4+numRate5*5)*1.0/(numRate1+numRate2+numRate3+numRate4+numRate5);

returnaverage;

}

}

2)(数组版)Book类代码:

publicclassBook

{

privateStringbookName;

privateint[]numRate=newint[5];

publicBook(StringbookName)

{

this.bookName=bookName;

//初始化各星级的人数为0

for(inti=0;i<5;i++)

{

numRate[i]=0;

}

}

publicStringgetBookName()

{

returnbookName;

}

publicvoidsetBookName(StringbookName)

{

this.bookName=bookName;

}

publicvoidaddRating(intrateIn)

{

switch(rateIn)

{

case1:

numRate[0]++;break;

case2:

numRate[1]++;break;

case3:

numRate[2]++;break;

case4:

numRate[3]++;break;

case5:

numRate[4]++;break;

default:

System.err.println("数字"+rateIn+"不在星级评定范围,此次输入无效,请输入数字1-5!

");break;

}

}

publicdoublegetAverage(){

doubleaverage=0;

average=(numRate[0]*1+numRate[1]*2+numRate[2]*3+numRate[3]*4+numRate[4]*5)*1.0/(numRate[0]+numRate[1]+numRate[2]+numRate[3]+numRate[4]);

returnaverage;

}

}

3)BookReviewTest类代码:

importjava.util.Scanner;

publicclassBookReviewTest{

publicstaticvoidmain(String[]args)

{

Bookbook=newBook("Java大学教程");

Scannersc=newScanner(System.in);

//6次评级

for(inti=1;i<=6;i++)

{

System.out.println("书本《Java大学教程》星级评分开始,请输入数字1-5:

");

intrating=sc.nextInt();

book.addRating(rating);

}

System.out.println("书名:

"+book.getBookName()+"\n"

+"平均星级:

"+book.getAverage());

}

}

 

运行结果如下:

1)当出现输入星级大于5或小于0时

2)当输入正常时:

⏹实验1-3

程序代码如下:

1)储蓄账户Account类代码:

publicclassAccount

{

privateStringnumber;

privateStringname;

privatedoublebalance;

publicAccount(Stringnumber,Stringname)

{

this.number=number;

this.name=name;

balance=0;

}

publicStringgetNumber()

{

returnnumber;

}

publicStringgetName()

{

returnname;

}

publicdoublegetBalance()

{

returnbalance;

}

publicvoiddeposit(doubleamountIn)

{

balance-=amountIn;

}

publicvoidwithdraw(doubleamountIn)

{

balance+=amountIn;

}

publicStringtoString()

{

return"("+number+","+name+","+balance+")\n";}

publicbooleanequals(ObjectobjIn)

{

AccountaccIn=(Account)objIn;

returnnumber.equals(accIn.number);

}

publicinthashCode()

{

returnnumber.hashCode();

}

}

2)测试类AccountTest代码

importjava.util.HashMap;

importjava.util.InputMismatchException;

importjava.util.Map;

importjava.util.Scanner;

publicclassAccountTest{

publicstaticvoidmain(String[]args)

{

MapaccountList=newHashMap();

//创建3个账户并放入集合accountList中

Accountaccount1=newAccount("11111","dengqiuping");

account1.withdraw(500);

accountList.put("11111",account1);

Accountaccount2=newAccount("22222","lixi");

account2.withdraw(100);

accountList.put("22222",account2);

Accountaccount3=newAccount("33333","chengying");

account3.withdraw(1000);

accountList.put("33333",account3);

Accountaccount4=newAccount("44444","susu");

account4.withdraw(5000);

accountList.put("44444",account4);

Accountaccount5=newAccount("55555","zhangxi");

account5.withdraw(300);

accountList.put("55555",account5);

//当用户输入数据类型错误的时候,输出错误提示

try{

selectChoice(accountList);

}catch(InputMismatchExceptione){

System.err.println("输入错误,请输入数字1-4!

");

selectChoice(accountList);

}

}

publicstaticvoidselectChoice(MapaccountListIn)

{

Scannersc=newScanner(System.in);

intinput;

do

{

System.out.println("1.存款");

System.out.println("2.取款");

System.out.println("3.余额查询");

System.out.println("4.退出");

System.out.println("请输入操作【1-4】:

");

input=sc.nextInt();

switch(input)

{

case1:

option1(accountListIn);break;

case2:

option2(accountListIn);break;

case3:

option3(accountListIn);break;

case4:

System.exit(0);

//当输入的数字小于1或大于4时输出错误提示

default:

System.err.println("无效输入,请输入数字【1-4】!

");

}

}while(input!

=4);

}

//取款操作

privatestaticvoidoption1(MapaccountListIn)

{StringtempNumber;

Scannersc1=newScanner(System.in);

System.out.println("请输入账号(输入'0'返回上一级):

");

tempNumber=sc1.next();

if(accountListIn.containsKey(tempNumber))

{

try{

for(;;)

{

System.out.println("请输入存款数额:

");

DoubletempAmount=sc1.nextDouble();

if(tempAmount<0)

{

System.err.println("存款数额不能小于0元,请从重输入数值!

");

}

else

{

AccountcurrAccount=accountListIn.get(tempNumber);

currAccount.withdraw(tempAmount);

System.out.println("存款成功!

");

System.out.println("账号:

"+currAccount.getNumber()+"\n"+

"账户名:

"+currAccount.getName()+"\n"+

"余额:

"+currAccount.getBalance());

break;

}

}

}catch(InputMismatchExceptione){

System.err.println("无效输入,请输入大于0的数值!

");

option1(accountListIn);

}}

elseif(tempNumber.equals("0"))

{selectChoice(accountListIn);}

else

{

Stringc=reChoice();

if(c.equals("1"))

{option1(accountListIn);}

else{//返回主菜单

}}}

//取款

privatestaticvoidoption2(MapaccountListIn)

{

Scannersc2=newSca

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1