C語言課程設計學生成績管理系統(tǒng)_第1頁
C語言課程設計學生成績管理系統(tǒng)_第2頁
C語言課程設計學生成績管理系統(tǒng)_第3頁
C語言課程設計學生成績管理系統(tǒng)_第4頁
C語言課程設計學生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

PAGEPAGE1學生成績管理系統(tǒng)前言《C語言程序設計》課程設計是對學生的一種全面綜合訓練,它包括問題分析,總體結(jié)構(gòu)設計,用戶界面設計,程序設計基本技能和技巧,多人合作,以至一整套軟件工作規(guī)范的訓練和科學作風的培養(yǎng)。是與課堂聽講、自學和練習相輔相成的必不可少的一個教學環(huán)節(jié)。通常,課程設計的課題比平時的習題復雜得多,也更接近實際。課程設計著眼于理論與應用的結(jié)合點,使學生學會如何把書上學到的知識用于解決實際問題,培養(yǎng)程序設計工作所需要的知識綜合能力和動手能力;另一方面,能使書上的知識變“活”,使學生更好地深化理解和靈活掌握教學內(nèi)容。為了達到上述目的,本課程設計安排了四個設計課題,訓練重點在于基本的程序設計方法和分析問題的能力,而不強調(diào)面面俱到。學生選其中一題進行設計,設計完畢寫出課程設計報告,用A4紙打印成冊;并將課程設計報告與源程序存盤。學習委員將課程設計報告與磁盤(缺一不可)收齊后交指導老師。一、目的全面熟悉、掌握C語言基本知識,掌握C程序設計中的順序、分支、循環(huán)三種結(jié)構(gòu)及數(shù)組、函數(shù)和C語言基本圖形編程等方法,把編程和實際結(jié)合起來,增強對不同的問題運用和靈活選擇合適的數(shù)據(jù)結(jié)構(gòu)以及算法描述的本領,熟悉編制和調(diào)試程序的技巧,掌握分析結(jié)果的若干有效方法,進一步提高上機動手能力,培養(yǎng)使用計算機解決實際問題的能力,養(yǎng)成提供文檔資料的習慣和規(guī)范編程的思想,為以后在專業(yè)課程中應用計算機系統(tǒng)解決計算、分析、實驗和設計等學習環(huán)節(jié)打下較扎實的基礎。二、設計要求掌握結(jié)構(gòu)化程序設計的主體思想,以自頂向下逐步求精的方法編制程序解決一些實際的問題,為將來編寫軟件積累一些典型的案例處理經(jīng)驗。(1)按學號順序選課題號,并在規(guī)定的時間內(nèi)獨自完成相關(guān)課題的C源程序編寫、調(diào)整和運行。源程序及編譯生成各文件均保存在軟盤中;(2)按本任務書的要求,按附錄的要求編寫《課程設計報告》(Word文檔格式)。并用A4的復印紙打印并裝訂。 需求分析一、編寫目的隨著科學技術(shù)的不斷提高,計算機科學日漸成熟,其強大的功能已為人們深刻認識,它已進入人類社會的各個領域并發(fā)揮著越來越重要的作用。作為計算機應用的一部分,使用計算機對學生成績信息進行管理,具有手工管理所無法比擬的優(yōu)點。例如,檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。這些優(yōu)點能夠極大地提高學生檔案管理的效率,也是企業(yè)的科學化、正規(guī)化管理,與世界接軌的重要條件。因此,開發(fā)學生成績管理系統(tǒng)很有必要。本程序可以在短時間內(nèi)得到總成績并且得到相應的排名,節(jié)省時間,功能強大。在多人多課考試時很有用,只要考試成績出來,輸入電腦就可以在短時間內(nèi)得到總成績,并知道了某學生在班級的排名,班級的最高分與最底分的情況以及某門課程的平均分,提高了工作效率。二、程序的功能

(1)增加學生記錄(2)查詢學生記錄(3)修改學生記錄(4)學生記錄排序(5)統(tǒng)計信息(6)打開文件(7)保存記錄(8)顯示記錄(9)退出系統(tǒng)

