资源描述
程序说明:有N个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)主菜单 学生成绩管理系统 1、 成绩录入 2、 成绩查询 3、 成绩统计 4、 退 出 (2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式). v 按学号查询学生记录。 v 查询不及格学生的记录。 ③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。 (3)结构体数组: #define N 30 struct student {int num; /* 定义学号*/
char name[20]; /* 定义姓名*/
float score[3]; /* 定义存贮三门课成绩的数组*/
float average; /* 定义平均成绩*/
};struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/
. #include<stdio.h>
#include〈stdlib.h>
#include〈string。h>
struct student
{ int num; char name[20];
float score[4];
float average;
}
stu[10000];
long t,max;
bool unpass[1000];
FILE *fstu=fopen("stud.dat","at+");
int init()
{
int no,i;
float s[4],ave;
char nam[20];
while (!feof(fstu))
{
fscanf(fstu,”%d”,&no);
fscanf(fstu,”%s",nam);
fscanf(fstu,"%f%f%f%f",&s[1],&s[2],&s[3],&ave);
if (no>max)
max=no;
stu[no].num=no;
strcpy(stu[no].name,nam);
unpass[no]=false; f
or (i=1;i〈=3;i++)
{
stu[no].score[i]=s[i];
if (s[i]〈60)
unpass[no]=true;
}
stu[no].average=ave;
}
}
int stuinsert()
{
int no,i;
float s[3],sum;
char nam[20],cha;
loop:printf(”请输入学生的学号、姓名及三门课的成绩 \n");
scanf(”%d”,&no); scanf("%s”,nam);
scanf(”%f%f%f/n”,&s[1],&s[2],&s[3]);
if (no>max)
max=no;
stu[no].num=no;
sum=0。0;
strcpy(stu[no].name,nam);
unpass[no]=false;
for (i=1;i〈=3;i++)
{
stu[no]。score[i]=s[i];
sum=sum+s[i];
if (s[i]<60)
unpass[no]=true;
}
stu[no].average=sum/3。0;
fprintf(fstu,”\n”);
fprintf(fstu,"%d %s %f %f %f %f\n",stu[no]。num,stu[no]。name,stu[no]。score[1],stu[no].score[2],stu[no]。score[3],stu[no].average);
}
int find(int x)
{
long i,no;
switch (x)
{
case 1:printf(”请输入学号:");
scanf("%d”,&no);
printf(”%d %s %f %f %f %f\n",stu[no]。num,stu[no]。name,stu[no]。score[1], stu[no].score[2],stu[no]。score[3],stu[no]。average);
break;
case 2:for (i=1;i〈=max;i++) if (unpass[i]) printf(”%d %s %f %f %f %f\n",stu[i]。num,stu[i]。name,stu[i]。score[1],stu[i].score[2],stu[i].score[3],stu[i]。average);
break;
}
}
int sort(int x)
{
extern int headprint(int x);
student so[1000];
int i,j,k,n;
switch (x)
{
case 1:for (i=1;i〈=max;i++) if (stu[i]。num==i) printf("%d %s %f\n”,i,stu[i]。name,stu[i]。average);
break;
case 2:n=0;
for (i=1;i<=max;i++)
{
j=1; if (stu[i]。num==i)
while ((so[j].average>stu[i].average)&&(j〈=n))
j++; n++;
for (k=n;k>=j;k——) so[k]=so[k—1]; so[j]=stu[i];
}
for (i=1;i<=n;i++)
printf("%d %s %f %f %f %f\n”,so[i].num,so[i]。name,so[i].score[1],so[i]。score[2],so[i]。score[3],so[i].average); break; case 3:headprint(4);
}
}
int othersort(int x)
{
extern int headprint(int x);
student so[1000];
int i,j,k,n,q; q=0;
switch (x)
{
case 1:if (q==0) q=1;
case 2:if (q==0) q=2;
case 3:if (q==0) q=3;
n=0;
for (i=1;i<=max;i++)
{
j=1;
if (stu[i]。num==i)
while ((so[j]。score[q]〉stu[i].score[q])&&(j〈=n))
j++;
n++;
for (k=n;k〉=j;k——)
so[k]=so[k—1];
so[j]=stu[i];
}
for (i=1;i〈=n;i++)
printf("%d %s %f\n”,so[i]。num,so[i].name,so[i]。score[q]);
break;
}
}
int select(int x)
{
extern int headprint(int x);
int p;
switch (x)
{
case 1:scanf("%d”,&p);
switch (p)
{
case 1:stuinsert();
break;
case 2:headprint(2);
break;
case 3:headprint(3);
break;
case 4:t=0;
break;
}
break;
case 2:scanf("%d”,&p);
find(p);
break;
case 3:scanf(”%d”,&p);
sort(p);
break;
case 4:scanf("%d”,&p);
othersort(p);
break;
}
}
int headprint(int x)
{
switch (x)
{ case 1:printf("学生成绩管理系统\n”);
printf(”1、 成绩录入\n"); printf("2、 成绩查询\n");
printf("3、 成绩统计\n");
printf(”4、 退 出\n”);
select(x);
break;
case 2:printf(”1、 按学号查询学生记录\n");
printf("2、 查询不及格学生的记录\n");
select(x);
break;
case 3:printf("1、 计算学生的平均分\n");
printf(”2、 根据学生的平均分高低,对学生的数据进行排序后输出\n");
printf(”3、 对学生单科成绩排序,输出学生姓名与该科成绩\n”);
select(x);
break;
case 4:printf(”1、 第一科\n"); printf("2、 第二科\n");
printf(”3、 第三科\n"); select(x); break;;
}
}
int main()
{ max=0; t=1;
init();
loop:headprint(1);
if (t!=0)
goto loop;
}
6
展开阅读全文