unix課程設(shè)計(jì)--java學(xué)生管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  《UNIX系統(tǒng)與軟件開(kāi)發(fā)》課程設(shè)計(jì)說(shuō)明書</p><p>  設(shè)計(jì)題目: 學(xué)生管理系統(tǒng) </p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  指導(dǎo)教師: </p><p>  班 級(jí): </p>&

2、lt;p>  學(xué) 號(hào): </p><p>  姓 名: </p><p>  同 組 人: </p><p>  計(jì)算機(jī)科學(xué)與工程學(xué)院</p><p>  2013 年 06月 26 日<

3、;/p><p><b>  前言</b></p><p>  本系統(tǒng)是使用java語(yǔ)言編寫的一個(gè)簡(jiǎn)單的c/s結(jié)構(gòu)的學(xué)生管理系統(tǒng),服務(wù)端運(yùn)行在linux系統(tǒng),通過(guò)mysql數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)數(shù)據(jù),客服端運(yùn)行在windows系統(tǒng),通過(guò)socket發(fā)送請(qǐng)求給服務(wù)端,服務(wù)端分析處理后返回結(jié)果給客服端。在客戶端,客戶端的每一次操作都會(huì)生成日志文件,在服務(wù)端,服務(wù)端對(duì)客服端每次發(fā)送的請(qǐng)求生

4、成日志文件。由于技術(shù)以及相關(guān)知識(shí)的欠缺,本系統(tǒng)只實(shí)現(xiàn)了簡(jiǎn)單的增刪改查的功能,其面向的是學(xué)生管理員,有增加學(xué)生,刪除學(xué)生等高級(jí)權(quán)限,因?yàn)榉?wù)端要同時(shí)接受多個(gè)客戶端的請(qǐng)求,所以服務(wù)端做成多線程模式,但也只是簡(jiǎn)單實(shí)現(xiàn)同時(shí)能連多個(gè)客服端,當(dāng)多個(gè)客戶端對(duì)同一個(gè)數(shù)據(jù)進(jìn)行處理時(shí),不會(huì)進(jìn)行線程同步,本人將會(huì)在以后的學(xué)習(xí)中加強(qiáng)相關(guān)知識(shí)的獲取,不斷的完善系統(tǒng)現(xiàn)有功能以及增加一些實(shí)用的功能。</p><p><b>  目錄

5、</b></p><p><b>  前言1</b></p><p><b>  一、系統(tǒng)環(huán)境1</b></p><p>  (一)、硬件環(huán)境1</p><p>  (二)、軟件環(huán)境1</p><p><b>  二、設(shè)計(jì)目的1</b&g

6、t;</p><p><b>  三、總體設(shè)計(jì)1</b></p><p>  (一)、功能分析1</p><p>  (二)、數(shù)據(jù)庫(kù)設(shè)計(jì)1</p><p>  (三)、系統(tǒng)結(jié)構(gòu)圖2</p><p>  (四)、程序流程圖3</p><p><b>  (

7、五)、類圖4</b></p><p><b>  四、詳細(xì)設(shè)計(jì)5</b></p><p>  (一)、登錄模塊5</p><p>  (二)、客戶端操作界面模塊5</p><p>  (三)、服務(wù)端模塊6</p><p><b>  五、調(diào)試與測(cè)試6</b&

8、gt;</p><p>  (一)、登錄界面測(cè)試6</p><p>  (二)、操作界面的的測(cè)試:7</p><p>  (三)、服務(wù)端模塊的測(cè)試11</p><p>  (四)、測(cè)試結(jié)果的分析:12</p><p>  (五)、測(cè)試中遇到的問(wèn)題及處理方式12</p><p>  六、

9、設(shè)計(jì)中遇到的問(wèn)題及解決方法12</p><p>  (一)、遇到的問(wèn)題12</p><p>  (二)、解決方法13</p><p>  七、源程序清單和執(zhí)行結(jié)果及分析13</p><p>  (一)、客戶端源程序清單13</p><p>  (二)、服務(wù)端源程序清單22</p><p&

10、gt;  (三)、執(zhí)行結(jié)果29</p><p>  (四)、執(zhí)行結(jié)果分析:31</p><p>  八、課程設(shè)計(jì)心得31</p><p><b>  參考文獻(xiàn)34</b></p><p><b>  一、系統(tǒng)環(huán)境</b></p><p><b>  (一)、

11、硬件環(huán)境</b></p><p>  家用計(jì)算機(jī),內(nèi)存2G,硬盤80G以上。</p><p><b>  (二)、軟件環(huán)境</b></p><p>  本系統(tǒng)是基于java JDK1.6在window7系統(tǒng)下用eclipse以及在fedora9系統(tǒng)下用fedora eclipse開(kāi)發(fā),因?yàn)槭褂玫拈_(kāi)發(fā)語(yǔ)言是java,故系統(tǒng)必須安裝有j