三、輸入輸出要求程序的輸入模塊、增加模塊、查詢模塊等有學生信息錄入的地方必須嚴格按照相應格式進行輸入。比如姓名字段不能出現(xiàn)空格等,否則就會出現(xiàn)死循環(huán)。輸入性別時要輸入數(shù)字1/0,不能夠輸入文字信息;輸入各科成績時,需要用空格間斷,不能連續(xù)輸入各科成績的分數(shù),如:正確輸入:88888888,錯誤輸入:88888888;其它輸入按照提示進行。性別顯示為男/女,而不是數(shù)字1/0;在修改學生記錄,輸入保存文件名后,會輸出修改的數(shù)據(jù)以及其它未修改的數(shù)據(jù)。概要設計一、程序功能分析程序主要功能:(1)增加學生記錄增加學生的姓名,學號,性別,各科目的成績,可在保存文件中的學生記錄后追加新記錄;如果沒有記錄存在,則給出提示信息,先增加學生記錄,保存至保存文件;其中,數(shù)據(jù)類型的定義如下:姓名char,學號char,性別char,成績float;(2)查詢學生記錄打開保存文件后,可以按“學號”、“姓名”或“名次”方式查詢記錄;給出查詢學生記錄的信息;如果查詢的記錄不存在,輸出提示信息;(3)修改學生記錄打開保存文件,由用戶輸入密碼后,密碼不正確則無權(quán)修改,正確則可以按“學號”、“姓名”或“名次”查詢記錄,按照提示信息進行修改;給出將被修改的記錄信息,確認后進行修改,然后,輸入保存文件名;如果沒找到需要修改的記錄,給出提示信息;如果是空表,應給出提示信息并返回主菜單;

