2019年學(xué)生成績管理系統(tǒng)開發(fā)設(shè)計—大學(xué)畢業(yè)論文畢業(yè)設(shè)計范文模板參考資料.doc_第1頁
2019年學(xué)生成績管理系統(tǒng)開發(fā)設(shè)計—大學(xué)畢業(yè)論文畢業(yè)設(shè)計范文模板參考資料.doc_第2頁
2019年學(xué)生成績管理系統(tǒng)開發(fā)設(shè)計—大學(xué)畢業(yè)論文畢業(yè)設(shè)計范文模板參考資料.doc_第3頁
2019年學(xué)生成績管理系統(tǒng)開發(fā)設(shè)計—大學(xué)畢業(yè)論文畢業(yè)設(shè)計范文模板參考資料.doc_第4頁
2019年學(xué)生成績管理系統(tǒng)開發(fā)設(shè)計—大學(xué)畢業(yè)論文畢業(yè)設(shè)計范文模板參考資料.doc_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄摘要 3學(xué)生成績管理系統(tǒng) 4第一章概述 41.1 開發(fā)前的準(zhǔn)備 41.2 開發(fā)設(shè)計的意義 41.3 需求分析 4第二章學(xué)生成績管理系統(tǒng)概要設(shè)計 52.1 開發(fā)方案 52.2 系統(tǒng)流程圖 52.3 系統(tǒng)功能圖 6第三章詳細(xì)設(shè)計 83.1 刪除學(xué)生信息功能的實現(xiàn) 83.2 修改學(xué)生信息功能的實現(xiàn) 9第四章 調(diào)試分析 114.1 系統(tǒng)運(yùn)行主界面 114.2 增加學(xué)生信息功能的實現(xiàn) 114.3 刪除學(xué)生信息功能的實現(xiàn) 124.4 查詢學(xué)生信息功能的實現(xiàn) 134.5 修改學(xué)生信息功能的實現(xiàn) 134.6 排序功能的實現(xiàn) 14第五章 程序設(shè)計結(jié)語 155.1 系統(tǒng)存在的問題 155.2 系統(tǒng)改進(jìn)的方向

2、155.3 此次課程設(shè)計的體會 15猴子選大王 16第一章 概述 161.1 開發(fā)的目的 161.2 開發(fā)設(shè)計的意義 161.3 需求分析 16第二章 猴子選大王系統(tǒng)概要設(shè)計 172.1 系統(tǒng)流程圖 17第三章 詳細(xì)設(shè)計 183.1 系統(tǒng)的實現(xiàn) 18第四章 調(diào)試分析 204.1 系統(tǒng)運(yùn)行主界面 204.2 系統(tǒng)運(yùn)行結(jié)果 21第五章 程序設(shè)計結(jié)語 225.1 此次課程設(shè)計的總結(jié) 22迷宮求解 23第一章 概述 231.1 開發(fā)的目的和意義 231.2 需求分析 23第二章 迷宮求解系統(tǒng)概要設(shè)計 242.1 系統(tǒng)設(shè)計概要 24第三章 詳細(xì)設(shè)計 253.1 系統(tǒng)的實現(xiàn) 25第四章 調(diào)試分析 294.

3、1 系統(tǒng)運(yùn)行界面 29第五章 程序設(shè)計結(jié)語 305.1 此次課程設(shè)計的總結(jié) 30圖的遍歷及拓?fù)渑判?31第一章 概述 311.1 開發(fā)設(shè)計的目的和意義 311.2 需求分析 31第二章 圖的遍歷及拓?fù)渑判蛳到y(tǒng)概要設(shè)計 322.1 系統(tǒng)流程圖 322.2 功能模塊圖 33第三章 詳細(xì)設(shè)計 343.1 系統(tǒng)功能的實現(xiàn) 34第四章 調(diào)試分析 384.1 系統(tǒng)運(yùn)行主界面 384.2 系統(tǒng)運(yùn)行結(jié)果 38第五章 程序設(shè)計結(jié)語 405.1 此次課程設(shè)計的總結(jié) 40參考文獻(xiàn) 4141摘要隨著社會的發(fā)展,人民生活水平的提高,人們對教育的重視程度也隨之增加,越來 越多的人走入高等學(xué)府,由此,各所學(xué)校的學(xué)生數(shù)量也日

4、益增加。這使得學(xué)校對學(xué)生的 管理難度逐漸增大。而管理好學(xué)生成績是維護(hù)社會安定、提高教學(xué)質(zhì)量、保證教學(xué)進(jìn)度 有條不紊進(jìn)行的有力保障。由此可見,學(xué)生成績管理是一項極其重要的工作;同時,學(xué) 生成績管理又是一項極其龐大的工作。那么,如何管理學(xué)生成績呢?由于計算機(jī)技術(shù)的迅速發(fā)展和普及,如果用計算機(jī)來管理學(xué)生成績,則會使學(xué)生成 績的管理工作變得更輕松。介于這種需求,學(xué)生成績管理系統(tǒng)便應(yīng)運(yùn)而生了。此次課程 設(shè)計便是運(yùn)用我們所學(xué)的知識試著設(shè)計一個學(xué)生成績管理系統(tǒng), 使其實現(xiàn)一些簡單的基 本過程。經(jīng)過分析,本系統(tǒng)以VC+6.0為開發(fā)工具,主要運(yùn)用C語言進(jìn)行編程。本系統(tǒng)實現(xiàn)了增添學(xué)生、刪除學(xué)生、查找學(xué)生、修改學(xué)生

5、信息以及排序、保存信息、讀取信息、退 出系統(tǒng)等功能。其操作簡單易學(xué)、界面清晰明了易于理解;操作人員不需要有很高的專 業(yè)知識,容易普及推廣;運(yùn)行比較穩(wěn)定,比較適合現(xiàn)在大學(xué)校園對學(xué)生成績的管理,能 夠有效提高成績處理的速度和準(zhǔn)確度。另外還有猴子選大王系統(tǒng)可以解決日常生活中出現(xiàn)的選舉問題;迷宮求解系統(tǒng),可 以供人們娛樂以及智力開發(fā);圖的遍歷和拓?fù)渑判蛳到y(tǒng),用來解決排序問題。關(guān)鍵詞:成績管理,VC+6.0, C語言,編程學(xué)生成績管理系統(tǒng)第一章 概述1.1 開發(fā)前的準(zhǔn)備在進(jìn)行程序設(shè)計之前要熟練掌握數(shù)據(jù)結(jié)構(gòu)以及 C 語言中的相關(guān)基礎(chǔ)知識。 根據(jù)我們?nèi)粘I钪械慕?jīng)驗,結(jié)合自己平時所接觸到的本校學(xué)生成績管理系

