學(xué)生成績(jī)管理系統(tǒng)實(shí)訓(xùn)報(bào)告_第1頁(yè)
學(xué)生成績(jī)管理系統(tǒng)實(shí)訓(xùn)報(bào)告_第2頁(yè)
學(xué)生成績(jī)管理系統(tǒng)實(shí)訓(xùn)報(bào)告_第3頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、鄭州輕工業(yè)學(xué)院實(shí)訓(xùn)報(bào)告實(shí)訓(xùn)名稱(chēng):學(xué)生成績(jī)管理系統(tǒng)姓 名:褚超院(系):軟件學(xué)院專(zhuān)業(yè)班級(jí):網(wǎng)絡(luò)軟件開(kāi)發(fā) 14-01班學(xué) 號(hào):0103指導(dǎo)教師:孫海燕成 績(jī):時(shí)間:2015年1月5日至2015年1月9日目錄實(shí)訓(xùn)任務(wù)書(shū) 實(shí)訓(xùn)進(jìn)度日歷 實(shí)訓(xùn)報(bào)告實(shí)訓(xùn)感想實(shí)訓(xùn)任務(wù)書(shū)一、題目“學(xué)生成績(jī)管理系統(tǒng)”設(shè)計(jì)二、學(xué)生信息專(zhuān)業(yè)學(xué)號(hào)姓名三、用戶(hù)需求及約束條件1用C語(yǔ)言實(shí)現(xiàn) “學(xué)生成績(jī)管理系統(tǒng)”。2、設(shè)計(jì)“學(xué)生成績(jī)管理系統(tǒng)”的用戶(hù)界面,系統(tǒng)啟動(dòng)進(jìn)入后,只能通過(guò)界面菜單指令才能退出。3、“學(xué)生成績(jī)管理系統(tǒng)”具有以下功能:1)系統(tǒng)啟動(dòng)后,彈出一個(gè)用戶(hù)界面,能實(shí)現(xiàn)人機(jī)交互的功能。而且只能通過(guò)界面菜單命令實(shí)現(xiàn)各種功能(包括系統(tǒng)退出

2、功能)。2) 錄入學(xué)生成績(jī)(信息有:班級(jí)、姓名、學(xué)號(hào)、五門(mén)課程成績(jī));3)計(jì)算每門(mén)功課的平均成績(jī)和學(xué)生五門(mén)功課的平均成績(jī)并存檔。下面的功能必須是第 3)項(xiàng)功能完成以后才能進(jìn)行。4)輸出學(xué)生的信息和對(duì)應(yīng)的原始成績(jī)以及平均成績(jī);5)按平均成績(jī)進(jìn)行排序,輸出排序后的學(xué)生信息以及對(duì)應(yīng)的課程成績(jī)和平均成績(jī)。6)對(duì)成績(jī)修改,分別有兩種模式,一種是按學(xué)號(hào)查找后進(jìn)行修改;另一種是按姓名查找后進(jìn)行修改;修改后重新排序?qū)W生的順序,并輸出學(xué)生信息和對(duì)應(yīng)課程成績(jī)和平均成績(jī)。7)增補(bǔ)遺漏的學(xué)生以及對(duì)應(yīng)的信息和對(duì)應(yīng)的課程成績(jī),并計(jì)算出平均成績(jī),增補(bǔ)以后重新排序?qū)W生順序,并輸出學(xué)生信息和對(duì)應(yīng)課程成績(jī)和平均成績(jī)。8)附加功能

3、:把學(xué)生信息和對(duì)應(yīng)的課程成績(jī)和平均成績(jī)存入到文件中。9)附加功能:輸出文件中的內(nèi)容。10)附加功能:試著從文件中導(dǎo)入數(shù)據(jù)到成績(jī)管理系統(tǒng)中,然后進(jìn)行管理。四、設(shè)計(jì)要求、技術(shù)參數(shù)及設(shè)計(jì)規(guī)格1、 原始成績(jī)由老師統(tǒng)一給出,在Excel表中;2、設(shè)計(jì)的系統(tǒng)能夠運(yùn)行,提交源程序、目標(biāo)文件和可執(zhí)行文件;3、 提交實(shí)訓(xùn)報(bào)告,實(shí)訓(xùn)報(bào)告中列寫(xiě):1)軟件需求分析;2)軟件規(guī)格說(shuō)明和設(shè)計(jì)要求;3)對(duì)數(shù)據(jù)的管理方案;4) “學(xué)生成績(jī)管理系統(tǒng)”設(shè)計(jì)的思路和整體框架;5)各功能或者模塊實(shí)現(xiàn)的思路(或者用帶注釋的程序代替)并交待模塊之間的接口關(guān)系;6) “學(xué)生成績(jī)管理系統(tǒng)”設(shè)計(jì)的結(jié)果(可以用一些屏幕拷貝的圖來(lái)補(bǔ)充說(shuō)明)。4、

