在線考試系統(tǒng)JAVA_第1頁
在線考試系統(tǒng)JAVA_第2頁
在線考試系統(tǒng)JAVA_第3頁
在線考試系統(tǒng)JAVA_第4頁
在線考試系統(tǒng)JAVA_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、【精品文檔】如有侵權(quán),請(qǐng)聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流在線考試系統(tǒng)JAVA.精品文檔.題目 在線考試系統(tǒng)1、 實(shí)驗(yàn)?zāi)康氖炀氝\(yùn)用JAVA開發(fā)環(huán)境及工具、并用JAVA語言編寫程序;掌握面向?qū)ο蟮母拍?;掌握系統(tǒng)功能模塊的合理劃分,并實(shí)現(xiàn)各模塊接口的連接;掌握C/S結(jié)構(gòu)的編程方法;設(shè)計(jì)數(shù)據(jù)庫模型。2、 實(shí)驗(yàn)內(nèi)容編輯生成試題庫,隨機(jī)生成本次考試試題,同時(shí)提供在線評(píng)分并保存結(jié)果。選擇ACCESS作為后臺(tái)的數(shù)據(jù)庫。3、 實(shí)驗(yàn)過程在線考試系統(tǒng)信息管理評(píng)卷管理試卷管理題庫管理 成績管理考試管理用戶管理權(quán)限管理3.1 系統(tǒng)模塊部分設(shè)計(jì)題庫管理:用于對(duì)單個(gè)試題的增、刪、改、查等基本維護(hù),還可對(duì)題庫進(jìn)行數(shù)據(jù)備份和數(shù)據(jù)還

2、原。我們針對(duì)不同題型、不同應(yīng)用范圍及不同科目對(duì)試題進(jìn)行維護(hù)。試卷管理:可進(jìn)行三種組卷方式的維護(hù):隨機(jī)組卷、人工組卷、綜合組卷。還可對(duì)考生的基本信息進(jìn)行維護(hù)??荚嚬芾恚簩?duì)考試分配試卷,并對(duì)考試的基本信息進(jìn)行維護(hù)。相當(dāng)于人工安排考試的過程評(píng)卷管理:對(duì)試卷的客觀題分配評(píng)卷人,并對(duì)評(píng)卷人基本信息進(jìn)行管理。成績管理:對(duì)每次考試的學(xué)生成績的基本信息進(jìn)行維護(hù),并提供學(xué)生成績的統(tǒng)計(jì)管理。用戶管理:對(duì)使用本系統(tǒng)的用戶基本信息進(jìn)行維護(hù),用戶多數(shù)為:系統(tǒng)管理員、老師、教務(wù)處人員、其他權(quán)限管理:對(duì)系統(tǒng)的訪問權(quán)限進(jìn)行管理,并對(duì)用戶可進(jìn)行權(quán)限的分配。系統(tǒng)應(yīng)該具備的基本功能各模塊需完成以下功能:題庫管理試卷管理試卷其他維護(hù)

3、試卷信息維護(hù)其它維護(hù)試題維護(hù)基本維護(hù)綜合組卷人工組卷隨機(jī)組卷題型維護(hù)科目維護(hù)范圍維護(hù)題型維護(hù):對(duì)試題的題型進(jìn)行增、刪、改、查操作。在操作之后會(huì)自動(dòng)刷新主頁,以使信息更新。范圍維護(hù):對(duì)試題的應(yīng)用范圍進(jìn)行增、刪、改、查操作。在操作之后會(huì)自動(dòng)刷新主頁,以使信息更新??颇烤S護(hù):對(duì)試題的科目進(jìn)行增、刪、改、查操作。在操作之后會(huì)自動(dòng)刷新主頁,以使信息更新。試題維護(hù):對(duì)試題的基本信息進(jìn)行增、刪、改、查操作。在操作之后會(huì)自動(dòng)刷新主頁,以使信息更新。其他維護(hù):對(duì)試題信息的批量查詢,并可進(jìn)行數(shù)據(jù)導(dǎo)出、數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)。隨機(jī)組卷:用戶只需對(duì)試卷題型進(jìn)行設(shè)置就可組卷的方式。人工組卷:可使用戶選擇試卷的題型中的試題的

