【程序設(shè)計(jì)基本結(jié)構(gòu)探析與演示11000字(論文)】_第1頁
【程序設(shè)計(jì)基本結(jié)構(gòu)探析與演示11000字(論文)】_第2頁
【程序設(shè)計(jì)基本結(jié)構(gòu)探析與演示11000字(論文)】_第3頁
【程序設(shè)計(jì)基本結(jié)構(gòu)探析與演示11000字(論文)】_第4頁
【程序設(shè)計(jì)基本結(jié)構(gòu)探析與演示11000字(論文)】_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGE24程序設(shè)計(jì)基本結(jié)構(gòu)分析與演示目錄第1章 引言 6第2章 C語言編程簡介 72.1C語言 72.2C語言編程標(biāo)準(zhǔn) 72.3C語言編程的工作模式 8第三章C語言程序總體設(shè)計(jì) 113.1程序設(shè)計(jì)架構(gòu) 113.2總體設(shè)計(jì)思路 13第四章程序設(shè)計(jì)結(jié)構(gòu)分析及相關(guān)技術(shù) 154.1開發(fā)環(huán)境 154.2C語言特點(diǎn) 164.3FLASH簡介 164.3.1概述 164.3.2配置 174.4程序設(shè)計(jì)結(jié)構(gòu)框架簡介 184.4.1順序結(jié)構(gòu) 184.4.2重要函數(shù)的設(shè)計(jì) 184.4.3循環(huán)結(jié)構(gòu) 19第5章各模塊功能具體演示 205.1各模塊功能介紹 205.2系統(tǒng)框架 205.3窗口模塊 22第6章結(jié)束語 23主要參考文獻(xiàn) 24引言20世紀(jì)80年代初期,人們開始進(jìn)行新程序設(shè)計(jì)方法探索,一種新的程序設(shè)計(jì)方法面向?qū)ο蟪绦蛟O(shè)計(jì)方法因此而產(chǎn)生。隨著計(jì)算機(jī)網(wǎng)絡(luò)急速的發(fā)展和生活水平不斷,人們對(duì)計(jì)算機(jī)的頂層設(shè)計(jì)要求更高,說到計(jì)算機(jī)頂層設(shè)計(jì)我們首先想到的就是計(jì)算機(jī)語言。計(jì)算機(jī)語言有很多種,其中應(yīng)用最廣泛的就是C語言C語言是一種結(jié)構(gòu)化程序設(shè)計(jì)語言,它主要提出了三種基本控制結(jié)構(gòu),分別是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)三種基本結(jié)構(gòu)。因?yàn)檫@三種基本結(jié)構(gòu)可以解決任何編程方面復(fù)雜的問題,和利用這三種基本結(jié)構(gòu)編寫出的程序清晰可讀又便于理解。在構(gòu)造算法時(shí),也僅以這三種基本結(jié)構(gòu)作為基本單元,因?yàn)樗Y(jié)構(gòu)清晰,易于驗(yàn)證和糾錯(cuò)。所以人們都提倡使用這3種結(jié)構(gòu)編程寫程序,并稱這樣的程序設(shè)計(jì)結(jié)構(gòu)為結(jié)構(gòu)化的程序設(shè)計(jì)結(jié)構(gòu)。1996年,計(jì)算機(jī)科學(xué)家Bohm和Jacopini證明了這樣的事實(shí):任何簡單或者復(fù)雜的算法都可以由順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)這三種基本結(jié)構(gòu)組成。所以,這三種結(jié)構(gòu)就被稱為程序設(shè)計(jì)的三種基本結(jié)構(gòu)。采用結(jié)構(gòu)化程序不會(huì)出現(xiàn)死循環(huán)。在程序的靜態(tài)形式與動(dòng)態(tài)執(zhí)行流程之間具有良好的對(duì)應(yīng)關(guān)系。通過對(duì)結(jié)構(gòu)化程序設(shè)計(jì)案例的分析,掌握從系統(tǒng)結(jié)構(gòu)到各個(gè)模塊、各個(gè)函數(shù)的設(shè)計(jì)和實(shí)現(xiàn)手段,并進(jìn)一步規(guī)范編程方法,使程序設(shè)計(jì)者有章可循,可提高編程效率。實(shí)際軟件產(chǎn)品的開發(fā)中,更多的追求軟件的可讀性和可修改性,所以很多從事軟件開發(fā)的工作者都會(huì)利用這三種基本結(jié)構(gòu)編程中的可讀性、可理解性、可靠性和可修改性,并且易于查找錯(cuò)誤和維護(hù)的特點(diǎn),使用它來編程開發(fā)軟件。所以學(xué)習(xí)軟件編程的學(xué)習(xí)者來說學(xué)習(xí)程序設(shè)計(jì)結(jié)構(gòu)是重中之重。C語言編程簡介2.1C語言C語言對(duì)于信息技術(shù)的發(fā)展具有十分重要的作用和價(jià)值。C語言是符合現(xiàn)代編程風(fēng)格的一種高級(jí)程序設(shè)計(jì)語言,適用于模塊化程序設(shè)計(jì),層次十分清晰,易于調(diào)試和維護(hù)。由于C語言編程簡潔、緊湊、可移植性好和功能強(qiáng)大等特點(diǎn),得到了廣泛的應(yīng)用,它成為了目前軟件開發(fā)的最常用的軟件之一。我國的大多數(shù)計(jì)算機(jī)等級(jí)考試常采用C語言作為程序設(shè)計(jì)工具。C語言編寫比較靈活,但語法限制不嚴(yán)[1],對(duì)初學(xué)者來說容易出錯(cuò),尤其是指針問題。如指針運(yùn)用恰當(dāng),編出的程序不但精練、可讀性強(qiáng),而且運(yùn)行效率高;反之,程序變得瑣碎、效率差,在調(diào)試過程中,指針引起的問題最多也最不容易解決。文中羅列了編寫C語言中出現(xiàn)的幾個(gè)常見問題,并將它們進(jìn)行分析和說明,以便編程者在碰到同類問題時(shí)有所借鑒。C語言既有高級(jí)語言的特點(diǎn),又具有匯編語言的特點(diǎn);既是一個(gè)成功的系統(tǒng)設(shè)計(jì)語言,又是一個(gè)實(shí)用的程序設(shè)計(jì)語言;既能用來編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序,又能用來編寫各種系統(tǒng)程序;是一種受歡迎、應(yīng)用廣泛的程序設(shè)計(jì)語言。C語言雖然具備了很多的優(yōu)點(diǎn),然而也存在著一些不足和弱點(diǎn)。如運(yùn)算優(yōu)先級(jí)太多,不便于記憶;類型檢驗(yàn)太弱,雖然轉(zhuǎn)換比較方便,但同時(shí)也增加了程序的不安全因素[5]。并且C語言還存在著三個(gè)大的不安全因素:緩沖區(qū)溢出,C語言的庫函數(shù),系統(tǒng)調(diào)用。這些不安全因素的存在必然會(huì)使得利用C語言編寫的程序或系統(tǒng)存在一定的安全漏洞。如果我們不能深入的對(duì)這些不安全因素進(jìn)行分析與了解,那我們的程序就很容易處于不安全的境地,甚至可能導(dǎo)致嚴(yán)重的后果。2.2C語言編程標(biāo)準(zhǔn)1.靈活運(yùn)用指針在C語言編程的時(shí)候,指針是一種特殊類型的變量,它能夠幫助程序員有效的表達(dá)和解決程序設(shè)計(jì)過程中遇到的復(fù)雜問題,熟練掌握指針是必要的。指針具有三要素:指針名以及指針類型和值。在編程時(shí),指針和一般變量名相同,但是在類型以及值上具有區(qū)別,另外,指針不僅能夠被用于表示數(shù)組,還可以被作為函數(shù)的參數(shù)返回值。2.C語言的特有函數(shù)在C語言編程的時(shí)候,有時(shí)需要用到一些特有函數(shù)。函數(shù)都具有一定的功能,同時(shí)函數(shù)名也反映了該函數(shù)的功能。在進(jìn)行函數(shù)定義時(shí),程序員需要把函數(shù)的名字、返回值類型以及參數(shù)名等各項(xiàng)都進(jìn)行定義。另外,因?yàn)閹旌瘮?shù)是由C編譯系統(tǒng)提供的,這些函數(shù)均是系統(tǒng)首先定義好的,在程序調(diào)用的時(shí)候,程序員只需利用“#INCLUDE指令”把與之相關(guān)的頭文件包含到所用文件中即可[[4]。例如,在程序運(yùn)行的過程中,如果用到了SQRT函數(shù),則為了保證程序運(yùn)行下去,頭文件必須含有#INCLUDE"STRING.H"。3.算法技巧在程序設(shè)計(jì)的過程中,算法是程序的靈魂,因此,掌握一定的算法技巧是必不可少的。通常情況下,算法不僅可以用自然語言表示,有的時(shí)候也利用流程圖表示。需要注意的是,利用流程圖表示算法時(shí),程序設(shè)計(jì)員必須熟練掌握常用的流程圖符號(hào)。且“數(shù)學(xué)乃是計(jì)算機(jī)之母”,牢固的數(shù)學(xué)知識(shí)同樣能夠提升編程效率。4.位運(yùn)算以及文件知識(shí)相比其他計(jì)算機(jī)高級(jí)語言的運(yùn)算方法,位運(yùn)算作為C語言的重要特色,具有獨(dú)特性和唯一性。位運(yùn)算是以二進(jìn)制位為對(duì)象,然后結(jié)合相關(guān)程序要求進(jìn)行各種運(yùn)算。文件包含有數(shù)據(jù)文件以及程序文件,是計(jì)算機(jī)不可缺少的,程序設(shè)計(jì)員在進(jìn)行編程時(shí),需要把所寫的程序存儲(chǔ)的文件之中,這樣可以便于程序員查找數(shù)據(jù),提升查找效率。2.3C語言編程的工作模式在計(jì)算機(jī)軟件編程試驗(yàn)之中,利用C語言進(jìn)行循環(huán)冗余校驗(yàn)碼的實(shí)驗(yàn)程序設(shè)計(jì)流程如下:程序的函數(shù)名稱:POLYDIV;函數(shù)原型位置:CRC.H;數(shù)據(jù)庫:CRC.LIB;然后程序員在利用C語言進(jìn)行函數(shù)計(jì)算設(shè)計(jì)時(shí),程序會(huì)自動(dòng)產(chǎn)生一個(gè)余數(shù),并把其存放在REMAINDER文件之中。另外,程序的頭文件為SIODEFH在編寫C語言代碼時(shí),在系統(tǒng)調(diào)用方面也特別的需要注意,一般有兩方面的安全問題,在寫程序時(shí)必須考慮:(1)確保自己建立的任何臨時(shí)文件不含有機(jī)密數(shù)據(jù),如果有機(jī)密數(shù)據(jù),設(shè)置臨時(shí)文件僅對(duì)自己可讀/寫,確保建立臨時(shí)文件的目錄僅對(duì)自己可寫。(2)確保自己要運(yùn)行的任何命令(通過SYSTEM(),POPEN(),EXECLP(),EXECVP()運(yùn)行的命令)的確是自己要運(yùn)行的命令,而不是其它什么命令,尤其是自己的程序?yàn)镾UID或SGID許可時(shí)要小心。第一方面比較簡單,在程序開始前調(diào)用UMASK(077),若要使文件對(duì)其他人可讀,可再調(diào)用CHMOD(),也可用下述語名建立一個(gè)"不可見"的臨時(shí)文件。CREAT("/TMP/XXX",0);FILE=OPEN("/TMP/XXX",O_RDWR);UNLINK("/TMP/XXX");文件/TMP/XXX建立后,打開,然后斷開鏈,但是分配給該文件的存儲(chǔ)器并未刪除,直到最終指向該文件的文件通道被關(guān)閉時(shí)才被刪除。打開該文件的進(jìn)程和它的任何子進(jìn)程都可存取這個(gè)臨時(shí)文件,而其它進(jìn)程不能存取該文件,因?yàn)樗?TMP中的目錄項(xiàng)已被UNLINK()刪除。第二方面比較復(fù)雜而微妙,由于SYSTEM(),POPEN(),EXECLP(),EXECVP()執(zhí)行時(shí),若不給出執(zhí)行命令的全路徑,就能"騙"用戶的程序去執(zhí)行不同的命令。因?yàn)橄到y(tǒng)子程序是根據(jù)PATH變量確定哪種順序、搜索哪些目錄,以尋找指定的命令,這稱為SUID陷阱。最安全的辦法是在調(diào)用SYSTEM()前將有效UID改變成實(shí)際UID,另一種比較好的方法是以全路徑名命令作為參數(shù)EXECL(),EXECV(),EXECLE(),EXECVE()都要求全路徑名作為參數(shù)。有關(guān)SUID陷阱的另一方式是在程序中設(shè)置PATH,由于SYSTEM()和POPEN()都啟動(dòng)SHELL,故可使用SHELL句法.如:SYSTEM("PATH=/BIN:/USR/BINCD");這樣允許用戶運(yùn)行系統(tǒng)命令而不必知道要執(zhí)行的命令在哪個(gè)目錄中,但這種方法不能用于EXECLP(),EXECVP()中,因?yàn)樗鼈儾荒軉?dòng)SHELL執(zhí)行調(diào)用序列傳遞的命令字符串。關(guān)于SHELL解釋傳遞給SYSTEM()和POPEN()的命令行的方式,還有其它的問題:*SHELL使用IFSSHELL變量中的字符,將命令行分解成單詞(通常這個(gè)SHELL變量中是空格,TAB,換行),如IFS中是/,字符串/BIN/ED被解釋成單詞BIN,接下來是單詞ED,從而引起命令行的曲解。SUID/SGID程序指導(dǎo)準(zhǔn)則(1)不要寫SUID/SGID程序,大多數(shù)時(shí)候無此必要(2)設(shè)置SGID許可,不要設(shè)置SUID許可.應(yīng)獨(dú)自建立一個(gè)新的小組(3)不要用EXEC()執(zhí)行任何程序.記住EXEC()也被SYSTEM()和POPEN()調(diào)用.若要調(diào)用EXEC()(或SYSTEM(),POPEN()),應(yīng)事先用SETGID(GETGID())將有效GID置加實(shí)際GID;若不能用SETGID(),則調(diào)用SYSTEM()或POPEN()時(shí),應(yīng)設(shè)置IFS:POPEN("IFS=\T\N;EXPORTIFS;/BIN/LS","R");.使用要執(zhí)行的命令的全路徑名;.若不能使用全路徑名,則應(yīng)在命令前先設(shè)置PATH:POPEN("IFS=\T\N;EXPORTIFS;PATH=/BIN:/USR/BIN;/BIN/LS","R");.不要將用戶規(guī)定的參數(shù)傳給SYSTEM()或POPEN();若無法避免則應(yīng)檢查變?cè)址惺欠裼刑厥獾腟HELL字符;.若用戶有個(gè)大程序,調(diào)用EXEC()執(zhí)行許多其它程序,這種情況下不要將大程序設(shè)置為SGID許可??梢詫懸粋€(gè)(或多個(gè))更小,更簡單的SGID程序執(zhí)行必須具有SGID許可的任務(wù),然后由大程序執(zhí)行這些小SGID程序;(4)若用戶必須使用SUID而不是SGID,以相同的順序記住(2),(3)項(xiàng)內(nèi)容,并相應(yīng)調(diào)整,不要設(shè)置ROOT的SUID許可,選一個(gè)其它戶頭;(5)若用戶想給予其他人執(zhí)行自己的SHELL程序的許可,但又不想讓他們能讀該程序,可將程序設(shè)置為僅執(zhí)行許可,并只能通過自己的SHELL程序來運(yùn)行。第三章C語言程序總體設(shè)計(jì)3.1程序設(shè)計(jì)架構(gòu)以用戶登陸模塊程序設(shè)計(jì)為例:用戶登陸模塊執(zhí)行流程圖:圖一:用戶登陸模塊執(zhí)行流程圖用戶要登錄該網(wǎng)站時(shí),輸入用戶名和密碼后,選擇登錄的身份(管理員登錄或?qū)W生登錄),按登錄安鈕后defaulf.aspx執(zhí)行文件,把數(shù)據(jù)傳輸?shù)綌?shù)據(jù)庫guanliyuan表或student表中,核對(duì)用戶名與密碼,如果數(shù)據(jù)庫中沒有相對(duì)應(yīng)的用戶名和密碼,則輸出此用戶名不存在,或者輸出密碼錯(cuò)誤。如果用戶沒有輸入用戶名和密碼,則輸出用戶名和密碼不能為空。如果輸入正確的用戶名和密碼則成功登錄。選擇管理員或?qū)W生的身份登錄分別登錄到管理員配置界面或?qū)W生配置界面。執(zhí)行文件分別為tianjia.aspx.kaoshi.axpx。登陸界面如下圖:圖二:網(wǎng)站登錄界面這里特別要強(qiáng)調(diào)的一點(diǎn)是:本系統(tǒng)管理員和學(xué)生合用同一個(gè)登錄界面,不同的是分別按下管理員登錄和學(xué)生登錄按鈕后調(diào)用不同的表信息,分別為student表和guanliyuan表。功能實(shí)現(xiàn)的代碼如下:publicpartialclass_Default:System.Web.UI.Page{protectedvoidPage_Load(objectsender,EventArgse){}protectedvoidButton1_Click(objectsender,EventArgse){//數(shù)據(jù)庫連接stringconnsql=System.Configuration.ConfigurationManager.AppSettings["EXAMConnectionString"];SqlConnectionconn=newSqlConnection(connsql);conn.Open();stringstrSQL="selectcount(*)fromstudentwherexuehao='"+TextBox1.Text+"'andmima='"+TextBox2.Text+"'";SqlCommandcom=newSqlCommand(strSQL,conn);intcount1=Convert.ToInt32(com.ExecuteScalar());if(count1>0){Page.Response.Redirect("kaoshi.aspx");Session["xuehao"]=TextBox1.Text;}else{Response.Write("<Scriptlanguage=javascript>alert('用戶名或密碼有誤');location='javascript:history.go(-1)'</script>");}conn.Close();}protectedvoidButton2_Click(objectsender,EventArgse){stringconnsql=System.Configuration.ConfigurationManager.AppSettings["EXAMConnectionString"];SqlConnectionconn=newSqlConnection(connsql);conn.Open();stringstrSQL="selectcount(*)fromguanliyuanwherezhanghao='"+TextBox1.Text+"'andmima='"+TextBox2.Text+"'";SqlCommandcom=newSqlCommand(strSQL,conn);intcount1=Convert.ToInt32(com.ExecuteScalar());if(count1>0){Page.Response.Redirect("tianjia.aspx");Session["zhanghao"]=TextBox1.Text;}else{Response.Write("<Scriptlanguage=javascript>alert('用戶名或密碼有誤');location='javascript:history.go(-1)'</script>");}conn.Close();}}管理員登錄后,默認(rèn)就到了試題添加頁面,在該模塊中實(shí)現(xiàn)管理員根據(jù)需要添加不同類型的試題。有選擇題、判斷題和填空題3個(gè)題型。在該模塊設(shè)計(jì)中主要運(yùn)用了一個(gè)DropDownList和3個(gè)Panel控件,用不同題型的不同value值來控制3個(gè)Panel的顯示或不顯示情況。3.2總體設(shè)計(jì)思路針對(duì)一般練習(xí)網(wǎng)站的需求,設(shè)計(jì)如下所示的數(shù)據(jù)項(xiàng)和數(shù)據(jù)結(jié)構(gòu):1、用戶信息,包括兩類用戶,學(xué)生與管理員:用戶名的編號(hào)、用戶名、用戶的密碼,區(qū)分學(xué)生與管理員。2、題庫信息,本試題庫有單項(xiàng)選擇題、判斷題和填空題等題型,其中單項(xiàng)選擇題、判斷題共用一張shiti表,用leixing來區(qū)分。填空題獨(dú)立存儲(chǔ)在tiankongti表中。本系統(tǒng)建立了一個(gè)穩(wěn)定的后臺(tái)數(shù)據(jù)庫系統(tǒng),通過該數(shù)據(jù)庫管理整個(gè)考試系統(tǒng)所需的信息(用戶信息、試題信息、考試信息等)。C語言和匯編語言混合的程序設(shè)計(jì)案例分析:1.混合的軟件編程方法隨著信息技術(shù)的不斷發(fā)展和應(yīng)用,在軟件開發(fā)過程中,大多時(shí)候需要使用兩種語言混合編程,有效地提高了程序的開發(fā)效率。通常情況下,混合的軟件編程方法有兩種,具體如下:把匯編語句嵌入C語言程序中。例如,把ASM匯編語句嵌入到C語言源程序中:ASMMOVAX,5/*把5送到AX寄存器*/當(dāng)把一組匯編語句嵌入到C語言源程序中,則需要利用大括號(hào)把嵌入程序給括起來:在本次的實(shí)驗(yàn)之中,在進(jìn)行程序嵌入時(shí),有其固定的格式,需要在嵌入的各行代碼之前加“ASM”關(guān)鍵字,也可以直接在ASM代碼塊中放入?yún)R編語句。但是程序設(shè)計(jì)者在進(jìn)行嵌入時(shí),一定要注意滿足以下條件:匯編語言指令代碼中關(guān)鍵字ASM必不可少,且要放在指令代碼之前;嵌入?yún)R編語言指令代碼能夠和正常C語言程序混合,但是C語言的分隔符“;”必不可少;嵌入?yún)R編語言時(shí)C語言的注釋分界符必不可少,分別是“/*,,和“*/,,首先編寫C語言程序以及匯編程序,然后獨(dú)立編譯目標(biāo)代碼模塊,最終進(jìn)行鏈接。首先,在進(jìn)行混合編程時(shí),C語言程序能夠調(diào)用匯編語言的各種子程序以及其定義的變量,同時(shí),C語言編寫的函數(shù)以及定義的變量等也可以被匯編語言調(diào)用。而且混合編程的過程中,一個(gè)任務(wù)往往是由若干個(gè)功能模塊組成,且不同的功能模塊均是利用合適的語言進(jìn)行獨(dú)立編程,且以函數(shù)的形式存在。因此,程序設(shè)計(jì)者要根據(jù)每一模塊的特點(diǎn)選擇相應(yīng)的語言和語言編程系統(tǒng)進(jìn)行獨(dú)立編程,并形成目標(biāo)文件,繼而連接目標(biāo)文件,形成完整的可執(zhí)行文件。在混合編程的過程中,設(shè)計(jì)者需要注意五個(gè)問題:參數(shù)傳遞問題;寄存器的使用問題;存儲(chǔ)模式;變量以及函數(shù)的調(diào)用問題;子程序的返回值問題。其中,關(guān)于參數(shù)傳遞問題,在進(jìn)行C語言程序調(diào)用匯編程序時(shí),必須遵從參數(shù)傳遞原則,利用堆棧把參數(shù)傳遞給匯編程序。例如,在C語言程序中含有函數(shù):VOIDAA(CHAR`P,INTI),這個(gè)函數(shù)是利用匯編語言進(jìn)行編寫的,如果編譯是在小內(nèi)存模式下實(shí)施的,系統(tǒng)在進(jìn)行調(diào)用時(shí),則寫成AA(&Q,N);運(yùn)行時(shí)程序首先把N壓入堆棧,然后再把&Q壓入堆棧,當(dāng)參數(shù)傳遞過來并被匯編語言的子程序取得時(shí),日戶寄存器便被用作基地址寄存器,實(shí)現(xiàn)對(duì)棧中所存數(shù)據(jù)進(jìn)行存取操作。通常情況下,由于調(diào)用的子程序和C語言程序往往使用同一個(gè)堆棧,所以在程序執(zhí)行時(shí),匯編語言子程序需要執(zhí)行兩條指令:PUSHBYPOPBP,SP[']O2.混合的軟件編程實(shí)例分析程序的主要功能是在5個(gè)數(shù)中尋找最小數(shù),有主程序"MIN.C”以及匯編子程序“QIUMIN.ASM”這兩個(gè)部分組成。其中主程序是利用C語言編寫,匯編子程序是利用匯編語言編寫,被主程序調(diào)用,主要用于完成尋找最小數(shù)。程序代碼如下:利用C語言和匯編語言混合的編程方法,能夠?qū)崿F(xiàn)應(yīng)用程序局部滿足高運(yùn)行速度的要求,但是在具體的運(yùn)用之中,程序設(shè)計(jì)者仍需要注意寄存器分配以及內(nèi)存模式等因素對(duì)于程序的影響;且在運(yùn)行時(shí),因?yàn)槌绦蛟O(shè)計(jì)語言之間存在相互調(diào)用的外部接口,故可以實(shí)現(xiàn)外部調(diào)用。第四章程序設(shè)計(jì)結(jié)構(gòu)分析及相關(guān)技術(shù)4.1開發(fā)環(huán)境STL的全稱是StandardTemplatesLibrary(標(biāo)準(zhǔn)模板庫)。由ISO(國際標(biāo)準(zhǔn)化組織)經(jīng)過9年時(shí)間(1989~1998)的標(biāo)準(zhǔn)化過程所提出,其全部成果是一個(gè)750頁的文檔(文檔名:ISOIEC14882-1998)。它把C++語言標(biāo)準(zhǔn)化了,并且有了STL這樣一個(gè)可擴(kuò)展的鏈接庫。STL是將容器,算法相分離,通過迭代起操作。簡而言之,將日志文件的內(nèi)容放在標(biāo)準(zhǔn)的容器中進(jìn)行分析,會(huì)減少程序的編寫難度,使程序變得高效、易讀、易維護(hù)。在該課題的開發(fā)中用到不少標(biāo)準(zhǔn)模板庫中的函數(shù),對(duì)開發(fā)起到的作用是很大的。這個(gè)也是前人的開發(fā)經(jīng)驗(yàn)的總結(jié)和積累,也是近幾年來原代碼開源的表現(xiàn)之一。CDataStructCDataStruct//單個(gè)檔的內(nèi)容-vector<CString>m_vecContext;//切分后右邊視圖的單個(gè)檔內(nèi)容-vector<CString>m_vecContextR;//被抽出的行號(hào)-vector<int>m_vecRowNumber;//是否需要被保存BOOLm_bFlag;//是否已經(jīng)被抽出BOOLm_bExtracted;//是否已經(jīng)被保存BOOLm_bIsSaved;圖三:數(shù)據(jù)存放順序圖由于對(duì)檔內(nèi)的分析動(dòng)作較多,因此將文件的內(nèi)容讀入內(nèi)存來處理時(shí)效率較高。又因?yàn)橐獙?shí)現(xiàn)多個(gè)檔的打開,而且打開的檔數(shù)目沒有限制,因此總體上來說需要兩層的標(biāo)準(zhǔn)容器來存放。對(duì)于每一個(gè)檔,將它們的內(nèi)容放在一個(gè)標(biāo)準(zhǔn)容器std::vector<CString>中,為了實(shí)現(xiàn)抽出功能,還有一個(gè)容器std::vector<int>來存放被抽出的行號(hào),為了實(shí)現(xiàn)比較功能,又定義另一個(gè)std::vector<CString>容器來存放右邊視圖的當(dāng)前檔的內(nèi)容,再加上一些是否被保存、是否被抽出的布爾型標(biāo)記,組成一個(gè)基本的數(shù)據(jù)結(jié)構(gòu)類的數(shù)據(jù)成員,而整個(gè)底層的數(shù)據(jù)結(jié)構(gòu)是一個(gè)大的std::vector容器,里面存放的是上述的數(shù)據(jù)結(jié)構(gòu)類。如圖所示。4.2C語言特點(diǎn)C語言是目前應(yīng)用比較廣泛的計(jì)算機(jī)高級(jí)語言,尤其是C語言更多的用于編寫系統(tǒng)軟件,因此對(duì)于這種語言的了解程度,運(yùn)用程度就決定了程序員所編寫出的程序的安全性。本文先分析了漏洞的有關(guān)知識(shí),然后從C語言的特點(diǎn)入手,詳細(xì)的闡述了C語言中的各種不安全的因素。安全編程技術(shù)是指為了消除或降低軟件的安全風(fēng)險(xiǎn)而在編程時(shí)所遵循的原則及所采取的技術(shù)手段。在當(dāng)今互聯(lián)網(wǎng)的世界中,軟件開發(fā)人員必須知道如何編寫安全的程序。運(yùn)用好的編程技巧,掌握安全編程的技術(shù),可以使程序員更加了解安全漏洞的來源,從而避免安全漏洞,使設(shè)計(jì)出來的程序更加清晰,更加可靠,這樣才能更好地提高終端產(chǎn)品的質(zhì)量。C語言使用了BCPL和B的很多重要概念,同時(shí)也添加了數(shù)據(jù)類型和其他的強(qiáng)大功能。C語言最開始是作為UNIX操作系統(tǒng)的開發(fā)語言得到了廣泛的關(guān)注。今天,事實(shí)上所有新的主流操作系統(tǒng)都是用C或C++語言編寫的。C語言可以應(yīng)用于多數(shù)計(jì)算機(jī)上,它不依賴于硬件。通過仔細(xì)的設(shè)計(jì),程序員可以編寫出5能夠移植到大多數(shù)計(jì)算機(jī)上的C程序。4.3FLASH簡介4.3.1概述FLASH是MACROMEDIA公司開發(fā)的矢量繪畫與動(dòng)畫制作軟件,不但能能夠制作出聲色俱佳的動(dòng)畫,而且可以制作出互動(dòng)性較強(qiáng)的教學(xué)窗口。利用該技術(shù)開發(fā)的產(chǎn)品有以下優(yōu)點(diǎn):1.矢量圖形,可以任意伸縮尺寸而不影響窗口中圖形、圖像的質(zhì)量;2.流式播放技術(shù),可以使教學(xué)窗口及視頻文件邊播放邊下載,便于網(wǎng)絡(luò)傳輸;3.不但可以集成視頻、聲音、動(dòng)畫等多種元素,而且還可以調(diào)用FLASHPAPER、TXT等多種文件;4.占用空間小,通過使用關(guān)鍵幀和矢量技術(shù)使得所生成的SWF文件小巧玲瓏,下載迅速,攜帶方便;5.FLASH中的ACTIONSCRIP腳本語言設(shè)計(jì)靈活、交互性強(qiáng),還可讀取XML、ASP等編程語言實(shí)現(xiàn)較復(fù)雜的交互功能。另外,越來越多的軟件可生成SWF類型的文件,而且FLASH可調(diào)用這些軟件生成的SWF文件,這一點(diǎn)極大的擴(kuò)充了FLASH軟件的集成性,有利于FLASH吸收其它軟件的優(yōu)勢。4.3.2配置為了將各模塊的生成數(shù)據(jù)保存下來,在這里把FLASH與數(shù)據(jù)庫建立連接,通過FLASH寫入、讀取數(shù)據(jù)。但是在FLASH軟件中并不能通過ACTIONSCRIPT腳本語言直接查詢數(shù)據(jù)庫,為了解決這個(gè)問題,我們引入了ASP。ASP是微軟公司推出的一種基于服務(wù)器端的腳本語言,利用FLASH對(duì)該語言的兼容性,讓生成文件SWF直接調(diào)用ASP,然后對(duì)數(shù)據(jù)庫進(jìn)行各種操作。這一過程的原理如圖所示:圖四:各模塊數(shù)據(jù)配置FLASH與ASP的組合將使課件不僅具有更好的交互界面,而且具有更系統(tǒng)的數(shù)據(jù)支持。FLASH與數(shù)據(jù)庫連接過程中,具體的實(shí)現(xiàn)思路以及ASP文件中的主要代碼如下:1.利用ASP建立一個(gè)數(shù)據(jù)庫連接對(duì)象并使用該對(duì)象打開數(shù)據(jù)庫,該鏈接文件命名為CONN.INC,主要代碼如下:<%CONN=SERVER.CREATEOBJ;ECT("ADODB.CONNECTION");VARCONNSTRING="DRIVE={MICROSOFTACCESSDRIVER(*.MDB)};DBQ="&SERVER.MAPPATH("MYCW.MDB");CONN.OPEN(CONNSTRING);%>2.FLASH中的生成數(shù)據(jù)若要保存到數(shù)據(jù)庫中,首先引入數(shù)據(jù)庫鏈接文件:<!--#INCLUDEFILE="CONN.INC"--!>其次在ASP文件中接受FLASH傳遞過來的要存入數(shù)據(jù)庫的數(shù)據(jù),創(chuàng)建插入數(shù)據(jù)庫的SQL語句:VAR變量名=REQUEST("FLASH中動(dòng)態(tài)文本框?qū)?yīng)的變量名");VARSQLIN="INSERTINTOTABLENAME(字段名1,字段名2,字段名3...)VALUES(?"+變量名1+"?,?"+變量名2+"?,?"+變量名3+"?...);CONN.EXECUTE(SQLIN);最后將結(jié)果反饋到FLASH中,并關(guān)閉連接對(duì)象。這里要注意的是必須在接受反饋信息的變量名稱前面加分隔符“&”:RESPONSE.WRITE("&FANKUI=數(shù)據(jù)成功插入數(shù)據(jù)庫!");CONN.CLOSE();3.根據(jù)FLASH輸入文本框中輸入的數(shù)據(jù),在數(shù)據(jù)庫中查詢并將結(jié)果顯示在FLASH中,首先也是引入數(shù)據(jù)庫鏈接文件:<!--#INCLUDEFILE="CONN.INC"--!>其次在ASP文件中接受FLASH傳遞過來的需要查詢數(shù)據(jù)庫的數(shù)據(jù),創(chuàng)建查詢數(shù)據(jù)庫的SQL語句:VAR變量名=REQUEST("FLASH中輸入文本框?qū)?yīng)的變量名");VARSQLSELECT="SELECT*FROMTABLENAMEWHERE字段名=?"+變量名+"?";若根據(jù)查詢語句在數(shù)據(jù)庫中可以查詢到數(shù)據(jù),則把該數(shù)據(jù)存儲(chǔ)到變量中,并返回在FLASH中顯示;反之,若數(shù)據(jù)庫中查詢不到,則返回“查無此數(shù)據(jù)”,主要代碼如下:RS=CONN.EXECUTE(SQLSELECT);IF(!RS.EOF){//把查詢到的數(shù)據(jù)存儲(chǔ)到變量中VAR變量名1=RS("字段名1");VAR變量名2=RS("字段名1");VAR變量名3=RS("字段名3");}ELSE{FANKUI="查無此數(shù)據(jù)";}//將查詢出來的數(shù)據(jù)輸出到FLASH中,以“&”作為分隔符RESPONSE.WRITE("&FLASH中接受變量名1="+變量名1);RESPONSE.WRITE("&FLASH中接受變量名2="+變量名2);RESPONSE.WRITE("&FLASH中接受變量名3="+變量名3);最后,關(guān)閉記錄對(duì)象RS,關(guān)閉連接對(duì)象CONN:RS.CLOSE();CONN.CLOSE();4.4程序設(shè)計(jì)結(jié)構(gòu)框架簡介4.4.1順序結(jié)構(gòu)1界面簡潔,風(fēng)格統(tǒng)一,導(dǎo)航清晰,課件功能比較全面。課件需要著重完善模塊特色,例如“動(dòng)畫演示模塊”可以根據(jù)內(nèi)容的差異開發(fā)不同類型的動(dòng)畫,“自測模塊”可以分“章節(jié)測試”和“終期測試”兩部分。2邏輯結(jié)構(gòu)清晰;“QUICKCHECK”模塊有助于學(xué)生梳理知識(shí)點(diǎn),實(shí)用性強(qiáng);教學(xué)設(shè)計(jì)符合認(rèn)知規(guī)律,啟發(fā)性強(qiáng)。內(nèi)容方面還應(yīng)包含一些擴(kuò)展知識(shí),例如“C++程序設(shè)計(jì)中英文符號(hào)的讀法”、“實(shí)驗(yàn)平臺(tái)的介紹”等。3課件各模塊功能基本完備,運(yùn)行可靠,兼容多種常用操作系統(tǒng)。該課件作為網(wǎng)絡(luò)課件使用時(shí),課件與數(shù)據(jù)庫的交互不夠完善,需要進(jìn)一步改進(jìn)。4.4.2重要函數(shù)的設(shè)計(jì)1、在程序中設(shè)計(jì)一個(gè)用于解析C語言函數(shù)參數(shù)的函數(shù),C語言函數(shù)的一般形式是:TYPEFUNCTIONNAME([PARAM0],[PARAM0],要解析函數(shù)的參數(shù)列表,只要找到“())之間的字符串即可,把其中的字符串按”,”分開,保存到參數(shù)列表中。主要要處理下面幾種情況:雙引號(hào)、單引號(hào)、回車換行、注釋、括號(hào),針對(duì)每種情況進(jìn)行相關(guān)的處理。2、在程序中設(shè)計(jì)一個(gè)處理C語言程序文件的函數(shù),C\C++程序應(yīng)用容易出現(xiàn)安全隱患地方主要集中在靜態(tài)緩沖區(qū)域和動(dòng)態(tài)緩沖區(qū)域,所以正確使用緩沖區(qū)就是我們要關(guān)注的地方,我們己知很多C語言AP工函數(shù)中有產(chǎn)生安全隱患的地方,默認(rèn)情況下,只要從這些AP工函數(shù)入手,查找容易產(chǎn)生漏洞的地方,給出相應(yīng)的安全使用方法,就可以減少漏洞的產(chǎn)生。處理C程序,主要目的是要檢查程序函數(shù)的使用情況,根據(jù)PATCH文件,找到有安全隱患的函數(shù),如STRCAT),提取它的參數(shù),根據(jù)參數(shù)的使用,計(jì)算它的安全等級(jí),給出安全的代碼的指導(dǎo)規(guī)范。其中要注意的是各種格式的區(qū)分情況:雙引號(hào)、單引號(hào)、回車換行、注釋、括號(hào),針對(duì)每種情況進(jìn)行相關(guān)的處理。3、在程序中還要設(shè)計(jì)一個(gè)用于解析PATCH文件的函數(shù)。解析PATCH文件,主要通過LIBXML2這個(gè)開源的擴(kuò)展庫。LIBXML2是純C語言寫的用來解析XML文件和擴(kuò)展XML語言的工具“,并且實(shí)現(xiàn)了大量的標(biāo)準(zhǔn)的標(biāo)記語言,它可在幾乎現(xiàn)有的所有平臺(tái)上運(yùn)行。PATCH文件是標(biāo)準(zhǔn)的XML文件,主節(jié)點(diǎn)用<PATCH-INFO,子節(jié)點(diǎn)用<PATCH,孫節(jié)點(diǎn)用<NAME>和<ATTRIBUTE>標(biāo)識(shí)。其中<ATTRIBUTE>有NAME和VALUE兩個(gè)子節(jié)點(diǎn),用來記錄數(shù)據(jù)。所以只需要解析三層就可以了。4.4.2分支結(jié)構(gòu)模塊在設(shè)計(jì)初期根據(jù)內(nèi)容和教學(xué)中選取了典型程序,結(jié)合設(shè)計(jì)階段提出的要求,具體實(shí)現(xiàn)時(shí)設(shè)計(jì)了程序運(yùn)行、變量、流程圖三者全部顯示并且同步變化。窗口模塊中的程序運(yùn)行可設(shè)置自動(dòng)、手動(dòng)切換,在自動(dòng)模式下可設(shè)置暫停、快進(jìn)、快退,在手動(dòng)模式下可按照教學(xué)需要單步操作。另外,可在已添加定位錨點(diǎn)的地方快速定位,變量值與流程圖窗口則可以根據(jù)課堂需要最小化、最大化、打開與關(guān)閉。4.4.3循環(huán)結(jié)構(gòu)程序的逐句運(yùn)行是通過遮罩的位置移動(dòng)實(shí)現(xiàn)的,首先把遮罩、程序代碼和背景放在一個(gè)影片剪輯內(nèi),遮罩的寬度和程序行的行高一致,遮罩層放在程序?qū)雍捅尘皩拥纳厦?,并建立遮罩關(guān)系。然后在主時(shí)間軸上調(diào)整該影片剪輯的位置,使它的坐標(biāo)與舞臺(tái)上的程序代碼的坐標(biāo)一致,該影片剪輯所在的圖層級(jí)數(shù)要高于舞臺(tái)上的程序代碼的圖層。第5章各模塊功能具體演示5.1各模塊功能介紹本系統(tǒng)的用戶可分為管理員,學(xué)生兩類。本系統(tǒng)共分成兩類界面:一類界面用于管理員登錄,主要負(fù)責(zé)進(jìn)行基本資料、題庫、試卷、的管理;另外一類界面用于學(xué)生登錄,主要負(fù)責(zé)在線練習(xí),成績、答案查看,試卷評(píng)價(jià)等。從總體上考慮,系統(tǒng)應(yīng)該實(shí)現(xiàn)下列功能:對(duì)管理員來說,包括試題管理,試題庫的管理。1、試題管理:管理員可以控制試題難度級(jí)別,題目的數(shù)量。學(xué)生練習(xí)時(shí),由系統(tǒng)自動(dòng)組卷生成而不用手工組卷。同時(shí),管理員還可以對(duì)庫中已有的試卷進(jìn)行修改和刪除,添加新試卷等。2、題庫管理:管理員可以根據(jù)教學(xué)需求對(duì)題庫中的試題進(jìn)行三種基本操作:添加新的考題、刪除舊有考題、修改原有考題,本設(shè)計(jì)因?yàn)樯婕暗綌?shù)學(xué)公式等問題,由于數(shù)學(xué)公式在顯示的方面的缺陷,所以本試題庫中只有單項(xiàng)選擇題,判斷題和填空題。管理員可以在添加試題時(shí)設(shè)置題干、答案、試題難度系數(shù)等屬性。5.2系統(tǒng)框架前臺(tái)子系統(tǒng)功能模塊劃分:練習(xí)網(wǎng)站系統(tǒng)—前臺(tái)子系統(tǒng)練習(xí)網(wǎng)站系統(tǒng)—前臺(tái)子系統(tǒng)退出系統(tǒng)試卷評(píng)價(jià)查看成績提交查詢成績?cè)诰€練習(xí)用戶登陸試卷的生成退出系統(tǒng)試卷評(píng)價(jià)查看成績提交查詢成績?cè)诰€練習(xí)用戶登陸試卷的生成圖五:前臺(tái)子系統(tǒng)功能模塊圖后臺(tái)子系統(tǒng)功模塊劃分:練習(xí)網(wǎng)站系統(tǒng)—后臺(tái)子系統(tǒng)練習(xí)網(wǎng)站系統(tǒng)—后臺(tái)子系統(tǒng)退出考試系統(tǒng)試題管理工科文檔管理管理員登錄試題添加退出考試系統(tǒng)試題管理工科文檔管理管理員登錄試題添加圖六:后臺(tái)子系統(tǒng)功能模塊圖xuehaomimaxuehaomimaIDxinxingIDxinxingStudentStudentxingbieezhuanyexingbieezhuanye圖七:用戶ER圖zhanghaozhanghaomimaIDmimaIDguanliyuanguanliyuan圖八:管理員ER圖BBCACAIDIDDshitiDshitiwentiwentileixingdaanleixingdaan圖九:試題ER圖5.3窗口模塊依據(jù)前面所做的設(shè)計(jì)分析,對(duì)模塊功能進(jìn)行具體的實(shí)現(xiàn)工作。結(jié)合窗口簡潔實(shí)用、風(fēng)格統(tǒng)一的原則,首先設(shè)計(jì)窗口界面的主體風(fēng)格,其中包括:界面配色、導(dǎo)航按鈕樣式、字體、字號(hào)、文字的顏色等;然后開發(fā)各個(gè)模塊的通用模板,規(guī)劃各個(gè)模塊的命名規(guī)則,給導(dǎo)航按鈕添加ACTIONSCRIPT腳本;最后根據(jù)各模塊模板開發(fā)具體頁面,并在此過程中持續(xù)測試和修改。為了方便編輯每一個(gè)FLA文件,確保界面中各元素互不干擾,在開發(fā)過程中遵循以下幾個(gè)原則:1.把界面上的各個(gè)元素分散到時(shí)間軸上的不同圖層,并建立文件夾進(jìn)行管理;2.頁面之間的跳轉(zhuǎn)不使用時(shí)間軸上的幀的跳轉(zhuǎn),而是通過調(diào)用SWF文件來實(shí)現(xiàn);3.把時(shí)間軸上的相關(guān)代碼全部放到同一個(gè)圖層內(nèi),例如:AS層。4.把實(shí)現(xiàn)某一個(gè)功能的多個(gè)元素放到一個(gè)元件內(nèi),便于該功能模塊的移植。盡量做到不同功能模塊之間的高內(nèi)聚

溫馨提示

  • 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)論