C语言学生管理系统(直接复制即可使用)

#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 chinese;
  int math;
  int english;
  int data_structure;
  int physics;
  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 *menull[] =
    {
        "自主添加成绩",
        "导入随机成绩",
        "学生信息查找",
        "学生信息排序",
        "学生信息修改",
        "学生信息删除",
        "    返回    ",
        "          ",
}; //教师端界面
char *menulll[] =
    {
        "学生信息打印",
        "学生信息排序",
        "学生信息查找",
        "    返回    ",
        "          ",
}; //学生端界面
char *menu_student[] =
    {
        "学号",
        "语文",
        "数学",
        "英语",
        "数据结构",
        "物理",
        "平均分",
        "总分",
};
CONSOLE_CURSOR_INFO cci;
COORD pos = {0, 0};
void color(short x);                                                                                          //这是一个改变字体颜色的函数
void HideCursor(HANDLE hout);                                                                                 //隐藏光标
void first_menu(HANDLE hout, int index, int number);                                                          //第一个界面
void teacher_jurisdiction(HANDLE hout, char **menull, int size, int index, int number);                       //教师端界面
void student_jurisdiction(HANDLE hout, char **menulll, int size, int index, int number);                      //学生端界面
void add_self(HANDLE hout, int number);                                                                       //自主添加成绩
void add_random(HANDLE hout, int number);                                                                     //添加随机成绩
void printf_now_message(HANDLE hout, int number);                                                             //打印成绩
void sort_message(HANDLE hout, int number);                                                                   //顺序排序
void recover_message(HANDLE hout, int number);                                                                //恢复默认顺序
void find_message(HANDLE hout, int number);                                                                   //输入学号查找学生
void alter_message(HANDLE hout, int index, int number);                                                       //修改信息
void delete_message(HANDLE hout, int index, int number);                                                      //删除学生信息
void general_keyboard_update_menu(HANDLE hout, int x, int y, char **option, int size, int index, int number); //更新菜单选项,参数(句柄,选项x位置,选项之间y距离,选项数组,选项个数,选择位置)
void goto_x_y(HANDLE hout, int x, int y);                                                                     //将光标移到想x,y位置
int get_userinput(int *index, int size);                                                                      //检测键盘输入改变x轴
int special_get_userinput(int *index, int size);                                                              //检测键盘输入改变x轴2
int get_y_userinput(int *indey, int size);                                                                    //检测键盘输入改变y轴

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, 54, 20, 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");
        teacher_jurisdiction(hout, menull, NR(menull), 0, number);
        break;
      case 1:
        system("cls");
        student_jurisdiction(hout, menulll, NR(menulll), 0, number);
        break;
      case 2:
        exit(0);
      }
    }
  }
}

int get_userinput(int *index, int size)
{
  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)
{
  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 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%-12s%-12s",
             menu_student[0],
             menu_student[1],
             menu_student[2],
             menu_student[3],
             menu_student[4],
             menu_student[5],
             menu_student[6],
             menu_student[7]);
    }
    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:
        sort_message(hout, number);
        printf_now_message(hout, number);
        goto_x_y(hout, 0, 23);
        printf("                                           ");
        goto_x_y(hout, 0, 23);
        color(2);
        printf("[成功]正在使用教师权限进行操作");
        break;
      case 4:
        alter_message(hout, 1, number);
        break;
      case 5:
        delete_message(hout, 1, number);
        break;
      case 6:
        system("cls");
        recover_message(hout, number);
        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("[成功]正在使用学生权限进行操作");
    general_keyboard_update_menu(hout, 0, 10, menulll, size, index, number);
    if (ret == ESC)
      exit(0);
    if (ret == ENTER)
    {
      switch (index)
      {
      case 0:
        if (number == 0)
        {
          goto_x_y(hout, 0, 23);
          color(772);
          printf("                                           ");
          goto_x_y(hout, 0, 23);
          color(772);
          printf("[操作失败]暂无数据");
        }
        printf_now_message(hout, number);
        break;
      case 1:
        sort_message(hout, number);
        printf_now_message(hout, number);
        goto_x_y(hout, 0, 23);
        color(2);
        printf("[操作成功]正在使用学生权限进行操作");
        break;
      case 2:
        find_message(hout, number);
        break;
      case 3:
        system("cls");
        recover_message(hout, number);
        first_menu(hout, 0, number);
        break;
      }
    }
    GetConsoleCursorInfo(hout, &cci);
    ret = get_userinput(&index, size);
  }
  system("cls");
}

void add_random(HANDLE hout, int number)
{
  student_message[number].serial = number;
  student_message[number].number_stu = rand() % 8797369 + 1202630;
  student_message[number].chinese = rand() % 150 + 1;
  student_message[number].math = rand() % 150 + 1;
  student_message[number].english = rand() % 150 + 1;
  student_message[number].data_structure = rand() % 150 + 1;
  student_message[number].physics = rand() % 150 + 1;
  student_message[number].total = student_message[number].physics + student_message[number].chinese + student_message[number].math + student_message[number].english + student_message[number].data_structure;
  student_message[number].average_score = (student_message[number].total) / 5;
  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%-12s%-12s",
         menu_student[0],
         menu_student[1],
         menu_student[2],
         menu_student[3],
         menu_student[4],
         menu_student[5],
         menu_student[6],
         menu_student[7]);
  for (i = 1; i <= number; i++)
  {
    goto_x_y(hout, 20, i);
    printf("%-12d%-12d%-12d%-12d%-12d%-12d%-12d%-8d",
           student_message[i].number_stu,
           student_message[i].chinese,
           student_message[i].math,
           student_message[i].english,
           student_message[i].data_structure,
           student_message[i].physics,
           student_message[i].average_score,
           student_message[i].total);
  }
}