12、ava虛擬機(jī)。數(shù)據(jù)庫(kù)使用linux下的mysql數(shù)據(jù)庫(kù)。</p><p><b>  二、設(shè)計(jì)目的</b></p><p>  當(dāng)今計(jì)算機(jī)技術(shù)飛速發(fā)展,數(shù)據(jù)庫(kù)技術(shù)作為數(shù)據(jù)管理的一個(gè)有效的手段,在各行各業(yè)中得到越來(lái)越廣泛的應(yīng)用,然而并不是每個(gè)人都會(huì)直接操作數(shù)據(jù)庫(kù),面對(duì)大量的數(shù)據(jù),必須提供一個(gè)簡(jiǎn)單的形象的,可視化的操作界面給數(shù)據(jù)的管理員,例如,當(dāng)今各高校的的規(guī)模越來(lái)越大,

13、學(xué)生人數(shù)也將增加,而隨著人數(shù)的增加,也給學(xué)校帶來(lái)了大量數(shù)據(jù)的增加,這給學(xué)校的學(xué)籍管理人員在資料的整理,資料的查詢,數(shù)據(jù)的處理上帶來(lái)很大的不便。開(kāi)發(fā)本系統(tǒng)的目標(biāo)就是為了減少管理員的工作強(qiáng)度,使得對(duì)學(xué)生信息的查詢和數(shù)據(jù)處理的速度得到很大程度的提高,從而提高學(xué)籍管理員的的工作效率,使管理員的工作系統(tǒng)化,規(guī)范化,自動(dòng)化。同時(shí)對(duì)這個(gè)學(xué)期學(xué)過(guò)的知識(shí)通過(guò)這次的設(shè)計(jì)進(jìn)行實(shí)際檢測(cè)。</p><p><b>  三、總體設(shè)

14、計(jì)</b></p><p><b>  (一)、功能分析</b></p><p>  學(xué)生管理系統(tǒng)的主要功能是管理學(xué)生的基本信息。由于本人水平有限本系統(tǒng)將只提供五個(gè)功能。</p><p>  查詢所有學(xué)生信息:管理員登錄成功后可以查詢所有的學(xué)生信息。</p><p>  條件查詢:按管理員的條件進(jìn)行查詢。&l

15、t;/p><p>  增加信息:管理員登錄成功后可以添加新學(xué)生信息。</p><p>  刪除信息:只提供了按學(xué)號(hào)刪除。</p><p>  更新信息:分別提供了更新姓名,更新學(xué)號(hào),更新電話。</p><p><b>  (二)、數(shù)據(jù)庫(kù)設(shè)計(jì)</b></p><p>  因?yàn)楸鞠到y(tǒng)較為簡(jiǎn)單,數(shù)據(jù)庫(kù)只建了

16、兩張表,一張學(xué)生信息表(stuinfo),一張用戶表(userinfo),都存在studentdb數(shù)據(jù)庫(kù)下。學(xué)生信息表存儲(chǔ)學(xué)生基本信息,包含四個(gè)字段:學(xué)號(hào)(stuID),姓名(stuname),性別(sex),電話(tel);用戶表存儲(chǔ)學(xué)籍管理員用于登錄的用戶名和密碼,只包含兩個(gè)字段:用戶名(name),密碼(passwd)。以下是兩張表的內(nèi)容:</p><p>  表 1 userinfo表的內(nèi)容</p&

17、gt;<p>  表2 stuinfo 表的內(nèi)容</p><p><b>  (三)、系統(tǒng)結(jié)構(gòu)圖</b></p><p><b>  圖1</b></p><p><b>  (四)、程序流程圖</b></p><p><b>  圖2</b>

18、;</p><p><b>  (五)、類圖</b></p><p><b>  1、系統(tǒng)類概述:</b></p><p>  系統(tǒng)包含9個(gè)類,客戶端包含五個(gè)類,服務(wù)端包含4個(gè)類,各類中包含的方法以及說(shuō)明如下:</p><p>  Client類: stuS

19、erver類:</p><p>  圖 3 圖4</p><p>  Clien工具類: stuServer線程類以及操作類:</p><p>  圖5 圖6</p><p>  客戶端類:Client類是界面的實(shí)現(xiàn)以及發(fā)

20、送信息的主類,Student類是實(shí)體類,Input是獲取鍵盤輸入類,stuClient類是連接服務(wù)器類,logFile類是生成日志文件類。</p><p>  服務(wù)器類:stuServer類是主服務(wù)器類,ServerTread類是服務(wù)器線程類,connStu類是連接數(shù)據(jù)庫(kù)以及執(zhí)行sql語(yǔ)句類,StudentBiz類是生成sql語(yǔ)句類;</p><p>  sLogFile類是生成日志文件類

