20182307 2019-2020-1 《數據結構與面向對象程序設計》實驗四報告

20182307 2019-2020-1 《數據結構與面向對象程序設計》實驗四報告

課程:《程序設計與數據結構》
班級: 1823
姓名: 陸彥傑
學號:20182307
實驗教師:王志強
實驗日期:2019年9月30日
必修/選修: 必修html

1.實驗內容

(一)Java Socket編程
1.學習藍墨雲上教材《Java和Android編程》「第16章 輸入/輸出 」和「第22章 網絡」,學習JavaSocket編程
2.結對編程。結對夥伴A編寫客戶端SocketClient.java,結對夥伴B編寫服務器端。
3.截圖加學號水印上傳藍墨雲,代碼push到碼雲,並撰寫實驗報告。java

(二)Java和密碼學
參考 http://www.cnblogs.com/rocedu/p/6683948.html
以結對的方式完成Java密碼學相關內容的學習(帖子中全部代碼和相關知識點須要學習)。提交學習成果碼雲連接和表明性成果截圖,要有學號水印。算法

(三)編寫有理數/複數計算器
結對編程,結對夥伴A編寫有理數計算器。結對夥伴B編寫複數計算器。截圖加水印上傳藍墨雲,代碼push碼雲。編程

(四)遠程有理數計算器
結對編程,結對夥伴A編程實現客戶端,結果夥伴B實現服務器端。
客戶端經過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字符串的形式發送給夥伴B(服務器端),服務器端根據字符串計算出結果爲5/12,並把結果返回給客戶端A,A收到結果後輸出結果。截圖加水印上傳藍墨雲,代碼push碼雲。服務器

(五)遠程複數計算器
結對編程,結對夥伴B編程實現客戶端,結果夥伴A實現服務器端。
客戶端經過鍵盤輸入一個有理數計算的公式(例如:1/4 + 1/6 = ),並把該公式以字符串的形式發送給夥伴A(服務器端),服務器端根據字符串計算出結果爲5/12,並把結果返回給客戶端B,B收到結果後輸出結果。截圖加水印上傳藍墨雲,代碼push碼雲。
注意實驗四(4)和實驗四(5),一我的不能僅實現客戶端,必須實現一個客戶端和服務器,不然兩個實驗均不得分!!!網絡

(六)實驗報告
在規定時間前發表博客,標題「學號 實驗四 《數據結構與面向對象程序設計》實驗報告」數據結構

2. 實驗過程及結果

提交一:Java Socket編程

  • 編寫服務器與客戶端代碼並分別測試
    1
    2
    socket

    提交二:Java和密碼學

    ①Caesar密碼程序編寫並嘗試加密、解密
  • 加密"HelloWorld",密鑰爲4
    4
    3
  • 根據密鑰4解密獲得"HelloWorld"
    5
    6
    學習

    ②Java對稱加密-DES算法
  • 將密鑰經過對象序列化方式保存在文件中
    7
  • 打印密碼編碼的內容
    8
  • 使用對稱密鑰進行加密和解密
    9
  • 對SEnc.dat中的密文進行解密,獲得明文
    10
    測試

③Java非對稱加密-RSA算法
  • 獲取公鑰及參數,加密"Hello World!",計算密文並打印
    11
  • 使用私鑰文件Skey_RSA_priv.dat,對密文文件Enc_RSA.dat中的密文c進行解密,獲得明文"Hello World!"
    12
④使用密鑰協定建立共享密鑰
  • 建立DH公鑰和私鑰
    13
  • 建立共享密鑰並打印
    15
Java摘要算法- MD5
  • 編寫並計算指定字符串的消息摘要
    16

提交三:編寫有理數/複數計算器

  • 與結對夥伴結合做業:無理數計算器
    18

提交四:編寫遠程有理數計算器

  • 與結對夥伴結合做業:擔任服務端
    b3
    b5

提交五:編寫遠程複數計算器

  • 與結對夥伴結合做業:擔任客戶端
    b4
    b6

3. 實驗過程當中遇到的問題和解決過程

  • 問題1:Caesar密碼程序沒法運行
    • 緣由分析:應該在Run/Debug Configurations界面輸入參數
    • 解決方案:在Program arguments一欄輸入參數,如加密"HelloWorld",密鑰爲4
      4
  • 問題2:Key_DH程序沒法編譯生成Apub.dat和Apri.dat文件
    • 緣由分析:Key_DH程序沒有主類,是不能直接運行的
    • 解決方案:打開Run/Debug Configurations界面,在參數一欄分兩次輸入Key_DH Apub.datKey_DH Apri.dat
      14
  • 問題3:有理數計算器不會進行字符串計算
    • 緣由分析:就算使用nashron引擎計算出了字符串表達式的值,再將小數,例如0.33333轉換爲1/3也是作不到的。要想進行徹底的分數計算,只能編寫一個分數計算器
    • 解決方案:經過最大公約數等方法進行編程,用StringTokenizer來判斷分隔符,分別取出分數與運算符
      17

其餘(感悟、思考等)

  • 本次實驗中最讓我「印象深入」的就是有理數計算器了。它的難點在於要將字符串轉數值,再轉回字符串。過程當中我上網搜尋了許多方法,好比能夠直接計算字符串表達式的值的nashron引擎,但它卻不能作到將小數,例如0.33333再轉回1/3的分數形式。最後是自學了分數的計算器,學會了使用StringTokenizer來選擇分隔符,從而提出每一個分數和運算符,再提出分子分母。這給我帶來的感悟就是,光課上汲取知識是遠遠不夠的,課下的自學與努力是更必要的。

參考資料

相關文章
相關標籤/搜索