matlab随机点名系统

%基于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;

load class78.mat

            filename='class78';

 [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数据

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值