21、。</p><p>  2、類的調(diào)用關(guān)系 :</p><p>  客戶端:首先啟動(dòng)登錄類Client類,其調(diào)用輸入類Input獲取從鍵盤輸入的用戶名和密碼,然后調(diào)用連接服務(wù)器類stuClient連接服務(wù)器,在服務(wù)器校驗(yàn)用戶名密碼正確后調(diào)用Client類顯示操作界面,在操作界面操作時(shí)Clien類調(diào)用Input獲取輸入的信息然后調(diào)用stuClient類通過(guò)Socket連接服務(wù)器發(fā)送信息。每一步

22、操作都將調(diào)用logFlie類生成日志文件。</p><p>  服務(wù)器:?jiǎn)?dòng)stuServer ,當(dāng)有用戶連接時(shí)調(diào)用ServerTread類接受連接以獲取客戶端發(fā)來(lái)的信息,對(duì)信息校驗(yàn)是否能處理,能處理則調(diào)用SudentBiz類生成相關(guān)sql語(yǔ)句,StudentBiz類生成sql語(yǔ)句后調(diào)用connStu類的連接數(shù)據(jù)庫(kù)方法和執(zhí)行sql語(yǔ)句的方法,獲取結(jié)果返回給Server,Server再通過(guò)Socket發(fā)給客戶端???/p>

23、服端的每一次請(qǐng)求都會(huì)調(diào)用sLogFile類生成日志文件,調(diào)用關(guān)系如下:</p><p><b>  圖7 調(diào)用關(guān)系圖</b></p><p><b>  四、詳細(xì)設(shè)計(jì)</b></p><p><b>  (一)、登錄模塊</b></p><p>  登錄界面有兩個(gè)功能選項(xiàng),一是

24、登錄,二是退出,這里只寫一個(gè)初始化函數(shù),實(shí)現(xiàn)的功能是給用戶提供登錄界面,若不想登錄則按退出,若登錄,則輸入用戶名密碼,正確后調(diào)用客戶端操作界面。</p><p>  (二)、客戶端操作界面模塊</p><p>  該模塊給用戶提供系統(tǒng)功能的操作界面,有5個(gè)功能,分別是增加學(xué)生信息,查詢學(xué)生信息,刪除學(xué)生信息,更新學(xué)生信息和退出系統(tǒng)。</p><p>  其中查詢學(xué)生

25、信息分為按學(xué)號(hào)和按姓名查找和全部查找,更新學(xué)生信息分為更新姓名,更新學(xué)號(hào)和更新電話。對(duì)每個(gè)功能都分別寫出對(duì)應(yīng)的方法,個(gè)功能對(duì)應(yīng)的方法如下:</p><p>  查詢學(xué)生信息:queryStu();queByName();queByID();queAll();</p><p>  增加學(xué)生信息:addStu();</p><p>  刪除學(xué)生信息:delStu();&

26、lt;/p><p>  更新學(xué)生信息:updStu();updByNa();updByID();updByTel();</p><p><b>  (三)、服務(wù)端模塊</b></p><p>  該模塊主要給客戶端提供各種服務(wù),用一個(gè)服務(wù)器線程類循環(huán)監(jiān)聽(tīng)是否有客戶端的請(qǐng)求,因?yàn)橐獙?duì)數(shù)據(jù)庫(kù)進(jìn)行操作,所以創(chuàng)建了兩個(gè)工具類,一個(gè)是根據(jù)客戶端發(fā)來(lái)的請(qǐng)求而生

27、成sql語(yǔ)句的StudentBiz類一個(gè)是連接數(shù)據(jù)庫(kù)和執(zhí)行StudentBiz類生成的sql語(yǔ)句的connStu類。其中StudentBiz類的方法是根據(jù)客服端具有的功能而建立的方法;</p><p>  服務(wù)端模塊工具類的方法如下:</p><p>  StudentBiz類:</p><p>  public boolean checkUser(String n

28、ame,String passwd)檢查用戶;</p><p>  public ResultSet readAll()從數(shù)據(jù)庫(kù)中讀取所有記錄;</p><p>  public ResultSet readByName(String name)按姓名從數(shù)據(jù)庫(kù)中讀取記錄;</p><p>  public ResultSet readByID(String ID)按

29、學(xué)號(hào)從數(shù)據(jù)庫(kù)中讀取記錄;</p><p>  public boolean insertData(String name,String id,String sex,String tel)向數(shù)據(jù)庫(kù)中插入一條記錄。</p><p>  public boolean delData(String ID)按學(xué)號(hào)刪除數(shù)據(jù)庫(kù)中一條記錄;</p><p>  public boo

