♻️ 资源大小7.97MB➡️资源下载https://download.csdn.net/download/s1t16/87430268学生选课系统此系统用于管理学生选课服务于高校学生和教师。为学生提供了进行选课、根据需求查询课程、查询选课结果、删除选课结果和个人信息管理等功能。为教师提供了查看选课情况、删除选课、统计选课信息、课程管理、个人信息管理等功能。该系统实现了选课的电子化能够较为高效地管理在校学生的选课信息。该系统主要服务于学生和教师两类人群。学生使用该系统首先需要按照系统提示输入规定格式的学号和正确的密码。若学生无此系统的账号可以选择“注册”选项以完成注册。完成登录后系统显示“学生选课”、“查询课程”、“查询选课结果”、“删除选课结果”、“个人信息管理”、“退出登录”六个选项。选择“学生选课”选项系统会显示全部课程及其相关信息学生应输入相应课程编号以完成选课。选择“查询课程”选项系统会提供根据课程名、开课学院、课余量、选课人数查看课程学生根据自己的需求选择查询方式。选择“查询选课结果”学生可以查看到曾经选修过的课程。选择“删除选课结果”学生可在未开课之前删除自己的选课。选择“个人信息管理”学生对个人信息中的电话、密码及邮箱进行修改。教师使用该系统首先也需完成登录或注册。登录成功后可进行选课管理、课程管理、信息管理。教师可查看开设的课程、查询学生信息、删除人数少于 30 的课程、统计课程数目和排序课程。可查询、添加、修改课程和在选课开始前删除课程。在信息管理模块中教师可以修改自己的密码和邮箱。模块图如下接口定义规范根据模块的具体功能用英文命名接口两个单词之间使用英文下划线分隔。例如用于显示学生界面主菜单的接口命名为 student_mainmenu。系统的数据结构描述主要使用 MySQL 数据库存储该系统所需的数据。通过三张表分别存储学生、教师、课程的相关信息。存储学生信息的表命名为 students其中存储学生的学号、学院、专业、姓名、性别、电话、密码、邮箱和选课存储教师信息的表命名为 teachers其中包含教师的工号、学院、姓名、密码和邮箱存储课程信息的表命名为 classes其中包含课程编号、开课学院、课程名称、学分、学时、课程性质、开课教师、开课时间、结课时间、上课时间段、上课地点、限制人数、已选人数、教材信息和课程简介。具体信息如下 ER 图其中学生和教师的密码以 base64 加密的形式进行存储其他信息均明文存储。通过引用头文件 mysql.h、以字符串的形式编写和储存 SQL 语句、引用头文件中的相关函数以实现对数据库的连接和操作。除此之外首次运行该程序时会首先运行配置程序需要用户输入数据库的相关信息如端口号用户名密码等以连接数据库。用户输入的这些信息则通过文件储存。系统的开发环境及运行环境描述开发环境硬件环境组内成员 2 人使用 Intel Core 平台笔记本、1 人使用 AMD Ryzen 平台笔记本、 1 人使用 AMD Ryzen 桌面平台进行开发兼容性良好。软件环境整个系统在 64 位 Windows 10保持自动更新的 Visual Studio 2019Community (16.7.2)的环境下开发。系统环境变量在安装 MySQL 时添加 %MYSQL_HOME%D:\mysql-8.0.21-winx64。VS 开 发 采 用 Debug x64 环 境 预 处 理 器 定 义 添 加_CRT_SECURE_NO_WARNINGS 以使用 gets 等被 VS 认为内存不安全的函数 包含目录添加%MYSQL_HOME%\include库目录添加%MYSQL_HOME%\lib 调试环境为 PATH%MYSQL_HOME%\bin;警告等级为/W3 时代码最终 0 error0warning。编译导出时采用 Release x64 环境设置同上。系统默认编码为 GB2312代码保存编码为带 BOM 的 UTF-8MySQL 默认编码为 utf8中文兼容性良好。运行环境详见测试报告。模块详细设计int main_entrance()该模块主要功能为显示主菜单让用户输入一个数字以选择自己的身份根据用户具体选择的身份再进入到教师或学生登录界面。无传入值传出值为 0。若用户未按照要求输入相应的值程序会给出提示并且要求用户重新输入。void student_login()该模块主要功能为完成学生的登录或注册。首先在控制台显示一个菜单要求学生选择需要进行的操作登录/注册/返回上层。若学生用户选择登录选项系统会提示学生用户输入学号并检查输入的格式是否正确。学生用户输入正确格式的学号之后系统提示学生用户输入密码并将学生用户输入的密码与储存在数据库中的正确密码比对若相同则进入到学生的主界面若输入密码与数据库中的密码不一致则提示学生用户密码不正确此时学生用户可以继续输入密码或返回上一级其中学号和密码均以字符串的形式存储若学生用户选择注册选项程序进入 student_register()模块若学生用户选择返回上层程序再次进入 main_entrance()模块。此模块无传入、返回值若学生用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。void student_mainmenu()该模块主要功能为显示学生的主菜单提示学生用户输入相应选项并对学生用户的输入进行处理。进入该模块首先在控制台输出学生主菜单包含 6 个选项分别为 ① 学生选课② 查询课程③ 查询选课结果④ 删除选课结果⑤ 个人信息管理⑥ 退出登录。然后提示学生用户输入相应的整数。若学生用户选择①系统进入 student_select_course()模块若学生用户选择 ②系统进入 student_query_course()模块若学生用户选择 ③系统进入 student_query_result() 模块若学生用户选择 ④系统进入 student_delete_course()模块若学生用户选择 ⑤系统进入 student_manage_info()模块若学生用户选择 ⑥系统再次返回 main_entrance()模块。此模块无传入、返回值若学生用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。void student_register()该模块主要功能使完成学生的注册。首先让学生用户输入学号系统首先会判断学生用户的输入是否符合规定格式若不符合规定格式则要求学生用户重新输入。之后系统会将学生用户输入的学号与在数据库中已有的学号对比若发现与数据库中已有的学号重复则提示学生用户该学号以注册并重新获取输入。接收到符合要求的学号之后系统会继续要求学生用户输入密码、学院、专业、姓名、性别、电话、邮箱。其中输入性别、电话、邮箱时系统均会判断输入是否符合规范。性别必须为男或女电话必须为 11 位数字邮箱必须.***格式。学生用户的输入均以字符串的形式储存。此模块无传入、返回值若学生用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。void student_select_course()此模块主要功能为完成学生的选课。进入该模块系统首先将所有课程的相关信息输出到控制台并提示学生用户输入课程编号以完成选课学生用户以字符串的形式输入课程编号后系统首先进入 student_check_class_exist()模块以判断课程编号是否存在然后从数据库中提取出该学生的选课情况若该学生已选满三节课则无法进行选课操作若学生未选满三节课则判断已选的课中是否与学生此次想选的课程重复若有重复则无法完成选课操作之后系统会从数据库中提取出该课程的已选人数和限制人数若已选人数与限制人数相等说明此课程已满无法选课。最后系统会进入 check_timeClash()模块以判断选的课程是否与已选课程有时间冲突若时间上有冲突则无法完成选课。若上述限制条件均满足系统将学生用户输入的课程编号加入到数据库学生的相关信息中并提示学生用户选课成功。此模块无传入、返回值。void student_query_course()此模块主要功能是完成学生对课程的查询。进入该模块系统首先在控制台输出菜单让学生用户输入一个整数以选择查询方式将学生用户的输入以整数形式储存。该菜单包括 6 个选项① 根据课程名查询② 根据开课学院查询③ 根据课余量排序所有课程④ 根据选课人数排序所有课程⑤ 查看课程详细信息⑥ 返回学生主菜单。若学生用户选择 ① 系统首先提示学生用户输入课程名称并接收学生用户的输入以字符串的形式储存。然后通过 SQL 语句在数据库中查询课程的相应信息并利用 print_class()模块将查询结果输出到控制台。若学生用户选择 ②系统首先提示学生用户输入开课学院名称并接收学生用户的输入以字符串的形式储存。然后通过 SQL 语句在数据库中查询课程的相应信息并利用 print_class() 模块将查询结果输出到控制台。若学生用户选择 ③系统通过 SQL 语句从数据库中按照限制人数-已选人数的大小排序取出课程并利用 print_class()模块将查询结果输出到控制台。若学生用户选择 ④ 系统通过 SQL 语句从数据库中按照已选的大小排序取出课程并利用 print_class()模块将查询结果输出到控制台。若学生用户选择 ⑤系统将从数据库中查找出开课时间、结课时间、上课时间段、上课地点、限制人数、已选人数、教材信息、课程简介等课程详细信息并利用 print_class() 模块将查询结果输出到控制台。若学生用户选择 ⑥则返回主菜单。此模块无传入、返回值若学生用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。void student_query_result()此模块主要用于查询该学生用户的选课结果通过 SQL 语句利用子查询从数据库中查找出相应信息并利用 print_class()模块将查询结果输出到控制台。此模块无传入、返回值。void student_delete_course()此模块用于删除学生用户已选的课程。进入此模块后系统首先从数据库中查找出此学生用户已选的课程及其相关信息并输出到控制台随后提示学生用户输入课程编号学生用户输入课程编号后系统会自动判断学生用户是否选择了该课程和该课程是否已开课若学生用户未选择该课程或该课程已开课则提示学生用户删除课程失败。否则则通过 SQL 语句在数据库中删除相应信息并提示学生用户删除成功。该模块无传入和返回值。void student_manage_info()此模块用于学生用户的个人信息管理进入该模块系统首先在控制台上显示菜单提示用户选择需要修改的信息用户按要求输入一个 1 至 4 之间的整数以修改自己的电话、密码、邮箱或返回上一级菜单。系统接受用户输入的电话、密码或邮箱并将其储存在字符串中。然后通过 SQL 语句修改数据库中的对应信息。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。void student_search_specific_imformation()此模块用于查找并显示一门课的详细信息。进入该模块之后系统首先通过 SQL 语句从数据库中找出所有课程的信息并输出到控制台然后提示用户输入课程编号以查询该课程更详细的信息。将接收到的输入储存在字符串中然后通过 SQL 语句在数据库中查找出该课程的开课时间结课时间上课时间段上课地点限制人数已选人数教材信息和课程简介并将其输出到控制台。此模块无传入、返回值若用户输入错误的课程编号程序会给出提示此课程不存在并要求用户重新输入。int student_check_class_exist(char* ) 此模块用于检查用户输入的课程编号是否存在。该模块首先假设输入的课程存在通过 SQL 语句在数据库中查找该课程的相应信息并将查找出来的结果储存在结果集中若结果集为空则说明数据库中没有相应课程的信息此时系统提示用户无此课程并返回 1。若结果集不为空则说明该课程存在返回 0。此模块接受一个指向字符的指针变量使用时将字符数组的名称传入该模块。返回值为一个整数即 1 或 0。void print_class(char*)此模块用于在控制台打印从数据库中取出的数据。传入以字符数组形式储存的 SQL 语句无返回值。出于界面美观的需要该模块会将查找结果的后八列删除后再显示在控制台。int check_stuId(char* ) 此模块用于检查学生输入的学号是否符合 10 位数字的的正确格式。传入以字符数组形式储存学号首先以 while 循环遍历整个字符数组得到该字符数组的大小若大小不为 10则表明学号格式错误。若大小为 10再次遍历整个数组判断其中每个字符是否在 0 至 9 之间若所有字符都在 0 至 9 之间则说明学号格式正确。该模块须接收一个指向字符的指针返回 0 或 1返回 0 表示学号不符合规定返回 1 表示学号格式正确。int check_phone(char* ) 此模块用于检查电话是否符合 11 位数字的的正确格式。传入以字符数组形式储存电话首先以 while 循环遍历整个字符数组得到该字符数组的大小若大小不为 11则表明电话格式错误。若大小为 11再次遍历整个数组判断其中每个字符是否在 0 至 9 之间若所有字符都在 0 至 9 之间则说明电话格式正确。该模块须接收一个指向字符的指针返回 0 或 1返回 0 表示电话不符合规定返回 1 表示电话格式正确。int check_email(char* ) 此模块用于检查邮箱是否符合.***的格式。传入用户输入的邮箱首先通过 while 循环遍历得到该字符数组的大小规定长度不能超过 50若超过 50则格式错误。随后判断该字符数组第一个和最后一个字符若第一个字符为“” 或最后一个字符为“.”,则格式错误。随后再次遍历整个字符串用两个数组分别储存“”和“.”在字符数组中的序号用两个整数分别储存“”和“.”的数量。随后判断若“.”在“”前则格式错误若“”或“.”的数量不为 1则格式错误。该模块须接收一个指向字符的指针返回 0 或 1返回 0 表示邮箱不符合规定返回 1 表示邮箱格式正确。int check_classId(char* ) 此模块用于检查课程编号是否符合 6 位数字的的正确格式。传入以字符数组形式储存课程编号首先以 while 循环遍历整个字符数组得到该字符数组的大小若大小不为 6则表明课程编号格式错误。若大小为 6再次遍历整个数组判断其中每个字符是否在 0 至 9 之间若所有字符都在 0 至 9 之间则说明课程编号格式正确。该模块须接收一个指向字符的指针返回 0 或 1返回 0 表示课程编号不符合规定返回 1 表示课程编号格式正确。void teacher_login();该模块主要功能为完成教师的登录或注册。首先在控制台显示一个菜单要求教师选择需要进行的操作登录/注册/返回上层。若用户选择登录选项系统会提示用户输入教师工号并检查输入的格式是否正确。用户输入正确格式的之后系统提示用户输入密码并将用户输入的密码通过 SQL 语句与储存在数据库中的正确密码比对若相同则进入到教师的主界面若输入密码与数据库中的密码不一致则提示用户密码不正确此时用户可以重新输入用户名与密码或返回上一级其中用户名和密码均以字符串的形式存储若用户选择注册选项程序进入 teacher_reg()模块若用户选择返回上层程序再次进入 main_entrance()模块。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_reg();该模块主要功能使完成教师的注册。首先让用户输入教师工号系统首先会判断用户的输入是否符合规定格式若不符合规定格式则要求用户重新输入。之后系统会通过 SQL 语句将用户输入的工号与在数据库中已有的工号对比若发现与数据库中已有的工号重复则提示用户该工号以注册并重新获取输入。接收到符合要求的工号之后系统会继续要求用户输入密码、学院、姓名、邮箱。其中输入邮箱时系统均会判断输入是否符合规范。邮箱必须.***格式。用户的输入均以字符串的形式储存。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_mainmenu();该模块主要功能为显示教师的主菜单提示用户输入相应选项并对用户的输入进行处理。进入该模块首先在控制台输出教师主菜单包含 4 个选项分别为 ① 选课管理② 课程管理③ 信息管理④ 退出登录。然后提示用户输入相应的整数。若用户选择 ①系统进入 teacher_select_managemenu 模块若用户选择 ②系 统 进 入 teacher_course_managemenu() 模 块 若 用 户 选 择 ③ 系 统 进 入teacher_manage_info()模块若用户选择 ④系统再次返回 main_entrance()模块。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_select_managemenu();该模块主要功能为显示教师选课管理功能的菜单提示用户输入相应选项并对用户的输入进行处理。进入该模块首先在控制台输出教师选课管理菜单包含 6 个选项分别为 ① 查看开设的课程② 查询学生信息③ 删除课程(选课结束后)④ 统计课程数目⑤ 排序课程⑥ 退出登录。然后提示用户输入相应的整数。若用户选择 ①系统进入 teacher_mycourse()模块若用户选择 ②系统进入 teacher_findcourse()模块若用户选择 ③系统进入 teacher_30delete()模块若用户选择 ④系统进入 teacher_totalcourse()模块若用户选择 ⑤系统进入 teacher_sortcourse()模块若用户选择 ⑥系统再次返回 teacher_mainmenu()模块。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_mycourse();该模块主要功能为查询教师自己开设过的课程的选课情况及其详细信息提示用户输入相应选项并对用户的输入进行处理。进入该模块之后系统首先通过 SQL 语句从数据库中找出所有当前登录的教师开设过得课程的信息并输出到控制台然后提示用户输入课程编号以查询该课程更详细的信息。将接收到的输入储存在字符串中然后通过 SQL 语句在数据库中查找出该课程的开课时间结课时间上课时间段上课地点限制人数已选人数教材信息和课程简介并将其输出到控制台。此模块无传入、返回值若用户输入错误的课程编号程序会给出提示此课程不存在并要求用户重新输入。void teacher_findcourse();该模块主要功能为根据学生姓名或/和课程名称查询学生信息提示用户输入相应选项并对用户的输入进行处理。进入该模块之后首先在控制台输出选择菜单包含 3 个选项分别为 ① 根据课程名称查询② 根据学生姓名查询③ 返回上一级菜单。然后提示用户输入相应的整数。如果用户选择 ①则提示用户输入课程名称查询已选择课程的所有学生信息将接收到的输入储存在字符串中然后通过 SQL 语句在数据库中查找出已选择课程的所有学生信息并将其输出到控制台。如果用户选择 ②则提示用户输入学生名称查询该学生信息将接收到的输入储存在字符串中然后通过 SQL 语句在数据库中查找出该学生信息并将其输出到控制台。如果用户选择 ③则返回上一级菜单。此模块无传入、返回值若用户输入错误的课程名称或学生名称程序会给出提示此课程或学生不存在并要求用户重新输入。void teacher_30delete();此模块的主要功能是在选课结束后选择删除选课人数少于 30 人的相应课程提示用户输入相应选项并对用户的输入进行处理。进入该模块之后首先通过 SQL 语句从数据库中找出所有当前登录的教师开设过得课程的信息并输出到控制台并判断选课是否结束若选课未结束则输出语句告诉用户无法删除并在用户确认后返回上一菜单若选课已结束输出选择菜单包含 2 个选项分别为 ① 进行课程的删除② 返回上一级菜单。然后提示用户输入相应的整数。如果用户选择①则提示用户输入课程编号后通过 SQL 语句从数据库中找出相应课程信息输出到控制台同时通过在数据库判断该课程选课人数是否超过 30 人若超过则输出语句告诉用户无法删除并在用户确认后返回选择菜单若未超过三十人则输出菜单询问用户是否删除① 是/② 否若用户选择 ① 则删除该课程及相应学生选课信息若用户选择 ② 则返回选择菜单如果用户选择 ②则返回上一级菜单。此模块无传入、返回值若用户输入错误的课程编号程序会给出提示此课程不存在并要求用户重新输入。void teacher_totalcourse();此模块主要功能是统计教师自己开设过的课程数目。系统通过 SQL 语句从数据库中同级教师开设过的课程数目并将查询结果输出到控制台。此模块无传入、返回值。void teacher_sortcourse();此模块主要功能是按选课人数排序所有教师开设过的课程。系统通过 SQL 语句从数据库中按照已选的大小排序取出课程并利用 print_class()模块将查询结果输出到控制台。此模块无传入、返回值。void teacher_course_managemenu();该模块主要功能为显示教师课程管理功能的菜单提示用户输入相应选项并对用户的输入进行处理。进入该模块首先在控制台输出教师选课管理菜单包含 5 个选项分别为 ① 查询课程② 添加课程③ 修改课程④ 删除课程(选课开始前)⑤ 退出登录。然后提示用户输入相应的整数。若用户选择 ①系统进入 teacher_course_list()模块若用户选择 ②系统进入 teacher_course_add()模块若用户选择 ③系统进入 teacher_course_edit()模块若用户选择 ④系统进入 teacher_course_delete()模块若用户选择 ⑤系统再次返回 teacher_mainmenu() 模块。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_course_list();该模块主要功能为查询所有课程及其详细信息提示用户输入相应选项并对用户的输入进行处理。进入该模块之后系统首先通过 SQL 语句从数据库中找出所有当前登录的教师开设过得课程的信息并输出到控制台然后提示用户输入课程编号以查询该课程更详细的信息。将接收到的输入储存在字符串中然后通过 SQL 语句在数据库中查找出该课程的开课时间结课时间上课时间段上课地点限制人数已选人数教材信息和课程简介并将其输出到控制台。此模块无传入、返回值若用户输入错误的课程编号程序会给出提示此课程不存在并要求用户重新输入。void teacher_course_add();此模块主要功能为完成教师添加课程的操作。教师进入该模块后首先选择开课时间选择学年只需按一位 0-8 的数字即可若按其他的键则提示重新输入学期也只需按 1 或 2 自动输入为第一/二学期输入后系统会自动格式化为 202-202学年第*学期的格式并且查找出当前学期该教师已经开设的选修课和必修课数量输出接着提示输入需要开设必修课还是选修课若已开设选修课数量大于等于 2则无法继续开设选修课并提示本学期开设选修课已达上限。随后系统提示输入课程编号和名称编号需要通过 10 位数字的检测输入完之后会和数据库已有进行比较若已存在则提示冲突。通过检验后继续提示输入课程学分和学时允许一位小数开课和结课周次为 1-20 间整数若输入其他内容则提示重新输入。随后系统自动格式化为 202-202学年第学期第周 周:-:*的时间格式与后续输入的经过验证的上课地点、人数上限、简介、教材信息共同插入数据库的课程信息表内并提示加课成功。此模块无传入、返回值。void teacher_course_edit();此模块的主要功能是在修改课程。提示用户输入相应选项并对用户的输入进行处理。进入该模块之后首先通过 SQL 语句从数据库中找出所有当前登录的教师开设过得课程的信息并输出到控制台并输出选择菜单包含 2 个选项分别为① 进行课程的修改② 返回上一级菜单。然后提示用户输入相应的整数。如果用户选择 ①则提示用户输入课程编号后通过 SQL 语句从数据库中找出相应课程信息输出到控制台并判断该课程是否有学生选课若未有学生选课则输出菜单询问用户修改对象① 教材信息/② 课程简介/③ 限制人数/④ 返回上一级菜单用户可根据需要输入整数值选择修改对象并随后输入相应内容完成修改其中若用户限制人数修改则系统会先通过 SQL 语句从数据库中判断当前课程选课人数为 80 或而后输出菜单询问用户是否更改为另一数目若用户选择是则修改为另一数目选择否则返回上一菜单。修改完成经用户确认后即可后返回上一菜单。若已有学生选课则系统会输出语句提示用户仅可修改限制人数并先通过 SQL 语句从数据库中判断当前课程选课人数为 80 或 100而后输出菜单询问用户是否更改为另一数目若用户选择是则修改为另一数目选择否则返回上一菜单。修改完成经用户确认后即可后返回上一菜单。如果用户选择 ②则返回上一级菜单。若用户未按照规定要求输入程序会给出提示并要求用户重新输入。void teacher_course_delete();此模块的主要功能是在未开始选课时删除课程。提示用户输入相应选项并对用户的输入进行处理。进入该模块之后首先通过 SQL 语句从数据库中找出所有当前登录的教师开设过得课程的信息并输出到控制台并判断选课是否开始若选课开始则输出语句告诉用户无法删除并在用户确认后返回上一菜单若选课未开始输出选择菜单包含 2 个选项分别为 ① 进行课程的删除② 返回上一级菜单。然后提示用户输入相应的整数。如果用户选择 ①则提示用户输入课程编号后通过 SQL 语句从数据库中找出相应课程信息输出到控制台并输出菜单询问用户是否删除① 是/② 否若用户选择 ① 则删除该课程若用户选择 ② 则返回选择菜单如果用户选择 ②则返回上一级菜单。此模块无传入、返回值若用户输入错误的课程编号程序会给出提示此课程不存在并要求用户重新输入。void teacher_manage_info();此模块用于教师用户的个人信息管理进入该模块系统首先在控制台上显示菜单询问用户修改对象① 修改密码/② 修改邮箱/③ 返回上一级菜单用户可根据需要输入整数值选择修改对象并随后输入相应内容完成修改系统接受用户输入的密码或邮箱并将其储存在字符串中。然后通过 SQL 语句修改数据库中的对应信息。此模块无传入、返回值若用户未按照规定要求输入程序会给出提示并要求学生用户重新输入。int getState_selecting():此模块主要功能为判断当前时间是否在选课时间内。函数开始先取得当前时间戳与全局变量中的开始选课时间、结束时间进行比较返回结果。此模块无传入参数返回整型数据0 为未开始选课1 为正在选课时间内2 为选课时间已结束。int getState_starting(charsweek, charstime)此模块主要功能为判断当前所传入的课是否已开课。函数开始先通过字符串操作将开课时间的 202-202学年第学期第周、具体上课时间段 周:-:* 中的数据取出比较学期若学期相同用周次和时间段加上全局变量中的本学期开课时间得到真实开课时间并与当前时间进行比较返回结果。此模块传入开课时间字符串的指针、具体上课时间段字符串的指针返回整型数据0 为未开课1 为已开课。Int check_classClash(char* query)此模块主要功能为传入 SQL 语句进行数据库查询若取到行数不为 0 则有结果提示冲突并返回。此模块传入 SQL 语句字符串指针返回整型数据0 为无冲突1 为有冲突int scanf_pw(char* str)此模块主要功能为取代 scanf 来达到输入密码回显*不显示明文的效果。函数使用_getch()来进行单个输入字符的获取并逐个加到所传入的字符串中若遇到回车符则结束输入若遇到退格与删除符首先判断是否已经到指针起始若能回删输出退格符、空格、退格符来替换原来回显的若输入字符超过 20 个或输入 ascii 码不在 40-126 的字符则不输入不回显。void pw_encode(char* str)此模块的功能为将字符串内的密码使用 base64 算法进行编码加密。编码原理为每个字节 8 位每次取出 3 个字节也就是 24 位。然后每次从此 24 位中取出 6 位然后在前端补 2 位 0组成新的 8 位也就是一个字节。这样就将 3 个字节转换成了 4 个字节。由于前面两位都是 0所以转换后的每个字节能表示的最大数字为 63然后根据规范给出的 Base64 索引表将 0-63 这 64 个数字转换成索引表里对应的字符当最后取出 3 个字节不够时不够的位置补 0并且最后少一个字节时编码的最后加一个“”少两个字节时加两个。此模块输入为待加密的字符串指针直接对该字符串进行操作无返回值。void pw_encode(char* str)此模块的功能为将字符串内的密码使用 base64 算法进行解码解密还原为明文。为上一编码模块的逆过程。此模块输入为待加密的字符串指针直接对该字符串进行操作无返回值。int scanf_opt(int* optPtr, int optMin, int optMax)此模块用于菜单选项的输入避免只读取空格前内容造成错误输入可以正常运行的 BUG。利用 gets 读入atoi 将输入转换为整型若读入字符长度不为 1 或转换后的数不在指定范围则提示重新输入。此模块输入为选项 option 指针最小选项最大选项若成功返回整型数 1。chars_gets(charstr, int n)此模块用于取代 scanf(“%s”,*)进行字符串输入。模块运用 fgets 从 stdin 读取输入去掉结尾的回车符。若输入长度超过限制则当场提示用户重新输入再重新执行读取步骤。此模块输入为待接受输入的字符串指针整型允许的长度返回输入后字符串指针若超过限制则返回空指针。void change_color(int,int)此模块功能为更改输出信息的颜色生效到下一次更改前。通过查询资料得知SetConsoleTextAttribute 可以更改前景色和背景色且其第二参数前四位控制背景色后四位控制字体色故模块运用位运算将输入整数放到合适的位上进行更改。此模块输入为整型字体颜色整型背景颜色代码无返回值。DWORD WINAPI SelectEventThreadLPVOID pM)此模块功能为实现命令行对鼠标事件的响应即可以正在命令行通过鼠标点击实现选择。此模块首先从外部读取全局变量中储存的数据以确定对鼠标事件做出响应的坐标范围随后根据鼠标点击的具体坐标通过 keybd_event 函数相应地模拟键盘输入。通过多线程原理实现鼠标点击功能。测试结果报告运行环境硬件环境程序在 Intel Core 平台笔记本、AMD Ryzen 平台笔记本、AMD Ryzen 桌面平台测试运行通过兼容性良好。软件环境本程序为 Windows 控制台应用最终编译为 exe 可执行文件程序在 64位 Windows 10保持自动更新下测试全部功能正常win8.1 及以下没有条件进行兼容性测试可能存在如鼠标点选功能无法使用的问题程序在仅兼容 x86 应用的系统平台无法使用。软件运行无需本地数据库环境可以使用远端上的 MySQL 服务端但必须连接上数据库才能使用主体功能。各功能运行结果、截图及说明首次运行程序时需要连接数据库界面如下图所示若用户的输入有问题系统无法连接会给出如下提示连接数据库成功后根据系统提示设置当前学年、当前学期等时间条件若用户不按要求输入系统会给出提示并重新接收输入首次运行程序完成配置后进入到学生管理系统界面首先需要用户点击按钮选择自己的身份下图为对异常输入的处理若用户选择学生则系统进入学生界面用户根据系统提示点击输入若格式不正确则重新输入若用户选择“登录”选项系统会要求输入学号用户按照要求输入正确格式的已注册的学号后再输入正确的密码以进入学生主界面下图为学生主界面根据提示点击输入想进行的操作下图为对异常输入的处理若用户选择“学生选课”则进入学生选课界面若不在选课时间内则无法选课下图为对异常输入的处理若选课成功系统会给出“选课成功”的提示若在学生主界面点击选择“查询课程”则进入查询课程界面按课程名查询按学院查询按课余量查询按选课人数查询若在学生主页面选择查询选课结果页面如下若在学生主界面选择删除选课结果页面如下若已开课则无法删除无法删除不存在的课删除成功后会给出提示若在学生主界面选择个人信息管理则页面如下按照规范修改电话修改密码按照规范修改邮箱若在学生登录时点击选择“注册”则界面如下若输入异常系统会给出提示并重新获取输入若用户点击选择教师则系统进入教师界面用户根据系统提示点击输入若格式不正确则重新输入。若用户选择“登录”选项系统会要求输入工号用户按照要求输入正确格式的已注册的工号后再输入正确的密码以进入教师主界面下图为教师主菜单根据提示点击或输入想进行的操作以下是对异常输入的处理若用户在教师主菜单中选择“选课管理”则进入教师选课菜单具体点击或输入操作以及异常输入提示如下所示若用户在选课管理菜单中选择“查看开设课程”则进入开设课程查询寻界面查询具体输入操作以及异常输入提示如下所示若用户在选课管理菜单中点击选择“查询学生信息”则进入学生信息查询寻界面查询具体点击或输入操作以及异常输入提示如下所示“根据课程名查询”“根据学生姓名查询”若用户在选课管理菜单中点击选择“删除课程学生选课后” 则进入学开设课程删除界面具体输入操作以及异常输入提示如下所示若选课结束后选课人数超过三十人则不能进行课程的删除若用户在选课管理菜单中选择“统计您自己开设过的课程数目”则进入开设课程统计界面如下若用户在选课管理菜单中选择“按选课人数排序所有开设过的课程”则进入开设课程排序界面如下若用户在主菜单中点击选择“课程管理”则进入教师课程管理菜单具体输入操作以及异常输入提示如下所示若用户在课程管理菜单中选择“课程查询”则进入课程查询界面具体输入操作以及异常输入提示如下所示若用户在课程管理菜单中选择“课程添加”则进入课程添加界面具体输入操作以及异常输入提示如下所示若用户在课程管理菜单中选择“课程修改”则进入课程修改界面具体输入操作以及异常输入提示如下所示已有学生选课的课程只能修改限制人数未有学生选课的课程可以修改课程简介教材信息与限制人数若用户在课程管理菜单中选择“课程删除选课开始前”则进入课程修改界面具体输入操作以及异常输入提示如下所示若选课已开始无法删除课程若选课未开始则可以进行课程的删除若用户在教师主菜单中在选择“信息管理”则进入教师修改菜单具体输入操作以及异常输入提示如下所示若在选择“密码”则进入教师密码修改界面具体输入操作以及异常输入提示如下所示若在选择“邮箱”则进入教师邮箱修改界面具体输入操作以及异常输入提示如下所示若在教师登录时选择“注册”则进入教师注册界面具体输入操作以及异常输入提示如下所示