4、組卷方式。綜合組卷:是隨機(jī)組卷與人工組卷的混合組卷方式,即用戶對(duì)某一類型的試題可進(jìn)行選擇,也可對(duì)試題不進(jìn)行選擇。試卷其他維護(hù):對(duì)試卷信息的批量查詢,對(duì)試題的數(shù)據(jù)備份與還原??荚嚬芾砜荚囆畔⒕S護(hù)分配評(píng)卷人評(píng)卷管理成績管理評(píng)卷人評(píng)卷考生信息維護(hù)考生成績維護(hù)成績其他維護(hù)考試信息維護(hù):對(duì)考試的時(shí)間、地點(diǎn)、監(jiān)考人、考試用的試卷、試卷總分?jǐn)?shù)及答卷總時(shí)間等考試的基本要素進(jìn)行設(shè)置??忌畔⒕S護(hù):對(duì)考試的學(xué)生的基本信息進(jìn)行增、刪、改、查操作,在操作之后會(huì)自動(dòng)刷新主頁,以使信息更新。分配評(píng)卷人:對(duì)考試所用試卷的客觀題分配評(píng)卷人,并對(duì)評(píng)卷的基本信息進(jìn)行維護(hù)。評(píng)卷人評(píng)卷:對(duì)分配試卷的評(píng)卷人可以在此進(jìn)行評(píng)卷。考生成績維

5、護(hù):對(duì)考試的考生成績信息進(jìn)行統(tǒng)計(jì)與匯總,對(duì)有權(quán)限的人可進(jìn)行成績的增、刪、改、查操作。成績其他維護(hù):對(duì)考生成績信息的批量查詢,并可進(jìn)行數(shù)據(jù)導(dǎo)出、數(shù)據(jù)備份、數(shù)據(jù)恢復(fù)。用戶管理權(quán)限管理信息管理權(quán)限信息維護(hù)用戶基本信息信息基本維護(hù)用戶分配權(quán)限用戶基本信息維護(hù):對(duì)使用本系統(tǒng)的用戶進(jìn)行維護(hù),而用戶的權(quán)限由權(quán)限管理進(jìn)行維護(hù),并分配給用戶,使用戶只能訪問自己擁有的權(quán)限內(nèi)。權(quán)限信息維護(hù):對(duì)基本的權(quán)限進(jìn)行維護(hù),用戶可自定義維護(hù)權(quán)限。用戶分配權(quán)限:對(duì)未分配權(quán)限的用戶進(jìn)行權(quán)限的分配,即對(duì) 分配權(quán)限的增、刪、改、查操作。信息基本維護(hù):我們的信息除了有關(guān)考試的信息外,還有公告、新聞、留言信息需要我們維護(hù),其中公告、新聞?dòng)?/p>

6、后臺(tái)有權(quán)限的人進(jìn)行增、刪、改、查操作,而留言是由前臺(tái)的用戶(學(xué)生)或游客錄入的,我們要防止垃圾數(shù)據(jù)顯示,即對(duì)留言有權(quán)更改等操作。3.2系統(tǒng)結(jié)構(gòu)圖、本系統(tǒng)分為學(xué)生前臺(tái)子系統(tǒng)和考試管理子系統(tǒng),整個(gè)系統(tǒng)的結(jié)構(gòu)圖如下:在線考試系統(tǒng)考生前 臺(tái)后臺(tái)管 理題庫管理 評(píng)卷管理考試管理試卷管理成績管理用戶管理權(quán)限管理學(xué)生登陸3.3 數(shù)據(jù)庫設(shè)計(jì)試題類型表(questionType_table):其中包括了試題的類型的基本信息,如類型名稱、答題方式、說明信息等字段;錄入時(shí),我們將答題方式確定為大概幾種類型:填空方式,選擇方式,問答方式,判斷方式,綜合方式。試題范圍表(questionBound_table):用于控

