993397232C語言課程設計簡易教學管理系統(tǒng)的設計與實現(xiàn)_第1頁
993397232C語言課程設計簡易教學管理系統(tǒng)的設計與實現(xiàn)_第2頁
993397232C語言課程設計簡易教學管理系統(tǒng)的設計與實現(xiàn)_第3頁
993397232C語言課程設計簡易教學管理系統(tǒng)的設計與實現(xiàn)_第4頁
993397232C語言課程設計簡易教學管理系統(tǒng)的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、c語言實習報告姓 名:學 號:200702927班 級:化工10705指導老師:完成日期:2009年1月6日1.1題目內(nèi)容簡易教學管理系統(tǒng)的設計與實現(xiàn) 1.2功能要求(1)該系統(tǒng)實現(xiàn)了從已創(chuàng)建的文本文件中讀取原始數(shù)據(jù)并且執(zhí)行后在屏幕上打印輸出文本文件中的原始數(shù)據(jù)表格。(2)在實現(xiàn)此功能后,該系統(tǒng)通過對函數(shù)的調(diào)用算出了班上所有學生的加權平均分,并對班上所有學生成績進行排名。(3)該系統(tǒng)還對每門課程的平均分進行統(tǒng)計,還算出了每門課程的標準差,并對班上所有學生的每門課程分數(shù)在60分以下,6070,7080,8090,和90分以上的人數(shù)進行統(tǒng)計。(4)該系統(tǒng)還通過寫入文件函數(shù)使其在指定的路徑生成txt

2、文件并且在屏幕上顯示出文件內(nèi)容。(5)該系統(tǒng)通過寫入文件函數(shù)在指定的路徑下生成用來存放學生成績條的txt文件,并且在屏幕上顯示文件中的內(nèi)容。(6)最后該系統(tǒng)還實現(xiàn)了對不及格學生名單和優(yōu)等生名單的統(tǒng)計。1.3系統(tǒng)功能模塊框圖設計教學管理系統(tǒng)1用c語言創(chuàng)建文件,文件名為“huagong10705”,用來存放學生成績。2分別統(tǒng)計全班每門課程的平均分和標準差,并計算各分數(shù)段的人數(shù)。4打印每名學生成績條,結果放到一個數(shù)據(jù)文件中,文件名為“cjhg10705.txt”。5屏幕顯示所有存放 不及格課程的學生的名單。3用c語言創(chuàng)建一個數(shù)據(jù)文件,文件名為“kec10705.txt”。6屏幕顯示優(yōu)等生名單。1簡易

3、教學管理系統(tǒng)2菜單結構圖:1用c語言創(chuàng)建文件,文件名為“huagong10705”,用來存放學生成績。2分別統(tǒng)計全班每門課程的平均分和標準差,并計算各分數(shù)段的人數(shù)。3用c語言創(chuàng)建一個數(shù)據(jù)文件,文件名為“kec10705”。4打印每名學生成績條,結果放到一個數(shù)據(jù)文件中,文件名為“cjhg10705.txt”。5屏幕顯示所有存放 不及格課程的學生的名單。6屏幕顯示優(yōu)等生名單。0退出1.4數(shù)據(jù)結構說明1、結構體的定義,方便程序設計過程中描述每本書的屬性以及統(tǒng)計信息。struct結構體名類型名1結構體成員表1;類型名2結構體成員表2;struct student int arrange; int nu

4、m; char name8; int score6; float ave; stum;struct courseint num;char kechengname8;float xuefen; coursen;類型名n結構體成員表n;結構體變量名表;結構體成員數(shù)據(jù)類型float 單精度型。由于學生的平均分需要保留一位小數(shù),因此用單精度類型定義。int 整型。由于學生的序號,名次,分數(shù),課程的數(shù)量都是整型,因此定義整型變量值。char 字符型。因為學生的姓名,課程的名稱都是字符型,因此定義字符型。結構體定義了三個結構體數(shù)組name8, score6,kechengname82、#define是宏定