6、統(tǒng),做好需 求分析,明確程序設(shè)計的具體要求。掌握 VC+6.0 的使用方法,準(zhǔn)備計算機(jī)、 VC+6.0 等基本設(shè)備。為下一步具體開發(fā)設(shè)計做好充分的準(zhǔn)備。1.2 開發(fā)設(shè)計的意義學(xué)生成績管理系統(tǒng)可以提高學(xué)校管理部門工作人員的工作效率,減少不必要的 人力、物力和財力的支出;方便學(xué)校管理部門的工作人員全面地掌握學(xué)生成績情況。使 得學(xué)生成績實現(xiàn)標(biāo)準(zhǔn)化和規(guī)范化的管理。此外,通過對“學(xué)生成績管理系統(tǒng)”的學(xué)習(xí)和 動手實踐編寫,可以使我們對數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識的理解更透徹;促進(jìn)我們對C語言的理解與使用;提高我們對綜合知識的運(yùn)用能力,為今后從事項目開發(fā)積累經(jīng)驗。該課程設(shè)計還能夠培養(yǎng)我們的實踐動手能力,提高我們的學(xué)習(xí)

7、興趣,拓展我們的思 維,加強(qiáng)我們查閱資料以及解決問題的能力,提高我們將老的思想運(yùn)用到新事物上的能 力。通過對此課題的開發(fā),無論是理論知識還是動手能力,我們都會有不同程度上的提1.3 需求分析本次課程設(shè)計所編寫的學(xué)生成績管理系統(tǒng),要實現(xiàn)增加學(xué)生信息、刪除學(xué)生信息、 查詢學(xué)生信息、修改學(xué)生信息以及排序、保存信息、讀取信息、退出系統(tǒng) 等功能。第二章學(xué)生成績管理系統(tǒng)概要設(shè)計2.1開發(fā)方案在主函數(shù)中根據(jù)用戶的選擇運(yùn)用 switch結(jié)構(gòu)來分別調(diào)用不同的自定義函數(shù),從而 實現(xiàn)特定的功能,電話薄中聯(lián)系人的姓名和號碼等信息則存放在結(jié)構(gòu)體變量中,通過指 針聯(lián)系起來,形成鏈表結(jié)構(gòu)。各自定義函數(shù)與主函數(shù)之間也通過頭指

8、針進(jìn)行連接。當(dāng)然,還要通過文件對學(xué)生成績管理系統(tǒng)的數(shù)據(jù)進(jìn)行保存。先寫主函數(shù),然后再依次編寫各自 定義函數(shù),最后進(jìn)行程序測試,寫報告總結(jié)。2.2系統(tǒng)流程圖此學(xué)生成績管理系統(tǒng)的總體設(shè)計思想流程圖如圖2-1所示。運(yùn)行程序,首先出現(xiàn)的是系統(tǒng)的主界面,顯示系統(tǒng)的各項功能,增加學(xué)生信息、刪除學(xué)生信息、查詢學(xué)生信 息、修改學(xué)生信息以及排序、保存信息、讀取信息、退出。用戶輸入相應(yīng)的選擇,然后 程序進(jìn)入對應(yīng)的功能模塊。圖2-1系統(tǒng)簡單流程圖2.3系統(tǒng)功能圖根據(jù)要求,此學(xué)生成績管理系統(tǒng)應(yīng)該實現(xiàn)增加學(xué)生信息、刪除學(xué)生信息、查詢學(xué)生信息、修改學(xué)生信息以及排序、保存信息、讀取信息、退出系統(tǒng)等功能。此學(xué)生成績管理系統(tǒng)包括

9、增加學(xué)生信息、刪除學(xué)生信息、查詢學(xué)生信息、修改學(xué)生信息以及排序、保存信息、讀取信息、退出八個模塊。其系統(tǒng)功能圖如圖2-2所示。其中的查詢模塊中實現(xiàn)按學(xué)號查詢、按姓名查詢和退出功能,其功能圖如圖2-3所示。排序模塊中實現(xiàn)按學(xué)號排序、按數(shù)據(jù)結(jié)構(gòu)成績排序、按語文成績排序、按英語成績排序、按總分排序和返回 功能,其功能模塊圖如圖2-4所示。圖2-2學(xué)生成績管理系統(tǒng)功能模塊圖圖2-3查詢學(xué)生信息功能圖圖2-4排序模塊功能圖第三章詳細(xì)設(shè)計3.1刪除學(xué)生信息功能的實現(xiàn)(4)刪除學(xué)生信息調(diào)用函數(shù)void Sub3Menu(),調(diào)用該函數(shù)時先輸出一個子菜單, 若用戶選擇刪除,則要求用戶輸入要刪除的學(xué)生的學(xué)號,并

10、顯示該學(xué)生的所有信息,刪 除數(shù)據(jù)后對未刪除的數(shù)據(jù)進(jìn)行一些調(diào)整。其功能實現(xiàn)流程圖如圖3-1所示。代碼如下:void deleterecord(student stu,int i) /* 刪除信息 */int j;while(i=0)for(j=i;j nu mstus;j+)stuj=stuj+1;nu mstus-;printf(” 刪除成功!n); void coun t(stude nt stud) int i,j;for(i=0;i nu mstus;i+)studi.i ndex=1;for(j=0;jstudi.score)studi.i ndex+; 輸入要刪除的學(xué)生學(xué)號查找到相應(yīng)

