青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品


姚明,81年,97年開(kāi)始接觸電腦,6年的編程學(xué)習(xí)經(jīng)歷, 曾有4年工作經(jīng)驗(yàn),最終轉(zhuǎn)向基礎(chǔ)理論學(xué)習(xí)和研究, 現(xiàn)華中理工科技大學(xué)在讀,有志于圖形學(xué)領(lǐng)域工作發(fā)展

EMAIL:alanvincentmail@gmail.com QQ:31547735

隨筆分類(34)

文章分類(99)

相冊(cè)

收藏夾(6)

編程技術(shù)網(wǎng)站

出國(guó)留學(xué)網(wǎng)站

數(shù)學(xué)資源網(wǎng)站

圖形學(xué)網(wǎng)站

  • ati
  • ati開(kāi)發(fā)者
  • azure
  • 葉蔚的個(gè)人網(wǎng)站
  • cnblogs
  • 計(jì)算機(jī)圖形學(xué)群
  • directx
  • directx官方網(wǎng)站
  • Eurographics
  • 計(jì)算機(jī)圖形學(xué)年會(huì)
  • gamedev
  • 游戲編程網(wǎng)站
  • nvidia
  • nvidia開(kāi)發(fā)者
  • opengl
  • opengl官方網(wǎng)站
  • opengpu
  • GPU 相關(guān)的圖形學(xué)技術(shù)
  • SCI
  • 圖形學(xué)論文
  • siggraph
  • 世界圖形學(xué)年會(huì)
  • Tim Rowley
  • 收集整理了頂級(jí)年會(huì)的論文合集

英語(yǔ)資源網(wǎng)站

自由職業(yè)者

搜索

  •  

最新評(píng)論

[ 原創(chuàng)文檔 本文適合高級(jí)讀者 已閱讀19451次 ]  

大型作業(yè)答辯:C/S考試系統(tǒng)程序制作詳解


作者:姚明

下載源代碼


程序組成結(jié)構(gòu)

一、服務(wù)器程序

  1. 采用了WinSocket32的完成端口模型(I/O completion ports)
  2. WIN32多線程技術(shù)
  3. ODBC APIS 進(jìn)行數(shù)據(jù)庫(kù)操作
二、客戶端程序

用Win32 API函數(shù)構(gòu)造主窗體和界面元素,如圖一所示:


圖一 程序組織結(jié)構(gòu)

服務(wù)器程序詳解

一、完全端口模型(I/O completion ports)是迄今為止最為復(fù)雜的一種I/O模型,假如一個(gè)程序需要管理為數(shù)眾多的套接字,那么采用這種模型往往可以達(dá)到最佳的系統(tǒng)性能,不幸的是該模型只適用與WIN2000和WINNT操作系統(tǒng),因其設(shè)計(jì)的復(fù)雜性,只有在你的應(yīng)用程序需要同時(shí)管理數(shù)百乃至上千個(gè)套接字的時(shí)候,而且希望隨著系統(tǒng)內(nèi)安裝的CPU的數(shù)量增多,應(yīng)用程序的性能也可以線性的提升,才考慮采用“完成端口模型”(WEB服務(wù)器便是這方面的典型例子)。I/O completion ports是唯一適用于高負(fù)載服務(wù)器的一個(gè)技術(shù),它利用一些線程幫助平衡“I/O請(qǐng)求”所引起的負(fù)載,這樣的構(gòu)架特別適合應(yīng)用在SMP系統(tǒng)中產(chǎn)生所謂的“Scalable”服務(wù)器,(Scalable是指能夠籍著增加RAM或磁盤空間,CPU個(gè)數(shù)而提升應(yīng)用程序效能的一種系統(tǒng))。

二、完全端口模型的具體實(shí)現(xiàn)
  為了使用“完成端口模型”,我產(chǎn)生了一堆線程在端口上等待,線程數(shù)量=CPU個(gè)數(shù)x2+2,我將每個(gè)客戶端產(chǎn)生的文件句柄與I/O completion ports端口相關(guān)聯(lián),建立了這種關(guān)系之后,任何客戶端發(fā)出操作請(qǐng)求,便會(huì)導(dǎo)致I/O completion packet被送到“完成端口”去,這個(gè)步驟是操作系統(tǒng)完成的,為了回應(yīng)I/O completion packet,我讓I/O completion釋放一個(gè)等待中的線程,如果目前沒(méi)有線程正在等待,它不會(huì)為這個(gè)客戶端N產(chǎn)生新的線程, 當(dāng)作用中的線程處理完相應(yīng)客戶端的“overlapped I/O”后,將返回I/O completion端口進(jìn)行等待,客戶端N這時(shí)才能夠被處理,這樣就保證了我的Workers線程總是保持一個(gè)穩(wěn)定的數(shù)量(CPU個(gè)數(shù)x2+2)。如圖二所示:


