基于C#的实验室课表管理的设计与实现*
——以内江师范学院为例
2024-03-05刘乂毓
刘乂毓,张 镘
(1.内江师范学院人工智能学院,四川 内江 641100;2.珠海博闻教育科技发展有限公司,广东 珠海 519000)
0 引言
我校的教务系统可以提供教师个人课表、班级课表,也可以根据场地、时间等方式进行查询,但一般只有二级学院教科办主任这样的角色才有权操作,而实验室管理人员,一般只有每个实验室的课表,实验室人员每次开、关实验室,维护实验设备,都要逐次翻看每个实验室的课表查阅,当教师调课次数多时,这个过程容易出错。为此,在不改变学校教务系统现有的角色分配等系统设计的情况下,项目充分利用学校教务系统导出的结果——按实验室分类汇总的Excel课表和按教师分类汇总的Excel表,由于单独使用Excel综合汇总效率差,汇总内容多时,读写速度和公式计算速度极慢,为此本项目在使用Excel综合汇总的同时,利用C#和Access另建模块,分担一部分计算量。这样,管理人员可以轻松快速了解整个实验室的使用情况,该设计系统可以推广到学校的各个相关二级学院实验室、教学楼管理工作中,从而大幅度提高计算机实验室、教学楼管理的工作效率。
1 系统设计
1.1 设计目标
实验室课表管理可以用于支持实验室管理人员完成整个实验室课表合并,生成合并课表工作。实验室管理员可以通过系统获取排课的相关信息(包括排课时间、所用实验室、授课教师、上课班级等一切相关信息),相较于从教务下发的原始Excel表中获取更加方便;可以通过移动端获取信息;可以在没有网络的情况下获取信息;可以根据排课调整情况修改系统中的数据;对于即使不是计算机专业的实验室管理员,系统也必须易于操作;可以根据排课表打印。
1.2 设计思想
主要体现以下内容:
由于无法对原始表的数据所在的数据库进行查询操作,所以需要一个原始数据转换程序拆分原始表中的数据并存入另建的本地数据库中。
考虑到实验室管理员习惯使用原始Excel表查询排课信息,系统中显示筛选查询后的排课的表也使用Excel格式。
需要在移动端中显示在使用的Excel,不适用宏。
考虑到不单独安装数据库程序,使用Access作为存储转换后数据的数据库。
1.3 功能设计
实验室课表管理系统实现以下功能:
实验室管理员可以设置以下查询范围:周、校区、楼、教室;可以设置以下显示内容:校区、楼、教室、课程、周次、教师、教学班编号、教学班组成、教学班人数;可以打印高桥校区格致楼二楼实验室使用时段安排。
1.4 开发和运行环境选择
开发环境主要有三个方面:原始数据转换程序:C#语言[1-2],.Net4.0框架[3],在Visual Studio 2010[4]中开发;存储转换后数据的数据库(包含Excel中筛选的部分计算过程):Microsoft Access 2010[5];显示筛选查询后的排课的表:Microsoft Excel 2010。
2 系统实现
如图1所示,完成系统需要实现原始数据转换程序,存储转换后数据的数据库,和显示筛选查询后的排课的表3个部分。
图1 系统示意图
2.1 数据转换程序(及部分代码)
程序把已有的原始表数据按照查询和筛选的需要拆分并存入数据库,如图2所示。
图2 转换程序界面
2.1.1 连接到原始表主要代码如下:
通过Microsoft.Office.Interop.Excel引用实现,主要代码如下:
…/*获取实例的公共方法体其他部分*/…
TimetableXlsFileReader.reader = new TimetableXlsFileReader();
TimetableXlsFileReader.app = new Microsoft.Office.Interop.Excel.ApplicationClass();
…/*获取实例的公共方法体其他部分*/…
TimetableXlsFileReader timetableXlsFileReaderInstance = TimetableXlsFileReader.GetTimetableXlsFileReaderInstance(transferRoutes);
2.1.2 选择课表类型主要代码如下:
通过选择预先定义拆分的方法(用JSON保存)实现,主要代码如下:
.../*声明临时变量*/...
using (TextReader textReader = File.OpenText("settingsdatasource" + runtime_save.datasource + ".json"))
{
transferRoutes = JsonConvert.DeserializeObject
}
2.1.3 拆分数据主要代码如下:
主要代码如下:
.../*声明临时变量*/...
IEnumerable
where r.source_type == "file_name" // Excel文件中定义为"file_name"的数据源
select r;
if (source.Count
…/*用同样的流程提取"constant"和"cell_text"的数据*/…
…/*关闭流*/…
2.1.4 连接到数据库主要代码如下:
通过Keel.EasyAccess引用实现连接,主要代码如下:
Accessor.FileUrl = runtime_save.access_file_path;
Accessor.OpenAdodbConn();
2.1.5 转存主要代码如下:
通过Keel.EasyAccess引用实现转存,主要代码如下:
.../*通过循环获取DataTable类型的方法体*/...
Accessor.Create(dataTable.TableName, list.ToArray(), row);
.../*异常输出到日志文件等其他部分*/...
.../*循环体其他部分*/...
Accessor.Flush();
2.2 数据库
保存从原始表获得的数据,将显示表的下拉列表等所需的数据源通过查询得出。为了方便显示表通过Microsoft Querry导入,部分表并未按照标准的数据库设计模式设计,也未使用自定义函数,如图3所示。
图3 数据库中的表和查询
2.3 显示表
在显示表中通过[数据]->[自ACCESS]导入数据(底层通过Microsoft Querry查询的方式导入),然后经过公式计算,主要显示内容为以下两个工作表。
“课程”表包含筛选指定周、校区、楼、教室功能,并根据需要显示校区、楼、教室、课程、周次、教师、教学班编号、教学班组成、教学班人数等内容,如图4、5所示。
图4 在“课程”表中查询第17-20周的排课情况
图5 在“高桥校区格致楼二楼实验室使用时段安排打印”表中查询包含第17-20周的排课的课程情况用于打印
“高桥校区格致楼二楼实验室使用时段安排打印”表包含筛选指定周的功能,其格式用于打印。
3 结束语
根据我校的教务系统输出存在的不足,实验室个数多的特点,为减轻管理人员工作量,避免工作失误,通过对系统的设计目标,设计思想,功能进行分析,在不改变学校教务系统现有的角色分配等系统设计的情况下,利用学校教务系统导出的结果,C#和Access,采用原始数据转换到数据库,显示综合数据库,设计出了一张整个实验室的动态汇总课表,本文设计的系统操作简单、方便、易扩展,管理人员利用该系统导出的结果可以轻松掌握整个实验室的使用情况,从而可以有效地提高实验室管理的工作效率,该系统可以推广到学校的各相关部门和人员的管理工作中,具有一定的实用性、先进性。