Java语言程序设计A实验1类与对象Word格式文档下载.docx
《Java语言程序设计A实验1类与对象Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Java语言程序设计A实验1类与对象Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
请设计一个类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){
publicStringgetSpecialty(){
returnspecialty;
publicvoidsetSpecialty(Stringspecialty){
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的信息
学号:
+student1.getStudentNumber()+"
\n"
+
"
姓名:
+student1.getStudentName()+"
专业:
+student1.getSpecialty()+"
学费:
+student1.getTuition()+"
+student2.getStudentNumber()+"
+student2.getStudentName()+"
+student2.getSpecialty()+"
+student2.getTuition()+"
运行结果如下:
省略
⏹实验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)
publicvoidaddRating(intrateIn)
switch(rateIn)
{
case1:
numRate1++;
break;
case2:
numRate2++;
case3:
numRate3++;
case4:
numRate4++;
case5:
numRate5++;
default:
System.err.println("
数字"
+rateIn+"
不在星级评定范围,此次输入无效,请输入数字1-5!
}
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
privateint[]numRate=newint[5];
for(inti=0;
i<
5;
i++)
numRate[i]=0;
numRate[0]++;
numRate[1]++;
numRate[2]++;
numRate[3]++;
numRate[4]++;
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]);
3)BookReviewTest类代码:
importjava.util.Scanner;
publicclassBookReviewTest{
publicstaticvoidmain(String[]args)
Bookbook=newBook("
Java大学教程"
Scannersc=newScanner(System.in);
//6次评级
for(inti=1;
=6;
System.out.println("
书本《Java大学教程》星级评分开始,请输入数字1-5:
intrating=sc.nextInt();
book.addRating(rating);
书名:
+book.getBookName()+"
+"
平均星级:
+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;
publicclassAccountTest{
Map<
String,Account>
accountList=newHashMap<
();
//创建3个账户并放入集合accountList中
Accountaccount1=newAccount("
11111"
dengqiuping"
account1.withdraw(500);
accountList.put("
account1);
Accountaccount2=newAccount("
22222"
lixi"
account2.withdraw(100);
account2);
Accountaccount3=newAccount("
33333"
chengying"
account3.withdraw(1000);
account3);
Accountaccount4=newAccount("
44444"
susu"
account4.withdraw(5000);
account4);
Accountaccount5=newAccount("
55555"
zhangxi"
account5.withdraw(300);
account5);
//当用户输入数据类型错误的时候,输出错误提示
try{
selectChoice(accountList);
}catch(InputMismatchExceptione){
System.err.println("
输入错误,请输入数字1-4!
publicstaticvoidselectChoice(Map<
accountListIn)
Scannersc=newScanner(System.in);
intinput;
do
{
System.out.println("
1.存款"
2.取款"
3.余额查询"
4.退出"
请输入操作【1-4】:
input=sc.nextInt();
switch(input)
{
case1:
option1(accountListIn);
case2:
option2(accountListIn);
case3:
option3(accountListIn);
case4:
System.exit(0);
//当输入的数字小于1或大于4时输出错误提示
default:
无效输入,请输入数字【1-4】!
}
}while(input!
=4);
//取款操作
privatestaticvoidoption1(Map<
{StringtempNumber;
Scannersc1=newScanner(System.in);
请输入账号(输入'
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("
存款成功!
账号:
+currAccount.getNumber()+"
"
账户名:
+currAccount.getName()+"
余额:
+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(Map<
accountListIn)
Scannersc2=newSca