需求分析:
1.设计题目:学生成绩管理系统
2.系统功能需求分析:实现对学生各科成绩总分及平均分的排序,和成绩的查找
概要设计
1.功能模块图
详细设计
1.流程图
测试结果:列出所有功能的运行界面,并作文字说明。
1.录入成绩:录入3个人的学号和各科成绩
2.每门课程的总分平均分;计算各科的平均分
3.学生总分:计算3个学生的总分
4.学生总分的排序由高到低:对3个学生成绩进行排序
5.按学号由小到大排出成绩表;按学号排成绩
6.按姓名的字典顺序排出成绩表:按姓名顺序排成绩
7.学号查询学生排名和考试成绩:通过学生学号查找排名和各科成绩
8.按姓名查询学生排名及其考试成绩;通过输入姓名查找排名和成绩
9.每门课程分别统计每个类别的人数以及所占百分比;看各科评级人数和所占百分比
10.输出学生的学号,姓名考试成绩,总分和平均分;输出学生各项数据
11.将数据存入文件:保存数据文章来源:https://www.toymoban.com/news/detail-512101.html
文章来源地址https://www.toymoban.com/news/detail-512101.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3 //定义学生人数
typedef struct
{
float mat;//高数
float eng;//英语
float com;//计算机 无名结构体的变量定义
float phy;//大物
float ele;//电路
}SUB; //科目
typedef struct Student{
char xuehao[100];//学号
char name[100];//姓名
char sex[100];//性别 无名结构体的变量定义
SUB score;//科目分数
float num;// 总分
float ave;//平均分
}AA;//信息
void save(AA *p){ //文件存入
int i;
FILE *fp;//定义一个指针变量
fp=fopen("student.txt","w"); //打开以上创建的”student" 文件,"w"表示“只写”
if((fp=fopen("student.txt","w"))==NULL)//检查文件是否正确打开,即:判断 fopen()的函数值 是否为空指针NULL
{
printf("cannot open file\n");//打开文件的操作出现错误, fopen()函数的返回值为空指针NULL,即:该文件打开失败
exit(0); //关闭所有打开的文件,终止正在执行的程序
}
for(i=0;i<N;i++)//控制循环3次
{
fprintf(fp,"%s\t",p[i].xuehao);//输出学号
fprintf(fp,"%s\t",p[i].name);//姓名
fprintf(fp,"%s\t",p[i].sex);//性别
fprintf(fp,"%.2f\t",p[i].score.mat);//高数
fprintf(fp,"%.2f\t",p[i].score.eng);//英语
fprintf(fp,"%.2f\t",p[i].score.com);//计算机
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);//关闭文件
}
void menu(int *n)//主菜单
{
printf("\t\t\t\t*************************************************\n");
printf("\t\t\t\t\t1.手动录入数据\n");//手动录入数据
printf("\t\t\t\t\t2.计算每门课程的总分和平均分 \n");//计算每门课程的总分和平均分
printf("\t\t\t\t\t3.计算每个学生的总分和平均分 \n");//计算每个学生的总分和平均分
printf("\t\t\t\t\t4.按学生的总分由高到低排出名次表\n");//按学生的总分由高到低排出名次表
printf("\t\t\t\t\t5.按学号由小到大排出成绩表\n");//按学号由小到大排出成绩表
printf("\t\t\t\t\t6.按姓名的字典顺序排出成绩表 \n");//按姓名的字典顺序排出成绩表
printf("\t\t\t\t\t7.按学号查询学生排名及其考试成绩\n");//按学号查询学生排名及其考试成绩
printf("\t\t\t\t\t8.按姓名查询学生排名及其考试成绩 \n");//按姓名查询学生排名及其考试成绩
printf("\t\t\t\t\t9.对每门课程分别统计每个类别的人数以及所占百分比\n");/*对每门课程分别统计每个类别的人数以及所占百分比*/
printf("\t\t\t\t\t10.输出每个学生的学号,姓名,各科考试成绩,总分和平均分 \n");//输出每个学生的学号,姓名,各科考试成绩,总分和平均分
printf("\t\t\t\t\t11.将数据存入文件\n");//将数据存入文件
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++)//控制人数为3
{
printf("请输入第%d学生的信息:\n",i+1);
printf("学号:");
scanf("%s",p[i].xuehao);
printf("姓名:");
scanf("%s",p[i].name);
printf("性别:");
scanf("%s",p[i].sex);
printf("高数得分:");
scanf("%f",&p[i].score.mat);
printf("英语得分:");
scanf("%f",&p[i].score.eng);
printf("计算机得分:");
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); //计算总成绩
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; //计算总平均分
printf("平均分:%.2f",p[i].ave);
}
}
void studentave(AA *p)//计算并输出总分、平均分
{
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); //计算个人总分
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("第%d个学生的总分:%.2f\t\t平均分:%.2f",i+1,p[i].num,p[i].ave);//输出
printf("\n");
}
}
void printfstudent(AA*p)//汇总个人成绩
{
int i;
printf("学号\t\t姓名\t性别\t高数\t英语\t计算机\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)//查找学号
{
int j;
int flat = 0;
char num[100];
printf("请输入要查找的学号:");
scanf("%s",num);
for(j=0;j<N;j++)
{
if(strcmp(p[j].xuehao,num)==0)
{
flat++;
break;
}
}
if(!flat)
{
printf("学号输入有误!\n");
}
else{
printf("学号:%s,姓名:%s,性别:%s,高数:%.2f,英语:%.2f,计算机:%.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("学号:%s,姓名:%s,性别:%s,高数:%.2f,英语:%.2f,计算机:%.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("高数总分:%.2f\t英语总分:%.2f\t计算机总分:%.2f\t大物总分:%.2f\t电路总分:%.2f\n\n",sum1,sum2,sum3,sum4,sum5);
printf("高数平均分:%.2f\t英语平均分:%.2f\t计算机平均分:%.2f\t大物平均分:%.2f\t电路平均分:%.2f\n",ave1,ave2,ave3,ave4,ave5);
}
void kandscore(AA *p)//成绩等级
{
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("高 数: 优秀人数:%d\t优秀人数占比:%.2f\n",b1,b1*1.00/N);
printf("\t良好人数:%d\t良好人数占比:%.2f\n",b2,b2*1.00/N);
printf("\t中等人数:%d\t中等人数占比:%.2f\n",b3,b3*1.00/N);
printf("\t及格人数:%d\t及格人数占比:%.2f\n",b4,b4*1.00/N);
printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",b5,b5*1.00/N);
printf("英 语: 优秀人数:%d\t优秀人数占比:%.2f\n",c1,c1*1.00/N);
printf("\t良好人数:%d\t良好人数占比:%.2f\n",c2,c2*1.00/N);
printf("\t中等人数:%d\t中等人数占比:%.2f\n",c3,c3*1.00/N);
printf("\t及格人数:%d\t及格人数占比:%.2f\n",c4,c4*1.00/N);
printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",c5,c5*1.00/N);
printf("计算机: 优秀人数:%d\t优秀人数占比:%.2f\n",d1,d1*1.00/N);
printf("\t良好人数:%d\t良好人数占比:%.2f\n",d2,d2*1.00/N);
printf("\t中等人数:%d\t中等人数占比:%.2f\n",d3,d3*1.00/N);
printf("\t及格人数:%d\t及格人数占比:%.2f\n",d4,d4*1.00/N);
printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",d5,d5*1.00/N);
printf("大 物: 优秀人数:%d\t优秀人数占比:%.2f\n",e1,e1*1.00/N);
printf("\t良好人数:%d\t良好人数占比:%.2f\n",e2,e2*1.00/N);
printf("\t中等人数:%d\t中等人数占比:%.2f\n",e3,e3*1.00/N);
printf("\t及格人数:%d\t及格人数占比:%.2f\n",e4,e4*1.00/N);
printf("\t不及格人数:%d\t不及格人数占比:%.2f\n",e5,e5*1.00/N);
printf("电 路: 优秀人数:%d\t优秀人数占比:%.2f\n",f1,f1*1.00/N);
printf("\t良好人数:%d\t良好人数占比:%.2f\n",f2,f2*1.00/N);
printf("\t中等人数:%d\t中等人数占比:%.2f\n",f3,f3*1.00)/N;
printf("\t及格人数:%d\t及格人数占比:%.2f\n",f4,f4*1.00/N);
printf("\t不及格人数:%d\t不及格人数占比:%.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("密码错误\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;
}
到了这里,关于C语言课程设计-学生成绩管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!