11、的學(xué)生信息將對應(yīng)學(xué)生的信息刪除結(jié)束 :圖3-1刪除學(xué)生信息功能的實現(xiàn)流程圖3.2修改學(xué)生信息功能的實現(xiàn)修改學(xué)生信息功能調(diào)用函數(shù)void Sub2Menu(),調(diào)用該函數(shù)時先輸出一個子菜單,要求 用戶選擇,若用戶選擇修改,則要求用戶輸入要修改的學(xué)生的學(xué)號,并顯示該學(xué)生的所 有信息;,等用戶修改后,顯示出該學(xué)生新的信息。程序代碼如下:oid xiugai()if(fp=fopen(s_score.txt,rb+)=NULL|(fp 1=fopen(temp.txt,wb+)=NULL) /*檢查是否出錯 */prin tf(Ca nnot ope n this file. n);exit(0);p

12、rin tf(nPLease shuru xiugai xuehao:);scan f(%d,&i); getchar();while(fread(&data,sizeof(data),1,fp)=1)j=atoi(data.xuehao);if(j=i)printf(xuehao:%snmingzi:%snnianling:%sn,data.xuehao,data.mingzi,data.nianling); printf(Please shuru mingzi:);gets(data.mingzi);printf(Please shuru shuxue score:); gets(temp

13、);data.score0=atof(temp);printf(Please input yingyu score:);gets(temp);data.score1=atof(temp);printf(Please input wuli score:); gets(temp);data.score2=atof(temp);data.score3=data.score0+data.score1+data.score2; fwrite(&data,sizeof(data),1,fp1);fseek(fp,0L,0); /* 將位置指針移到離頭文件 0 個字節(jié)處 */ fseek(fp1,0L,0)

14、;while(fread(&data,sizeof(data),1,fp1)=1)fwrite(&data,sizeof(data),1,fp);fclose(fp);fclose(fp1);第四章調(diào)試分析4.1系統(tǒng)運(yùn)行主界面啟動此學(xué)生成績管理系統(tǒng)后,首先出現(xiàn)的是主窗口,如圖4-1所示。顯示系統(tǒng)的各項功能,用戶可以根據(jù)需要輸入相應(yīng)的選擇圖4-1主窗口運(yùn)行界面4.2增加學(xué)生信息功能的實現(xiàn)用戶輸入完學(xué)生的相應(yīng)信息后,點(diǎn)擊回車鍵,則會提示:輸入成功,其運(yùn)行界面如 圖4-2所示。成績錄入后將顯示在主界面上。圖4-2增加學(xué)生信息運(yùn)行界面4.3刪除學(xué)生信息功能的實現(xiàn)刪除學(xué)生信息功能為用戶提供了按學(xué)號刪除,

15、輸入要刪除的學(xué)號后,會提示用戶是 否刪除該學(xué)生信息,輸入y,才會刪除學(xué)生信息,刪除成功后都會有相應(yīng)的“刪除成功” 提示,刪除學(xué)生信息的運(yùn)行界面如圖 4-3所示。匕Q Ci DocuMiif and Se :貝貝賀餐SMMEMEX賓用貝黛且貝貝貝貝圖4-3刪除學(xué)生信息的運(yùn)行界面4.4查詢學(xué)生信息功能的實現(xiàn)在查詢學(xué)生信息功能中,系統(tǒng)為用戶提供了兩種查詢方式,分別為按學(xué)號查詢和按 姓名查詢。查詢學(xué)生信息的運(yùn)行界面如圖4-4所示。c* C: Docuent s and Sett ingsAdinist r at or 臬面、學(xué)生SCDebug學(xué)生官理-|NNHJCNNHJCmtHJCmtKW:白 I

16、學(xué)主信息、XNmtKNmtKHmtKHJCNK請徹入查詢方式:X1 一唆學(xué)號杳荷*2遙姓名査詢*3羽回*j也:牟 1 3KXKKKXKKKXKKJCXKKJC要査詢的學(xué)號KJCKKKJCKKKXKKK 號 JE_3 8 的 牛的信 目 XXJCKKXJCKKXJCKKKJC性名咐想性別:陰8出生日期:1990K族:漢 數(shù)據(jù)結(jié)構(gòu):站 語文:站 奐語:站、SMiMiMiMiMiMiMiMiM 詢亓 MiiWiMiWiMK 覽 if 屛梵 !M !M % % KM 昇事止夢坤成旬 管甲 瑋2: 1HS3、慘敵于土4、查詢J 土信息7. 趴自 嘗昭育童ABC半:圖4-4查詢學(xué)生信息的運(yùn)行界面4.5修改

17、學(xué)生信息功能的實現(xiàn)用戶輸入要修改的學(xué)生的學(xué)號,然后輸入修改后的學(xué)生的成績,點(diǎn)擊回車鍵后,則 會提示“修改成功”,其運(yùn)行界面如圖4-5所示。圖4-5修改學(xué)生信息功能的運(yùn)行界面4.6排序功能的實現(xiàn)在排序功能中,系統(tǒng)為用戶提供了 5種排序方式,分別為按學(xué)號排序、按數(shù)據(jù)結(jié)構(gòu)成績排序、按語文成績排序、按英語成績排序和按總分排序。其運(yùn)行界面如圖4-6所示戍績排序小 U: Docuent s and SettinfsAdinistrator桌面、學(xué)主菅理希學(xué)主菅理-| | |* K比Si培子 ?旬息焙刃曲門予* 3吟適袁座握誹底* A返回*11+條件弓|白小具孝銖 爭號是M學(xué)生的性別女學(xué)生兩出生日期辺90學(xué)

18、生氏族漢數(shù)據(jù)結(jié)構(gòu)沔語文,卿 ti H 293曲勺爭弓忌5學(xué)生的性別女學(xué)生的出生日期辺學(xué)生代族漢,數(shù)據(jù)結(jié)構(gòu)嘰,話文嘶卜爲(wèi)詒=9總分=騎丄符漁學(xué)生的嘗號是豳學(xué)生的性別豳學(xué)生的出生日期丄990學(xué)生民族漢,數(shù)據(jù)結(jié)構(gòu)沔9”語文,99” 按槁:鶉-總、分認(rèn)屮/ 生成績管理系統(tǒng)1. 瑁加予生2. 刪除年生【信息3. 修改半牛 理、查詢學(xué)土A:協(xié)息 J諫取信息圖4-6排序功能運(yùn)行的界面第五章 程序設(shè)計結(jié)語5.1 系統(tǒng)存在的問題由于本人經(jīng)驗不足,對VC+6.0軟件的使用不精通,對C語言知識的學(xué)習(xí)不夠透徹,所以,此次課程設(shè)計存在較多的不足之處。 具體問題如下:(1)學(xué)生的個人信息不完善, 如:缺少學(xué)生的個人課表、

19、所在系、成績、身高、體重、健康情況、祖籍等信息; (2) 系統(tǒng)運(yùn)行后,沒有實現(xiàn)對不同的用戶登錄擁有不同的權(quán)限功能。5.2 系統(tǒng)改進(jìn)的方向介于上一節(jié)所述的種種不足, 我認(rèn)為系統(tǒng)改進(jìn)的總體方向就是擬補(bǔ)以上的種種不足, 然后在此基礎(chǔ)上對系統(tǒng)進(jìn)行優(yōu)化。首先,完善學(xué)生的個人成績;不同的用戶登錄也要有 一定的權(quán)限限制;實現(xiàn)對已有學(xué)生成績的定位;把尚未完成的功能模塊完成。最后,可 以將該學(xué)生成績管理系統(tǒng)做成網(wǎng)頁版,供學(xué)生、學(xué)校管理人員以及訪客以相應(yīng)的身份登 錄該系統(tǒng)進(jìn)行一系列的操作,進(jìn)而可以將此系統(tǒng)推向各高等學(xué)府,輔助學(xué)校管理人員更 好的管理在校學(xué)生。5.3 此次課程設(shè)計的體會此次課程設(shè)計主要運(yùn)用了 VC+

20、6.0軟件,編程所運(yùn)用的語言是 C語言。經(jīng)過一周的編程實習(xí),并在后一段的報告總結(jié),我對數(shù)據(jù)結(jié)構(gòu)這門科有新的認(rèn)識,本人實在是獲益 不淺!要想編寫一個準(zhǔn)確、高效并有使用價值的程序,一定先要對課本知識熟悉,還要 掌握必要的上機(jī)操作能力,寫程序其實很容易而關(guān)鍵在于調(diào)試程序。這次設(shè)計 , 讓我重 新掌握了數(shù)據(jù)結(jié)構(gòu) , 而且還得到了用數(shù)據(jù)結(jié)構(gòu)解決實際問題的寶貴經(jīng)驗。通過此次編程我也發(fā)現(xiàn)了自己在學(xué)習(xí)中的錯誤和不足,復(fù)習(xí)了以前學(xué)過的知識。同 時也學(xué)到了一些沒學(xué)過的知識,讓我從中收益非淺,也為期末考試準(zhǔn)備了一下!更重要 的是培養(yǎng)了獨(dú)立思考問題和解決問題的能力,熟悉了一些基本操作和解決問題的方法。猴子選大王第一章

21、 概述1.1 開發(fā)的目的猴子選大王的問題,在現(xiàn)實社會中頻頻出現(xiàn),此次系統(tǒng)開發(fā)的目的就是為了解決生 活中出現(xiàn)的猴子選大王的問題。有時候,很多選舉需要隨機(jī)性,如何能夠?qū)崿F(xiàn)公平公正 的選舉?這就需要借助一個好的猴子選大王系統(tǒng)來實現(xiàn)。由此,猴子選大王系統(tǒng)就應(yīng)運(yùn) 而生了。1.2 開發(fā)設(shè)計的意義現(xiàn)實社會中,需要選舉的地方很多,然而選舉中的人為操作使得選舉失去了應(yīng)有的 意義。猴子選大王系統(tǒng)的開發(fā),可以幫助一些社會群體實現(xiàn)公平選舉,避開暗箱操作。 通過對“猴子選大王”的學(xué)習(xí)和動手實踐編寫,可以使我們對數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識 的理解更透徹;促進(jìn)我們對 C 語言的理解與使用;提高我們對綜合知識的運(yùn)用能力,為 今后從事

