|
%基于Matlab的随机点名系统randomrollcall
%20221021
%不能实现从键盘或鼠标控制选择哪个同学。
%出勤表为系统中的出勤表1,本程序可以控制三个班级,班级多少请根据自己的需要调整
clear;clc;close all
% nametable=readtable('E:\工作\教学课件\数学实验2022年\新建文件夹\xsktkqb78.xls');%读入相应的班级的出勤表
% table1=nametable(~isnan(nametable.x__),:);
% table1=renamevars(table1,["x___1","x___2"],['学号',"姓名"])
% save class78 table1
% %把相应班级读入的excel表转为mat文件
weeks=input('请输入本次点名的周次:');
con=1;
while con==1 %选择班级或退出
disp('1.周四0304节') %根据上课时间选择
disp('2.周四0708节')
disp('3.周四0910节')
disp('4.退出')
x=input('请选择要点名的班级:');
switch x
case 1
load class34.mat %加载相应班级
filename='class34'; %命名输出表格的文件名
break
case 2
load class78.mat
filename='class78';
break
case 3
load class910.mat
filename='class910';
break
case 4
return
otherwise
disp('请重新输入')
pause(2)
continue
end
end
[m,n]=size(table1); %计算本班总人数
k=1;count=0;hchosed=[];
while con==1
randc=setdiff(randperm(m),hchosed); %在序号集合但不在已统计的同学中
tic
for i=randc
clc;
if k==1
fprintf('本班级共有%2d人\n',m)
pause
end
ti=toc;
if mod(fix(ti),5)==2 %根据时间选择被点名的同学
disp(table1(i,2:3)) %呈现被选同学信息
sometxt=cell2mat(table1{i,3}); %读出被选同学的名字
SV=actxserver('SAPI.Spvoice');
SV.Voice=SV.GetVoices.Item(0);
SV.Rate=0;
SV.volume=100;
invoke(SV,'Speak',sometxt);
disp('出勤情况:') %出勤情况选择
disp('1.出勤')
disp('2.请假')
disp('3.旷课')
x=input('请选择该同学的出勤情况:');
while 1 %出勤情况循环
if x==1
tpos={'出勤'};
break
elseif x==2
tpos={'请假'};
break
elseif x==3
tpos={'旷课'};
break
else
disp('请重新输入');
x=input('请选择该同学的出勤情况:');
continue
end
end
count=count+1 %计算被抽取的人数
ttable(count,:)={table1(i,2),table1(i,3),tpos};%创建新表
hchosed=[hchosed,table2array(table1(i,1))]; %创建被选同学的序号集合
table1(i,4+weeks)=tpos;%把指定周的出勤情况加入到表格
else
disp(table1(i,2:3)) %呈现可能被选同学信息
pause(0.05)
end
k=k+1;
end
con=1;
if count==10 %每次择取点名的人数
break
end
end
clc
disp('今日出勤情况汇总:')
ttable=cell2table(ttable) %把单元数据转为table数据
% file=cat(2,filename,'.xls');
% writetable(table1,file) %把本学期的出勤情况写入xls表格
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 04:11
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社