要求設(shè)計的管理系統(tǒng)能夠?qū)崿F(xiàn)以下功能:
1.每一條記錄包括一個學(xué)生的學(xué)號、姓名、3個成績(平時成績、作業(yè)成績耗帕、考試成績)
2.成績錄入功能:(成績信息用文件保存,可以一次完成若干條記錄)
3.成績信息顯示瀏覽功能袱贮,完成全部學(xué)生記錄的顯示仿便。
4.查詢功能:完成按姓名查找學(xué)生記錄,并顯示
5.成績信息的刪除:按學(xué)號進行刪除某學(xué)生的成績
6.排序功能:按學(xué)生總成績進行排序
1.首先字柠,列出所需要的頭文件以及聲明所需要的函數(shù)探越,細心的同學(xué)會發(fā)現(xiàn)狡赐,就算是數(shù)字窑业,也用了字符串,方便輸入以及存取信息枕屉。
2.下面可以直接寫主函數(shù)常柄,也可以在聲明函數(shù)的時候,直接定義函數(shù)搀擂,在最后寫主函數(shù)西潘。
效果圖如下:
主函數(shù)菜單包括了題目中的所需信息,在每個選項的函數(shù)里都加了mei()這個函數(shù)哨颂,這個函數(shù)只是為了有一個這樣的效果
這個就是為了每次進行一次操作之后喷市,有一個進入成績管理系統(tǒng)的提示信息。
3.下面就是函數(shù)部分了威恼,從第一個開始品姓,添加學(xué)生,如果你在成績管理系統(tǒng)菜單選1箫措,就會進入添加學(xué)生的界面腹备,按照提示輸入對應(yīng)的信息即可。在這個函數(shù)中斤蔓,有學(xué)生數(shù)量的計數(shù)器植酥,也有循環(huán),直到在相應(yīng)位置輸入n即可跳出循環(huán)。
4.按照學(xué)號刪除學(xué)生友驮,這個需要寫好幾個函數(shù)漂羊,首先,提示用戶輸入想要刪除學(xué)生的學(xué)號卸留,然后拨与,根據(jù)學(xué)號與結(jié)構(gòu)體數(shù)組想對比,找出來該學(xué)號所對應(yīng)的結(jié)構(gòu)體數(shù)組下標艾猜。再呈現(xiàn)出該學(xué)生信息买喧,詢問用戶是否確認刪除,防止用戶誤刪信息匆赃。刪除信息也可以使用鏈表淤毛,對指針要求較高,后續(xù)會推出算柳。
根據(jù)下面這個函數(shù)可以找到該學(xué)號對應(yīng)的數(shù)組下標低淡,從而可以輸出該下標對應(yīng)的學(xué)生信息(Stu_display函數(shù))
5.成績信息顯示瀏覽功能,完成全部學(xué)生記錄的顯示瞬项。在進行學(xué)生的添加以及刪除之后蔗蹋,這個時候,已經(jīng)有了數(shù)據(jù)信息囱淋,就可以去顯示猪杭,顯示的方法很簡單,按照數(shù)組循環(huán)輸出各項信息即可妥衣。
6.查詢功能:完成按姓名查找學(xué)生記錄皂吮,并顯示。跟刪除學(xué)生類似税手,找出用戶輸入的名字信息蜂筹,去對照數(shù)組中的name,如果相同就返回對應(yīng)的數(shù)組下標芦倒。進行學(xué)生信息的顯示艺挪。
7.排序功能:按學(xué)生總成績進行排序,排序的方法很多兵扬,我在這就放一個最簡單的冒泡排序麻裳。共有九大排序方法,喜歡的話可以去研究一下周霉,其他的方法都比冒泡要快的多掂器。
8.下面就是文件操作了。寫兩個函數(shù)俱箱,一個寫入国瓮,一個讀出。如果第一次運行該程序,尚未創(chuàng)建你的文件乃摹,那么禁漓,在你的寫入函數(shù)中就應(yīng)該考慮到這種情況,在沒有文件的時候孵睬,直接新建播歼。以后再運行就可以直接讀取了。輸入學(xué)生信息掰读,你可以按照菜單中的選項去執(zhí)行輸入信息秘狞,也可以你在那個自己創(chuàng)建的txt中,按照剛才存下來的那種格式蹈集,直接寫烁试,最后程序中,也是可以讀取你的信息的拢肆。
注意排序后的數(shù)據(jù)必須放到一個新的txt文件里减响。防止下次讀取的是排序后的文件。但是添加郭怪,刪除支示,你必須還存到第一個學(xué)生信息文件中(未排序)
一次輸入就存到文件里了,下次直接讀取就行鄙才,而且讀取根寫入是對應(yīng)的颂鸿,就不用考慮那么多細節(jié)了。
這樣說可能有點不清楚咒循,直接上代碼吧据途。
首先,介紹幾個函數(shù)
(1)gets()
char*fgets(char*buf,intbufsize, FILE *stream);
*buf: 字符型指針叙甸,指向用來存儲所得數(shù)據(jù)的地址。
bufsize: 整型數(shù)據(jù)位衩,指明存儲數(shù)據(jù)的大小裆蒸。
*stream: 文件結(jié)構(gòu)體指針,將要讀取的文件流糖驴。
返回值
成功僚祷,則返回第一個參數(shù)buf;
在讀字符時遇到end-of-file贮缕,則eof指示器被設(shè)置辙谜,如果還沒讀入任何字符就遇到這種情況,則buf保持原來的內(nèi)容感昼,返回NULL装哆;
如果發(fā)生讀入錯誤,error指示器被設(shè)置,返回NULL蜕琴,buf的值可能被改變萍桌。
(2)fread
size_tfread (void* ptr,size_tsize,size_tcount, FILE * stream );
其中,ptr:指向保存結(jié)果的指針十籍;size:每個數(shù)據(jù)類型的大斜鹂濉谨读;count:數(shù)據(jù)的個數(shù);stream:文件指針
函數(shù)返回讀取數(shù)據(jù)的個數(shù)藕施。
(3)fwrite
size_tfwrite (constvoid* ptr,size_tsize,size_tcount, FILE * stream );
其中,ptr:指向保存數(shù)據(jù)的指針凸郑;size:每個數(shù)據(jù)類型的大星Π;count:數(shù)據(jù)的個數(shù)线椰;stream:文件指針
函數(shù)返回寫入數(shù)據(jù)的個數(shù)胞谈。
注意!:┯洹烦绳!
寫操作fwrite()后必須關(guān)閉流,不關(guān)閉流的情況下配紫,每次讀或?qū)憯?shù)據(jù)后径密,文件指針都會指向下一個待寫或者讀數(shù)據(jù)位置的指針。
(4)fopen()
fopen函數(shù)是在當(dāng)前目錄下打開一個文件躺孝,其調(diào)用的一般形式為:
文件指針名=fopen(文件名,使用文件方式);
“文件指針名”必須是被說明為FILE 類型的指針變量享扔;
“文件名”是被打開文件的文件名;
“使用文件方式”是指文件的類型和操作要求,可參考c prime plus 第十三章文件操作植袍,此處不贅述惧眠。
“文件名”是字符串常量或字符數(shù)組。
另有:標準輸入文件(鍵盤)于个,標準輸出文件(顯示器)氛魁,標準出錯輸出(出錯信息)是由系統(tǒng)打開的,可直接使用厅篓。
讀取到文件的信息有數(shù)量和各項信息秀存。這是已保存的文件,從文件中讀取出來的信息
排序后的文件依然按照上面的寫入函數(shù)一樣羽氮,只不過文件名需要改動一下(只需要改動文件名盎蛄础)
想要成為一個優(yōu)秀的、有能力程序員档押,做軟件開發(fā)的話澳盐,就來學(xué)習(xí)C/C++吧祈纯,而且學(xué)習(xí)編程的話有一個學(xué)習(xí)的氛圍跟交流圈子特別重要!這里我推薦一個C語言C++交流扣裙洞就,--先八七零九盆繁;后63251,不管你是大牛還是小白旬蟋,大家都一起成長進步油昂。
有同學(xué)會問,這樣就可以讀取了嗎倾贰?是的冕碟。注意開頭的主函數(shù)中調(diào)用寫入函數(shù)和讀出函數(shù)的地方,好好理解匆浙,并運用一下吧安寺。比如說寫入函數(shù),只要你在哪里調(diào)用首尼,之前所有輸入的信息都會保存到文件里挑庶。讀取信息的時候,是按照結(jié)構(gòu)體數(shù)組一個一個讀取软能,采用循環(huán)即可迎捺。