学生成绩管理系统
- 格式:docx
- 大小:14.58 KB
- 文档页数:12
课程实验设计
课程名称 程序设计基础( C) 班级 计算 实验日期
姓名
学号
实验成绩
实验名称 学生成绩管理系统
实验 目的
及要 求
实验 环境 Code Blocks
实 验 内
容 某班有最多不超过 30 人(具体人数由键盘输人) 参加期未考试,
考试科目最多不超过 6 门(具体门数由键盘输入, 但不少于 3 门),学
生成绩管理系统是一个非常实用的程序, 如果能够把用户输入数据存
盘,下次运行时读出,就更有用了。 增加文件读写的功能 ,即编程实 现如下菜单驱动的学生成绩管理系统 :
(1) 录入每个学生的学号、姓名和各科考试成绩。
(2) 计算每门课程的总分和平均分。
(3) 计算每个学生的总分和平均分。
(4) 按每个学生的总分由高到低排出名次表。
(5) 按学号由小到大排出成绩表。
(6) 按姓名的字典顺序排出成绩表。
(7) 按学号查询学生排名及其考试成绩。
(8) 按姓名查询学生排名及其考试成绩。
(9) 按优秀 (90-100 分)、良好 (80-89 分) 、中等 (70-79 分) 、及
格 (60-69 分 ) 、不及格 (0-59 分 )5 个类别,对每门课程分别统计每
个类别的人数以及所占的百分比。
(10) 输出每个学生的学号、姓名、各科考试成绩、总分、平均分
以及每门课程的总分和平均分。
(12) 将每个学生的记录信息写入文件。
算法描述及实验步骤 (用适当的形式表达算法设计思想与算法实现步骤)
调 试
过 程
及 实
验 结
果 总有一个错误是说那个函数初始化的问题,最后通过问同学解决了。
总
结
附 录
#define _CRT_SECURE_NO_WARNINGS #define NAME 20
#include #include #include
void ShowMenu(STUDENT*,int,int); void inputMesg(STUDENT*,int,int);
void SubScore(STUDENT*, int, int); void StdScore(STUDENT*, int, int);
void ScoreRank(STUDENT*, int, int); void NumRank(STUDENT*, int, int);
void StuRank(STUDENT*, int, int); void NumSearch(STUDENT*, int, int);
void NameSearch(STUDENT*, int, int); void
StatisticsAnalysis(STUDENT*, int, int); void PrintScore(STUDENT*, int,
int); void OutputFile(STUDENT*, int, int); void StatisticsAnalysis(STUDENT *s, int n, int m)
{
printf(" 按优秀(90-100 分)、良好(80-89 分)、中等(70-79 分)、及
格(60-69 分)、不及格(0 - 59 分)5 个类别,对每门课程分别统计每个
类别的人数以及所占的百分比。 \n");
int best[SUBN] = { 0 }, good[SUBN] = { 0 }, middle[SUBN] = { 0 },
pass[SUBN] = { 0 }, nopass[SUBN] = { 0 };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (s[i].score[j] >= 90 && s[i].score[j] <= 100)
{ best[j]++;
}
else
if (s[i].score[j] >= 80 && s[i].score[j] < 90)
{ good[j]++;
}
else
if (s[i].score[j] >= 70 && s[i].score[j] < 80)
{ middle[j]++;
}
else
if (s[i].score[j] >= 60 && s[i].score[j]
< 70)
{ pass[j]++;
}
else
if (s[i].score[j] < 60)
{ nopass[j]++;
}
}
}
for (int k = 0; k < m; k++)
{
printf(" 第%d门课\n 优秀%.2f%%,", k + 1, (best[k] / (n * 1.0)) * 100);
printf(" 良好%.2f%%,", (good[k] / (n * 1.0)) * 100); printf(" 中等%.2f%%,", (middle[k] / (n * 1.0)) * 100); printf(" 及格%.2f%%,", (pass[k] / (n * 1.0)) * 100); printf(" 不及格%.2f%%,", (nopass[k] / (n * 1.0)) * 100);
printf("\n");
}
getchar();
}
void PrintScore(STUDENT *s, int n, int m)
{
for (int j = 0; j < n; j++)
{
printf(" 学号:%d\n", s[j].num);
printf(" 姓名:"); printf("%s", s[j].name);
printf("\n 成绩 \n");
for (int c = 0; c < m; c++) {
printf(" 第 %d 门成绩为 %.2f\n", c + 1, s[j].score[c]);
}
printf(" 总成绩 :%.2f", s[j].sum);
printf("\n");
}
getchar();
}
typedef struct student {
long int num;
char name[NAME];
float score[6];
float sum;
float aver;
}STUDENT;
void ShowMenu(STUDENT *s,int n,int m)
{
int select;
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("0. 退出
\n"); printf(" 请选择选项 :");
scanf("%d", &select); switch (select) { case 1: inputMesg(s, n, m);
break;
case 2: SubScore(s, n, m); break;
case 3: StdScore(s, n, m); break;
case 4: ScoreRank(s, n, m); break;
case 5: NumRank(s, n, m); break;
case 6: StuRank(s, n, m); break;
case 7: NumSearch(s, n, m); break;
case 8: NameSearch(s, n, m); break;
case 9: StatisticsAnalysis(s, n, m); break;
case 10: PrintScore(s, n, m); break;
case 11: OutputFile(s, n, m); break;
case 0: exit(0); printf(" 即将退出程序 "); break;
default: printf(" 输入错误 !"); break; void inputMesg(STUDENT *s,int n,int m)
{
printf(" 请输入学号、姓名、成绩。 \n");
for (int i = 0; i < n; i++)
{
printf(" 学号: ");
scanf("%ld", &s[i].num);
if (s[i].num == 0)
{ break;
}
getchar();
printf(" 姓名: "); scanf("%s",s[i].name);
s[i].sum = 0;
for (int j = 0; j < m; j++)
{ printf(" 第 %d 科成绩: ",j); scanf("%f", &s[i].score[j]); s[i].sum
+= s[i].score[j];
}
}
}
void SubScore(STUDENT *s, int n, int m)
{
float sum[6] = { 0 };
float average[SUBN] = { 0 };
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)