學(xué)生成績管理系統(tǒng)報告文檔.doc
課 程 設(shè) 計 報 告課程名稱 數(shù)據(jù)結(jié)構(gòu) 課題名稱 _學(xué)生成績管理系統(tǒng) 專 業(yè) 計算機科學(xué)與技術(shù)專業(yè) 班 級 計算機 學(xué) 號 姓 名 * 指導(dǎo)教師 * 2012年 12 月 9 日 前 言 設(shè)計課題八三十:學(xué)生成績管理系統(tǒng)一、問題描述:現(xiàn)有學(xué)生成績信息文件1(1.txt),內(nèi)容如下姓名 學(xué)號 語文 數(shù)學(xué) 英語 張明明 01 67 78 82李成友 02 78 91 88張輝燦 03 68 82 56王露 04 56 45 77陳東明 05 67 38 47. . . . 學(xué)生成績信息文件2(2.txt),內(nèi)容如下:姓名 學(xué)號 語文 數(shù)學(xué) 英語 陳果 31 57 68 82李華明 32 88 90 68張明東 33 48 42 56李明國 34 50 45 87陳道亮 35 47 58 77. 試編寫一管理系統(tǒng),要求如下:1) 實現(xiàn)對兩個文件數(shù)據(jù)進行合并,生成新文件3.txt2) 抽取出三科成績中有補考的學(xué)生并保存在一個新文件4.txt3) 對合并后的文件3.txt中的數(shù)據(jù)按總分降序排序(至少采用兩種排序方法實現(xiàn))4) 輸入一個學(xué)生姓名后,能查找到此學(xué)生的信息并輸出結(jié)果(至少采用兩種查找方法實現(xiàn))5) 要求使用結(jié)構(gòu)體,鏈或數(shù)組等實現(xiàn)上述要求.二、功能要求:1、實現(xiàn)對兩個文件數(shù)據(jù)進行合并,生成新文件3.txt。2、本系統(tǒng)顯示這樣的菜單:請選擇系統(tǒng)功能項:0.退出1 .顯示學(xué)生信息2.顯示按學(xué)號排序后的學(xué)生信息3.顯示按總分排序后的學(xué)生信息4.按學(xué)號查學(xué)生各科分?jǐn)?shù)和總分5.按姓名查學(xué)生各科分?jǐn)?shù)和總分6.抽取出三科成績中有補考的學(xué)生并保存三、算法提示:1、 數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組2、 數(shù)據(jù)庫結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫。姓名學(xué)號語文數(shù)學(xué)英語Charint intintint四、測試數(shù)據(jù):學(xué)生人數(shù)N=10 五、其它:對該系統(tǒng)有興趣的同學(xué)可以在實現(xiàn)上述基本功能后,完善系統(tǒng)的其它功能。目錄第一章 緒論第一節(jié) 課程背景第二節(jié) 本文所做工作第二章 需求分析第三章 總體設(shè)計第四章 詳細設(shè)計第五章 測試第六章 使用說明第七章 總結(jié)附錄A 源代碼附錄B 參考資料第一章緒論學(xué)生成績管理系統(tǒng)是一個教育單位不可缺少的部分,它的內(nèi)容對于學(xué)校的決策者和管理者來說都至關(guān)重要,所以學(xué)生成績管理系統(tǒng)應(yīng)該能夠為用戶提供充足的信息和快捷的查詢手段 學(xué)生檔案管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),經(jīng)過分析如此情況,我們用code#blocks開發(fā)工具,利用其提供的各種面向?qū)ο蟮拈_發(fā)工具和功能強大的SQL(結(jié)構(gòu)化查詢語言)。 第一節(jié) 課程背景在我國,各大中小學(xué)校的各類信息管理系統(tǒng)并非一個新的課題,但也有的學(xué)校根本就沒有信息任何管理系統(tǒng),所有的工作幾乎還是手工操作來完成。計算機技術(shù)在日新月異的發(fā)展,但是有的很多學(xué)校,特別是在西部貧困地區(qū),學(xué)校的種類管理都依然由手工操作來完成,這十分落后,效率極低,成本很大,而且極異出錯。隨著社會的發(fā)展,信息化是社會進程的必然趨勢,學(xué)校管理只有只有快,準(zhǔn),精才能發(fā)揮其價值。所以機器代替人力是必然的歷史發(fā)展趨勢,只有領(lǐng)導(dǎo)的重視和支持才能從人工操作改為計算機的自動化系統(tǒng)。人工操作必將被計算機代替。有些學(xué)校雖使用了計算機,甚至管理系統(tǒng),但是仍然存在很多問題,問題一日不解決,效率就一日提不上去。第二節(jié) 本文所做工作本系統(tǒng)是將現(xiàn)代化的計算機技術(shù)和傳統(tǒng)的教學(xué)、教務(wù)工作相結(jié)合,按照學(xué)院的工作流程設(shè)計完成的。為了使系統(tǒng)在學(xué)院的管理中發(fā)揮更大的作用,實現(xiàn)工作過程的計算機化,提高工作效率和工作質(zhì)量,現(xiàn)提出如下的系統(tǒng)開發(fā)目標(biāo):(1)系統(tǒng)管理員進入學(xué)生成績管理系統(tǒng)學(xué)生檔案管理的主要功能是:實現(xiàn)添加學(xué)生的基本信息、修改學(xué)生的基本信息、查詢學(xué)生的基本信息、刪除學(xué)生的基本信息等基本功能。(2)系統(tǒng)管理員進入學(xué)生成績管理系統(tǒng)學(xué)生成績管理的主要功能是:實現(xiàn)學(xué)生成績的錄入、學(xué)生成績的修改與保存等基本功能。(3)系統(tǒng)管理員進行學(xué)生成績管理系統(tǒng)查詢與統(tǒng)計的主要功能是:實現(xiàn)根據(jù)某個學(xué)生的基本信息查詢他的成績,還可以根據(jù)學(xué)生成績的高低進行排序等基本功能。1.1 編寫目的 本需求的編寫目的在于研究學(xué)生成績管理系統(tǒng)軟件的開發(fā)途徑和應(yīng)用方法 1.2 背景及范圍 本項目的名稱: 學(xué)生成績管理系統(tǒng) 本軟件基本上能具體化合理化的管理學(xué)生的學(xué)籍檔案,用結(jié)構(gòu)化的思維方式去了解計算機的基本工作原理和高級程序設(shè)計語言1.3 功能 主要功能:學(xué)生成績錄入學(xué)生信息和成績修改查詢成績第二章 系統(tǒng)需求分析 可以使用戶錄入學(xué)生信息,并在系統(tǒng)中顯示出來,還能對錄入的信息進行保存,當(dāng)需要時還可以對信息進行修改和刪除,還能分別用學(xué)號、姓名、性別、年齡對學(xué)生信息進行查詢,用戶進入系統(tǒng)需要輸入密碼。第三章 總體設(shè)計struct student:一個結(jié)構(gòu)體類型,他能存放姓名、學(xué)號、語文、數(shù)學(xué)、英語等成績等不同類型數(shù)據(jù)組成的組合型的數(shù)據(jù)結(jié)構(gòu)。void main():主函數(shù)。FILE * fp:定義一個指向文件的指針變量fp.fp=fopen("學(xué)生成績","w +"):將fopen函數(shù)的返回值賦給指針變量fp,或者說,fp指向了學(xué)生信息這個文件。如果文件不存在,則建立一個新的文本文件。Fscanf,fprintf:用格式化的方式讀寫文件。Strcmp:字符串比較函數(shù)。Strcpy:字符串復(fù)制函數(shù)。程序中還用到當(dāng)型循環(huán)、swith分支語句、if語句等。system("cls");:清屏函數(shù),使界面更簡潔。第四章 系統(tǒng)調(diào)試系統(tǒng)主界面顯示學(xué)生信息顯示按學(xué)號排序后的學(xué)生信息(按升序)顯示按總分排序后的學(xué)生信息按學(xué)號查學(xué)生各科分?jǐn)?shù)和總分按姓名查學(xué)生各科分?jǐn)?shù)和總分抽取出三科成績中有補考的學(xué)生并保存第五章 使用說明利用結(jié)構(gòu)體函數(shù)類型,使函數(shù)顯得沒那么繁瑣,利用文件指針,輸入的信息將保存在文件中,以便下次查詢和修改,使用“w+”方式讀寫文件,當(dāng)指定那個文件不存在時,將建立一個文件,不會出現(xiàn)出錯信息。利用fscanf和fprintf實現(xiàn)對文件的讀寫。不足之處:錄入的信息沒能保存,每次便已運行需要重新輸入數(shù)據(jù),對所學(xué)的東西沒有合理結(jié)合。第七章 總結(jié)當(dāng)剛開始聽到要課程設(shè)計時,心里有點怕怕的,因為畢竟剛接觸c語言,雖說也學(xué)到了一些皮毛,但當(dāng)聽到要自己去編寫程序時,才發(fā)現(xiàn)自己不會的不懂的還多著呢,要編寫一個程序還是有一些困難的,當(dāng)真的讓我去編寫程序時,真的是有點怕怕的感覺。剛?cè)雽W(xué)時,聽到要學(xué)習(xí)c語言時,我是非常的感興趣,也非常高興,因為那游戲、軟件都要用c語言來實現(xiàn),我想探究一下那到底是怎么實現(xiàn)的,能達到那樣的效果,所以剛開始我很有激情,每節(jié)課我都認真聽講,雖然剛開始聽起來有點困難,但是我相信功夫不負有心人,我知道課堂上的知識是不夠的,所以我利用課下時間,積極搜尋與之相關(guān)的信息,去圖書館借閱相關(guān)資料和習(xí)題,來增長自己的知識。當(dāng)程序?qū)懲炅?,我終于可以松口氣了,經(jīng)過一個思考,查資料,寫源程序,上機調(diào)試.現(xiàn)在終于告一段落了.看到自己的勞動成果,心中不免有些驚喜,沒想到自己還能獨立完成初次的課程設(shè)計,雖然不敢說這個程序都是我一個人寫的,但其中大部分都是我的成果,另外我還參考了別人的意見,對自己的程序進行修改和完善。 這種課程設(shè)計對我們是非常有好處的,對C這門程序語言的掌握卻有非常大的作用.從開始對題目的分析,就注定擺在我這樣一個對C了解不多的新手面前的是一段艱難的旅程.但最終很慶幸的是我居然能夠堅持下來,而且完成了設(shè)計工作. C語言是很難學(xué)的,這也許是因人而異,但對我來說確實是一個障礙。如今要自己完成一個課程設(shè)計,無疑是對自己的一個挑戰(zhàn).先是上網(wǎng)查找有關(guān)的資料,分析題目所需的數(shù)據(jù),要用到哪些函數(shù)等等,星期二上網(wǎng)初步調(diào)試,將函數(shù)用些結(jié)構(gòu)和語句連接起來,做這個工作時,又將書本翻閱了一遍,重新獲得許多東西。如帶參函數(shù)的特點,以及一些語句的運用及特點等等。將工作分配到每塊是我完成這個設(shè)計的主要方法,然而將每塊都完成看起來比較輕松,但實際操作起來卻是比較麻煩的.由于平時對C知識的積累較為匱乏,(這可能是最主要的原因了),所以操作起來真是寸步難行,沒辦法,只有拿出課本找到相應(yīng)的知識點,臨陣磨槍.費了一番功夫,再上機調(diào)試時就是最痛苦的時候了,錯誤一大堆,要一個一個的修改。經(jīng)過幾翻調(diào)試修改之后終于可以執(zhí)行了,那時還興奮了好長時間呢!然而執(zhí)行出來的結(jié)果是不令人滿意的,界面不美觀不說,最重要的是輸入太煩瑣,而且受到的限制太多,如只能以某種方式輸入,且個數(shù)受限制。于是又發(fā)費了大量時間去修改,終于比較滿意了,但也到了星期五了,也就是答辯的時間。答辯的時候我才發(fā)現(xiàn)還有好多知識是我不會的,老師問了我一些問題,我回答出來的卻不多,我體會到我還要很努力的學(xué)習(xí),在C的學(xué)習(xí)上我還有很長的一段路要走。今天不管怎樣把這個設(shè)計作出來是件很高興的事情,不過能夠把這個設(shè)計順利完成要歸功于我的指導(dǎo)老師,幫了我很多忙,也讓我發(fā)現(xiàn)了我有好多欠缺的地方,真的很感謝你們,謝謝!不管怎么說,我還是完成了這個設(shè)計.雖說累了點,但我想這對我們進一步掌握C,并為下學(xué)期的二級考試是有很大的幫助的.能夠編出程序,其實本身就是對自己的一種肯定,是對自己前面一段時間學(xué)習(xí)綜合水平的一個檢閱.當(dāng)然完成后的興喜,只有經(jīng)歷過了才能體會到,而我體會到了.C語言課程設(shè)計是培養(yǎng)學(xué)生綜合運用所學(xué)知識,發(fā)現(xiàn),提出,分析和解決實際問題,鍛煉實踐能力的重要環(huán)節(jié),是對學(xué)生實際工作能力的具體訓(xùn)練和考察過程.隨著科學(xué)技術(shù)發(fā)展的日新日異,當(dāng)今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀(jì)的大學(xué)來說掌握計算機開發(fā)技術(shù)是十分重要的。從拿到題目到完成整個編程,從理論到實踐,在整整一個星期的日子里,可以學(xué)到很多很多的的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體通過這次課程設(shè)計之后,一定把以前所學(xué)過的知識重新溫故。這次課程設(shè)計我最要感謝的就是我們的幾位指導(dǎo)老師,老師們每天都不辭勞苦為我們服務(wù),不管我們有什么問題,他們都耐心的為我們解答,我們有什么錯誤他們都積極給我們指正出來,雖然有時也批評一下,但這對我們是有很大幫助的,有這么多優(yōu)秀的指導(dǎo)老師,我想我以后的學(xué)習(xí)會更上一層樓。附錄A 源代碼# include <stdio.h># include <stdlib.h># include <string.h># include <stdbool.h># include <math.h># include <conio.h># define eps 1;typedef struct char name50; int num; int Chinese; int Math; int English; int sum;Node;Node student1000;int n;char text50;int cmp(const void *a, const void *b) return (*(Node *)b).sum > (*(Node *)a).sum?1:-1;int cmpnum(const void *a, const void *b) return (*(Node *)a).num > (*(Node *)b).num?1:-1;void showstudent() int i;printf(" t姓名t學(xué)號t語文t數(shù)學(xué)t英語t總分n");for(i=0;i<n;i+)printf("t%st%dt%dt%dt%dt%dn",studenti.name,studenti.num,studenti.Chinese,studenti.Math,studenti.English,studenti.sum); getch(); menu();void sortnum() int i,j,k;char a55;for(i=0;i<n;i+)for(j=0;j<n-i-1;j+)if(studentj.num>studentj+1.num)k=studentj.num;studentj.num=studentj+1.num;studentj+1.num=k;k=studentj.Chinese;studentj.Chinese=studentj+1.Chinese;studentj+1.Chinese=k;k=studentj.Math;studentj.Math=studentj+1.Math;studentj+1.Math=k;k=studentj.English;studentj.English=studentj+1.English;studentj+1.English=k;k=studentj.sum;studentj.sum=studentj+1.sum;studentj+1.sum=k;strcpy(a,studentj.name);strcpy(studentj.name,studentj+1.name);strcpy(studentj+1.name,a);showstudent(); getch(); menu();void sortsum() qsort(student, n, sizeof(Node), cmp); showstudent(); getch(); menu();void searchnum(int number) int min = 0, max = n-1, mid; bool escape = false; qsort(student, n, sizeof(Node), cmpnum); while(min <= max) mid = (min + max) / 2; if(studentmid.num > number) max = mid - eps; else if(studentmid.num < number) min = mid + eps; else escape = true; printf("t姓名t學(xué)號t語文t數(shù)學(xué)t英語t總分n"); printf("t%st%dt%dt%dt%dt%dn", studentmid.name, studentmid.num, studentmid.Chinese, studentmid.Math, studentmid.English, studentmid.sum); break; if(!escape) printf("t查無此人"); getch(); menu();void searchname() int i;for(i=0;i<n;i+)if(strcmp(text,studenti.name)=0)printf("t姓名t學(xué)號t語文t數(shù)學(xué)t英語t總分n"); printf("t%st%dt%dt%dt%dt%dn", studenti.name, studenti.num, studenti.Chinese, studenti.Math, studenti.English, studenti.sum);break;if(i>=n)printf("t查無此人n"); getch(); menu();void save() FILE *fp;fp=fopen("4.txt","w");int i;fprintf(fp, "t姓名t學(xué)號t語文t數(shù)學(xué)t英語t總分n");for(i=0;i<n;i+)if(studenti.Chinese<60|studenti.Math<60|studenti.English<60) printf("t%st%dt%dt%dt%dn",studenti.name,studenti.num,studenti.Chinese,studenti.Math,studenti.English);fprintf(fp,"t%st%dt%dt%dt%dn",studenti.name,studenti.num,studenti.Chinese,studenti.Math,studenti.English);printf("n");printf("n"); printf("保存成功n"); printf("n"); getch(); menu();void menu() int choice; system("cls"); printf(" 菜單n"); printf("n"); printf(" 0.退出 n"); printf(" 1.顯示學(xué)生信息 n"); printf(" 2.顯示按學(xué)號排序后的學(xué)生信息 n"); printf(" 3.顯示按總分排序后的學(xué)生信息 n"); printf(" 4.按學(xué)號查學(xué)生各科分?jǐn)?shù)和總分 n"); printf(" 5.按姓名查學(xué)生各科分?jǐn)?shù)和總分 n"); printf(" 6.抽取出三科成績中有補考的學(xué)生并保存 n"); printf("n"); printf(" 選擇代碼(0,1,2,3,4,5,6): "); scanf("%d", &choice); switch(choice) case 0: system("cls"); printf("謝謝使用!n"); exit(0); case 1: system("cls"); showstudent(); case 2: system("cls"); sortnum(); case 3: system("cls"); sortsum(); case 4: system("cls"); int num; printf("t請輸入要查找學(xué)生的學(xué)號:"); scanf("%d", &num); searchnum(num); case 5: system("cls"); printf("t請輸入要查找學(xué)生的姓名:"); scanf("%s", text); searchname(); case 6: system("cls"); save(); int main() n = 0; FILE * fp; fp=fopen("1.txt","r+"); while(fscanf(fp, "%s %d %d %d %d", studentn.name, &studentn.num, &studentn.Chinese, &studentn.Math, &studentn.English)!=EOF) studentn.sum = 0; studentn.sum += studentn.Chinese; studentn.sum += studentn.Math; studentn.sum += studentn.English; n+; fclose(fp); fp=fopen("2.txt","r+"); while(fscanf(fp, "%s %d %d %d %d", studentn.name, &studentn.num, &studentn.Chinese, &studentn.Math, &studentn.English)!=EOF) studentn.sum = 0; studentn.sum += studentn.Chinese; studentn.sum += studentn.Math; studentn.sum += studentn.English; n+; fclose(fp); menu(); return 0;附錄B 參考資料C程序設(shè)計(第三版) 譚浩強主編 清華大學(xué)出版社C語言常用函數(shù)速查手冊 陳 超主編 化學(xué)工業(yè)出版社C語言程序設(shè)計實用教程曹 巖、劉 佳主編 西北工業(yè)大學(xué)出版社算法競賽入門劉汝佳主編 清華大學(xué)出版社