学生成绩管理系统

  • 格式: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++)