22、項目開發(fā)積累經(jīng)驗。1.3 需求分析此猴子選大王系統(tǒng)只需實現(xiàn)對于不同數(shù)量的群體按照一定的規(guī)則進(jìn)行逐個淘汰, 終獲得選舉結(jié)果,可以將參加選舉者排好隊,能夠從不同的序號開始淘汰,從而達(dá)到隨 機(jī)選舉的目的。第二章猴子選大王系統(tǒng)概要設(shè)計2.1系統(tǒng)流程圖此猴子選大王系統(tǒng)的總體設(shè)計思想流程圖如圖2-1所示。運(yùn)行程序后,首先出現(xiàn)系統(tǒng)的主界面,提示用戶輸入猴子的總數(shù),按回車鍵,然后提示用戶輸入從第幾個猴子開 始淘汰,按回車鍵執(zhí)行程序,然后得到猴子的大王是第幾號。圖2-1系統(tǒng)簡單流程圖第三章 詳細(xì)設(shè)計3.1 系統(tǒng)的實現(xiàn)由于此系統(tǒng)數(shù)據(jù)元素不可須知,同時對于報完一次之后對于下一次的報數(shù),由于已 經(jīng)排除了一部分猴子,猴

23、子的順序被打亂,所以需要使用鏈表。鏈表是動態(tài)的,可以在 需要的時候增長和減少其長度,而靜態(tài)數(shù)據(jù)結(jié)構(gòu)數(shù)組是在編譯時分派內(nèi)存的,其大小是不可改變的,而且會出現(xiàn)內(nèi)存浪費(fèi)的情況。我認(rèn)為單循環(huán)鏈表能很好的解決這個問題, 在建立單循環(huán)鏈表時,因為鏈表的大小由輸入決定,因為與匹配的節(jié)點(diǎn)數(shù)也是變化的, 所以要進(jìn)行動態(tài)內(nèi)存分配。假設(shè)猴子的個數(shù)是N, M是要淘汰的編號,那么建立一個 N長的鏈表,鏈表最后一個元素的 nextPtr 指針指向第一個元素,這樣就形成一個循環(huán)鏈 表,而鏈表的數(shù)據(jù)域存儲的就是猴子的編號。程序代碼如下:#include#includestruct Node int data;struct N