4、程序設(shè)計(jì)環(huán)境為 Visual C+ 或DEV C+5、所有的設(shè)計(jì)工作需要同學(xué)自己真實(shí)地、獨(dú)立地完成。五、工作量天/日期任務(wù)描述通過(guò)標(biāo)準(zhǔn)2015 年上午:熟悉系統(tǒng)功能,文檔通過(guò)1月5日完成三項(xiàng)任務(wù)(用文檔記錄):1)軟件需求分析;2)軟件規(guī)格說(shuō)方案通過(guò)明和設(shè)計(jì)要求;3)對(duì)數(shù)據(jù)的管理方案。數(shù)據(jù)結(jié)構(gòu)通過(guò)下午:構(gòu)思“學(xué)生成績(jī)管理系統(tǒng)”的思路和整體框架。設(shè)計(jì)的函數(shù)框架通過(guò)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)(命名),設(shè)計(jì)函數(shù)框架(命名,考慮參數(shù)的類(lèi)型和要求數(shù)據(jù)傳遞接口正常,main函個(gè)數(shù),即考慮數(shù)據(jù)之間的傳遞關(guān)系)。設(shè)計(jì)被系統(tǒng)調(diào)用的 main函數(shù);數(shù)能運(yùn)行。實(shí)現(xiàn)界面函數(shù);設(shè)計(jì)各功能子函數(shù)的框架;2015 年上午:實(shí)現(xiàn)成績(jī)錄入功

5、能;各子函數(shù)調(diào)試通過(guò),能被main函1月6日下午:實(shí)現(xiàn)計(jì)算平均成績(jī)功能;實(shí)現(xiàn)輸出功能;數(shù)成功調(diào)用,其子功能能實(shí)現(xiàn)。2015 年上午:實(shí)現(xiàn)排序功能;各子函數(shù)調(diào)試通過(guò),能被main函1月7日下午:實(shí)現(xiàn)修改功能;實(shí)現(xiàn)增補(bǔ)功能 (選做);數(shù)成功調(diào)用,其子功能能實(shí)現(xiàn)。2015 年上午:實(shí)現(xiàn)查找功能,按學(xué)號(hào)查找、按姓名查找;各子函數(shù)調(diào)試通過(guò)。1月8日下午:實(shí)現(xiàn)自身特色功能,如登陸、鏈表操作、文件存儲(chǔ)數(shù)據(jù);2015 年上午:完善“成績(jī)管理系統(tǒng)的各項(xiàng)功能”。撰寫(xiě)實(shí)訓(xùn)報(bào)告。系統(tǒng)能正確運(yùn)行,界面友好);1月8日實(shí)踐能力強(qiáng)的同學(xué)實(shí)現(xiàn)附加功能。各功能能夠?qū)崿F(xiàn),性能良好操作方下午:繼續(xù)寫(xiě)實(shí)訓(xùn)報(bào)告并且驗(yàn)收設(shè)計(jì)的項(xiàng)目。便。

6、備注:做得慢的同學(xué)選做部分可不做。六、考核形式、考核時(shí)間、考核指標(biāo)及成績(jī)?cè)u(píng)定實(shí)訓(xùn)成績(jī)由下面構(gòu)成: 實(shí)訓(xùn)紀(jì)律、實(shí)訓(xùn)態(tài)度和平時(shí)表現(xiàn)占 20%實(shí)訓(xùn)結(jié)果占30%實(shí)訓(xùn)報(bào)告占30% 實(shí)踐操作能力占20%考核形式:1)老師每日對(duì)學(xué)生的考察、評(píng)估和考核;2)最后對(duì)實(shí)訓(xùn)項(xiàng)目完成的質(zhì)量進(jìn)行考核和驗(yàn)收。完成期限:2015年01月09日指導(dǎo)教師簽章: 孫海燕專(zhuān)業(yè)負(fù)責(zé)人簽章:崔建濤教學(xué)院長(zhǎng)簽章宋勝利實(shí)訓(xùn)進(jìn)度日歷題 目學(xué)生成績(jī)管理系統(tǒng)指導(dǎo)教師孫海燕、張玲、 陳明學(xué) 生 班 級(jí)軟件學(xué)院網(wǎng)絡(luò)軟件 14-01 網(wǎng)絡(luò)軟件14-02, 技14-02學(xué)年 學(xué)期14 15學(xué)年第1學(xué)期天實(shí)訓(xùn)任務(wù)詳細(xì)描述教師實(shí)訓(xùn)任務(wù)的指導(dǎo)(解決方案、實(shí)現(xiàn)

7、步驟、 技術(shù)路線、難點(diǎn)提示)通過(guò)標(biāo)準(zhǔn)15年1月5日上午完成:1)軟件需求 分析;2)軟件規(guī)格 說(shuō)明和設(shè)計(jì)要求; 3)對(duì)數(shù)據(jù)的管理方 案。對(duì)軟件功能進(jìn)行分類(lèi)。用戶(hù)界面操作簡(jiǎn)單、功能完備,系統(tǒng)啟動(dòng)后先 錄入數(shù)據(jù),再求平均成績(jī);平均成績(jī)求出后, 其他的功能才能實(shí)現(xiàn)。數(shù)據(jù)結(jié)構(gòu)可以采用數(shù)組也可以采用鏈表。文檔通過(guò)驗(yàn)收下午構(gòu)思“學(xué)生成績(jī)管 理系統(tǒng)”的思路和 整體框架。設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)(命 名),設(shè)計(jì)函數(shù)框架(命名,考慮參數(shù) 的類(lèi)型和個(gè)數(shù),即 考慮數(shù)據(jù)之間的傳 遞關(guān)系) 設(shè)計(jì)被系統(tǒng)調(diào)用的 main函數(shù);設(shè)計(jì)界 面函數(shù);如果采用數(shù)組管理數(shù)據(jù)結(jié)構(gòu),則數(shù)組必須按地 址傳遞,這樣數(shù)據(jù)才能在各個(gè)函數(shù)間共享。難點(diǎn)1:系統(tǒng)的

