版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 信息學(xué)院</b></p><p><b> 課程設(shè)計Ⅰ報告</b></p><p> 課程名稱___C語言程序設(shè)計_ __</p><p> 題目名稱 學(xué)生學(xué)籍管理系統(tǒng) </p><p> 學(xué)生學(xué)院_ 信息學(xué)院_ __ __</p&
2、gt;<p> 專業(yè)班級_ 計科12 </p><p> 學(xué) 號 </p><p> 學(xué)生姓名 </p><p> 指導(dǎo)教師_______ ___ __</p><p> 2013 年12
3、月26 日</p><p><b> 目錄</b></p><p> 一、 設(shè)計目的與要求3</p><p> 1.1 題目與設(shè)計要求3</p><p> 1.2 本程序設(shè)計的知識點4</p><p> 二、 功能設(shè)計4</p><p> 2.1 總體
4、設(shè)計4</p><p> 2.2 詳細(xì)設(shè)計5</p><p> 4.1 測試結(jié)果及分析12</p><p><b> 五、 總結(jié)14</b></p><p><b> 六、參考文獻(xiàn)14</b></p><p> 一、 設(shè)計目的與要求</p>
5、<p> 1.1 題目與設(shè)計要求</p><p> 題目:學(xué)生學(xué)籍管理系統(tǒng)</p><p> 目的:1、了解和熟悉Visual C++軟件編程開發(fā)環(huán)境</p><p> 2、熟練掌握結(jié)構(gòu)化程序設(shè)計的步驟和模塊化設(shè)計方法</p><p> 3、熟練掌握C語言數(shù)據(jù)類型,熟記字符型數(shù)據(jù)和整形數(shù)據(jù)的定義和使用</p>
6、<p> 4、熟練掌握用while語句、do…while語句和for語句實現(xiàn)循環(huán)結(jié)構(gòu)程序設(shè)計的方法</p><p> 5、掌握一維數(shù)組、二維數(shù)組的定義、賦值和輸入輸出的方法</p><p> 6、掌握與數(shù)組有關(guān)的算法(特別是排序算法,熟練掌握冒泡排序法)</p><p> 7、熟悉函數(shù)的定義、聲明方法及全局變量和局部變量的概念與用法,掌握函數(shù)的調(diào)
7、用方法</p><p> 8、掌握結(jié)構(gòu)體類型變量的定義和使用及結(jié)構(gòu)體類型數(shù)組的概念和應(yīng)用</p><p> 設(shè)計要求:學(xué)生學(xué)籍信息管理系統(tǒng)設(shè)計</p><p><b> 1、需求分析</b></p><p> 學(xué)生基本信息、學(xué)生成績基本信息要存入文件當(dāng)中,因而要提供文件的輸入輸出操作;查詢功能要求提供查找和顯示操
8、作;刪除功能要求實現(xiàn)刪除操作;排序功能要求實現(xiàn)排序操作;另外還應(yīng)該提供鍵盤式選擇菜單以實現(xiàn)功能選擇。</p><p><b> 2、總體設(shè)計</b></p><p> 整個系統(tǒng)可以設(shè)計為數(shù)據(jù)錄入模塊、數(shù)據(jù)查詢模塊、數(shù)據(jù)刪除模塊和數(shù)據(jù)排序模塊。</p><p><b> 3、詳細(xì)設(shè)計</b></p>&l
9、t;p> 設(shè)計學(xué)生基本信息和學(xué)生成績基本信息結(jié)構(gòu)體數(shù)組。</p><p><b> Struct </b></p><p><b> {</b></p><p> int stuNo; //學(xué)號</p><p> char name[20]; //姓名</p&
10、gt;<p> char sex[2]; //性別</p><p> int domNum; //宿舍號 </p><p> int tel; //電話號碼 </p><p> }StuInfo; //學(xué)生基本信息結(jié)構(gòu)體</p><p><b> Struct</b&g
11、t;</p><p><b> {</b></p><p> int stuNo; //學(xué)號</p><p> char courseNo; //課程編號</p><p> char courseName; //課程名稱</p><p> int creditHour; //學(xué)
12、分</p><p> Int triGrade; //平時成績</p><p> Int experiGrade; //實驗成績</p><p> Int examGrade; //卷面成績</p><p> Float totalGrade; //綜合成績</p><p> Float finalCreHo
13、ur; //實得學(xué)分</p><p> }StuGraInfo; //學(xué)生成績基本信息結(jié)構(gòu)體</p><p> ?。?)數(shù)據(jù)錄入模塊:學(xué)生基本信息文件可以在磁盤建立,采用寫文件方式錄入學(xué)生成績基本信息。綜合成績和實得學(xué)分通過計算得到。</p><p> ?。?)查詢模塊:通過菜單選擇查詢功能,再選擇學(xué)生基本情況查詢和成績查詢,若選擇前者,再通過菜單選擇學(xué)號、姓名或
14、宿舍號碼,按照基本查找算法查找A.TXT,然后把查找結(jié)果輸出若選擇后者,則先在A.TXT中查找學(xué)號對應(yīng)的姓名,再在B.TXT中查找該學(xué)生的課程情況,并統(tǒng)計科目和實得總學(xué)分,輸出結(jié)果。</p><p> ?。?)刪除模塊:通過菜單選擇刪除學(xué)生的功能,輸入要刪除學(xué)生的學(xué)號,則分別在A.TXT和B.TXT中查找該生信息,刪除之;或者輸入學(xué)生的姓名,先在A.TXT中得到該生的學(xué)號,刪除該生信息,再在B.TXT中刪除該學(xué)號
15、對應(yīng)的信息。注意:C語言中沒有直接刪除信息的函數(shù),需要自己實現(xiàn),可以采取讀出數(shù)據(jù),判斷數(shù)據(jù)(如果不刪除,則進(jìn)入緩沖區(qū),否則刪除),寫入數(shù)據(jù)(把緩沖區(qū)中的數(shù)據(jù)寫入文件)的步驟進(jìn)行。</p><p> (4)排序模塊:通過菜單選擇排序依據(jù),采用排序算法(冒泡、插入、選擇等)對數(shù)據(jù)進(jìn)行排序并輸出結(jié)果。 </p><p> 1.2 本程序設(shè)計的知識點</p><p>
16、 陳述開發(fā)過程中用到的知識點,如結(jié)構(gòu)體、數(shù)組、指針等。</p><p><b> 二、 功能設(shè)計</b></p><p><b> 2.1 總體設(shè)計</b></p><p> 其中包含數(shù)據(jù)錄入模塊、查詢模塊、刪除模塊、排序模塊四大功能功能模塊</p><p><b> 2.2 詳
17、細(xì)設(shè)計</b></p><p><b> 2.3分塊設(shè)計</b></p><p><b> 三、 程序?qū)崿F(xiàn)</b></p><p> ?、爬昧私M合體的方式定義結(jié)構(gòu)體數(shù)組,提供學(xué)生基本信息,定義如下:</p><p> typedef struct { </p>
18、<p> int Id; //學(xué)號</p><p> char name[10];//姓名</p><p> char sex[6]; //性別 </p><p> int room; //宿舍號</p><p> int tel; //電話號碼</p><p>
19、} StudentInfo; //定義學(xué)生信息的結(jié)構(gòu)體類型</p><p> ⑵同時定義了另一結(jié)構(gòu)體數(shù)組,提供學(xué)生成績基本信息,定義如下:</p><p> typedef struct {</p><p><b> int Id;</b></p><p> char courseNo[10]; //課程
20、編號</p><p> char courseName[20];//課程名</p><p> float a; // 課程學(xué)分</p><p> float b; // 平時成績</p><p> float c; // 實驗成績</p><p> float d; // 卷面成績</p>&l
21、t;p> float e; // 綜合成績</p><p> float f; // 實際學(xué)分</p><p> } MarkInfo; //定義課程信息的結(jié)構(gòu)體類型</p><p> 使用以上結(jié)構(gòu)體數(shù)組,使程序變得思路清晰,設(shè)計過程也變得相對簡單。同時,定義并使用了如下函數(shù),聲明和定義</p><p> void Read
22、File(); //讀取文件</p><p> void DisplayMainMenu(); //顯示主菜單</p><p> void DataInput(); //數(shù)據(jù)錄入</p><p> void DataQuery(); //數(shù)據(jù)查詢</p><p> vo
23、id DataDelete(); //數(shù)據(jù)刪除</p><p> void DataSort(); //數(shù)據(jù)排序</p><p> void QueryById(int ); //按學(xué)號查詢</p><p> void QueryByRoom(int ); //按宿舍查詢</p><
24、p> void QueryMark(int ); //按成績查詢</p><p> void sort1(); //按綜合成績排序</p><p> void sort2(); //按實得學(xué)分排序</p><p> void markput(); //成績輸出&l
25、t;/p><p> StudentInfo si[30]; // 學(xué)生信息結(jié)構(gòu)數(shù)組</p><p> MarkInfo mi[150]; // 學(xué)生成績結(jié)構(gòu)數(shù)組</p><p> int sp=0; // 學(xué)生信息結(jié)構(gòu)數(shù)組中學(xué)生數(shù)</p><p> int mp=0;
26、 // 學(xué)生成績結(jié)構(gòu)數(shù)組中成績數(shù)</p><p> ***************讀 取 數(shù) 據(jù) 、 計 算 ***************</p><p> 在這段功能模塊中,利用指針變量來讀取結(jié)構(gòu)體數(shù)組文件中的相應(yīng)信息,是程序的編寫、閱讀和運行變得簡潔明了。此外,在這段程序中,還對文件中的數(shù)據(jù)按照題目的具體要求對綜合成績和學(xué)分做了自動計算。</p
27、><p> void ReadFile( )</p><p><b> { </b></p><p><b> FILE *fp;</b></p><p> if((fp = fopen("A.txt","r"))==NULL)</p>&l
28、t;p> printf("cant open the file\n");</p><p> while (!feof(fp))</p><p><b> {</b></p><p> fscanf(fp,"%d%s%s%d%d", &si[sp].Id,si[sp].name,&am
29、p;si[sp].sex,&si[sp].room,&si[sp].tel);</p><p><b> sp++;</b></p><p><b> }</b></p><p> fclose (fp);</p><p> fp = fopen("B.txt&qu
30、ot;,"r");</p><p> while (!feof(fp))</p><p><b> {</b></p><p> fscanf (fp,"%d%s%s%d%d%d%d",&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[
31、mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);</p><p> if (mi[mp].c == -1) </p><p> mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;</p><p><b> else </b></p><p>
32、; mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;</p><p> if ( mi[mp].e >= 90. ) mi[mp].f = mi[mp].a;</p><p> else if ( mi [mp].e >= 80. ) </p><p> mi[mp].f = mi[mp].
33、a *0.8;</p><p> else if ( mi[mp].e >= 70. )</p><p> mi[mp].f = mi[mp].a *0.75;</p><p> else if ( mi[mp].e >= 60. ) </p><p> mi[mp].f = mi[mp].a *0.6;</p>
34、;<p> else mi[mp].f = 0;</p><p><b> mp++;</b></p><p><b> }</b></p><p> fclose(fp);</p><p><b> }</b></p><p>
35、 *************** 顯 示 主 菜 單 ***************</p><p> 這部分是對本程序的主要功能做出的展示,體現(xiàn)了本程序的五大功能,簡潔明白,一目了然。</p><p> Void DisplayMainMenu()</p><p><b> {</b></p><p>
36、 printf (“\n 1) 數(shù)據(jù)錄入 \n 2) 數(shù)據(jù)查詢 \n 3) 數(shù)據(jù)刪除 \n 4) 數(shù)據(jù)排序 \n 5) 程序結(jié)束 \n “);</p><p><b> }</b></p><p> *************** 數(shù) 據(jù) 錄 入 模 塊 *******************</p><p> 錄入每個學(xué)生的
37、學(xué)號、課程編號、課程名稱、學(xué)分、平時成績、實驗成績、卷面成績共7個數(shù)據(jù),即對關(guān)于學(xué)生成績基本信息的結(jié)構(gòu)體數(shù)組進(jìn)行輸入,也就是文件B.TXT中的內(nèi)容。</p><p> void DataInput()</p><p><b> {</b></p><p><b> FILE *fp;</b></p>&
38、lt;p><b> int i;</b></p><p> printf ("學(xué)生的學(xué)號 課程編號 課程名稱 學(xué)分 平時成績 實驗成績 卷面成績\n");</p><p><b> while(1)</b></p><p> {scanf ("%d%s%s%d%d%d%d&quo
39、t;,&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c, &mi[mp].d);</p><p> if(mi[mp].Id==-1)break;</p><p> if (mi[mp].c == -1) </p><p>
40、 mi[mp].e = 0.3*mi[mp].b+0.7*mi[mp].d;</p><p><b> else </b></p><p> mi[mp].e = 0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;</p><p> if ( mi[mp].e >= 90. ) mi[mp].f =
41、 mi[mp].a;</p><p> else if ( mi [mp].e >= 80. ) </p><p> mi[mp].f = mi[mp].a *0.8;</p><p> else if ( mi[mp].e >= 70. )</p><p> mi[mp].f = mi[mp].a *0.75;</
42、p><p> else if ( mi[mp].e >= 60. ) </p><p> mi[mp].f = mi[mp].a *0.6;</p><p> else mi[mp].f = 0;</p><p><b> mp++;</b></p><p><b> }&l
43、t;/b></p><p> fp = fopen("B.txt","r+");</p><p> for(i=0;i<mp;i++)</p><p> fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].cours
44、eName,&mi[i].a,&mi[mp].b,&mi[i].c, &mi[i].d);</p><p> fclose(fp);</p><p><b> }</b></p><p> ******************* 查 詢 模 塊********************</p&g
45、t;<p> 此段程序是為實現(xiàn)信息查詢功能而設(shè)計的。總體來講,分為兩大功能模塊,一是學(xué)生基本信息查詢,二是對學(xué)生成績的查詢。在第一種查詢,即對學(xué)生基本信息的查詢中,又提供了兩種查詢方式,一種是按學(xué)號對學(xué)生基本信息進(jìn)行查詢,一種是按宿舍號碼對學(xué)生基本信息進(jìn)行查詢。</p><p> Void DataQuery()</p><p><b> {</b>
46、;</p><p> int x,y,z;</p><p> printf( “\n 1) 學(xué)生基本情況查詢\n 2) 成績查詢\n”);--------------------------選擇查詢內(nèi)容</p><p> scanf(“%d”,&x);</p><p> if (x == 1) // 查詢學(xué)生信息</p&
47、gt;<p><b> {</b></p><p> printf (“1) 按學(xué)號查詢 2) 按宿舍查詢\n”);-------------------------------選擇查詢方式</p><p> scanf(“%d”,&y);</p><p> if (y == 1 ) </p>&
48、lt;p><b> { </b></p><p> printf ( “ 輸入學(xué)號\n”);-----------------------------------------------按學(xué)生學(xué)號查詢</p><p> scanf (“%d”,&z);</p><p> QueryById(z);</p>&
49、lt;p><b> }</b></p><p> if (y == 2) </p><p><b> { </b></p><p><b> }</b></p><p> if ( x ==2) // 查詢成績信息-------------------
50、--------------------查詢學(xué)生成績(輸入學(xué)號)</p><p><b> {</b></p><p> printf ( “ 輸入學(xué)號\n”); </p><p> scanf (“%d”,&y);</p><p> QueryMark(y);</p><p>&
51、lt;b> }</b></p><p><b> }</b></p><p> ****************** 刪 除 模 塊 *******************</p><p> 此模塊提供了按學(xué)號實現(xiàn)刪除學(xué)生信息的功能,當(dāng)在文件A.TXT中刪除一個學(xué)生時,自動地在文件B.TXT中刪除此人所有信息。
52、</p><p> void DataDelete()</p><p><b> {</b></p><p><b> FILE *fp;</b></p><p><b> int x;</b></p><p><b> int i=
53、0;</b></p><p><b> int k,d;</b></p><p> printf( "輸入學(xué)號\n");</p><p> scanf( "%d",&x);</p><p> while( si[i].Id != x) i++;</
54、p><p> if (i<sp-1)</p><p><b> { </b></p><p> for ( k=i; k<sp-1; k++)</p><p><b> {</b></p><p> si[k] = si[k+1]; </p>
55、<p><b> }</b></p><p><b> }</b></p><p> if ( i<sp) sp--;</p><p><b> d = 0; </b></p><p> for (k=0;k<mp;k++)</p&g
56、t;<p><b> {</b></p><p> if ( mi[k].Id == x ) d++;</p><p> else mi[k-d] = mi[k];</p><p><b> }</b></p><p> mp = mp - d;</p><
57、;p> fp = fopen("D:B.txt","r+");</p><p> for(i=0;i<mp;i++)</p><p> fprintf(fp,"%d%s%s%d%d%d%d",&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&a
58、mp;mi[i].b,&mi[i].c, &mi[i].d);</p><p><b> }</b></p><p> *************** 排 序 模 塊 ******************</p><p> 利用void sort1()函數(shù)按計算所得的綜合成績進(jìn)行排序。</p><p
59、> void sort1()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> MarkInfo t;</p><p> for (i=mp-1;i>=1;i--)</p><p><b&g
60、t; {</b></p><p> for (j=0;j<i;j++)</p><p><b> {</b></p><p> if (mi[j].e>mi[j+1].e) </p><p><b> { </b></p><p><
61、;b> t=mi[j];</b></p><p> mi[j] = mi[j+1];</p><p> mi[j+1] = t;</p><p><b> }</b></p><p><b> }</b></p><p><b> }&
62、lt;/b></p><p> markput();</p><p><b> }</b></p><p><b> 四、 測試分析</b></p><p> 4.1 測試結(jié)果及分析</p><p><b> 顯示主菜單</b></
63、p><p><b> 數(shù)據(jù)錄入功能。</b></p><p><b> 對成績進(jìn)行錄入</b></p><p> ?。?)查詢功能,按學(xué)號進(jìn)行查詢</p><p> ?。?)排序功能按綜合成績排序</p><p><b> ?。?)刪除功能</b><
64、;/p><p><b> 退出程序</b></p><p><b> 五、 總結(jié)</b></p><p> 這次學(xué)到很多很多的東西,同時不僅可以鞏固了以前所學(xué)過的知識,而且學(xué)到了很多在書本上所沒有學(xué)到過的知識。通過這次課程設(shè)計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合
65、起來才能做好每一件事。在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對以前所學(xué)過的知識理解得不夠深刻,掌握得不夠牢固,比如說結(jié)構(gòu)體、文件、指針等。為了解決問題,最好就是多向同學(xué),老師請教。</p><p><b> 六、參考文獻(xiàn)</b></p><p> 參考文獻(xiàn)必須是在課程設(shè)計中真正閱讀過和運用過的,文獻(xiàn)按照在正文中的出現(xiàn)順序排列。</p><p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生學(xué)籍管理系統(tǒng)c課程設(shè)計報告
- c語言課程設(shè)計-學(xué)籍管理系統(tǒng)
- c++語言課程設(shè)計報告書--學(xué)生學(xué)籍管理系統(tǒng)
- c語言課程設(shè)計-學(xué)籍管理系統(tǒng)
- c++課程設(shè)計報告(學(xué)生學(xué)籍管理系統(tǒng))
- c++課程設(shè)計報告(學(xué)生學(xué)籍管理系統(tǒng))
- c++課程設(shè)計報告(學(xué)生學(xué)籍管理系統(tǒng)) (2)
- c++課程設(shè)計---學(xué)生學(xué)籍管理系統(tǒng)
- 學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計報告
- 學(xué)生學(xué)籍管理系統(tǒng)課程設(shè)計報告
- c++課程設(shè)計報告-- 學(xué)籍管理系統(tǒng)
- c++課程設(shè)計學(xué)生學(xué)籍成績管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)c語言課程設(shè)計報告
- c語言課程設(shè)計報告----學(xué)生信息管理系統(tǒng)
- c語言課程設(shè)計報告---學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計報告--學(xué)生成績管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)c語言課程設(shè)計報告
- c語言課程設(shè)計報告----學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計報告--學(xué)生成績管理系統(tǒng)
- c語言課程設(shè)計報告---學(xué)生信息管理系統(tǒng)
評論
0/150
提交評論