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


姚明,81年,97年開始接觸電腦,6年的編程學習經歷, 曾有4年工作經驗,最終轉向基礎理論學習和研究, 現華中理工科技大學在讀,有志于圖形學領域工作發展

EMAIL:alanvincentmail@gmail.com QQ:31547735

隨筆分類(34)

文章分類(99)

相冊

收藏夾(6)

編程技術網站

出國留學網站

數學資源網站

圖形學網站

英語資源網站

自由職業者

搜索

  •  

最新評論

[ 原創文檔 本文適合高級讀者 已閱讀19451次 ]  

大型作業答辯:C/S考試系統程序制作詳解


作者:姚明

下載源代碼


程序組成結構

一、服務器程序

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

用Win32 API函數構造主窗體和界面元素,如圖一所示:


圖一 程序組織結構

服務器程序詳解

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

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


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

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

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


圖三

  將TestPaper中的內容經過換行處理之后Copy到Screen結構中,并設置好Screen.earmark,Screen.Color1, Screen.Color2。在主窗口消息循環的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,則改變顏色顯示。

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

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

對例子程序的說明
隨付的程序和源碼是我大型作業的作品,運行時先運行服務器程序,再運行服務端程序.

  


帳號:姚明
密碼:1981922

運行之前請先調整數據庫的試卷信息表的開考時間和結束時間。還要確保學生試卷成績表里面“姚明”那一行中試卷狀態為1。

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

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