8、退出,exit()函數(shù)需要包含難點(diǎn)2 :清屏函數(shù)clrscr();難點(diǎn)3 :數(shù)據(jù)的傳遞設(shè)計(jì)的 函數(shù)框 架通過(guò) 調(diào)試, 要求數(shù) 據(jù)傳遞 接口正 八t /丿吊,main 函數(shù)能 運(yùn)行。15年1月6日上午設(shè)計(jì)數(shù)據(jù)錄入函 數(shù),從鍵盤(pán)讀數(shù)據(jù) 到數(shù)組中,或者創(chuàng) 建鏈表難點(diǎn)1:數(shù)據(jù)輸入完后,怎樣控制結(jié)束?用一 個(gè)什么標(biāo)志。難點(diǎn)2:結(jié)構(gòu)體數(shù)組中的子域又是一個(gè)數(shù)組 時(shí),數(shù)據(jù)不能直接從鍵盤(pán)讀入, 需用一個(gè)臨時(shí) 變量中轉(zhuǎn)一下。難點(diǎn)3:從鍵盤(pán)錄入數(shù)據(jù)時(shí),要給完全的提示 信息,便于操作指導(dǎo)。各子函 數(shù)調(diào)試 通過(guò),能 被 mai n 函數(shù)成 功調(diào)用下午計(jì)算平均成績(jī)的函數(shù)實(shí)現(xiàn); 輸出原始成績(jī);難點(diǎn)4:想一想:在錄入數(shù)據(jù)時(shí)數(shù)

9、據(jù)保存到一 數(shù)組,那么在算平均值時(shí),怎樣能接觸到此數(shù) 組中的數(shù)據(jù)。輸出按照一定的格式,好看。各子函數(shù)調(diào)試 通過(guò),能被 main函數(shù)成 功調(diào)用。15年1月7日上午排序功能實(shí)現(xiàn)并輸 出排序后的成績(jī)。按平均成績(jī)排序。排序的算法可以是泡泡法或者選擇法等思考1:你還可以分別在每個(gè)班中按平均成績(jī) 排序嗎?思考2:能輸出有不及格課程的同學(xué)信息和成 績(jī)嗎?各子函 數(shù)調(diào)試 通過(guò),能 被 mai n 函數(shù)成 功調(diào)用。下午實(shí)現(xiàn)查找功能按姓名查找以后,再修改;按學(xué)號(hào)查找以后,再修改; 如果要用對(duì)半查找法,需要數(shù)據(jù)是有序的。各子函 數(shù)調(diào)試 通過(guò),能 被 mai n 函數(shù)成 功調(diào)用。15年1月8日上午能對(duì)某一學(xué)生信息 和

10、成績(jī)進(jìn)行修改; 能增加學(xué)生的信息(選做);查找到某一學(xué)生,修改某一屬性,如果需要重 新排序,重新排序,把結(jié)構(gòu)存入文件; 難點(diǎn):怎樣從鍵盤(pán)中把成績(jī)存入文件。增加后重新排序,重新輸出。難點(diǎn):怎樣從文件中讀出數(shù)據(jù)下午自定義功能實(shí)現(xiàn)女口:登陸:密碼輸入顯示 * ;等15年1月9日上午完成實(shí)訓(xùn)報(bào)告難點(diǎn):清晰、明確、簡(jiǎn)單、評(píng)價(jià)合理、有自己 的見(jiàn)解、創(chuàng)新。實(shí)訓(xùn)報(bào)告內(nèi)容:任務(wù)書(shū)、實(shí)訓(xùn)進(jìn)度計(jì)劃、大綱 性的目錄、正文、實(shí)訓(xùn)感想、附件。實(shí)訓(xùn)報(bào)告要求裝訂整齊。系統(tǒng)能 正確運(yùn) 行,界面 友好); 各功能 能夠?qū)?現(xiàn),性能 良好操 作方便。下午驗(yàn)收程序 討論系統(tǒng)能 正確運(yùn) 行,界面 友好); 各功能 能夠?qū)?現(xiàn),性能 良

11、好操 作方便。制訂教師:孫海燕、張玲實(shí)訓(xùn)報(bào)告1.軟件需求分析、用C語(yǔ)言編寫(xiě)程序?qū)崿F(xiàn)“學(xué)生成績(jī)管理系統(tǒng)”。 、設(shè)計(jì)“學(xué)生成績(jī)管理系統(tǒng)”的用戶(hù)界面,系統(tǒng)啟動(dòng)進(jìn)入后,只能通過(guò)界面菜單指 令才能退出。、系統(tǒng)啟動(dòng)后,彈出一個(gè)用戶(hù)界面,能實(shí)現(xiàn)人機(jī)交互的功能。而且只能通過(guò)界面菜 單命令實(shí)現(xiàn)各種功能(包括系統(tǒng)退出功能) ;、錄入學(xué)生成績(jī)(信息有:班級(jí)、姓名、學(xué)號(hào)、五門(mén)課程成績(jī)) ; 、計(jì)算每門(mén)功課的平均成績(jī)和學(xué)生五門(mén)功課的平均成績(jī)并存檔; 、輸出學(xué)生的信息和對(duì)應(yīng)的原始成績(jī)以及平均成績(jī);、按平均成績(jī)進(jìn)行排序,輸出排序后的學(xué)生信息以及對(duì)應(yīng)的課程成績(jī)和平均成績(jī); 、對(duì)成績(jī)修改,有兩種模式,一種是按學(xué)號(hào)查找后進(jìn)行修改

