学生成绩管理系统

学生成绩管理系统
本系统能够对学生成绩管理功能,包括:
1.对多个学生成绩进行管理,至少10个学生。
2.每个学生至少3门课程。
3.对每个学生大学期间的成绩进行记录。
4.修改学生成绩。
5.不同用户的权限不同,管理员拥有所有权限(打印、登记、添加、排序、查询、修改、删除学生信息)、教师可以排序、查询、登记和修改成绩;学生可以查询成绩。 其中查询分姓名查询、学号查询;排序分总成绩排序及各科成绩排序.
6.成绩说明:0~100,整数。
7.成绩需要保存进文件,程序初始化时读取文件。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define N 100
#define NR(x) (sizeof(x) / sizeof((x[0]) + 0))
typedef struct student
{
  int serial;
  int number_stu;
  int subject_1;//科目1-线性代数
  int math;//高等数学
  int english;//大学英语
  int average_score;
  int total;
} student;
student student_message[N];
enum
{
  UP = 'w',
  DOWN = 's',
  LEFT = 'a',
  RIGHT = 'd',
  ENTER = 13,
  ESC = 27,
};
char *menu[] =
    {
        "管理端",
        "教师端",
        "学生端",
        "      ",
}; //初始界面
char *menul[] =
    {
        "登记学生成绩",
        "导入随机成绩",
        "查找学生信息",
        "修改学生信息",
        "删除学生信息",
        "    返回    ",

        "          ",
}; //管理端界面
char *menull[] =
    {
        "登记学生成绩",
        "导入随机成绩",
        "查询学生成绩",
        "修改学生成绩",
        "    返回    ",
        "          ",
}; //教师端界面
char *menulll[] =
    {
        "查询成绩",
        "  返回    ",
        "          ",
}; //学生端界面
char *menu_student[] =
    {
        "学号",
        "线性代数",
        "高等数学",
        "大学英语",
        "平均分",
        "总分",
};
CONSOLE_CURSOR_INFO cci;
COORD pos = {0, 0};
int main()
{
  int index = 0, number = 0;
  HANDLE hout;
  srand((unsigned)time(NULL));
  SetConsoleTitleA("学生成绩管理系统");   //窗口标题
  hout = GetStdHandle(STD_OUTPUT_HANDLE); //获取句柄
  first_menu(hout, index, number);
  system("pause");
  return 0;
}
void first_menu(HANDLE hout, int index, int number)//首页界面
{
  int ret;
  while (1)
  {
    HideCursor(hout); //隐藏光标
    goto_x_y(hout, 46, 0);
    color(15);
    printf("欢迎使用学生管理系统");
    GetConsoleCursorInfo(hout, &cci);
    general_keyboard_update_menu(hout, 50, 10, menu, NR(menu), index, number);
    ret = get_userinput(&index,NR(menu));
    if (ret == ESC)
      exit(0);
    if (ret == ENTER)
    {
      switch (index)
      {
      case 0:
        system("cls");
        administered_jurisdiction(hout, menul,NR(menul),0,number);
        break;
      case 1:
        system("cls");
        teacher_jurisdiction(hout, menull, NR(menull), 0, number);
        break;
      case 2:
        system("cls");
        student_jurisdiction(hout, menulll, NR(menulll), 0, number);
        break;
      case 3:
        exit(0);

      }
    }
  }

}
void administered_jurisdiction(HANDLE hout, char **menul, int size, int index, int number)//管理端界面
{
  int ret = 0;
  system("cls");
  while (1)
  {
    color(7);
    goto_x_y(hout, 0, 23);
    printf("                                           ");
    goto_x_y(hout, 0, 23);
    color(2);
    printf("[成功]正在使用管理权限进行操作");
    if (number != 0)
      printf_now_message(hout, number);
    else
    {
      color(7);
      goto_x_y(hout, 20, 0);
      printf("%-12s%-12s%-12s%-12s%-12s%-12s",
             menu_student[0],
             menu_student[1],
             menu_student[2],
             menu_student[3],
             menu_student[4],
             menu_student[5]);
    }
    general_keyboard_update_menu(hout, 0, 10, menul, size, index, number);
    if (ret == ESC)
      exit(0);
    if (ret == ENTER)
    {
      switch (index)
      {
      case 0:

        if (number <= 21)
        {
          add_self(hout, number);
          number++;
        }
        else
        {
          goto_x_y(hout, 0, 23);
          color(772);
          printf("[失败]数据已满,不可进行添加操作");
        }
        break;
      case 1:
        if (number <= 21)
        {
          goto_x_y(hout, 0, 23);
          color(2);
          printf("[成功]正在使用管理权限进行操作");
          number++;
          add_random(hout, number);
        }
        else
        {
          goto_x_y(hout, 0, 23);
          color(772);
          printf("[失败]数据已满,不可进行添加操作");
        }
        break;
      case 2:
        find_message(hout, number);
        break;

      case 3:
        alter_message(hout, 1, number);
        break;
      case 4:
        delete_message(hout, 1, number);
        break;
      case 5:
        system("cls");
        first_menu(hout, 0, number);
        break;
      }
    }
    GetConsoleCursorInfo(hout, &cci);
    ret = get_userinput(&index, size);
  }
  system("cls");
}
void teacher_jurisdiction(HANDLE hout, char **menull, int size, int index, int number)//教师端界面
{
  int ret = 0;
  system("cls");
  while (1)
  {
    color(7);
    goto_x_y(hout, 0, 23);
    printf("                                           ");
    goto_x_y(hout, 0, 23);
    color(2);
    printf("[成功]正在使用教师权限进行操作");
    if (number != 0)
      printf_now_message(hout, number);
    else
    {
      color(7);
      goto_x_y(hout, 20, 0);
      printf("%-12s%-12s%-12s%-12s%-12s%-12s",
             menu_student[0],
             menu_student[1],
             menu_student[2],
             menu_student[3],
             menu_student[4],
             menu_student[5]);
    }
    general_keyboard_update_menu(hout, 0, 10, menull, size, index, number);
    if (ret == ESC)
      exit(0);
    if (ret == ENTER)
    {
      switch (index)
      {
      case 0:

        if (number <= 21)
        {
          add_self(hout, number);
          number++;
        }
        else
        {
          goto_x_y(hout, 0, 23);
          color(772);
          printf("[失败]数据已满,不可进行添加操作");
        }
        break;
      case 1:
        if (number <= 21)
        {
          goto_x_y(hout, 0, 23);
          color(2);
          printf("[成功]正在使用教师权限进行操作");
          number++;
          add_random(hout, number);
        }
        else
        {
          goto_x_y(hout, 0, 23);
          color(772);
          printf("[失败]数据已满,不可进行添加操作");
        }
        break;
      case 2:
        find_message(hout, number);
        break;
      case 3:
        alter_message(hout, 1, number);
        break;
      case 4:
        system("cls");
        first_menu(hout, 0, number);
        break;
      }
    }
    GetConsoleCursorInfo(hout, &cci);
    ret = get_userinput(&index, size);
  }
  system("cls");
}
void student_jurisdiction(HANDLE hout, char **menulll, int size, int index, int number)//学生端界面
{
  int ret = 0;
  system("cls");
  while (1)
  {
    goto_x_y(hout, 0, 23);
    color(2);
    printf("[成功]正在使用学生权限进行操作");
    color(7);
      goto_x_y(hout, 20, 0);
      printf("%-12s%-12s%-12s%-12s%-12s%-12s",
             menu_student[0],
             menu_student[1],
             menu_student[2],
             menu_student[3],
             menu_student[4],
             menu_student[5]);
    general_keyboard_update_menu(hout, 0, 10, menulll, size, index, number);
    if (ret == ESC)
      exit(0);
  if (ret == ENTER)
    {
      switch (index)
      {
      case 0:
        find_message(hout, number);
        break;
      case 1:
        system("cls");
        first_menu(hout, 0, number);
        break;
      }
    }
    GetConsoleCursorInfo(hout, &cci);
    ret = get_userinput(&index, size);
  }
  system("cls");
}
void add_self(HANDLE hout, int number)//登记学生成绩
{
  number++;
  student_message[number].serial = number;
  color(128);
  goto_x_y(hout, 20, number);
  printf(" ");
  goto_x_y(hout, 20, number);
  scanf("%d", &student_message[number].number_stu);
  getchar();
  goto_x_y(hout, 32, number);
  scanf("%d", &student_message[number].subject_1);
  getchar();
  goto_x_y(hout, 44, number);
  scanf("%d", &student_message[number].math);
  getchar();
  goto_x_y(hout, 56, number);
  scanf("%d", &student_message[number].english);
  student_message[number].total = student_message[number].subject_1 + student_message[number].math + student_message[number].english  ;
  student_message[number].average_score = (student_message[number].total) / 3;
  color(7);
  goto_x_y(hout, 20, number);
  printf("%-12d%-12d%-12d%-12d%-12d%-8d",
         student_message[number].number_stu,
         student_message[number].subject_1,
         student_message[number].math,
         student_message[number].english,
         student_message[number].average_score,
         student_message[number].total);
}
void alter_message(HANDLE hout, int index, int number)//修改学生信息
{
  int i, ret, j, sign = 0, x, indey = 1;
  while (1)
  {
    for (i = 1; i <= number; i++)
    {
      if (i == index)
      {
        color(496);
        goto_x_y(hout, 20, i);
        printf("%-12d%-12d%-12d%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].subject_1,
               student_message[i].math,
               student_message[i].english,
               student_message[i].average_score,
               student_message[i].total);
      }
      else
      {
        SetConsoleTextAttribute(hout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
        goto_x_y(hout, 20, i);
        printf("%-12d%-12d%-12d%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].subject_1,
               student_message[i].math,
               student_message[i].english,
               student_message[i].average_score,
               student_message[i].total);
      }
    }
    ret = special_get_userinput(&index, number);
    if (ret == ENTER)
    {
      ret = 1;
      while (ret != ENTER)
      {
    color(7);
        goto_x_y(hout, 20, index);
        printf("%-12d%-12d%-12d%-12d%-12d%-8d",
               student_message[index].number_stu,
               student_message[index].subject_1,
               student_message[index].math,
               student_message[index].english,
               student_message[index].average_score,
               student_message[index].total);
        if (indey == 1)
          color(128);
        else
          color(7);
        goto_x_y(hout, 20, index);
        printf("%d", student_message[index].number_stu);
        if (indey == 2)
          color(128);
        else
          color(7);
        goto_x_y(hout, 32, index);
        printf("%d", student_message[index].subject_1);
        if (indey == 3)
          color(128);
        else
          color(7);
        goto_x_y(hout, 44, index);
        printf("%d", student_message[index].math);
        if (indey == 4)
          color(128);
        else
          color(7);
        goto_x_y(hout, 56, index);
        printf("%d", student_message[index].english);
        ret = get_y_userinput(&indey, 6);
      }
      if (indey == 1)
      {
        color(496);
        goto_x_y(hout, 20, index);
        printf("              ");
        goto_x_y(hout, 20, index);
        scanf("%d", &student_message[index].number_stu);
      }
      if (indey == 2)
    {
        color(128);
        goto_x_y(hout, 32, index);
        printf("   ");
        goto_x_y(hout, 32, index);
        scanf("%d", &student_message[index].subject_1);
      }
      if (indey == 3)
      {
        color(128);
        goto_x_y(hout, 44, index);
        printf("   ");
        goto_x_y(hout, 44, index);
        scanf("%d", &student_message[index].math);
      }
      if (indey == 4)
      {
        color(128);
        goto_x_y(hout, 56, index);
        printf("   ");
        goto_x_y(hout, 56, index);
        scanf("%d", &student_message[index].english);
      }
      student_message[index].total =  student_message[index].subject_1 + student_message[index].math + student_message[index].english;
      student_message[index].average_score = (student_message[index].total) / 3;
      color(7);
      goto_x_y(hout, 20, index);
      printf("%-12d%-12d%-12d%-12d%-12d%-8d",
             student_message[index].number_stu,
             student_message[index].subject_1,
             student_message[index].math,
             student_message[index].english,
             student_message[index].average_score,
             student_message[index].total);
      break;
    }
  }
}
void delete_message(HANDLE hout, int index, int number) //删除学生信息
{
  int i, ret, j, sign = 0, x;
  while (1)
  {
  for (i = 1; i <= number; i++)
    {
      if (i == index)
      {
        color(496);
        goto_x_y(hout, 20, i);
        printf("%-12d%-12d%-12d%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].subject_1,
               student_message[i].math,
               student_message[i].english,
               student_message[i].average_score,
               student_message[i].total);
      }
      else
      {
        SetConsoleTextAttribute(hout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
        goto_x_y(hout, 20, i);
        printf("%-12d%-12d%-12d%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].subject_1,
               student_message[i].math,
               student_message[i].english,
               student_message[i].average_score,
               student_message[i].total);
      }
    }
    ret = special_get_userinput(&index, number);
    if (ret == ENTER)
    {
      x = student_message[index].serial;
      for (i = 1; i <= number; i++)
      {
        for (j = i + 1; j <= number; j++)
        {
          if (student_message[i].serial > student_message[j].serial)
          {
            sign = 1;
            student_message[0] = student_message[i];
            student_message[i] = student_message[j];
            student_message[j] = student_message[0];
          }
        }
      }
      for (x; x <= number; x++)
        student_message[x] = student_message[x + 1];
      student_message[x] = student_message[0];
      number = number - 1;
      for (j = 1; j <= number; j++)
        student_message[j].serial = j;
      system("cls");
      if (sign == 1)

      printf_now_message(hout, number);
      teacher_jurisdiction(hout, menull, NR(menull), 0, number);
      break;
    }
  }
}
void find_message(HANDLE hout, int number)//输入学号查找学生
{
  long int find, i, sign = 0;
  color(7);
  goto_x_y(hout, 0, 24);
  printf("请输入要查找的学号:\n");
  scanf("%d", &find);
  for (i = 1; i <= number; i++)
  {
    if (find == student_message[i].number_stu)
    {
      sign = 1;
      break;
    }
  }
  color(7);
  goto_x_y(hout, 0, 24);
  printf("                            \n");
  printf("                            ");
  if (sign == 1)
  {
    color(496);
    goto_x_y(hout, 20, i);
    printf("%-12d%-12d%-12d%-12d%-12d%-8d",
           student_message[i].number_stu,
           student_message[i].subject_1,
           student_message[i].math,
           student_message[i].english,
           student_message[i].average_score,
           student_message[i].total);
  }
  else
  {
    goto_x_y(hout, 0, 23);
    color(7);
    printf("                                  ");
    goto_x_y(hout, 0, 23);
    color(772);
    printf("[查找失败]无法找到该数据");
    find_message( hout, number);

  }
}
int special_get_userinput(int *index, int size)//检测键盘输入改变x轴2
{
  int ch;
  ch = getch();
  switch (ch)
  {
  case UP:
    if (*index > 1)
      *index -= 1;
    return 0;
  case DOWN:
    if (*index < (size))
      *index += 1;
    return 0;
  case ENTER:
    return ENTER;
  case ESC:
    return ESC;
  }
  return 0;
}
int get_userinput(int *index, int size)//检测键盘输入改变x轴

{
  int ch;
  ch = getch();
  switch (ch)
  {
  case UP:
    if (*index > 0)
      *index -= 1;
    return 0;
  case DOWN:
    if (*index < (size - 2))
      *index += 1;
    return 0;
  case ENTER:
    return ENTER;
  case ESC:
    return ESC;
  }
  return 0;
}
void color(short x) //改变字体颜色
{
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
}
void HideCursor(HANDLE hout)//隐藏光标
{
  CONSOLE_CURSOR_INFO cursor;
  cursor.bVisible = FALSE;
  cursor.dwSize = sizeof(cursor);
  SetConsoleCursorInfo(hout, &cursor);
}
void goto_x_y(HANDLE hout, int x, int y) //移动光标
{
  pos.X = x;
  pos.Y = y;
  SetConsoleCursorPosition(hout, pos);
}
void general_keyboard_update_menu(HANDLE hout, int x, int y, char **option, int size, int index, int number)
//更新菜单选项,参数(句柄,选项x位置,选项之间y距离,选项数组,选项个数,选择位置)
{
  int j;
  for (j = 0; j < size; j++)
  {
    if (j == index)
    {
      color(496);
      goto_x_y(hout, x, y + j);
      printf("%s", option[j]);
    }
    else
    {
      SetConsoleTextAttribute(hout, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
      goto_x_y(hout, x, y + j);
      printf("%s", option[j]);
    }
  }
}
void add_random(HANDLE hout, int number)//导入随机成绩
{
  student_message[number].serial = number;
  student_message[number].number_stu = rand() % 212020090 + 2120220001;
  student_message[number].subject_1 = rand() % 100 + 0;
  student_message[number].math = rand() % 100+ 0;
  student_message[number].english = rand() % 100 + 0;
  student_message[number].total =  student_message[number].subject_1 + student_message[number].math + student_message[number].english ;
  student_message[number].average_score = (student_message[number].total) / 3;
  printf_now_message(hout, number);
}
void printf_now_message(HANDLE hout, int number)
{
  int i;
  goto_x_y(hout, 20, 0);
  color(7);
  printf("%-12s%-12s%-12s%-12s%-12s%-12s",
         menu_student[0],
         menu_student[1],
         menu_student[2],
         menu_student[3],
         menu_student[4],
         menu_student[5]);
  for (i = 1; i <= number; i++)
  {
    goto_x_y(hout, 20, i);
    printf("%-12d%-12d%-12d%-12d%-12d%-8d",
           student_message[i].number_stu,
           student_message[i].subject_1,
           student_message[i].math,
           student_message[i].english,
           student_message[i].average_score,
           student_message[i].total);
  }
}
int get_y_userinput(int *indey, int size)//检测键盘输入改变y轴
{
  int ch;
  ch = getch();
  switch (ch)
  {
  case LEFT:
    if (*indey > 1)
      *indey -= 1;
    return 0;
  case RIGHT:
    if (*indey < (size))
      *indey += 1;
    return 0;
  case ENTER:
    return ENTER;
  case ESC:
    return ESC;
  }
  return 0;
}
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

汐ya~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值