很简单的代码 管理员和学生
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int N, M;
float p;
char kecheng[10][20];
struct student
{
char num[20];
char name[20];
char sex[20];
float score[50]; // 分数,依次是各科的
float ave;
float zongfen;
};
//代码注释
void zengjia(struct student *stu);//增加学生信息
void save(struct student * stu);//保存学生信息
struct student * input(struct student *stu);
//从键盘输入包括学号、姓名、各门课程、成绩
void output(struct student *stu);//输出信息
void chaxun(struct student * stu);//查询学生信息
void gengxin(struct student * stu);//更新学生信息
void shanchu(struct student * stu);//删除学生信息
float average(struct student * stu);//求平均分
void statistic(struct student *stu);
//显示各科学生总分、平均分、最高、最低、及格率以及各科分数段人数
int main()//主函数
{
struct student *pArr = NULL;
void zengjia(struct student *stu);
void save(struct student * stu);
struct student * input(struct student *stu);
void output(struct student *stu);
void chaxun(struct student * stu);
void gengxin(struct student * stu);
void shanchu(struct student * stu);
int i;
float average(struct student * stu);
void statistic(struct student *stu);
printf("*******************************************************************************\n");
printf("*******************************************************************************\n");
printf("** 成绩管理系统 **\n");
printf("** 欢迎使用 **\n");
printf("*******************************************************************************\n");
printf("*******************************************************************************\n\n");
do
{
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("您的选择是:");
scanf("%d", &i);
if (i == 1)
{
pArr = input(pArr);
average(pArr);
output(pArr);
}
else if (i == 2)
{
chaxun(pArr);
}
else if (i == 3)
{
gengxin(pArr);
printf("更新后学生信息是:\n");
average(pArr);
output(pArr);
}
else if (i == 4)
{
shanchu(pArr);
printf("删除后学生信息是:\n");
average(pArr);
output(pArr);
}
else if (i == 5)
{
zengjia(pArr);
average(pArr);
output(pArr);
}
else if (i == 6)
{
average(pArr);
output(pArr);
}
else if (i == 7)
{
statistic(pArr);
}
} while (i != 8);
save(pArr);
return 0;
}
//对各科成绩进行统计
void statistic(struct student *stu)
{
int i, j;
float max_score[500];
float min_score[500];
float avg_score[500];
float jigelu[500];
int a[500]; // 90分以上
int b[500]; // 80~89
int c[500]; // 70~79
int d[500]; // 60~69
int e[500]; // <60
for (i = 0; i < M; i++) {
// M: 课程的个数
max_score[i] = 0;
min_score[i] = 100;
avg_score[i] = 0;
jigelu[i] = 0;
a[i] = 0;
b[i] = 0;
c[i] = 0;
d[i] = 0;
e[i] = 0;
for (j = 0; j < N; j++)
{
if (stu[j].score[i] >= 60)
{
jigelu[i] += 1;
}
max_score[i] = max_score[i] < stu[j].score[i] ? stu[j].score[i] : max_score[i];
min_score[i] = min_score[i] > stu[j].score[i] ? stu[j].score[i] : min_score[i];
avg_score[i] += stu[j].score[i];
if (stu[j].score[i] >= 90)
{
a[i] ++;
} else if (stu[j].score[i] < 90 & stu[j].score[i] >= 80)
{
b[i] ++;
} else if (stu[j].score[i] < 80 & stu[j].score[i] >= 70)
{
c[i] ++;
} else if (stu[j].score[i] < 70 & stu[j].score[i] >= 60)
{
d[i] ++;
}
else
{
e[i] ++;
}
}
avg_score[i] /= N;
jigelu[i] /= N;
}
int q, m;
// 按格式打印
printf("********************************************************************************\n");
printf("各科成绩统计结果\n");
printf(" 最高分 最低分 平均分 及格率 \n");
for (q = 0; q < M; q++)
{
printf("%s\t\t", kecheng[q]); // 课程
printf("%.2f ", max_score[q]); // 课程
printf("%.2f ", min_score[q]); // 课程
printf("%.2f ", avg_score[q]); // 课程
printf("%.2f ", jigelu[q]);
printf("\n");
}
// 分数段统计
printf("********************************************************************************\n");
printf("各科成绩统计结果\n");
printf(" A(90~100) B(80~89) C(70~79) D(60~69) E(0~59) \n");
for (q = 0; q < M; q++)
{
printf("%s\t\t", kecheng[q]); // 课程
printf("%d ", a[q]); // A
printf("%d ", b[q]); // B
printf("%d ", c[q]); // C
printf("%d ", d[q]); // D
printf("%d ", e[q]); // E
printf("\n");
}
printf("********************************************************************************");
printf("\n");
}
struct student * input(struct student *stu)//从键盘输入包括学号、姓名、各门课程、成绩
{
int q;
printf("请输入学生个数\n");
printf("N = ");
scanf("%d", &N);
stu = (struct student *)malloc(N * sizeof(struct student));
printf("请输入课程数目\n");
printf("M = ");
scanf("%d", &M);
printf("请输入各课程名称\n");
for (q = 0; q < M; q++)
{
printf("课程%d:", q + 1);
scanf("%s", kecheng[q]);
}
int i;
for (i = 0; i < N; i++)
{
printf("请输入第%d个学生成绩:\n", i + 1);
printf("学号:");
scanf("%s", stu[i].num);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].sex);
for (q = 0; q < M; q++)
{
printf("%s的成绩:", kecheng[q]);
scanf("%f", &stu[i].score[q]);
}
}
return stu;
}
void output(struct student *stu)//按照平均分由大到小顺序排序
{
int m, q, k;
printf("********************************************************************************");
printf("按照平均分由大到小顺序排序\n");
printf("输出顺序为< 学号 姓名 性别:");
for (q = 0; q < M; q++)
{
printf("%s ", kecheng[q]);
}
printf(" 平均分 总分>\n");
for (m = 0; m < N; m++)
{
printf("%-13s %-10s %5s:", stu[m].num, stu[m].name, stu[m].sex);
for (k = 0; k < M; k++)
printf("%10.2f", stu[m].score[k]);
printf("%10.2f", stu[m].ave);
printf("%10.2f\n", stu[m].zongfen);
printf("--------------------------------------------------------------------------------\n");
}
printf("********************************************************************************");
printf("\n");
}
float average(struct student * stu)//求平均分
{
struct student t;
int i, q, m, n;
float p, k;
p = 0.0;
for (i = 0; i < N; i++)
{
k = 0.0;
for (q = 0; q < M; q++)
{
k = k + stu[i].score[q];
}
stu[i].zongfen = k;
k = k / M;
stu[i].ave = k;
p = p + k;
}
p = p / N;
for (m = 0; m < (N - 1); m++)
for (n = 0; n < N - m - 1; n++)
{
if (stu[n].ave < stu[n + 1].ave)
{
t = stu[n];
stu[n] = stu[n + 1];
stu[n + 1] = t;
}
}
return p;
}
void save(struct student * stu)//保存学生信息
{
FILE *fp;
int i;
if ((fp = fopen("chengji.dat", "wb")) == NULL)
{
printf("cannot open file\n");
return;
}
for (i = 0; i < N; i++)
{
if (fwrite(&stu[i], sizeof(struct student), 1, fp) != 1)
printf("file write error\n");
}
fclose(fp);
}
void chaxun(struct student * stu)//查询学生信息
{
char st[20];
int i, q, p, k;
printf("请选择查询类型:(1)按学号查询\n(2)按姓名查询\n(3)按性别查询\n(4)退出\n");
scanf("%d", &i);
if (i == 1)
{
printf("请输入要查询的学号:\n");
scanf("%s", st);
for (q = 0; q < N; q++)
{
if (strcmp(st, stu[q].num) == 0)
break;
}
printf("********************************************************************************");
printf("输出顺序为< 学号 姓名 性别:");
for (p = 0; p < M; p++)
{
printf("%s ", kecheng[p]);
}
printf(" 平均分 总分>\n");
printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
for (k = 0; k < M; k++)
printf("%10.2f", stu[q].score[k]);
printf("%10.2f", stu[q].ave);
printf("%10.2f\n", stu[q].zongfen);
printf("--------------------------------------------------------------------------------\n");
printf("********************************************************************************");
printf("\n");
}
else if (i == 2)
{
printf("请输入要查询的姓名:\n");
scanf("%s", st);
for (q = 0; q < N; q++)
{
if (strcmp(st, stu[q].name) == 0)
{
printf("********************************************************************************");
printf("输出顺序为< 学号 姓名 性别:");
for (p = 0; p < M; p++)
{
printf("%s ", kecheng[p]);
}
printf(" 平均分 总分>\n");
printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
for (k = 0; k < M; k++)
printf("%10.2f", stu[q].score[k]);
printf("%10.2f", stu[q].ave);
printf("%10.2f\n", stu[q].zongfen);
printf("--------------------------------------------------------------------------------\n");
printf("********************************************************************************");
printf("\n");
}
}
}
else if (i == 3)
{
printf("请输入要查询的性别:\n");
scanf("%s", st);
for (q = 0; q < N; q++)
{
if (strcmp(st, stu[q].sex) == 0)
{
printf("********************************************************************************");
printf("输出顺序为< 学号 姓名 性别:");
for (p = 0; p < M; p++)
{
printf("%s ", kecheng[p]);
}
printf(" 平均分 总分>\n");
printf("%-13s %-10s %5s:", stu[q].num, stu[q].name, stu[q].sex);
for (k = 0; k < M; k++)
printf("%10.2f", stu[q].score[k]);
printf("%10.2f", stu[q].ave);
printf("%10.2f\n", stu[q].zongfen);
printf("--------------------------------------------------------------------------------\n");
printf("********************************************************************************");
printf("\n");
}
}
}
else if (i == 4)
return;
}
void gengxin(struct student * stu)//更新学生信息
{
int i, k, m, q;
printf("请选择更新方式:1.全部更新 2.单个更新 3.取消\n");
scanf("%d", &k);
if (k == 1)
{
for (i = 0; i < N; i++)
{
printf("请输入第%d个学生成绩:\n", i + 1);
printf("学号:");
scanf("%s", stu[i].num);
printf("姓名:");
scanf("%s", stu[i].name);
printf("性别:");
scanf("%s", stu[i].sex);
for (q = 0; q < M; q++)
{
printf("%s的成绩:", kecheng[q]);
scanf("%f", &stu[i].score[q]);
}
}
}
else if (k == 2)
{
printf("您要更新的是第几个学生?\n");
scanf("%d", &m);
m = m - 1;
printf("学号:");
scanf("%s", stu[m].num);
printf("姓名:");
scanf("%s", stu[m].name);
printf("性别:");
scanf("%s", stu[m].sex);
for (q = 0; q < M; q++)
{
printf("%s的成绩:", kecheng[q]);
scanf("%f", &stu[m].score[q]);
}
}
else if (k == 3)
return;
}
void shanchu(struct student * stu)//删除学生信息
{
struct student t;
int n, i;
printf("您要删除第几个学生信息:");
scanf("%d", &n);
n = n - 1;
for (i = n; i < (N - 1); i++)
{
stu[i] = stu[i + 1];
}
N = N - 1;
realloc(stu, N * sizeof(struct student));
}
void zengjia(struct student *stu)//增加学生信息
{
int i, q, p;
printf("请输入要增加的个数\n");
scanf("%d", &i);
q = N;
N = N + i;
realloc(stu, N * sizeof(struct student));
for (; q < N; q++)
{
printf("请输入第%d个学生成绩:\n", q + 1);
printf("学号:");
scanf("%s", stu[q].num);
printf("姓名:");
scanf("%s", stu[q].name);
printf("性别:");
scanf("%s", stu[q].sex);
for (p = 0; p < M; p++)
{
printf("%s的成绩:", kecheng[p]);
scanf("%f", &stu[q].score[p]);
}
}
}