freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

計算機科學(xué)與技術(shù)專業(yè)畢業(yè)論文設(shè)計范文模板參考資料-無紙化考試系統(tǒng)的設(shè)計與實現(xiàn)-資料下載頁

2024-11-16 17:37本頁面

【導(dǎo)讀】之有效的途徑,越來越收到各方面的關(guān)注,并得到了極大的應(yīng)用和發(fā)展。質(zhì)量評估的有效手段,同時也對傳統(tǒng)考試提出了巨大的挑戰(zhàn)。該系統(tǒng)使用方便、操作簡單,現(xiàn)階段能實現(xiàn)多用戶同時在線考試、時間控。制,試題錄入及修改、試題共享、用戶管理、成績查詢、輔助閱卷等重要功能,軟件采用簡潔的客戶端服務(wù)器模式,脫離對外網(wǎng)的依賴,在局域網(wǎng)內(nèi)即可完。以C語言和C++課程為例構(gòu)建了兩份試卷并實現(xiàn)了網(wǎng)上考試系統(tǒng)的設(shè)。計,該考試系統(tǒng)具有通用性,可以方便地推廣到其他課程。

  

【正文】 據(jù)發(fā)送至服務(wù)器端,服務(wù)器端到數(shù)據(jù)庫中驗證,正確則返回正確口令,否則返回錯誤口令,則當(dāng)前客戶端成未準(zhǔn)備狀態(tài)。,答題完畢后,自動保存到當(dāng)前目錄下 ans_paper 目錄下,若網(wǎng)絡(luò)狀態(tài)良好,立即發(fā)送至服務(wù)器端。 考試模塊 若登錄成功,在服務(wù)器端發(fā)來試卷時,在試卷狀態(tài)列表框?qū)@示收到的試卷,在服務(wù)器發(fā)送開始答題命令后,雙擊即可開始答題,試卷的顯示采用與試卷向?qū)э@示的方式,整個窗體類似于一個容器,用來裝載試題。 對于四種型題內(nèi)部采用了四個窗體顯示,在題型變換的過程中顯示某個窗體和隱藏其他窗體,由于這四個窗體是作為子窗體,整體外觀看起來非常的一致。關(guān)于數(shù)據(jù)的存儲,同樣的,內(nèi)部有存儲結(jié)構(gòu)和串行化接口,與試卷的存儲類似。 在線考試在窗體初始化時開啟了一個偵聽套接字,等待客戶端的連接。下面是考試頁主要類的聲明: class CstartexamDlg : public Cdialog//本類是一個對話框 { DECLARE_DYNAMIC(CstartexamDlg) public: CstartexamDlg(CWnd* pParent = NULL)。 // 標(biāo)準(zhǔn)構(gòu)造函數(shù) virtual ~CstartexamDlg()。 // 對話框數(shù)據(jù) enum { IDD = IDD_STARTEXAM_DLG }。 protected: virtual void DoDataExchange(CDataExchange* pDX)。 // DDX/DDV 支持 DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedBnSendpaper()。 public: private: void Listen()。 virtual BOOL OnInitDialog()。 public: CListCtrl m_paperListCtrl。 public: CMysocket* m_psocket。//指向和客戶連接的套接字指針數(shù)組 25 CMysocket* m_sever_socket。//指向偵聽用的套接字 BOOL m_listen。 public: CCExamServerDlg* parent_pointer。 CClientListDlg *m_clientlistdlg。 public: void OnAccept(void)。 private: vectorCMysocket* socketlist。//存儲套接字對象,方便釋放內(nèi)存 mapCString,CMysocket*socketmap。//ip,socket mapCString,CString clientmap。//name and ip public: void AddToMap(CString name,CString ip)。 void DeleteFromMapbyName(CString name)。 bool checkclientmap()。//if the client is empty public: CListBox m_msg_console。 public: int OnClose(CString ip)。 public: afx_msg void OnNMClickListusefulpaper(NMHDR *pNMHDR, LRESULT *pResult)。 void displayItem()。 }。 再 看他的初始化函數(shù): BOOL CstartexamDlg::OnInitDialog() { CDialog::OnInitDialog()。 // TODO: 在此添加額外的初始化 CRect listRect。 this(amp。listRect)。 int width = ()+2。 this(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP)。 this(0,_T(試卷編號 ),LVCFMT_LEFT,width/5,1)。 this(1,_T(試卷類別 ),LVCFMT_LEFT,width/5,1)。 this(2,_T(命題教師 ),LVCFMT_LEFT,width/5,1)。 this(3,_T(命題時間 ),LVCFMT_LEFT,width/5,1)。 this(4,_T(使用次數(shù) ),LVCFMT_LEFT,width/5,1)。 displayItem()。 GetDlgItem(IDC_BN_SENDPAPER)EnableWindow(FALSE)。 m_psocket = new CMysocket()。//這里動態(tài)分配了一個套接字 m_psocketm_pControlDlg = this。//這是消息處理的需要 //偵聽 thisListen()。//開始偵聽了 return TRUE。 // return TRUE unless you set the focus to a control // 異常 : OCX 屬性頁應(yīng)返回 FALSE } 當(dāng)偵聽套接字開始偵聽時,如果有客戶端來連接 (即使用 connect 函數(shù) ),則該套接字類的 onAccept 函數(shù)會被調(diào)用 ,下面是 onAccept 函數(shù)的 內(nèi)容: void CstartexamDlg::OnAccept(void) 26 { ASSERT(m_psocket != NULL)。 ASSERT(m_sever_socket != NULL)。 thism_sever_socketAccept(*m_psocket)。//接受客戶端的連接 ASSERT(m_psocketm_hSocket != INVALID_SOCKET)。//確保是有效的連接 if(m_psocketm_hSocket != INVALID_SOCKET) { CString ip,msg。 UINT port。 m_psocketGetPeerName(ip,port)。 m_psocketsetstate(CONNECTION_SUCCEED)。//set the state as connected this(m_psocket)。//存儲到 map中,方便以后查找,發(fā)送文件 thissocketmap[ip] = m_psocket。 if(!GetDlgItem(IDC_BN_SENDPAPER)IsWindowEnabled())//設(shè)置控件為可用狀態(tài) GetDlgItem(IDC_BN_SENDPAPER)EnableWindow(TRUE)。 } m_psocket = new CMysocket()。//重新分配一個空套接字,用于下一次連接 m_psocketm_pControlDlg = this。 } 這樣,只要客戶端來連接都會在被接受,套接字信息被存儲到 map中,直至達到連接上限,只要有一個客戶端連接上來,服務(wù)器端的發(fā)送按鈕 就成為可用狀態(tài),那么試卷如何發(fā)送呢,首先發(fā)送的其實是試卷的名稱,再接受和發(fā)送的過程中服務(wù)器端和客戶端會改變自己的狀態(tài),這樣做的目的就是讓套接字知道自己現(xiàn)在接受到的是什么數(shù)據(jù)應(yīng)該如何處理,下面看看服務(wù)器端發(fā)送試卷的函數(shù): void CMysocket::sendfile(CString filename) { CString fullfilename。 (IDS_SOURSE_PAPERS)。 fullfilename += _T(\\)。 fullfilename += filename。 CFile file(fullfilename,CFile::modeRead)。 TCHAR sz[256]。 ZeroMemory(sz,256)。 int len = ()。 thisSend((void*)(0),len*2)。//發(fā)送試卷文件名 try { while(1) { int num = (sz,255)。//從文件中每次讀取 255個字節(jié) thisSend(sz,num)。//發(fā)送這 255個字節(jié)的數(shù)據(jù) if(num 255)//如果讀取的數(shù)據(jù)個數(shù)小于 255,我們認為文件讀取完畢 { sz[num]= 39。\039。 break。 } } thissetstate(3)。//finish send file//設(shè)置當(dāng)前狀態(tài)為試卷發(fā)送完成 } catch(CFileException *e) { AfxMessageBox(em_strFileName)。 27 } } 關(guān)于狀態(tài)其實是幾個宏定義: define CONNECTION_SUCCEED 0 define NAME_GETED 1 define FILESEND_BEGIN 2 define FILESEND_END 3 再看看客戶端接受數(shù)據(jù)的函數(shù): void CExamClientDlg::OnReceive(void) { TCHAR Buffer[256]。 ZeroMemory(Buffer,256)。 if(() == CONNECTED_SUCCEED)//狀態(tài)是剛剛連接成功時 { (FILENAME_GETED)。//設(shè)置狀態(tài)為獲得試卷文件名 int num = (Buffer,256)。//讀取發(fā)送來的數(shù)據(jù) Buffer[num/2] = 39。\039。 thism_filename = CString(Buffer)。 CString fullfilename。 (IDS_RECEIVE_PAPERS)。 fullfilename += _T(\\)。 fullfilename += m_filename。 CFile file(fullfilename,CFile::modeCreate)。//創(chuàng)建一個文件 } else if(() == FILENAME_GETED)//狀態(tài)是剛剛獲得了文件名時 { int num = (Buffer,256)。//讀取數(shù)據(jù) Buffer[num/2] = 39。\039。 CString fullfilename。 (IDS_RECEIVE_PAPERS)。 fullfilename += _T(\\)。 fullfilename += m_filename。 CFile file。 (fullfilename,CFile::modeWrite)。//打開文件,寫入數(shù)據(jù) ()。//注意數(shù)據(jù)是接著前面寫的,因此要移動數(shù)據(jù)流指針到最后 (Buffer,num)。//寫入數(shù)據(jù) if(num 255) {//接受到的數(shù)據(jù)下于 255,我們認為數(shù)據(jù)接受完畢因此設(shè)置狀態(tài)為接受完成,當(dāng)判斷狀態(tài)不是列出的兩種時,將不會作出任何處理 (3)。 GetDlgItem(IDC_BUTTON2)EnableWindow(TRUE)。//使得答卷按鈕可用 } } } 剛才的過程就是客 戶端如何獲得試卷的過程,到現(xiàn)在位置,相應(yīng)的目錄下應(yīng)該已經(jīng)出現(xiàn)了一個時間文件了,點擊答題,就可以答題了。要開始答題,首先是要把試卷顯示出來,還記得前面提到的動態(tài)鏈接庫嗎,它將在此再次被使用: void CExamClientDlg::OnBnClickedButton2() { 28 // TODO: 在此添加控件通知處理程序代碼 if(IsWindow(this)) (SW_SHOW)。 else { (2)。// will answer this paper //find the paper file (m_filename)。 //read it and display ()。 } } 自動交卷模塊 自動交卷即在試卷原來規(guī)定的時間到來時禁止用戶答題,并保存當(dāng)前答題數(shù)據(jù)。在讀取試卷后可獲得試卷的規(guī)定時間,在開始答題后建立一個計時器,時間用盡即產(chǎn)生消息,消息響應(yīng)中即可進行控制。 (1)試卷的存儲采 用文件存儲,每個文件首先一個結(jié)構(gòu)說明了整個文件的內(nèi)容,該結(jié)構(gòu)說明如下: Struct filehead { int standard_score。//卷面總分 int subject_type_num。//題型數(shù) int single_select_num。//單選題數(shù) int single_value。 int multi_select_num。//多選題數(shù) int multi_value。 int fillblank_num。//填空題數(shù)
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1