圖二 完全端口線程模型示意圖

三、數(shù)據(jù)庫(kù)的操作實(shí)現(xiàn)
  這部分功能主要是通過(guò)WinSocket32 API和ODBC API結(jié)合使用來(lái)實(shí)現(xiàn)的,服務(wù)端進(jìn)入監(jiān)聽(tīng)狀態(tài)后,為每個(gè)客戶端提供相應(yīng)線程處理發(fā)過(guò)來(lái)的指令,通過(guò)分析指令,作出以下相應(yīng)的操作:
客戶端發(fā)送的指令(自定義的):
      login: 登陸校驗(yàn) 參數(shù):用戶名,科目,密碼
            Srecv:ScanTm: 檢查服務(wù)器時(shí)間校對(duì)試卷修改試卷狀態(tài),拋出計(jì)數(shù)值
            Srecv:GetSta: 獲取試卷狀態(tài)
            Srecv:GetRlt: 獲取上次做答
            Srecv:GetNum: 獲得試卷相關(guān)信息(總題數(shù),開(kāi)考時(shí)間,結(jié)束時(shí)間)
            Srecv:GetQue: 獲取試卷題目?jī)?nèi)容.
            Srecv:SaveDt: 保存試卷
            Srecv:ChanST: 修改試卷狀態(tài).      
四、服務(wù)器程序總結(jié)
  數(shù)據(jù)庫(kù)被單獨(dú)存放在一個(gè)服務(wù)器中可以保證數(shù)據(jù)安全性,程序會(huì)將客戶端的一切操作顯示在窗口中,用戶可以通過(guò)觀察窗口,知道所有客戶端的動(dòng)作。這個(gè)程序采用“完成端口”模型,可以滿足大規(guī)模的考試需求。

客戶端程序詳解
一、窗口完全采用Win32API函數(shù)生成
主要包含一下標(biāo)準(zhǔn)控件:
      static控件
            Edit控件
            Button控件
            Scroll控件
            窗口元素全部采用計(jì)算后的相對(duì)坐標(biāo)定位,所以800X600和1024X768下均能正常顯示,      
二、試卷的初始化
  考慮到每張?jiān)嚲淼念}目數(shù)量都不同,為了節(jié)約內(nèi)存空間,所以我在堆中動(dòng)態(tài)生成了一個(gè)試卷結(jié)構(gòu)體,通過(guò)向服務(wù)器程序發(fā)送GetNum:指令來(lái)獲得試卷總題數(shù)QuestionNum,然后使用TestPaper=new TestRubric [QuestionNum]
/*結(jié)構(gòu)體定義*/
            //試卷每道題的結(jié)構(gòu)
            struct Questions{
            BOOL state;
            char Text [512];
            };
            struct SelectObject{
            BOOL state;
            char Text[256];
            };
            struct TestRubric{
            struct Questions Tile;
            struct SelectObject choose [4];
            };
            
由于TextOut函數(shù)不支持自動(dòng)換行,所以換行操作必須由我自己完成.因此我用同樣的方法在堆中創(chuàng)建了一個(gè)Screen用作屏幕顯示的結(jié)構(gòu)體
Screen=new  Lines[LINES]
            struct Lines{
            int earmark; //用來(lái)存儲(chǔ)Button的ID
            BOOL color1;//置顏色標(biāo)志
            BOOL color2;//置顏色標(biāo)志
            char Line [512];
            };      
LINES=掃描TestPaper中超過(guò)屏幕寬度的行數(shù)+ QuestionNum*5+QuestionNum*3
屏幕寬度=客戶區(qū)的寬/每個(gè)文字的寬度/2*2
屏幕高度=客戶區(qū)的高/每個(gè)文字的高度
為每一體產(chǎn)生4個(gè)互斥的按鈕
按鈕總數(shù)= QuestionNum*4
在堆中生成hWndList數(shù)組保存按鈕handle
hWndList=new hWnd [QuestionNum*4]
按鈕ID=題號(hào)*10+選項(xiàng)號(hào)
Screen.earmark=按鈕ID


圖三

  將TestPaper中的內(nèi)容經(jīng)過(guò)換行處理之后Copy到Screen結(jié)構(gòu)中,并設(shè)置好Screen.earmark,Screen.Color1, Screen.Color2。在主窗口消息循環(huán)的WM_PAINT消息中將Screen.Line顯示在窗口中:
      TextOut(hdc,x,cyhar*i,Screen.Line,strlen(Screen.Line));      