12、;另一種是按姓名查找 后進(jìn)行修改; 修改后重新排序?qū)W生的順序, 并輸出學(xué)生信息和對(duì)應(yīng)課程成績(jī)和平均 成績(jī);、增補(bǔ)遺漏的學(xué)生以及對(duì)應(yīng)的信息和對(duì)應(yīng)的課程成績(jī), 并計(jì)算出平均成績(jī), 增補(bǔ)以 后重新排序?qū)W生順序,并輸出學(xué)生信息和對(duì)應(yīng)課程成績(jī)和平均成績(jī);、附加功能:把學(xué)生信息和對(duì)應(yīng)的課程成績(jī)和平均成績(jī)存入到文件中; 、附加功能:輸出文件中的內(nèi)容;、附加功能:試著從文件中導(dǎo)入數(shù)據(jù)到成績(jī)管理系統(tǒng)中,然后進(jìn)行管理。2系統(tǒng)詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)、系統(tǒng)用戶(hù)界面盡量居中,體現(xiàn)美觀效果; 、編寫(xiě)的程序具有人機(jī)交互功能;、通過(guò)菜單選擇軟件的功能;、軟件只能由菜單退出系統(tǒng); 、操作信息提示(界面友好) ; 、具有攔截一些誤操作錯(cuò)

13、誤的功能;、按原始成績(jī)格式輸出。設(shè)計(jì)要求:、根據(jù)老師給出的數(shù)據(jù)寫(xiě)入;、設(shè)計(jì)的系統(tǒng)能夠運(yùn)行,提交源程序、目標(biāo)文件和可執(zhí)行文件; 、提交實(shí)訓(xùn)報(bào)告,實(shí)訓(xùn)報(bào)告中列寫(xiě);、程序設(shè)計(jì)環(huán)境為 DEV C+; 、所有的設(shè)計(jì)工作需要同學(xué)自己真實(shí)地、獨(dú)立地完成。3、對(duì)數(shù)據(jù)的管理方案結(jié)構(gòu)體數(shù)組和文件: 輸入的數(shù)據(jù)可以保存在文件中, 下次重新打開(kāi)程序, 原先 已輸入的數(shù)據(jù)還在;(難度中等)顯示主菜單界面 */ 將信息加載到內(nèi)存中 */ 輸入指定的學(xué)生信息 */ 添加指定的學(xué)生信息 */ 將數(shù)組保存到磁盤(pán) */ 輸出所有學(xué)生信息 */ 輸出指定的學(xué)生信息 */ 排序 */ 查找 */ 按學(xué)生學(xué)號(hào)查找 */ 修改指定的學(xué)生

14、信息 */ 刪除*/ 刪除所有學(xué)生信息 */ 刪除指定的學(xué)生信息 */以下為該程序的定義部分typedef struct studentchar clas5;char ID5;char name15;double score5;double sum;double avg;STU;在此處,我將學(xué)生的班級(jí)、學(xué)號(hào)和姓名都定義為 char 型,方便整體的使用。 特別是后面的部分子函數(shù)中用到的字符串比較函數(shù) strcmp ,方便了排序比較;將學(xué)生的成績(jī)定義為雙精度實(shí)型變量( double ),為了使計(jì)算的平均分更為精確。講 此定義放在程序的頭部, 作為整個(gè)程序使用。 為了使后面的子函數(shù)調(diào)用方便、 簡(jiǎn)介,

15、 我用到 typedef struct student 定義。以下是該程序的函數(shù)聲明部分/* 以下是該程序的函數(shù)聲明部分 */ void Display(void); /* void Load(STU stu, int *n);/*void InputOne(STU stu, int i); /* void Add(STU stu, int *n); /* void Save(STU stu, int n); /* void Output(STU stu, int n);/*void Print(STU *s);/*void Sort(STU stu, int n);/*void Find(S

16、TU stu, int n); /* int FindID(STU stu, int n, char clas, char ID); /* void Edit(STU stu, int n);/*void Del(STU stu, int *n);/*void DeleteAll(STU stu, int *n); /* void DeleteOne(STU stu, int *n);/*以上是該程序的全部聲明部分,這些聲明函數(shù)與下文的各功能函數(shù)相互對(duì)應(yīng),且順序依次排列, 方便查找和修改。 在這些聲明的函數(shù)中, 用到了引用數(shù)組以及指 針,方便了下面各功能函數(shù)的使用以及調(diào)用。以下是該程序的主函數(shù)

17、部分int main()STU stuN;int n;int select;Load(stu, &n);while(1)Display();scanf("%d", &select);switch(select)case 1:/* 輸入 */Add(stu, &n); break;case 2: /* 輸出 */Output(stu, n); break;case 3: /*排序 */Sort(stu, n); break;case 4: /*查找 */Find(stu, n); break;case 5:/*修改 */Edit(stu, n); br