void sort_message(HANDLE hout, int number)
{
  int i, j;
  for (i = 1; i <= number; i++)
  {
    for (j = i + 1; j <= number; j++)
    {
      if (student_message[i].total < student_message[j].total)
      {
        student_message[0] = student_message[i];
        student_message[i] = student_message[j];
        student_message[j] = student_message[0];
      }
    }
  }
}

void recover_message(HANDLE hout, int number)
{
  int i, j;
  for (i = 1; i <= number; i++)
  {
    for (j = i + 1; j <= number; j++)
    {
      if (student_message[i].serial > student_message[j].serial)
      {
        student_message[0] = student_message[i];
        student_message[i] = student_message[j];
        student_message[j] = student_message[0];
      }
    }
  }
}

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%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].chinese,
               student_message[i].math,
               student_message[i].english,
               student_message[i].data_structure,
               student_message[i].physics,
               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%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].chinese,
               student_message[i].math,
               student_message[i].english,
               student_message[i].data_structure,
               student_message[i].physics,
               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)
        sort_message(hout, number);
      printf_now_message(hout, number);
      teacher_jurisdiction(hout, menull, NR(menull), 0, number);
      break;
    }
  }
}

int special_get_userinput(int *index, int size)
{
  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;
}

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%-12d%-12d%-8d",
           student_message[i].number_stu,
           student_message[i].chinese,
           student_message[i].math,
           student_message[i].english,
           student_message[i].data_structure,
           student_message[i].physics,
           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("[查找失败]无法找到该数据");
  }
}

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].chinese);
  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);
  getchar();
  goto_x_y(hout, 68, number);
  scanf("%d", &student_message[number].data_structure);
  getchar();
  goto_x_y(hout, 80, number);
  scanf("%d", &student_message[number].physics);
  getchar();
  student_message[number].total = student_message[number].physics + student_message[number].chinese + student_message[number].math + student_message[number].english + student_message[number].data_structure;
  student_message[number].average_score = (student_message[number].total) / 5;
  color(7);
  goto_x_y(hout, 20, number);
  printf("%-12d%-12d%-12d%-12d%-12d%-12d%-12d%-8d",
         student_message[number].number_stu,
         student_message[number].chinese,
         student_message[number].math,
         student_message[number].english,
         student_message[number].data_structure,
         student_message[number].physics,
         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%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].chinese,
               student_message[i].math,
               student_message[i].english,
               student_message[i].data_structure,
               student_message[i].physics,
               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%-12d%-12d%-8d",
               student_message[i].number_stu,
               student_message[i].chinese,
               student_message[i].math,
               student_message[i].english,
               student_message[i].data_structure,
               student_message[i].physics,
               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%-12d%-12d%-8d",
               student_message[index].number_stu,
               student_message[index].chinese,
               student_message[index].math,
               student_message[index].english,
               student_message[index].data_structure,
               student_message[index].physics,
               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].chinese);
        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);
        if (indey == 5)
          color(128);
        else
          color(7);
        goto_x_y(hout, 68, index);
        printf("%d", student_message[index].data_structure);
        if (indey == 6)
          color(128);
        else
          color(7);
        goto_x_y(hout, 80, index);
        printf("%d", student_message[index].physics);
        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].chinese);
      }
      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);
      }
      if (indey == 5)
      {
        color(128);
        goto_x_y(hout, 68, index);
        printf("   ");
        goto_x_y(hout, 68, index);
        scanf("%d", &student_message[index].data_structure);
      }
      if (indey == 6)
      {
        color(128);
        goto_x_y(hout, 80, index);
        printf("   ");
        goto_x_y(hout, 80, index);
        scanf("%d", &student_message[index].physics);
      }
      student_message[index].total = student_message[index].physics + student_message[index].chinese + student_message[index].math + student_message[index].english + student_message[index].data_structure;
      student_message[index].average_score = (student_message[index].total) / 5;
      color(7);
      goto_x_y(hout, 20, index);
      printf("%-12d%-12d%-12d%-12d%-12d%-12d%-12d%-8d",
             student_message[index].number_stu,
             student_message[index].chinese,
             student_message[index].math,
             student_message[index].english,
             student_message[index].data_structure,
             student_message[index].physics,
             student_message[index].average_score,
             student_message[index].total);
      break;
    }
  }
}
int get_y_userinput(int *indey, int size)
{
  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;
}

直接上代码,不多bb。

记录学习,大佬勿喷。

注意:键盘W S A D控制光标上下左右移动,回车即确定。

上几张图片:

 

 

 

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值