5、義命令,標識符又稱宏名。宏定義的作用是用一個簡單的標識符(宏名)來代替一個字符串,方便程序的書寫,一般格式為:#define 標識符字符串 如程序中:#definem20 #define n 63、float k6=0,y6=0;int c65=0,0,0,0,0,0; 定義全局字符數(shù)組,存放學生課程的平均分和標準差,統(tǒng)計成績的結果,增加了函數(shù)的數(shù)據(jù)通道,在一個函數(shù)中修改了全局變量的值到另一個函數(shù)中仍然有效。作用范圍是從定義的位置開始到本文件結束。4、file *為文件指針名; 如:file*fp;c語言中所有對文件的操作都是通過文件指針進行的。1.5功能及函數(shù)調(diào)用1函數(shù)調(diào)用關系圖:void

6、main() void read1();void read2();void jiaquan();void write();void arrange();void menu();void averageand();void kec10705();void printchengji();void bujige();void youxiu(); read1();read2(); jiaquan();arrange();menu();2模塊功能說明:(1)void read1() /*讀文件huagong10705*/ void read1()file *fp;char title80;int i,j

7、;if(fp=fopen(e:作業(yè)huagong10705.txt,r)=null)printf(cannot open !);exit(0);fgets(title,80,fp);for(i=0;im;i+)fscanf(fp,%d%s,&stui.num,);for(j=0;jn;j+)fscanf(fp,%d,&stui.scorej);fclose(fp);是讀取文件函數(shù),其功能是打開文件并讀取文件huagong10705.txt,把關于學生信息的數(shù)據(jù)到內(nèi)存中,以便后來引用,函數(shù)參數(shù)為空,返回值為void類型。 (2) void read2() /*讀文件hg1070

8、5*/void read2() file *fp;int k;if(fp=fopen(e:作業(yè)hg10705.txt,r)=null) printf(cannot open!);char title280;fgets(title2,40,fp); for(k=0;kn;k+)fscanf(fp,%d%s%f,&coursek.num,coursek.kechengname,&coursek.xuefen); fclose(fp);是讀取文件函數(shù),其功能是打開文件并讀取文件hg10705.txt,把關于課程信息的數(shù)據(jù)到內(nèi)存中,以便后來其他函數(shù)調(diào)用,其參數(shù)為空,返回值為void類型。(3)void

9、 jiaquan() /*求加權平均分*/void jiaquan()int i,j;float s=0.0,sum;for(i=0;in;i+)s+=coursei.xuefen;for(i=0;im;i+)sum=0.0;for(j=0;jn;j+)sum+=stui.scorej*coursej.xuefen;/printf(%f,sum);stui.ave=(int)(sum*10.0/s+0.5)/10.0;是求學生的加權平均分的函數(shù),其功能是算出學生的成績的加權平均分并保存在內(nèi)存中,以方便后來其他函數(shù)調(diào)用,其參數(shù)為空,返回值為void類型。 第一個循環(huán)用于求總的學分; 第二個是一個

10、雙重循環(huán),是用來求成績的和并求加權平均值。(4)void write() /*輸出文件到e:作業(yè)wj10705.txt*/ void write() file *fp; int i,j; if(fp=fopen(e:作業(yè)wj10705.txt,w)=null) printf(cannot open!); exit(0); fprintf(fp,名次 學號 姓名 物理 c語言 數(shù)學 實驗 合教 化學 平均分n); for(i=0;im;i+) fprintf(fp,%2d %2d %6s,stui.order,stui.num,); for(j=0;jn;j+) fprintf

11、(fp,%5d,stui.scorej); fprintf(fp,%7.1fn,stui.ave); fclose(fp); 是文件輸出函數(shù),其功能是把把學生的成績信息存到文件e:作業(yè)wj10705中,返回值為void類型。(5)void arrange()/*排序*/ void arrange() int i,j,k; for(i=0;im;i+) stui.arrange=1; for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave) stuj.arrange+;/*前面第加一次,名次倒退一名!*/ 是按學生的加權平均值排序的函數(shù),其功能是按照

12、學生的加權平均值由高到低進行排序。函數(shù)參數(shù)為空,返回值為void類型。for(i=0;im;i+) stui.arrange=1;用來令每個學生的名次相同,均為1,以方便后面的比較。 for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave)將所有的同學一個個分別與其他所有人比較,當其他同學的平均分比該生高時,該生的名次自加1。最后即可得到排名。(6)void averageand() /*統(tǒng)計平均值和標準差,計算分數(shù)段的人數(shù)*/ void averageand() int i,j; for(j=0;j6;j+) for(i=0;im;i+) kj+

