Skip to content

Releases: Yummy-He/RollCall

2.0版本更新

Choose a tag to compare

@Yummy-He Yummy-He released this 29 Sep 15:33
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

1.0版本

Choose a tag to compare

@Yummy-He Yummy-He released this 26 Sep 13:19
7d882c6

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

0. 声明

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

1. 表格格式

1.1 表格位置

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

1.2 表格区域

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

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

1.3 代码修改

在 RollCall.m 中根据实际情况,阅读注释,在如下部位,修改表格读写区域:

3.   % 尝试读取Excel文件,从第8行开始读取,读取第2列(ID)和第3列(Name)
4.   try
5.       data = readtable(fullfile(pwd, StudentsFile), ...
6.           'ReadRowNames', false, ...
7.           'ReadVariableNames', false, ...
8.           'Range', 'B8:C149');  % 只读取第2列和第3列,从B列到C列
9.   catch ME
10.      disp('读取Excel文件失败,请检查文件路径或格式是否正确。');
11.      disp(ME.message);
12.      return;
13.  end

78.  % 确定点名结果要写入的列(从J列开始)
79.  startCol = 'J';
80.  calloutCol = char(startCol + (calloutNum - 1));

81.  % 写入点名学生对应行的结果列,从第8行开始
82.  writetable(cell2table(excelData), fullfile(pwd, StudentsFile), ...
83.      'WriteVariableNames', false, ...
84.      'Range', [calloutCol, '8:', calloutCol, '149']);  % 写入从第8行开始的指定列

2. 使用说明

2.1 准备

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

2.2 使用

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

RollCall('Students.xlsx');

回车。

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

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

输入后,回车。

询问是否显示学号,如

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

输入后,回车。

询问是第几次点名,在本示例中,填1则结果保存在 J 列,如

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

输入后,回车。

展示被点到的学生,如:

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

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

本例中点名5人,若李四出勤,其他人缺勤,则输入01000,如:

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

此时点名完成,结果回写入表格。
本例中,第一次点名结果储存在 J 列,到则不显示,缺勤则填入“缺”。如:

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