7、制試題應(yīng)用的范圍,如同樣的科目語文,在小學(xué)、初中、高中、大學(xué)都有,由此我們?cè)O(shè)定了此表,此表中有范圍名稱、范圍說明等基本信息;所屬科目表(questionSubject_table):用于錄入試題相關(guān)的科目應(yīng)用,它可以有不同的應(yīng)用范圍。如上所述,我們只需錄入一次的科目,就可方便我們?cè)阡浫朐囶}時(shí)每次都錄。各種題庫表:我們采用一種類型的題存儲(chǔ)在一個(gè)表中,由此我們會(huì)有填空題表(question_blanc_table)、單選題表(question_selectone_table)、多選題表(question_selectMany_tabel)一題多問表(question_askone_table)、一

8、題多問表(question_askMany_table)、判斷題表(question_judge_table)等試題表 試卷表(exam_table):用于報(bào)存考試中試卷的基本信息,如出卷方式(有隨機(jī)出卷、人工出卷、綜合出卷)、試卷名稱、試卷應(yīng)用范圍(與試題范圍相對(duì)應(yīng))、試卷所屬科目(與試題科目相對(duì)應(yīng))、試題標(biāo)題級(jí)別、試題標(biāo)題內(nèi)容、試題總類型、試題個(gè)數(shù)、試題總ID等基本信息。學(xué)生表(student_table):用于保存學(xué)生的考試的用戶名及登陸密碼。成績表(grade_table):用于存儲(chǔ)學(xué)生的考試成績。評(píng)題表(appraiser_question_table):對(duì)于主觀題的答案我們須要評(píng)卷

9、人(有權(quán)限的用戶)進(jìn)行手工評(píng)卷,本表用來存儲(chǔ)評(píng)卷人評(píng)卷的一些信息。答案表(student_answer_table):用于存儲(chǔ)學(xué)生問答題的答案,如試卷ID,學(xué)生ID及各種試題類型的答案字段。用戶表(user_table):用于保存用戶的登陸的基本信息及分配的權(quán)限。權(quán)限表(purview_table):用于存儲(chǔ)用戶組織的的權(quán)限,通過分配操作模塊的權(quán)限組織權(quán)限。4、 關(guān)鍵代碼及其分析4.1-ServerGui.java-public void actionPerformed(ActionEvent e) if (e.getSource() = log) / boolean b=login();St

10、ring username = JOptionPane.showInputDialog(this, 請(qǐng)輸入用戶名,輸入用戶名, JOptionPane.QUESTION_MESSAGE).trim();String password = JOptionPane.showInputDialog(this, 請(qǐng)輸入密碼,輸入密碼, JOptionPane.QUESTION_MESSAGE).trim();if (username = null | password = null) username = temp;password = temp;return;adminCheck(username,

11、 password);/ 驗(yàn)證管理員if (tf = true) JOptionPane.showMessageDialog(this, 登陸成功!, 成功,JOptionPane.INFORMATION_MESSAGE);toolBar1.setVisible(true);split_one.setVisible(true); else JOptionPane.showMessageDialog(this, 登陸失?。? 失敗,JOptionPane.ERROR_MESSAGE);return; else if (e.getSource() = setCount) userCount = J