24、ode *next;/ 建立一個節(jié)點(diǎn)結(jié)構(gòu)體int main() struct Node *head, *s, *q, *t;int n, m, count=0, i;printf(*n);printf(n*scanf(%d,&m);printf(n*猴子選大王請輸入猴子的總數(shù) : );請輸入從第幾個猴子開始 : );scanf(%d,&n);for(i=0; idata=i+1;s-next=NULL;if(i=0) head=s; q=head; else q-next=s;q=q-next; / 建立一個不帶頭結(jié)點(diǎn)的單鏈表q-next=head;/ 這里,將單鏈表組成環(huán)狀,形成循環(huán)單鏈表p

25、rintf(before:);q=head;while(q-next!=head)printf(%d ,q-data);q=q-next; / 依次輸出節(jié)點(diǎn)的值printf(%d ,q-data);q=head;printf( );do count+;/ 計數(shù)器開始計數(shù)if(count=n-1) t=q-next;q-next=t-next;/ 到 n 前面那個節(jié)點(diǎn) stop ,然后刪除第 n 個節(jié)點(diǎn) count=0;/ 計數(shù)器復(fù)位printf(%d , t-data);/輸出被淘汰的猴子的號碼free(t);/ 釋放內(nèi)存,防止內(nèi)存泄露 q=q-next; while(q-next!=q);/

26、 這句是關(guān)鍵,就是循環(huán)到只剩下一個節(jié)點(diǎn)了,如果說有難 度的話應(yīng)該是理解的難點(diǎn)了printf(n* 猴子的大王是第 %d 號 *n,q-data);/輸出 king 的號碼大王是輸入猴子的數(shù)目輸入數(shù)字 第四章調(diào)試分析4.1系統(tǒng)運(yùn)行主界面啟動此猴子選大王系統(tǒng)后,首先出現(xiàn)的是主窗口,如圖4-1所示。提示用戶輸入猴子的總數(shù)。圖4-1主窗口運(yùn)行界面4.2系統(tǒng)運(yùn)行結(jié)果當(dāng)用戶輸入相應(yīng)的猴子總數(shù),并輸入從第幾個猴子開始后,按下回車鍵,系統(tǒng)則的 到運(yùn)行的結(jié)果,即選擇出猴子的大王。程序運(yùn)行結(jié)果如圖4-2所示。FD:寶曲:得立件夾甘匚 +氐0寶鏗.Mitreoft Visual StudioMzProjectqDe

27、bugq.exeM:轉(zhuǎn) it MT需子選 /T 干 KHJTM4W MMHJOHWMMMM4W MMMM: X Jt Jt X M! J0(1(00)1)11(”請輸 從第 幾個*矣子開女臺: 12eforc;l 2 3 4 5 6 ? 8 9 10 11 12 13 14 15 16 17 IB 19 20 21 22 23 24 25 26 27 22V 3kJ 31 32 33 34 3S 36 J7 38 39 4M 41 42 43 44 4b 46 47 4H 49 bM bl 52 S3 S45 56 57 5呂 59 60 61 &264 5 GG 67 GS 69 70 71

28、 ?2 73 74 75 7G 7? 78 79 80 81S2 33 84 E5 36 87 8S 12 24 36 18 60 72 84 B 21 34 47 61 74 87 13 27 41 55 69 801737t4707977457S76714LJ3694344486 19 6 82 9 ? 81 59猴子的大琨第31i*ess any key to continue圖4-2系統(tǒng)運(yùn)行結(jié)果圖第五章 程序設(shè)計結(jié)語5.1 此次課程設(shè)計的總結(jié)猴子選大王是一個數(shù)據(jù)結(jié)構(gòu)很古老很經(jīng)典的問題,融知識性和娛樂性為一體,能讓 人產(chǎn)生較大興趣,因此編寫程序?qū)崿F(xiàn)之是一件很有意義的事。在課程設(shè)計中,首先

29、要看 清問題,將問題要求理解透徹,在構(gòu)思要如何實現(xiàn),要用到哪些函數(shù),要用什么算法, 在課程構(gòu)思中選算法是一個很重要的概念,只有確定用這么算法后才能接下來的工作, 將流程圖畫在紙上,再依次編寫代碼,在程序設(shè)計中,編寫代碼只是一個方面,調(diào)試才 是關(guān)鍵。它是一個相當(dāng)繁瑣的過程,有許多新的問題需要被解決,但同時它也是一個比 較重要的過程,因為在程序調(diào)試過程中,你會學(xué)到很多新的東西,從而增加你編程的經(jīng) 驗。在設(shè)計一元多項式算法時,出現(xiàn)了一些問題,例如在建立鏈表時頭指針的設(shè)立導(dǎo)致 了之后運(yùn)用到相關(guān)的指針時沒能很好的移動指針出現(xiàn)了數(shù)據(jù)重復(fù)輸出或是輸出系統(tǒng)缺 省值,不能實現(xiàn)算法。實現(xiàn)加法時該鏈表并沒有向通常那

30、樣通過建立第三個鏈表來存放 運(yùn)算結(jié)果,而是再度利用了鏈表之一來進(jìn)行節(jié)點(diǎn)的比較插入刪除等操作。為了使輸入數(shù) 據(jù)按指數(shù)降序排列,可在數(shù)據(jù)的輸入后先做一個節(jié)點(diǎn)的排序函數(shù),通過對鏈表排序后再 進(jìn)行之后加減運(yùn)算。迷宮求解第一章 概述1.1 開發(fā)的目的和意義迷宮問題要求尋找一條從入口到出口的路徑。即從入口出發(fā),順著某一個方向進(jìn)行 探索,若能走通,則繼續(xù)往前走;否則沿著原路退回,換一個方向繼續(xù)探索,直至出口 位置,求得一條通路。假如所有可能的通路都探索到而未能到達(dá)出口,則所設(shè)定的迷宮 沒有通路,通常用的是“窮舉求解”的方法。為了保證在任何位置上都能原路退回,顯 然需要用一個后進(jìn)先出的結(jié)構(gòu)來保存從入口到當(dāng)前位

31、置的路徑。因此,在求解迷宮通路 的算法中要應(yīng)用 “?!钡乃枷?。對于棧的內(nèi)容在整個學(xué)期的學(xué)習(xí)中我也有了一定的了解1.2 需求分析本課程設(shè)計是解決迷宮求解的問題, 從入口出發(fā), 順某一方向向前探索, 若能走通, 則繼續(xù)往前走;否則沿原路退回,換一個方向再繼續(xù)探索,直至所有可能的通路都探索 到為止。為了保證在任何位置上都能沿原路退回,顯然需要用一個后進(jìn)先出的結(jié)構(gòu)來保 存從入口到當(dāng)前位置的路徑。 因此,在求迷宮通路的算法中要應(yīng)用 “?!钡乃枷爰僭O(shè) “當(dāng) 前位置”指的是 “在搜索過程中的某一時刻所在圖中某個方塊位置” ,以0和 1所組成 的迷宮形式輸出,標(biāo)記所走過的路徑結(jié)束程序;當(dāng)迷宮無路徑時,提示輸入

32、錯誤結(jié)束程 序。第二章 迷宮求解系統(tǒng)概要設(shè)計2.1 系統(tǒng)設(shè)計概要從入口出發(fā),按某一方向向前探索,若能走通并且未走過,即某處可以到達(dá),則到 達(dá)新點(diǎn),否則試探下一個方向;若所有的方向均沒有通路,則沿原路返回前一點(diǎn),換下 一個方向再繼續(xù)試探,直到找到一條通路,或無路可走又返回入口點(diǎn)。在求解過程中, 為了保證在到達(dá)某一點(diǎn)后不能向前繼續(xù)行走(無路)時,能正確返 回前一點(diǎn)以便繼續(xù)從下一個方向向前試探,則需要用一個棧(遞歸不需要)保存所能夠 到達(dá)的每一點(diǎn)的下標(biāo)及從該點(diǎn)前進(jìn)的方向。設(shè)迷宮為m行n列,利用mazemn來表示一個迷宮, mazeij=0或 1;其中: 0表示通路, 1表示不通,當(dāng)從某點(diǎn)向下試探時,

33、中間點(diǎn)有四個方向可以試探,而四個角點(diǎn)有兩個方向,其他邊緣點(diǎn)有三個方向,為使問 題簡單化,用 mazem+2n+2 來表示迷宮,而迷宮的四周的值全部為 1,這樣做使問題 簡單了,每個點(diǎn)的試探方向全部為 4,不用再判斷當(dāng)前點(diǎn)的試探方向有幾個。迷宮棧的實現(xiàn)函數(shù) mazepath()迷宮遞歸的實現(xiàn)函數(shù) path() 為了防止重復(fù)達(dá)到某點(diǎn),以避免發(fā)生死循環(huán),每次達(dá)到了某點(diǎn)(i,j) 后,改變mazeij 的值,迷宮棧的實現(xiàn)直接置 -1 ,算法結(jié)束前恢復(fù)原迷宮;而迷宮遞歸是將當(dāng) 前值置為已走的步驟,這樣輸出時對走過的路更顯而易見。棧的函數(shù)設(shè)計:棧的初始化函數(shù) Init_SeqStack()判??誆mpty

34、_SeqStack()入棧函數(shù)Push_SeqStack()出棧函數(shù)Pop_SeqStack()取棧頂函數(shù) GetTop_SeqStack() 銷毀棧 Destroy_SeqStack()第三章 詳細(xì)設(shè)計3.1 系統(tǒng)的實現(xiàn)在上述表示迷宮的情況下,每個點(diǎn)有 4 個方向去試探,如當(dāng)前點(diǎn)的坐標(biāo)( x,y), 與其相鄰的4個點(diǎn)的坐標(biāo)都可根據(jù)與該點(diǎn)的相鄰方位而得到。因為出口在( m n),因 此試探順序規(guī)定為:從當(dāng)前位置向前試探的方向為從正東沿順時針方向進(jìn)行。為了簡化 問題,方便求出新點(diǎn)的坐標(biāo),將從正東開始沿順時針進(jìn)行的 4個方向的坐標(biāo)增量放在一 個結(jié)構(gòu)數(shù)組move4中,在move數(shù)組中,每個元素有兩個

35、域組成,x為橫坐標(biāo)增量,y 為縱坐標(biāo)增量。這樣對move設(shè)計會很方便地求出從某點(diǎn)(x, y)按某一方向v(0=v=3) 到達(dá)的新點(diǎn)( i ,j )的坐標(biāo): i=x+movev.x;j=y+movev.y;當(dāng)?shù)竭_(dá)了某點(diǎn)而無路可走時需返回前一點(diǎn),再從前一點(diǎn)開始向下一個方向繼續(xù)試 探。因此,壓入棧中的不僅是順序到達(dá)的各點(diǎn)的坐標(biāo),而且還要有從前一點(diǎn)到達(dá)本點(diǎn)的 方向。棧中元素是一個由行、列、方向組成。具體結(jié)構(gòu)定義如下:#include #include #define MaxSize 100#define StackIncrement 10struct Seat / 定義坐標(biāo)結(jié)構(gòu)體int x;int y

