精华内容
下载资源
问答
  • 上课随机点名程序

    2014-10-23 23:55:54
    可以用于教师上课随机点名程序VB编写,包含源代码,需要请下载。
  • 点名小程序

    千次阅读 2018-06-15 14:02:24
    JButton btn = new JButton("开始点名"); //采用的是伪随机数,大家也可以不用这个,这个在网上可以找到java随机数的设置 Random rd = new Random(); public void init() { //提示标签页面 JLabel jt= new ...

    源码:

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.Random;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.SwingConstants;
    
    public class RandomName {
        //主面板
        JFrame rFrame=new JFrame("随机点名器");
        //名字
        String[] stuName={"莫康文","夏攀","阳攀","曾繁荣","黎建豪"};
        //用于存储名字的标签
        JLabel name = new JLabel();
        //按钮
        JButton btn = new JButton("开始点名");
        //采用的是伪随机数,大家也可以不用这个,这个在网上可以找到java随机数的设置
        Random rd = new Random();
        public void init()
        {
            //提示标签页面
            JLabel jt= new JLabel("随机点名器");
            //设置标签居中
            jt.setHorizontalAlignment(SwingConstants.CENTER);
            //设置字体大小
            jt.setFont(new java.awt.Font("随机点名器",1,35));
            //设置名字显示的标签居中
            name.setHorizontalAlignment(SwingConstants.CENTER);
            //通过匿名类实现Action按钮的监听事件
            btn.addActionListener(new ActionListener()
            {
    
                @Override
                public void actionPerformed(ActionEvent e) {
                    // TODO Auto-generated method stub
                    //获取随机的姓名
                    String n=getRandomName();
                    //设置name标签的文字
                    name.setText(n);
                    //设置字体
                    name.setFont(new java.awt.Font(n,1,35));
                    //设置字体颜色
                    name.setForeground(Color.red);
                }
    
            });
            //获取JFrame的面板
            Container p = this.rFrame.getContentPane();
            //设置布局方式,我采用的BorderLayout布局
            p.setLayout(new BorderLayout(3,1));
            //添加提示标签在北方
            p.add(jt,BorderLayout.NORTH);
            //添加姓名标签在中央
            p.add(name,BorderLayout.CENTER);
            //添加按钮控件在南方
            p.add(btn,BorderLayout.SOUTH);
            //调整大小,这个是java中无法设置标签的大小
            rFrame.pack();
            //设置窗体大小
            rFrame.setSize(300, 300);
            //设置可以显示
            rFrame.setVisible(true);
    
    
        }
        //获取随机的姓名
        public String getRandomName()
        {
            int a = 0;
            //random类去实现随机数时,只能设置上限,也就是说随机数产生的都是0-stuName.length之间的数字
            a = rd.nextInt(stuName.length);
            //rd.setSeed();
            //a = (int)Math.random()*stuName.length;
    
            return stuName[a];
        }
    
        public static void main(String[] args)
        {
            RandomName rn=new RandomName();
            rn.init();
        }
    }

    效果图:


    展开全文
  • 随机点名小程序

    2012-01-02 11:03:04
    这个小程序可以用在老师上课点名,或者班级活动抽奖。本程序一次产生两个随机数,一个为班级,一个为学号(可按实际情况修改)。同时使用了大字体,便于在投影上使用。
  • 随机点名小程序 tkinter

    千次阅读 2020-02-22 23:44:22
    随机点名小程序 随机点名小程序 问题描述 随机点名程序(越不来上课的人,被点中的概率越高,实现抽查问题、预警等功能) 问题分析 采用python 的 tkinter 库实现用户图形界面,采用 pickle 存储数据,可以对点名...

    随机点名小程序

    源码见github:
    https://github.com/linli1724647576/Random_roll_call

    问题描述

    随机点名程序(越不来上课的人,被点中的概率越高,实现抽查问题、预警等功能)

    问题分析

    采用python 的 tkinter 库实现用户图形界面,采用 pickle 存储数据,可以对点名对象进行插入或删除。user_info.pickle文件中存储着一个字典,包括名字和缺勤次数,根据迟到的次数往列表中增加名字的个数,越不来上课的人被点中的概率越高。

    代码分析

    导入相应的包:

    import tkinter as tk
    import tkinter.messagebox
    import pickle
    import random
    

    定义随机点名对象,方法有

    1. def init_data(self): 初始化数据
    2. def init_lable(self): 初始化标签
    3. def run(self): 运行
    class RandomNameGame(object):
        def __init__(self):
            self.window = tk.Tk()  #建立底层窗口
            self.window.title('随机点名程序')   #窗口名称
            self.window.geometry('500x500')   #窗口大小
            self.var = tk.StringVar()   #被点到成员的名字
            self.status = True  #随机状态控制
    

    初始化数据:从pickle上下载数据

        def init_data(self):
            try:
                with open('users_info.pickle','rb') as user_file:
                    self.user_info = pickle.load(user_file)
                    print(self.user_info)
                    self.user_name = [i for i in self.user_info.keys()]
                    self.length = len(self.user_info)   #成员数量
                    print(self.length)
            except FileNotFoundError:  #初始化成员
                with open('users_info.pickle','wb') as user_file:
                    self.user_info = {'teacher':'0'}    #成员名字,旷课次数
                    pickle.dump(self.user_info,user_file)
    

    初始化标签:

        def init_lable(self):
            #刷新
            def Refresh():
                self.init_data()
                init_student_label()
                print(self.user_info)
                
            def init_student_label():   
                #初始化标签
                self.var_x = 40
                self.var_y = 150
                for item in self.user_name:
                    if(self.var_x>=450):
                        tk.messagebox('Error','The student is too much')
                    if(self.var_y>=350):
                        self.var_x += 100
                        self.var_y = 150
                        self.generate_label(item,self.var_x,self.var_y)
                        self.var_y +=60
                    else:
                        self.generate_label(item,self.var_x,self.var_y)
                        self.var_y += 60
            init_student_label()
                
            #添加新成员
            def Add():
                #判断是否注册过,如果没注册则添加
                def sign_to():
                    np = new_user_name.get()
                    with open('users_info.pickle','rb') as user_file:  #对比有没重复
                        exist_user_info = pickle.load(user_file)
                    if np in exist_user_info:
                        tk.messagebox('Error','The student has already in !')
                    else:
                        exist_user_info[np] = 0
                        with open('users_info.pickle','wb') as user_file:
                            pickle.dump(exist_user_info,user_file)
                        tk.messagebox.showinfo('successful','You have successfully add !')
                        window_sign_up.destroy()
                        
                window_sign_up = tk.Toplevel(self.window)
                window_sign_up.geometry('300x100')
                window_sign_up.title('Add new student')
                tk.Label(window_sign_up,text='New User name :').place(x=20,y=30)
                new_user_name = tk.StringVar()  #定义新成员变量
                new_user_name.set('请输入新成员名字')
                #add entry
                entry_new_user_name = tk.Entry(window_sign_up,textvariable=new_user_name)
                entry_new_user_name.place(x=140,y=30)
                #Add Button
                btn_sign_up = tk.Button(window_sign_up,text='Add',command=sign_to)
                btn_sign_up.place(x=130,y=65)
                
            #删除成员
            def Drop():
                #self.init_data()
                window_drop_out = tk.Toplevel(self.window)
                window_drop_out.title('drop out')
                window_drop_out.geometry('400x200')
                
                list1 = self.user_name
                lb = tk.Listbox(window_drop_out,listvar = list1)
                for item in list1:
                    lb.insert('end',item)
                lb.place(x=80,y=0)
                 #撤销
                def cancel():
                    lb.delete(0, "end")  #删除所有元素,用于更新列表
                    window_drop_out.destroy()
                def dropout():
                    value = lb.get(lb.curselection())
                    print(value)
                    #lb.delete(value)
                    with open('users_info.pickle','rb') as user_file:  #对比有没重复
                        exist_user_info = pickle.load(user_file)
                        del exist_user_info[value]
                    with open('users_info.pickle','wb') as user_file:
                        pickle.dump(exist_user_info,user_file)
                    tk.messagebox.showinfo('successful','You have drop out it!')
                    window_drop_out.destroy()                
                #定义删除按钮
                b1 = tk.Button(window_drop_out,text = 'drop',width = 15,height = 2,command=dropout,fg='white',bg='green')
                b1.place(x=250,y=40)
                b2 = tk.Button(window_drop_out,text = 'cancel',width = 15,height = 2,command=cancel,fg='white',bg='green')
                b2.place(x=250,y=100)
            def startup():
                list1 = []
                #根据迟到的次数往列表中增加名字的个数
                for key,value in self.user_info.items():
                    for i in range(value+1):
                        list1.append(key)  #往名单中增加名字个数
                on_label = random.randint(0,len(list1)-1)  #随机抽取名单中的序列
                self.name = list1[on_label]  #得到点到人的名字
                self.var.set(self.name)
                print(self.name)
                    
                    
            def Attend():  #出勤
                tk.messagebox.showinfo('提示','perfect')
            def Absent():  #缺勤,记录次数
                self.user_info[self.name] +=1
                print(self.user_info)
                with open('users_info.pickle','wb') as user_file:
                    pickle.dump(self.user_info,user_file)
                if(self.user_info[self.name]<5):
                    tk.messagebox.showinfo('提示','你已经缺勤'+str(self.user_info[self.name])+'次')
                elif(self.user_info[self.name]>=5):
                    tk.messagebox.showinfo('提示','你已经缺勤'+str(self.user_info[self.name])+'次'+'。您将被通知家长')
                
    
                
            #标题
            Label_title = tk.Label(self.window,text = '点名啦',font=('Arial','24'),fg='blue',height=2).pack()
            #点名名字的标题栏
            l = tk.Label(self.window,textvariable = self.var ,bg='yellow',font=('Arial',12),width = 15,height = 2)
            l.pack()
            #刷新,添加,删除
            Button_Refresh = tk.Button(self.window,text='刷新',bg='green',font=('Arial',12),fg='white',command=Refresh).place(x=60,y=420)
            Button_Add = tk.Button(self.window,text='添加',bg='green',font=('Arial',12),fg='white',command=Add).place(x=220,y=420)
            Button_Drop = tk.Button(self.window,text='删除',bg='green',font=('Arial',12),fg='white',command=Drop).place(x=380,y=420)
            #Label = tk.Label(self.window,text = self.user_info.values()).pack()
            #开始点名按钮
            Button_Stop = tk.Button(self.window,text='Start',bg='green',font=('Arial',20),fg='white',command=Start).place(x=55,y=30)
            #到
            Button_Attend = tk.Button(self.window,text='出勤',bg='green',font=('Arial',13),fg='white',command=Attend).place(x=420,y=15)
            #没到
            Button_Absent = tk.Button(self.window,text='缺勤',bg='green',font=('Arial',13),fg='white',command=Absent).place(x=420,y=70)
    

    运行:

        def run(self):
            self.init_data()
            self.init_lable()
            self.window.mainloop()
    

    实现结果

    在这里插入图片描述

    改进

    迟到五次以上实现发短信提醒的功能

    # 创建发送短信窗口
    def send_message():
        email = entry_email.get()
        content = "你已经迟到"+str(self.user_info[self.name])+'次,请通知家长'
        flag = send_mail(content, email)
        if(flag == 1):
            tk.messagebox.showinfo('提示', '信息发送成功')
        else:
            tk.messagebox.showerror('失败', '请重新发送')
            window_send_message = tk.Toplevel(self.window)
            window_send_message.geometry('400x100')
            window_send_message.title('Add new student')
            tk.Label(window_send_message, text='Email :').place(x=20, y=30)
            new_user_name = tk.StringVar()  # 定义新成员变量
            new_user_name.set('输入邮箱')
            # add entry
            entry_email = tk.Entry(window_send_message, textvariable=new_user_name)
            entry_email.place(x=140, y=30)
            # Add Button
            btn_send_message = tk.Button(window_send_message, text='发送', command=send_message)
            btn_send_message.place(x=330, y=30)
           #tk.messagebox.showinfo('提示', '你已经缺勤' + str(self.user_info[self.name]) + '次' + '。您将被通知家长')
    

    定义发短信的模块,可以设定发送方邮箱,需在QQ邮箱中开通POP3/SMTP服务。send_message.py模块如下:

    import smtplib
    from email.mime.text import MIMEText
    
    def send_mail(content, email):
        msg_from = '1724647576@qq.com'  # 发送方邮箱
        passwd = 'ezdgvskeyvpvdbdh'  # 填入发送方邮箱的授权码
        msg_to = email
        subject = "点名"
        msg = MIMEText(content)
        msg['Subject'] = subject
        msg['From'] = msg_from
        msg['To'] = msg_to
        try:
            s = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发送一般使用465端口,使用163邮箱的话,需要更换成smtp.163.com
            s.login(msg_from, passwd)
            s.sendmail(msg_from, msg_to, msg.as_string())
        except Exception as e:
            return 0
            print('error')
            return False
        else:
            return 1
            print('邮件发送成功')
    
        finally:
            s.quit()
        return True
    
    if __name__ == '__main__':
        message = '测试'
        email = '1724647576@qq.com'
        send_mail(message, email)
    
    

    显示:发送成功!

    展开全文
  • 很实用的小程序,可用于教师在课堂上随机点名抽查考勤和随机点名提问。压缩包中包括了应用程序以及VC++6.0源代码。
  • java实现课堂随机点名小程序

    千次阅读 2017-10-17 22:58:00
    通过jdbc连接数据库实现读取学生花名册进行随机点名!  ~jdbc连接mysql数据库 || 注释部分代码可通过读取.txt文档实现显示学生信息  ~通过点击开始按钮实现界面中间标签不断更新学生信息,当按下停止时显示唯一...

    通过jdbc连接数据库实现读取学生花名册进行随机点名!

      ~jdbc连接mysql数据库  ||  注释部分代码可通过读取.txt文档实现显示学生信息

       ~通过点击开始按钮实现界面中间标签不断更新学生信息,当按下停止时显示唯一学生信息,并调用random对象函数实现随机抽取数据库学生信息

        ~界面功能简单,主要实现事件监听和线程实现与销毁。

     

     

    //Menu.java

    package a1;

    import javax.swing.JFrame;

    public class Menu {
    public static void main(String[] args) { //主程序
    randoms n = new randoms();
    FromEx f=new FromEx();
    n.AListener(f);
    n.setResizable(false);
    n.setTitle("学号点名小程序");
    n.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    n.setBounds(700, 200, 100, 200);
    n.setSize(400, 300);
    n.setVisible(true);
    }
    }

     

    //randoms.java

    package a1;
    import java.awt.*;

    import javax.swing.*;
    import javax.swing.JFrame;

    public class randoms extends JFrame{

    JLabel num;//显示标题
    JButton start,stop; // 开始、停止按钮
    JLabel rs; //显示结果
    JPanel jp1,jp2;
    ExListener listener;
    static boolean isSotp = true; //判断当前状态
    public randoms() {
    init();
    }
    void init(){

    num = new JLabel("<<玩的就是心跳>>");
    num.setFont(new Font("黑体", 2, 40));
    start = new JButton("开始");
    stop = new JButton("停止");
    rs = new JLabel("0");

    jp1 = new JPanel();
    jp2 = new JPanel();
    this.add(num,BorderLayout.NORTH);
    jp1.add(rs);
    this.add(jp1,BorderLayout.CENTER);
    FlowLayout layout = new FlowLayout();//面板布局
    layout.setAlignment(FlowLayout.CENTER);
    jp1.setLayout(layout);
    jp2.setLayout(layout);
    jp2.add(start);
    jp2.add(stop);
    rs.setFont(new Font("宋体", 1, 30));//设置结果样式
    rs.setForeground(Color.RED);
    this.add(jp2,BorderLayout.SOUTH);
    }
    void AListener(ExListener listener){
    this.listener=listener;
    listener.set(start, stop, rs, isSotp);
    start.addActionListener(listener); //添加监听
    stop.addActionListener(listener);//添加监听


    }
    }

    //Exlistener.java

    package a1;

    import java.awt.event.ActionListener;

    import javax.swing.*;

    public interface ExListener extends ActionListener{
    public void set(JButton J1,JButton J2,JLabel rs,boolean isSotp);
    }

     

    //ExThead.java  线程的实现

    package a1;

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.Vector;

    import javax.swing.*;

    public class ExThread extends Thread{
    private JLabel rs;
    boolean isSotp;
    int n;
    String a="";
    //ArrayList<String> array=new ArrayList<String>();
    Vector vector=new Vector();
    int getn;
    /*ExThread(JLabel rs,int n,boolean a){
    this.rs = rs;
    this.n = n;
    isSotp=a;
    }*/
    void setbool(boolean a){isSotp=a;};
    void setint(int a){n=a;};

    ExThread(JLabel rs) throws IOException{

    this.rs = rs;
    v(vector);
    //m(array);
    /*        //注释部分读取.txt文档获取花名册信息
    BufferedReader m=new BufferedReader(new FileReader("a.txt"));
    while ((a = m.readLine()) != null) {
    array.add(a);
    }
    getn=array.size();*/
    }
    public void v(Vector a){
    a=vector;
    try{
    Class.forName("com.mysql.jdbc.Driver");//加载 MySQL 驱动程序
    //建立与数据库的连接
    String url = "jdbc:mysql://localhost:3306/conarry";

    Connection cn = DriverManager.getConnection(url,"root","guoxiaotong");
    Statement cmd = cn.createStatement();//创建 Statement 对象
    System.out.println("123");
    String sql="select * from student";
    ResultSet r=cmd.executeQuery(sql);

    while(r.next()){
    String n1=r.getString(1);//获取数据库 第一行第一列
    String n2=r.getString(2); //获取数据库 第一行第二列
    String n3=n1+" "+n2; //连接学号和姓名
    a.add(n3);

    }
    getn=a.size();
    } catch (Exception e) {
    e.printStackTrace();
    }

    }
    /*public void m(ArrayList<String> array){
    this.array=array;
    try{
    Class.forName("com.mysql.jdbc.Driver");//加载 MySQL 驱动程序
    //建立与数据库的连接
    String url = "jdbc:mysql://localhost:3306/conarry";

    Connection cn = DriverManager.getConnection(url,"root","guoxiaotong");
    Statement cmd = cn.createStatement();//创建 Statement 对象
    System.out.println("123");
    String sql="select * from student";
    ResultSet r=cmd.executeQuery(sql);

    while(r.next()){
    String n1=r.getString(1);
    String n2=r.getString(2);
    String n3=n1+" "+n2;
    array.add(n3);

    }
    getn=array.size();
    } catch (Exception e) {
    e.printStackTrace();
    }

    }*/
    @Override
    public void run() {
    while(isSotp){
    try {
    Thread.sleep(500);

    rs.setText((String) vector.get(getnumber(getn)));
    System.out.println("1232");
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
    public static int getnumber(int n){ //根据你输入的总人数返回随机在人数范围内的一个学号
    Random r = new Random();
    int r1 = r.nextInt(n);
    return r1;
    }
    }

    //FromEx.java    事件监听接口实现 重写两个方法

    package a1;

    import java.awt.event.ActionEvent;
    import java.io.IOException;

    import javax.swing.JButton;
    import javax.swing.JLabel;
    import javax.swing.JTextField;
    public class FromEx implements ExListener {
    JButton start,stop;
    JLabel rs;

    static boolean isSotp;
    ExThread t;
    public void set(JButton J1,JButton J2,JLabel rs,boolean isSotp){
    start=J1;
    stop=J2;
    this.rs=rs;
    this.isSotp=isSotp;

    try {
    t= new ExThread(rs);
    } catch (IOException e) {
    // TODO 自动生成的 catch 块
    e.printStackTrace();
    }
    }
    public void actionPerformed(ActionEvent e){

    Object o = e.getSource();//获取触发事件对象实现监听映射。
    if(o == start)  
    {
    //String number = num.getText();
    try {
    t= new ExThread(rs);
    } catch (IOException e1) {
    // TODO 自动生成的 catch 块
    e1.printStackTrace();
    }
    try{
    //int n = Integer.parseInt(number);
    isSotp = true;
    //t.setint(n);
    t.setbool(isSotp);
    t.start();
    }catch(NumberFormatException e2){
    System.err.println("格式错误");

    }
    }else if(o == stop){
    isSotp = false;
    t.setbool(isSotp);
    t.start();
    System.out.println("this is stop");


    }
    }
    }

    转载于:https://www.cnblogs.com/lq518blog/p/7684459.html

    展开全文
  • '] self._namelist = list_data # 初始化记录 def _re_reset(self): # 记录使用日期 dls = [] dy = str(datetime.datetime.today().date()) dls.append(dy) # 记录点名 record = {} for i in self._namelist: record...
    import datetime
    import json
    import os
    import random
    import tkinter as tk
    import openpyxl
    
    # 花名册文件名
    excel_file_path = "花名册.xlsx"#需在当前目录创建对应花名册.xlsx
    # 工作表名
    excel_sheet = "Sheet1"
    # 记录存储文件名
    file_path = "name_record.json"
    
    #封装业务逻辑
    class Call_Name:
        # 私有化变量
        _namelist = None
        # 读取花名册
        def __init__(self):
            wb = openpyxl.load_workbook(excel_file_path)
            get_sheet = wb[excel_sheet]
            list_data = []
            first_row = True
            try:
                for row in get_sheet:
                    # 忽略首行
                    if first_row:
                        first_row = False
                        continue
                    # 读取第一个单元格数据
                    for lab in row:
                        list_data.append(lab.value)
                        break
            except:
                list_data = ['空名单?']
            self._namelist = list_data
    
        # 初始化记录
        def _re_reset(self):
            # 记录使用日期
            dls = []
            dy = str(datetime.datetime.today().date())
            dls.append(dy)
            # 记录点名
            record = {}
            for i in self._namelist:
                record[i] = 0
            name_record = {"date": dls, "last_use": dy, "record": record}
            return name_record
    
        # 创建记录
        def mk_record(self):
            jf_dict = self._re_reset()
            with open(file=file_path, mode='w', encoding='utf-8') as jf:
                json.dump(jf_dict, jf, indent=2, sort_keys=True, ensure_ascii=False)
    
        # 读取记录
        def read_record(self):
            with open(file=file_path, mode='r', encoding='utf-8') as jf:
                jf_data = json.load(jf)
            return jf_data
    
        # 产生随机姓名
        def call_name(self):
            ll = len(self._namelist)
            num = random.randint(1, ll)
            call_name = self._namelist[num - 1]
            return call_name
    
        # 修改记录-----warning!!!
        def re_mod(self, name=None, re_date=None):
            jf_data = self.read_record()
            record = jf_data["record"]
            use_date = list(jf_data["date"])
            if name:
                v = record[name] + 1
                jf_data["record"][name] = v
            if re_date:
                use_date.append(re_date)
                jf_data["date"] = use_date
                jf_data["last_use"] = re_date
            with open(file=file_path, mode='w', encoding='utf-8') as jf:
                json.dump(jf_data, jf, indent=2, sort_keys=True, ensure_ascii=False)
    
        # 获取记录次数
        def re_times(self):
            times_list = []
            record = self.read_record()["record"]
            for k, v in record.items():
                times_list.append(v)
            return times_list  # 返回记录次数
    
        # 获取被点到成员记录次数
        def call_times(self, name):
            record = self.read_record()["record"]
            return record[name]
    
    #封装事件
    class ForGUI:
        # 初始化
        re_date = None
    
        def __init__(self):
            try:
                cname = Call_Name()
            except:
                msg["text"] = "未找到:%s" % excel_file_path
                msg.update()
            else:
                try:
                    record = cname.read_record()  # 读取记录
                except:
                    cname.mk_record()  # 读取异常则重新创建记录
                    record = cname.read_record()
                self.re_date = record["date"]  # 获取使用日期记录
                # 每5天初始化一次记录
                if len(self.re_date) > 5:
                    cname.mk_record()  # 重新创建记录
    
        # 开始点名,输出有效姓名:姓名对应记录不为最大次数
        def start(self):
            cname = Call_Name()
            times = cname.re_times()  # 获取记录次数
            max_times = max(times)  # 获取记录最大次数
            min_times = min(times)  # 获取记录最小次数
            td = str(datetime.datetime.today().date())  # 获取当前日期
            if not td in self.re_date:
                cname.re_mod(re_date=td)
            while True:
                name = cname.call_name()  # 产生随机姓名
                times = cname.call_times(name)  # 获取被点到成员记录次数
                if max_times != min_times:
                    if times != max_times:
                        cname.re_mod(name=name)  # 修改记录
                        msg["text"] = name
                        msg.update()
                        break
                    else:
                        continue
                else:
                    cname.re_mod(name=name)  # 修改记录
                    msg["text"] = name
                    msg.update()
                    break
    
        # 查看花名册
        def open_name_excel(self):
            try:
                os.system("start %s&exit" % excel_file_path)
            except:
                msg["text"] = '\n未找到花名册╮(╯▽╰)╭\n'
                msg["font"] = ('', 18)
                msg.update()
    
        # 查看点名记录
        def open_record(self):
            try:
                os.system("start %s&exit" % file_path)
            except:
                msg["text"] = '\n未找到点名记录╮(╯▽╰)╭\n'
                msg["font"] = ('', 18)
                msg.update()
    
        # 获取花名册名单
        def get_name_list(self):
            try:
                wb = openpyxl.load_workbook(excel_file_path)
                get_sheet = wb[excel_sheet]
            except:
                msg["text"] = "未找到:%s" % excel_file_path
                msg.update()
            else:
                list_data = []
                first_row = True
                for row in get_sheet:
                    # 忽略首行
                    if first_row:
                        first_row = False
                        continue
                    # 读取第一个单元格数据
                    for lab in row:
                        list_data.append(lab.value)
                        break
                return list_data
    
    # 创建窗口
    root = tk.Tk(className="点名工具")
    # 设置窗口大小
    setWidth = 300
    setHeight = 180
    # 获取屏幕分辨率
    screenWidth = root.winfo_screenwidth()
    screenHeight = root.winfo_screenheight()
    
    x = int((screenWidth - setWidth) / 2)
    y = int((screenHeight - setHeight) / 2)
    # 设置窗口初始位置屏幕居中
    root.geometry("%sx%s+%s+%s" % (setWidth, setHeight, x, y))
    # 设置窗口宽高固定
    root.resizable(0, 0)
    # 创建菜单栏
    m1 = tk.Menu(root, tearoff=False)
    # 创建子菜单,不显示分窗
    MenuBar = tk.Menu(m1, tearoff=False)
    MenuBar.add_command(label='查看名单', command=ForGUI().open_name_excel)
    MenuBar.add_command(label='查看记录', command=ForGUI().open_record)
    MenuBar.add_command(label='清空记录', command=Call_Name().mk_record)
    
    # 将子菜单加入菜单栏中
    m1.add_cascade(label='选项', menu=MenuBar)
    m1.add_command(label='Exit', command=root.quit)
    # 将菜单栏添加到窗口
    root.config(menu=m1)
    # 创建文本显示
    f1 = tk.Frame(root, bd=1, height=150, width=200)
    pass
    f1.pack(pady=10)
    msg = tk.Label(f1, text="\n别紧张(●ˇ∀ˇ●)\n", fg="green")  # 创建文本控件
    msg.pack(pady=10)
    msg["font"] = ('', 18)
    f2 = tk.Frame(root)
    f2.pack(pady=10)
    
    # 循环随机显示花名册名单
    name_list = ForGUI().get_name_list()
    def info():
        t = random.randint(1, len(name_list))
        msg["font"] = ('', 44)
        msg["text"] = (name_list[t - 1])
    
    def bt_listen():
        while bt["state"] == 'normal':
            bt['command'] = bt_start
            bt['text'] = "就决定是你了"
            root.after(500, info)
            bt.update()
            if bt['text'] == "开始":
                break
    def bt_start():
        bt['command'] = bt_listen
        bt['text'] = "开始"
        fg = ForGUI()
        root.after(500, fg.start)
        bt.update()
    
    # 创建开始按钮
    bt = tk.Button(f2, text='开始点名喽', stat="normal", command=bt_listen, bd=4, width=20, font=18)
    bt.pack()
    root.mainloop()

     

    展开全文
  • '] self._namelist = list_data # 初始化记录 def _re_reset(self): # 记录使用日期 dls = [] dy = str(datetime.datetime.today().date()) dls.append(dy) # 记录点名 record = {} for i in self._namelist: record...
  • 管琳娜 黄焱摘要:随着社会的...课堂点名系统在.NET的框架下,使用C#语言中的Windows窗体应用程序,在Visual Studio 2010中设计和实现了点名系统的各项功能。考勤、随机点名以及录入学生信息的功能基本上满足了教...
  • 点名微信小程序2020-07-28

    千次阅读 2020-07-28 18:04:36
    1.首页【导入Exce表文件,点名点名记录] 2.导入Exce表【有范文,导入Exce表按钮】 3.点名【选中蓝色,未选中黑白色,提交点名按钮】 4.点名记录【时间-年月日-时分秒】 5.点名详情【已到蓝色,未到白色,支持...
  • 点名抽答程序(QT)

    2016-03-03 22:33:41
    QT写的一个老师上课点名抽答程序,很程序 源码附带打包好的程序文件
  • 课堂PPT 随机点名模板,利用VBA宏代码编写,在课堂点名时增加课堂氛围。
  • 为了能让我们的孩子们尽量来教室上课,增强课堂的参与度,激发课堂激情,提高学习效率,一哥也是煞费苦心,于是开发出了这么一款课堂点名提问神器,跟大家分享一下。 打开神器,看到的界面是这样子的,我很感激有...
  • 课堂点名程序,使课堂点名公正公开,程序随机选择学生名称并输出显示在控制台上,可以连续点名,也可以点击退出,快捷高效。
  • 用C语言实现的点名程序,有简单的界面UI。
  • /* Note:Your choice is C IDE */ #include "stdio.h" #include"stdlib.h" main() { int i,j; i=rand(); j=i%45+1; printf("%d",j); }
  • python实现自动点名系统。
  • C#课堂随机点名程序

    2016-09-01 14:25:15
    在大学课堂里,老师在课堂上考勤和提问是很频繁的行为。把学生名单按照txt格式导入,然后点击开始按钮,学生的姓名就会随机在界面上滚动...起到一个随机点名和随机考勤的作用。 可以导出点到名字的名单,记录迟到结果。
  • 这个资源是我当时写这个程序的代码,进入excel按我的教程http://blog.csdn.net/u012343179/article/details/49833965 做一遍应该得到的是一样的结果。 如果不知道怎么使用这两个文件,可以百度一下。 里面有个word...
  • 原创:用VB和ACCESS做的一个上课点名用的通用小程序。支持从Excel文件中读写数据。
  • 学生课堂随机点名系统

    千次阅读 2018-06-19 23:30:38
    可爱是知名中学老师,今天突然问我能不能帮她写一个随机数生成的程序,用于学生上课点名回答问题用,哈哈,装逼的时候到啦:) 基本思路 最近写惯了shell、python、js、java、android,要么是不带界面的,要么...
  • 本系统是基于PC/windows10/Eclipse/Jcreator Pro/JBuild/JDK1.8环境下开发设计的,编写是采用java语言,主要体现了对学生随机点名提问情况的考核和统计记录功能,该系统简单易用,运行稳定,使用者可以直接导入班级...
  • 云开发技术开发的上课开会签到小程序的源码(已开源)。 源码有超级详细的代码注释,很容易看懂 这个签到小程序可以用于毕业设计、学习使用、二次开发、上线使用等等,都可以! 源码下载地址(复制链接去浏览器下载...
  • EXCEL VBA (课堂随机点名程序

    千次阅读 2015-11-14 10:22:32
    第1到5步按照 ... 操作。 然后用工具箱 ...建3个标签,分别是“课堂随机点名系统”,“起始学号”,“截止学号” 建2个文本框,TextBox1放在“起始学号”后面,TextBox2放在“截止学号”后面 把工具箱拉
  • 随机点名ppt

    2018-03-06 18:36:15
    为一个单独的PPT页,用于老师上课点名,也可以用于抽奖等随机选人的项目。用VBA编写的,练练手。目前支持学生信息自动导入,不用手工一个个输入。内有详细说明文档,看心情更新~ 390161081@qq.com
  • 网络121第3周实验——实现随机点名的签到程序

    千次阅读 热门讨论 2014-03-17 22:46:41
    2 Java语言程序设计-基础篇(原书第8版-中文版) 3 Head First Java(中文版) 实验内容  大家可以选择做 1、2,或选择做3、4,全部做更鼓励。 1:计算闰年。教材P45 编程题2:判断某一年份是否为闰年。(如果这...
  • 小时候上学点名,大学上课点名,出来社会上班还是要点名。卢老师也是烦透了,好想逃… 心里默念别叫我!别叫我!千万别叫我!越是这样,偏偏就被点到,真是醉了! 所以本着公平公正的原则,让大家都有机会被点名...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 780
精华内容 312
关键字:

上课点名小程序