18、eak;case 6:/*刪除 */Del(stu, &n); break;case 7:/*退出 */return 0;以上是該函數(shù)的函數(shù)部分,用到了 switch 語(yǔ)句,分別針對(duì) 7 種功能分情況列 出。在下面的各分函數(shù)中, 處理完的數(shù)據(jù)值會(huì)根據(jù)具體需要返還到主函數(shù)中, 并且 顯示在主界面中。方便用戶(hù)查看。利用 switch 的好處在于,分情況列出各種需要 的可能性,條例清晰,可讀性強(qiáng),并且十分方便。以下是該程序的主界面部分/* 以下為該程序的主界面 */ void Display()system("cls");printf("鄭州輕工業(yè)學(xué)院考試成績(jī)管

19、理系統(tǒng) n");printf("n");printf("班級(jí):網(wǎng)絡(luò)軟件開(kāi)發(fā)14-01班n");printf("n");printf("學(xué)號(hào):0103n");printf("n");printf("作者:褚超n");printf("*n");printf("1:輸入學(xué)生資料 n");printf("n");printf("2:輸出學(xué)生成績(jī)3:資料進(jìn)行排序n");printf("n

20、");printf("4:查找學(xué)生資料5:修改學(xué)生資料n");printf("n");printf("6:刪除學(xué)生資料7:退出管理系統(tǒng)n");printf("n");printf("*n");printf(" 歡迎進(jìn)入成績(jī)管理系統(tǒng),請(qǐng)選擇(你只需輸入 17 中的其中一個(gè)數(shù)字便可進(jìn)行下一 步操作) n");以上為該程序?qū)嶋H操作的主界面, 具有 6大基本功能。 用戶(hù)可以根據(jù)需要進(jìn)行相關(guān)操作,實(shí)現(xiàn)所需要的功能。在此界面中,用到了清屏函數(shù),方便用戶(hù)更好的體 驗(yàn)該程序,不至于

21、界面混亂。void Load(STU stu, int *n)FILE *fp;int i;if(fp=fopen("d:", "r+") = NULL) /*n = 0;return;for(i=0; fread(&stui,sizeof(STU),1,fp)!=0;i+); /*n = i; /* 學(xué)生數(shù)量 */fclose(fp); /*以'r+'打開(kāi)可讀寫(xiě)的文件*/將信息讀取到 stu 中 */ 這里 *n 的作用為記錄文件中當(dāng)前關(guān)閉文件 */*/以上是該程序的從文件中讀取數(shù)據(jù)的函數(shù)部分。 用到了指針, 從所指定的文件 讀

22、取到輸入后保存在該文件中的信息, 并顯示在主界面中。 用戶(hù)可以直接將該文件 拷貝到指定文件夾中, 當(dāng)執(zhí)行一次源代碼的編譯后, 該系統(tǒng)就知道了這些數(shù)據(jù)所在 的文件,當(dāng)用戶(hù)執(zhí)行程序運(yùn)行時(shí),選擇相關(guān)的功能時(shí),便可直接在主界面顯示,無(wú) 需再次輸入信息。 這樣以來(lái), 該程序就具有了很強(qiáng)的實(shí)用性與使用性, 方便了用戶(hù) 處理數(shù)據(jù)。以下是該程序的輸入部分/* 輸入第 i 個(gè)學(xué)生信息, 保存到 stu 數(shù)組中 */void InputOne(STU stu, int i)int j;/* 輸入學(xué)生信息 */printf(" 請(qǐng)輸入學(xué)生班級(jí)、學(xué)號(hào)、姓名 ( 數(shù)據(jù)間以空格隔開(kāi) ):"); sca

23、nf("%s%s%s", &stui.clas, &stui.ID, &);/* 輸入五門(mén)課程成績(jī)并累加 */printf(" 請(qǐng)依次輸入課程 1、2、3、4、5成績(jī) (數(shù)據(jù)間以空格隔開(kāi) ):");stui.sum = ;for(j=0; j<5; j+)scanf("%lf", &stui.scorej);stui.sum += stui.scorej;/* 計(jì)算五門(mén)課程的平均分 */stui.avg = stui.sum / 5;/* 調(diào)用 InputOne 函數(shù)添加若干學(xué)生

24、信息,并把新添加的學(xué)生信息依次保存到文件中 */ void Add(STU stu, int *n)int i=0;char s = 'y'while(s = 'y')InputOne(stu, (*n)+); /* 添加第 n+1 個(gè)學(xué)生的信息 */printf(" 是否繼續(xù)添加 ( 請(qǐng)輸入 y or n)n");scanf(" %c", &s);Save (stu, *n);void Save(STU stu, int n)FILE *fp;if(fp=fopen("d:", "w

25、") = NULL)printf(" 打開(kāi)文件失敗 n");exit(0);fwrite(stu, n * sizeof(stu0), 1, fp);fclose(fp);/*以上為該程序的第一個(gè)功能函數(shù)部分, 可實(shí)現(xiàn)學(xué)生信息的錄入功能, 所錄入的 文件即。用戶(hù)可以根據(jù)需要輸入一個(gè)或多個(gè)學(xué)生信息。 只需要在輸入一個(gè)學(xué)生信息 完成后,判斷是否繼續(xù)錄入學(xué)生信息即可。 當(dāng)輸入 y 時(shí),可繼續(xù)輸入一個(gè)或多個(gè)學(xué) 生信息,操作與之前相同;當(dāng)輸入其它字母時(shí),輸入學(xué)生信息結(jié)束,程序返回到該 程序的原始主界面。 可繼續(xù)選擇其它相關(guān)操作。 方便用戶(hù)處理數(shù)據(jù), 解決了單次功 能實(shí)現(xiàn)后,

26、程序退出的問(wèn)題。" 成績(jī) 1", "成績(jī) 2",相關(guān)的學(xué)生信以下是該程序的輸出部分/* 輸出所有學(xué)生信息 */void Output(STU stu, int n)int i;/* 打印數(shù)據(jù)表頭 */printf(" 您需要的所有學(xué)生成績(jī)?nèi)缦?:n"); printf("n");printf("%8s%8s%8s%8s%8s%8s%8s%8s%8s%8s","班級(jí)","學(xué)號(hào)","姓名” "成績(jī) 3", " 成績(jī) 4&

27、quot;, " 成績(jī) 5", " 總分", " 平均分");for(i=0; i<n; i+)Print(&stui); system("pause");void Print(STU *s)int i;/* 打印所有學(xué)生的信息 */printf("%8s%8s%8s", s->clas, s->ID, s->name);for(i=0; i<5; i+)printf("%", s->scorei);printf("%&q

28、uot;, s->sum, s->avg);printf("n");/*/以上是學(xué)生信息輸出部分的函數(shù), 系統(tǒng)會(huì)自動(dòng)打印出表頭信息。息會(huì)在其下一行依次展開(kāi)并與表頭對(duì)齊。 程序?qū)崿F(xiàn)了信息的讀出功能, 方便了用戶(hù) 的查看與處理。 其中,輸出的學(xué)生成績(jī)都采用了 double 型,并保留兩位有效數(shù)字, 使數(shù)據(jù)更為準(zhǔn)確。F面給出輸出學(xué)生信息時(shí)的主界面顯示情況以下是該程序的排序部分/* 對(duì)學(xué)生的信息進(jìn)行排序 */void Sort(STU stu, int n)int select;int ScoreAsc(const void *a, const void *b);int

29、 ScoreDes(const void *a, const void *b);int NameAsc(const void *a, const void *b);printf("1: 按總成績(jī)升序排列 n"); printf("n");printf("2: 按總成績(jī)降序排列 n"); printf("n");printf("3: 按學(xué)生姓名排序 n"); scanf("%d", &select);switch(select)case 1: qsort(stu, n,

30、 sizeof(stu0), ScoreAsc); break; case 2: qsort(stu, n, sizeof(stu0), ScoreDes); break; case 3: qsort(stu, n, sizeof(stu0), NameAsc); break; default: return;Output(stu, n);/* 以下是按成績(jī)升序排序的分函數(shù) */int ScoreAsc(const void *a, const void *b)return (STU *)a)->sum > (STU *)b)->sum ? 1 : -1;/* 以下是按成績(jī)降

31、序排列的分函數(shù) */int ScoreDes(const void *a, const void *b)return (STU *)a)->sum < (STU *)b)->sum ? 1 : -1;/* 以下是按學(xué)生姓名升序排列的分函數(shù) */int NameAsc(const void *a, const void *b)return strcmp(STU *)a)->name, (STU *)b)->name);/*以上為該程序的排序函數(shù)部分,該函數(shù)實(shí)現(xiàn)了排序的功能,并且可以分別根據(jù) 總成績(jī)的高低進(jìn)行升序以及降序排序,也可以根據(jù)學(xué)生的姓名進(jìn)行排序。在這里, 為

32、了使三種排序功能方便處理、簡(jiǎn)潔,我用到了switch語(yǔ)句,根據(jù)三種情況分別判斷。并根據(jù)用戶(hù)需要,將特定的排序方式信息反饋給用戶(hù),用戶(hù)可以直接在該程 序的主界面進(jìn)行查看,方便用戶(hù)處理學(xué)生信息。下面給出資料進(jìn)行排序中的按總成績(jī)降序排列主界面顯示情況31:按憩成績(jī)升序排列2:抜邕成績(jī)降序排列.1 1 . IIJ 11 1k您需宴的所有學(xué)生戢績(jī)史口下:班級(jí)L1姓名成績(jī)L成績(jī)2成鄴成績(jī)4成績(jī)5總分平均分SO 25qua88*0089.0094.0083.0082.00436.00BT. 206024guang:73,00S5.0090.0093.0090.00434.0086.805019lin89.0

33、088.0093.0081,0083.CO434.0085.80501BchenKigg,oo54.0082,0080.00s?.co432.0088.405011wan£78.00S5.0092.0088.0084.00427.OC85.4050 Squn?8,0079.00瞅0083.0086,004084081,605038bo80.0081.0032.0079.0085.00407,0081.400017ddd77,0073,007B.Q063.0030.00392.0C78.40SO 28 dongfei73.0079.0080-0082.0077.00391.0078.

34、209016kanj77,0070.0076-0079.0076.00333,0077.00SO 2711178.0076.0055-0082.0080.00381.007S. 306031dent81.00S5.0073.006S.00Q6. CO373,00?4.0OSO 21hua65.0077.00T5-0078,0074.003S9,0C73.806035hesang;75,0070.0073_OO72.00n.co397,0073.40SO 29f eluiang:71.0065.00T2-0077,0074.00359.0071.800015lint67.0053.007C-00

35、79.0076.00356.0071. 20以下是該程序的查找部分/* 按學(xué)號(hào)查找學(xué)生信息 */void Find(STU stu, int n)int index;char clas5,ID5;printf(" 請(qǐng)輸入班級(jí)和學(xué)號(hào) ( 數(shù)據(jù)間以空格隔開(kāi) ):");scanf("%s%s", clas, ID);index = FindID(stu, n, clas, ID);if(index > 0)Print(&stuindex);elseprintf(" 該學(xué)生信息不存在 !n");system("paus

36、e");/* 分別對(duì)學(xué)生班級(jí)和學(xué)號(hào)進(jìn)行確定 */int FindID(STU stu, int n, char clas, char ID)int i;for(i=0; i<n; i+) /* 一旦找到該學(xué)生信息,則會(huì)自動(dòng)返回對(duì)應(yīng)的下標(biāo) */if(strcmp(stui.ID, ID)=0 && strcmp(stui.clas, clas) =0)return i;return -1; /*/以上是查找學(xué)生信息的功能函數(shù)部分。 在此,因?yàn)橛卸鄠€(gè)班級(jí)的信息存在, 因 此,避免不了學(xué)號(hào)一致的情況出現(xiàn)??蓪W(xué)號(hào)相同的學(xué)生,班級(jí)肯定不相同,因此為 了使查找的學(xué)生信息是用

37、戶(hù)所需要的信息。 我在查找函數(shù)中, 同時(shí)查找學(xué)生班級(jí)與 學(xué)生學(xué)號(hào),這樣以來(lái),就可以確定所需要查找的學(xué)生信息在主界面反饋給用戶(hù)時(shí)是 正確的。因此就需要用到一個(gè) if 語(yǔ)句,只有在班級(jí)和學(xué)號(hào)都一致的情況下,才將 信息返回給用戶(hù), 否則輸出該學(xué)生的信息不存在。 這樣以來(lái), 學(xué)生信息的查找功能 就得以實(shí)現(xiàn)了。下面給出查找學(xué)生成績(jī)的主界面顯示情況以下是該程序的修改部分/* 修改指定的學(xué)生信息 */void Edit(STU stu, int n)int i, index;char s;char clas5,ID5;printf(" 請(qǐng)輸入班級(jí)和學(xué)號(hào) ( 數(shù)據(jù)間以空格隔開(kāi) ):");s

38、canf("%s%s", clas, ID);index = FindID(stu, n, clas, ID);if(index < 0)printf(" 該學(xué)生信息不存在 !n");return;printf(" 以下是修改前的學(xué)生信息 n");Print(&stuindex);/* 修改學(xué)生成績(jī) */printf(" 是否修改成績(jī) ?( 請(qǐng)輸入 y or n)n");scanf(" %c", &s);if(s = 'y')stuindex.sum = 0

39、;printf(" 請(qǐng)輸入五門(mén)學(xué)科的成績(jī) ( 數(shù)據(jù)間以空格隔開(kāi) ):");for(i=0; i<5; i+)scanf("%lf", &stuindex.scorei);stuindex.sum += stuindex.scorei;stuindex.avg = stuindex.sum / 5;Save(stu, n);/*/以上是修改學(xué)生信息的函數(shù)部分, 用戶(hù)可以通過(guò)輸入需要查找的學(xué)生的班級(jí)和 學(xué)號(hào)先找到該學(xué)生的具體信息, 主界面也會(huì)在同一時(shí)間將該學(xué)生的信息反饋到程序 的主界面。用戶(hù)可以通過(guò)判斷來(lái)確定是否修改學(xué)生信息, 如用戶(hù)確定修改該

40、學(xué)生的 信息,就會(huì)顯示請(qǐng)輸入需要修改的學(xué)生的成績(jī)。 用戶(hù)只需要將更新后的成績(jī)?cè)俅屋?入,就可以完成學(xué)生信息的修改功能, 并且將該次更新的成績(jī)存儲(chǔ)到指定的 2 文件 中,覆蓋原來(lái)的該學(xué)生信息。這樣以來(lái),學(xué)生成績(jī)修改的功能就可以完成了。 下面給出修改學(xué)生資料主界面顯示情況 ( 待修改狀態(tài) )F面給出修改學(xué)生資料主界面顯示情況(修改完成狀態(tài))以下是該程序的刪除部分/* 刪除 */void Del(STU stu, int *n)int select;printf("1: 刪除指定的學(xué)生信息 n"); printf("n");printf("2: 刪除

41、所有的學(xué)生信息 n");scanf("%d", &select);switch(select)case 1: DeleteOne(stu, n); break;case 2: DeleteAll(stu, n); break;/* 從文件中刪除全部學(xué)生信息 */void DeleteAll(STU stu, int *n)char s;FILE *fp;printf(" 信息是否全部刪除? ( 請(qǐng)輸入 y or n)n");scanf(" %c", &s);if(s = 'y')fp = fo

42、pen("d:", "w"); /*以 'w' 方式打開(kāi)可覆蓋原來(lái)的文件 */0*/*n = 0; /* 內(nèi)存中的數(shù)組 stu 中元素個(gè)數(shù)變?yōu)?printf(" 刪除完成! n");fclose(fp);/* 刪除指定的學(xué)生信息 */void DeleteOne(STU stu, int *n)int i, index;FILE *fp;char clas5,ID5;printf(" 請(qǐng)輸入班級(jí)和學(xué)號(hào) ( 數(shù)據(jù)間以空格隔開(kāi) ):");scanf("%s%s", clas, ID)

43、;index = FindID(stu, *n, clas, ID);if(index < 0)printf("n 該學(xué)生信息不存在! n"); return;for(i=index; i < *n-1; i+)stui = stui+1;(*n)-;if(fp=fopen("d:", "w")=NULL) /*以 'w' 的方式打開(kāi)可清除文件 */printf(" 打開(kāi)文件失敗! n");exit(0);printf("n 刪除成功 n");Save(stu, *n

44、); /* 保存到文件 */*/以上是該程序的刪除功能函數(shù)部分, 當(dāng)用戶(hù)選擇該項(xiàng)功能時(shí)。 會(huì)彈出兩個(gè)選擇 項(xiàng),分別是刪除指定的學(xué)生信息與刪除全部的學(xué)生信息。 用戶(hù)可以根據(jù)需要進(jìn)行具 體的操作。當(dāng)確定需要?jiǎng)h除學(xué)生信息時(shí), 同樣需要輸入需要?jiǎng)h除的學(xué)生的班級(jí)與學(xué) 號(hào),這樣,就可以確定刪除的學(xué)生信息就是我們需要?jiǎng)h除的那個(gè)學(xué)生的信息。 這樣 以來(lái),刪除學(xué)生信息的功能,就可以實(shí)現(xiàn)了。F面給出刪除學(xué)生資料主界面顯示情況(待刪除狀態(tài))F面給出刪除學(xué)生資料主界面顯示情況(刪除完成狀態(tài))實(shí)訓(xùn)感想回想,5天的C語(yǔ)言實(shí)訓(xùn)經(jīng)歷,讓我受益匪淺。從一開(kāi)始做的時(shí)候的各種迷茫 (沒(méi)有思路、對(duì)大程序產(chǎn)生恐懼、 不知如何下手 )到

