Java語言程序設(shè)計A實(shí)驗(yàn)1:類與對象_第1頁
Java語言程序設(shè)計A實(shí)驗(yàn)1:類與對象_第2頁
Java語言程序設(shè)計A實(shí)驗(yàn)1:類與對象_第3頁
Java語言程序設(shè)計A實(shí)驗(yàn)1:類與對象_第4頁
Java語言程序設(shè)計A實(shí)驗(yàn)1:類與對象_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實(shí)驗(yàn)課程名稱:Java語言程序設(shè)計A實(shí)驗(yàn)項(xiàng)目名稱實(shí)驗(yàn)1:類與對象實(shí)驗(yàn)成績實(shí) 驗(yàn) 者專業(yè)班級組 別同 組 者無開始日期第一部分:實(shí)驗(yàn)預(yù)習(xí)報告(包括實(shí)驗(yàn)?zāi)康募耙饬x,實(shí)驗(yàn)基本原理與方法,主要儀器設(shè)備及耗材,實(shí)驗(yàn)內(nèi)容及要求,實(shí)驗(yàn)方案與技術(shù)路線等)一實(shí)驗(yàn)?zāi)康募耙饬x1根據(jù)實(shí)際需求,使用UML類圖,合理設(shè)計類及其成員(實(shí)例變量、方法)。2編寫、調(diào)用構(gòu)造函數(shù),初始化新建對象。3編寫、調(diào)用方法,完成相關(guān)操作。4實(shí)現(xiàn)信息隱藏與封裝。5創(chuàng)建對象、調(diào)用對象方法。6正確使用對象數(shù)組。7設(shè)計、實(shí)現(xiàn)算法邏輯。二實(shí)驗(yàn)基本原理與方法1面向?qū)ο蟮母拍?、思想、思維方式。2UML面向?qū)ο笤O(shè)計初步。2類的概念、結(jié)構(gòu)、定義、使用。3構(gòu)造

2、函數(shù)的概念、結(jié)構(gòu)、定義、調(diào)用。4方法的概念、結(jié)構(gòu)、定義、調(diào)用。5信息隱藏與封裝的概念、實(shí)現(xiàn)。6對象的概念、創(chuàng)建、使用。7對象數(shù)組的概念、使用。8控制流程。三主要儀器設(shè)備及耗材1PC及其兼容機(jī)。2計算機(jī)操作系統(tǒng)。3程序編輯器EditPlus。4Java開發(fā)工具JDK。四實(shí)驗(yàn)內(nèi)容及要求實(shí)驗(yàn)1-1:請?jiān)O(shè)計一個類Student,該類的實(shí)例變量有學(xué)號studentNumber、姓名studentName、專業(yè)specialty、學(xué)費(fèi)tuition。學(xué)費(fèi)tuition要實(shí)現(xiàn)封裝,最低學(xué)費(fèi)4500元。請繪制完整的UML類圖,寫出類Student的Java源代碼。然后,編寫測試類StudentTest,給出運(yùn)

3、行結(jié)果。實(shí)驗(yàn)1-2:編寫類Book,其實(shí)例變量簡化為:bookNamenumRated5numRated4numRated3numRated2numRated1方法addRating( )應(yīng)保證能接收一個有效整數(shù)作為形參,將與形參匹配的評級人數(shù)加1。例如,如果接收3,則numRated3加1。方法getAverage( ),返回所有評級的平均值。編寫測試類BookReviewTest,在main( )方法中,創(chuàng)建一個Book對象,為這本圖書評級6次,最后輸出這本圖書的書名、平均評級。程序的一種可能的輸出結(jié)果:Head First Java,Average Rating: 4.2實(shí)驗(yàn)1-2(數(shù)組

4、版本):重做實(shí)驗(yàn)1-2,使用數(shù)組代替變量保存圖書評級,所有修改只應(yīng)局限于類Book內(nèi)部,測試類BookReviewTest無需修改。實(shí)驗(yàn)1-3(選做):編寫儲蓄賬戶類及測試類,模擬存款,參考以下運(yùn)行方式:(1)新開5個儲蓄賬戶,各儲蓄賬戶的編號、戶名在新開儲蓄賬戶時初始化,假設(shè)每位用戶新開儲蓄賬戶時都存入了一筆錢。(2)提示用戶從鍵盤輸入儲蓄賬戶編號。(3)若輸入的儲蓄賬戶編號與新開的5個儲蓄賬戶編號之一匹配,則提示用戶從鍵盤輸入存款金額,存款金額必須大于0,否則顯示錯誤提示,直到用戶輸入的存款金額大于0為止。(4)相應(yīng)儲蓄賬戶的余額被更新。(5)存款完成后,提示存款成功,顯示該儲蓄賬戶的編號