30、lean updDataByName(Stirng name)更新數(shù)據(jù)庫(kù)中某記錄的姓名</p><p>  public boolean updDataByTel(String newTel,String tel) 更新數(shù)據(jù)庫(kù)中某記錄的電話</p><p><b>  connStu類:</b></p><p>  connStu();連接數(shù)據(jù)

31、庫(kù)</p><p>  public ResultSet queryStu(String sql)執(zhí)行查詢語(yǔ)句;</p><p>  public boolean updateStu(String sql)執(zhí)行insert,delete,update語(yǔ)句;</p><p>  public void conClose()關(guān)閉數(shù)據(jù)庫(kù)連接;</p><

32、;p><b>  五、調(diào)試與測(cè)試</b></p><p>  (一)、登錄界面測(cè)試</p><p>  登錄界面測(cè)試提供了以下幾組測(cè)試方式:</p><p>  1、輸入的用戶名或密碼為空的情況:</p><p>  2、輸入的用戶名或密碼錯(cuò)誤的情況:</p><p>  3、輸入的用戶名和

33、密碼正確的情況:</p><p>  (二)、操作界面的的測(cè)試:</p><p>  操作界面主要測(cè)試當(dāng)輸入正確的信息后相應(yīng)的功能頁(yè)面是否能正確顯示和輸入錯(cuò)誤的信息后能否正常處理:</p><p>  增加學(xué)生信息功能頁(yè)面的測(cè)試:</p><p>  (1)輸入正確信息:</p><p>  (2)輸入錯(cuò)誤信息:<

34、;/p><p>  2、查詢功能頁(yè)面的測(cè)試:</p><p>  (1)輸入正確信息:</p><p>  (2)輸入錯(cuò)誤信息:</p><p>  3、刪除功能頁(yè)面的測(cè)試:</p><p>  4、更新學(xué)生信息頁(yè)面的測(cè)試:</p><p>  (1)輸入正確的信息:</p><

35、p>  (三)、服務(wù)端模塊的測(cè)試</p><p>  服務(wù)端主要測(cè)試是否能正常啟動(dòng)和接受客戶端的請(qǐng)求而建立連接。</p><p><b>  1、啟動(dòng)服務(wù)端:</b></p><p>  2、與客服端建立連接:</p><p>  3、建立完成后主線程繼續(xù)監(jiān)聽(tīng)是否有客戶端連接:</p><p&g

36、t;  (四)、測(cè)試結(jié)果的分析:</p><p>  綜合測(cè)試下來(lái),系統(tǒng)具有的相關(guān)功能頁(yè)面在輸入正確和錯(cuò)誤信息都都能給用戶做出正確顯示和提示,由于測(cè)試數(shù)據(jù)少,可能還有些bug沒(méi)有檢測(cè)到,只好等到實(shí)際應(yīng)用出現(xiàn)時(shí)再修復(fù)。</p><p>  (五)、測(cè)試中遇到的問(wèn)題及處理方式</p><p><b>  1、遇到的問(wèn)題:</b></p>

37、<p>  在測(cè)試客戶端登錄界面時(shí)遇到了兩個(gè)問(wèn)題,一是沒(méi)有對(duì)當(dāng)輸入的用戶名和密碼為空時(shí)的處理,二是當(dāng)服務(wù)端沒(méi)有開(kāi)啟,客服端登錄時(shí)拋出的ConnectException:異常。三是在機(jī)房實(shí)際應(yīng)用測(cè)試時(shí)配置calsspath變量錯(cuò)誤導(dǎo)致程序運(yùn)行中斷。</p><p><b>  2、解決方法:</b></p><p>  第一個(gè)問(wèn)題好解決,在client類中

38、增加檢測(cè)用戶名和密碼為空時(shí)返回登錄界面的代碼。第二個(gè)問(wèn)題開(kāi)始我認(rèn)為是沒(méi)有catch住這個(gè)ConnectException:異常,可是當(dāng)我在catch中增加這個(gè)異常時(shí)編譯不能通過(guò)。只能這樣做:要使用客戶端之前必須先開(kāi)啟服務(wù)端。第三個(gè)問(wèn)題在指導(dǎo)老師邵國(guó)金老師的幫助下正確配置了classpath變量,具體為:</p><p>  # export CLASSPATH=usr/share/java/mysql-conne

39、ctor-java.jar。</p><p>  六、設(shè)計(jì)中遇到的問(wèn)題及解決方法</p><p><b>  (一)、遇到的問(wèn)題</b></p><p>  在設(shè)計(jì)中遇到了很多問(wèn)題,在這里提一下主要的:</p><p>  ●客戶端一次發(fā)送多個(gè)數(shù)據(jù)的問(wèn)題,因?yàn)閟ocket的getOutputStream和getInput

