《C語言課程設計報告-- 學生成績統(tǒng)計系統(tǒng)》由會員分享,可在線閱讀,更多相關《C語言課程設計報告-- 學生成績統(tǒng)計系統(tǒng)(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
/
C語言課程設計書
設計題目: 學生成績統(tǒng)計系統(tǒng)
課程名稱: C語言課程設計
學 院 :物理與光電工程學院
專業(yè)班級: 電子科學與技術(1)班
學 號 : 3111008376
姓 名 : 何燦豪
2、
聯(lián)系方式 :
任課教師 : 劉力斌
2013 年 11月 10日
目錄
設計目的 ··················· 2
任務要求 ··················· 2
總體設計 ··················· 2
部分程序 ·················· 4
調(diào)試分析過程 ·················
3、·· 9
課程設計總結(jié) ···················· 13
題目:學生成績統(tǒng)計
一、設計目的:
(1)該課程設計要求學生既動手又動腦,自學,查資料,獨立實踐。將上學期課本上的理論知識和實際有機的結(jié)合起來,鍛煉學生實際分析問題和解決問題的能力,提高學生適應實際、實踐編(程的能力,使對C語言系統(tǒng)編程有一個大致的了解。
(2)C語言的實踐。掌握C語言函數(shù)的定義方法,函數(shù)的聲明及函數(shù)的調(diào)用過程。掌握結(jié)構(gòu)體類型變量的定義和使用,綜合應用C語言的知識,實現(xiàn)一個完整的系統(tǒng),提高編程能力,體會軟件程序的開發(fā)過程。
二、任務要求:
4、
假設某班有:30人(姓名自定)
考試課程有:高等數(shù)學、物理、外語、C語言、德育5門課程。
將所有同學的成績保留在文件中,對文件中的數(shù)據(jù)處理,輸出所要求的內(nèi)容, 程序的功能主要包括3方面:
① 輸入成績到文件中
② 輸出成績
③ 輸出不及格學生名單
④ 成績排序
⑤ 修改記錄
⑥ 刪除記錄
⑦ 插入記錄等
主函數(shù)中對3個功能選擇(菜單),調(diào)用對應的函數(shù)完成。
三、總體設計:
(1)程序設計組成框圖
1.按班級輸出學生成績單
5、
2.按姓名查詢
學生成績管理系統(tǒng)
3.增加學生
4.刪除學生
5.按班級修改學生成績
6.保存所有學生信息
6、
7.顯示不及格學生成績
8.按平均成績排序并輸出成績
9.退出
(2)模塊功能說明
1 輸出功能:顯示全部學生的記錄。
2 查詢功能:輸入姓名可以查詢學生的詳細信息。
3 增加功能:增加新學生的信息。
4 刪除功能:刪除學生信息。
5 修改功能:修改學生的錯誤信息。
6
7、 保存功能:保存已輸入信息。
7讀取功能:讀取已輸入信息。
8顯示功能:按照所需要的要求顯示學生記錄。
9 排序功能:按照要求完成對學生信息的排序。
10 退出系統(tǒng)。
(3)程序流程圖
開始
學生成績單
結(jié)束
輸入數(shù)字
平均分排序
不及格名單
保存信息
增加學生
退出
按班修改
按姓名查詢
刪除學生
四、部分程序代碼如下:
(1) 該函數(shù)功能:從文件中讀學生信息到鏈表中
void ReadInf
8、oFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f%f%f",p->studentNumber,p->studentName,p->className,
&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>0)
{
InsertOneNode(p
9、);
p=MallocNode();
}
fclose(fp);
}
(2)該函數(shù)功能:顯示菜單,根據(jù)用戶的輸入的數(shù)字
完成對應的功能
void DesplayMenu(void)
{
STUDENT *p;
printf("\t\t=========歡迎來到學生成績管理系統(tǒng)================\n");
printf("\t\t\t-------請選擇相應功能------------\n");
printf("\t\t|************************************************|\n");
printf("
10、\t\t|------------- 1 按班級輸出學生成績單 -----------|\n");
printf("\t\t|------------- 2 按姓名查詢----------------------|\n");
printf("\t\t|------------- 3 增加學生 -----------------------|\n");
printf("\t\t|------------- 4 刪除學生 -----------------------|\n");
printf("\t\t|------------- 5 按班級修改學生成績 -------------|\n
11、");
printf("\t\t|------------- 6 保存所有學生信息 ---------------|\n");
printf("\t\t|------------- 7 顯示不及格學生名單--------------|\n");
printf("\t\t|------------- 8 按平均成績排序并輸出成績--------|\n");
printf("\t\t|------------- 9 退出 --------------------------|\n");
printf("\t\t|**************************************
12、**********|\n");
printf("\t\t\t\t\t\t制作者:何燦豪\n");
printf("\t\t\t\t\t\t制作時間:2013年11月10號\n");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:
OutputInformation();/*顯示所有學生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
p=MallocNode();/*先申請一個新結(jié)點*/
GetInformation(
13、p);/*要求用戶輸入信息到新結(jié)點中*/
InsertOneNode(p);/*將新結(jié)點加到鏈表中*/
break;
case 4:
DeleteNodeBystudentNumber();/*根據(jù)用戶輸入的學號刪除該學生*/
break;
case 5:
ChangeMarkByName();/*根據(jù)用戶輸入的姓名修改學生成績*/
break;
case 6:
SaveLinkToFile();/*保存數(shù)據(jù)*/
break;
case 7:
DesplayMarkSegment();/*顯示不及格的學生成績*/
break;
case 8:
Composito
14、rByTotalMark();/*按平均成績排序*/
break;
case 9:
SaveLinkToFile();/*保存數(shù)據(jù)后再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*遞歸調(diào)用*/
}
(3)函數(shù)功能:根據(jù)用戶輸入的學號刪除該學生
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("請輸入要刪除的學生
15、學號:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在該學號的學生\n");
return;
}
printf("成功刪除\n");
}
(4)該函數(shù)功能是:保存鏈表
16、數(shù)據(jù)到文件中
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("現(xiàn)在沒有學生信息,請先輸入學生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->c
17、lassName,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);
p=p->next;
}
fclose(fp);
}
(5)函數(shù)功能:輸出不及格學生名單
void DesplayMarkSegment(void)
{
STUDENT *p;
p=headLink->next;
printf("不及格學生的名單有:\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))||
(6>((
18、int)(p->mark4/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就認為該生不及格*/
{
printf("%s\n",p->studentName);
}
p=p->next;
}
}
(6)該函數(shù)功能:按平均成績進行排序
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("現(xiàn)在還沒學生信息,請先輸入學生信息\n");
return;
}
wh
19、ile(r)/*兩層while循環(huán)實現(xiàn)排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結(jié)點信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.classN
20、ame,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
exchange.mark4=q->mark4;
exchange.mark5=q->mark5;
strcpy(q->studentNumber,p->studentNumber);/*再復制p結(jié)點信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->ma
21、rk1;
q->mark2=p->mark3;
q->mark3=p->mark3;
q->mark4=p->mark4;
q->mark5=p->mark5;
strcpy(p->studentNumber,exchange.studentNumber);/*最后復制exchange結(jié)點信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p-
22、>mark3=exchange.mark3;
p->mark4=exchange.mark4;
p->mark5=exchange.mark5;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
五、調(diào)試分析過程:
界面:
增加學生:
輸出學生成績單:
按姓名查詢:
刪除學生:
輸出不及格的名單:
按平均成績排序輸出:
六、設計總結(jié):
通過這次的課程設計,讓我更加地對C語言有更深的了解,還有讓我發(fā)現(xiàn)了在結(jié)構(gòu)體和鏈表這方面的知識
23、要有待加強。第一次編程這么多的程序,說實話真的有點難度,但是通過后面慢慢的看書,一點點地去解決問題。在編寫程序是一定要注意細節(jié)的問題,因為一個小小錯誤會導致整個程序不能運行,例如分號一定要加,否則在編譯的時候會出現(xiàn)錯誤,當然它會提示哪里有錯誤的,這種小錯誤最好能避免。一開始調(diào)試的時候出現(xiàn)了幾十條錯誤的記錄,其中包括小錯誤的,但是,只要慢慢的檢查的話,程序就會趨向完善,最后程序就會運行的。C語言是計算機編程語言中最基礎的語言,務必要熟練掌握。所以在以后的練習中,一定要多多寫這樣的程序,這樣的話才能提高編程的能力。經(jīng)過一周的編程實習,并在后一段的報告總結(jié),我對C語言這門科有新的認識,本人實在是獲益不淺!要想編寫一個準確、高效并有使用價值的程序,一定先要對課本知識熟悉,還要掌握必要的上機操作能力,寫程序其實很容易而關鍵在于調(diào)試程序。這次設計,讓我重新掌握了C語言,而且還得到了用C語言解決實際問題的寶貴經(jīng)驗。
13