需求分析:
1.設(shè)計(jì)題目:學(xué)生成績管理系統(tǒng)
2.系統(tǒng)功能需求分析:實(shí)現(xiàn)對學(xué)生各科成績總分及平均分的排序,和成績的查找
概要設(shè)計(jì)
1.功能模塊圖
詳細(xì)設(shè)計(jì)
1.流程圖
測試結(jié)果:列出所有功能的運(yùn)行界面,并作文字說明。
1.錄入成績:錄入3個(gè)人的學(xué)號(hào)和各科成績
2.每門課程的總分平均分;計(jì)算各科的平均分
3.學(xué)生總分:計(jì)算3個(gè)學(xué)生的總分
4.學(xué)生總分的排序由高到低:對3個(gè)學(xué)生成績進(jìn)行排序
5.按學(xué)號(hào)由小到大排出成績表;按學(xué)號(hào)排成績
6.按姓名的字典順序排出成績表:按姓名順序排成績
7.學(xué)號(hào)查詢學(xué)生排名和考試成績:通過學(xué)生學(xué)號(hào)查找排名和各科成績
8.按姓名查詢學(xué)生排名及其考試成績;通過輸入姓名查找排名和成績
9.每門課程分別統(tǒng)計(jì)每個(gè)類別的人數(shù)以及所占百分比;看各科評(píng)級(jí)人數(shù)和所占百分比
10.輸出學(xué)生的學(xué)號(hào),姓名考試成績,總分和平均分;輸出學(xué)生各項(xiàng)數(shù)據(jù)?
11.將數(shù)據(jù)存入文件:保存數(shù)據(jù)文章來源:http://www.zghlxwxcb.cn/news/detail-512101.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-512101.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3 //定義學(xué)生人數(shù)
typedef struct
{
float mat;//高數(shù)
float eng;//英語
float com;//計(jì)算機(jī) 無名結(jié)構(gòu)體的變量定義
float phy;//大物
float ele;//電路
}SUB; //科目
typedef struct Student{
char xuehao[100];//學(xué)號(hào)
char name[100];//姓名
char sex[100];//性別 無名結(jié)構(gòu)體的變量定義
SUB score;//科目分?jǐn)?shù)
float num;// 總分
float ave;//平均分
}AA;//信息
void save(AA *p){ //文件存入
int i;
FILE *fp;//定義一個(gè)指針變量
fp=fopen("student.txt","w"); //打開以上創(chuàng)建的”student" 文件,"w"表示“只寫”
if((fp=fopen("student.txt","w"))==NULL)//檢查文件是否正確打開,即:判斷 fopen()的函數(shù)值 是否為空指針NULL
{
printf("cannot open file\n");//打開文件的操作出現(xiàn)錯(cuò)誤, fopen()函數(shù)的返回值為空指針NULL,即:該文件打開失敗
exit(0); //關(guān)閉所有打開的文件,終止正在執(zhí)行的程序
}
for(i=0;i<N;i++)//控制循環(huán)3次
{
fprintf(fp,"%s\t",p[i].xuehao);//輸出學(xué)號(hào)
fprintf(fp,"%s\t",p[i].name);//姓名
fprintf(fp,"%s\t",p[i].sex);//性別
fprintf(fp,"%.2f\t",p[i].score.mat);//高數(shù)
fprintf(fp,"%.2f\t",p[i].score.eng);//英語
fprintf(fp,"%.2f\t",p[i].score.com);//計(jì)算機(jī)
fprintf(fp,"%.2f\t",p[i].score.phy);//大物
fprintf(fp,"%.2f\t",p[i].score.ele);//電路
fprintf(fp,"%.2f\t",p[i].num);//總分
fprintf(fp,"%.2f\t",p[i].ave);//均分
fprintf(fp,"\n");
}
fclose(fp);//關(guān)閉文件
}
void menu(int *n)//主菜單
{
printf("\t\t\t\t*************************************************\n");
printf("\t\t\t\t\t1.手動(dòng)錄入數(shù)據(jù)\n");//手動(dòng)錄入數(shù)據(jù)
printf("\t\t\t\t\t2.計(jì)算每門課程的總分和平均分 \n");//計(jì)算每門課程的總分和平均分
printf("\t\t\t\t\t3.計(jì)算每個(gè)學(xué)生的總分和平均分 \n");//計(jì)算每個(gè)學(xué)生的總分和平均分
printf("\t\t\t\t\t4.按學(xué)生的總分由高到低排出名次表\n");//按學(xué)生的總分由高到低排出名次表
printf("\t\t\t\t\t5.按學(xué)號(hào)由小到大排出成績表\n");//按學(xué)號(hào)由小到大排出成績表
printf("\t\t\t\t\t6.按姓名的字典順序排出成績表 \n");//按姓名的字典順序排出成績表
printf("\t\t\t\t\t7.按學(xué)號(hào)查詢學(xué)生排名及其考試成績\n");//按學(xué)號(hào)查詢學(xué)生排名及其考試成績
printf("\t\t\t\t\t8.按姓名查詢學(xué)生排名及其考試成績 \n");//按姓名查詢學(xué)生排名及其考試成績
printf("\t\t\t\t\t9.對每門課程分別統(tǒng)計(jì)每個(gè)類別的人數(shù)以及所占百分比\n");/*對每門課程分別統(tǒng)計(jì)每個(gè)類別的人數(shù)以及所占百分比*/
printf("\t\t\t\t\t10.輸出每個(gè)學(xué)生的學(xué)號(hào),姓名,各科考試成績,總分和平均分 \n");//輸出每個(gè)學(xué)生的學(xué)號(hào),姓名,各科考試成績,總分和平均分
printf("\t\t\t\t\t11.將數(shù)據(jù)存入文件\n");//將數(shù)據(jù)存入文件
printf("\t\t\t\t\t0.退出程序 \n");//退出程序
printf("\t\t\t\t*************************************************\n");
printf("Please input your choice:");
scanf("%d",n);
}
void scanfstudent(AA*p)//信息錄入
{
int i;
for(i=0;i<N;i++)//控制人數(shù)為3
{
printf("請輸入第%d學(xué)生的信息:\n",i+1);
printf("學(xué)號(hào):");
scanf("%s",p[i].xuehao);
printf("姓名:");
scanf("%s",p[i].name);
printf("性別:");
scanf("%s",p[i].sex);
printf("高數(shù)得分:");
scanf("%f",&p[i].score.mat);
printf("英語得分:");
scanf("%f",&p[i].score.eng);
printf("計(jì)算機(jī)得分:");
scanf("%f",&p[i].score.com);
printf("大物得分:");
scanf("%f",&p[i].score.phy);
printf("電路得分:");
scanf("%f",&p[i].score.ele);
p[i].num=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele); //計(jì)算總成績
printf("總成績:%.2f",p[i].num);
p[i].ave=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele)/5.0; //計(jì)算總平均分
printf("平均分:%.2f",p[i].ave);
}
}
void studentave(AA *p)//計(jì)算并輸出總分、平均分
{
int i;
for(i=0;i<N;i++)
{
p[i].num=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele); //計(jì)算個(gè)人總分
p[i].ave=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele)/5.0;//計(jì)算個(gè)人平均分
printf("第%d個(gè)學(xué)生的總分:%.2f\t\t平均分:%.2f",i+1,p[i].num,p[i].ave);//輸出
printf("\n");
}
}
void printfstudent(AA*p)//匯總個(gè)人成績
{
int i;
printf("學(xué)號(hào)\t\t姓名\t性別\t高數(shù)\t英語\t計(jì)算機(jī)\t大物\t電路\t總分\t平均分\n\n");//
for (i=0;i<N;i++)
{
printf("%s\t",p[i].xuehao);
printf("%s\t",p[i].name);
printf("%s\t",p[i].sex);
printf("%.2f\t",p[i].score.mat);
printf("%.2f\t",p[i].score.eng);
printf("%.2f\t",p[i].score.com);
printf("%.2f\t",p[i].score.phy);
printf("%.2f\t",p[i].score.ele);
p[i].num=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele);
printf("%.2f\t",p[i].num);
p[i].ave=(p[i].score.mat+p[i].score.eng+p[i].score.com+p[i].score.phy+p[i].score.ele)/5.0;
printf("%.2f\t",p[i].ave);
printf("\n");
}
}
void pxnum(AA *p) //??????????????????????
{
AA st;
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N-1;j++)
if(p[i].num>p[j].num)
{
st=p[i];
p[i]=p[j];
p[j]=st;
}
}
printfstudent(p);
}
void px1(AA*p) //?????????????????????????????
{
AA st;
int i,j;
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
if(p[i].xuehao>p[j].xuehao)
{
st=p[i];
p[i]=p[j];
p[j]=st;
}
}
printfstudent(p);
}
void px2(AA *p) // ?????????????????
{
char tem[30]={0};
int i,j;
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
if(strcmp(p[i].name,p[j].name)>0)
{
strcpy(tem,p[i].name);
strcpy(p[i].name,p[j].name);
strcpy(p[j].name,tem);
}
}
printfstudent(p);
}
void chazhaoxuehao(AA *p)//查找學(xué)號(hào)
{
int j;
int flat = 0;
char num[100];
printf("請輸入要查找的學(xué)號(hào):");
scanf("%s",num);
for(j=0;j<N;j++)
{
if(strcmp(p[j].xuehao,num)==0)
{
flat++;
break;
}
}
if(!flat)
{
printf("學(xué)號(hào)輸入有誤!\n");
}
else{
printf("學(xué)號(hào):%s,姓名:%s,性別:%s,高數(shù):%.2f,英語:%.2f,計(jì)算機(jī):%.2f,大物:%.2f電路:%.2f\n",p[j].xuehao,p[j].name,
p[j].sex,p[j].score.mat,p[j].score.eng,p[j].score.com,p[j].score.phy,p[j].score.ele);
}
}
void chazhaoname(AA *p)//查找姓名
{
int j;
int flat = 0;
char name1[100];
printf("請輸入要查找的姓名:");
scanf("%s",name1);
for(j=0;j<N;j++){
if(strcmp(p[j].name,name1)==0)
{
flat++;
printf("學(xué)號(hào):%s,姓名:%s,性別:%s,高數(shù):%.2f,英語:%.2f,計(jì)算機(jī):%.2f,大物:%.2f電路:%.2f\n",p[j].xuehao,p[j].name,
p[j].sex,p[j].score.mat,p[j].score.eng,p[j].score.com,p[j].score.phy,p[j].score.ele);
break;
}
}
if(!flat){
printf("姓名輸入有誤!\n");
}
}
void courseave(AA *p)
{
int i;
float sum1=0;
float sum2=0;
float sum3=0;
float sum4=0;
float sum5=0;
float ave1=0,ave2=0,ave3=0,ave4=0,ave5=0;
for(i=0;i<N;i++)
{
sum1+=p[i].score.mat;ave1=sum1/N;
sum2+=p[i].score.eng;ave2=sum2/N;
sum3+=p[i].score.com;ave3=sum3/N;
sum4+=p[i].score.phy;ave4=sum4/N;
sum5+=p[i].score.ele;ave5=sum5/N;
}
printf("高數(shù)總分:%.2f\t英語總分:%.2f\t計(jì)算機(jī)總分:%.2f\t大物總分:%.2f\t電路總分:%.2f\n\n",sum1,sum2,sum3,sum4,sum5);
printf("高數(shù)平均分:%.2f\t英語平均分:%.2f\t計(jì)算機(jī)平均分:%.2f\t大物平均分:%.2f\t電路平均分:%.2f\n",ave1,ave2,ave3,ave4,ave5);
}
void kandscore(AA *p)//成績等級(jí)
{
int i;
int b1=0,b2=0,b3=0,b4=0,b5=0;
int c1=0,c2=0,c3=0,c4=0,c5=0;
int d1=0,d2=0,d3=0,d4=0,d5=0;
int e1=0,e2=0,e3=0,e4=0,e5=0;
int f1=0,f2=0,f3=0,f4=0,f5=0;
for(i=0;i<N;i++)
{
if(p[i].score.mat>=90)b1++;
if(p[i].score.mat<90&&p[i].score.mat>=80)b2++;
if(p[i].score.mat<80&&p[i].score.mat>=70)b3++;
if(p[i].score.mat>=60&&p[i].score.mat<70)b4++;
if(p[i].score.mat<60)b5++;
if(p[i].score.eng>=90)c1++;
if(p[i].score.eng<90&&p[i].score.eng>=80)c2++;
if(p[i].score.eng<80&&p[i].score.eng>=70)c3++;
if(p[i].score.eng>=60&&p[i].score.eng<70)c4++;
if(p[i].score.eng<60)c5++;
if(p[i].score.com>=90)d1++;
if(p[i].score.com<90&&p[i].score.com>=80)d2++;
if(p[i].score.com<80&&p[i].score.com>=70)d3++;
if(p[i].score.com>=60&&p[i].score.com<70)d4++;
if(p[i].score.com<60)d5++;
if(p[i].score.phy>=90)e1++;
if(p[i].score.phy<90&&p[i].score.phy>=80)e2++;
if(p[i].score.phy<80&&p[i].score.phy>=70)e3++;
if(p[i].score.phy>=60&&p[i].score.phy<70)e4++;
if(p[i].score.phy<60)e5++;
if(p[i].score.ele>=90)f1++;
if(p[i].score.ele<90&&p[i].score.ele>=80)f2++;
if(p[i].score.ele<80&&p[i].score.ele>=70)f3++;
if(p[i].score.ele>=60&&p[i].score.ele<70)f4++;
if(p[i].score.ele<60)f5++;
}
printf("高 數(shù): 優(yōu)秀人數(shù):%d\t優(yōu)秀人數(shù)占比:%.2f\n",b1,b1*1.00/N);
printf("\t良好人數(shù):%d\t良好人數(shù)占比:%.2f\n",b2,b2*1.00/N);
printf("\t中等人數(shù):%d\t中等人數(shù)占比:%.2f\n",b3,b3*1.00/N);
printf("\t及格人數(shù):%d\t及格人數(shù)占比:%.2f\n",b4,b4*1.00/N);
printf("\t不及格人數(shù):%d\t不及格人數(shù)占比:%.2f\n",b5,b5*1.00/N);
printf("英 語: 優(yōu)秀人數(shù):%d\t優(yōu)秀人數(shù)占比:%.2f\n",c1,c1*1.00/N);
printf("\t良好人數(shù):%d\t良好人數(shù)占比:%.2f\n",c2,c2*1.00/N);
printf("\t中等人數(shù):%d\t中等人數(shù)占比:%.2f\n",c3,c3*1.00/N);
printf("\t及格人數(shù):%d\t及格人數(shù)占比:%.2f\n",c4,c4*1.00/N);
printf("\t不及格人數(shù):%d\t不及格人數(shù)占比:%.2f\n",c5,c5*1.00/N);
printf("計(jì)算機(jī): 優(yōu)秀人數(shù):%d\t優(yōu)秀人數(shù)占比:%.2f\n",d1,d1*1.00/N);
printf("\t良好人數(shù):%d\t良好人數(shù)占比:%.2f\n",d2,d2*1.00/N);
printf("\t中等人數(shù):%d\t中等人數(shù)占比:%.2f\n",d3,d3*1.00/N);
printf("\t及格人數(shù):%d\t及格人數(shù)占比:%.2f\n",d4,d4*1.00/N);
printf("\t不及格人數(shù):%d\t不及格人數(shù)占比:%.2f\n",d5,d5*1.00/N);
printf("大 物: 優(yōu)秀人數(shù):%d\t優(yōu)秀人數(shù)占比:%.2f\n",e1,e1*1.00/N);
printf("\t良好人數(shù):%d\t良好人數(shù)占比:%.2f\n",e2,e2*1.00/N);
printf("\t中等人數(shù):%d\t中等人數(shù)占比:%.2f\n",e3,e3*1.00/N);
printf("\t及格人數(shù):%d\t及格人數(shù)占比:%.2f\n",e4,e4*1.00/N);
printf("\t不及格人數(shù):%d\t不及格人數(shù)占比:%.2f\n",e5,e5*1.00/N);
printf("電 路: 優(yōu)秀人數(shù):%d\t優(yōu)秀人數(shù)占比:%.2f\n",f1,f1*1.00/N);
printf("\t良好人數(shù):%d\t良好人數(shù)占比:%.2f\n",f2,f2*1.00/N);
printf("\t中等人數(shù):%d\t中等人數(shù)占比:%.2f\n",f3,f3*1.00)/N;
printf("\t及格人數(shù):%d\t及格人數(shù)占比:%.2f\n",f4,f4*1.00/N);
printf("\t不及格人數(shù):%d\t不及格人數(shù)占比:%.2f\n",f5,f5*1.00/N);
}
int main(void)
{
/* char a[]="1234";
char b[10];
printf("請輸入密碼:\n");
scanf("%s",b);
if(strcmp(b,a)==0)
printf("密碼正確\n");
else{
printf("密碼錯(cuò)誤\n");
exit(1);
}
system("pause");
system("CLS");*/
int n;
AA p[1024];
while(1)
{
menu(&n);
switch(n)
{
case 1:scanfstudent(p);break;
case 2:courseave(p);break;
case 3:studentave(p);break;
case 4:pxnum(p);break;
case 5:px1(p);break;
case 6:px2(p);break;
case 7:chazhaoxuehao(p);break;
case 8:chazhaoname(p);break;
case 9:kandscore(p);break;
case 10:printfstudent(p);break;
case 11:save(p);break;
case 0:printf("謝謝您的使用!\n\n");break;
default:printf("輸入有誤重新輸入!\n\n");break;
}
if(n == 0)
break;
system("pause");
system("CLS");
}
return 0;
}
到了這里,關(guān)于C語言課程設(shè)計(jì)-學(xué)生成績管理系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!