G
N
I
D
A
O
L

学生选课系统(C语言课程设计)


学生选课系统(C语言课程设计)

摘要

学生选课系统可以读取本地文本文件中的用户(学校、教师、学生)信息和课程信息,并能校验当前使用用户的信息进行登录操作。在用户登陆后,该系统可以匹配读取文件后的缓存信息中的用户的权限:学校用户可以自由修改/增添任意用户和课程信息,教师可以查询课程和修改自己所在课程的学生选课信息,学生可以查询课程和进行自己的选课操作。在用户操作后,系统会自动更新信息入文本文件中保存。

该系统可以在本地有效处理关于教师上课、学生选课的问题,并且大大方便了学校对全体师生选课数据的处理操作。本系统使用Visual Studio 2019编写,采用代码为C语言,使用了较为简单且基础的函数和代码。

关键词:本地文件,用户登录,选课,管理系统,修改信息

题目要求

  1. 查阅文献资料,一般在5篇以上;
  2. 以学校学生选课管理业务为背景,通过调研、分析现有的管理模式和已有的管理软件,建立系统模型;
  3. 完成软件结构设计和算法设计;
  4. 完成系统的软件开发和测试工作;
  5. 撰写设计说明书;
  6. 做好答辩工作。

需求分析

产品需求概述

功能简介

学生选课系统,针对学校进行自主选课/查课的系统,分别面向学校、教师、学生,提供带筛选功能的查询、编辑、导入/导出等学生选课相关功能,如图所示。

功能简介

限制条件

  • 软件同目录下必须包括两份数据文件:

    一份名为用户数据.txt,其内容必须包含首行内容权限类型 账号 密码 姓名 课程代码和末行内容0

    另一份名为课程数据.txt,其内容必须包含首行内容课程代码 教师代码学分 选课性质 选课类型 学期 上课时间 课程名字 上课地点学生上限和末行内容0

    限制原因:该数据文件模拟正常网络选课时用户共用的数据文件,其地址必须固定且文件必须唯一存在。

  • 使用本系统应避免多用户同时操作。

    限制原因:由于该系统为本地读取文件并载入缓存,而非实时更新本地数据,导致多用户同时对同一数据或不同数据进行操作时只有其中一条有效或导致数据信息不匹配。

  • 手动修改数据文件应避免格式错误或内容不匹配。

    限制原因:该系统能在一定程度上对内容格式错误或不匹配信息进行报错或忽略,但限于数据量庞大和系统功能复杂,不正确的读取仍然可能出现无法估量的严重后果。

功能需求

学校对课程和用户管理功能

实现功能:对所有课程和用户进行筛选查看所有信息,筛选包括选课类型、选课性质、上课时间、上课地点、学期,能够实现对所有信息的新建,删除,修改,查看等基本功能。

教师对课程和学生查询功能

实现功能:对所有课程进行筛选查看所有信息,对该教师相关学生进行查询和退课操作。

学生对课程和个人查询功能

实现功能:对所有课程进行筛选查看所有信息并可执行选课操作,对个人选课进行查看和退课。

用户登陆

实现功能:用户输入账号和密码进行登陆操作,其密码具有一定加密功能。登陆后可修改密码,并按用户类型提供不同服务。

文件载入/保存

实现功能:用户操作的所有数据近乎实时地保存在本地文件中。

不支持的功能

  • 系统日志:实时记录用户操作,供学校管理员进行分析或问题查询。

    不支持原因:待开发中

  • 系统设置:包括记住账号,配置访问地址,读取自定义数据类型等等。

    不支持原因:待开发中

  • 互联网多用户实时操作:全网多个用户同时对该系统进行使用操作

    不支持原因:网络及数据库部分技术缺失,已有功能所使用技术框架地局限性。

数据描述

数据描述

