《Java課程設(shè)計----標(biāo)準(zhǔn)化考試系統(tǒng).doc》由會員分享,可在線閱讀,更多相關(guān)《Java課程設(shè)計----標(biāo)準(zhǔn)化考試系統(tǒng).doc(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 面向?qū)ο笳n程設(shè)計題 目 標(biāo)準(zhǔn)化考試系統(tǒng) 學(xué) 院 數(shù)學(xué)與信息工程學(xué)院 專 業(yè) 計算機(jī)科學(xué)與技術(shù) 目 錄一、需求分析二、系統(tǒng)運(yùn)行環(huán)境三、功能需求描述四、總體設(shè)計五、程序模塊設(shè)計六、使用效果圖七、總結(jié)一、需求分析要設(shè)計一個性能良好的管理系統(tǒng),明確用戶的應(yīng)用環(huán)境對系統(tǒng)的要求是首要的和基本的。本系統(tǒng)從以下三個方面對用戶需求進(jìn)行了分析:1) 用戶的信息需求:考生能查詢有關(guān)考試成績;系統(tǒng)管理員能查詢題庫信息;系主要領(lǐng)導(dǎo)都能查詢所有信息。2) 用戶的處理要求:管理員能對題庫和考試科目執(zhí)行增加、刪除和修改操作;由管理員設(shè)置考試信息,經(jīng)過考試主管領(lǐng)導(dǎo)的審核后就可考試;在考試時,由考生選擇試題;系統(tǒng)控制考試時間、
2、考試成績自動生成等。3) 對系統(tǒng)的適應(yīng)性、通用性要求:要求系統(tǒng)不僅能夠進(jìn)行計算機(jī)系考試,而且其他系或?qū)I(yè)稍作設(shè)置或改動也能使用本系統(tǒng)進(jìn)行標(biāo)準(zhǔn)化網(wǎng)絡(luò)考試。二、系統(tǒng)運(yùn)行環(huán)境 Windows XP SP3以及 Eclipse 2007三、功能需求描述本系統(tǒng)可以進(jìn)行任何標(biāo)準(zhǔn)化考試,具有選擇試題、查看得分、考試計時等功能。四、 總體設(shè)計本標(biāo)準(zhǔn)化考試系統(tǒng)共由3個java源文件和若干個試題組成,試題文件為文本文件,文件名字可任意指定,但擴(kuò)展名必須是txt,文件內(nèi)容必須遵守如下的書寫規(guī)則:1) 試題文件的第一行是全部試題的答案,答案之間不可以有空格。2) 第二行是試題文件的考試時間,如1:23:45表示的考試
3、時間是1小時23分45秒。3) 每道題目之間用“*”開頭的字符串分割。4) 最后一行是endTest.java該java文件生成的類負(fù)責(zé)創(chuàng)建標(biāo)準(zhǔn)化考試的主窗口。該類含有main方法,程序從該類開始執(zhí)行,程序從該類開始執(zhí)行。在主窗口,用戶可以通過下拉列表選擇一套試題,然后開始讀取試題進(jìn)行考試。TestArea.java該文件生成的類負(fù)責(zé)創(chuàng)建考試區(qū)域?qū)ο?。是Test窗口中的主要成員變量,考試區(qū)域提供了試題選取、查看分?jǐn)?shù)、計時器、試題顯示等功能。ReadTestquestion.javaTest(主類)ReadTestquestion對象是TestArea試題區(qū)中的重要對象,負(fù)責(zé)讀取該試題、計算分?jǐn)?shù)
4、等。 TestArea ReadTestquestion 圖 類之間的依賴關(guān)系五、程序模塊設(shè)計一、主類Test 1成員變量成員變量描述變量類型名稱考試區(qū)域TestAreatestPanel 2方法名稱功能備注Test創(chuàng)建程序窗口構(gòu)造方法main程序開始運(yùn)行 3. 代碼 import java.awt.*;import java.awt.event.*;import javax.swing.*;public class Test extends JFrame TestArea testPanel=null; Container con=null; public Test() super(標(biāo)準(zhǔn)化考
5、試系統(tǒng)); testPanel=new TestArea(); con=getContentPane(); con.add(testPanel,BorderLayout.CENTER); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); setVisible(true); setBounds(60,40,660,460); con.validate(); validate(); public static void main(String args)
6、 new Test(); 一、讀取試題ReadTestquestion1 成員變量描述變量類型名稱文件名Stringfilename正確答案StringcorrectAnswer試題內(nèi)容StringtestContent用戶提交的答案Stringselection用戶得分intscore試題用時longtime讀取試題的流FileReaderin2方法名稱功能備注setFilename設(shè)置試題文件的名稱getFilename獲取試題文件的名稱gettime獲取考試用時set 完成考試設(shè)置是否完成考試get 完成考試判斷是否完成考試getTestContent獲取試題內(nèi)容getSelection
7、排列用戶提交的答案getScore計算用戶得分getMessage查閱分?jǐn)?shù)和正確答案3. 代碼 import java.io.*;import java.util.*;public class ReadTestquestion String filename=, /存放考題文件名字的字符串 correctAnswer=, /存放正確答案的字符串 testContent= , /試題內(nèi)容 selection= ; /存放用戶提交的答案 int score=0; / 用戶的得分 long time=0; /該試題的考試用時 boolean 完成考試=false; /判斷是否已完成全部試題 File
8、 f=null; FileReader in=null; BufferedReader 讀取=null; public void setFilename(String name) filename=name; score=0; selection=; try if(in!=null&讀取!=null) in.close(); /關(guān)閉與前一文件的連接 讀取.close(); f=new File(filename); in=new FileReader(f); 讀取=new BufferedReader(in); /讀取試題文件的第1行,即標(biāo)準(zhǔn)答案 correctAnswer=(讀取.readL
9、ine().trim(); /去掉前后空格 String temp=(讀取.readLine().trim() ; /讀取試題文件的第2行,即考試用時 StringTokenizer token=new StringTokenizer(temp,:); int hour=Integer.parseInt(token.nextToken() ; /獲取用時的“時”值 int minute=Integer.parseInt(token.nextToken(); /獲取用時的“分”值 int second=Integer.parseInt(token.nextToken(); /獲取用時的“秒”值
10、time=1000*(second+minute*60+hour*60*60); /將用時轉(zhuǎn)換成毫秒單位 catch(Exception e) testContent=沒有選擇試題; public String getFilename() return filename; public long getTime() return time; public void set完成考試(boolean b) 完成考試=b; public boolean get完成考試() return 完成考試; public String getTestContent() /獲取試題的內(nèi)容 try String
11、s=null; StringBuffer temp=new StringBuffer(); if(讀取!=null) /如果用戶選擇了試題文件,讀取就不是空對象 while(s=讀取.readLine()!=null) /繼續(xù)讀取某個試題 if(s.startsWith(*) /試題的結(jié)束標(biāo)志 break; temp.append(n+s); if(s.startsWith(end) /整個試題文件的結(jié)束標(biāo)志 in.close(); /關(guān)閉和當(dāng)前文件的連接 讀取.close(); 完成考試=true; /已完成全部試題 testContent=new String(temp); else te
12、stContent=new String(沒有選擇試題); catch(Exception e) testContent=試題內(nèi)容為空,考試結(jié)束!; return testContent; public void setSelection(String s) selection=selection+s; /用戶提交的答案依次尾加到 selection public int getScore() score=0; int length1=selection.length(); /用戶提交的第i題答案在selection中的位置 int length2=correctAnswer.length()
13、; int min=Math.min(length1,length2); for(int i=0;imin;i+) try if(selection.charAt(i)=correctAnswer.charAt(i) score+; catch(StringIndexOutOfBoundsException e) i=0; return score; public String getMessages() int length1=selection.length(); /用戶已提交的答案個數(shù) int length2=correctAnswer.length(); int length=Math
14、.min(length1,length2); String message=正確答案:+correctAnswer.substring(0,length)+n+ 你的回答:+selection+n; return message; 六、 使用效果圖 七、總結(jié) Java課程設(shè)計是和室友一起完成的,在答辯前一天的時候,代碼運(yùn)行并沒有想象中的結(jié)果,兩人一起去分析,但還是無勞。后來根據(jù)自己應(yīng)有的能力,更換了題目,雖然還是遇見了很多的問題,讀取不到考題文件,在認(rèn)真分析檢查代碼,找出錯誤來,最后在答辯前順利完成,但程序并不是自己所寫,而是在網(wǎng)上查找過來,但在此課程設(shè)計中,學(xué)到了很多,也同時鞏固了JAVA的知識,在今年還有這門課程,會花時間在此上面,努力做好!