13、=stui.scorej; kj=kj/m; /*算標準差*/ for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj); for(j=0;jn;j+) for(i=0;i=90) cj0+;else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69)cj3+;else if(stui.scorej60) cj4+;是用來算每門課程的平均值及其標準差,統(tǒng)計各分數(shù)段的人數(shù),這些結果均放在全局變量中,以方便后來其他函數(shù)的調(diào)用

14、。for(j=0;j6;j+) for(i=0;im;i+) kj+=stui.scorej; kj=kj/m; 循環(huán)算出每門課程的平均值;for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj);循環(huán)算出每門課程的標準差;for(j=0;jn;j+) for(i=0;i=90) cj0+;else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69)cj3+; else if(stui.scorej60) cj4+;通過

15、二重循環(huán)算出各分數(shù)段的人數(shù);(7)void kec10705()/*創(chuàng)建文件存放學生數(shù)據(jù)文件kec10705*/ void kec10705() file *fp; int i,j; if(fp=fopen(e:作業(yè)kec10705.txt,w)=null) printf(cannot open !);exit(0); fprintf(fp,編號 課程名稱 課程平均分 標準差 優(yōu)秀 良好 中等 及格 不及格n); for(i=0;in;i+) fprintf(fp,%3d %6s %7.2f %7.2f ,coursei.num,coursei.coursename,ki,yi); for(j

16、=0;j5;j+) fprintf(fp,%7d,cij); fprintf(fp,n); fclose(fp); 是用來把通過函數(shù)void averageand()算得的結果存放到創(chuàng)建的新文件e:作業(yè)kec10705.txt中去。(8) void printchengji()/*找印分數(shù)條到文件cjhg10705*/ void printchengji() file *fp; int i,j; if(fp=fopen(e:作業(yè)cjhg10705.txt,w)=null) printf(cannot open !);exit(0); for(i=0;im;i+) fprintf(fp,名次 學

17、號 姓名 物理 c語言 數(shù)學 實驗 合教 化學 平均分n); fprintf(fp,%2d%8d%12s ,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%8d,stui.scorej); fprintf(fp,%9.1fnn,stui.ave); fprintf(fp,nn); fclose(fp); 是把每名學生的成績條打印出來,結果存放到文件e:作業(yè)cjhg0705.txt中去。(9) void bujige()/*屏幕上顯示所有不及格的學生的名單*/ void bujige() int i,j; printf(不及格

18、的名單如下:nn); printf( 姓名 學號 課程 學分 成績n); for(i=0;im;i+) for(j=0;jn;j+)if(stui.scorej60) printf(%6s%6d%7s%6.1f%5dn,,stui.num,coursej.kechengname,coursej.arrange,stui.scorej); 是把不及格的學生的名單顯示到屏幕上,包括其學號,不及格課程名稱,課程的學分及成績。(10) void youxiu()/*顯示優(yōu)等生的名單*/ void youxiu() int i,j; printf(優(yōu)等生的名單如下:n); printf