12、OptionPane.showInputDialog(this, 請(qǐng)輸入本次考試的人數(shù));inittest(); / 數(shù)據(jù)庫信息初始化 else if (e.getSource() = startSer) if (settime = true & setcount = true) new ServerManager();serArea.append(服務(wù)器已啟動(dòng)n預(yù)設(shè)考試人數(shù)為: + userCount + n考試時(shí)間為:+ timeCount + n);start = true; else JOptionPane.showMessageDialog(this, 你還沒有設(shè)置考試信息, 警告信

13、息,JOptionPane.INFORMATION_MESSAGE); if (start = true)linkArea.append(ServerManager.linkShow(ServerManager.linkstatus)+ n); else JOptionPane.showMessageDialog(this, 服務(wù)器還沒有啟動(dòng)不能進(jìn)行操作, 警告信息,JOptionPane.INFORMATION_MESSAGE); else if (e.getSource() = userButton) if (start = true)userArea.append(ServerManag

14、er.userShow(ServerManager.userstatus)+ n);userArea.append(ServerManager.countShow(ServerManager.ucount); else public void adminCheck(String s1, String s2)ConnectBean cb=new ConnectBean();if (!cb.openConnection() System.out.println(連接數(shù)據(jù)失敗);System.exit(1);return;4.2-Server_login.java-/ 定義一個(gè)接收用戶登陸的類pub

15、lic void run() String s = null;try s = in.readUTF(); / 接收考試號(hào)和密碼,然后分別取出StringTokenizer st = new StringTokenizer(s, ,);if (st.hasMoreTokens() str1 = st.nextToken();str2 = st.nextToken();System.out.println(username : + str1);System.out.println(password : + str2); catch (IOException e) e.printStackTrace

16、();/ 讀取數(shù)據(jù)庫里的用戶信息 并進(jìn)行驗(yàn)證try ConnectBean cb = new ConnectBean();if (!cb.openConnection() System.out.println(連接數(shù)據(jù)失敗);System.exit(1);return;cb.createPreparedStatement(select flag from stuinfo where sno=+ str1 + ResultSet r = cb.executeQuery();String m =;while (r.next() m=r.getString(flag);System.out.prin

17、tln(標(biāo)識(shí):+m);if ( !m.equals(0) ) out.writeUTF(用戶已經(jīng)完成考試,不能再考試); else cb.createPreparedStatement(select sname,spass from stuinfo where sno= + str1+ , false);ResultSet rs = cb.executeQuery();while (rs.next() dbn = rs.getString(sname);dbp = rs.getString(spass);System.out.println(用戶: + str1 + 你的用戶名為: + dbn

18、+ , 你的密碼為: + dbp);/ 驗(yàn)證用戶密碼,如果登錄成功將登錄標(biāo)志設(shè)為1if (str2.equals(dbp.trim() out.writeUTF(用戶 + dbn + 登陸成功);System.out.println(用戶 + dbn + 登陸成功);out.close();String sql1 = update stuinfo set flag = 1 where sno= +str1+;PreparedStatement ps = cb.createPreparedStatement(sql1);ps.executeUpdate();System.out.println(

19、用戶成功登錄);else out.writeUTF(密碼錯(cuò)誤);System.out.println(登陸密碼錯(cuò)誤);out.close();cb.close();4.3-ServerManager.java-public ServerManager() Thread td1 = new Thread() public void run() serstatus= login thread start!n;serShow(serstatus);ServerSocket ss1 = null;Socket you = null;int port1 = 8001;try ss1 = new Serv

20、erSocket(port1);serstatus = listener the port: + port1;serShow(serstatus); catch (IOException e) e.printStackTrace();while (true) try you = ss1.accept(); catch (IOException e) e.printStackTrace();if (you != null) counter+;ucount = 現(xiàn)在參加考試的人數(shù)為: + counter;countShow(ucount);if (counter Maxcount) usersta

21、tus= users IP + you.getInetAddress()+ connected + port1 + 進(jìn)行登陸;userShow(userstatus);/ 第一個(gè)線程啟動(dòng)new Server_login(you).start(); else userstatus = users IP + you.getInetAddress()+ connected + port1 + 中斷線程啟動(dòng);userShow(userstatus);/ 中斷線程啟動(dòng)new Maxcounter(you);td1.start();/ 啟動(dòng)一個(gè)響應(yīng)客戶端讀取試題的線程Thread td2 = new Th

22、read(two) public void run() serstatus= thread 2 start!;serShow(linkstatus);ServerSocket ss2 = null;int port2 = 8002;try ss2 = new ServerSocket(port2);linkstatus = listener the port: + port2;linkShow(serstatus); catch (IOException e) e.printStackTrace();while (true) Socket you2 = null;try you2 = ss2.

23、accept(); catch (IOException e) e.printStackTrace();if (you2 != null) userstatus = users IP + you2.getInetAddress()+ connected + port2 + 進(jìn)行讀題;userShow(userstatus);new Server_readTest(you2).start();td2.start()/ 啟動(dòng)一個(gè)接收用戶答應(yīng)并存儲(chǔ)的線程Thread td3 = new Thread(three) ServerSocket ss3 = null;int port3 = 8003;pu

24、blic void run() serstatus=thread 3 start!; serShow(serstatus);try ss3 = new ServerSocket(port3);linkstatus=listener the port: + port3; linkShow(linkstatus); catch (IOException e) e.printStackTrace();while (true) Socket you3 = null;try you3 = ss3.accept(); catch (IOException e) e.printStackTrace();if

25、 (you3 != null) userstatus=users IP + you3.getInetAddress()+ connected + port3 + 提交答案;userShow(userstatus);/ 第3個(gè)線程啟動(dòng)new Server_readScore(you3).start();td3.start();/ 啟動(dòng)一個(gè)用戶查詢的線程Thread td4 = new Thread(four) ServerSocket ss4 = null;int port4 = 8004;public void run() serstatus=thread 4 start!;serShow(s

26、erstatus);try ss4 = new ServerSocket(port4);linkstatus=listener the port: + port4;linkShow(linkstatus); catch (IOException e) e.printStackTrace();while (true) Socket you4 = null;try you4 = ss4.accept(); catch (IOException e) e.printStackTrace();if (you4 != null) userstatus=users IP + you4.getInetAdd

27、ress()+ connected + port4 + 進(jìn)行查詢;userShow(userstatus);4.4-Server_readTest.java-public void run() String sql2; / 定義查詢語句String dbt = 以下為試題; / 試題String ts = null; / 接收用戶發(fā)送的考試科目int tcount = 0; / 試題的數(shù)目try / 網(wǎng)絡(luò)連接部分out.writeUTF(你連接成功);ts = in.readUTF();System.out.println(ts);/ 數(shù)據(jù)庫連接部分/ 查詢客戶端所選試題ConnectBean

28、 cb = new ConnectBean();if (!cb.openConnection() System.out.println(連接數(shù)據(jù)失敗);System.exit(1);return;/在數(shù)據(jù)庫選題sql2 = select * from exam where eid= + ts + ;cb.createPreparedStatement(sql2, false);ResultSet rs = cb.executeQuery();while (rs.next() dbt += +n+rs.getString(2) + t + n + rs.getString(3) + ;tcoun

29、t+;cb.close();System.out.println(dbt);System.out.println(tcount);out.writeUTF(Integer.toString(tcount);out.writeUTF(dbt); / 將讀到的試題返回到客戶端/傳送考試時(shí)間out.writeUTF(+Timecount);out.flush();out.close();System.out.println(讀取試題成功!); catch (SQLException e) e.printStackTrace();System.out.println(not connect db);

30、catch (IOException e1) System.out.println(not read client select!);4.5-/Server_readScore.java-/ 定義一個(gè)接收用戶答案的類,判斷對(duì)錯(cuò),將分?jǐn)?shù)返回到用戶端,并將成績存入數(shù)據(jù)庫public Server_readScore(Socket socket) / -創(chuàng)建網(wǎng)絡(luò)連接-/this.socket = socket;public void run() / - 接收用戶提交的答案-/try readkey = in.readUTF();System.out.println(readkey); catch (

31、IOException e1) e1.printStackTrace();StringTokenizer stc = new StringTokenizer(readkey, ,);if (stc.hasMoreTokens() / 客戶傳來答案的第一個(gè)字符為用戶名,第二個(gè)字符為考試科目str1 = stc.nextToken().trim();System.out.println(用戶為: + str1);uno = Integer.parseInt(str1);if (stc.hasMoreTokens() /第二個(gè)字符為考試科目str2 = stc.nextToken().trim();

32、System.out.println(試題類型為: + str2);/ -在數(shù)據(jù)庫獲取正確答案-/try ConnectBean cb = new ConnectBean();if (!cb.openConnection() System.out.println(連接數(shù)據(jù)失敗);System.exit(1);return;/ -判斷分?jǐn)?shù)-/for (int i = 0; i Integer.parseInt(str4); i+) if (userAnsweri.equals(crreAnsweri) count += 10;System.out.println(用戶: + str1 + ,你的

33、得分為: + count);/ 將分?jǐn)?shù)返回到客戶端try out.writeUTF(Integer.toString(count);System.out.println(將分?jǐn)?shù)返回到客戶端);out.flush();out.close(); catch (IOException e) e.printStackTrace();/ -將分?jǐn)?shù)存到數(shù)據(jù)庫-/try ConnectBean cb = new ConnectBean();if (!cb.openConnection() System.out.println(連接數(shù)據(jù)失敗);System.exit(1);return;PreparedSta

34、tement ps = cb.createPreparedStatement(subject);ps.setInt(1, count);ps.setInt(2, uno);ps.executeUpdate();System.out.println(更新成功);mit();cb.close(); catch (SQLException e) / TODO 自動(dòng)生成 catch 塊System.out.println(寫入數(shù)據(jù)發(fā)生錯(cuò)誤!/n + e);4.6-Server.java-public static void main(String args) new Server();4.7-Test

35、Gui.java-public void actionPerformed(ActionEvent e) if (e.getSource() = callIP) / 呼叫服務(wù)器if (socket != null & in != null & out != null) / 消除以往的連接信息try socket.close();in.close();out.close(); catch (Exception ee) String login = user + , + pass;int port1 = 8001; try / 建立網(wǎng)絡(luò)連接socket = new Socket(ip, port1)

36、;in = new DataInputStream(socket.getInputStream();out = new DataOutputStream(socket.getOutputStream();out.writeUTF(login); catch (IOException ee) / 如果連接失敗ipField.setText(呼叫失敗);stateField.setText(你呼叫沒有成功);int port4 = 8004;try socket = new Socket(ip, port4);in = new DataInputStream(socket.getInputStre

37、am();out = new DataOutputStream(socket.getOutputStream();out.writeUTF(user);stuinfo.setText(請(qǐng)求信息已發(fā)送); catch (IOException ee) / 如果連接失敗ipField.setText(呼叫失敗);stateField.setText(你呼叫沒有成功);stuinfo.setText(你呼叫沒有成功);if (socket != null) / 如果連接成功try String queryInfo = in.readUTF(); / 得到查詢結(jié)果stuinfo.setText(que

38、ryInfo);out.flush();out.close(); catch (IOException e1) / 出現(xiàn)異常otherinfo.setText(數(shù)據(jù)傳輸錯(cuò)誤); else if (e.getSource() = beginExe) / 生成試題String mgr = (String) subject.getSelectedItem();if (mgr.equals(英語) / 選擇英語selectT(e); else if (mgr.equals(數(shù)學(xué)) / 選擇數(shù)學(xué)selectT(m);stateField.setText(你已經(jīng)選擇了 + mgr + 試題);testinfo.setText(你已經(jīng)選擇了 + mgr + 試題);startTest.setEnabled(true); else if (e.getSource() = startTest) / 開始考試stateFie

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論