数据名 数据类型 说明
文本长度 const int 50 限制大部分字符串的长度
选课上限 const int 30 限制学生选课数量
选课类型_数量 const int 4 定义数量
选课性质_数量 const int 4 定义数量
上课时间_数量 const int 5 定义数量
上课地点_数量 const int 2 定义数量
学期_数量 const int 10 定义数量
选课类型 const char [][] 见附录 课程元素
选课性质 const char [][]
上课时间 const char [][]
上课星期 const char [7][10]
上课地点 const char [][]
学期 const char [][]
用户数据 FILE* 处理用户数据文件
课程数据 FILE* 处理课程数据文件
系统日志 FILE* 处理系统日志文件
用户数量 int 0 记录用户数据条数
课程数量 int 0 记录课程数据条数
登录用户ID int 0 记录目前登陆用户的内部ID
筛选条件 int [10][10] 0 用于记录课程筛选 0-显示,1-隐藏
*课_程 struct 课程 NULL 记录每一条课程数据
*用_户 struct 用户 NULL 记录每一条用户数据
其他 union 临时数据 用于其他大部分临时数据
struct 课程 int 课程代码 int 学分 int 选课性质 int 选课类型 int 学期 int 上课时间 int 上课星期 char 教师代码[] char 课程名字[] int 上课地点 int 学生上限 int 用户数量 int* 用户ID 课程代码:-1表示待删除
struct 用户 char 账号[] char 密码[] char 姓名[] int 权限类型 int 课程数量 int* 课程代码 账号:同时表示学号或工号 权限类型:1表示学校,2表示教师,3表示学生,-1表示待删除
union 临时数据 char 文本型[1000] char 字符型 int 整数型 double 小数型 FILE* 文件型 用于其他大部分临时数据 如:处理循环,计数,测试值,输入……
  1. 性能需求

    数据精确度:该系统针对学生选课,其数据十分重要且要求精准。软件设置多处输入提示和使用菜单的方式,并编写了输入检测函数和数据校验,极大程度避免了用户数据出现问题。

    时间特性:该系统要求实时更新数据文件。软件通过操作触发性更新数据文件,极大程度降低了多用户同时操作的数据更新风险。

    相互合作的用户数或者所支持的操作:多用户同时多地操作。软件通过模拟固定地址的数据文件进行读写,理论上可上传至网络进行近乎同时的多地操作。

    容量需求:该系统要求储存处理学校庞大的师生用户数据和课程数据。软件通过动态分配内存的方法临时储存数据,其上限根据载入的数据自动调整,理论上限仅由软件运行的硬件配置决定。

概要设计

软件概要设计是从总体上把握系统设计框架,他包括模块划分、处理流程和接口设计,概要设计说明书对上述内容作了总体描述,体现了用户需求与应用系统实现之间的关系,在设计过程中起到了提纲挈领的作用。

系统体系结构图

系统体系结构图

系统流程图

系统流程图

详细设计

系统主要函数说明

函数名称 函数功能
数据校验 用于转换学生课程代码为外部或内部ID
带检测输入 用于带检测非法输入的输入操作
字符串加解密 用于处理密码加解密
筛选判断 用于筛选浏览课程的各项属性进行判断
用户_ID查询 用于查找账号对应内部ID
课程_ID查询 用于查找课程对应内部ID
课程操作 选中课程后用于读取或编辑课程信息
用户操作 选中用户后用于读取或编辑用户信息
添加课程 根据用户ID添加相应课程ID的选课
退课 根据用户ID删除相应课程ID的选课
搜索用户 用户信息中选择搜索用户后对相应用户进行编辑
搜索课程 课程信息中选择搜索课程后对相应课程进行编辑
浏览用户 用户信息中选择浏览用户后显示所有用户信息
浏览课程 课程信息中选择浏览课程后有筛选地显示所有课程信息
我的课程 根据用户ID可编辑地显示学生课程
我的学生 根据教师ID可编辑地显示学生信息
修改密码 根据用户ID无需知道原密码修改密码
导入课程 根据操作类型在自定义位置或默认位置导入课程文件信息
导出课程 根据操作类型在自定义位置或默认位置导出课程文件信息
导入用户 根据操作类型在自定义位置或默认位置导入用户文件信息
导出用户 根据操作类型在自定义位置或默认位置导出用户文件信息
载入文件 打开软件时载入数据文件
登陆 载入数据文件后用户登陆
菜单 用户登陆后显示菜单
用户信息 菜单选择显示用户信息

数据校验

[功能] 用于转换学生课程代码为外部或内部ID

[参数] int 转换类型,临时数据 循环[3],课程ID

[返回值] return 0:正常返回

[算法描述]

![数据校验][数据校验]

带检测输入

[功能] 用于带检测非法输入的输入操作

[参数] void* 待存入变量,int 输入类型,int 判断次数,临时数据 判断

[返回值] return 判断次数

[算法描述]

带检测输入

字符串加解密

[功能] 用于处理密码加解密

[参数] void* 待存入变量,int 输入类型,int 判断次数,临时数据 判断

[返回值] return 判断次数

[算法描述]

字符串加解密

筛选判断

[功能] 用于筛选浏览课程的各项属性进行判断

[参数] int 课程ID,临时数据 循环[2],临时数据 判断内容

[返回值] return 1,return 0

[算法描述]

筛选判断

用户_ID查询

[功能] 用于查找账号对应内部ID

[参数] char 账号,临时数据 循环,临时数据 目标ID,临时数据 个数

[返回值] return 目标ID,return -(个数+1)

[算法描述]