Java语言程序设计A实验1:类与对象(共21页)_第1页
Java语言程序设计A实验1:类与对象(共21页)_第2页
Java语言程序设计A实验1:类与对象(共21页)_第3页
Java语言程序设计A实验1:类与对象(共21页)_第4页
Java语言程序设计A实验1:类与对象(共21页)_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验课程名称:Java语言程序设计A实验项目名称实验1:类与对象实验成绩实 验 者专业班级组 别同 组 者无开始日期第一部分:实验预习报告(包括实验目的及意义,实验基本原理与方法,主要仪器设备及耗材,实验内容及要求,实验方案与技术路线等)一实验目的及意义1根据实际需求,使用UML类图,合理设计类及其成员(实例变量、方法)。2编写、调用构造函数,初始化新建对象。3编写、调用方法,完成相关操作。4实现信息隐藏与封装。5创建对象、调用对象方法。6正确使用对象数组。7设计、实现算法逻辑。二实验基本原理与方法1面向对象的概念、思想、思维方式。2UML面向对象设计初步。2类的概念、结构、定义、使用。3构造

2、函数的概念、结构、定义、调用。4方法的概念、结构、定义、调用。5信息隐藏与封装的概念、实现。6对象的概念、创建、使用。7对象数组的概念、使用。8控制流程。三主要仪器设备及耗材1PC及其兼容机。2计算机操作系统。3程序编辑器EditPlus。4Java开发工具JDK。四实验内容及要求实验1-1:请设计一个类Student,该类的实例变量有学号studentNumber、姓名studentName、专业specialty、学费tuition。学费tuition要实现封装,最低学费4500元。请绘制完整的UML类图,写出类Student的Java源代码。然后,编写测试类StudentTest,给出运

3、行结果。实验1-2:编写类Book,其实例变量简化为:bookNamenumRated5numRated4numRated3numRated2numRated1方法addRating( )应保证能接收一个有效整数作为形参,将与形参匹配的评级人数加1。例如,如果接收3,则numRated3加1。方法getAverage( ),返回所有评级的平均值。编写测试类BookReviewTest,在main( )方法中,创建一个Book对象,为这本图书评级6次,最后输出这本图书的书名、平均评级。程序的一种可能的输出结果:Head First Java,Average Rating: 4.2实验1-2(数组

4、版本):重做实验1-2,使用数组代替变量保存图书评级,所有修改只应局限于类Book内部,测试类BookReviewTest无需修改。实验1-3(选做):编写储蓄账户类及测试类,模拟存款,参考以下运行方式:(1)新开5个储蓄账户,各储蓄账户的编号、户名在新开储蓄账户时初始化,假设每位用户新开储蓄账户时都存入了一笔钱。(2)提示用户从键盘输入储蓄账户编号。(3)若输入的储蓄账户编号与新开的5个储蓄账户编号之一匹配,则提示用户从键盘输入存款金额,存款金额必须大于0,否则显示错误提示,直到用户输入的存款金额大于0为止。(4)相应储蓄账户的余额被更新。(5)存款完成后,提示存款成功,显示该储蓄账户的编号

5、、户名、余额。(6)若输入的储蓄账户编号与新开的5个储蓄账户编号均无法匹配,显示错误提示,并询问是否还要继续存款。(7)用户输入yes,继续执行步骤(2),否则显示退出信息。最基本要求:绘制UML类图;储蓄账户的余额必须确保大于等于0。五实验方案及技术路线(设计思路、UML类图、算法、注意事项) 1)对于实验1-1,可以对studentNumber,studentName,specialty,tuition四个变量都进行封装,使用private关键字,然后在类中使用get和set方法,实现对这些实例变量的获取和更改。在setTuition()方法中,首先通过if语句对传入的参数进行判断,若数值

6、大于或等于4500,则修改成功,否则输出错误提示,简略的UML图如下: 2)对于实验1-2中,各个星级人数的统计通过switch()case语句即可实现,但要注意的是,最好加上default语句用以处理错误输入的情况。数组版本只需要将numRated5、numRated4、numRated3、numRated2、numRated1这几个变量放入一个int数组中即可。3)实验1-3中,因为考虑到各个储蓄账号不能重复,并且在每次操作的时候需要进行匹配,若每次都通过for()循环遍历则比较繁琐,操作时间长,说以采用HashMap集合存储账号,账号number为关键字,每个Account对象为值,因为