5、、戶名、余額。(6)若輸入的儲蓄賬戶編號與新開的5個儲蓄賬戶編號均無法匹配,顯示錯誤提示,并詢問是否還要繼續(xù)存款。(7)用戶輸入yes,繼續(xù)執(zhí)行步驟(2),否則顯示退出信息。最基本要求:繪制UML類圖;儲蓄賬戶的余額必須確保大于等于0。五實(shí)驗(yàn)方案及技術(shù)路線(設(shè)計思路、UML類圖、算法、注意事項(xiàng)) 1)對于實(shí)驗(yàn)1-1,可以對studentNumber,studentName,specialty,tuition四個變量都進(jìn)行封裝,使用private關(guān)鍵字,然后在類中使用get和set方法,實(shí)現(xiàn)對這些實(shí)例變量的獲取和更改。在setTuition()方法中,首先通過if語句對傳入的參數(shù)進(jìn)行判斷,若數(shù)值

6、大于或等于4500,則修改成功,否則輸出錯誤提示,簡略的UML圖如下: 2)對于實(shí)驗(yàn)1-2中,各個星級人數(shù)的統(tǒng)計通過switch()case語句即可實(shí)現(xiàn),但要注意的是,最好加上default語句用以處理錯誤輸入的情況。數(shù)組版本只需要將numRated5、numRated4、numRated3、numRated2、numRated1這幾個變量放入一個int數(shù)組中即可。3)實(shí)驗(yàn)1-3中,因?yàn)榭紤]到各個儲蓄賬號不能重復(fù),并且在每次操作的時候需要進(jìn)行匹配,若每次都通過for()循環(huán)遍歷則比較繁瑣,操作時間長,說以采用HashMap集合存儲賬號,賬號number為關(guān)鍵字,每個Account對象為值,因?yàn)?/p>

7、在測試類中會使用到containsKey()等方法,所以在Account類中需要重寫toString()、equal()以及hashCode()方法。簡略的UML圖如下:第二部分:實(shí)驗(yàn)過程記錄(可加頁)(代碼、運(yùn)行結(jié)果、實(shí)驗(yàn)中出現(xiàn)的問題及解決過程)n 實(shí)驗(yà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(tuition<4500)System.out.println("最低學(xué)費(fèi)為4500,請不要低于此數(shù)值。");elsethis.tuition = tuition;public double getTuition() return tuition;2)StudentTest 類代碼:public class StudentTest public static void main(String args) /創(chuàng)建學(xué)生實(shí)例Student student1=new Student("學(xué)號","姓名","專業(yè)"

11、;,5000);Student student2=new Student("學(xué)號","姓名","專業(yè)",5500);/修改student2的學(xué)號student2.setStudentNumber("新學(xué)號");/修改student2的姓名student2.setStudentName("新姓名");/修改student1的專業(yè)信息student1.setSpecialty("新專業(yè)");/修改student1學(xué)費(fèi)信息student1.setTuition(4500);/輸出s

12、tudent1和student2的信息System.out.println("學(xué)號:"+student1.getStudentNumber()+"n"+"姓名:"+student1.getStudentName()+"n"+"專業(yè):"+student1.getSpecialty()+"n"+"學(xué)費(fèi):"+student1.getTuition()+"n");System.out.println("學(xué)號:"+studen

13、t2.getStudentNumber()+"n"+"姓名:"+student2.getStudentName()+"n"+"專業(yè):"+student2.getSpecialty()+"n"+"學(xué)費(fèi):"+student2.getTuition()+"n");運(yùn)行結(jié)果如下:省略n 實(shí)驗(yàn)1-2程序代碼如下:1) Book類代碼:public class Book private String bookName;private int numRate1,numR

14、ate2,numRate3,numRate4,numRate5;public Book(String bookName) this.bookName = bookName;/初始化各星級的人數(shù)為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

15、(rateIn)case 1:numRate1+;break;case 2:numRate2+;break;case 3:numRate3+;break;case 4:numRate4+;break;case 5:numRate5+;break;default:System.err.println("數(shù)字"+rateIn+"不在星級評定范圍,此次輸入無效,請輸入數(shù)字1-5!");break;public double getAverage()double average=0; average=(numRate1*1+numRate2*2+numRate3

16、*3+numRate4*4+numRate5*5)*1.0/(numRate1+numRate2+numRate3+numRate4+numRate5);return average;2) (數(shù)組版)Book類代碼:public class Bookprivate String bookName;private int numRate=new int5;public Book(String bookName) this.bookName = bookName;/初始化各星級的人數(shù)為0for(int i=0;i<5;i+)numRatei=0;public String getBookNa

