课堂点名器V4(写入SQL Sever数据库)

  1. 任务描述:
    用Python实现一个简单课堂点名器V4
    要求:
    (1). 以18级网工学生名单为例,从外部文件导入学生信息,并将学生信息存入MySQL数据库,随机对班级所有同学进行点名;
    (2). 判断未到学生是否有请假条,有则视为请假,无则视为旷课。
    (3). 对点名结束后进入教室的学生将旷课改为迟到。
    (4). 对中途离开课堂学生计为早退(需要考虑学生既是迟到又是早退的情况)。
    (5). 将未到学生按照请假、旷课、迟到、早退四类分别存储在MySQL数据库中的四个表中。
    (6). 从MySQL数据中读取请假、旷课、迟到、早退四类信息并分别展示。
    (经老师同意,数据库采用SQL Sever)
  2. 方案:
    此代码分为7个部分,下面依次介绍(姓名列表和学号列表内容一一对应):
    (1) import导用xlrd、pymssql、random;
    (2) 创建InputInformation函数,运用xlrd库内容用for循环和table.cell_value()读取本地csv文件内容,用INSERT INTO * 写入到数据库中;
    (3) 创建SignIn_ALL函数,进行初步的点名签到处理:创建StudentName_SignIn_list列表和 StudentNumber_SignIn_list列表。用while循环构造随机数组成的集合set,转为list,for循环进行点名处理,对未到的学生记录到StudentName_SignIn_list中,并依据StudentNumber_list获取该学生的学号记录到StudentNumber_SignIn_list中,return返回StudentName_SignIn_list, StudentNumber_SignIn_list后期需要对此处理;
    (4) 创建SignIn_paper函数,对写了请假条的学生进行处理:创建student_paper接受拥有请假条的学生的姓名,while循环处理,if语句判断是否在StudentName_SignIn_list(初步签到未到学生名单)中,若在则用list.insert()放入新创建的list_student_paper(储存有请假条学生的姓名)列表中,用list.index()找出所在StudentName_SignIn_list列表中的位置赋值给address,用list.pop()方法删去所在StudentName_SignIn_list列表和StudentNumber_SignIn_list列表对应位置内容(为有请假条学生的姓名和学号),用list.index()找出所在StudentName_list列表中的位置赋值给address2,用list.insert()方法将该学生的学号放入新创建的list_studentNumber_paper(储存有请假条学生的学号)列表中。处理结束调用INSERT INTO * 写入到数据库中;
    (5) 创建SignIn_chidao函数,过程类似SignIn_paper函数,处理结果:list_student_chidao储存迟到学生姓名,list_studentNumber_chidao储存迟到学生的学号,展示并调用InputInformation_File函数存储;此时StudentName_SignIn_list列表和StudentNumber_SignIn_list列表中存储的为旷课学生(=全班学生-签到学生-迟到学生-请假学生)的姓名和学号调用调用INSERT INTO * 写入到数据库中;
    (6) 创建SignIn_zaotui函数,过程类似SignIn_paper函数,处理结果:list_studentName_zaotui记录早退学生姓名,list_studentNumber_zaotui记录早退学生学号处理结束调用调用INSERT INTO * 写入到数据库中;
    (7) 主函数:一次运行InputInformation函数读取数据,SignIn_ALL函数并将return结果給part1,用part1[1]和part1[0]储存初处理的学生学号和姓名,SignIn_paper函数统计请假学生,SignIn_chidao函数统计迟到学生,SignIn_zaotui函数统计早退学生。添加for循环,导用select语句对数据库中的内容进行展示。
  3. 代码:
import xlrd
import pymssql
import random

def InputInformation(StudentName_list, StudentNumber_list):
    print("正在导入学生信息:")
    path = 'E:/test/testxlrd.csv'
    data = xlrd.open_workbook(path)
    table = data.sheets()[0]
    for i in range(1, table.nrows):
        StudentNumber_list.append(table.cell_value(i, 1))
        StudentName_list.append(table.cell_value(i, 2))
    print("正在写入数据库student_list:")
    # 建立连接并获取cursor,
    conn = pymssql.connect(host='localhost', server='******', port='****', user='sa',
                           password='******', database='pythonDB')
    cursor = conn.cursor()
    # 创建测试表 student,包含字段:ID、name、number
    cursor.execute("""
    IF OBJECT_ID('student_list', 'U') IS NOT NULL
       DROP TABLE student_list
    CREATE TABLE student_list (
            id INT NOT NULL,
            name VARCHAR(100),
            number INT,
            PRIMARY KEY(id)
        )
        """)
    # 插入学生数据
    for i in range(1, table.nrows):
        cursor.executemany(
            "INSERT INTO student_list VALUES (%d, %s, %d)",
            [(i, StudentName_list[i - 1], StudentNumber_list[i - 1])])
    # 主动调用commit() 来保存更改。
    conn.commit()
    # 连接用完后记得关闭以释放资源
    conn.close()

def SignIn_ALL(StudentName_list, StudentNumber_list):
    print
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值