C语言课程设计学生成绩管理系统完美运行代码.docx
《C语言课程设计学生成绩管理系统完美运行代码.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生成绩管理系统完美运行代码.docx(21页珍藏版)》请在冰豆网上搜索。
![C语言课程设计学生成绩管理系统完美运行代码.docx](https://file1.bdocx.com/fileroot1/2022-11/24/fffaae8b-8a08-4fe7-a99c-7b5bf055d3a9/fffaae8b-8a08-4fe7-a99c-7b5bf055d3a91.gif)
C语言课程设计学生成绩管理系统完美运行代码
//所包含的头文件
#include
#include
#include//标准库函数
#include//字符操作函数
#include//控制台输入输出函数
//定义系统中所需要用到的结构体类型
struct_birthday
{
intyear;
intmonth;
intday;
};
struct_score
{
floatenglish;
floatmath;
floatmcu;
floattotal;
};
typedefstruct_birthdayBirthday;
typedefstruct_scoreScore;
struct_student
{
charno[15];
charname[20];
charsex[10];
Birthdaybirth;
Scoresco;
};
typedefstruct_studentStudent;
//函数说明
voidMenu();
voidRun();
voidInti();
voidPrint(Student*p);
voidPrintTablHeader();
voidPrintAll(Student*a,intn);
intSearchByNo(Student*a,intn,charno[]);
voidSearchByname(Student*a,intn,charname[]);
voidSortByTotal(Student*a,intn);
voidSortByMcu(Student*a,intn);
voidSortByMath(Student*a,intn);
voidSortByEnglish(Student*a,intn);
voidSort(Student*a,intn,intcourse);
intDeleteByNo(Student*a,intn,charno[]);
voidsave(Student*a,intn);
voidenglish(Studentstu[],intn);
voidmath(Studentstu[],intn);
voidmcu(Studentstu[],intn);
voidenglishaver(Studentstu[],intn);
voidmathaver(Studentstu[],intn);
voidmcuaver(Studentstu[],intn);
voidtotalaver(Studentstu[],intn);
intload(Studentt[]);
//符号常量和变量说明
#defineN100//学生最大人数
intlength=0;//学生实际人数
intitem;
charch;
#defineENGLISH0//英语课程
#defineMATH1//数学课程
#defineMCU2//计算机课程
#defineTOTAL3//总分
Studentstu[N]=//学生结构体数组,全局变量
{
{"10","王安","男",{1991,2,14},{15,55,31}},
{"11","张羽","女",{1992,9,22},{92,83,58}},
{"12","李明","男",{1992,2,18},{60,65,72}},
{"13","李江","男",{1992,12,14},{100,50,78}},
{"14","李楠","男",{1992,6,29},{90,52,76}},
{"15","张萍","女",{1991,8,9},{57,78,92}},
{"16","李文","女",{1992,10,4},{100,80,60}},
{"17","张雨","女",{1991,12,14},{60,90,80}}
};
//6.2主函数及各功能函数
voidInit()
{
inti;
length=8;
for(i=0;i{
stu[i].sco.total=stu[i].sco.english+stu[i].sco.math+stu[i].sco.mcu;
}
}
voidMenu()
{
printf("==================欢迎登录学生成绩管理系统==============\n");
printf("************************************\n");
printf("*1--按学号查询学生信息*\n");
printf("*2--按姓名查询学生信息*\n");
printf("*3--查询所有学生信息*\n");
printf("*4--根据单科成绩进行排序*\n");
printf("*5--根据总分进行排序*\n");
printf("*6--添加学生信息*\n");
printf("*7--删除学生信息*\n");
printf("*8--修改学生信息*\n");
printf("*9--保存学生信息文件*\n");
printf("*10--读入学生信息文件*\n");
printf("*11--查询不及格学生信息*\n");
printf("*12--查询平均成绩*\n");
printf("*0--退出*\n");
printf("************************************\n");
printf("请选择:
");
}
voidPrint(Student*p)
{
printf("%s\t%s\t%s\t%d-%d-%d\t%3.1f\t%3.1f\t%3.1f\t%3.1f",
p->no,p->name,p->sex,
p->birth.year,p->birth.month,p->birth.day,
p->sco.english,p->sco.math,p->sco.mcu,p->sco.total);
}
voidPrintTablHeader()
{
printf("学号\t姓名\t性别\t生日\t\t英语\t数学\t计算机\t总分\n");
}
voidPrintAll(Student*a,intn)
{
inti;
printf("目前学生总人数为:
%d\n",length);
PrintTablHeader();
for(i=0;i{Print(&a[i]);//调用Printf函数输出第i个学生信息
printf("\n");
}
}
intSearchByNo(Student*a,intn,charno[])//按学号查找学生成绩信息
{
intp=-1;
inti;
for(i=0;i{
if(strcmp(a[i].no,no)==0)
{
p=i;
break;
}
}
returnp;
}
voidSearchByname(Student*a,intn,charname[])//按姓名查找学生成绩信息
{
inti;
intflag=0;
PrintTablHeader();
for(i=0;i{
if(strcmp(a[i].name,name)==0)
{
flag=1;
Print(&a[i]);
printf("\n");
}
}
if(flag==0)printf("查询失败!
");
}
voidSortByEnglish(Student*a,intn)//根据英语成绩进行排序
{
inti,j;//循环变量
floatmaxval;//用于临时保存最大值
intmaxpos;//用于临时保存最大值的下标
Studenttemp;//临时变量
//总共需要N-1次选择和交换
for(i=0;i{
maxval=a[i].sco.english;
maxpos=i;
//在无序区寻找最大值
for(j=i;j{
if(a[j].sco.english>maxval)
{
maxval=a[j].sco.english;
maxpos=j;
}
}
if(maxpos!
=-1)
{
temp=a[maxpos];
a[maxpos]=a[i];
a[i]=temp;
}
}
}
voidSortByMath(Student*a,intn)//根据数学成绩进行排序
{
inti,j;//循环变量
floatmaxval;//用于临时保存最大值
intmaxpos;//用于临时保存最大值的下标
Studenttemp;//临时变量
//总共需要N-1次选择和交换
for(i=0;i{
maxval=a[i].sco.math;
maxpos=i;
//在无序区寻找最大值
for(j=i;j{
if(a[j].sco.math>maxval)
{
maxval=a[j].sco.math;
maxpos=j;
}
}
if(maxpos!
=i)
{
temp=a[maxpos];
a[maxpos]=a[i];
a[i]=temp;
}
}
}
voidSortByMcu(Student*a,intn)//根据计算机成绩进行排序
{
inti,j;//循环变量
floatmaxval;//用于临时保存最大值
intmaxpos;//用于临时保存最大值的下标
Studenttemp;//临时变量
//总共需要N-1次选择和交换
for(i=0;i{
maxval=a[i].sco.mcu;
maxpos=i;
//在无序区寻找最大值
for(j=i;j{
if(a[j].sco.mcu>maxval)
{
maxval=a[j].sco.mcu;
maxpos=j;
}
}
if(maxpos!
=-1)
{
temp=a[maxpos];
a[maxpos]=a[i];
a[i]=temp;
}
}
}
voidSortByTotal(Student*a,intn)//根据学生总成绩进行排序
{
inti,j;//循环变量
floatmaxval;//用于临时保存最大值
intmaxpos;//用于临时保存最大值的下标
Studenttemp;//临时变量
//总共需要N-1次选择和交换
for(i=0;i{
maxval=a[i].sco.total;
maxpos=i;
//在无序区寻找最大值
for(j=i;j{
if(a[j].sco.total>maxval)
{
maxval=a[j].sco.total;
maxpos=j;
}
}
if(maxpos!
=-1)
{
temp=a[maxpos];
a[maxpos]=a[i];
a[i]=temp;
}
}
}
voidenglish(Studentstu[],intn)//查询英语成绩不及格学生信息
{
inti=0;
for(i=0;i{
if(stu[i].sco.english<60)
printf("\t学生证号:
%-15s姓名:
%-15s英语分数:
%-15g\n\n",stu[i].no,stu[i].name,stu[i].sco.english);
}
}
voidmath(Studentstu[],intn)//查询数学成绩不及格学生信息
{
inti=0;
for(i=0;i{
if(stu[i].sco.math<60)
printf("\t学生证号:
%-15s姓名:
%-15s数学分数:
%-15g\n\n",stu[i].no,stu[i].name,stu[i].sco.math);
}
}
voidmcu(Studentstu[],intn)//查询计算机成绩不及格学生信息
{
inti=0;
for(i=0;i{
if(stu[i].sco.mcu<60)
printf("\t学生证号:
%-15s姓名:
%-15s计算机分数:
%-15g\n\n",stu[i].no,stu[i].name,stu[i].sco.mcu);
}
}
voidSort(Student*a,intn,intcourse)
{
switch(course)
{
caseENGLISH:
SortByEnglish(a,n);
break;
caseMATH:
SortByMath(a,n);
break;
caseMCU:
SortByMcu(a,n);
break;
caseTOTAL:
SortByTotal(a,n);
break;
default:
SortByTotal(a,n);
break;
}
}
/*增加学生信息*/
intAppend(Student*a,intn)
{
intpos;
if(n>=N)
{
returnn;
}
while
(1)
{
printf("请输入学号:
");
scanf("%s",&a[n].no);
pos=SearchByNo(a,n,a[n].no);
if(pos!
=-1)printf("学号已经存在,请重新输入!
\n");
elsebreak;
}
printf("请输入姓名:
");
scanf("%s",&a[n].name);
printf("请输入性别:
");
scanf("%s",&a[n].sex);
printf("请输入出生年份:
");
scanf("%d",&a[n].birth.year);
printf("请输入出生月份:
");
scanf("%d",&a[n].birth.month);
printf("请输入出生日期:
");
scanf("%d",&a[n].birth.day);
printf("请输入英语成绩:
");
scanf("%f",&a[n].sco.english);
printf("请输入数学成绩:
");
scanf("%f",&a[n].sco.math);
printf("请输入计算机成绩:
");
scanf("%f",&a[n].sco.mcu);
a[n].sco.total=a[n].sco.english+a[n].sco.math+a[n].sco.mcu;
n++;
returnn;
}
intDeleteByNo(Student*a,intn,charno[])
{
intpos=SearchByNo(a,n,no);
inti;
if(pos==-1)
{
printf("学号不存在,请重新输入!
\n");
returnn;//减少学生人数,并返回该值
}
if(pos==n-1)
{
n--;
returnn;
}
for(i=pos;i{
a[i]=a[i+1];
}
n--;
returnn;//减少学生人数,并返回该值
}
/*修改函数*/
intModifyByNo(Student*a,intn,charno[])
{
intpos=SearchByNo(a,n,no);
intp;
charsno[15];
if(pos==-1)
{
printf("该学生不存在!
\n");
returnn;
}
while
(1)
{
printf("请输入学号:
");
scanf("%s",&sno);
p=SearchByNo(a,n,sno);
if(p==-1||p==pos)//两种情况,1.下表不存在2.不修改下表
{
strcpy(a[pos].no,sno);
break;
}
elseprintf("学生学号已存在,请重新输入!
");
}
printf("请输入姓名:
");
scanf("%s",&a[pos].name);
printf("请输入性别:
");
scanf("%s",&a[pos].sex);
printf("请输入出生年份:
");
scanf("%d",&a[pos].birth.year);
printf("请输入出生月份:
");
scanf("%d",&a[pos].birth.month);
printf("请输入出生日期:
");
scanf("%d",&a[pos].birth.day);
printf("请输入英语成绩:
");
scanf("%f",&a[pos].sco.english);
printf("请输入数学成绩:
");
scanf("%f",&a[pos].sco.math);
printf("请输入计算机成绩:
");
scanf("%f",&a[pos].sco.mcu);
returnn;
}
voidsave(Student*a,intn)//保存函数
{
inti;
FILE*fp;
if((fp=fopen("studentinformation.txt","wb"))==NULL)
{
printf("不能打开文件!
\n");
exit
(1);
}
printf("\n保存文件\n");
fprintf(fp,"%d",n);//将记录数写入文件
fprintf(fp,"\r\n");//将换行符号写入文件
for(i=0;i{fprintf(fp,"%s\t%s\t%s\t%d-%d-%d\t%3.1f\t%3.1f\t%3.1f\t%3.1f",a[i].no,a[i].name,a[i].sex,a[i].birth.year,a[i].birth.month,a[i].birth.day,a[i].sco.english,a[i].sco.math,a[i].sco.mcu,a[i].sco.total);//写入记录
fprintf(fp,"\r\n");//将换行符号写入文件
}
fclose(fp);
printf("成功保存文件!
\n");
}
//**************文件的读入*****************//
intload(Studentt[])
{
inti,n;
FILE*fp;
if((fp=fopen("studentinformation.txt","rb+"))==NULL)//打开文件
{
printf("不能打开文件!
\n");
exit
(1);
}
fscanf(fp,"%d",&n);//读入记录数
for(i=0;i{fread(fp,"%s\t%s\t%s\t%d%d%d\t%3.1f\t%f\t%f\t%f",t[i].no,t[i].name,t[i].sex,&t[i].birth.year,&t[i].birth.month,&t[i].birth.day,&t[i].sco.english,&t[i].sco.math,&t[i].sco.mcu,&t[i].sco.total);//读入记录
}
fclose(fp);
printf("成功读入记录!
");
returnn;
}
voidenglishaver(Studentstu[],intn)//英语平均成绩
{
inti;
doubleaver1,sum1=0;
for(i=0;i{
sum1+=stu[i].sco.english;
}
aver1=1.0*sum1/n;
printf("英语平均分:
%.2f\n\n",aver1);
}
voidmathaver(Studentstu[],intn)//数学平均成绩
{
inti;
doubleaver1,sum1=0;
for(i=0;i{
sum1=sum1+stu[i].sco.math;
}
aver1=sum1/n;
printf("数学平均分:
%.2f\n\n",aver1);
}
voidmcuaver(Studentstu[],intn)//计算机平均成绩
{
inti;
doubleaver1,sum1=0;
for(i=0;i{
sum1+=stu[i].sco.mcu;
}
aver1=1.0*sum1/n;
printf("计算机平均分:
%.2f\n\n",aver1);
}
voidtotalaver(Studentstu[],intn)//总平均成绩
{
inti;
doubleaver1,sum;
for(i=0;i{
sum=stu[i].sco.mcu+stu[i].sco.english+stu[i