Rivers分享 http://blog.sciencenet.cn/u/sdssxwfd

博文

基于matlab的随机点名系统

已有 3015 次阅读 2022-10-24 17:56 |系统分类:教学心得

%基于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表格




https://blog.sciencenet.cn/blog-216525-1360758.html

上一篇:matlab合并excel表格程序
下一篇:Matlab中函数dsolve求解出微分方程的解析解后的使用
收藏 IP: 121.250.0.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 04:11

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部