摘 要:學(xué)生成績(jī)管理系統(tǒng)是學(xué)校用于管理學(xué)生成績(jī)的一個(gè)很重要的工具,設(shè)計(jì)學(xué)生管理系統(tǒng)是對(duì)C語言多方面知識(shí)的綜合訓(xùn)練。本文將運(yùn)用C語言的知識(shí)建立一個(gè)簡(jiǎn)易的學(xué)生管理系統(tǒng),旨在提高C語言編程能力以及通過編程解決實(shí)際問題的能力。該系統(tǒng)主要采用了結(jié)構(gòu)體來建立和存儲(chǔ)學(xué)生的學(xué)號(hào)、成績(jī)等個(gè)人信息,并用鏈表與指針的知識(shí),結(jié)合冒泡排序的思想方法,設(shè)計(jì)函數(shù),使其具有新建、排序、查詢、插入與刪除等多個(gè)功能。同時(shí),該系統(tǒng)操作簡(jiǎn)便,只需用戶輸入學(xué)生的相關(guān)信息,并輸入所選操作的序號(hào)即可進(jìn)行相關(guān)操作。
關(guān)鍵詞:學(xué)生成績(jī)管理;C語言;程序設(shè)計(jì);C-Free
一、設(shè)計(jì)目的
1.鞏固和加深對(duì)c語言知識(shí)的理解和掌握
2.提高利用c語言進(jìn)行編程和運(yùn)行的能力
3.學(xué)會(huì)利用編程解決實(shí)際問題
二、功能模塊介紹
本學(xué)生成績(jī)管理系統(tǒng)主要包括以下幾點(diǎn)功能:
1.新建數(shù)據(jù)2.添加數(shù)據(jù)3.刪除數(shù)據(jù)4.排序5.查詢6.退出
其中新建數(shù)據(jù)用于用戶輸入學(xué)生的個(gè)人信息(學(xué)號(hào)和名字)及成績(jī)(數(shù)學(xué)和程序設(shè)計(jì)兩科成績(jī));添加數(shù)據(jù)和刪除數(shù)據(jù)便于用戶對(duì)數(shù)據(jù)的增刪;而排序(包括數(shù)學(xué)成績(jī)、程序設(shè)計(jì)成績(jī)以及總分成績(jī))可以通過不同的排序依據(jù)使用戶更方便了解學(xué)生各科總體水平以及高分和低分;查詢則包括按學(xué)號(hào)查詢、姓名查詢、成績(jī)查詢,其中成績(jī)查詢還有統(tǒng)計(jì)的功能,即輸入指定分?jǐn)?shù),程序運(yùn)行后顯示該科目中考試成績(jī)大于等于指定分?jǐn)?shù)的學(xué)生并統(tǒng)計(jì)滿足條件的人數(shù)。
三、數(shù)據(jù)結(jié)構(gòu)描述
本系統(tǒng)采用結(jié)構(gòu)體的形式和鏈表的數(shù)據(jù)結(jié)構(gòu)建立學(xué)生的個(gè)人信息檔案,主要內(nèi)容如下:
struct student
{
char num[20];
char name[20];
int math_score;
int program_score;
int sum_score;
struct student *next;
}stu[N];
其中學(xué)號(hào)和姓名為字符串類型,方便輸入;成績(jī)?yōu)檎?,?shù)學(xué)成績(jī)和程序設(shè)計(jì)成績(jī)由用戶輸入,總分由系統(tǒng)根據(jù)用戶所輸計(jì)算;N為符號(hào)常量和全局變量,用戶可隨時(shí)改變學(xué)生人數(shù)。采用結(jié)構(gòu)體的形式,適應(yīng)了學(xué)生數(shù)據(jù)類型多樣性的特點(diǎn),鏈表類型的數(shù)據(jù)結(jié)構(gòu)可以方便的插入或刪除數(shù)據(jù),較為靈活方便。
四、函數(shù)程序介紹
程序按照系統(tǒng)功能分為七大模塊,分別是:主函數(shù),新建數(shù)據(jù)函數(shù),添加數(shù)據(jù)函數(shù),刪除數(shù)據(jù)函數(shù),排序函數(shù),查詢函數(shù)以及輸出函數(shù)。
主函數(shù):在主函數(shù)中對(duì)各函數(shù)進(jìn)行聲明,顯示系統(tǒng)主界面,根據(jù)用戶的不同選擇調(diào)用不同的函數(shù)。同時(shí)對(duì)主函數(shù)采用do while的循環(huán),使系統(tǒng)執(zhí)行完一次操作后自動(dòng)跳出主菜單,方便用戶使用。
新建函數(shù):用malloc函數(shù)創(chuàng)建鏈表空間,提示用戶輸入學(xué)生數(shù)據(jù),讀入鏈表。
添加數(shù)據(jù)函數(shù):提示用戶輸入添加的數(shù)據(jù),根據(jù)學(xué)號(hào)從小到大排序的原則,用strcmp函數(shù)對(duì)添加的學(xué)號(hào)和已有的學(xué)號(hào)比較,定位后用鏈表指針插入。完成后提示添加數(shù)據(jù)成功。該函數(shù)有兩個(gè)參數(shù),head為已創(chuàng)建的鏈表的頭指針,stud是用戶要插入的數(shù)據(jù)的指針。
刪除數(shù)據(jù)函數(shù):與添加數(shù)據(jù)類似,讓用戶輸入想要?jiǎng)h除的數(shù)據(jù)的學(xué)號(hào),用strcmp函數(shù)對(duì)想刪除的學(xué)號(hào)和已有的學(xué)號(hào)比較,相等時(shí)通過改變指針方向同時(shí)用free函數(shù)釋放所刪除數(shù)據(jù)的空間實(shí)現(xiàn)刪除功能。完成后提示刪除數(shù)據(jù)成功。該函數(shù)有兩個(gè)參數(shù),head為已創(chuàng)建的鏈表的頭指針,num是用戶想要?jiǎng)h除的數(shù)據(jù)的學(xué)號(hào),用num與已有數(shù)據(jù)的學(xué)號(hào)進(jìn)行比對(duì)、定位。
排序函數(shù):結(jié)合了冒泡排序和鏈表,將學(xué)生的成績(jī)降序排列,最后用輸出函數(shù)輸出。該函數(shù)的參數(shù)是已有鏈表的頭指針,將鏈表排序后,仍返回頭指針,用輸出函數(shù)輸出。
查詢函數(shù):按學(xué)號(hào)和姓名查詢時(shí),用strcmp函數(shù)對(duì)字符串進(jìn)行比較,相等時(shí)輸入該學(xué)號(hào)或姓名所對(duì)應(yīng)的學(xué)生的全部信息;按成績(jī)查詢函數(shù),在前兩個(gè)的基礎(chǔ)上,添加了統(tǒng)計(jì)功能。因此定義一個(gè)計(jì)算個(gè)數(shù)的變量,在循環(huán)結(jié)束后輸出。該函數(shù)的參數(shù)是已有鏈表的頭指針,根據(jù)用戶的查詢要求,找到符合要求的數(shù)據(jù)后,返回頭指針,用輸出函數(shù)輸出。
輸出函數(shù):所有子函數(shù)的返回值都由輸出函數(shù)輸出。輸出函數(shù)有兩個(gè),一個(gè)是用循環(huán)輸出鏈表所有數(shù)據(jù),用于新建數(shù)據(jù)和排序結(jié)果的輸出;一個(gè)只輸出鏈表中一個(gè)成員的數(shù)據(jù),用于添加、刪除數(shù)據(jù)以及查詢函數(shù)的返回值的輸出。其他函數(shù)通過返回頭指針,傳到該函數(shù)的參數(shù)head中,并輸出鏈表中的信息。
五、系統(tǒng)調(diào)試的重點(diǎn)與難點(diǎn)
該系統(tǒng)主要運(yùn)用了結(jié)構(gòu)體、函數(shù)、動(dòng)態(tài)鏈表與指針的知識(shí),都屬于C語言中較難的知識(shí),也是運(yùn)用C語言編程的必備知識(shí),同時(shí)對(duì)于冒泡排序的思想與系統(tǒng)的整體設(shè)計(jì)也要有一個(gè)清晰的結(jié)構(gòu)框架,這些都是這個(gè)系統(tǒng)的核心部分。
以下是在調(diào)試中遇到的具體問題(節(jié)選):
①輸入函數(shù)中輸出的結(jié)構(gòu)體指針?biāo)赶虻膬?nèi)容(非數(shù)組)沒有加取地址符,導(dǎo)致程序停止運(yùn)行;
②輸出函數(shù)中輸出的結(jié)構(gòu)體指針?biāo)赶虻膬?nèi)容(非數(shù)組)沒有加取地址符,導(dǎo)致輸出一串亂碼;
③插入函數(shù)沒有用循環(huán)而是選擇進(jìn)行數(shù)據(jù)定位,導(dǎo)致函數(shù)功能無法實(shí)現(xiàn);
④忽略了學(xué)號(hào)和姓名是字符數(shù)組,直接用等于號(hào)進(jìn)行賦值而不是strcpy或strcmp等字符串處理函數(shù),編譯過程出現(xiàn)錯(cuò)誤;
六、系統(tǒng)設(shè)計(jì)的體會(huì)與總結(jié)
通過做這個(gè)學(xué)生成績(jī)管理系統(tǒng),我對(duì)結(jié)構(gòu)體、鏈表、指針、函數(shù)等知識(shí)有了更深的領(lǐng)悟。
手指在鍵盤上飛快劃過,看著一個(gè)個(gè)字符,一條條程序語句,一塊塊函數(shù)模塊從屏幕中閃現(xiàn);與此同時(shí),一次次錯(cuò)誤,一次次盯著代碼找原因,一次次失敗也讓人接近崩潰,但當(dāng)一個(gè)函數(shù)成功實(shí)現(xiàn)某種功能,或者某個(gè)很難發(fā)現(xiàn)的錯(cuò)誤在經(jīng)歷了無數(shù)次的檢查與校對(duì)終于被發(fā)現(xiàn)并被正確改正后,那種喜悅感與成就感是別人無法體會(huì)的。
當(dāng)然,由于本人所學(xué)有限,做的成績(jī)系統(tǒng)也只是初步的,功能不夠齊全,界面也不夠完善。以后會(huì)學(xué)到更難的知識(shí),遇到更復(fù)雜的編程系統(tǒng),希望以后也能不急不躁,耐心編碼。
作者簡(jiǎn)介
唐葉爾(1999—),女,漢族,浙江溫州人,學(xué)生,本科,浙江師范大學(xué)初陽學(xué)院,軟件工程專業(yè)。
(作者單位:浙江師范大學(xué)初陽學(xué)院)