數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-學(xué)生成績管理系統(tǒng).doc
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-學(xué)生成績管理系統(tǒng).doc》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告-學(xué)生成績管理系統(tǒng).doc(37頁珍藏版)》請在裝配圖網(wǎng)上搜索。
目 錄 一、問題描述..........................................2 二、基本要求..........................................3 三、數(shù)據(jù)結(jié)構(gòu)設(shè)計......................................4 四、軟件模塊結(jié)構(gòu)圖....................................5 五、程序設(shè)計思想......................................7 六、程序流程圖.......................................11 7、 源程序...........................................16 八、調(diào)試分析.........................................30 九、測試數(shù)據(jù).........................................31 十、用戶使用手冊.....................................34 十一、心得體會.......................................35 一、問題描述 在學(xué)生成績管理中,經(jīng)常會遇到求平均成績,統(tǒng)計不及格學(xué)生成績,統(tǒng)計優(yōu)秀學(xué)生人數(shù),以及按成績對學(xué)生進(jìn)行排名等?,F(xiàn)假設(shè)有某個班級的若干名學(xué)生,每個學(xué)生都考試完成了4門課程,試對所有學(xué)生的成績完成以下工作: (1)求每門課程的平均成績。 (2)輸出所有有不及格課程的學(xué)生的學(xué)號、姓名、全部課程的成績、平均成績。 (3)輸出所有平均分在90分以上(含90分)的學(xué)生學(xué)號、姓名。 (4)對4門課程中的任何一門,可隨意抽取1門按學(xué)生成績進(jìn)行排序。 二、基本要求 對學(xué)生信息的輸入完成后,實現(xiàn)如下功能:1、對學(xué)生信息的查找、插入、刪除、修改。2、分別輸出優(yōu)秀學(xué)生和不及格學(xué)生的信息。3、顯示每們課程的平均成績。4、任意抽取一門課程后,可以按該課程學(xué)生成績對學(xué)生信息進(jìn)行排序。 三、數(shù)據(jù)結(jié)構(gòu)的設(shè)計 為了對學(xué)生信息進(jìn)行統(tǒng)一操作,使用了結(jié)構(gòu)體這一數(shù)據(jù)結(jié)構(gòu),學(xué)生的各項數(shù)據(jù)信息都能用結(jié)構(gòu)體來表示,具體如下: struct stu {int num;/*學(xué)號,整型變量*/ char name[50];/*姓名,長度為50的字符串?dāng)?shù)組*/ char classes[50]/*班級名稱,長度為50的字符串?dāng)?shù)組*/; double gsps_score;/*高等數(shù)學(xué)平時成績,雙精度實型變量*/ double gsks_score;/*高等數(shù)學(xué)考試成績,雙精度實型變量*/ double gszh_score;/*高等數(shù)學(xué)綜合成績,雙精度實型變量*/ double dlps_score;/*電路理論平時成績,雙精度實型變量*/ double dlks_score;/*電路理論考試成績,雙精度實型變量*/ double dlzh_score;/*電路理論綜合成績,雙精度實型變量*/ double yyps_score;/*英語平時成績,雙精度實型變量*/ double yyks_score;/*英語考試成績,雙精度實型變量*/ double yyzh_score;/*英語綜合成績,雙精度實型變量*/ double wlps_score;/*物理平時成績,雙精度實型變量*/ double wlks_score;/*物理考試成績,雙精度實型變量*/ double wlzh_score;/*物理綜合成績,雙精度實型變量*/ double pj_score;/*平均成績,雙精度實型變量*/ }student[1000];/*最多存儲1000個學(xué)生數(shù)據(jù)*/ 該結(jié)構(gòu)體數(shù)據(jù)定義為全局變量。 四、軟件模塊結(jié)構(gòu)圖 每門課程的平均成績 主菜單控制模塊 學(xué)生信息錄入模塊 學(xué)生信息查詢模塊 學(xué)生信息修改模塊 學(xué)生信息刪除模塊 學(xué)生信息插入模塊 學(xué)生信息輸出模塊 按學(xué)號查詢學(xué)生信息 按姓名查詢學(xué)生信息 輸出優(yōu)秀學(xué)生相關(guān)信息 輸出不及格學(xué)生信息 課程成績統(tǒng)計模塊 按單科成績排名次 模塊功能描述: a.主菜單控制模塊:主菜單直接控制七個模塊(學(xué)生信息輸出模塊的兩個子模塊直接歸主菜單控制),在各模塊間起到紐帶的作用。在主菜單,可以通過選擇進(jìn)入其他模塊,其他模塊運(yùn)行結(jié)束后也可回到主菜單繼續(xù)選擇。 b.學(xué)生信息錄入模塊:循環(huán)輸入學(xué)生信息,建立臨時的學(xué)生信息數(shù)據(jù)庫。 c.學(xué)生信息查詢模塊:可選擇按學(xué)號或者按姓名查詢學(xué)生信息,如學(xué)生信息不存在則給出提示。 d.學(xué)生信息修改模塊:查找到要修改的學(xué)生信息后,可對該學(xué)生的信息進(jìn)行逐項修改。 e.學(xué)生信息刪除模塊:查找到要刪除的學(xué)生信息后,可對其進(jìn)行刪除操作。 f.學(xué)生信息插入模塊:在數(shù)據(jù)庫末尾插入學(xué)生信息,逐項輸入要插入的學(xué)生信息即可。 g.學(xué)生信息輸出模塊:輸出優(yōu)秀學(xué)生信息模塊能夠輸出優(yōu)秀學(xué)生(平均成績大于等90分)的學(xué)號和姓名;輸出不及格學(xué)生信息模塊能夠輸出不及格學(xué)生的相關(guān)信息。 h.課程成績統(tǒng)計模塊:可以得到每門課程的平均成績,還可以任意抽取一門課按單科成績排定學(xué)生名次。 五、程序設(shè)計思想 結(jié)構(gòu)化的程序設(shè)計主要靠設(shè)計和調(diào)用各模塊的函數(shù)來實現(xiàn)。本程序設(shè)計了多個函數(shù),每個函數(shù)自身能完成一個任務(wù),有的函數(shù)和別的函數(shù)結(jié)合能完成更大的任務(wù)。每一個模塊功能的實現(xiàn)其實就是對函數(shù)的調(diào)用,本說明首先介紹本程序所涉及的子函數(shù),再介紹主函數(shù),最后介紹程序整體的實現(xiàn)過程。 1.void Inputfun() 此函數(shù)較特別,它只進(jìn)行輸入操作,但由于此函數(shù)所包含的語句較長且需要被其他三個函數(shù)使用,為方便調(diào)用單寫了一個函數(shù)。此函數(shù)在源程序中放在最前,所以在此先作說明。此函數(shù)可細(xì)分為11個小塊,用來輸入學(xué)生的基本數(shù)據(jù)。每小塊的結(jié)構(gòu)基本相同即for(;;){基本語句 +一個continue語句+基本語句+一個break語句}之所以用這個結(jié)構(gòu)為了使輸入的數(shù)據(jù)更加正規(guī)。比如在分?jǐn)?shù)的輸入中就限定了只能輸入0至100之間的數(shù)值,這也符合分?jǐn)?shù)錄入規(guī)則。需要特別注意的是,這個函數(shù)完成了本程序中要做的兩個計算。其一是在每門課的考試試成績輸入后完成了對這門課的綜合成績的加權(quán)計算(考試成績*0.7+平時成績*0.3);其二是在最后一門課程的綜合成績算出后,計算了該學(xué)生四門課的平均成績。 2.void Getinformation() 此函數(shù)用來錄入學(xué)生信息。它調(diào)用了void Inputfun()函數(shù),其實它的主體部分就是void Inputfun()函數(shù)。這函數(shù)還用了一個for循環(huán)以達(dá)到循環(huán)輸入的目的。 3.int Searchbynum (int no)\int Searchbyname (char na[50]) 這是兩個“兄弟函數(shù)”,是按學(xué)號查找和按姓名查詢模塊中的兩個重要函數(shù)。主要功能是根據(jù)用戶輸入的學(xué)號\姓名返回改學(xué)生所在的的數(shù)組下標(biāo)。利用for循環(huán)嵌套一個if語句實現(xiàn),若找到學(xué)生該學(xué)生信息就返回數(shù)組下標(biāo),若找不到就返回-1。 4.void Seekinformation()\void Printinformation(int x) 這兩個函數(shù)關(guān)系緊密,所以一起介紹。void Seekinformation()函數(shù)利用for循環(huán)和if語句使查找中能夠使用學(xué)號和姓名兩種方式。如源程序所示,在用if語句確定了查找方式后先后調(diào)用了int Searchbynum (int no)\int Searchbyname (char na[50])和void Printinformation(int x)兩個函數(shù),根據(jù)int Searchbynum (int no)\int Searchbyname (char na[50])返回的數(shù)組下標(biāo),運(yùn)用void Printinformation(int x)輸出所查詢的內(nèi)容。所以 int Searchbynum (int no)\int Searchbyname (char na[50])\void Seekinformation()\void Printinformation(int x)這四個函數(shù)是查詢模塊的四個聯(lián)系緊密的重要函數(shù),在它們的共同作用下查詢模塊的功能得以實現(xiàn)。 5.void Modifyinformation() 此函數(shù)用于修改學(xué)生信息?;驹砭褪怯幂斎氲男聰?shù)據(jù)覆蓋原來的老數(shù)據(jù),達(dá)到修改的目的。本函數(shù)還調(diào)用了查找模塊的函數(shù),使修改前能按學(xué)號或姓名找到要修改的學(xué)生信息。修改過程中調(diào)用了Inputfun()函數(shù) 6.void Deleteinformation() 此函數(shù)用于刪除學(xué)生信息。同樣調(diào)用了查找模塊的函數(shù)。刪除模塊的關(guān)鍵語句是for (i=x;i<999;i++) student[i]=student[i+1];從要刪除的那一個數(shù)據(jù)開始,用后一個數(shù)據(jù)覆蓋它,一直循環(huán)到最后,相當(dāng)于把開始的第一個數(shù)據(jù)刪除了。 7.void Insertinformaton() 此函數(shù)用于插入學(xué)生數(shù)據(jù)。由于沒有用鏈表,所以選擇插入在最后一個有效數(shù)據(jù)之后。本函數(shù)運(yùn)用if(student[j].num==0)這個語句找到了最后一個有效數(shù)據(jù)之后的數(shù)組下標(biāo)j,然后將數(shù)據(jù)輸入到student[j]中,便完成的了插入。插入過程中,調(diào)用了Inputfun()函數(shù)。 8.void Showthefail() 此函數(shù)用于顯示不及格學(xué)生的信息。能夠按要求輸出不及格學(xué)生的學(xué)號、姓名、各科成績以及平均成績。首先用這條if語句搜索該學(xué)生是否有成績不及格,當(dāng)四門課中至少有一門不及格時會輸出該學(xué)生的相關(guān)信息。 9.void Stu_p() 此函數(shù)用于輸出優(yōu)秀學(xué)生(平均成績大于90分)的信息,利用for循環(huán)和條件判斷句輸出找出相應(yīng)的學(xué)生輸出相關(guān)信息。 10.void Chengjitongji()此函數(shù)用于按要求統(tǒng)計成績。有分別統(tǒng)計每門課的平均成績的功能;還能夠按每門課程的成績對學(xué)生進(jìn)行排序,使學(xué)生在該門課的表現(xiàn)一目了然。排序中用到了冒泡排序的方法。 9. void main() 下面對主函數(shù)作簡要說明。Switch語句是函數(shù)的主體: switch(c)/*利用switch語句集成各個功能函數(shù)*/ { case 1 : Getinformation();break;/*獲得學(xué)生信息*/ case 2 : Seekinformation();break;/*查找學(xué)生信息*/ case 3 : Modifyinformation();break;/*修改學(xué)生信息*/ case 4 : Deleteinformation();break;/*刪除學(xué)生信息*/ case 5 : Insertinformaton();break;/*插入學(xué)生信息*/ case 6 : Stu_p();break;/*顯示優(yōu)秀學(xué)生信息*/ case 7 : Showthefail();break;/*顯示不及格學(xué)生信息*/ case 8 : Chengjitongji();break;/*課程成績的統(tǒng)計*/ case 0 : exit(0);/*退出*/ default: break; } default: break;} 通過一個數(shù)值輸入函數(shù),使用戶在簡單的數(shù)值輸入后就可輕松調(diào)用各模塊。 還使用了for (;;)使各模塊能夠循環(huán)調(diào)用。 11.最后對程序的整體實現(xiàn)過程作個簡要說明。源程序中多處運(yùn)用continue和break語句,同時配合scanf函數(shù)和if條件判斷語句,使用戶能夠根據(jù)提示通過簡單的數(shù)值輸入來選擇下一步該做什么。中文界面,用戶很容易根據(jù)提示上手,簡單易用。 六、程序流程圖 開始 系統(tǒng)啟動口令輸入a=? a=1? N 口令錯誤,系統(tǒng)即將關(guān)閉! Y 進(jìn)入選擇菜單 N c=1? Y 錄入學(xué)生信息 c=2? N Y 查找學(xué)生信息 c=3? N Y 修改學(xué)生信息 N c=4? 刪除學(xué)生信息 c=5? Y N c=6? N Y 插入學(xué)生信息 c=7? Y 優(yōu)秀學(xué)生信息 N 不及格學(xué)生信息 c=8? N Y Y N 課程成績統(tǒng)計 N 結(jié)束 以上為主函數(shù)流程圖,主函數(shù)下八個供選擇的模塊只是簡單的用一個執(zhí)行框表示。現(xiàn)分別畫出八個模塊的流程圖: 1、 錄入學(xué)生成績: 開始 輸入學(xué)生信息及成績 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0 結(jié)束 開始 2、查找學(xué)生信息: 按學(xué)號查找請按1, 按姓名查找請按2 2 1 輸出相應(yīng)姓名所對應(yīng)的信息 輸出相應(yīng)學(xué)號所對應(yīng)的信息 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0 結(jié)束 0 3、修改學(xué)生信息: 開始 調(diào)用查找函數(shù)找到要修改的信息 輸入修改后的信息 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0 結(jié)束 4、刪除學(xué)生信息: 開始 調(diào)用查找函數(shù)找到要刪除的信息 是否刪除?是按1,否按0 1 刪除成功 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 結(jié)束 0 開始 5、插入學(xué)生信息: 輸入要插入的信息 是否繼續(xù)?繼續(xù)按1,結(jié)束按0 1 0 結(jié)束 6、優(yōu)秀學(xué)生信息: 開始 學(xué)生平均成績是否大于等于90? N Y 輸出該生學(xué)號和姓名 Y 檢索完畢? N 結(jié)束 Y 7、 不及格學(xué)生信息: 開始 判斷該生是否有不及格科目 N Y 輸出該該生學(xué)信息 檢索完畢? N Y 結(jié)束 8、 成績統(tǒng)計模塊: 開始 每門課程平均成績請按1,單科成績排名請按2 1 2 輸出每門課程平均成績 選擇要排名的科目 輸出該科成績排名 結(jié)束 七、源程序 #include- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)結(jié)構(gòu) 課程設(shè)計 報告 學(xué)生 成績管理系統(tǒng)
鏈接地址:http://www.820124.com/p-6526172.html