40、Sream方法都只能用一次,不能多次調(diào)用該方法,這就造成如果</p><p>  戶端一次需要發(fā)送多個(gè)數(shù)據(jù)比如用戶名和密碼,增加學(xué)生信息時(shí),學(xué)生的四個(gè)屬性值,怎么才能一次發(fā)送過(guò)去而能讓服務(wù)端理解你所需要的是什么服務(wù)。</p><p>  ●服務(wù)端查詢結(jié)果后一次返回學(xué)生所有信息的問(wèn)題,比如查詢到某學(xué)生的信息后要把這些信息返回給客戶端且要讓客戶端知道那個(gè)數(shù)據(jù)代表什么信息。</p>

41、<p>  ●數(shù)據(jù)庫(kù)返回結(jié)果后用什么變量或者容器去接收。</p><p>  ●客戶端到底是要做成連一次后就可以進(jìn)行各種操作直到斷開(kāi),還是每操作一次連一次。</p><p><b>  (二)、解決方法</b></p><p>  1、一次發(fā)送多個(gè)數(shù)據(jù)問(wèn)題可以和服務(wù)端建立一個(gè)協(xié)議,把發(fā)送的多個(gè)數(shù)據(jù)間用“,”隔開(kāi),并在數(shù)據(jù)的開(kāi)頭增加操

42、作的標(biāo)識(shí)。在打包發(fā)給服務(wù)器,服務(wù)器在根據(jù)協(xié)議對(duì)數(shù)據(jù)進(jìn)行遇到“,”就拆分。</p><p>  2、原理如(1)客戶端和服務(wù)端先商定協(xié)議,規(guī)定發(fā)送的數(shù)據(jù)順序按照姓名,學(xué)號(hào),性別,電話的順序進(jìn)行打包。</p><p>  3、開(kāi)始時(shí)想用list集合去裝,可是由于對(duì)list的使用不是很熟悉,還是用resultSet去裝。然后服務(wù)端循環(huán)每拆封一個(gè)就往客戶端發(fā)一次。</p><p

43、>  4、為了降低服務(wù)器的處理壓力和節(jié)約資源,設(shè)計(jì)成需要操作的時(shí)候再連接,操作完就斷開(kāi),在操作時(shí)才又一次連接。</p><p>  七、源程序清單和執(zhí)行結(jié)果及分析</p><p>  (一)、客戶端源程序清單</p><p>  1、Client類:</p><p>  import java.io.*;</p><

