Skip to content

2.0版本更新

Latest

Choose a tag to compare

@Yummy-He Yummy-He released this 29 Sep 15:33
· 1 commit to main since this release
d18cc7a

随机点名器使用说明(必读)

0. 写在前面

0.1 声明

本Matlab程序使用ChatGPT和天工大模型辅助创建和修正。

0.2 更新

增加了“请假”选项。
增加了自动识别周数、确认填在表格相应列的功能。
同一周可多次点名,且不点重复的人。
都没点到的人默认出勤。
直接在表格记入分值,方便计算。

0.3 重要!

此版本会生成如“week1.mat”的缓存文件,勿删除。

0.4 下载

在下方 Assets 中,下载 RollCall.m 文件即可。

0.5 兼容性

由于用到了’isfile’函数,本程序只能在R2017b及更新版本允许。如需在之前版本运行,请用‘exist’自行替换(其它部分也需改变)。
若使用R2013a之前的版本,则本程序大部分功能不可使用,建议更新版本或使用在线版。

1. 表格格式

1.1 表格位置

学生表格与此 RollCall.m 文件置于 Matlab 工作文件夹,若在外部,请自行修改启动命令及代码。
表格名称最好为英文(如 “Students.xlsx”),避免不必要报错。

1.2 表格区域

确保学号与姓名列相邻,姓名在学号相邻右侧,且读取区域只包含学号与姓名,不需要包括标题。
如下表,读取区域为 B8:C149,点名结果将保存在 J及之后列(可修改)中:

B C ... J K
7 学号 姓名 第1次 第2次
8 1234 张三
9 5678 李四
10 6768 王五
11 8656 刘六
... ... ...
123 5679 李华
... ... ...
149 1011 张明

1.3 代码修改

在 RollCall.m 中根据实际情况,阅读注释,在如下部位,修改表格读写区域,替换相应数字即可:

可修改第一周起始,本例中2024.8.26为第一周第一天。

3.       % 获取当前周数
4.       currentDate = datetime('now', 'TimeZone', 'Asia/Shanghai');
5.       startDate = datetime(2024, 8, 26, 'TimeZone', 'Asia/Shanghai'); % 可修改一周的起始
6.       weekNumber = ceil(days(currentDate - startDate) / 7);

可修改一共多少周。

8.       %共18周,可修改。
9.       if weekNumber < 1 || weekNumber > 18
10.          error('当前日期不在点名周期范围内 (1-18周)');
11.      end

可修改第一周在哪一列。

13.      % 确认本次点名填在哪一列
14.      attendanceColumn = char('J' + (weekNumber - 1)); % 可修改第一周在J列

可修改读取数据范围(按照上文1.2)。

16.      % 读取Excel文件,从第8行开始读取,读取第2列(ID)和第3列(Name)
17.      try
18.          data = readtable(fullfile(pwd, StudentsFile), ...
19.              'ReadRowNames', false, ...
20.              'ReadVariableNames', false, ...
21.              'Range', 'B8:C149');  % 只读取第2列和第3列,即B列到C列

可修改分值。

90.      % 根据点名结果更新excelData
91.      for i = 1:length(randomIndices)
92.          if responses(i) == '1'
93.              excelData(randomIndices(i)) = 3; % 出勤,写入3
94.          elseif responses(i) == '2'
95.              excelData(randomIndices(i)) = 2; % 请假,写入2
96.          else
97.              excelData(randomIndices(i)) = 0; % 缺勤,写入0
98.          end
99.      end


117.     % 将未点到的人在excelData中填3(默认出勤)
118.     for i = 1:numStudents
119.         if isnan(excelData(i)) % 只填充未点到的人
120.             excelData(i) = 3; % 默认出勤
121.         end
122.     end

2. 使用说明

2.1 准备

打开Matlab,选择工作文件夹,将 RollCall.m 和表格(如 “Students.xlsx”)放在工作文件夹。

2.2 使用

在命令行窗口中输入,根据文件名称自行修改启动命令:

RollCall('Students.xlsx');

回车。

此时自动计算总人数,并要求输入点名人数,如

当前学生总数为 142 人,请输入要点名的人数(最少1人,最多142人):

输入后,回车。

询问是否显示学号,如

当前学生总数为 142 人,请输入要点名的人数(最少1人,最多142人): 5
是否保护隐私不显示学号?(1: 显示, 0: 不显示): 

输入后,回车。

展示被点到的学生,如:

当前学生总数为 142 人,请输入要点名的人数(最少1人,最多142人): 5
是否保护隐私不显示学号?(1: 显示, 0: 不显示): 1
点名学生信息:
1: 学号: *******, 姓名: ***
2: 学号: *******, 姓名: 李四
3: 学号: *******, 姓名: 张三
4: 学号: *******, 姓名: 刘六
5: 学号: *******, 姓名: ***
请输入每位学生的到场情况(如输入长度为5的字符串,1表示到,0表示不到):

此时教师依次叫名字,出勤输入1,缺勤输入0,请假输入2,多少人就输入多少位,请勿多输入或少输入。
输入后,回车。

本例中点名5人,若李四缺勤,张三请假,其他人出勤,则输入10211,如:

当前学生总数为 142 人,请输入要点名的人数(最少1人,最多142人): 5
是否保护隐私不显示学号?(1: 显示, 0: 不显示): 1
点名学生信息:
1: 学号: *******, 姓名: ***
2: 学号: *******, 姓名: 李四
3: 学号: *******, 姓名: 张三
4: 学号: *******, 姓名: 刘六
5: 学号: *******, 姓名: ***
请输入每位学生的到场情况(如输入长度为5的字符串,1表示到,0表示不到): 10211
点名结果已写回 Excel 文件。

此时点名完成,结果回写入表格。
本例中,第一周点名结果储存在 J 列,出勤3分,缺勤0分,请假2分,都没点到的人默认出勤。如:

B C ... J K
7 学号 姓名 第1次 第2次
8 1234 张三 2
9 5678 李四 0
10 6768 王五 3
11 8656 刘六 3
... ... ...
123 5679 李华 3
... ... ...
149 1011 张明 3