简单的学生成绩管理系统

简单的学生成绩管理系统

程序设计功能及要求

(1) 总人数定义为宏,数据使用文件存放

(2) 输入学生姓名学号,及五门成绩,并计算每个学生五门功课的平均分,并按平均分排列名次,若平均分相同则名次并列;结果写入文件并按格式打印在屏幕上

⑶ 统计全班每门课程的平均分,并计算各分数段(60以下,6069,7079,80~89,90以上)的学生人数;结果写入文件,并按格式在屏幕上打印

⑷ 在屏幕上打印出所有不及格学生的下列信息:学号,不及格的课程名,该不及格课程成绩

⑸ 在开始画面加入简单的菜单便于选择各种功能

例:
1学生条目输入
2成绩统计
3分数段统计
4不及格学生筛选

⑹文件格式要求

1.原始数据文件格式 (具体数据和项目自行编写)

学号姓名英语C语言高等数学……
1张三768978
2李四….….….

2.输出数据文件(由程序自动生成)

1学生综合成绩文件。

2学号 姓名 英语 C语言 高等数学 …………….平均成绩 名次

1 张三 76 89 78 ……………

2 李四 …. …. ….

3)统计结果文件。

4)分数段 英语 C语言 高等数学 ………………….

<60 2 …

60~69 8 …

70~79 5 …

80~89 10 …

⑺加入优等生统计功能,要求按优等生条件筛选出优等生的条目存入单独文件,并输出到屏幕

优等生标准(满足之一即可):

1 平均成绩上80。

2平均成绩及格但未上80,有单科成绩上90。

3平均成绩未及格,有单科满分。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//宏定义
#define MAX_STUDENTS 50 // 定义最大学生人数
#define PASS_MARK 60 // 定义及格分数
//全局变量定义
float total_marks[5];// 全班各门课程总分
float average_marks[5];// 全班各门课程平均分
int scores_by_subjects[5][5] = {{0}};// 全班各分数段人数
int sum_input=-1;//总计输入学生人数
// 学生信息结构体
typedef struct {
  char  id[10]; // 学号
  char name[50]; // 姓名
  float marks[5]; // 成绩
  float average; // 平均分
  int rank; // 名次
} Student;
Student students[MAX_STUDENTS];// 全班学生信息

//菜单区
void WELCOME_screen()
{
    printf("**********************************\n*****欢迎使用学生成绩管理系统*****\n*****作者:刘纪彤*****************\n**********************************\n");
    system("Pause");
}
void menu()
{
  system("cls");
  printf("*************菜单***************\n");
	printf("*       1.学生条目输入\n");
	printf("*       2.成绩统计\n");
	printf("*       3.分数段统计\n");
	printf("*       4.不及格学生筛选\n");
	printf("*       5.优秀学生统计\n");
	printf("*       0.退出并保存文件\n");//退出系统
	printf("********************************\n");
	printf("您的选择是: ");
}