44、p>  import java.net.*;</p><p>  public class Client {</p><p>  //private BufferedReader bf;</p><p>  stuClient sc=new stuClient();</p><p>  Input in=new Input();<

45、;/p><p>  Student stu=new Student();</p><p>  private String recInfo;//用來(lái)接收服務(wù)端返回的數(shù)據(jù);</p><p>  private String choNum;//選擇子菜單的數(shù)字</p><p>  public void menue(){</p><

46、;p>  System.out.println("==============================================");</p><p>  System.out.println(" 歡迎使用本系統(tǒng),請(qǐng)按數(shù)字鍵選擇相應(yīng)功能");</p><p>  System.out.println("

47、 1-增加學(xué)生信息");</p><p>  System.out.println(" 2-查詢學(xué)生信息");</p><p>  System.out.println(" 3-刪除學(xué)生信息");</p><p>  System.out.println(

48、" 4-修改學(xué)生信息");</p><p>  System.out.println(" 5-查詢所有學(xué)生信息");</p><p>  System.out.println(" 6-退出系統(tǒng)");</p><p>  System.o

49、ut.println("=============================================");</p><p>  choNum=in.getString();</p><p>  if("1".equals(choNum)){</p><p><b>  addStu();</b&g

50、t;</p><p><b>  }</b></p><p>  else if("2".equals(choNum)){</p><p>  queryStu();</p><p><b>  }</b></p><p>  else if("

51、3".equals(choNum)){</p><p><b>  delStu();</b></p><p><b>  }</b></p><p>  else if("4".equals(choNum)){</p><p><b>  updStu();

52、</b></p><p><b>  }</b></p><p>  else if("5".equals(choNum)){</p><p><b>  queAll();</b></p><p><b>  }</b></p>

53、<p>  else if("6".equals(choNum)){</p><p>  System.out.println("退出本系統(tǒng)");</p><p>  System.out.println("歡迎下次繼續(xù)使用本系統(tǒng)");</p><p>  System.exit(0);</

54、p><p><b>  }</b></p><p><b>  else{</b></p><p>  System.out.println("沒(méi)有與"+choNum+"對(duì)應(yīng)的功能,請(qǐng)繼續(xù)關(guān)注我們的產(chǎn)品," +</p><p>  "現(xiàn)在將返回主界面&q

55、uot;);</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //查詢方式</b></p><p>  public

56、void queryStu(){</p><p>  System.out.println("==============================================");</p><p>  System.out.println(" 請(qǐng)選擇查詢方式");</p><p>  Syste

57、m.out.println(" 1-按姓名查找");</p><p>  System.out.println(" 2-按學(xué)號(hào)查找");</p><p>  System.out.println(" 3-返回上一層");</p><p>  

58、System.out.println("==============================================");</p><p><b>  try{</b></p><p>  choNum=in.getString();</p><p>  if("1".equals(cho

59、Num)){</p><p>  queByName();</p><p><b>  }</b></p><p>  else if("2".equals(choNum)){</p><p>  queByID();</p><p><b>  }</b>

60、;</p><p>  else if("3".equals(choNum)){</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  else{</b></p><p&

61、gt;  System.out.println("沒(méi)有與"+choNum+"對(duì)應(yīng)的功能,請(qǐng)繼續(xù)關(guān)注我們的產(chǎn)品" +</p><p><b>  "現(xiàn)在將返回");</b></p><p>  queryStu();</p><p><b>  }</b></

62、p><p><b>  }</b></p><p>  catch(Exception e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b><

63、/p><p>  sc.closeSocket();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //按姓名查找</b></p><p>  public void queByName(){&l

64、t;/p><p>  System.out.println("==============================================");</p><p>  System.out.println(" 查詢學(xué)生信息頁(yè)面");</p><p>  System.out.println(&qu

65、ot;==============================================");</p><p>  System.out.println(" 請(qǐng)輸入你要查找學(xué)生的姓名:");</p><p><b>  try{</b></p><p>  stu.name=in.getStri

66、ng();</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("queryNa"+","+stu.name);</p><p>  recInfo=sc.bufIn.readLine();</p><p>  System.out.println

67、(recInfo);</p><p>  if("false".equals(recInfo)){</p><p>  System.out.println("你要查找的姓名為"+stu.name+"的學(xué)生不存在");</p><p>  queryStu();</p><p>&l

68、t;b>  }</b></p><p><b>  else{</b></p><p>  String [] ary =recInfo.split(",");</p><p>  System.out.println("你所查詢的結(jié)果為:");</p><p>

69、  stu.fromatPrint(ary[0],ary[1],ary[2],ary[3]);//調(diào)用Student類的格式化輸出方法</p><p>  queryStu();</p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(Exce

70、ption e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b></p><p>  sc.closeSocket();</p><p><b>  }&l

71、t;/b></p><p><b>  }</b></p><p><b>  //按學(xué)號(hào)查找</b></p><p>  public void queByID(){</p><p>  System.out.println("===========================

72、===================");</p><p>  System.out.println(" 查詢學(xué)生信息頁(yè)面");</p><p>  System.out.println("==============================================");</p><

73、p>  System.out.println(" 請(qǐng)輸入你要查找學(xué)生的學(xué)號(hào):");</p><p><b>  try{</b></p><p>  stu.id=in.getString();</p><p>  sc.initSocket();</p><p>  sc.pwOut

74、.println("queryID"+","+stu.id);</p><p>  recInfo=sc.bufIn.readLine();</p><p>  if("false".equals(recInfo)){</p><p>  System.out.println("你要查找的學(xué)號(hào)為&

75、quot;+stu.id+"的學(xué)生不存在");</p><p>  queryStu();</p><p><b>  }</b></p><p><b>  else{</b></p><p>  System.out.println(recInfo);</p>

76、<p>  String [] ary =recInfo.split(",");</p><p>  System.out.println("你所查詢的結(jié)果為:");</p><p>  stu.fromatPrint(ary[0],ary[1],ary[2],ary[3]);//調(diào)用Student類的格式化輸出方法</p>

77、<p>  queryStu();</p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(Exception e){</p><p>  e.printStackTrace();</p><p><b&

78、gt;  }</b></p><p><b>  finally{</b></p><p>  sc.closeSocket();</p><p><b>  }</b></p><p><b>  }</b></p><p><b&g

79、t;  //查詢所有</b></p><p>  public void queAll(){</p><p><b>  try{</b></p><p>  sc.initSocket();</p><p>  sc.pwOut.println("queryAll");</p>

80、;<p>  recInfo=sc.bufIn.readLine();</p><p>  System.out.println(recInfo);</p><p><b>  menue();</b></p><p><b>  }</b></p><p>  catch(Excep

81、tion e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b></p><p>  sc.closeSocket();</p><p><b>  }<

82、;/b></p><p><b>  }</b></p><p><b>  //增加信息</b></p><p>  public void addStu(){</p><p>  System.out.println("==============================

83、================");</p><p>  System.out.println(" 增加學(xué)生信息頁(yè)面");</p><p>  System.out.println(" 增加學(xué)生信息");</p><p>  System.out.println("

84、 請(qǐng)按如下格式來(lái)輸入信息");</p><p>  System.out.println(" 姓名,學(xué)號(hào),性別,電話");</p><p>  System.out.println("==============================================");</p>

85、<p>  System.out.println(" 請(qǐng)輸入新增學(xué)生信息:按e返回上一層");</p><p><b>  try{</b></p><p>  //獲取鍵盤錄入的學(xué)生信息,用于發(fā)送給服務(wù)器</p><p>  String sendInfo=in.getString();&l

86、t;/p><p>  if("e".equals(sendInfo))</p><p><b>  menue();</b></p><p><b>  else{</b></p><p>  String [] check=sendInfo.split(",")

87、;//用于檢查輸入的信息是等于4來(lái)判斷輸入是否有效</p><p>  // 如果輸入有效則發(fā)往服務(wù)器</p><p>  if(check.length==4){</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("add"+",&q

88、uot;+sendInfo);</p><p>  recInfo=sc.bufIn.readLine();</p><p>  if("false".equals(recInfo)){</p><p>  System.out.println("插入失敗,用戶已存在或者插入的數(shù)據(jù)類型不匹配");</p><

89、;p><b>  }</b></p><p><b>  else{</b></p><p>  System.out.println(recInfo);</p><p><b>  }</b></p><p><b>  menue();</b>&

90、lt;/p><p><b>  }</b></p><p><b>  else{</b></p><p>  System.out.println("你輸入的格式錯(cuò)誤請(qǐng)查看輸入格式后,重新輸入!");</p><p><b>  addStu();</b>&l

91、t;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  catch(Exception e){</p><p>  e.printStackTrace();</p&g

92、t;<p><b>  }</b></p><p><b>  finally{</b></p><p>  sc.closeSocket();</p><p><b>  }</b></p><p><b>  }</b></p>

93、;<p><b>  //刪除信息</b></p><p>  public void delStu(){</p><p>  System.out.println("==============================================");</p><p>  System.out.p

94、rintln(" 刪除學(xué)生信息頁(yè)面");</p><p>  System.out.println("==============================================");</p><p>  System.out.println(" 請(qǐng)輸入要?jiǎng)h除的學(xué)生學(xué)號(hào):");<

95、/p><p><b>  try{</b></p><p>  stu.id=in.getString();</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("delete"+","+stu.id);</p>&

96、lt;p>  recInfo=sc.bufIn.readLine();</p><p>  System.out.println(recInfo);</p><p><b>  menue();</b></p><p>  }catch(Exception e){</p><p>  e.printStackTra

97、ce();</p><p><b>  }</b></p><p><b>  finally{</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //更行

98、操作</b></p><p>  public void updStu(){</p><p>  System.out.println("==============================================");</p><p>  System.out.println(" 請(qǐng)選擇更

99、新的內(nèi)容");</p><p>  System.out.println(" 1-更新姓名");</p><p>  System.out.println(" 2-更新學(xué)號(hào)");</p><p>  System.out.println("

100、3-更新電話");</p><p>  System.out.println(" 4-返回上一層");</p><p>  System.out.println("==============================================");</p><p>  System

101、.out.println(" 請(qǐng)輸入要更新的的選項(xiàng):");</p><p>  String cho=in.getString();//選擇功能選項(xiàng)</p><p>  if("1".equals(cho)){</p><p>  updByNa();</p><p>  }else if(&

102、quot;2".equals(cho)){</p><p>  updByID();</p><p><b>  }</b></p><p>  else if("3".equals(cho)){</p><p>  updByTel();</p><p><b

103、>  }</b></p><p>  else if("4".equals(cho)){</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  else{</b></

104、p><p>  System.out.println("你輸入的格式錯(cuò)誤請(qǐng)查看輸入格式后,重新輸入!");</p><p><b>  updStu();</b></p><p><b>  }</b></p><p><b>  } </b></p&g

105、t;<p><b>  //更新姓名</b></p><p>  public void updByNa(){</p><p>  System.out.println("==============================================");</p><p>  System.out

106、.println(" 更新頁(yè)面");</p><p>  System.out.println(" 按e退出");</p><p>  System.out.println("==============================================");</p>

107、;<p>  System.out.println(" 更新格式:新內(nèi)容,舊內(nèi)容");</p><p>  System.out.println(" 請(qǐng)輸入你要更新學(xué)生的姓名:");</p><p><b>  try{</b></p><p>  stu.name=in

108、.getString();</p><p>  if("e".equals(stu.name))</p><p><b>  updStu();</b></p><p><b>  else{</b></p><p>  String [] check=stu.name.spli

109、t(",");</p><p>  if(check.length==2){</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("uptateNa"+","+stu.name);</p><p>  recInfo=sc.bu

110、fIn.readLine();</p><p>  System.out.println(recInfo);</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  else{</b></p>&l

111、t;p>  System.out.println("你輸入的格式錯(cuò)誤請(qǐng)查看輸入格式后,重新輸入!");</p><p>  updByNa();</p><p><b>  }</b></p><p><b>  }</b></p><p>  }catch(Excepti

112、on e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b></p><p><b>  }</b></p><p><b>  }&l

113、t;/b></p><p><b>  //更新ID</b></p><p>  public void updByID(){</p><p>  System.out.println("==============================================");</p><p

114、>  System.out.println(" 更新頁(yè)面");</p><p>  System.out.println(" 按e退出");</p><p>  System.out.println("=============================================="

115、;);</p><p>  System.out.println(" 更新格式:新內(nèi)容,舊內(nèi)容");</p><p>  System.out.println(" 請(qǐng)輸入你要更新學(xué)生的學(xué)號(hào):");</p><p><b>  try{</b></p><p> 

116、 stu.id=in.getString();</p><p>  if("e".equals(stu.id))</p><p><b>  updStu();</b></p><p><b>  else{</b></p><p>  String [] check=stu.i

117、d.split(",");</p><p>  if(check.length==2){</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("uptateID"+","+stu.id);</p><p>  recInfo=s

118、c.bufIn.readLine();</p><p>  System.out.println(recInfo);</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  else{</b></p>

119、<p>  System.out.println("你輸入的格式錯(cuò)誤請(qǐng)查看輸入格式后,重新輸入!");</p><p>  updByID();</p><p><b>  }</b></p><p><b>  }</b></p><p>  }catch(Exc

120、eption e){</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b></p><p><b>  }</b></p><p><b> 

121、 }</b></p><p><b>  //更新電話</b></p><p>  public void updByTel(){</p><p>  System.out.println("==============================================");</p>

122、<p>  System.out.println(" 更新頁(yè)面");</p><p>  System.out.println("==============================================");</p><p>  System.out.println(" 更新格式

123、:新內(nèi)容,舊內(nèi)容");</p><p>  System.out.println("請(qǐng)輸入你要更新學(xué)生的電話:");</p><p><b>  try{</b></p><p>  stu.tel=in.getString();</p><p>  if("e".equ

124、als(stu.tel))</p><p><b>  updStu();</b></p><p><b>  else{</b></p><p>  String [] check=stu.tel.split(",");</p><p>  //檢查輸入的字符串長(zhǎng)度是否為2來(lái)判

125、斷數(shù)據(jù)是否有效</p><p>  if(check.length==2){</p><p>  sc.initSocket();</p><p>  sc.pwOut.println("uptateTel"+","+stu.tel);</p><p>  recInfo=sc.bufIn.readLi

126、ne();</p><p>  System.out.println(recInfo);</p><p><b>  menue();</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  S

127、ystem.out.println("你輸入的格式錯(cuò)誤請(qǐng)查看輸入格式后,重新輸入!");</p><p>  updByTel();</p><p><b>  }</b></p><p><b>  }</b></p><p>  }catch(Exception e){<

128、;/p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  finally{</b></p><p><b>  }</b></p><p><b>  }</b>&

129、lt;/p><p>  /*public static void main(String[] ags){</p><p>  new Client().menue();</p><p><b>  }*/</b></p><p><b>  }</b></p><p>  2、

130、stuClien類:</p><p>  import java.io.*;</p><p>  import java.net.*;</p><p>  public class stuClient {</p><p>  Socket socket=null;</p><p>  BufferedReader bu

131、fIn=null;</p><p>  PrintWriter pwOut=null;</p><p>  public void initSocket(){</p><p>  //實(shí)例化Socket相關(guān)對(duì)象</p><p>  String hosthome="127.120.55.1";</p>&l

132、t;p>  int port=10001;</p><p><b>  try {</b></p><p>  Socket socket=new Socket(hosthome,port);</p><p>  bufIn=new BufferedReader(new InputStreamReader(socket.getInputS

133、tream()));</p><p>  pwOut=new PrintWriter(socket.getOutputStream(),true);</p><p>  }catch (UnknownHostException e) {</p><p>  System.out.println("未知主機(jī),請(qǐng)檢查主機(jī)名或ip地址是否正確");&l

134、t;/p><p>  // TODO Auto-generated catch block</p><p>  //e.printStackTrace();</p><p>  } catch (IOException e) {</p><p>  // TODO Auto-generated catch block</p><

135、;p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p>  public void closeSocket(){</p><p>  //關(guān)閉Socket相關(guān)對(duì)象</p><p&g

136、t;<b>  try {</b></p><p>  bufIn.close();</p><p>  pwOut.close();</p><p>  socket.close();</p><p>  } catch (IOException e) {</p><p>  // TODO A

137、uto-generated catch block</p><p>  e.printStackTrace();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>&l

溫馨提示

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

評(píng)論

0/150

提交評(píng)論