(END)

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

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

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

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   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>
              免费一区二区三区| 另类春色校园亚洲| 欧美日韩影院| 欧美日韩亚洲综合一区| 欧美日韩免费观看一区=区三区| 欧美精品亚洲| 国产精品盗摄久久久| 国产九九视频一区二区三区| 韩国精品久久久999| 午夜精品在线观看| 一二三四社区欧美黄| 亚洲国产欧美一区二区三区同亚洲| 午夜欧美不卡精品aaaaa| 久久激情网站| 亚洲欧美日韩中文在线制服| 久久久www成人免费毛片麻豆| 久久一二三区| 国产精品青草综合久久久久99| 国产日产欧美一区| 91久久久久久| 午夜精品理论片| 欧美高清在线视频观看不卡| 亚洲欧洲在线一区| 亚洲欧美视频| 欧美精品久久天天躁| 久久亚洲一区二区| 免费在线观看一区二区| 亚洲精品乱码久久久久久蜜桃麻豆 | 在线观看国产欧美| 亚洲午夜av| 欧美jjzz| 欧美一区二区三区免费大片| 国产精品美女一区二区在线观看| 欧美日韩国语| 精品成人在线视频| 亚洲一区二区三区四区在线观看 | 国产精品日韩精品欧美在线| 在线不卡a资源高清| 欧美在线播放一区| 日韩西西人体444www| 亚洲久久视频| 亚洲第一在线| 亚洲欧美日本国产专区一区| 欧美精品一区二区高清在线观看| 欧美一级片在线播放| 欧美激情亚洲激情| 在线精品国产欧美| 欧美日韩综合网| 国产日本欧美一区二区三区| 在线观看日韩av先锋影音电影院| 亚洲一区二区在| 亚洲欧洲精品一区二区三区不卡 | 亚洲丶国产丶欧美一区二区三区 | 午夜精品久久| 国产精品久久影院| 亚洲主播在线播放| 99精品欧美一区二区蜜桃免费| 欧美成人a∨高清免费观看| 亚洲精品视频二区| 欧美黑人一区二区三区| 国产精品人人做人人爽人人添 | 欧美激情一区二区三区| 一区二区三区中文在线观看| 欧美一级片在线播放| 亚洲全部视频| 欧美日韩国产免费| 亚洲一区二区精品视频| 亚洲天堂av在线免费观看| 国产女人水真多18毛片18精品视频| 一本高清dvd不卡在线观看| 91久久精品日日躁夜夜躁欧美 | 欧美猛交免费看| aaa亚洲精品一二三区| 亚洲精品日韩综合观看成人91| 欧美成人免费在线| 在线视频亚洲一区| 亚洲综合电影| 精久久久久久久久久久| 欧美激情一区二区三区全黄| 欧美黑人在线播放| 亚洲一区亚洲二区| 欧美一区二区在线观看| 亚洲高清毛片| 亚洲特黄一级片| 精品9999| 一区二区三区四区在线| 国产字幕视频一区二区| 亚洲高清久久久| 国产精品观看| 女女同性女同一区二区三区91| 欧美乱大交xxxxx| 欧美影院成人| 欧美激情一区三区| 欧美影院精品一区| 欧美日本亚洲韩国国产| 久久久噜噜噜久久人人看| 欧美顶级少妇做爰| 久久久久久国产精品mv| 欧美人与性动交α欧美精品济南到| 欧美一区免费视频| 欧美美女福利视频| 欧美成人国产va精品日本一级| 欧美日韩一区二| 免费试看一区| 国产日韩欧美一区二区| 亚洲激情在线观看| 在线成人中文字幕| 欧美在线播放| 午夜欧美不卡精品aaaaa| 欧美成人四级电影| 久久全球大尺度高清视频| 欧美视频一区二区| 亚洲国产欧美日韩精品| 黄色综合网站| 亚洲女与黑人做爰| 一区二区三区精品久久久| 另类春色校园亚洲| 久久久久久久一区二区三区| 欧美视频在线一区| 亚洲三级观看| 日韩一级在线观看| 欧美大片免费观看| 美女爽到呻吟久久久久| 国产视频一区在线| 亚洲欧美在线x视频| 亚洲女优在线| 国产精品v欧美精品v日韩| 亚洲毛片在线看| 在线一区二区三区四区| 欧美黄色网络| 亚洲免费观看在线观看| 国产农村妇女精品| 欧美日韩精品欧美日韩精品一| 美女精品国产| 一区二区三区在线不卡| 欧美伊人精品成人久久综合97| 午夜视频一区在线观看| 国产精品捆绑调教| 亚洲综合色激情五月| 欧美亚洲一区二区在线| 国产精品美女www爽爽爽| 制服丝袜激情欧洲亚洲| 午夜电影亚洲| 国产视频一区欧美| 久久久精品一品道一区| 免费不卡在线视频| 亚洲日本精品国产第一区| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲成色999久久网站| 亚洲国内欧美| 欧美人成网站| 亚洲一二三区在线观看| 午夜亚洲性色视频| 韩国视频理论视频久久| 麻豆久久婷婷| 99视频精品全部免费在线| 欧美一级播放| 亚洲国产合集| 欧美日韩ab| 香蕉久久精品日日躁夜夜躁| 久久躁狠狠躁夜夜爽| 亚洲国产成人精品久久| 欧美精品激情在线| 午夜在线a亚洲v天堂网2018| 欧美99久久| 亚洲一区美女视频在线观看免费| 国产精品稀缺呦系列在线| 久久亚洲视频| 亚洲一区国产一区| 亚洲第一区在线观看| 小处雏高清一区二区三区| 亚洲第一二三四五区| 欧美香蕉视频| 麻豆久久精品| 香蕉久久国产| 一卡二卡3卡四卡高清精品视频| 欧美伊人久久久久久午夜久久久久| 在线观看一区| 国产精品久久久久久久一区探花| 久久精品国产77777蜜臀| 99日韩精品| 亚洲第一精品在线| 久久久久国产精品人| 亚洲午夜精品一区二区| 亚洲国产成人午夜在线一区| 国产精品亚洲网站| 欧美日韩福利| 久久在线免费观看视频| 亚洲一区图片| 亚洲精品一区在线观看香蕉| 久久久久国产精品午夜一区| 亚洲制服欧美中文字幕中文字幕| 黄色精品一区| 国产日韩欧美精品| 国产精品激情av在线播放| 欧美激情精品久久久久久大尺度 | 亚洲激精日韩激精欧美精品| 国产三区精品| 欧美午夜电影网| 欧美剧在线免费观看网站|