并檢查Screen.earmark中是否為零,不為零就:
      ShowWindow(hWndList[Sreen.earmark/10-1] [Screen.earmark%10-1],1);      

Screen.Color1, Screen.Color2是否為1,如果為1,則改變顏色顯示。

三、換行中存在的問(wèn)題
行寬=客戶區(qū)的象素寬/每個(gè)文字的寬度/2*2是偶數(shù);
漢字占用雙字節(jié),字母和標(biāo)點(diǎn)符號(hào)占用單字節(jié);
一行文字=字母+標(biāo)點(diǎn)+漢字 (有可能產(chǎn)生奇數(shù)寬);
當(dāng)一行文字產(chǎn)生一個(gè)奇數(shù)寬,最后一個(gè)字符又是漢字的時(shí),就會(huì)把這個(gè)漢字切成兩份,另一半會(huì)在下一行中顯示,這就造成了亂碼;
  我的解決辦法是在換行時(shí)增加一個(gè)變量HanChar=0,當(dāng)掃描到字母或是標(biāo)點(diǎn)時(shí),就HanChar++。一行文字掃描完后需要另起一行時(shí),判斷HanChar的奇偶性,當(dāng)為奇數(shù)時(shí)行寬往里縮進(jìn)一個(gè)字節(jié),以避免以上情況。

四、客戶端程序總結(jié)
  由于客戶端界面采用大量計(jì)算,顯示的內(nèi)容不會(huì)是固定的模式,他會(huì)根據(jù)題目的長(zhǎng)短變化作出相應(yīng)調(diào)整,以達(dá)到最好的顯示效果。
  當(dāng)用戶登陸驗(yàn)證成功之后,服務(wù)器會(huì)拋一個(gè)時(shí)間計(jì)數(shù),客戶端通過(guò)一個(gè)定時(shí)器,每隔1秒鐘將計(jì)數(shù)減1,并顯示倒計(jì)時(shí)在界面上,直到計(jì)數(shù)為0,表明考試結(jié)束,程序自動(dòng)保存數(shù)據(jù)退出。這樣做的好處是用戶更改客戶端的時(shí)間,不會(huì)影響程序的正常計(jì)時(shí)。
  客戶端每隔10秒鐘自動(dòng)保存一次數(shù)據(jù),以防突然死機(jī)之類的情況,死機(jī)后再次登陸,程序會(huì)自動(dòng)加載你先前保存的作答。但點(diǎn)擊“提交試卷”后就無(wú)法登陸了。

對(duì)例子程序的說(shuō)明
隨付的程序和源碼是我大型作業(yè)的作品,運(yùn)行時(shí)先運(yùn)行服務(wù)器程序,再運(yùn)行服務(wù)端程序.

  


帳號(hào):姚明
密碼:1981922

運(yùn)行之前請(qǐng)先調(diào)整數(shù)據(jù)庫(kù)的試卷信息表的開(kāi)考時(shí)間和結(jié)束時(shí)間。還要確保學(xué)生試卷成績(jī)表里面“姚明”那一行中試卷狀態(tài)為1。

 作者信息
姚明/Ym
郵箱:yaomingmail@sina.com
QQ:31547735
另外我不會(huì)打籃球 :-)

[代碼性質(zhì)] VC完整應(yīng)用程序代碼
[代碼作者] 姚明/Ym
[文件大小] 162K
[更新日期] 2004-1-17 19:43:00
[下載次數(shù)] 13112 下載

(END)

posted on 2007-10-26 00:43 姚明 閱讀(1642) 評(píng)論(3)  編輯 收藏 引用 所屬分類: Win32API

FeedBack:
# re: C/S模式考試程序制作詳解 2007-10-26 10:04 萬(wàn)連文
記得在大三的時(shí)候,轟轟烈烈的搞“產(chǎn)學(xué)研”,我也參加了這個(gè)咚咚,socket+ADO+MFC。現(xiàn)在幾乎都忘記什么樣的了,但是可以肯定的是沒(méi)有你這么細(xì)致。一共好幾人,可是寫代碼的.......。項(xiàng)目的400大洋,在結(jié)束之后就不知被誰(shuí)領(lǐng)走。真TMD有意思,當(dāng)時(shí)就是一個(gè)怕,怕數(shù)據(jù)庫(kù)連接壞了,怕界面復(fù)雜操縱不了,怕....。當(dāng)然,做的好的,不僅僅是只有選擇題,判斷、問(wèn)答、實(shí)驗(yàn)等等,就需要結(jié)合word、圖片、圖形繪制了,很復(fù)雜的。這樣看來(lái),用web的優(yōu)勢(shì)就大了。  回復(fù)  更多評(píng)論
  
