随机点名器使用说明(必读)
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. end2. 使用说明
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 |