36、; ;typedef struct / 定義入棧信息元素類型int ord;Seat seat;int di;SElemType;struct Stack / 定義棧元素類型SElemType *base;SElemType *top;int StackLength; ;Stack S;bool Map1010=0,0,1,1,0,1,1,1,0,1,0, 0,1,1,0,1,1,1,0,1,0,0,1,1,1,1,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,1,1,1,0,1,1,1,1,0,0,1,0,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,0,

37、 0,0,1,1,1,1,1,1,1,0,0;bool is_through1010=0;bool InitStack(Stack &S) / 構(gòu)建一個棧 S.base=S.top=(SElemType*)malloc(MaxSize*sizeof(SElemType); if(!S.base)return false;S.StackLength=MaxSize;return true;bool Push(Stack &S,SElemType e) / 將信息 e 入棧 if(S.top-S.base)/sizeof(SElemType)=S.StackLength) S.base=(SEle

38、mType*)realloc(S.base,(S.StackLength+StackIncrement)*sizeof( SElemType);S.top=S.base+S.StackLength;S.StackLength += StackIncrement; S.top-di=e.di; S.top-ord=e.ord; S.top-seat.x=e.seat.x; S.top-seat.y=e.seat.y;S.top+;return true; bool Pop(Stack &S,SElemType &e) /將棧頂元素取出,賦值給 eif(S.base=S.top)return fa

39、lse;S.top-;e.di=S.top-di; e.ord=S.top-ord; e.seat.x=S.top-seat.x; e.seat.y=S.top-seat.y;return true; bool StackEmpty(Stack s) / 判斷棧是否為空return !(s.top-s.base); bool Pass(Seat s) /判斷當(dāng)前位置是否通return Maps.xs.y; bool FootPrint(Seat s) / 在此位置留下標(biāo)記,表示已經(jīng)經(jīng)過is_throughs.xs.y=true;return true; Seat NextPos(Seat s,

40、int i) /將當(dāng)前位置指向邏輯上的下個位置,指向的方向由 i 確定Seat ss;if(i=1)ss.x=s.x+1; ss.y=s.y;elseif(i=2)ss.x=s.x; ss.y=s.y+1;else if(i=3) ss.x=s.x-1; ss.y=s.y; elsess.x=s.x; ss.y=s.y+1;return ss; bool MazePath(Seat start,Seat end)InitStack(S); / 創(chuàng)建棧并且初始化Seat curpos; curpos.x=start.x; curpos.y=start.y; / 設(shè)定當(dāng)前位置為入口 地址int c

41、urstep=1; /探索第一步doif(Pass(curpos)&!is_throughcurpos.xcurpos.y) / 當(dāng)前位置通且沒有 來過FootPrint(curpos); / 留下痕跡SElemType e; / 構(gòu)建入棧信息e.di=1; e.ord=curstep; e.seat.x=curpos.x; e.seat.y=curpos.y;Push(S,e); / 加入路徑if(curpos.x=end.x)&(curpos.y=end.y) /到達(dá)終點(diǎn)return true;curpos=NextPos(curpos,1); / 探索下一步curstep+; else

42、/ 當(dāng)前位置不通,將前面一個位置取出,改由其他方向在判斷 SElemType e;if(!StackEmpty(S) Pop(S,e);while(e.di=4&!StackEmpty(S)FootPrint(e.seat); Pop(S,e); / 如果這個位置的其他四個方向都不滿足, 表示這個位置不可取,取出棧并且留下標(biāo)識 if(e.di4) / 如果其他方向還沒有探索完,繼續(xù)探索下一個方向 e.di+; Push(S,e);curpos=NextPos(e.seat,e.di); while(!StackEmpty(S); return false; int main()int i,j;

43、Seat sta,end;sta.x=1; sta.y=1; end.x=8; end.y=8; MazePath(sta,end); SElemType *b=S.base;printf( 迷宮地圖為 (1 表示通, 0表示不通 ):n); for(i=0;i10;i+) for(j=0;j ,b-seat.x,b-seat.y);+b; printf( 出口 n); scanf(%d,i); return 0; 第四章調(diào)試分析4.1系統(tǒng)運(yùn)行界面系統(tǒng)運(yùn)行后,其運(yùn)行界面如圖4-1所示圖4-1迷宮求解系統(tǒng)運(yùn)行圖第五章 程序設(shè)計結(jié)語5.1 此次課程設(shè)計的總結(jié)本程序是利用非遞歸的方法求出一條走出迷宮

44、的路徑,并將路徑輸出。 首先由用 戶輸入一組二維數(shù)組來組成迷宮, 確認(rèn)后程序自動運(yùn)行, 當(dāng)迷宮有完整路徑可以通過時, 通過這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計,讓我學(xué)到了好多東西。在實際操作過程中犯了一些錯誤卻 讓我有了意外的收獲,所學(xué)數(shù)據(jù)結(jié)構(gòu)理論知識得到了鞏固。通過實際操作,學(xué)會數(shù)據(jù)結(jié) 構(gòu)程序編程的基本步驟、基本方法,開發(fā)了自己的邏輯思維能力,培養(yǎng)了分析問題、解 決問題的能力?,F(xiàn)在終于挨到了寫收獲與體會的時候了,的確令人興奮,看看自己的勞 動成果,好開心。上網(wǎng)查資料、去圖書館查,查相關(guān)的函數(shù),經(jīng)過兩三天的努力,我把 框架弄出來了,可是還有計算難題擺在我的面前,真的是個難題,自從把框架弄好了以 后就沒有進(jìn)展了

45、,眼看一個星期快過去了,我那個急啊,可是急也沒有用。我堅持,終 于工夫不負(fù)有心人, 我參照類似程序, 改改和添添,終于大功告成, 我們歡呼我們?nèi)杠S, 終于相信我們自己是足夠的偉大。圖的遍歷及拓?fù)渑判虻谝徽?概述1.1 開發(fā)設(shè)計的目的和意義本課設(shè)題目要求編寫算法能夠建立有向無環(huán)圖,有向無環(huán)圖,能夠求解該有向無環(huán) 圖的拓?fù)渑判虿⑤敵鰜?,輸出除拓?fù)渑判驍?shù)據(jù)外,還要輸出鄰接表數(shù)據(jù)。為了更好地完 成工程,必須滿足活動之間先后關(guān)系,需要將各活動排一個先后次序即為拓?fù)渑判?。?撲排序可以應(yīng)用于教學(xué)計劃的安排,根據(jù)課程之間的依賴關(guān)系,制定課程安排計劃。按 照用戶輸入的課程數(shù),課程間的先后關(guān)系數(shù)目以及課程間兩兩