19、( 名次 學號 姓名 物理 c語言 數(shù)學 實驗 合教 化學 平均分n); for(i=0;i=91) printf(%5d%5d%7s,stui.order,stui.num,); for(j=0;jn;j+) printf(%6d,stui.scorej); printf(%8.1fn,stui.ave); else if(stui.order=4) printf(%5d%5d%7s,stui.order,stui.num,); for(j=0;j=85) for(j=0;j=99) break; printf(%5d%5d%7s,stui.arrange

20、,stui.num,); for(j=0;jn;j+) printf(%6d,stui.scorej); printf(%8.1fn,stui.ave); 是將優(yōu)等生的名單,含學號,n門課程的成績,平均分,名次均輸出到屏幕上。(11)void menu()/*菜單*/ void menu() int xuanze; int flag=1; do printf(*nn); printf( 學生成績統(tǒng)計系統(tǒng)簡易版nn); printf( * 請選擇您所要進行的操作:nn); printf( * 1.創(chuàng)建學生成績表kec10705!nn); printf( * 2.統(tǒng)計全班每門課程

21、平均分和標準差,并計算各分數(shù)段的人數(shù)!nn); printf( * 3.創(chuàng)建文件kc10705.txt用于存放操作2中產(chǎn)生的文件!nn); printf( * 4.打印學生成績條,成績條存放在文件cjhg10705.txt中!nn); printf( * 5.屏幕顯示所有不及格的學生的名單!nn); printf( * 6.屏幕顯示優(yōu)等生的名單!nn); printf( * 0.退出 !nn); printf(*nn); printf( * 請您做出選擇:n); scanf(%d,&xuanze); switch(xuanze) case 1:rrite(); printf( 已經(jīng)創(chuàng)建學生成績

22、表kec10705 !nn); break; case 2:averageand(); printf( 操作已完成,如果需要具體成績,請選擇3 !nn); break; case 3:kec10705(); printf( 已經(jīng)創(chuàng)建課程的具體數(shù)據(jù)到文件kec10705.txt! nn); break; case 4:printchengji(); printf( 已經(jīng)打印學生的分數(shù)條到文件cjhg10705.txt中 !nn); break; case 5:bujige(); break; case 6:youxiu(); break; case 0: printf( 系統(tǒng)即將退出,謝謝使用

23、!nn); flag=0; while(flag=1); 是顯示菜單的函數(shù),并可以通過它來調(diào)用其他的函數(shù)。1.6程序的調(diào)試與測試1、測試結果運行程序后出現(xiàn)主菜單界面,如圖選擇菜單下選擇項1后,運行結果如圖選擇選擇菜單下選擇項2后,運行結果如圖 選擇選擇菜單下選擇項3后,運行結果如圖 選擇菜單下選擇項4后,運行結果如圖選擇菜單下選擇項5后,運行結果如圖選擇菜單下選擇項6后,運選擇菜單下選擇項0后,運行結果如圖課程設計總結通過本次課程設計,心中的感觸良多,感覺到了vc編程的靈活性與復雜性,程序的編寫還是在于不斷地練習,不斷地調(diào)試,只有這樣才能不斷地進步。要真正地編寫一個系統(tǒng),會碰到很多困難,不僅要

24、將所學的知識運用到實際中,同時也要有耐心與決心,這次課程設計,我感到既然痛苦又快樂,雖然學習c語言已經(jīng)有一個學期了,但是自己的知識掌握得并不牢固,而且也沒有經(jīng)驗,到了真正實驗時,發(fā)現(xiàn)了有很多問題需要解決,心中感到很害怕,但是經(jīng)過指導老師的指導,明白要將整個系統(tǒng)化為一個個功能模塊,然后根據(jù)需要編寫相應的函數(shù),化整為零,一個一個的去實現(xiàn)。在設計過程中,也遇到了許多的問題,比如:剛開剛沒有定義全局變量時,用函數(shù)調(diào)用相應的數(shù)據(jù)時,發(fā)現(xiàn)數(shù)據(jù)沒有定義,后來明白需要擴大變量的作用域,于是將其定義為全局變量;后來定義了全局變量后,結果打印的結果全為零,說明數(shù)據(jù)沒有讀進去,經(jīng)過老師的調(diào)試,發(fā)現(xiàn)原來又在函數(shù)內(nèi)部重

25、新定義了相同的變量,導致在調(diào)用函數(shù)時,只將數(shù)據(jù)存進臨時變量中,將其刪除后,恢復正常現(xiàn)在想想,問題雖然小,可是要做起來還是有一定的難度的。最后經(jīng)過幾個晚上的奮斗,在指導老師幫助下,最終完成了“簡易圖書管理系統(tǒng)的設計”。我認為,應該將程序轉化為exe文件來運行,那樣便于系統(tǒng)的維護與運行。 在這個課程設計中,學到了很多。能夠?qū)⑺鶎W活學活用,這是最令人興奮的事,我會繼續(xù)努力學習,學習更多關于vc的知識。能夠完成這次的課程設計,再次感謝老師的教誨,以及同學的熱情幫助。附錄 程序清單/*先定義結構體數(shù)組用以存放文件huagong10705與hg10705*/#define m 20#define n 6#

26、include stdio.h#include stdlib.h#include math.hfloat k6=0,y6=0;int c65=0,0,0,0,0,0;struct studentint arrange;int num;char name8;int score6;float ave; stum;struct courseint num;char kechengname8;float xuefen; coursen; void main() void read1();void read2();void jiaquan();void write();void arrange();vo

