【tkinter】Python实现课堂点名器V5(含有登录注册功能,GUI图形界面)

用Python实现一个简单课堂点名器V5

一,任务描述

  1. 实现教师用户的注册和用户登陆功能,将教师用户名和密码存储在MySQL数据库。

  2. 以网工18、网工19的学生名单为例,从外部文件分别导入程序中,并将学生信息分别存入MySQL数据库中的两个表中。

  3. 实现登陆后的教师用户选择所需点名的课程和班级的功能。

  4. 随机对班级所有同学进行点名。

  5. 判断未到学生是否有请假条,有则视为请假,无则视为旷课。

  6. 对点名结束后进入教室的学生将旷课改为迟到。

  7. 对中途离开课堂学生计为早退(需要考虑学生既是迟到又是早退的情况)。

  8. 将未到学生按照请假,旷课,迟到,早退四类分别存储在MySQL数据库中的四个表中。

  9. 从MySQL数据中读取请假、旷课、迟到、早退四类信息并分别展示。

二, 设计方案

  1. 运用GUI程序面向对象的思想

先导入所需模块(tkinter, pymysql, xlrd, random)

import xlrd # 导入xlrd包,对Excel读取数据

import random # 导入随机random模块

import pymysql # 导入pymysql包,对mysql数据库进行连接

from tkinter import *

from tkinter import messagebox

(2) 创建DianMing()类:

定义函数student,输入读取Excel文件地址,从Excel文件读取学号和姓名,返回全体学生学号和姓名列表。

定义函数num:输入想要点名人数,返回点名人数。为了输入格式的完整。

定义函数dianming:输入函数student返回的列表学号,姓名,人数,进行随机点名,返回随机学号,姓名列表。

定义函数zaotui:输入列表学号,姓名,判断是否早退,返回早退学号,姓名列表。用于后面函数的调用。

定义函数puanduan1:输入函数dianming返回的学号,姓名,判断是否来了,返回点名期间早退和没来学号,姓名列表。里面调用函数zaotui函数用来返回没来的学号和姓名列表。

定义函数panduan2:输入列表学号,姓名, 向缺勤表和迟到表里插入数据 ,返回早退学号列表,用于判断点名期间没有请假条的人。里面也有函数zaotui用来返回早退的学号和姓名列表。

定义函数qingjia:输入函数puanduan1返回没来的列表学号,判断是否有请假条,有就将信息插入请假表中,没有就调用函数panduan2向缺勤表和迟到表里插入数据,返回点名期间没来并且早退学号,姓名列表。

定义函数data:输入学号,姓名列表和插入的sql语句,利用该函数将信息一个一个插入相应的表中。

(3) 创建Applicantion(Frame)类:(继承了Frame)

定义构造函数__init__(self,
master=None):为了将窗口(Tk)和容器(Frame)结合。

定义函数createWidget(self):创建登录界面的组件,里面有登录和注册按钮。

定义函数login(self):点击登录按钮时的事件,登录成功就销毁窗口。

定义函数set(self):点击注册按钮时的事件。

里面创建zhuce(Frame)类:为了创建出注册界面,注册成功就销毁窗口。

(4) 创建pick(Frame)类:(继承了Frame)

里面有单选按钮,可以选择班级和课程,点击确定按钮,就调用函数pick1(self):出现提示选班选课信息。

(5) 主函数:

连接数据库(主机:localhost用户名:root密码:root数据库名:my01端口:3306)

  1. 方案图:

程序流程图可参考:我上次博客。

三,程序代码


import xlrd                 # 导入xlrd包,对Excel读取数据
import random               # 导入随机random模块
import pymysql              # 导入pymysql包,对mysql数据库进行连接
from tkinter import *
from tkinter import messagebox


# 创建类:实现点名过程,创建空白表
class DianMing():
    # 定义函数:从Excel文件读取学号和姓名,返回全体学号和姓名列表
    def student(self, address):
        data = xlrd.open_workbook(address)
        table = data.sheet_by_name('Sheet1')    # 选定页码1--(Sheet1)

        rowNum = table.nrows    # 总行数
        colNum = table.ncols    # 总列数
        a = []  # 获得学号
        b = []  # 获得姓名

        for y in range(colNum):  # 自动索引学号(xuehao),姓名(name)
            if table.cell_value(0, y) == 'xuehao':
                for x in range(1, rowNum):
                    vaule = table.cell_value(x, y)
                    vaule = float(vaule)
                    vaule = int(vaule)
                    a.append(vaule)
            if table.cell_value(0, y) == 'name':
                for x in range(1, rowNum):
                    vaule = table.cell_value(x, y)
                    b.append(vaule)
        return a, b

    # 定义函数:传入全班人数,输入想要点名人数
    def num(self, length):
        while True:
            s = input()
            if s.isdigit():  # 判断输入是否为数字,是(true),否(Flase)
                num = eval(s)
                if (0 <= num <= length):
                    return num
                else:
                    print('超出人数(全班人数:{0})!请再次输入:'.format(length), end='')
                    continue
            else:
                print('请规范输入!再次输入点名人数(全班人数:{0}):'.format(length), end='')
                continue

    # 定义函数:输入列表学号,姓名,人数,进行随机点名,返回随机学号,姓名列表
    def dianming(self, a, b, num):
        students = dict(zip(a,b))   #化为字典,便于后面查询
        d = []
        e = []
        c = random.sample(a, num)  # 从学号列表中随机抽取不同的元素
        for i in c:
            d.append(i)
            e.append(students[i])
        return d,e

    # 定义函数:输入列表学号,姓名,判断是否来了,返回点名期间早退和没来学号,姓名列表
    def panduan1(self, a, b):
        students = dict(zip(a, b))  # 化为字典,便于后面查询
        c = []
        d = []
        f = []
        g = []
        for xuehao in a:
            print('学号为{0}的学生是否来了(来:1,没来:2):'.format(xuehao), end='')
            while True:
                x = input()
                if (x == '1'):
                    c.append(xuehao)
                    d.append(students[xuehao])
                    break
                elif (x == '2'):
                    f.append(xuehao)
                    g.append(students[xuehao])
                    break
                elif (x != '1' or x != '2'):
                    print('请规范输入!再次输入:', end='')
                    continue
        x = self.zaotui(c,d)
        y = x[0]
        z = x[1]
        return y,z,f,g

    # 定义函数:输入列表学号,姓名,判断是否早退,返回早退学号,姓名列表
    def zaotui(self, a, b):
   
  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值