46、間的先后關(guān)系,程序執(zhí)行 后會給出符合拓?fù)渑判虻恼n程安排計劃。1.2 需求分析該系統(tǒng)的功能應(yīng)能夠?qū)崿F(xiàn)圖的遍歷以及拓?fù)渑判?,具體分析如下:1. 將圖以合適的方式存儲起來。圖有多種存儲方式,其中最常用的存儲方式有圖的 鄰接矩陣和鄰接表。本人在構(gòu)思時使用鄰接表來建立有向無環(huán)圖,將其存儲起來。2. 求解該有向無環(huán)圖的拓?fù)渑判?,并將其輸出出來。若通過構(gòu)造,建立了一個有向 無環(huán)圖,那么一定可以求出其拓?fù)渑判颍湓肀容^簡單。即統(tǒng)計每個節(jié)點(diǎn)的入度,將 入度為 0 的結(jié)點(diǎn)提取出來,然后再統(tǒng)計剩下的結(jié)點(diǎn)的入度,再次將入度為零的結(jié)點(diǎn)提取 出來,以此類推,這樣就形成了一個序列,這樣的序列就是該圖的拓?fù)渑判蛐蛄小?.

47、拓?fù)渑判蛩惴☉?yīng)能夠處理出現(xiàn)環(huán)的情況。個人在寫程序時,考慮到構(gòu)造圖時,會 有構(gòu)造成有向有環(huán)圖的情況, 應(yīng)該在運(yùn)行程序時, 提醒出來, 然后重新輸入有向無環(huán)圖, 知道輸入正確為止。這樣就有多次構(gòu)造鄰接表的問題,每一次構(gòu)造鄰接表時,都應(yīng)該將 原來錯誤的(不是無環(huán)圖的)鄰接表空間釋放掉,否則,會變得混亂。4. 輸出除拓?fù)渑判蛲?,還要求輸出鄰接表數(shù)據(jù)。由于圖是用鄰接表存儲的,所以很 容易將其鄰接表輸出來。第二章 圖的遍歷及拓?fù)渑判蛳到y(tǒng)概要設(shè)計2.1 系統(tǒng)流程圖根據(jù)程序的總的步驟,擬將整個流程分為三個模塊。三個模塊既相互獨(dú)立又相互聯(lián) 系。具體分析如下:1. 圖像輸入,根據(jù)題目要求,要能夠建立一個有向無環(huán)圖