17、me()return bookName;public void setBookName(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("數(shù)字"+rateIn+&quo

18、t;不在星級評定范圍,此次輸入無效,請輸入數(shù)字1-5!");break;public double getAverage() 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 sta

19、tic void main(String args)Book book=new Book("Java大學(xué)教程");Scanner sc=new Scanner(System.in);/6次評級for(int i=1;i<=6;i+)System.out.println("書本Java大學(xué)教程星級評分開始,請輸入數(shù)字1-5:");int rating=sc.nextInt();book.addRating(rating);System.out.println("書名:"+book.getBookName()+"n&quo

20、t;+"平均星級:"+book.getAverage();運(yùn)行結(jié)果如下:1) 當(dāng)出現(xiàn)輸入星級大于5或小于0時2) 當(dāng)輸入正常時:n 實(shí)驗(yàn)1-3程序代碼如下:1)儲蓄賬戶Account 類代碼:public class Account private String number; private String name; private double balance;public Account(String number, String name)this.number = number; = name;balance=0;public String ge

21、tNumber()return number;public String getName()return name;public double getBalance()return balance;public void deposit(double amountIn)balance-=amountIn;public void withdraw(double amountIn)balance+=amountIn;public String toString()return "("+number+","+name+","+balance

22、+")n"public boolean equals(Object objIn)Account accIn=(Account)objIn;return number.equals(accIn.number);public int hashCode()return number.hashCode();2)測試類AccountTest 代碼import java.util.HashMap;import java.util.InputMismatchException;import java.util.Map;import java.util.Scanner;public cla

23、ss AccountTest public static void main(String args)Map<String,Account> accountList=new HashMap<String,Account>();/創(chuàng)建3個賬戶并放入集合accountList中Account account1=new Account("11111","dengqiuping");account1.withdraw(500);accountList.put("11111", account1);Account acc

24、ount2=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

25、","susu");account4.withdraw(5000);accountList.put("44444", account4);Account account5=new Account("55555","zhangxi");account5.withdraw(300);accountList.put("55555", account5);/當(dāng)用戶輸入數(shù)據(jù)類型錯誤的時候,輸出錯誤提示try selectChoice(accountList); catch (InputMisma

26、tchException e) System.err.println("輸入錯誤,請輸入數(shù)字1-4!");selectChoice(accountList);public static void selectChoice(Map<String,Account> accountListIn)Scanner sc=new Scanner(System.in);int input;doSystem.out.println("1.存款");System.out.println("2.取款");System.out.println(

27、"3.余額查詢");System.out.println("4.退出");System.out.println("請輸入操作【1-4】:");input=sc.nextInt();switch(input)case 1:option1(accountListIn);break;case 2:option2(accountListIn);break;case 3:option3(accountListIn);break;case 4:System.exit(0);/當(dāng)輸入的數(shù)字小于1或大于4時輸出錯誤提示default :System.

28、err.println("無效輸入,請輸入數(shù)字【1-4】!");while(input!=4);/取款操作private static void option1(Map<String,Account> accountListIn) String tempNumber;Scanner sc1 = new Scanner(System.in);System.out.println("請輸入賬號(輸入'0'返回上一級):");tempNumber = sc1.next();if(accountListIn.containsKey(t

29、empNumber)try for(;)System.out.println("請輸入存款數(shù)額:");Double tempAmount=sc1.nextDouble();if(tempAmount<0)System.err.println("存款數(shù)額不能小于0元,請從重輸入數(shù)值!");elseAccount currAccount=accountListIn.get(tempNumber);currAccount.withdraw(tempAmount);System.out.println("存款成功!");System.o

30、ut.println("賬號:"+currAccount.getNumber()+"n"+"賬戶名:"+currAccount.getName()+"n"+"余額:"+currAccount.getBalance();break; catch (InputMismatchException e) System.err.println("無效輸入,請輸入大于0的數(shù)值!");option1(accountListIn);else if(tempNumber.equals(&quo

31、t;0")selectChoice(accountListIn);elseString c=reChoice();if(c.equals("1")option1(accountListIn);else/返回主菜單/取款private static void option2(Map<String,Account> accountListIn) Scanner sc2=new Scanner(System.in);System.out.println("請輸入賬號(輸入'0'返回上一級):");String tempNu

32、mber=sc2.next();if(accountListIn.containsKey(tempNumber)try for(;)System.out.println("請輸入取款數(shù)額:");Double tempAmount=sc2.nextDouble();Account currAccount=accountListIn.get(tempNumber);if(tempAmount>currAccount.getBalance()System.err.println("余額不足,請重新輸入數(shù)值!");else if(tempAmount<

33、;0) System.err.println("取款額不能為負(fù),請重新輸入數(shù)值!");elsecurrAccount.deposit(tempAmount);System.out.println("取款成功!");System.out.println("賬號:"+currAccount.getNumber()+"n"+"賬戶名:"+currAccount.getName()+"n"+"余額:"+currAccount.getBalance();break;

34、 catch (InputMismatchException e) System.err.println("無效輸入,請輸入大于0的數(shù)值!");option2(accountListIn);else if(tempNumber.equals("0")selectChoice(accountListIn);elseString c=reChoice();if(c.equals("1")option2(accountListIn);else/返回主菜單 /余額查詢private static void option3(Map<Str

35、ing,Account> 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()

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論