版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
年4月19日C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)增加查詢修改排序統(tǒng)計(jì)文件文檔僅供參考課程設(shè)計(jì)(論文)說(shuō)明書題目:學(xué)生成績(jī)管理系統(tǒng)院(系):信息與通信學(xué)院專業(yè):電子信息工程學(xué)生姓名:SUSHENGMIAN學(xué)號(hào):指導(dǎo)教師:彭明職稱:教授_12月8日摘要學(xué)生成績(jī)是高校人才培養(yǎng)計(jì)劃的重要組成部分,是實(shí)現(xiàn)人才培養(yǎng)目標(biāo)、培養(yǎng)學(xué)生科研能力與創(chuàng)新思維、檢驗(yàn)學(xué)生綜合素質(zhì)與實(shí)踐能力的重要手段與綜合性實(shí)踐教學(xué)環(huán)節(jié)。當(dāng)前,學(xué)校工作繁雜、資料重多,雖然各類管理信息系統(tǒng)已進(jìn)入高校,但還未普及,而對(duì)于學(xué)生成績(jī)管理來(lái)說(shuō),當(dāng)前還沒(méi)有一套完整的、統(tǒng)一的系統(tǒng)。因此,開發(fā)一套適和大眾的、兼容性好的系統(tǒng)是很有必要的。我們有必要開發(fā)學(xué)生成績(jī)管理系統(tǒng)來(lái)對(duì)學(xué)生成績(jī)檔案進(jìn)行數(shù)字化管理。既可減輕學(xué)院教職員工工作壓力,比較系統(tǒng)地對(duì)教務(wù)、教學(xué)上的各項(xiàng)服務(wù)和信息進(jìn)行管理,又可加快成績(jī)查詢速度、加強(qiáng)成績(jī)管理,使各項(xiàng)管理更加規(guī)范化。本系統(tǒng)主要完成對(duì)學(xué)生成績(jī)的管理,包括添加、修改、刪除,查詢,統(tǒng)計(jì)信息以用戶管理等六個(gè)方面。系統(tǒng)能夠完成對(duì)各類信息的瀏覽、查詢、添加、刪除、修改等功能關(guān)鍵詞:c語(yǔ)言;學(xué)生成績(jī)管理系統(tǒng);增加;查詢;修改;排序;統(tǒng)計(jì);文件AbstractStudentgradesisanimportantpartoftalentcultivationofcollege。StudentFilesmustremainwithintheStudentServices(orsimilarpurposearea)atalltimesandshouldnotberemovedfromtheseareasunlessrequiredforspecificpurposessuchastodealwithothercasessuchaslegal,disciplinary,grievancesetc,howeveroncethosecaseshavebeendealtwiththefilesmustbereturned,unalteredtotherespectiveStudentServicearea.Thissystemisastudentcurriculumandtheresultmanagementsystemmanagementsystem,itisinauniversitieseducationaladministrationmanagementsystemmanagementsystemsub-system.Themainuseristhestudent,theteacherandthemanager.Thesystemfacilitatedthestudenttochoosetheclassandtolookuptheminute.Hasfacilitatedteacher'steachingmanagementandthestudentresultinput.ThesystemhasmoremoreimportantlyfacilitatedtheschooleducationaadministrationmanagementKeyword:CLanguag;StudentScoreManagementSystem;aggrandize;inquire;amend;sort;statistics;document目錄1.課設(shè)目的………12.課程論文題目…………………13.程序設(shè)計(jì)思路…………………13.1需求分析……………………13.2主函數(shù)分析…………………23.3功能模塊設(shè)計(jì)………………23.3.1菜單模塊…………………23.3.2增加模塊…………………23.3.3查詢模塊…………………23.3.4修改模塊…………………23.3.5排序模塊…………………33.3.6統(tǒng)計(jì)模塊…………………34.功能模塊流程圖………………44.1增加模塊流程圖……………44.2查詢模塊流程圖……………54.3修改模塊流程圖……………54.4排序模塊流程圖……………64.5統(tǒng)計(jì)模塊流程圖……………65.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)………………66.算法設(shè)計(jì)……………………77.程序運(yùn)行結(jié)果………………87.1菜單模塊運(yùn)行結(jié)果…………87.2增加模塊運(yùn)行結(jié)果…………87.3查詢模塊運(yùn)行結(jié)果…………87.4修改模塊運(yùn)行結(jié)果…………97.5排序模塊運(yùn)行結(jié)果…………97.6統(tǒng)計(jì)模塊運(yùn)行結(jié)果…………107.7打開文件模塊運(yùn)行結(jié)果……107.8保存模塊運(yùn)行結(jié)果…………108.編程中遇到的困難與解決方法……………109.實(shí)驗(yàn)總結(jié)……………………10致謝……………11參考文獻(xiàn)………12附錄……………131.課設(shè)目的經(jīng)過(guò)本課程設(shè)計(jì)鞏固《C語(yǔ)言程序設(shè)計(jì)》課程教學(xué)成果,深入理解結(jié)構(gòu)體、指針、鏈表、動(dòng)態(tài)分配內(nèi)存和文件操作等C程序設(shè)計(jì)中的中高級(jí)技術(shù),熟練掌握C語(yǔ)言的調(diào)試方法,初步培養(yǎng)良好的編程習(xí)慣和編程風(fēng)格,初步學(xué)習(xí)程序文檔的撰寫方法。2.程序論文題目創(chuàng)立一個(gè)學(xué)生管理系統(tǒng)。學(xué)生包含以下信息項(xiàng):學(xué)號(hào),姓名,性別,語(yǔ)文成績(jī),數(shù)學(xué)成績(jī),英語(yǔ)成績(jī),物理成績(jī),化學(xué)成績(jī),總分、平均分。系統(tǒng)的主要功能包括:(1).創(chuàng)立學(xué)生成績(jī)信息文件,根據(jù)提示輸入學(xué)生的各項(xiàng)信息,計(jì)算出總分和平均分,然后按學(xué)號(hào)對(duì)學(xué)生信息進(jìn)行排序,并將排序后的學(xué)生成績(jī)信息存儲(chǔ)到一個(gè)二進(jìn)制文件中。(2).增加學(xué)生信息,在原有學(xué)生信息文件的基礎(chǔ)上增加新的學(xué)生成績(jī)信息,要求:增加后的學(xué)生信息仍按學(xué)號(hào)排序,并繼續(xù)保存至原文件。(3).刪除學(xué)生信息,提示用戶輸入要進(jìn)行刪除操作的學(xué)號(hào),如果在文件中有該信息存在,則將該學(xué)號(hào)所對(duì)應(yīng)的學(xué)生信息刪除,否則輸出提示信息,并提示用戶選擇是否繼續(xù)進(jìn)行刪除操作。(4).修改學(xué)生信息,提示用戶輸入要進(jìn)行修改操作的學(xué)號(hào),如果在文件中有該息存在,則將提示用戶輸入該學(xué)號(hào)對(duì)應(yīng)的要修改的選項(xiàng),結(jié)果保存至原文件,并提示用戶選擇是否繼續(xù)進(jìn)行修改操作。(5).按不同條件對(duì)學(xué)生信息進(jìn)行查詢操作,輸出滿足條件的學(xué)生信息。a按學(xué)號(hào)查詢,輸入一個(gè)學(xué)號(hào),輸出對(duì)應(yīng)的學(xué)生信息。b按姓名查詢,包括精確查詢(輸入全名),模糊查詢(輸入姓)。c按學(xué)院查詢,輸入學(xué)院名稱,輸出該學(xué)院的全部學(xué)生的信息。(6).按不同條件對(duì)學(xué)生成績(jī)進(jìn)行統(tǒng)計(jì)工作。a.按總分對(duì)學(xué)生信息進(jìn)行排序(由高到低),輸出排序后的信息,并將排序后的學(xué)生信息存放到一個(gè)新的二進(jìn)制文件中。b.分別找出3門課程成績(jī)最高和最低的的學(xué)生,并輸出她們的信息。3.程序設(shè)計(jì)思路3.1需求分析可將系統(tǒng)的設(shè)計(jì)分為:菜單模塊,增加信息模塊,修改信息模塊,排序模塊,統(tǒng)計(jì)模塊,保存文件模塊,打開文件模塊,顯示模塊。a.菜單模塊為用戶的選擇進(jìn)行提示。b.增加信息模塊用于增加學(xué)生的學(xué)號(hào),姓名,語(yǔ)文成績(jī),數(shù)學(xué)成績(jī),語(yǔ)成績(jī),物理成績(jī),化學(xué)成績(jī),總成績(jī),平均分。c.修改信息模塊用于對(duì)學(xué)生的學(xué)號(hào),姓名,語(yǔ)文成績(jī),數(shù)學(xué)成績(jī),英語(yǔ)成績(jī),物理成績(jī),化學(xué)成績(jī),總成績(jī),平均分等各種信息進(jìn)行修改。d.排序模塊用于對(duì)學(xué)生的學(xué)號(hào),姓名,總分進(jìn)行排序,每種排序方法對(duì)于有升序排序和降序排序兩種排列方式e.統(tǒng)計(jì)模塊用于對(duì)學(xué)生的各科成績(jī)進(jìn)行一個(gè)匯總分析??山y(tǒng)計(jì)出每一科的最高分,最低分以及平均分。3.2.主函數(shù)設(shè)計(jì)主函數(shù)提供輸入,處理,輸出部分的函數(shù)的調(diào)用,其中各個(gè)功能模塊用菜單方式選擇,即在主函數(shù)里顯示一系列功能選擇,判斷后,是否調(diào)用某個(gè)功能用了switch()選擇功能3.3.各功能模塊設(shè)計(jì)3.3.1.菜單模塊:定義了字符變量c,用戶根據(jù)相應(yīng)的提示進(jìn)行選擇,最后將字符變量返回main()函數(shù),根據(jù)c的不同值,調(diào)用不同的函數(shù)3.3.2.增加信息模塊。輸入要增加的信息條數(shù)num。如果原來(lái)學(xué)生的數(shù)量為0.那么學(xué)生的數(shù)量為num,將要輸入的學(xué)生信息依次放在指針位置為0~(num-1)的位置,然后調(diào)用count函數(shù),按總成績(jī)對(duì)學(xué)生進(jìn)行排名,并在屏幕上顯示。如果原來(lái)學(xué)生數(shù)量不為0,詢問(wèn)是否覆蓋原來(lái)的數(shù)據(jù),如果選擇覆蓋,那么學(xué)生的數(shù)量為num,將要輸入的學(xué)生信息依次放在指針位置為0~(num-1)的位置,然后調(diào)用count函數(shù),按總成績(jī)對(duì)學(xué)生進(jìn)行排名,并在屏幕上顯示。如果不選擇覆蓋,那么學(xué)生個(gè)數(shù)等于原個(gè)數(shù)加上新增數(shù),將信息依次放在指針位置為numstus~umstus+num-1)的位置,然后調(diào)用count函數(shù),按總成績(jī)對(duì)學(xué)生進(jìn)行排名,并在屏幕上顯示。最后返回主函數(shù)。3.3.3.查詢信息模塊。如果學(xué)生數(shù)量為0,沒(méi)有信息可查詢,返回主函數(shù)。如果學(xué)生人數(shù)不為0,則詢問(wèn)用戶要選擇的查詢方式,有3種查詢方式供選擇,分別為按學(xué)號(hào)查詢,按姓名查詢,按名次查詢。對(duì)于按學(xué)號(hào)查詢,將輸入的學(xué)號(hào)與各個(gè)學(xué)生的學(xué)號(hào)相比較調(diào)用格式為strcmp(str,stud[i].number)。如果輸入的學(xué)號(hào)與某個(gè)學(xué)生的學(xué)號(hào)相等,則輸出該學(xué)生的全部信息。對(duì)于按姓名查詢,將輸入的姓名與各個(gè)學(xué)生的姓名相比較,調(diào)用格式為strcmp(str,stud[i].name)。如果輸入的姓名與某個(gè)學(xué)生的姓名相等,則輸出該學(xué)生的全部信息。對(duì)于按名次查詢,將輸入的名次與各個(gè)學(xué)生的名次相比較。如果輸入的名次與某個(gè)學(xué)生的名次相等(num==stud[i].index),則輸出該學(xué)生的全部信息。3.3.4.修改模塊。如果學(xué)生數(shù)量為0,沒(méi)有信息可查詢,返回主函數(shù)。如果學(xué)生人數(shù)不為0,則調(diào)用查詢函數(shù)findrecord(pointer),查詢函數(shù)返回一個(gè)整型數(shù)據(jù)i,則修改函數(shù)對(duì)地i個(gè)學(xué)生的信息進(jìn)行修改。修改完畢后,重新對(duì)學(xué)生的總成績(jī)進(jìn)行排名,并在屏幕顯示修改之后的信息。如果要?jiǎng)h除信息,則調(diào)用刪除函數(shù)deleterecord(),修改完畢后,重新對(duì)學(xué)生的總成績(jī)進(jìn)行排名,并在屏幕顯示修改之后的信息。如果還要修改其它信息,則返回開始處繼續(xù)執(zhí)行。最后返回主函數(shù)3.3.5.排序模塊。。如果學(xué)生數(shù)量為0,沒(méi)有信息可排序,返回主函數(shù)。如果學(xué)生人數(shù)不為0,詢問(wèn)用戶要選擇的排序方法。輸入1,則按學(xué)號(hào)進(jìn)行排序,可對(duì)學(xué)號(hào)進(jìn)行升序排序,降序排序。如果進(jìn)行降序排序,調(diào)用函數(shù)sortnum(p),如果進(jìn)行升序排序,則調(diào)用函數(shù)sortnum2(p);輸入2,則按姓名進(jìn)行排序,可對(duì)姓名進(jìn)行升序排序,降序排序。如果進(jìn)行降序排序,調(diào)用函數(shù)sortname(p),如果進(jìn)行升序排序,則調(diào)用函數(shù)sortname(p);輸入3,則按名次進(jìn)行排序,可對(duì)名次進(jìn)行升序排序,降序排序。如果進(jìn)行降序排序,調(diào)用函數(shù)sortcount(p),如果進(jìn)行升序排序,則調(diào)用函數(shù)sortcount2(p);排序完成之后,顯示排序之后的結(jié)果。如果還要進(jìn)行其它的排序,則返回繼續(xù)進(jìn)行查詢。查詢完畢之后,返回主函數(shù)。。在尋找的過(guò)程中用了字符串的比較strcmp(字符串1,字符串2)如果字符串1=字符串2則函數(shù)值為0。如果字符串1>字符串2則函數(shù)值為一個(gè)正整數(shù)。如果字符串1<字符串2則函數(shù)值為一個(gè)負(fù)整數(shù)。3.3.6.統(tǒng)計(jì)模塊。詢問(wèn)用戶想要統(tǒng)計(jì)的科目,一共有5科(語(yǔ)文,數(shù)學(xué),英語(yǔ),物理),輸入數(shù)字1~5進(jìn)行選擇。在運(yùn)用swith()的選擇功能,進(jìn)行各個(gè)科目的統(tǒng)計(jì)。運(yùn)用比較法得到統(tǒng)計(jì)信息。3.3.7.保存文件模塊。定義一個(gè)指向文件的指針的文件變量fp。用到fopen(文件名使用文件方式)fclose(文件指針)fprintf(文件指針格式字符串輸出列表)。保存文件模塊將輸入的信息保存在硬盤中。打開文件模塊將保存起來(lái)的文件再次調(diào)出來(lái)使用。顯示模塊將用戶選擇的模塊在屏幕上顯示出來(lái)3.3.8.打開文件模塊。定義一個(gè)指向文件的指針的文件變量fp。用到fopen(filename,"rb+"))==NULL)rb+,其中為讀寫打開一個(gè)二進(jìn)制文件fscanf(fp,"%d",&numstus);從磁盤文件中讀取變量numstus,在屏幕上顯示4.功能模塊圖4.1增加模塊4.2查詢模塊4.3修改模塊4.4排序模塊4.5統(tǒng)計(jì)模塊5.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)此程序中用到了(1)基本類型1)常量的使用#defineH_STUDENT_HH502)整型int3)字符型char4)浮點(diǎn)型float5)浮點(diǎn)型(雙精度double)(2)結(jié)構(gòu)體類型#defineLENsizeof(structmessage_student)/*一個(gè)結(jié)構(gòu)體數(shù)組元素的長(zhǎng)度*/#definenumsubs5/*學(xué)科數(shù)目*/typedefstructmessage_student/*結(jié)構(gòu)體定義*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}student;(3)指針類針:FILE*fp,文件型指針變量,fp是一個(gè)指向FLIE類型結(jié)構(gòu)的指針變量。6.算法設(shè)計(jì)7.程序運(yùn)行結(jié)果7.1主函數(shù)運(yùn)行結(jié)果7.2增加模塊運(yùn)行結(jié)果7.3查詢模塊運(yùn)行結(jié)果a.按名次進(jìn)行查詢b.按學(xué)號(hào)進(jìn)行查詢c.按名次進(jìn)行查詢7.4修改模塊運(yùn)行結(jié)果7.5排序模塊運(yùn)行結(jié)果a.按學(xué)號(hào)排序b.按姓名排序c.按名次排序7.6統(tǒng)計(jì)模塊運(yùn)行結(jié)果7.7打開文件模塊運(yùn)行結(jié)果7.8保存模塊運(yùn)行結(jié)果8.編程中遇到的困難及解決方法由于自己時(shí)間過(guò)長(zhǎng)的遺忘及知識(shí)的局限性使得在程序的編譯中存在一些問(wèn)題,對(duì)每個(gè)功能模塊的理解,以及主函數(shù)的功能,都是在同學(xué)的幫助和老師的講解下有了更深的了解。編寫主函數(shù)根據(jù)一些例題的模式以及自己的所要實(shí)現(xiàn)的功能來(lái)完成,每一個(gè)子模塊,也是根據(jù)例題模塊以及要實(shí)現(xiàn)的功能編寫。用到了文件,結(jié)構(gòu)體類型,數(shù)組,類型的裝換等等文件以及結(jié)構(gòu)體類型,經(jīng)過(guò)查看書本完成的。在運(yùn)行過(guò)程中每個(gè)模塊運(yùn)行后不能接著下一個(gè)模塊。9.實(shí)驗(yàn)總結(jié)做這個(gè)項(xiàng)目讓我明白了一些道理,再大的程序也是有不同的小程序組成的。經(jīng)過(guò)這幾天的學(xué)習(xí)使我了解到C語(yǔ)言的重要性,之前接觸到的C語(yǔ)言內(nèi)容都是理論上的,可是沒(méi)怎么用到實(shí)際操作當(dāng)中。這次課程設(shè)計(jì)給了我一次真正認(rèn)識(shí)C語(yǔ)言的機(jī)會(huì)剛開始覺(jué)得C語(yǔ)言是一種很深?yuàn)W的東西對(duì)于剛開始接觸這門課程的我來(lái)說(shuō)非常的不適應(yīng)。第一次真正認(rèn)真的投入C語(yǔ)言當(dāng)中,第一次用自己在課堂上學(xué)習(xí)的東西逐步的去解決實(shí)際問(wèn)題這次是完成實(shí)驗(yàn)設(shè)備信息的管理。經(jīng)過(guò)這次課程設(shè)計(jì),我知道自己的計(jì)算機(jī)知識(shí)還是相當(dāng)有限的,在這次的程序編譯過(guò)程中遇到了很多自己無(wú)法解決的問(wèn)題,可是經(jīng)過(guò)同學(xué)的幫助和老師的指導(dǎo),上網(wǎng)查看資料等方法,最終問(wèn)題都基本解決了。致謝在這次課程設(shè)計(jì)過(guò)程中,我鞏固了C語(yǔ)言的基礎(chǔ)知識(shí),對(duì)c語(yǔ)言有了更深入的了解。以前從來(lái)沒(méi)有這樣編過(guò)完整的程序,課設(shè)讓我有這樣的一個(gè)機(jī)會(huì)。我覺(jué)得自己說(shuō)學(xué)的東西不多,可是在學(xué)習(xí)的過(guò)程中也發(fā)現(xiàn)c語(yǔ)言沒(méi)那么難。感謝我的c語(yǔ)言老師,一個(gè)是帶我走進(jìn)C語(yǔ)言大門的覃匡宇老師,從她身上學(xué)到了很多知識(shí)和道理,并逐漸喜歡上c語(yǔ)言。同時(shí),在這次課設(shè)中,彭老師對(duì)我的幫助使我收獲很多,包括論文的排版等問(wèn)題,彭老師都指出錯(cuò)誤和不足之處,使我少走出了許多誤區(qū),在此表示深深的感謝。最后感謝所有曾在c語(yǔ)言上幫助我的人。參考文獻(xiàn)[1]譚浩強(qiáng).c語(yǔ)言程序設(shè)計(jì).北京:清華大學(xué)出版社,:11~289[2]陳朔鷹.《C語(yǔ)言程序設(shè)計(jì)習(xí)題集(第二版).北京:人民郵電出版社,:37~85[3]陳朔鷹.《C語(yǔ)言趣味程序百例精解》.北京:北京理工大學(xué)出版社,:81~98附錄程序代碼:#ifndefH_STUDENT_HH/**條件指示符#ifndef的最主要目的是防止頭文件的重復(fù)包含和編譯//*條件編譯*/#defineH_STUDENT_HH/*#為預(yù)編譯命令*/#include"stdio.h"#include"string.h"#include"malloc.h"#defineLENsizeof(structmessage_student)/*一個(gè)結(jié)構(gòu)體數(shù)組元素的長(zhǎng)度*/#definenumsubs5/*學(xué)科數(shù)目*/typedefstructmessage_student/*結(jié)構(gòu)體定義*/{charnumber[6];charname[20];charsex[4];floatsubject[numsubs];floatscore;floataverage;intindex;}student;externintnumstus;/*學(xué)生數(shù)目*//*extern表示為全局變量*/externstudent*pointer;/*指向結(jié)構(gòu)體數(shù)組*/externintlens;intmenu_select();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[]);#endifintmenu_select(){charc;printf("\n\n");printf("|1.增加學(xué)生記錄5.統(tǒng)計(jì)信息|\n");printf("|2.查詢學(xué)生記錄6.打開文件|\n");printf("|3.修改學(xué)生記錄7.保存文件|\n");printf("|4.學(xué)生紀(jì)錄排序8.顯示記錄|\n");printf("|0.退出系統(tǒng)|\n");printf("\n\n");printf("請(qǐng)選擇(0-8):");c=getchar();getchar();return(c-'0');}intfindrecord(studentstud[])/*查找學(xué)生信息*/{charstr[2];inti,num;if(numstus==0){printf("沒(méi)有可被查找的記錄\n");return-1;}else{printf("以何種方式查找?\n1.學(xué)號(hào)\t2.姓名\t3.名次\n");gets(str);if(str[0]=='1')/*按學(xué)號(hào)查找*/{printf("請(qǐng)輸入學(xué)號(hào):");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("請(qǐng)輸入姓名:");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("請(qǐng)輸入名次:");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("沒(méi)有查找所要的信息。\n");return-1;}returni;}}//#include"head.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("請(qǐng)輸入文件名:");gets(filename);numstus=0;if((fp=fopen(filename,"rb+"))==NULL)/*rb+,為讀寫打開一個(gè)二進(jìn)制文件*/{printf("無(wú)法打開該文件\n");return(-1);}fscanf(fp,"%d",&numstus);/*從磁盤文件中讀取變量numstus,在屏幕上顯示*/fgetc(fp);/*從文件fp獲取一個(gè)字符*/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("是否顯示紀(jì)錄?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')display(stu,0,numstus-1);return(0);}//#include"head.h"voidsort(studentstud[])/*排序模塊*/{inti,j=0;charstr[5];student*p;p=stud;if(numstus==0){printf("沒(méi)有可供查詢的記錄!");}while(1){for(i=0;;i++){printf("請(qǐng)輸入排序方式:");printf("(直接輸入回車則結(jié)束查詢操作)\n");printf("1.按照學(xué)號(hào)\t");printf("2.按照姓名\t");printf("3.按照名次\n");gets(str);if(strlen(str)==0)break;if(str[0]=='1')/*按學(xué)號(hào)排序*/{printf("請(qǐng)輸入排序次序:\n");printf("1.升序排列\(zhòng)t");printf("2.降序排列\(zhòng)n");gets(str);if(str[0]=='1')sortnum2(p);/*按學(xué)號(hào)升序排序*/elsesortnum(p);/*按學(xué)號(hào)降序排序*/display(stud,0,numstus-1);}elseif(str[0]=='2')/*按姓名排序*/{printf("請(qǐng)輸入排序次序:\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("請(qǐng)輸入排序次序:\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("請(qǐng)輸入1~3");printf("是否退出排序?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y')break;}return;}}voidsortnum(studentstud[])/*按學(xué)號(hào)降序排序*/{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[])/*按學(xué)號(hào)升序排序*/{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"head.h"voidstatistic(studentstud[])/*輸出統(tǒng)計(jì)信息*/{inti,j=0,k=0;charc1,str[2];floataverage[numsubs],sum=0;if(numstus==0)printf("沒(méi)有可被查找的記錄\n");else{while(1){printf("下面將統(tǒng)計(jì)考試成績(jī)\n");printf("請(qǐng)選擇你要統(tǒng)計(jì)哪科的成績(jī)1.語(yǔ)文\t2.數(shù)學(xué)\t3.英語(yǔ)\t4.物理\t5.化學(xué)\n");c1=getchar();printf("\t一共有個(gè)%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;/*k用于記錄成績(jī)最低的學(xué)生的序號(hào)*/if(stud[j].subject[0]<stud[i].subject[0])j=i;/*j用于記錄成績(jī)最高的學(xué)生的序號(hào)*/}average[0]=sum/numstus;/*統(tǒng)計(jì)該科的平均分*/printf("\t科目【語(yǔ)文】的最高分:\n");/*最高分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);printf("\t科目【語(yǔ)文】的最低分是:\n");/*最低分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);printf("\t科目【語(yǔ)文】的平均分是%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ù)學(xué)】的最高分:\n");/*最高分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);printf("\t科目【數(shù)學(xué)】的最低分是:\n");/*最低分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);printf("\t科目【數(shù)學(xué)】的平均分是%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科目【英語(yǔ)】的最高分:\n");/*最高分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);printf("\t科目【英語(yǔ)】的最低分是:\n");/*最低分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);printf("\t科目【英語(yǔ)】的平均分是%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學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);printf("\t科目【物理】的最低分是:\n");/*最低分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);printf("\t科目【物理】的平均分是%5.2f\n",average[3]);/*平均分*/break;case'5':for(i=0;i<numstus;i++)/*循環(huán)輸入判斷*/{sum+=stud[i].subject[4];if(stud[k].subject[4]>stud[i].subject[4])k=i;if(stud[j].subject[4]<stud[i].subject[4])j=i;}average[4]=sum/numstus;printf("\t科目【化學(xué)】的最高分:\n");/*最高分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);printf("\t科目【化學(xué)】的最低分是:\n");/*最低分*/printf("\t\t學(xué)號(hào):%s姓名:%s分?jǐn)?shù):%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);printf("\t科目【化學(xué)】的平均分是%5.2f\n",average[4]);/*平均分*/break;default:printf("輸入錯(cuò)誤!請(qǐng)輸入1~5之間的數(shù)\n");}sum=0;getchar();printf("是否繼續(xù)進(jìn)行統(tǒng)計(jì)?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y');elsebreak;}}}intwritetotext(studentstud[])/*將所有記錄寫入文件*/{inti=0,j;FILE*fp;/*定義一個(gè)指向文件的指針的文件變量*/charfilename[20];printf("輸入文件名稱:");gets(filename);fp=fopen(filename,"w");/*將fopen函數(shù)的返回值賦給指針變量fp*//*建立新文件*/fprintf(fp,"%d\n",numstus);/*將變量numstus按%d的格式輸出到fp指向的文件*/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);/*關(guān)閉文件*/printf("已成功存儲(chǔ)!\n");display(stud,0,numstus-1);numstus=0;return0;}voidwelcome(){printf("\t*************************************************************\n");printf("\t\t\t\t**學(xué)生成績(jī)管理系統(tǒng)**\t\t\t\t");printf("\t*************************************************************\n");}voidshowtable(){printf("\n");printf("學(xué)號(hào)\t姓名\t性別\t語(yǔ)文\t數(shù)學(xué)\t英語(yǔ)\t物理\t化學(xué)\t總分\t平均分\t名次\n");printf("\n");}voiddisplay(studentstud[],intn1,intn2){inti;showtable();/*顯示表頭*/for(i=n1;i<=n2;i++)printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\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);/*經(jīng)過(guò)循環(huán)輸出數(shù)據(jù)*/}#include<string.h>voidamendrecord(studentstud[])/*修改學(xué)生信息*/{charstr[5];/*供用戶輸入*/inti=-1,j;if(numstus==0)/*沒(méi)有記錄返回*/printf("沒(méi)有可供修改的記錄!");while(i<0){i=findrecord(stud);if(i>=0){printf("要?jiǎng)h除這個(gè)學(xué)生的信息嗎?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){deleterecord(stud,i);count(stud);}else{printf("確定要修改這個(gè)學(xué)生的信息嗎?(y/n)");gets(str);if(str[0]=='y'||str[0]=='Y'){printf("下面請(qǐng)重新輸入學(xué)生的信息:\n");printf("請(qǐng)輸入學(xué)號(hào):");gets(stud[i].number);printf("請(qǐng)輸入姓名:");gets(stud[i].name);printf("請(qǐng)輸入性別(男/女1/0):");gets(str);if(str[0]=='0')strcpy(stud[i].sex,"女");elsestrcpy(stud[i].sex,"男");stud[i].score=0;printf("請(qǐng)按順序輸入成績(jī):");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ù)進(jìn)行其它修改?(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");break;}}voidcount(studentstud[])/*按總成績(jī)對(duì)學(xué)生進(jìn)行排名*/{inti,j;for(i=0;i<numstus;i++){st
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度鐵路旅客運(yùn)輸合同修訂版2篇
- 2025版圖書電子文檔txt下載代理授權(quán)合同3篇
- 二零二五年高校創(chuàng)新創(chuàng)業(yè)基地入駐服務(wù)合同3篇
- 2025年度個(gè)人小產(chǎn)權(quán)房屋買賣合同范本與稅務(wù)籌劃要點(diǎn)4篇
- 二零二五年度4S店汽車銷售區(qū)域代理合同范本3篇
- 二零二五版智慧交通管理系統(tǒng)建設(shè)與運(yùn)營(yíng)協(xié)議3篇
- 二零二五年度馬鈴薯深加工廢棄物資源化利用合同4篇
- 二零二五年度創(chuàng)新型企業(yè)房屋租賃合同書
- 2025年度平房出租與城市可持續(xù)發(fā)展合作協(xié)議4篇
- 二零二五年度商業(yè)綜合體停車場(chǎng)投資建設(shè)合作協(xié)議3篇
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級(jí)歷史下冊(cè)
- 2025-2030年中國(guó)糖醇市場(chǎng)運(yùn)行狀況及投資前景趨勢(shì)分析報(bào)告
- 冬日暖陽(yáng)健康守護(hù)
- 水處理藥劑采購(gòu)項(xiàng)目技術(shù)方案(技術(shù)方案)
- 2024級(jí)高一上期期中測(cè)試數(shù)學(xué)試題含答案
- 盾構(gòu)標(biāo)準(zhǔn)化施工手冊(cè)
- 山東省2024-2025學(xué)年高三上學(xué)期新高考聯(lián)合質(zhì)量測(cè)評(píng)10月聯(lián)考英語(yǔ)試題
- 不間斷電源UPS知識(shí)培訓(xùn)
- 三年級(jí)除法豎式300道題及答案
- 2024年江蘇省徐州市中考一模數(shù)學(xué)試題(含答案)
- 新一代飛機(jī)維護(hù)技術(shù)
評(píng)論
0/150
提交評(píng)論