//流程区
void Input_Student()//输入学生信息
{

  system("cls");
  printf("输入0退出\n");
  int i;
  for(i=0;i<MAX_STUDENTS;i++)
  {
  system("cls");
  printf("请输入学号:");
  scanf("%s",students[i].id);
  printf("请输入姓名:");
  scanf("%s",students[i].name);
  printf("请输入科目一成绩:");
  scanf("%f",&students[i].marks[0]);
  printf("请输入科目二成绩:");
  scanf("%f",&students[i].marks[1]);
  printf("请输入科目三成绩:");
  scanf("%f",&students[i].marks[2]);
  printf("请输入科目四成绩:");
  scanf("%f",&students[i].marks[3]);
  printf("请输入科目五成绩:");
  scanf("%f",&students[i].marks[4]);
  printf("继续吗?输入0退出,输入1和其他数字继续。\n");
  int choice;
  scanf("%d",&choice);
  if(choice==0) break;
  else continue;;
  }
  sum_input=i;
}
void Grade_output()//输出成绩统计
{
  calculate_average();
  sort_students();
  system("cls");
  printf("*****成绩统计*****\n");
  OUTPUT_GRADES();
}
void Grade_paragraph()//输出成绩段统计
{
  system("cls");
  // 统计全班各科目的各分数段人数
  for (int i = 0; i < 5; i++) 
  {
    calculate_scores(i);
  }
// 打印表格
  print_scores_table();
  system("Pause");
}
void print_failed_students() // 打印不及格学生信息
{
  system("cls");
  printf("学号\t不及格课程\t成绩\n");
  for (int i = 0; i <= sum_input; i++) {
  for (int j = 0; j < 5; j++) {
  if (students[i].marks[j] < PASS_MARK) {
  printf("%s\t科目%d\t%.1f\n", students[i].id, j + 1, students[i].marks[j]);
  }
  }
  }
  system("Pause");
}
void print_excellent_students() // 打印优等生信息
{
  system("cls");
  printf("学号\t姓名\n");
  for (int i = 0; i <= sum_input; i++) {
    // 满足条件1
    if (students[i].average >= 80) {
      printf("%s\t%s\n", students[i].id, students[i].name);
      continue;
    }

    // 满足条件2
    int has_mark_over_90 = 0;
    for (int j = 0; j < 5; j++) {
      if (students[i].marks[j] >= 90) {
        has_mark_over_90 = 1;
        break;
      }
    }
    if (has_mark_over_90) {
      printf("%s\t%s\n", students[i].id, students[i].name);
      continue;
    }

    // 满足条件3
    int has_full_mark = 0;
    for (int j = 0; j < 5; j++) {
      if (students[i].marks[j] == 100) {
        has_full_mark = 1;
        break;
      }
    }
    if (has_full_mark) {
      printf("%s\t%s\n", students[i].id, students[i].name);
      continue;
    }
  }
  system("Pause");
}

//运算函数区

// 计算学生的平均分
void calculate_average() 
{
  for (int i = 0; i <= sum_input; i++) {
    float sum = 0;
    for (int j = 0; j < 5; j++) 
    {
      sum += students[i].marks[j];
    }
    students[i].average = sum / 5;
  }
}

void sort_students()//排序 
{
  // 按平均分排序
  for (int i = 0; i <= sum_input; i++) 
  {
    for (int j = i + 1; j <= sum_input; j++) 
    {
      if (students[i].average < students[j].average) 
      {
      Student temp = students[i];
      students[i] = students[j];
      students[j] = temp;
      }
    }
  }

  // 计算名次
  students[0].rank = 1;
  for (int i = 1; i <= sum_input; i++) 
  {
  if (students[i].average == students[i - 1].average) 
  {
  students[i].rank = students[i - 1].rank;
  } 
  else 
  {
  students[i].rank = i + 1;
  }
  }
  }

void OUTPUT_GRADES()
{
  printf("学号\t姓名\t科目一\t科目二\t科目三\t科目四\t科目五\t平均分数\t排名\t\n");
  for(int i=0;i<=sum_input;i++)
  printf("%s\t%s\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%3.1f\t%d\t\n",students[i].id,students[i].name,students[i].marks[0],students[i].marks[1],students[i].marks[2],students[i].marks[3],students[i].marks[4],students[i].average,students[i].rank);
  system("Pause");
}

void calculate_scores(int subject)// 计算全班各分数段人数 
{
  for (int i = 0; i <= sum_input; i++) {
    int mark = students[i].marks[subject];
    if (mark < 60) {
      scores_by_subjects[subject][0]++;
    } else if (mark < 70) {
      scores_by_subjects[subject][1]++;
    } else if (mark < 80) {
      scores_by_subjects[subject][2]++;
    } else if (mark < 90) {
      scores_by_subjects[subject][3]++;
    } else {
      scores_by_subjects[subject][4]++;
    }
  }
}

void print_scores_table() // 打印表格
{
  printf("科目\t<60\t60~69\t70~79\t80~89\t90~100\n");
  for (int i = 0; i < 5; i++) {
    printf("%d\t", i+1);
    for (int j = 0; j < 5; j++) {
      printf("%d\t", scores_by_subjects[i][j]);
    }
    printf("\n");
  }
}