# re: C/S模式考試程序制作詳解 2007-10-27 17:29 姚明
@萬(wàn)連文
VC做訂單沒(méi)優(yōu)勢(shì),很大的原因就是它的界面開(kāi)發(fā)速度慢,成本高!
VC做產(chǎn)品非常合適,特別是游戲或者大型行業(yè)應(yīng)用軟件!

不過(guò),不論怎樣,我已經(jīng)感覺(jué)不到編程的創(chuàng)造力,很多情況下,我都是把別人的代碼改改然后拿來(lái)用,如果沒(méi)有現(xiàn)成代碼,我就必須收集大量相關(guān)資料,大部分時(shí)間是閱讀代碼和查看資料,這個(gè)過(guò)程,我覺(jué)得沒(méi)有任何樂(lè)趣!
我思考我編程的初衷是怎樣的,現(xiàn)在的狀況似乎已經(jīng)脫離了當(dāng)初的想法,思考的結(jié)果,我發(fā)現(xiàn)編程只是一個(gè)工具,我平時(shí)看的資料只是這個(gè)工具的使用說(shuō)明書,真正的有創(chuàng)造性的工作是工具應(yīng)用的領(lǐng)域或者如何制造更好的工具的問(wèn)題上,做個(gè)比方,這個(gè)關(guān)系就像天文望遠(yuǎn)鏡和天文學(xué)的關(guān)系,計(jì)算機(jī)就像數(shù)學(xué)領(lǐng)域的天文望遠(yuǎn)鏡,工具而已,編程也就是使用這些工具的方法,使用工具能需要什么創(chuàng)造力?天文望遠(yuǎn)鏡的使用需要用大量的時(shí)間和精力研究嗎?會(huì)用就夠了,我應(yīng)該把精力放在天文學(xué)上或者如何制造看得更遠(yuǎn)更清晰的天文望遠(yuǎn)鏡上!當(dāng)然,這和每個(gè)人最終的目標(biāo)不同,天文望遠(yuǎn)鏡,也需要人來(lái)操縱不是,不能都去研究天文學(xué)和制造天文望遠(yuǎn)鏡,沒(méi)人提供觀察資料啊!呵呵  回復(fù)  更多評(píng)論
  