(4)學生記錄排序打開保存文件,可以按“學號”、“姓名”或“名次”查詢記錄,進行“升序”,“降序”的排序;如果查詢的記錄不存在,輸出提示信息;(5)統(tǒng)計信息打開保存文件,可以進行相應科目的成績統(tǒng)計,得到該科目成績最高分,最低分同學的信息及平均分;如果查詢的記錄不存在,輸出提示信息;(6)打開文件打開已有的保存文件,進行其他操作;如果文件不存在,輸出提示信息;(7)保存文件保存已完成或修改的文件;除了退出系統(tǒng)的程序,其它程序的運行都需要從保存文件中調(diào)用;(8)顯示文件顯示保存文件;如果查詢的記錄不存在,輸出提示信息;(9)退出系統(tǒng)完成相關(guān)程序后,按照提示;退出系統(tǒng)。二、層次結(jié)構(gòu)圖根據(jù)程序設計要求,可將學生成績管理系統(tǒng)設計成的層次結(jié)構(gòu),如圖所示:學生成績學生成績管理系統(tǒng)增加學生記錄增加學生記錄查詢學生記錄修改學生記錄學生記錄排序?qū)W號查詢名次查詢姓名查詢統(tǒng)計信息統(tǒng)計信息打開文件顯示文件保存文件退出系統(tǒng)語文成績統(tǒng)計數(shù)學成績統(tǒng)計英語成績統(tǒng)計政治成績統(tǒng)計學生成績管理系統(tǒng)層次結(jié)構(gòu)圖(圖3.1)從層次結(jié)構(gòu)圖可以看出,本系統(tǒng)的各個功能模塊,具有很好的通用性和移植性。詳細設計一、程序流程圖及相關(guān)程序解析程序流程圖是根據(jù)解題分析所繪制的程序執(zhí)行流程圖。根據(jù)程序流程寫出源程序,這樣做把程序設計分析與語言分開,使得問題簡單化,易于理解。程序流程圖更加使設計人員或用戶能夠明白程序運行的過程,方便查找,修改程序中錯誤的功能模塊。以下程序流程圖包含學生成績管理系統(tǒng)總流程圖(圖4.1),增加學生記錄流程圖(圖4.2),查詢學生記錄流程圖(圖4.3),修改學生紀錄流程圖(圖4.4),學生記錄排序流程圖(圖4.5),保存文件流程圖(圖4.6),顯示文件流程圖(圖4.7)。各功能模塊程序流程圖:(1)學生成績管理系統(tǒng)總流程圖(圖4.1)NY進行查詢,修改,統(tǒng)計等操作進入程序進行查詢,修改,統(tǒng)計等操作進入程序打開保存文件增加學生紀錄保存學生紀錄系統(tǒng)啟動退出系統(tǒng)退出系統(tǒng)(2)增加學生記錄流程圖(圖4.2)(數(shù)字表示輸入的選項)NYYYNNYes1入口有空間?能打開?結(jié)束輸入待追加學生信息讀取文件申請空間寫入文件操作能寫入?寫入文件(3)查詢學生記錄流程圖(圖4.3)YNN22入口輸入信息指針為空是目標記錄輸入記錄信息到表尾?結(jié)束(4)修改學生記錄流程圖(圖4.4)YYNYN入口不是目標且P!=NULL輸入要修改的學號姓名鏈表中有此結(jié)點?結(jié)束輸出未找到的信息輸出找到的學生信息修改該學生信息跳到下一結(jié)點3(5)學生記錄排序流程圖(圖4.5)44入口打開文件原表不為空總分比較排序點值小排序點值大表指針后移排在首位插入中間位置到表尾?記錄名次結(jié)束NYNYNY(6)保存文件流程圖(圖4.6)NNYNY6入口能打開?P不為空?結(jié)束輸入文件名指向文件P寫入記錄關(guān)閉文件(7)顯示文件流程圖(圖4.7)YN88入口結(jié)束找到文件顯示學生信息P為空?二、程序解析1.數(shù)據(jù)結(jié)構(gòu)鏈表是線形表的一種,線形表分為順序存儲結(jié)構(gòu)和鏈式存儲結(jié)構(gòu)。線形表的順序存儲結(jié)構(gòu)的特點是邏輯關(guān)系上相鄰的兩個元素物理位置上也相鄰,因此可以隨機存取表中任一元素。鏈式存儲結(jié)構(gòu)的特點是用一組任意的存儲單元存儲線形表的數(shù)據(jù)元素。鏈表的最大的優(yōu)點是對表的添加、刪除、查找、排序等操作比較方便,因此采用鏈表來存儲學生相關(guān)信息。且對結(jié)點的定義如下:typedefstructmessage_student/*結(jié)構(gòu)體定義*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}studen2查詢學生記錄類C碼算法:函數(shù)說明:#include"stdio.h"intfindrecord(studentstud[])/*查找信息*/定義相關(guān)變量:charstr[2];inti,num;如果沒有保存文件:if(numstus==0)輸出沒有可被查找的記錄:printf("沒有可被查找的記錄\n");返回函數(shù):return-1;否則,輸出“按何種方式查詢”:printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");選擇1,按學號查找:if(str[0]=='1')/*按學號查找*/輸出“請輸入學號”:printf("請輸入學號:");進行for和if語句的循環(huán),進行選擇:for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0)若找到符合要求的信息,則輸出:display(stud,i,i);否則退出,執(zhí)行其它程序:break;按姓名,名次查詢的程序與其相同,不再累贅;如果輸入的條件都不符合;if(i>numstus)輸出“沒有查找所要的信息”printf("沒有查找所要的信息。\n");返回函數(shù):return-1;返回主函數(shù):returni;調(diào)試分析及設計體會一、實驗結(jié)果經(jīng)過老師指導和同學的幫助,我們終于得到了正確的實驗結(jié)果,以下為學生成績管理系統(tǒng)運行的相關(guān)結(jié)果。(1)開始界面(圖5.1)(2)增加學生紀錄界面(圖5.2)(3)查詢學生紀錄界面(圖5.3)(4)修改學生紀錄界面(圖5.4)(5)查詢學生紀錄界面(圖5.5)(6)統(tǒng)計信息界面(圖5.6)(7)顯示紀錄界面(圖5.7)(8)保存文件界面(圖5.8)(9)退出系統(tǒng)界面(圖5.9)二、錯誤結(jié)果分析在實驗過程中,我們遇到許多的問題,但是在老師的指導下和同組成員的交流中得到了解決。其中,主要的錯誤有主函數(shù)mian()重復,缺少分號等。主函數(shù)main()重復(圖5.10)缺少分號(圖5.11)分號是C語句中不可缺少的一部分,語句末尾必須有分號。缺少或多加分號都會引起錯誤,下面是對這兩種情況的簡單分析:(a)忘記加分號:

a=1

b=2

編譯時,編譯程序在“a=1”后面沒發(fā)現(xiàn)分號,就把下一行“b=2”也作為上一行語句的一部分,這就會出現(xiàn)語法錯誤。改錯時,有時在被指出有錯的一行中未發(fā)現(xiàn)錯誤,就需要看一下,上一行是否漏掉了分號。

{z=x+y;

t=z/100;

printf("%f",t);

}

對于復合語句來說,最后一個語句中最后的分號不能忽略不寫。

(b)多加分號:

對于一個復合語句,如:

