版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java學(xué)生管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生管理系統(tǒng)課程設(shè)計(jì)(java)
- 學(xué)生管理系統(tǒng)-java課程設(shè)計(jì)
- 學(xué)生管理系統(tǒng)課程設(shè)計(jì)(java)
- java課程設(shè)計(jì)報(bào)告學(xué)生管理系統(tǒng)
- java課程設(shè)計(jì)---學(xué)生學(xué)籍管理系統(tǒng)
- java學(xué)生管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- java課程設(shè)計(jì)--學(xué)生黨員管理系統(tǒng)
- java課程設(shè)計(jì)--學(xué)生信息管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)java課程設(shè)計(jì)
- java課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- java課程設(shè)計(jì)---學(xué)生信息管理系統(tǒng)
- java課程設(shè)計(jì)----學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)java課程設(shè)計(jì)
- java課程設(shè)計(jì)--學(xué)生信息管理系統(tǒng)
- java課程設(shè)計(jì)-學(xué)生信息管理系統(tǒng)
- java課程設(shè)計(jì)---學(xué)生信息管理系統(tǒng)
- java學(xué)生成績(jī)管理系統(tǒng) 課程設(shè)計(jì)
- java學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論