48、,這就要我們在程序中 去建立??紤]到輸入方式要盡量方便全面,采用輸入弧的方式,輸入每條弧的鏈接的兩 個結(jié)點(diǎn),當(dāng)輸入 -1 時結(jié)束輸入。 這樣再輸入的時候, 與相鄰的兩個結(jié)點(diǎn)的鄰接矩陣對應(yīng) 的位置也做相應(yīng)改變。2. 判斷圖是不是有向無環(huán)圖。當(dāng)圖為有向無環(huán)圖時,則挑選完畢后,隊列應(yīng)該是 滿的,進(jìn)行后續(xù)步驟。對于結(jié)點(diǎn)入隊列的順序,需要借助于 visited 數(shù)組。選取入度為 零的結(jié)點(diǎn),入隊列,調(diào)整 visited 數(shù)組,循環(huán)進(jìn)行。若隊列不滿,則輸入的圖不符合要 求,應(yīng)該重新輸入。在程序中應(yīng)做適當(dāng)提醒,然后自動轉(zhuǎn)模塊 1. ,進(jìn)行圖的重新編輯。3. 拓?fù)渑判?。此時,所輸入的弧應(yīng)該是有向無環(huán)圖了,下面進(jìn)

49、行拓?fù)渑判?。在?斷它是否為無環(huán)圖的過程中已經(jīng)形成了一個滿隊列。 接下來所要做的事情就是循環(huán)出隊 列,按照隊列固有的順序進(jìn)行輸出即可,排序完成。系統(tǒng)的流程圖如圖 2-1 所示。圖2-1系統(tǒng)流程圖2.2功能模塊圖系統(tǒng)的功能模塊圖如圖2-2所示.包括圖的遍歷和拓?fù)渑判騼刹糠?,圖的遍歷中若 是有環(huán)圖則遍歷全部,若是無環(huán)圖則無法遍歷;拓?fù)渑判蚰K則實現(xiàn)拓?fù)渑判蚬δ?。圖2-2系統(tǒng)功能圖第三章 詳細(xì)設(shè)計3.1 系統(tǒng)功能的實現(xiàn)本程序的拓?fù)渑判?,必須在圖的鄰接表已知的情況下。它還有另外一個功能:判斷 一個圖是不是無環(huán)圖。確切的說,不能單純的叫拓?fù)渑判颍紤]它主要的作用,在不 引起誤解的情況下就叫拓?fù)渑判蛩惴?/p>

50、。判斷一個圖是否為有向無環(huán)圖并進(jìn)行拓?fù)渑判?,判定方法有很多種,檢查一個有向 圖是否存在環(huán)要比無向圖復(fù)雜。對于無向圖來說,若深度優(yōu)先遍歷過程中遇到回邊(即 指向已訪問過的頂點(diǎn)的邊) ,則必存在環(huán);而對于有向圖來說,這條回邊有可能指向深 度優(yōu)先森林中另一棵生成樹上頂點(diǎn)的弧。 但是,如果從有向圖上某個頂點(diǎn) v 出發(fā)的遍歷, 在dfs(v)結(jié)束之前出現(xiàn)一條從頂點(diǎn)u到頂點(diǎn)V的回邊,由于u在生成樹上是V的子孫, 則有向圖中必定存在包含頂點(diǎn) v 和 u 的環(huán)。另一種判斷是否有環(huán)的方法則顯得簡單的多,尤其是對于本題目來說,由于本題要 求是對有向無環(huán)圖進(jìn)行拓?fù)渑判?,其主要方法是將入度為零的結(jié)點(diǎn)依次輸出來,知道圖 的所有定點(diǎn)全部輸出為止。 那么若圖為有環(huán)圖, 在環(huán)上的結(jié)點(diǎn)在其他結(jié)點(diǎn)都選擇出來后, 入度都不為零,即無法被輸出出來。那么就可以認(rèn)為按照拓?fù)渑判虻姆?/p>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論