学生信息管理系统

学生信息管理系统

总体分析与设计

功能需求分析

1. 学生信息管理
  • 输入: 允许用户输入学生的信息,包括学号、姓名、性别、出生年月、专业和成绩。
  • 修改: 允许用户修改已存储的学生信息。
  • 查询: 允许用户通过学号查询学生信息。
  • 删除: 允许用户删除指定学号的学生信息。
  • 显示: 显示所有学生的信息。
  1. 班级信息管理
  • 输入: 允许用户输入班级信息。
  • 修改: 允许用户修改班级信息。
  • 查询: 允许用户查询班级信息。
  1. 课程信息管理
  • 输入: 允许用户输入课程信息。
  • 修改: 允许用户修改课程信息。
  • 查询: 允许用户查询课程信息。
  1. 学生成绩管理
  • 输入: 允许用户输入学生成绩。
  • 修改: 允许用户修改学生成绩。
  • 查询: 允许用户查询学生成绩。
  • 排序: 按成绩对学生进行排序。

功能需求框图

在这里插入图片描述

详细设计与实现

各功能的设计

2.1.1学生信息的输入、修改与查询

  • · 输入学生信息: 允许用户逐项输入新学生的学号、姓名、性别、出生日期、专业和成绩,并将其添加到系统中。
  • · 修改学生信息: 允许用户输入一个学号,然后提示输入新的学生信息,以更新该学生的详细信息。
  • · 查询学生信息: 允许用户输入一个学号,然后在系统中搜索具有该学号的学生,并输出其详细信息。

2.1.2班级信息的输入、修改与查询

  • · 输入班级信息: 允许用户输入班级的编号、名称、年级等信息,并将其添加到系统中。
  • · 修改班级信息: 允许用户输入班级编号,然后提示输入新的班级信息以更新系统中的班级记录。
  • · 查询班级信息: 允许用户输入班级编号,然后在系统中查找并输出该班级的详细信息。

2.1.3班级课程的输入、修改与查询

  • · 输入班级课程信息: 允许用户输入班级编号和课程信息,将课程信息关联到指定班级中。
  • · 修改班级课程信息: 允许用户输入班级编号和课程信息,更新指定班级的课程信息。
  • · 查询班级课程信息: 允许用户输入班级编号,输出该班级关联的所有课程信息。

2.1.4学生成绩的输入、修改与查询

  • 输入学生成绩: 允许用户输入学生的学号和课程成绩,将成绩信息关联到指定学生中。
  • 修改学生成绩: 允许用户输入学生的学号和新的课程成绩,更新指定学生的成绩记录。
  • 查询学生成绩: 允许用户输入学生的学号,输出该学生的所有课程成绩信息。

各功能的实现

2.2.1学生信息的输入、修改与查询

  • 输入学生信息:
// 添加学生信息
void addStudent()
{
    struct Student newStudent;
    int class_index;
    char class_name[50];

    if (num_classes == 0)
    {
        printf("请先添加班级信息。\n");
        return;
    }

    printf("请输入要添加学生的班级名称:");
    scanf("%s", class_name);

    class_index = findClassIndex(class_name);
    if (class_index == -1)
    {
        printf("未找到班级 %s 的信息。\n", class_name);
        return;
    }

    if (classes[class_index].num_students >= MAX_STUDENTS)
    {
        printf("班级 %s 的学生数已达到最大限制,无法添加更多学生。\n", class_name);
        return;
    }

    printf("请输入学号:");
    scanf("%s", newStudent.id);
    printf("请输入姓名:");
    scanf("%s", newStudent.name);
    printf("请输入性别 (M/F):");
    scanf(" %c", &newStudent.gender);
    printf("请输入出生年月 (yyyy-mm-dd):");
    scanf("%s", newStudent.birthdate);
    printf("请输入专业:");
    scanf("%s", newStudent.major);
    printf("请输入成绩:");
    scanf("%f", &newStudent.score);

    classes[class_index].students[classes[class_index].num_students++] = newStudent;
    printf("学生信息添加成功!\n");
}
  • 修改学生信息:
// 修改学生信息
void modifyStudent()
{
   int i, j, found = 0;
   char id[20];

   if (num_classes == 0)
   {
       printf("请先添加班级信息。\n");
       return;
   }

   printf("请输入要修改信息的学生学号:");
   scanf("%s", id);

   for (i = 0; i < num_classes; ++i)
   {
       for (j = 0; j < classes[i].num_students; ++j)
       {
           if (strcmp(classes[i].students[j].id, id) == 0)
           {
               printf("请输入新的姓名:");
               scanf("%s", classes[i].students[j].name);
               printf("请输入新的性别 (M/F):");
               scanf(" %c", &classes[i].students[j].gender);
               printf("请输入新的出生年月 (yyyy-mm-dd):");
               scanf("%s", classes[i].students[j].birthdate);
               printf("请输入新的专业:");
               scanf("%s", classes[i].students[j].major);
               printf("请输入新的成绩:");
               scanf("%f", &classes[i].students[j].score);
               printf("学生信息修改成功!\n");
               found = 1;
               break;
           }
       }
       if (found)
           break;
   }

   if (!found)
   {
       printf("未找到该学生学号的信息。\n");
   }
}
  • 查询学生信息:
// 查询学生成绩
void queryScore()
{
   int i, j;
   char id[20];
   int found = 0;
   if (num_classes == 0)
   {
       printf("请先添加班级信息。\n");
       return;
   }

   printf("请输入要查询成绩的学生学号:");
   scanf("%s", id);

   for (i = 0; i < num_classes; ++i)
   {
       for (j = 0; j < classes[i].num_students; ++j)
       {
           if (strcmp(classes[i].students[j].id, id) == 0)
           {
               printf("班级:%s\n", classes[i].name);
               printf("学号:%s\n", classes[i].students[j].id);
               printf("姓名:%s\n", classes[i].students[j].name);
               printf("成绩:%.2f\n", classes[i].students[j].score);
               found = 1;
               break;
           }
       }
   }

   if (!found)
   {
       printf("未找到该学生学号的信息。\n");
   }
}

2.2.2班级信息的输入、修改与查询

  • 输入班级信息:
// 添加班级信息
void addClass()
{
   struct Class newClass;
   if (num_classes >= MAX_CLASSES)
   {
       printf("班级数量已达到最大限制,无法添加更多班级。\n");
       return;
   }

   printf("请输入班级名称:");
   scanf("%s", newClass.name);
   newClass.num_students = 0;
   classes[num_classes++] = newClass;
   printf("班级信息添加成功!\n");
}
  • 修改班级信息:


// 修改班级信息
void modifyClass()
{
  char class_name[50];
  int class_index;
  if (num_classes == 0)
  {
      printf("当前没有班级信息。\n");
  }

  printf("请输入要修改信息的班级名称:");
  scanf("%s", class_name);

  class_index = findClassIndex(class_name);
  if (class_index == -1)
  {
      printf("未找到班级 %s 的信息。\n", class_name);
      return;
  }

  printf("请输入新的班级名称:");
  scanf("%s", classes[class_index].name);
  printf("班级信息修改成功!\n");
}

  • 查询班级信息:
// 查询班级信息
void queryClass()
{
   char class_name[50];
   int class_index;
   int i;
   if (num_classes == 0)
   {
       printf("当前没有班级信息。\n");
       return;
   }

   printf("请输入要查询信息的班级名称:");
   scanf("%s", class_name);

   class_index = findClassIndex(class_name);
   if (class_index == -1)
   {
       printf("未找到班级 %s 的信息。\n", class_name);
       return;
   }

   printf("班级:%s\n", classes[class_index].name);
   printf("学生数量:%d\n", classes[class_index].num_students);
   for (i = 0; i < classes[class_index].num_students; ++i)
   {
       printf("  学号:%s\n", classes[class_index].students[i].id);
       printf("  姓名:%s\n", classes[class_index].students[i].name);
       printf("  性别:%c\n", classes[class_index].students[i].gender);
       printf("  出生年月:%s\n", classes[class_index].students[i].birthdate);
       printf("  专业:%s\n", classes[class_index].students[i].major);
       printf("  成绩:%.2f\n", classes[class_index].students[i].score);
   }
}

2.2.3班级课程的输入、修改与查询

  • 输入班级课程信息:
// 添加课程信息
void addCourse()
{
  struct Course newCourse;
  if (num_courses >= MAX_COURSES)
  {
      printf("课程数量已达到最大限制,无法添加更多课程。\n");
      return;
  }

  printf("请输入课程代码:");
  scanf("%s", newCourse.code);
  printf("请输入课程名称:");
  scanf("%s", newCourse.name);
  printf("请输入授课教师:");
  scanf("%s", newCourse.instructor);

  courses[num_courses++] = newCourse;
  printf("课程信息添加成功!\n");
}
  • 修改班级课程信息:
