C语言实训-学生成绩管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
#include
#include
#define SIZE 100
typedef struct student
{
long num;
char name[10];
int score[3];
}STU;
int Menu(void);
void Read_data(STU stu[],int n,int a,int b);
void Read_data1(STU stu[],int n,int a,int b);
void Total_mark(STU stu[],int n,int a,int b);
void Sortbynum(STU stu[],int n);
void Sortbyname(STU stu[],int n);
void Count_pass(STU stu[],int n);
void Count_average(STU stu[],int n);
void Show_data(STU stu[],int n);
void Write_data(STU stu[],int n);
int main()
{
STU stu[SIZE];
int n,a,b;
char ch;
int oh;
printf("\t\t********************************************\n");
printf("\t\t\t* 欢迎使用 * \n");
printf("\t\t\t* 学生试卷分数统计系统 * \n");
printf("\t\t********************************************\n");
while (1)
{
ch = Menu();
switch (ch)
{
case 1: printf("请输入学生人数n(n<=%d):", SIZE);
scanf("%d", &n);
printf("请输入学生平时成绩与期末成绩所占总评成绩的的比例(用整数表示,满分100分):\n"); scanf("%d%d",&a,&b);
printf("以下有两种输入试卷分数的方式:\n***1.手动输入试卷分数\t2.从student.txt文件中导入试卷分数***\n");
scanf("%d",&oh);
switch (oh)
{
case 1:
Read_data(stu,n,a,b);
break;
case 2:
Read_data1(stu,n,a,b);
break;
default:printf("输入菜单序号错误!");
}
break;
case 2:Total_mark(stu,n,a,b);
break;
case 3:Sortbynum(stu,n);
break;
case 4:Sortbyname(stu,n);
break;
case 5: Count_pass(stu,n);
break;
case 6: Count_average(stu,n);
break;
case 7:Show_data(stu,n);
break;
case 8:Write_data(stu,n);
break;
case 0:
printf("\t\t********************************************\n");
printf("\t\t\t* 感谢使用 * \n");
printf("\t\t\t* 学生试卷分数统计系统 * \n");
printf("\t\t********************************************\n");
exit(0);
default:printf("输入菜单序号错误!");
}
}
return 0;
}

/* 函数功能:显示菜单并获得用户键盘输入的选项 */
int Menu(void)
{
int itemSelected;
printf("\n【菜单】\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("0.退出\n");
printf("请输入你的选择:");
scanf("%d", &itemSelected); /* 读入用户输入 */
return itemSelected;
}
/* 函数功能:手动输入分数 */
void Read_data(STU stu[],int n,int a,int b)
{
int i=0;
printf("请输入学生的学号、姓名、平时成绩和期末成绩:\n");
for(i=0;i{
scanf("%ld%s%d%d",&stu[i].num,&stu[i].name,&stu[i].score[0],&stu[i].score[1]);
stu[i].score[2]=stu[i].score[0]*a/100+stu[i].sco

re[1]*b/100;
}
}
/* 函数功能:从文本student.txt中导入试卷分数 */
void Read_data1(STU stu[],int n,int a,int b)
{
int i;
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("打开文件student.txt失败!\n");
exit(0);
}
for(i=0;!feof(fp);i++)
{
fscanf(fp,"%ld",&stu[i].num);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%d",&stu[i].score[0]);
fscanf(fp,"%d",&stu[i].score[1]);
}
fclose(fp);
for(i=0;i{
stu[i].score[2]=stu[i].score[0]*a/100+stu[i].score[1]*b/100;
}
}
/* 函数功能:计算学生试卷分数的总评成绩 */
void Total_mark(STU stu[],int n,int a,int b)
{
int i;
for(i=0;i{
stu[i].score[2]=stu[i].score[0]*a/100+stu[i].score[1]*b/100;
printf("学生:%ld\t姓名:%s\t总评成绩:%d\n",stu[i].num,stu[i].name,stu[i].score[2]);
}
}
/* 函数功能:按学号查询学生试卷的总评成绩 */
void Sortbynum(STU stu[],int n)
{
int number,i;
printf("请输入要查找的学生学号:");
scanf("%d",&number);
for(i=0;i{
if(stu[i].num==number)
{
printf("学号:%ld\t姓名:%s\t平时成绩:%d\t期末成绩:%d\t总评成绩:%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
return;
}
}
printf("抱歉,没有找到!\n");
}
/* 函数功能:按姓名查询学生试卷的总评成绩 */
void Sortbyname(STU stu[],int n)
{
char named[10];
int i;
printf("请输入要查找的学生姓名:");
scanf("%s",named);
for(i=0;i{
if(strcmp(named,stu[i].name)==0)
{
printf("学号:%ld\t姓名:%s\t平时成绩:%d\t期末成绩:%d\t总评成绩:%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
return;
}
}
printf("抱歉,没有找到!\n");
}
/* 函数功能:计算全班学生总评成绩的及格率和优秀率,并按优良中差输出学生人数 */
void Count_pass(STU stu[],int n)
{
int i,pass_num,t[4];
float passrate;
memset(t,0,sizeof(t));
for(i=0;i{
if(stu[i].score[2]<60) t[0]++;
else if(stu[i].score[2]<=75) t[1]++;
else if(stu[i].score[2]<=85) t[2]++;
else if(stu[i].score[2]<=100) t[3]++;
}
pass_num=t[1]+t[2]+t[3];
passrate=(float)(t[1]+t[2]+t[3])/n;
printf("及格人数:%d\n",pass_num);
printf("优:%d\t良:%d\t中:%d\t差:%d\n",t[3],t[2],t[1],t[0]);
printf("总评成绩及格率:%.2f\n",passrate);
printf("总评成绩优秀率:%.2f\n",(float)t[3]/n);
}
/* 函数功能:计算学生总评成绩的平均分和标准差 */
void Count_average(STU stu[],int n)
{
int i;
double sum=0,aver,temp=0,standard;
for(i=0;i{
sum=stu[i].score[2]+sum;
}
aver=(float)sum/n;
for(i=0;i{
temp=(stu[i].score[2]-aver)*(stu[i].score[2]-aver)+temp;

}

standard=sqrt(temp/n);
printf("总评成绩平均分:%.2f\t总评成绩标准差:%.2lf\n",aver,standard);
}
/* 函数功能:输出全班学生的所有成绩 */


void Show_data(STU stu[],int n)
{
int i;
for(i=0;i{
printf("学号:%ld\t姓名:%s\t平时成绩:%d\t期末成绩:%d\t总评成绩:%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
}
}
/* 函数功能:将学生所有成绩的列表导出到文本score.txt中 */
void Write_data(STU stu[],int n)
{
FILE *fp;
int i;
if((fp=fopen("score.txt","w"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
fprintf(fp,"以下各项分别对应学号、姓名、平时成绩、期末成绩和总评成绩:\n");
for(i=0;i{
fprintf(fp,"%ld\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

}
fclose (fp);
}

相关文档
最新文档