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

上传人:小飞机 文档编号:3159742 上传时间:2023-03-11 格式:DOCX 页数:17 大小:42.40KB
返回 下载 相关 举报
Java语言程序设计A实验1类与对象.docx_第1页
第1页 / 共17页
Java语言程序设计A实验1类与对象.docx_第2页
第2页 / 共17页
Java语言程序设计A实验1类与对象.docx_第3页
第3页 / 共17页
Java语言程序设计A实验1类与对象.docx_第4页
第4页 / 共17页
Java语言程序设计A实验1类与对象.docx_第5页
第5页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

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

2、法的概念、结构、定义、调用。 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,其实例变量简化为: bookName numRated5 numRated4 numRated3 numRated2 numRated1 方法addRating( )应保证能接收一个有效整数作为形参,将与形参匹配的评级人数加 1。例如,如果接收3,则numRated3加1。 方法getAverage( ),返回所有评级的平均值。 编写测试类BookReviewTest,在main( )方法中,创建一个Book对象,为这本图书评级6次,最后输出这本图书的书名、平均评级。 程序的一种可能的输出结果: Head First Java,Average Rating: 4

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

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

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

7、要重写toString、equal以及hashCode方法。简略的UML图如下: 第二部分:实验过程记录 n 实验1-1 程序代码如下: 1)Student类代码: public class Student private String studentNumber; private String studentName; private String specialty; private double tuition; public Student(String studentNumber, String studentName, String specialty,double tuition

8、) this.studentNumber = studentNumber; this.studentName = studentName; this.specialty = specialty; this.tuition = tuition; public void setStudentNumber(String studentNumber) this.studentNumber=studentNumber; public String getStudentNumber return studentNumber; public String getStudentName return stud

9、entName; 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) if(tuition4500) System.out.println(最低学费为4500,请不要低于此数值。);

10、else this.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); /修改student2的学号 student2.setStudentNumber(新学号); /修改s

11、tudent2的姓名 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.

12、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,numRate4,numRate5; public Book(String bookName)

13、 this.bookName = bookName; /初始化各星级的人数为0 numRate1=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:numRate1+;break; case 2:numRate2+;

14、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+numRate2+numRate3+numRate4+n

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

16、okName = 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 double average=0

17、; 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=new Scanner(

18、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 private

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

20、ntIn) 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)测试类Account

21、Test 代码 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.wit

22、hdraw(500); accountList.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

23、.withdraw(5000); accountList.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(accountLis

24、t); public static void selectChoice(Map accountListIn) Scanner sc=new Scanner(System.in); int input; do System.out.println(1.存款); System.out.println(2.取款); System.out.println(3.余额查询); System.out.println(4.退出); System.out.println(请输入操作:); input=sc.nextInt; switch(input) case 1:option1(accountListIn);

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

26、m.out.println(请输入账号(输入0返回上一级):); tempNumber = sc1.next; if(accountListIn.containsKey(tempNumber) try for(;) System.out.println(请输入存款数额:); Double tempAmount=sc1.nextDouble; if(tempAmount0) System.err.println(存款数额不能小于0元,请从重输入数值!); else Account currAccount=accountListIn.get(tempNumber); currAccount.wit

27、hdraw(tempAmount); System.out.println(存款成功!); System.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(accoun

28、tListIn); else String c=reChoice; if(c.equals(1) option1(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.

29、println(请输入取款数额:); Double tempAmount=sc2.nextDouble; Account currAccount=accountListIn.get(tempNumber); if(tempAmountcurrAccount.getBalance) System.err.println(余额不足,请重新输入数值!); else if(tempAmount0) System.err.println(取款额不能为负,请重新输入数值!); else currAccount.deposit(tempAmount); System.out.println(取款成功!);

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

31、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.prin

32、tln(余额:+currAccount.getBalance); else if(tempNumber.equals(0) selectChoice(accountListIn); else String c=reChoice; if(c.equals(1) option3(accountListIn); else/返回主菜单 private static String reChoice Scanner sc4=new Scanner(System.in); String tempSelect; for (;) System.out.println(是否还要查询?n + 1yes. 2No.n

33、 + 请输入选择:); tempSelect = sc4.next; if(tempSelect.equals(1)|tempSelect.equals(2) break; else System.err.println(错误选项!请重新选择); /继续循环 return tempSelect; 运行结果如下: 1)当输入选项错误时,会提示错误信息,让用户重新输入: 2)选择存款操作,当输入的账号不存在时,提示信息并询问是否需要继续,选择1继续,选择2会跳转回主菜单,其他错误输入会提示错误并要求用户重新选择。用户存款后提示存款成功并且返回账号、账户名以及余额信息。 3)选择取款操作,用户输入取

34、款数额后,若输入的数额大于当前账户余额,会提示并要求用户重新输入数值,取款成功后输出当前账号、账户名及余额等信息。 4)当选择查询操作后,会显示当前账户余额,每次选择一个操作,都可以通过输入“0”来返回主菜单,最后通过输入4退出整个程序。 教师签字_ 第三部分 结果与讨论 一、实验结果分析 本次实验基本上达到了预期的效果,对于错误的处理也更加成熟,通过trycatch以及if条件判断语句的使用,用户误操作之后程序不会强制中断,会给出错误提示信息,让用户重新输入,或者用户也可以自行选择是否继续,增强了程序的健壮性,清晰的提示也给了用户很好的使用体验。同时通过dowhile和for循环的使用使程序能够持续运行,直到用户自己想要退出。 二、小结、建议及体会 对于需要重用的代码,可以写成一个方法,每次使用的时候就不需要重写打断代码,直接调匀方法就好了,这样可以减小冗余,比如在实验1-3中用户输入账号不存在时询问是否继续的代码,写入方法中进行多次调用。此外,一道练习题的代码程序写好后每过一段时间看都能发现可以优化的地方,所以对于程序设计要常联系、多修改。

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号