7、在测试类中会使用到containsKey()等方法,所以在Account类中需要重写toString()、equal()以及hashCode()方法。简略的UML图如下:第二部分:实验过程记录(可加页)(代码、运行结果、实验中出现的问题及解决过程)n 实验1-1程序代码如下:1)Student类代码:public class Studentprivate String studentNumber;private String studentName;private String specialty;private double tuition;public Student(String stu

8、dentNumber, String studentName, String specialty,double tuition)this.studentNumber = studentNumber;this.studentName = studentName;this.specialty = specialty;this.tuition = tuition;public void setStudentNumber(String studentNumber) this.studentNumber=studentNumber;public String getStudentNumber() ret

9、urn studentNumber;public String getStudentName() return studentName;public void setStudentName(String studentName) this.studentName = studentName;public String getSpecialty() return specialty;public void setSpecialty(String specialty) this.specialty = specialty;public void setTuition(double tuition)

10、 if(tuition4500)System.out.println(最低学费为4500,请不要低于此数值。);elsethis.tuition = tuition;public double getTuition() return tuition;2)StudentTest 类代码:public class StudentTest public static void main(String args) /创建学生实例Student student1=new Student(学号,姓名,专业,5000);Student student2=new Student(学号,姓名,专业,5500);

11、/修改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.getSpec

12、ialty()+n+学费:+student1.getTuition()+n);System.out.println(学号:+student2.getStudentNumber()+n+姓名:+student2.getStudentName()+n+专业:+student2.getSpecialty()+n+学费:+student2.getTuition()+n);运行结果如下:省略n 实验1-2程序代码如下:1) Book类代码:public class Book private String bookName;private int numRate1,numRate2,numRate3,nu

13、mRate4,numRate5;public Book(String bookName) this.bookName = bookName;/初始化各星级的人数为0numRate1=0;numRate2=0;numRate3=0;numRate4=0;numRate5=0;public String getBookName()return bookName;public void setBookName(String bookName)this.bookName = bookName;public void addRating(int rateIn)switch(rateIn)case 1:n

14、umRate1+;break;case 2:numRate2+;break;case 3:numRate3+;break;case 4:numRate4+;break;case 5:numRate5+;break;default:System.err.println(数字+rateIn+不在星级评定范围,此次输入无效,请输入数字1-5!);break;public double getAverage()double average=0; average=(numRate1*1+numRate2*2+numRate3*3+numRate4*4+numRate5*5)*1.0/(numRate1+

15、numRate2+numRate3+numRate4+numRate5);return average;2) (数组版)Book类代码:public class Bookprivate String bookName;private int numRate=new int5;public Book(String bookName) this.bookName = bookName;/初始化各星级的人数为0for(int i=0;i5;i+)numRatei=0;public String getBookName()return bookName;public void setBookName(

16、String bookName)this.bookName = bookName;public void addRating(int rateIn)switch(rateIn)case 1:numRate0+;break;case 2:numRate1+;break;case 3:numRate2+;break;case 4:numRate3+;break;case 5:numRate4+;break;default:System.err.println(数字+rateIn+不在星级评定范围,此次输入无效,请输入数字1-5!);break;public double getAverage()

17、double average=0;average=(numRate0*1+numRate1*2+numRate2*3+numRate3*4+numRate4*5)*1.0/(numRate0+numRate1+numRate2+numRate3+numRate4);return average;3) BookReviewTest类代码:import java.util.Scanner;public class BookReviewTest public static void main(String args)Book book=new Book(Java大学教程);Scanner sc=ne

18、w Scanner(System.in);/6次评级for(int i=1;i=6;i+)System.out.println(书本Java大学教程星级评分开始,请输入数字1-5:);int rating=sc.nextInt();book.addRating(rating);System.out.println(书名:+book.getBookName()+n+平均星级:+book.getAverage();运行结果如下:1) 当出现输入星级大于5或小于0时2) 当输入正常时:n 实验1-3程序代码如下:1)储蓄账户Account 类代码:public class Account priva