// 修改课程信息
void modifyCourse()
{
  char course_code[20];
  int i;
  int found = 0;
  if (num_courses == 0)
  {
      printf("当前没有课程信息。\n");
      return;
  }

  printf("请输入要修改信息的课程代码:");
  scanf("%s", course_code);

  for (i = 0; i < num_courses; ++i)
  {
      if (strcmp(courses[i].code, course_code) == 0)
      {
          printf("请输入新的课程名称:");
          scanf("%s", courses[i].name);
          printf("请输入新的授课教师:");
          scanf("%s", courses[i].instructor);
          printf("课程信息修改成功!\n");
          found = 1;
          break;
      }
  }

  if (!found)
  {
      printf("未找到课程代码 %s 的信息。\n", course_code);
  }
}
  • 查询班级课程信息:
// 查询课程信息
void queryCourse()
{
    int i;
    int found = 0;
    char course_code[20];
    if (num_courses == 0)
    {
        printf("当前没有课程信息。\n");
        return;
    }

    printf("请输入要查询信息的课程代码:");
    scanf("%s", course_code);

    for (i = 0; i < num_courses; ++i)
    {
        if (strcmp(courses[i].code, course_code) == 0)
        {
            printf("课程代码:%s\n", courses[i].code);
            printf("课程名称:%s\n", courses[i].name);
            printf("授课教师:%s\n", courses[i].instructor);
            found = 1;
            break;
        }
    }

    if (!found)
    {
        printf("未找到课程代码 %s 的信息。\n", course_code);
    }
}

2.2.4学生成绩的输入、修改与查询

  • · 输入学生成绩:
void addScore()
{
   char id[20];
   int i, j;
   int found = 0;
   if (num_classes == 0)
   {
       printf("请先添加班级信息。\n");
       return;
   }

   printf("请输入要添加成绩的学生学号:");
   scanf("%s", id);

   for (i = 0; i < num_classes; ++i)
   {
       for (j = 0; j < classes[i].num_students; ++j)
       {
           if (strcmp(classes[i].students[j].id, id) == 0)
           {
               printf("请输入成绩:");
               scanf("%f", &classes[i].students[j].score);
               printf("学生成绩添加成功!\n");
               found = 1;
               break;
           }
       }
   }

   if (!found)
   {
       printf("未找到该学生学号的信息。\n");
   }
}
  • · 修改学生成绩:
// 修改学生成绩
void modifyScore()
{
   char id[20];
   int found = 0;
   int i, j;
   if (num_classes == 0)
   {
       printf("请先添加班级信息。\n");
       return;
   }

   printf("请输入要修改成绩的学生学号:");
   scanf("%s", id);

   for (i = 0; i < num_classes; ++i)
   {
       for (j = 0; j < classes[i].num_students; ++j)
       {
           if (strcmp(classes[i].students[j].id, id) == 0)
           {
               printf("请输入新的成绩:");
               scanf("%f", &classes[i].students[j].score);
               printf("学生成绩修改成功!\n");
               found = 1;
               break;
           }
       }
   }

   if (!found)
   {
       printf("未找到该学生学号的信息。\n");
   }
}
  • · 查询学生成绩:
// 查询学生信息
void queryStudent()
{

    char id[20];
    int found = 0;
    int i, j;
    if (num_classes == 0)
    {
        printf("请先添加班级信息。\n");
        return;
    }

    printf("请输入要查询信息的学生学号:");
    scanf("%s", id);

    for (i = 0; i < num_classes; ++i)
    {
        for (j = 0; j < classes[i].num_students; ++j)
        {
            if (strcmp(classes[i].students[j].id, id) == 0)
            {
                printf("班级:%s\n", classes[i].name);
                printf("学号:%s\n", classes[i].students[j].id);
                printf("姓名:%s\n", classes[i].students[j].name);
                printf("性别:%c\n", classes[i].students[j].gender);
                printf("出生年月:%s\n", classes[i].students[j].birthdate);
                printf("专业:%s\n", classes[i].students[j].major);
                printf("成绩:%.2f\n", classes[i].students[j].score);
                found = 1;
                break;
            }
        }
    }

    if (!found)
    {
        printf("未找到该学生学号的信息。\n");
    }
}

总结

​ 在参与学生信息管理系统的设计和实现过程中,我深化了对C语言中数据结构和算法的理解。通过实际项目的经验,我学会了如何有效地组织和管理数据,同时提升了解决问题的能力,如处理输入输出、文件操作和排序等常见需求。编码和调试过程中,我逐步提高了对C语言的熟练度。

然而,在这一过程中,我也意识到了代码的健壮性和可扩展性的重要性。特别是在处理用户输入和考虑边界条件时,我发现这些方面需要更多的注意和练习。

总体而言,这次实验让我成功地完成了一个功能完整的学生信息管理系统,达到了预期的学习目标。它不仅加强了我的编程技能,也为我未来更复杂项目的挑战奠定了基础。我计划继续提升代码质量,探索更多高级特性和技术应用,以进一步发展我的计算机科学能力。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值