# re: C/S模式考試程序制作詳解 2007-11-03 12:19 Timothy
以前在vckbase看到過(guò)你這篇文章。
不錯(cuò),很詳細(xì)的。  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              亚洲综合激情| 美国十次成人| 免费高清在线视频一区·| 亚洲欧美日韩在线不卡| 亚洲免费影院| 久久视频一区| 91久久久国产精品| 日韩午夜在线观看视频| 一区二区三区产品免费精品久久75| 亚洲欧洲日本一区二区三区| 一区二区三区三区在线| 午夜精品影院| 欧美电影免费观看高清| 欧美午夜精彩| 一区免费观看| 亚洲一区二区在线| 美腿丝袜亚洲色图| 99精品国产在热久久婷婷| 亚洲欧美日韩国产| 欧美成人蜜桃| 国产伪娘ts一区| 亚洲精品黄网在线观看| 性做久久久久久久久| 欧美高清在线| 亚洲欧美综合另类中字| 欧美电影在线观看完整版| 国产欧美视频一区二区| 亚洲精品黄网在线观看| 久久精品综合| 一区二区av在线| 免费试看一区| 国产日韩亚洲欧美精品| 亚洲美女视频在线免费观看| 久久精品一区二区| 日韩一区二区精品视频| 午夜精品久久久久久久白皮肤| 欧美肥婆在线| 久久aⅴ国产紧身牛仔裤| 欧美精品一卡二卡| 亚洲国产另类久久精品| 久久久国产精彩视频美女艺术照福利 | 国产字幕视频一区二区| 中文国产成人精品久久一| 免费看黄裸体一级大秀欧美| 亚洲欧美日韩精品综合在线观看| 欧美精品二区| 亚洲国产精品日韩| 久久亚洲影院| 久久gogo国模啪啪人体图| 国产精品视频免费| 亚洲免费在线电影| 一本到高清视频免费精品| 欧美全黄视频| 日韩亚洲国产精品| 亚洲欧洲三级电影| 欧美成人免费va影院高清| 亚洲黄色天堂| 亚洲欧洲日本专区| 欧美黄在线观看| 99精品视频免费观看| 亚洲国产精品久久久久婷婷老年 | 国产精品免费网站| 亚洲一区自拍| 亚洲免费在线观看| 国产日韩欧美综合一区| 久久久久久久国产| 久久久久欧美精品| 亚洲国产精品一区二区三区| 欧美成在线观看| 欧美不卡视频一区| 亚洲美女91| 一本色道久久精品| 国产精品呻吟| 久色成人在线| 欧美激情亚洲| 亚洲欧美视频在线观看视频| 亚洲欧美激情视频在线观看一区二区三区| 国产精品久久久亚洲一区| 欧美在线视频免费| 久久综合一区| 正在播放欧美视频| 亚洲欧美日韩精品一区二区| 伊人男人综合视频网| 亚洲国产日韩欧美在线图片| 欧美午夜大胆人体| 久久尤物电影视频在线观看| 免费视频最近日韩| 午夜精品在线看| 玖玖综合伊人| 亚洲欧美春色| 久久综合图片| 欧美日韩mv| 久久精品一区二区三区不卡| 欧美ab在线视频| 亚洲欧美一区二区激情| 久久精品中文字幕一区二区三区| 最近中文字幕日韩精品 | 在线成人小视频| 日韩视频一区二区三区在线播放 | 亚洲欧美电影在线观看| 久久午夜视频| 欧美一区二区视频在线观看2020 | 亚洲美女中出| 激情小说另类小说亚洲欧美| 9人人澡人人爽人人精品| 黑人一区二区| 亚洲一区尤物| 一区二区三区日韩| 久久久综合免费视频| 亚洲欧美在线视频观看| 免费亚洲电影在线观看| 久久er精品视频| 欧美视频在线观看免费| 欧美激情在线观看| 国产日韩精品久久久| 一区二区久久久久久| 亚洲欧洲日本一区二区三区| 欧美伊人久久久久久午夜久久久久| 一本色道久久| 免费视频一区| 欧美成人黑人xx视频免费观看| 国产精品中文字幕欧美| a91a精品视频在线观看| 亚洲精品影视在线观看| 老鸭窝91久久精品色噜噜导演| 久久成人精品无人区| 国产精品扒开腿做爽爽爽视频 | 一区二区视频欧美| 亚洲欧美在线高清| 小黄鸭精品密入口导航| 欧美日韩亚洲一区二区三区在线 | 欧美国产日韩视频| 裸体女人亚洲精品一区| 国内精品视频在线观看| 欧美一区1区三区3区公司| 欧美一区二区三区视频免费播放| 国产精品久久毛片a| 亚洲香蕉在线观看| 香蕉精品999视频一区二区| 国产精品美女久久久浪潮软件| 99精品视频一区| 亚洲影院一区| 国产精品视频yy9299一区| 一级日韩一区在线观看| 国产女人精品视频| 亚洲欧美欧美一区二区三区| 欧美一区2区视频在线观看 | 美女视频黄 久久| 亚洲第一精品久久忘忧草社区| 亚洲黄色小视频| 欧美激情一区二区三级高清视频| 亚洲精品国产欧美| 一区二区三区日韩| 国产精品久久久久久久第一福利 | 一本色道久久88亚洲综合88| 欧美日韩国产麻豆| 亚洲一区三区电影在线观看| 久久久www成人免费无遮挡大片| 国模大胆一区二区三区| 狂野欧美激情性xxxx| 亚洲精品免费在线| 香蕉久久夜色精品国产| 精品成人a区在线观看| 欧美jizz19性欧美| 亚洲网站在线| 嫩草影视亚洲| 亚洲视频一区二区| 黑人一区二区| 欧美午夜精品理论片a级大开眼界 欧美午夜精品理论片a级按摩 | 亚洲麻豆一区| 国产日韩在线亚洲字幕中文| 美女爽到呻吟久久久久| 中文一区在线| 亚洲成色最大综合在线| 亚洲欧美成人网| 亚洲电影自拍| 国产女优一区| 欧美日韩精品一区二区三区四区| 欧美一区二区免费| 亚洲人成人77777线观看| 久久精品2019中文字幕| 亚洲毛片在线观看.| 国外成人网址| 国产精品入口夜色视频大尺度| 裸体歌舞表演一区二区| 亚洲欧美激情视频| 日韩系列在线| 亚洲国产精品一区二区第四页av | 一区二区三区久久网| 国产一区二区三区在线播放免费观看| 欧美黄色aa电影| 久久久精品午夜少妇| 亚洲一区二区三区在线观看视频 | 久久精品国产96久久久香蕉| 亚洲精品在线观看免费| 欧美大片在线观看| 久久久久天天天天| 欧美一区二区三区在线观看视频| 99在线热播精品免费99热| 1024成人网色www|