//保存文件
void Save_origin()
{
  FILE *fp;
  if ((fp = fopen("data.txt", "w")) == NULL)
  {
    printf("不能打开文件!\n");
  }
  fprintf(fp,"学号\t姓名\t科目一\t\t科目二\t\t科目三\t\t科目四\t\t科目五\t\t\n");
  for(int i=0;i<=sum_input;i++)
  fprintf(fp,"%s\t\t%s\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t\n",students[i].id,students[i].name,students[i].marks[0],students[i].marks[1],students[i].marks[2],students[i].marks[3],students[i].marks[4]);
  fclose(fp);
}

void Save_average()
{
  FILE *fp;
  if ((fp = fopen("GRADE.txt", "w")) == NULL)
  {
    printf("不能打开文件!\n");
  }
  fprintf(fp,"学号\t姓名\t科目一\t\t科目二\t\t科目三\t\t科目四\t\t科目五\t\t平均分数\t\t排名\t\t\n");
  for(int i=0;i<=sum_input;i++)
  fprintf(fp,"%s\t\t%s\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%3.1f\t\t%d\t\t\n",students[i].id,students[i].name,students[i].marks[0],students[i].marks[1],students[i].marks[2],students[i].marks[3],students[i].marks[4],students[i].average,students[i].rank);
  fclose(fp);
}

void Save_paragraph()
{
  FILE *fp;
  if ((fp = fopen("PARA.txt", "w")) == NULL)
  {
    printf("不能打开文件!\n");
  }
 fprintf(fp,"科目\t<60\t60~69\t70~79\t80~89\t90~100\n");
  for (int i = 0; i < 5; i++) {
    fprintf(fp,"%d\t", i+1);
    for (int j = 0; j < 5; j++) {
    fprintf(fp,"%d\t", scores_by_subjects[i][j]);
    }
    fprintf(fp,"\n");
  }
}

//主函数
int main()
{
    WELCOME_screen();
    while(1)
    {
    menu();
    int choice;
    scanf("%d",&choice);
    switch(choice)
    {
      case 0: goto Save;break;
      case 1: Input_Student();break;
      case 2: Grade_output();break;
      case 3: Grade_paragraph();break;
      case 4: print_failed_students();break;
      case 5: print_excellent_students();break;
      default :continue;break;
    }
    }
    //保存文件
    Save:
    Save_origin();
    Save_average();
    Save_paragraph();
    return 0;
}
以下是一个简单学生成绩管理系统C语言代码实现,具体功能包括学生信息录入、成绩录入、成绩查询、成绩排序等: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NUM 100 // 最大学生数 // 学生结构体 typedef struct { char name[20]; // 姓名 int num; // 学号 int score; // 成绩 } Student; // 学生数组 Student students[MAX_NUM]; // 学生数量 int num = 0; // 添加学生 void addStudent() { if (num >= MAX_NUM) { printf("学生数量已达到最大值,无法添加!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[num].name); printf("请输入学生学号:"); scanf("%d", &students[num].num); printf("请输入学生成绩:"); scanf("%d", &students[num].score); num++; printf("添加成功!\n"); } // 查询学生 void queryStudent() { int num; printf("请输入要查询的学生学号:"); scanf("%d", &num); for (int i = 0; i < MAX_NUM; i++) { if (students[i].num == num) { printf("姓名:%s,学号:%d,成绩:%d\n", students[i].name, students[i].num, students[i].score); return; } } printf("未找到该学生!\n"); } // 排序学生 void sortStudent() { for (int i = 0; i < num - 1; i++) { for (int j = 0; j < num - i - 1; j++) { if (students[j].score < students[j + 1].score) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } printf("排序成功!\n"); } // 显示所有学生 void showAllStudents() { printf("姓名\t学号\t成绩\n"); for (int i = 0; i < num; i++) { printf("%s\t%d\t%d\n", students[i].name, students[i].num, students[i].score); } } int main() { while (1) { printf("请选择操作:\n"); printf("1.添加学生\n"); printf("2.查询学生\n"); printf("3.排序学生\n"); printf("4.显示所有学生\n"); printf("5.退出\n"); int choice; scanf("%d", &choice); switch (choice) { case 1: addStudent(); break; case 2: queryStudent(); break; case 3: sortStudent(); break; case 4: showAllStudents(); break; case 5: exit(0); default: printf("无效的操作!\n"); break; } } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美丽新科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值