45、現(xiàn)在的思路清晰, 雖然這幾天走 來(lái)實(shí)在不易,但我覺(jué)得還是非常值得的。 這次實(shí)訓(xùn)讓我對(duì)編程有了更深層次的理解, 我越來(lái)越喜歡C語(yǔ)言了。現(xiàn)在想想,這樣的一個(gè)程序才算是真正的一個(gè)程序, 之前 的一個(gè)個(gè)小的題目,一個(gè)小的問(wèn)題,一個(gè)小的程序,只是這樣一個(gè)程序的一部分。 當(dāng)我把那些小程序綜合放在一塊,進(jìn)行整體的處理,最終變成一個(gè)可讀性很高的、 整體性很強(qiáng)的大程序時(shí), 我明白了小程序就是大程序的分支, 只要將小程序處理好, 再融入到一個(gè)整體中,一個(gè)看似復(fù)雜的大程序就可以迎刃而解了。記得,剛開(kāi)始學(xué)C語(yǔ)言的時(shí)候,覺(jué)得很難。一句簡(jiǎn)單的 This is a C program, 加頭加尾都有四五行, 我在想如果是一

46、個(gè)很大的內(nèi)容, 那要打多少,一定很麻煩吧! 就覺(jué)得那是好大的一個(gè)工程,很難實(shí)現(xiàn)?,F(xiàn)在想想,只要用心去學(xué),掌握完成C語(yǔ)言的語(yǔ)法技巧,是可以完成的。我現(xiàn)在對(duì)C語(yǔ)言的認(rèn)識(shí)就是,把數(shù)學(xué)的思想應(yīng)用 在程序上,體現(xiàn)在各種函數(shù)上, 面對(duì)一個(gè)程序題時(shí), 首先要有思路, 該怎樣去處理。 然后開(kāi)始對(duì)需要處理的數(shù)據(jù)進(jìn)行定義, 需要幾個(gè)變量, 變量的類(lèi)型是什么。 如果是 數(shù)組的話, 還要考慮這個(gè)數(shù)組有多大, 需要定義多長(zhǎng)的數(shù)組才能夠用。 然后就是編 寫(xiě)程序的核心部分,將數(shù)學(xué)的算法思想,用函數(shù)體現(xiàn)出來(lái),通過(guò)賦值語(yǔ)句,引用, 互換等,完成數(shù)據(jù)間的計(jì)算。在程序輸出的部分,確定好需要輸出數(shù)據(jù)的控制符, 比如如果是int型,那