19、te String number; private String name; private double balance;public Account(String number, String name)this.number = number; = name;balance=0;public String getNumber()return number;public String getName()return name;public double getBalance()return balance;public void deposit(double amount

20、In)balance-=amountIn;public void withdraw(double amountIn)balance+=amountIn;public String toString()return (+number+,+name+,+balance+)n;public boolean equals(Object objIn)Account accIn=(Account)objIn;return number.equals(accIn.number);public int hashCode()return number.hashCode();2)测试类AccountTest 代码

21、import java.util.HashMap;import java.util.InputMismatchException;import java.util.Map;import java.util.Scanner;public class AccountTest public static void main(String args)Map accountList=new HashMap();/创建3个账户并放入集合accountList中Account account1=new Account(11111,dengqiuping);account1.withdraw(500);acc

22、ountList.put(11111, account1);Account account2=new Account(22222,lixi);account2.withdraw(100);accountList.put(22222, account2); Accountaccount3=newAccount(33333,chengying);account3.withdraw(1000);accountList.put(33333, account3);Account account4=new Account(44444,susu);account4.withdraw(5000);accoun

23、tList.put(44444, account4);Account account5=new Account(55555,zhangxi);account5.withdraw(300);accountList.put(55555, account5);/当用户输入数据类型错误的时候,输出错误提示try selectChoice(accountList); catch (InputMismatchException e) System.err.println(输入错误,请输入数字1-4!);selectChoice(accountList);public static void selectC

24、hoice(Map accountListIn)Scanner sc=new Scanner(System.in);int input;doSystem.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)case 1:option1(accountListIn);break;case 2:option2(accountListIn

25、);break;case 3:option3(accountListIn);break;case 4:System.exit(0);/当输入的数字小于1或大于4时输出错误提示default :System.err.println(无效输入,请输入数字【1-4】!);while(input!=4);/取款操作private static void option1(Map accountListIn) String tempNumber;Scanner sc1 = new Scanner(System.in);System.out.println(请输入账号(输入0返回上一级):);tempNum

26、ber = sc1.next();if(accountListIn.containsKey(tempNumber)try for(;)System.out.println(请输入存款数额:);Double tempAmount=sc1.nextDouble();if(tempAmount0)System.err.println(存款数额不能小于0元,请从重输入数值!);elseAccount currAccount=accountListIn.get(tempNumber);currAccount.withdraw(tempAmount);System.out.println(存款成功!);S

27、ystem.out.println(账号:+currAccount.getNumber()+n+账户名:+currAccount.getName()+n+余额:+currAccount.getBalance();break; catch (InputMismatchException e) System.err.println(无效输入,请输入大于0的数值!);option1(accountListIn);else if(tempNumber.equals(0)selectChoice(accountListIn);elseString c=reChoice();if(c.equals(1)o

28、ption1(accountListIn);else/返回主菜单/取款private static void option2(Map accountListIn) Scanner sc2=new Scanner(System.in);System.out.println(请输入账号(输入0返回上一级):);String tempNumber=sc2.next();if(accountListIn.containsKey(tempNumber)try for(;)System.out.println(请输入取款数额:);Double tempAmount=sc2.nextDouble();Acc

29、ount currAccount=accountListIn.get(tempNumber);if(tempAmountcurrAccount.getBalance()System.err.println(余额不足,请重新输入数值!);else if(tempAmount0) System.err.println(取款额不能为负,请重新输入数值!);elsecurrAccount.deposit(tempAmount);System.out.println(取款成功!);System.out.println(账号:+currAccount.getNumber()+n+账户名:+currAcco

30、unt.getName()+n+余额:+currAccount.getBalance();break; catch (InputMismatchException e) System.err.println(无效输入,请输入大于0的数值!);option2(accountListIn);else if(tempNumber.equals(0)selectChoice(accountListIn);elseString c=reChoice();if(c.equals(1)option2(accountListIn);else/返回主菜单 /余额查询private static void option3(Map accountListIn)Scanner sc3=new Scanner(System.in);System.out.println(请输入账号(输入0返回上一级):);String tempNumber=sc3.next();if(accountListIn.containsKey(tempNumber)Account currAccount=accountListIn.get(tempNumber);System.out.println(余额:+currAccount.getBalance();else if(tempNumber.equals(0)selectCh

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论