27、id menu();void averageand();void kec10705();void printchengji();void bujige();void youxiu(); read1();read2(); jiaquan();arrange();menu();/*讀文件huagong10705*/ void read1()file *fp;char title80;int i,j;if(fp=fopen(e:作業(yè)huagong10705.txt,r)=null)printf(cannot open !);exit(0);fgets(title,80,fp);for(i=0;im;

28、i+)fscanf(fp,%d%s,&stui.num,);for(j=0;jn;j+)fscanf(fp,%d,&stui.scorej);fclose(fp);/*讀文件hg10705*/void read2() file *fp;int k;if(fp=fopen(e:作業(yè)hg10705.txt,r)=null) printf(cannot open!);char title280;fgets(title2,40,fp); for(k=0;kn;k+)fscanf(fp,%d%s%f,&coursek.num,coursek.kechengname,&coursek.x

29、uefen); fclose(fp);/*求加權平均分*/void jiaquan()int i,j;float s=0.0,sum;for(i=0;in;i+)s+=coursei.arrange;/printf(%f,s);for(i=0;im;i+)sum=0.0;for(j=0;jn;j+)sum+=stui.scorej*coursej.xuefen;/printf(%f,sum);stui.ave=(int)(sum*10.0/s+0.5)/10.0;/*輸出文件到c:作業(yè)wj10705.txt*/ void write() file *fp; int i,j; if(fp=fop

30、en(e:作業(yè)wj10705.txt,w)=null) printf(cannot open!); exit(0); fprintf(fp,名次 學號 姓名 物理 c語言 數(shù)學 實驗 合教 化學 平均分n); for(i=0;im;i+) fprintf(fp,%2d %2d %6s,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%5d,stui.scorej); fprintf(fp,%7.1fn,stui.ave); fclose(fp); /*排序*/ void arrange() int i,j,k; for(i=0

31、;im;i+) stui.arrange=1; for (j=0;jm;j+) for(k=0;km;k+) if(stuj.avestuk.ave) stuj.arrange+; /*統(tǒng)計平均值和標準差,計算分數(shù)段的人數(shù)*/ void averageand() int i,j; for(j=0;j6;j+) for(i=0;im;i+) kj+=stui.scorej; kj=kj/m; /*算標準差*/ for(j=0;j6;j+)for(i=0;im;i+)yj+=(stui.scorej-kj)*(stui.scorej-kj); yj=sqrt(yj);for(j=0;jn;j+)f

32、or(i=0;i=90) cj0+; else if(stui.scorej=80&stui.scorej=70&stui.scorej=60&stui.scorej=69) cj3+; else if(stui.scorej60) cj4+; /*創(chuàng)建文件存放學生數(shù)據(jù)文件kec10705*/ void kec10705() file *fp; int i,j; if(fp=fopen(e:作業(yè)kec10705.txt,w)=null) printf(cannot open !);exit(0); fprintf(fp,編號 課程名稱 課程平均分 標準差 優(yōu)秀 良好 中等 及格 不及格n);

33、for(i=0;in;i+) fprintf(fp,%3d%6s%7.2f %7.2f ,coursei.num,coursei.coursename,ki,yi); for(j=0;j5;j+) fprintf(fp,%7d,cij); fprintf(fp,n); fclose(fp); /*找印分數(shù)條到文件cjhg10705*/ void printchengji() file *fp; int i,j; if(fp=fopen(e:作業(yè)cjhg10705.txt,w)=null) printf(cannot open !);exit(0); for(i=0;im;i+) fprintf

34、(fp,名次 學號 姓名 物理 c語言 數(shù)學 實驗 合教 化學 平均分n); fprintf(fp,%2d%8d%12s ,stui.order,stui.num,); for(j=0;jn;j+) fprintf(fp,%8d,stui.scorej); fprintf(fp,%9.1fnn,stui.ave); fprintf(fp,nn); fclose(fp); /*屏幕上顯示所有不及格的學生的名單*/ void bujige() int i,j; printf(不及格的名單如下:nn); printf( 姓名 學號 課程 學分 成績n); for(i=0;im;i+) for(j=0;jn;j+)if(stui.scorej60) printf(%6s%6d%7s%6.1f%5dn,,stui.num,coursej.kechengname,coursej.xuefen,stui.scorej); /*顯示優(yōu)等生的名單*/ void youxiu() int i,j,loop; printf(優(yōu)等生的名單如下:n); printf( 名次 學號 姓名 物理 c語言 數(shù)學 實驗 制圖 化學 平均分n); for(i=0;i=91) /&stui.arrange=85|s

溫馨提示

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

評論

0/150

提交評論