{z=x+y;

t=z/100;

printf("%f",t);

};

復合語句的花括號后不應再加分號,否則將會畫蛇添足。

以上這些錯誤是由于對于課本知識的不熟悉,本來不應該出現(xiàn)的錯誤,卻多次出現(xiàn),說明對于課本知識不能夠靈活的運用。三、心得體會C語言是一門計算機基礎語言,通過這一學期的學習,對于它的一些特點和算法有了一定程度的了解,并能夠做一些中等的題目,但并沒有完全掌握。這周的課程設計正是讓我們鞏固以前的知識并在此基礎上能夠有所突破的好時機。C語言程序設計是過程性程序設計語言,它的發(fā)展貫穿了計算機發(fā)展的整個歷程,它蘊含了程序設計的基本思想,囊括了程序設計的基本概念,所以它是理工科高等院校的一門基礎課程。

在C語言程序設計過程中,了解了TurboC與VisualC++在使用過程中的不同之處。學習C語言,必需注意每一個細節(jié),書上的例子代碼一定要自己親自敲一遍,編譯執(zhí)行輸出都跟書上說的一致才能算是學完了一個例子,如果不一致,就要仔細找原因,這樣才能掌握其中的知識。課程設計是培養(yǎng)學生綜合運用所學知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學生實際工作能力的具體訓練和考察過程.隨著科學技術(shù)發(fā)展的日新日異,C語言編程已經(jīng)成為當今計算機應用中空前活躍的領域,在生活中可以說是無處不在。因此作為二十一世紀的大學生來說掌握C語言的編譯與開發(fā)技術(shù)是十分重要的。在同組人員的共同努力下,經(jīng)過幾天的奮斗,我們總算將此程序設計出來。盡管不是自己獨立完成,但仍然很高興,因為在設計的過程中,讓我了解到要設計一個大型程序,查找資料,相互合作是至關(guān)重要的,在他人的基礎上,再根據(jù)自己所學進行修改與調(diào)試,最后設計出自己想要的程序。回顧起此次C語言程序課程設計,至今我仍感慨頗多,從理論到實踐,在編程的那些日子里,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。使用手冊使用手冊簡介:本程序用VisualC++6.0編寫,在TurboC運行中會出現(xiàn)相關(guān)的錯誤提示,這是由于系統(tǒng)的兼容性問題。main()函數(shù)是主函數(shù),程序從它開始執(zhí)行,也由它結(jié)束,通過主函數(shù),可以調(diào)用其他各個函數(shù)對數(shù)據(jù)進行處理。本程序使用switic語句實現(xiàn)功能的選擇。主函數(shù)main包含了各個模塊也是程序的入口,程序從它開始執(zhí)行。主函數(shù)通過一個switch語句來選擇調(diào)用各個模塊來實現(xiàn)每個模塊函數(shù)的功能從而實現(xiàn)對學生成績的有關(guān)處,其中:先用宏定義定義了學生的人數(shù),課程數(shù)目以及一個二維數(shù)組來存放學生的個人信息。addrecord()為增加學生信息函數(shù),可按提示輸入新學生的基本信息及需要增加學生信息的數(shù)目。findrecord()為查詢學生信息函數(shù),讓用戶選擇按姓名還是學號,名次來找到要查詢信息的學生。amendrecord()為修改學生信息函數(shù),用戶先輸入密碼,再進行學生基本信息的修改。sort()為學生信息排序函數(shù),按各門成績來排序的函數(shù)并輸出排序結(jié)果。本函數(shù)實現(xiàn)按總分排序的功能。課程設計要求按照平均分排序,容易看到,對與本程序來說,每個學生的總成績=平均成績×4,按總成績排序和按平均分排序結(jié)果一致,由于計算平均成績會多出一步運算,所以程序用總分代替平均分排序。在算法上,選擇直接插入算法,即:每步將一個待排序的按其排序碼值的大小插到前面已經(jīng)排好序的表中,直到全部插入為止。先將鏈表的頭結(jié)點看作是已經(jīng)排好序的結(jié)點,然后取下一個結(jié)點作為待排序的結(jié)點,插入到已排好序的表中。其具體做法為:(1).先將原表頭結(jié)點作為新排好序表的頭結(jié)點h,原表下一個結(jié)點作為原表頭結(jié)點h1。(2).原表頭結(jié)點為待排序結(jié)點,將其總分與新表結(jié)點的總分進行比較,如果待排序結(jié)點總分大,則插在表頭,否則插入在其后,原表頭結(jié)點后移一位。(3).重復第二步,即將原表頭結(jié)點的總分和新表結(jié)點的總分進行比較,如果待排序結(jié)點總分小,則移動新表指針,直到找到合適的位置將其插入。當原表為空時,所有結(jié)點排序完畢。排好序后,系統(tǒng)自動將名次數(shù)據(jù)寫入結(jié)點數(shù)據(jù)域中。statistic()為統(tǒng)計信息函數(shù),用來輸出單科成績的最高分,最低分的學生的基本信息及平均分。openfile()為打開文件函數(shù),用來打開已有的保存文件。writetotext()為保存文件函數(shù),用來將所有學生基本信息紀錄保存至文件,在修改函數(shù)執(zhí)行后,再進行文件保存。display()為輸出函數(shù),用來顯示用戶的輸入信息。采用順序訪問的方法顯示和查找記錄,定義一個指向結(jié)點的臨時變量p,初值為單鏈表的頭指針,輸出指針所記錄的數(shù)據(jù)后,將指針后移一個記錄,直到p指針值為空,則所有記錄輸出完畢。每個小模塊函數(shù)和主函數(shù)中都有退出選項。用戶可根據(jù)有關(guān)提示,輸入相關(guān)信息。源程序清單源程序清單(帶注釋)如下:#include"stdio.h"/*頭文件名*/#include"string.h"#include"malloc.h"#defineLENsizeof(structmessage_student)/*一個結(jié)構(gòu)體數(shù)組元素的長度*/#definenumsubs4/*學科數(shù)目*/typedefstructmessage_student/*結(jié)構(gòu)體定義*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}student;externintnumstus;/*學生數(shù)目*/externstudent*pointer;/*指向結(jié)構(gòu)體數(shù)組*/externintlens;intmenu_select();/*函數(shù)聲明*/intopenfile(studentstu[]);intfindrecord(studentstud[]);intwritetotext(studentstud[]);voidwelcome();voiddisplay1();voidshowtable();voidsort(studentstu[]);voiddeleterecord(studentstu[],inti);voidaddrecord(studentstud[]);voiddisplay(studentstud[],intn1,intn2);voidamendrecord(studentstud[]);voidcount(studentstud[]);voidsortnum(studentstud[]);voidsortnum2(studentstud[]);voidsortname(studentstud[]);voidsortname2(studentstud[]);voidsortcount(studentstud[]);voidsortcount2(studentstud[]);voidstatistic(studentstud[]);voiddisplay1();#include"stdio.h"intmenu_select()/*界面顯示*/{charc;printf("\n\n");printf("|1.增加學生記錄5.統(tǒng)計信息|\n");printf("|2.查詢學生記錄6.打開文件|\n");printf("|3.修改學生記錄7.保存文件|\n");printf("|4.學生紀錄排序8.顯示記錄|\n");printf("|0.退出系統(tǒng)|\n");printf("\n\n");printf("請選擇(0-8):");c=getchar();getchar();return(c-'0');}#include"stdio.h"intfindrecord(studentstud[])/*查找信息*/{charstr[2];inti,num;if(numstus==0){printf("沒有可被查找的記錄\n");return-1;}else{printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");gets(str);if(str[0]=='1')/*按學號查找*/{printf("請輸入學號:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].number)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='2')/*按姓名查找*/{printf("請輸入姓名:");gets(str);for(i=0;i<=numstus;i++)if(strcmp(str,stud[i].name)==0){display(stud,i,i);break;}elsecontinue;}elseif(str[0]=='3')/*按名次查找*/{printf("請輸入名次:");scanf("%d",&num);getchar();for(i=0;i<=numstus;i++)if(num==stud[i].index){display(stud,i,i);break;}elsecontinue;}if(i>numstus){printf("沒有查找所要的信息。\n");return-1;}returni;}}#include"stdio.h"intopenfile(studentstu[])/*保存文件*/{inti=0,j;FILE*fp;charfilename[20],str[2];if(numstus!=0){printf("已經(jīng)有記錄存在,是否保存?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')writetotext(stu);}printf("請輸入文件名:");gets(filename);numstus=0;if((fp=fopen(filename,"rb+"))==NULL){printf("無法打開該文件\n");return(-1);}fscanf(fp,"%d",&numstus);fgetc(fp);while(i<numstus){fscanf(fp,"%s",stu[i].number);fscanf(fp,"%s",stu[i].name);fscanf(fp,"%s",stu[i].sex);for(j=0;j<numsubs;j++)fscanf(fp,"%f",&stu[i].subject[j]);fscanf(fp,"%f",&stu[i].score);fscanf(fp,"%f",&stu[i].average);fscanf(fp,"%d",&stu[i].index);i++;}fclose(fp);printf("文件讀取成功\n");printf("是否顯示紀錄?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')display(stu,0,numstus-1);return(0);}#include"stdio.h"voidsort(studentstud[])/*排序文件*/{inti,j=0;charstr[5];student*p;p=stud;if(numstus==0){printf("沒有可供查詢的記錄!");}while(1){for(i=0;;i++){printf("請輸入查詢方式:");printf("(直接輸入回車則結(jié)束查詢操作)\n");printf("1.按照學號\t");printf("2.按照姓名\t");printf("3.按照名次\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1'){printf("請輸入排序次序:\n");printf("1.升序排列\(zhòng)t");printf("2.降序排列\(zhòng)n");gets(str);if(str[0]=='1')sortnum2(p);elsesortnum(p);display(stud,0,numstus-1);}elseif(str[0]=='2'){printf("請輸入排序次序:\n");printf("1.升序排列\(zhòng)t");printf("2.降序排列\(zhòng)n");gets(str);if(str[0]=='1')sortname2(p);elsesortname(p);display(stud,0,numstus-1);}elseif(str[0]=='3'){printf("請輸入排序次序:\n");printf("1.升序排列\(zhòng)t");printf("2.降序排列\(zhòng)n");gets(str);if(str[0]=='1')sortcount2(p);elsesortcount(p);display(stud,0,numstus-1);}elseprintf("請輸入1~3");printf("是否退出排序?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')break;}return;}}voidsortnum(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].number,stud[j].number)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortnum2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].number,stud[j+1].number)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortname(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j+1].name,stud[j].name)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortname2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(strcmp(stud[j].name,stud[j+1].name)>0){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortcount(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j+1].index>stud[j].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}voidsortcount2(studentstud[]){inti,j;studenttemp;student*p;p=stud;for(i=0;i<numstus;i++)for(j=0;j<numstus-i-1;j++){if(stud[j].index>stud[j+1].index){temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}}}#include"stdio.h"voidstatistic(studentstud[])/*輸出統(tǒng)計信息*/{inti,j=0,k=0;charc1,str[2];floataverage[numsubs],sum=0;if(numstus==0)printf("沒有可被查找的記錄\n");else{while(1){printf("下面將統(tǒng)計考試成績\n");printf("請選擇你要統(tǒng)計哪科的成績1.語文\t2.數(shù)學\t3.英語\t4.政治\n");c1=getchar();printf("\t一共有個%d記錄\n",numstus);/*總共記錄數(shù)*/switch(c1){case'1':for(i=0;i<numstus;i++)/*循環(huán)輸入判斷*/{sum+=stud[i].subject[0];if(stud[k].subject[0]>stud[i].subject[0])k=i;if(stud[j].subject[0]<stud[i].subject[0])j=i;}average[0]=sum/numstus;printf("\t科目語文的最高分:\n");/*最高分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);printf("\t科目語文的最低分是:\n");/*最低分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);printf("\t科目語文的平均分是%5.2f\n",average[0]);/*平均分*/break;case'2':for(i=0;i<numstus;i++)/*循環(huán)輸入判斷*/{sum+=stud[i].subject[1];if(stud[k].subject[1]>stud[i].subject[1])k=i;if(stud[j].subject[1]<stud[i].subject[1])j=i;}average[1]=sum/numstus;printf("\t科目數(shù)學的最高分:\n");/*最高分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);printf("\t科目數(shù)學的最低分是:\n");/*最低分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);printf("\t科目數(shù)學的平均分是%5.2f\n",average[1]);/*平均分*/break;case'3':for(i=0;i<numstus;i++)/*循環(huán)輸入判斷*/{sum+=stud[i].subject[2];if(stud[k].subject[2]>stud[i].subject[2])k=i;if(stud[j].subject[2]<stud[i].subject[2])j=i;}average[2]=sum/numstus;printf("\t科目英語的最高分:\n");/*最高分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);printf("\t科目英語的最低分是:\n");/*最低分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);printf("\t科目英語的平均分是%5.2f\n",average[2]);/*平均分*/break;case'4':for(i=0;i<numstus;i++)/*循環(huán)輸入判斷*/{sum+=stud[i].subject[3];if(stud[k].subject[3]>stud[i].subject[3])k=i;if(stud[j].subject[3]<stud[i].subject[3])j=i;}average[3]=sum/numstus;printf("\t科目政治的最高分:\n");/*最高分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);printf("\t科目政治的最低分是:\n");/*最低分*/printf("\t\t學號:%s姓名:%s分數(shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);printf("\t科目政治的平均分是%5.2f\n",average[3]);/*平均分*/break;default:printf("輸入錯誤!請輸入1~4之間的數(shù)\n");}sum=0;getchar();printf("是否繼續(xù)進行統(tǒng)計?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y');elsebreak;}}}#include"stdio.h"intwritetotext(studentstud[])/*將所有記錄寫入文件*/{inti=0,j;FILE*fp;charfilename[20];printf("輸入文件名稱:");gets(filename);fp=fopen(filename,"w");fprintf(fp,"%d\n",numstus);while(i<numstus){fprintf(fp,"%s%s%s",stud[i].number,stud[i].name,stud[i].sex);for(j=0;j<numsubs;j++)fprintf(fp,"%f",stud[i].subject[j]);fprintf(fp,"%f%f%d",stud[i].score,stud[i].average,stud[i].index);i++;}fclose(fp);printf("已成功存儲!\n");display(stud,0,numstus-1);numstus=0;return0;}#include"stdio.h"voidwelcome(){printf("\t*************************************************************\n");printf("\t\t\t\t湖南工程學院學生成績管理系統(tǒng)\n\t\t\t\t鍥而不舍敢為人先!\n");printf("\t*************************************************************\n");}voidshowtable(){printf("\n");printf("學號\t\t姓名\t性別\t語文\t數(shù)學\t英語\t政治\t總分\t\n");printf("\n");}voiddisplay(studentstud[],intn1,intn2){inti;showtable();/*顯示表頭*/for(i=n1;i<=n2;i++)printf("%s\t\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);/*通過循環(huán)輸出數(shù)據(jù)*/}voiddisplay1(){printf("\t\t本系統(tǒng)由湖南工程學院應用技術(shù)學院\n\n");printf("\t\t土木工程0784制作\n\n");printf("\t\t制作人員:\n");printf("\t\t第一程序設計小組\n");printf("\n\n");getchar();}#include"stdio.h"#include<string.h>voidamendrecord(studentstud[]){charpassword[10];again:printf("請輸入密碼:");scanf("%s",password);if(strcmp(password,"123")==0){printf("密碼確認!!!\n");printf("請修改!\n");}else{printf("密碼不正確,請重新輸入!!!\n");gotoagain;}charstr[5];/*供用戶輸入*/inti=-1,j;if(numstus==0)/*沒有記錄返回*/printf("沒有可供修改的記錄!");while(i<0){i=findrecord(stud);if(i>=0){printf("要刪除這個學生的信息嗎?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){deleterecord(stud,i);count(stud);}else{printf("確定要修改這個學生的信息嗎?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){printf("下面請重新輸入學生的信息:\n");printf("請輸入學號:\n");gets(stud[i].number);printf("請輸入姓名:\n");gets(stud[i].name);printf("請輸入性別(男/女1/0):\n");gets(str);if(str[0]=='0')strcpy(stud[i].sex,"女");elsestrcpy(stud[i].sex,"男");stud[i].score=0;printf("請按順序輸入成績:");for(j=0;j<numsubs;j++){scanf("%f",&stud[i].subject[j]);stud[i].score+=stud[i].subject[j];}getchar();stud[i].average=stud[i].score/numsubs;}count(stud);}display(stud,0,numstus-1);}printf("是否繼續(xù)進行其他修改?(y/n)\n");gets(str);if(str[0]=='y'||str[0]=='Y')i=-1;elsei=1;}}voiddeleterecord(studentstu[],inti)/*刪除信息*/{intj;while(i>=0){for(j=i;j<numstus;j++)stu[j]=stu[j+1];numstus--;printf("刪除成功!\n");}}voidcount(studentstud[]){inti,j;for(i=0;i<numstus;i++){stud[i].index=1;for(j=0;j<numstus;j++)if(stud[j].

溫馨提示

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

最新文檔

評論

0/150

提交評論