C語言學生成績管理系統(tǒng)課程設計報告.doc
C語言課程設計報告
一 .問題描述:
題目七:學生成績管理系統(tǒng)設計
學生成績信息包括:學期,學號,班別,姓名,四門課程成績(語文、數(shù)學、英語和計算機)等。
主要功能:
(1) 能按學期、按班級完成對學生成績的錄入、修改
(2) 能按班級統(tǒng)計學生的成績,求學生的總分及平均分
(3) 能查詢學生成績,不及格科目及學生名單
(4) 能按班級輸出學生的成績單
要求:使用二進制文件方式存儲數(shù)據(jù),系統(tǒng)以菜單方式工作
學生成績信息包括:學期,學號,班別,姓名,四門課程成績(語文、數(shù)學、英語和計算機)等。要求使用二進制文件方式存儲數(shù)據(jù),系統(tǒng)以菜單方式工作,實現(xiàn)對學生成績的錄入,修改,統(tǒng)計,排序,查詢,輸出等功能。
二 .設計目的
設計“學生成績管理系統(tǒng)”使其具有以下功能:
(1) 能完成對學生成績的錄入
(2) 能按班級統(tǒng)計學生的成績,求學生的總分及平均分,排序
(3) 能按班級,學期輸出學生的成績單和不及格科目及學生名單
(4) 能查詢單個學生成績
(5) 能修改單個學生信息
三 . 要求
系統(tǒng)以菜單方式工作
四 . 功能
1 輸入功能:可以一次完成無數(shù)條信息的輸入。
2 輸出功能:能按班級輸出學生的成績單。
3 修改功能:完成對單個學生成績的修改。
4 查找功能:完成對單個學生信息查找,并顯示。
5 排序功能:按學生成績進行排序,并顯示。
6 有一個清晰美觀界面來調用各個功能
五.模塊圖
修 改
void monify
修改單個學生信息
主
流
程
學期int term
班級int classes
信息錄入void input
成績統(tǒng)計void sort
查詢 void search
姓名char name[10]
學號int num
成績int score[4]
學號stu[i].num、班級stu[i].classes,姓名stu[i].name、四門課成績stu[i].score
能按學號查詢單個學生成績
按班級統(tǒng)計學生的成績,求學生的總分及平均分,排序
成績輸出void print
能按班級,學期輸出學生成績單和不及格科目及學生名單
結構數(shù)組struct student
六 . 詳細內容
整個系統(tǒng)除了主函數(shù)外,另外還有5個函數(shù),實現(xiàn)六大功能:輸入功能、輸出功能、修改功能,查找并顯示功能、排序并顯示功能。各個函數(shù)的詳細設計說明分別如下:
1 . 定義結構體及宏定義
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define NUM 100
struct student
{ int term;
int num;
int classes;
char name[10];
int score[4];
int sum;
float average;
}stu[NUM];
2.主函數(shù) main()
利用無限次循環(huán)for(;;)和swithch()進行菜單選擇來實現(xiàn)各函數(shù)的調用,系統(tǒng)根據(jù)輸入的數(shù)字選項來調用相應的函數(shù)。等執(zhí)行完每一個函數(shù)功能后,按任一鍵回到主界面也要通過這個函數(shù)來實現(xiàn)!
void main()
{
zcd();
}
/*主函數(shù)界面*/
void zcd()
{
int n=0;
char m;
system("cls");/*清屏*/
printf("按任一鍵進入主菜單\n "); /*按任一鍵進入主菜單*/
printf("********************************************************************************\n");
printf("\t\t華中科技大學文華學院歡迎您\n");
printf("\n\t\t\t--------- 歡迎使用學生管理系統(tǒng)\n\n\t\t\t\t\t-----------\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 輸入學生成績記錄 Input the record\n"); /*輸入學生成績記錄*/
printf("\t\t\t2. 排序并顯示 Sort to make new a file\n"); /*排序*/
printf("\t\t\t3. 按班級顯示成績單 Print the record\n"); /*顯示*/
printf("\t\t\t4. 查找個人成績 Search record on name\n"); /*查找*/
printf("\t\t\t5. 修改 Modify a record\n"); /*修改*/
printf("\t\t\t6. 退出 Quit\n"); /*退出*/
printf("********************************************************************************\n");
printf("\n\t\t\t輸入你的選擇Enter your choice(1~7):");
fflush(stdin);
m=getchar();
do
{switch(m)
{
case 1:input();zcd();break;
case 2:sort();system("pause");zcd();break;
case 3:print();system("pause");break;
case 4:search();zcd();break;
case 5:modify();system("pause");zcd();break;
case 6:exit(0); /*如菜單返回值為7則程序結束*/
default:printf("錯誤命令"); getchar();zcd();
}
} while(1);
}
3輸入信息函數(shù)
void input()
{
system("cls");
int i;
char a;
for(i=0;i<NUM;i++)
{ printf(" \n請輸入學生的學期:");
scanf("%d",&stu[i].term);
printf(" \n請輸入學生的學號:");
fflush(stdin);
scanf("%d",&stu[i].num);
printf(" \n請輸入學生的班級:");
scanf("%d",&stu[i].classes);
printf("\n請輸入學生的姓名:");
scanf("%s", stu[i].name) ;
printf("\n請輸入學生的語文成績:");
scanf("%d",&stu[i].score[0]);
printf("\n請輸入學生的數(shù)學成績:");
scanf("%d", &stu[i].score[1]);
printf("\n請輸入學生的英語成績:");
scanf("%d", &stu[i].score[2]);
printf("\n請輸入學生的計算機成績:");
scanf("%d", &stu[i].score[3]);
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];//算總分和平均
stu[i].average=(float)stu[i].sum/4.0;
printf("是否要繼續(xù)添加(按N&n退出)");
fflush(stdin);
a=getchar();
if(a==n||a==N)
break;
}
}
4、排序并顯示函數(shù)
void sort()
{
int i,j=0;
float temp;
for(i=0;i<NUM;i++)
{
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
stu[i].average=(float)stu[i].sum/4.0;
}
for(i=0;i<NUM-1;i++)
{
for(j=i+1;j<NUM;j++)
{
if(stu[i].sum<stu[j].sum)
{
temp=stu[i].sum;
stu[i].sum=stu[j].sum;
stu[j].sum=temp;
}
}
}
printf("學號\t姓名\t班級 語文 數(shù)學 英語 計算機 總分 平均分\n");
for(i=0;i<NUM;i++)
printf("%d\t%s\t%d%5d%5d%5d%6d%7d%8.2f\n",stu[i].num,stu[i].name,stu[i].classes,
stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);
/*輸出學生信息*/
}
}
}
system("pause");system("cls");print();
}
5查找并顯示一個記錄
void search()
{
system("cls");/*清屏*/
int number=0,i;
printf("\t\t\t 請輸入要查找學生的學號:");
scanf("%d",&number);
printf("學號\t姓名\t班級 語文 數(shù)學 英語 計算機 總分 平均分\n");
for(i=0;i<NUM;i++)
if(number==stu[i].num) break;/*查找判斷*/
if(i<NUM)
{printf("%d\t%s\t%d%5d%5d%5d%6d%7d%8.2f\n",stu[i].num,stu[i].name,stu[i].classes,
stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3],stu[i].sum,stu[i].average); /*輸出學生信息*/
}
else
printf("沒找到該學生的信息\n");
system("pause");
}
6.按學期、按班級輸出成績函數(shù)
void print()
{
system("cls");
char a;
printf("1、按學期輸出\n");
printf("2、按班級輸出\n");
printf("3、返回\n");
fflush(stdin);
a=getchar();
switch(a)
{
case 1:print1();
case 2:print2();
case 3:zcd();
default:print();
}
}
void print1()//按學期
{
int i,m;
printf("請輸入學期:\n");
scanf("%d",&m);
printf("學號\t姓名\t班級 語文 數(shù)學 英語 計算機 總分 平均分\n");
for(i=0;i<NUM;i++)
{
if(m==stu[i].term)
printf("%d\t%s\t%d%5d%5d%5d%6d%7d%8.2f\n",stu[i].num,stu[i].name,stu[i].classes,
stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3],stu[i].sum,stu[i].average); /*輸出學生信息*/
}
system("pause");system("cls");print();
}
void print2()//按班級
{
int i,j,k;
printf("請輸入班級:\n");
scanf("%d",&k);
printf("學號\t姓名\t班級 語文 數(shù)學 英語 計算機 總分 平均分\n");
for(i=0;i<NUM;i++)
{
if(k==stu[i].classes)
{
stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
stu[i].average=stu[i].sum/4.0;
printf("%d\t%s\t%d%5d%5d%5d%6d%7d%8.2f\n",stu[i].num,stu[i].name,stu[i].classes,
stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3],stu[i].sum,stu[i].average); /*輸出學生信息*/
}
}
printf("輸出不及格學生名單及成績:\n");
printf("學號\t姓名\t班級 語文 數(shù)學 英語 計算機 \n");
for(i=0;i<NUM;i++)
{for(j=0;j<4;j++)
{
if(stu[i].score[j]<60&&k==stu[i].classes) /*輸出不及格學生名單及成績*/
printf("%d\t%s\t%d%5d%5d%5d%6d\n",stu[i].num,stu[i].name,stu[i].classes,
stu[i].score[0],stu[i].score[1],stu[i].score[2], stu[i].score[3]);
break;
}
}
system("pause");system("cls");print();
}
7修改成績函數(shù)
void modify()
{
system("cls");
int number,i;
printf("\t\t\t請輸入要修改信息的學生學號:");
scanf("\t\t\t%d",&number);
for(i=0;i<NUM;i++)
if(number=stu[i].num) break;/*查找判斷*/
if(i<NUM)/*查找判斷*/
{
printf("請輸入修改后的學生的信息:");
printf(" \n請輸入學生的學期:");
scanf("%d",&stu[i].term);
printf(" \n請輸入學生的學號:");
fflush(stdin);
scanf("%d",&stu[i].num);
printf(" \n請輸入學生的班級:");
scanf("%d",&stu[i].classes);
printf("\n請輸入學生的姓名:");
scanf("%s", stu[i].name) ;
printf("\n請輸入學生的語文成績:");
scanf("%d",&stu[i].score[0]);
printf("\n請輸入學生的數(shù)學成績:");
scanf("%d", &stu[i].score[1]);
printf("\n請輸入學生的英語成績:");
scanf("%d", &stu[i].score[2]);
printf("\n請輸入學生的計算機成績:");
scanf("%d", &stu[i].score[3]);
}
else
printf("沒找到該學生的信息\n");
system("paues");system("cls");zcd();
}
七.運行過程
主菜單
成績錄入
統(tǒng)計排序
按學期輸出成績
按班級輸出成績
查找個人成績
修改單個學生信息
八.設計總結
經過幾周的課程設計,我學到了很多東西:
①鞏固和加深了對編程的理解,提高綜合運用本課程所學知識的能力。
②培養(yǎng)了我選用參考書,查閱手冊及文獻資料的能力。培養(yǎng)獨立思考,深入研究,分析問題、解決問題的能力。
③經過實際編譯系統(tǒng)的分析設計、編程調試,掌握應用軟件的分析方法和工程設計方法。
④能夠按要求編寫課程設計報告書,能正確闡述設計和實驗結果,正確繪制系統(tǒng)和程序框圖。
課程設計是把我們所學的理論知識進行系統(tǒng)的總結并應用于實踐的良好機會,有利于加強我們用知識理論來分析實際問題的能力,進而加強了我們對知識認識的實踐度,鞏固了我們的理論知識,深化了對知識的認識,并為走向社會打下一個良好的基礎。
在這次課程設計中我遇到許多問題和麻煩,得到了老師的幫助和指導,才能夠使得這次課程設計順利的進行下去,另外,在程序調試過程中,也得到很多同學的幫助,給我及時指出錯誤,提出許多寶貴意見。在此對老師和同學們表示感謝!
(后附完整程序)