47、輸出時(shí)的控制符就用d將各種數(shù)據(jù)一一對(duì)應(yīng)的輸入輸出, 就基本上可以完成一個(gè)程序。這周C語(yǔ)言的實(shí)訓(xùn),讓我明白。做出一個(gè)程序系統(tǒng)并不是一件簡(jiǎn)單的事, 雖然 說(shuō)也不是非常難的那種, 但是卻很考驗(yàn)一個(gè)人的耐心以及細(xì)心程度。 第一天的時(shí)候, 其實(shí),我不知道該怎樣做,一直坐在電腦旁想啊想,往往想的一頭霧水。這么大的 一個(gè)程序,要怎么入手。后來(lái)明白,我不該把它想的這么復(fù)雜,而是應(yīng)該像平時(shí)那 些小程序一樣,一個(gè)一個(gè)來(lái),然后合起來(lái)成為一個(gè)大的程序。當(dāng)思路清晰以后,我 明白該怎么去寫(xiě)才能寫(xiě)成。所以我覺(jué)得思路很重要,然后就是對(duì)語(yǔ)法的靈活運(yùn)用, 這樣,才能自由的編寫(xiě)一個(gè)程序。為什么要學(xué)習(xí)程序設(shè)計(jì)?計(jì)算機(jī)的本質(zhì)是“程序的機(jī)器” ,程序和指令的思想 是計(jì)算機(jī)系統(tǒng)中最基本的概念。學(xué)習(xí)程序設(shè)計(jì)能使我們了解計(jì)算機(jī)事怎樣工作的, 更好地理解和應(yīng)用計(jì)算機(jī);能使我們懂得怎樣讓計(jì)算機(jī)按照人們的意圖進(jìn)行工作; 學(xué)習(xí)使用計(jì)算機(jī)處理問(wèn)題的方法, 能培養(yǎng)我們分析問(wèn)題和解決問(wèn)題的能力以及具有 編寫(xiě)程序的初步能力。 非計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生學(xué)習(xí)程序設(shè)計(jì), 可以了解軟件的特點(diǎn)和 生產(chǎn)過(guò)程,能與程序開(kāi)發(fā)人員更好的溝通, 有利于共同合作進(jìn)行應(yīng)用軟件的開(kāi)發(fā)

溫馨提示

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

評(píng)論

0/150

提交評(píng)論