c语言课程设计
制作一个学生成绩管理系统题目描述:
菜单为:
1.排序(按学号)
2.插入(输入一个学生的信息将它插入链表中,假定链表 按学号有序)
3.查找(输入一个学生学号,输出其各科成绩)
4.删除(从链表中按输入的学号删除该学生)
5.统计(若按1,则输入学生的学号统计该生的总分数及平均分;若按2,则输入课程求该门课程的总平均分)
6.存盘(将建立起来的链表以文件的形式存盘)
7.读入(将原来已经存盘的文件读入内存,进行管理)
答案:你好,这是我以前写的一个代码,跟你的类似修改一下就行了:
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define K 5struct students
{
int num;
char name[20];
int sub[K];
};
void main()
{
void print();
void max(struct students stu[N]);
void min(struct students stu[N]);
void average(struct students stu[N]);
void sequence(struct students stu[N]);
void find(struct students stu[N]);
void abc(struct students stu[N]);
struct students stu[N];
int i;
FILE *fp;
print();
if((fp=fopen("grade","r"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
for(i=0;i<N;i++)
fread(&stu[i],sizeof(struct students),1,fp);
max(stu);
min(stu);
average(stu);
sequence(stu);
find(stu);
abc(stu);
fclose(fp);
}
void print()
{
struct students stu[N];
int i,j,yn=0;//1:存在
printf("数据是否已存在?:");
scanf("%d",&yn);
if (yn==1) return;
FILE *fp;
for(i=0;i<N;i++)
{
printf("请输入第%d个学生的基本情况:\n",i+1);
printf("num:");
scanf("%d",&stu[i].num);
j=0;
while(j<i)
{
if(stu[i].num==stu[j].num)
{
printf("该学号已存在,请重新输入!\n");
break;
}
j++;
}
if(j!=i)
{
i--;
continue;
}
printf("name:");
scanf("%s",stu[i].name);
printf("请输入%d科成绩:\n",K);
for(j=0;j<K;j++)
{
printf("请输入第%d科成绩:",j+1);
scanf("%d",&stu[i].sub[j]);
}
}
if((fp=fopen("grade","w"))==NULL)
{
printf("无法打开文件\n");
exit(0);
}
fwrite(stu,sizeof(struct students),N,fp);
fclose(fp);
}
void max(struct students stu[N])
{
int i,m,j,t;
for(i=0;i<K;i++)
{
m=stu[0].sub[i];
t=0;
for(j=1;j<N;j++)
if(m<stu[j].sub[i])
{
m=stu[j].sub[i];
t=j;
}
printf("第%d科成绩最高分为%d是%s\n",i+1,m,stu[t].name);
}
}
void min(struct students stu[N])
{
int i,m,j,t;
for(i=0;i<K;i++)
{
m=stu[0].sub[i];
t=0;
for(j=1;j<N;j++)
if(m>stu[j].sub[i])
{
m=stu[j].sub[i];
t=j;
}
printf("第%d科成绩最低分为%d是%s\n",i+1,m,stu[t].name);
}
}
void average(struct students stu[N])
{
int i,j;
int s[K];
for(i=0;i<K;i++)
{
s[i]=0;
for(j=0;j<N;j++)
s[i]+=stu[j].sub[i];
s[i]=s[i]/N;
printf("第%d科成绩平均分为%d\n",i+1,s[i]);
}
}
void sequence(struct students stu[N])
{
int i,j,t,a;
printf("输入科目代号(-1为结束):");
scanf("%d",&a);
while (a!=-1)
{
for(i=0;i<N;i++)
for(j=0;j<N-1;j++)
if(stu[j].sub[a-1]<stu[j+1].sub[a-1])
{
t=stu[j].sub[a-1];
stu[j].sub[a-1]=stu[j+1].sub[a-1];
stu[j+1].sub[a-1]=t;
}
if(a<=K)
{
printf("第%d科成绩从大到小的排序如下:\n",a);
for(i=0;i<N;i++)
printf("%10s %d\n",stu[i].name,stu[i].sub[a-1]);
}
else
printf("该科目代号不存在!\n");
printf("请再输入科目代号(-1为结束):");
scanf("%d",&a);
}
}
void find(struct students stu[N])
{
int i,j,b;
printf("输入要查询的学号(-1为结束):");
scanf("%d",&b);
while (b!=-1)
{
for(i=0;i<N;i++)
if(b==stu[i].num )
{
printf("%s:",stu[i].name );
for(j=0;j<K;j++)
printf("%4d",stu[i].sub[j]);
printf("\n");
break;
}
if(i==N)
printf("该学号不存在\n");
printf("请输入下一个要查询的学号(-1为结束):");
scanf("%d",&b);
}
}
void abc(struct students stu[N])
{
int i,j,c;
int g[K][5]={{0}};
for(i=0;i<K;i++)
{
for(j=0;j<N;j++)
{
c=stu[j].sub[i]/10;
switch(c)
{
case 10:g[i][0]++;break;
case 9:g[i][0]++;break;
case 8:g[i][1]++;break;
case 7:g[i][2]++;break;
case 6:g[i][3]++;break;
default:g[i][4]++;
}
}
printf("第%d科中各分数段的人数如下:\n",i+1);
for(j=0;j<4;j++)
printf("%d~%d的人数为%4d\n",(10-j-1)*10,(10-j)*10,g[i][j]);
printf("0~60的人数为%4d\n",g[i][4]);
}
}