python学生管理系统 (数据库)

设计思路

1.添加学生时:

  1. 对每个输入项做单独判断
  2. 在每个输入项错误五次后自动返回到选择操作界面
  3. 所以数据输入完以后 添加到数据库时自动去除输入的内容的两边空格
  4. 自动检测学号是否存在数据库中,如果存在则提示重新输入

2.查询学生信息时:

  查询方式有:

  1. 查询所有
  2. 条件查询

   条件查询包括有:

  1. 学号查询
  2. 姓名查询
  3. 班级查询
  4. 性别查询
  5. 手机号查询
  6. 年龄查询

所有输入选择框或输入框时均为三次错误自动返回到选择操作界面

3.删除学生信息时:

  1. 删除指定学生信息
  2. 删除所有学生信息

       删除指定学生信息包括有:

  1. 根据学号删除
  2. 根据班级删除
  3. 根据性别删除
  4. 根据姓名删除

4.更改学生信息时:

  1. 先列出数据库中的所有学生信息
  2. 根据学号更改信息
  3. 根据姓名更改信息

5.特别功能

  1. 天气显示
  2. 导出信息
  3. 添加地址查询
  4. 添加男女查询
  5. 成绩 单独一张表
  6. 系统激活码邮箱发送
  7. 时间显示

登录管理系统特点:

  1. 单独的表格存储账号和密码  可以做到数据一对一
  2. 添加账号时,可以判断账号目前是否存在数据库中
  3. 修改账号密码时,要求输入原密码 并且三次输入错误后自动返回到选择操作界面
  4. 查询账号时 ,列出所有账号 不显示密码
  5. 删除账号时,为了防止数据库中没有任何账号 要求root账号不能被删除 只能更改密码
  6. 登录系统时自动生成四位数的包含数字和大小写字母的验证码  验证时不区分大小写
  7. 每个包含数字编号选择时自动判断合法性  字母则要求重新输入   每个输入框只能错误三次  Y/n的选择时不区分大小写
  8. 部分使用easygui

实现

import sqlite3
import datetime
import random
import easygui as g
import pandas as pd
def tuichu():
    xz=input('继续操作,回车即继续:')
    if xz!=' ':
        xz=' '
def yzm():
    while True:
        s = 'qazwsxedcrfvtgbyhnujmiklopQAZWSXEDCRFVTGBYHNUJMIKOLP0123456789'
        code = ''
        for i in range(4):
            ran = random.randint(0, len(s) - 1)
            code += s[ran]
        print('验证码', code)
        user_input = str(input('请输入验证码(区分大小写):'))
        if user_input == code:
            print('验证码输入正确')
            break
        else:
            print('很遗憾,验证码输入错误,请重新输入!')
            continue
def glysz(ks):
    g.msgbox(msg="""欢迎使用学生管理系统
    注意事项:
    1.每个选项,输入对应序号进行选择
    2.输入信息时需要退出或者取消,请输入“@”进行退出取消
    3.输入信息时一定要按照提示进行输入
    4.每次选择时请仔细阅读提示
    5.此项目为lingxuanbai教学使用
    6.本程序最终解释权归lingxuanbai所有
    """, title="""使用说明""", ok_button="我知道了")
    print("正在初始化中........")
    for i in range(9):
        print(i)
    print("初始化成功")
    print("第一次启动,请先输入激活码(激活码会发送到你的邮箱)")
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    my_sender = ''
    my_pass = ''
    sjr = input("请输入你的邮箱:")
    my_user = sjr
    ret = True
    try:
        s = 'QAZWSXEDCRFVTGBYHNUJMIKOLP0123456789'
        code = ''
        for i in range(8):
            ran = random.randint(0, len(s) - 1)
            code += s[ran]
        msg = MIMEText(f'激活码为:{code}', 'plain', 'utf-8')
        msg['From'] = formataddr(["学生管理系统", my_sender])
        msg['To'] = formataddr(["FK", my_user])
        msg['Subject'] = "验证码"
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender, [my_user, ], msg.as_string())
        server.quit()
    except Exception:
        ret = False
    if ret == False:
        print("邮件发送失败")
    else:
        print("发送成功")
    yzmyx = input("请输入激活码:")
    while yzmyx != code:
        yzmyx = str(input("激活码输入错误请重新输入:"))
    print("激活码正确,激活成功")
    name_1= str(input("请先创建一个管理员账号:"))
    while len(name_1)==0:
        name_1=input("管理员账号不能为空,请重新输入:")
    mima_1 = str(input('请设置管理员密码:'))
    while len(mima_1)==0:
        mima_1=input("密码不能为空,请重新输入:")
    while len(mima_1) < 6:
        mima_1 = input("密码长度不够,至少6位,请重新输入:")
    while mima_1.isdigit():
        mima_1=str(input("你的密码过于简单,请重新输入:"))
    while len(mima_1) < 6:
        mima_1 = input("密码长度不够,至少6位,请重新输入:")
    yzm()
    ks.execute("insert into gly(name,mima)values ('%s','%s')"%(name_1,mima_1))
    print("添加成功")
    tuichu()
    return
def glyxg(ks,gl):
    while True:
        print("\033[1;30;47m==========欢迎进入管理员界面========\033[0m")
        print("---------------选择选项------------")
        print("\t\t1.修改管理员账号密码")
        print("\t\t2.进入学生管理系统")
        xzsz=input("请选择:")
        while len(xzsz)==0:
            xzsz = input("选择不能为空,请重新选择:")
        if xzsz=="1":
            name_1=str(input("请输入新账号(输入@退出):"))
            if name_1=="@":
                tuichu()
                return
            while len(name_1)==0:
                name_1=str(input("账号不能为空,请重新输入(输入@退出):"))
                if name_1 == "@":
                    tuichu()
                    return
            mima_1=str(input("请输入新密码(输入@退出):"))
            if mima_1=="@":
                tuichu()
                return
            while len(mima_1)==0:
                mima_1=str(input("密码不能为空,请重新输入(输入@退出):"))
                if mima_1 == "@":
                    tuichu()
                    return
                if 0<len(mima_1)<6:
                    mima_1 = input("密码长度不够,至少6位,请重新输入(输入@退出):")
                    if mima_1 == "@":
                        tuichu()
                        return
            while 0 < len(mima_1) < 6:
                mima_1 = input("密码长度不够,至少6位,请重新输入(输入@退出):")
                if mima_1 == "@":
                    tuichu()
                    return
            update_sql = "update gly set name='%s',mima='%s' where id = 1"%(name_1,mima_1)
            ks.execute(update_sql)
            print("修改成功")
            tuichu()
        if xzsz=="2":
            print("正在进入...")
            break
        gl.commit()
        ks.close()
        gl.close()
def glydlzc():
    while True:
        gl = sqlite3.connect("gly")
        ks = gl.cursor()
        create_sql = "create table if not exists gly(id integer primary key,name text,mima text)"
        ks.execute(create_sql)
        select_sql = "select count(*) from gly"
        count = ks.execute(select_sql).fetchone()[0]
        if count==0:
            print("欢迎使用学生管理系统:")
            glysz(ks=ks)
        elif count!=0:
            name_1=str(input("请输入管理员账号:"))
            while len(name_1)==0 :
                name_1=str(input("管理员账号不能为空,请重新输入:"))
            mima_1=str(input("请输入管理员密码:"))
            while len(mima_1)==0:
                mima_1=str(input("密码不能为空,请重新输入:"))
            yzm()
            select_sql = "select * from gly where name='%s'" % name_1
            name2 = ks.execute(select_sql).fetchone()
            if name2==None or mima_1!=name2[2]:
                print("账号或密码错误,请重新输入")
                tuichu()
                continue
            else:
                print('密码正确!正在进入...')
                glyxg(ks=ks,gl=gl)
                break
        gl.commit()
        ks.close()
        gl.close()
def xszl():
    select_sql = "select count(*) from xs"
    count = cursor.execute(select_sql).fetchone()[0]
    return count
def xhcx():
    while True:
        xhsc=str(input("请输入该学生学号(输入@退出):"))
        if xhsc=="@":
            tuichu()
            break
        select_sql = "select * from xs where leanNo='%s'" % xhsc
        result_list = cursor.execute(select_sql).fetchone()
        while result_list!=None:
            select_sql = "select * from xs where leanNo='%s'" % xhsc
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf, "班级:", classroom, "年龄:", age, "性别:", sex,"电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            tuichu()
            break
        else:
            print('该学生不存在,请重新输入')
            tuichu()
            continue
def xmcx():
    while True:
        xmcxx = str(input("请输入该学生姓名(输入@退出):"))
        if xmcxx=="@":
            tuichu()
            break
        select_sql = "select * from xs where name='%s'" % xmcxx
        result_list = cursor.execute(select_sql).fetchone()
        while result_list!=None:
            select_sql = "select * from xs where name='%s'" % xmcxx
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf, "班级:", classroom, "年龄:", age, "性别:", sex,"电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            tuichu()
            break
        else:
            print('该学生不存在,请重新输入')
            tuichu()
            continue
def bjcx():
    while True:
        bjcxx = str(input("请输入要查询的班级(输入@退出):"))
        if bjcxx=='@':
            tuichu()
            break
        select_sql = "select * from xs where classroom='%s'" % bjcxx
        r_1 = cursor.execute(select_sql).fetchone()
        while r_1!=None:
            select_sql = "select * from xs where classroom='%s'" % bjcxx
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf,"班级:", classroom, "年龄:", age, "性别:", sex,"电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            select_sql = "select count(*) from xs where classroom='%s'" % bjcxx
            count = cursor.execute(select_sql).fetchone()[0]
            print('一共查询到:', count, '名学生')
            tuichu()
            break
        else:
            print('该班级不存在,请重新输入')
            tuichu()
            continue
def nfcx():
    while True:
        bjcxx = str(input("请输入要查询的入学年份(输入@退出):"))
        if bjcxx == '@':
            tuichu()
            break
        select_sql = "select * from xs where rxnf='%s'" % bjcxx
        r_1 = cursor.execute(select_sql).fetchone()
        while r_1 != None:
            select_sql = "select * from xs where rxnf='%s'" % bjcxx
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf, "班级:", classroom, "年龄:", age, "性别:", sex,"电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            select_sql = "select count(*) from xs where rxnf='%s'" % bjcxx
            count = cursor.execute(select_sql).fetchone()[0]
            print('一共查询到:', count, '名学生')
            tuichu()
            break
        else:
            print('该年份入学的学生不存在,请重新输入')
            tuichu()
            continue
def sfzhmcx():
    while True:
        sfz = str(input("请输入要查询的身份证号码(输入@退出):"))
        if sfz == '@':
            tuichu()
            break
        select_sql = "select * from xs where sfzhm='%s'" % sfz
        r_1 = cursor.execute(select_sql).fetchone()
        while r_1 != None:
            select_sql = "select * from xs where rxnf='%s'" % sfz
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf, "班级:", classroom, "年龄:", age, "性别:", sex,"电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            select_sql = "select count(*) from xs where sfzhm='%s'" % sfz
            count = cursor.execute(select_sql).fetchone()[0]
            print('一共查询到:', count, '名学生')
            tuichu()
            break
        else:
            print('该学生不存在,请重新输入')
            tuichu()
            continue
def xbcx():
    while True:
        xb=str(input("请输入要查询的性别(输入@退出):"))
        if xb=="@":
            tuichu()
            break
        select_sql = "select * from xs where sex='%s'" % xb
        r_1 = cursor.execute(select_sql).fetchone()
        while r_1 != None:
            select_sql = "select * from xs where sex='%s'" % xb
            result_list = cursor.execute(select_sql)
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                print("id:", id, "学号:", leanNo, "姓名:", name, "入学年份:", rxnf, "班级:", classroom, "年龄:", age, "性别:", sex,
                      "电话号码:", phone, "身份证号码:", sfzhm, "家庭地址:", jtzz)
                print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
            select_sql = "select count(*) from xs where sex='%s'" % xb
            count = cursor.execute(select_sql).fetchone()[0]
            print('一共查询到:', count, '名学生')
            tuichu()
            break
        else:
            print('该性别的学生不存在,请重新输入')
            tuichu()
            continue
def xscx():
    xszlcx=xszl()
    if xszlcx != 0:
        select_sql = "select * from xs"
        result_list = cursor.execute(select_sql)
        for id,leanNo,name,rxnf,classroom,age,sex,phone,sfzhm,jtzz in result_list:
            print("id:",id,"学号:",leanNo,"姓名:",name,"入学年份:",rxnf,"班级:",classroom,"年龄:",age,"性别:",sex,"电话号码:",phone,"身份证号码:",sfzhm,"家庭地址:",jtzz)
            print("-  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -")
        bd = cursor.execute("select leanNo from xs").fetchall()
        print('一共查询到:',len(bd),'名学生')
        tuichu()
        return
    else:
        print('学生信息为空,无法查询!')
        tuichu()
def tjxs():
    leanno=str(input("请输入学生学号(输入@退出):"))
    if leanno == "@":
        tuichu()
        return
    while len(leanno)==0:
        leanno=str(input("学生学号不能为空,请重新输入(输入@退出):"))
        if leanno=="@":
            tuichu()
            return
    select_sql = "select * from xs where leanNo='%s'" % leanno
    leanno1 = cursor.execute(select_sql).fetchone()
    while leanno1!=None:
        leanno = str(input("学生学号不能为重复,请重新输入(输入@退出):"))
        select_sql = "select * from xs where leanNo='%s'" % leanno
        leanno1 = cursor.execute(select_sql).fetchone()
        if leanno=="@":
            tuichu()
            return
    name_2=str(input("请输入学生姓名(输入@退出):"))
    if name_2=="@":
        tuichu()
        return
    while len(name_2)==0:
        name_2=str(input("学生姓名不能为空,请重新输入(输入@退出):"))
        if name_2=="@":
            tuichu()
            return
    while name_2.isdigit()!=False:
        name_2=str(input("学生姓名不能为数字,请重新输入(输入@退出):"))
        if name_2=="@":
            tuichu()
            return
    rxnf_1=str(input("请输入学生入学年份(输入@退出):"))
    while len(rxnf_1)==0:
        rxnf_1 = str(input("学生入学年份不能为空,请重新输入(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            return
    if rxnf_1=="@":
        tuichu()
        return
    while rxnf_1.isdigit()==False:
        rxnf_1=str(input("学生入学年份必须是数字,请重新输入(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            return
    while len(rxnf_1)>4 or len(rxnf_1)<4:
        rxnf_1 = str(input("输入格式错误(年份为4位数)请重新输入:(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            return
    class_1=str(input("请输入该学生所在班级(输入@退出):"))
    if class_1=="@":
        tuichu()
        return
    while len(class_1)==0:
        class_1=str(input("学生班级不能为空,请重新输入(输入@退出):"))
        if class_1 == "@":
            tuichu()
            return
    age_1=input("请输入学生的年龄(输入@退出):")
    if age_1=="@":
        tuichu()
        return
    while len(age_1)==0 :
        age_1=input("学生年龄不能为空,请重新输入(输入@退出):")
        if age_1 == "@":
            tuichu()
            return
    while age_1.isdigit()==False:
        age_1 = str(input("学生年龄必须是数字,请重新输入(输入@退出):"))
        if age_1 == "@":
            tuichu()
            return
    sex_1=str(input("请输入学生性别(输入@退出):"))
    if sex_1=="@":
        tuichu()
        return
    while len(sex_1)==0:
        sex_1=str(input("学生性别不能为空,请重新输入(输入@退出):"))
        if sex_1 == "@":
            tuichu()
            return
    while sex_1.isdigit()!=False:
        sex_1=str(input("学生性别不能为数字,请重新输入(输入@退出):"))
        if sex_1=="@":
            tuichu()
            return
    phone_1=str(input("请输入学生的电话号码,内容可以为空(输入@退出):"))
    if phone_1=="@":
        tuichu()
        return
    while phone_1.isdigit()==False and len(phone_1)<=11 and len(phone_1)!=0:
        phone_1=str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
        if phone_1 == "@":
            tuichu()
            return
    while len(phone_1)>11:
        phone_1=str(input("电话号码超过了11位,请重新输入内容可以为空(输入@退出):"))
        if phone_1 == "@":
            tuichu()
            return
    while phone_1.isdigit()==False and len(phone_1)<=11 and len(phone_1)!=0:
        phone_1=str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
        if phone_1 == "@":
            tuichu()
            return
    sfzhm_1=str(input("请输入学生身份证号码(输入@退出):"))
    if sfzhm_1 == "@":
        tuichu()
        return
    while len(sfzhm_1)==0:
        sfzhm_1 = str(input("学生身份证号码不能为空,请输入(输入@退出):"))
        if sfzhm_1=="@":
            tuichu()
            return
    while len(sfzhm_1)>18 or len(sfzhm_1)<18:
        sfzhm_1 = str(input("格式错误(身份证号码为18位)请重新输入(输入@退出):"))
        if sfzhm_1 == "@":
            tuichu()
            return
    select_sql = "select * from xs where sfzhm='%s'" % sfzhm_1
    leanno1 = cursor.execute(select_sql).fetchone()
    while leanno1 != None:
        sfzhm_1 = str(input("身份证号码不能为重复,请重新输入(输入@退出):"))
        select_sql = "select * from xs where leanNo='%s'" % sfzhm_1
        leanno1 = cursor.execute(select_sql).fetchone()
        if leanno == "@":
            tuichu()
            return
    while len(sfzhm_1)==0:
        sfzhm_1 = str(input("学生身份证号码不能为空,请输入(输入@退出):"))
        if sfzhm_1=="@":
            tuichu()
            return
    jtzz_1=str(input("请输入学生家庭地址(输入@退出):"))
    while len(jtzz_1)==0:
        jtzz_1=str(input("学生家庭地址不能为空请重新输入(输入@退出):"))
        if jtzz_1 == "@":
            tuichu()
            return
    if jtzz_1 == "@":
        tuichu()
        return
    cursor.execute("insert into xs(leanNo,name,rxnf,classroom,age,sex,phone,sfzhm,jtzz)values('%s','%s','%s','%s','%s','%s','%s','%s','%s')" %(leanno,name_2,rxnf_1,class_1,age_1,sex_1,phone_1,sfzhm_1,jtzz_1))
    print("添加成功")
    tuichu()
    return
def xgxs(xh):
    while True:
        print('-----请选择你要修改的内容----')
        print('------1.修改该学生姓名-------')
        print('------2.修改该学生班级-------')
        print('------3.修改该学生年龄-------')
        print('------4.修改该学生性别-------')
        print('------5.修改该学生电话号码----')
        print('------6.修改该学生身份证号码--')
        print('------7.修改该学生入学年份----')
        print('------8.修改该学生家庭地址----')
        print('------9.退出修改-------------')
        xgxz=str(input("请根据序号进行选择(输入@退出):"))
        if xgxz=="@":
            tuichu()
            break
        while len(xgxz)==0:
            xgxz=str(input("选择不能为空,请重新选择:"))
        if xgxz=="1":
            xgxsxm=str(input("请输入正确姓名(输入@退出):"))
            if xgxsxm=='@':
                tuichu()
                continue
            while len(xgxsxm)==0:
                xgxsxm = str(input("姓名不能为空,请重新输入姓名(输入@退出):"))
                if xgxsxm=='@':
                    tuichu()
                    break
            while xgxsxm.isdigit() != False:
                xgxsxm = str(input("学生姓名不能为数字,请重新输入(输入@退出):"))
                if xgxsxm == '@':
                    tuichu()
                    break
            update_sql = "update xs set name='%s' where leanNo='%s'"%(xgxsxm,xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="2":
            xgxsbj = str(input("请输入正确班级(输入@退出):"))
            while len(xgxsbj) == 0:
                xgxsbj = str(input("班级不能为空,请重新输入班级(输入@退出):"))
            if xgxsbj=='@':
                tuichu()
                continue
            update_sql = "update xs set classroom='%s' where leanNo='%s'" % (xgxsbj, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="3":
            xgxsnl= str(input("请输入正确年龄(输入@退出):"))
            if xgxsnl=='@':
                tuichu()
                continue
            while len(xgxsnl)==0:
                xgxsnl = str(input("年龄不能为空请重新输入年龄(输入@退出):"))
                if xgxsnl=='@':
                    tuichu()
                    break
            update_sql = "update xs set age='%s' where leanNo='%s'" % (xgxsnl, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="4":
            xgxsxb = str(input("请输入正确性别(输入@退出):"))
            while len(xgxsxb)==0:
                xgxsxb = str(input("性别不能为空,请重新输入性别(输入@退出):"))
                if xgxsxb=='@':
                    tuichu()
                    break
            while xgxsxb.isdigit() != False:
                xgxsxb = str(input("学生性别不能为数字,请重新输入(输入@退出):"))
                if xgxsxb == "@":
                    tuichu()
                    break
            update_sql = "update xs set sex='%s' where leanNo='%s'" % (xgxsxb, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="5":
            xgxsdh = str(input("请输入正确手机号码内容可以为空(输入@退出):"))
            if xgxsdh=='@':
                tuichu()
                continue
            while xgxsdh.isdigit() == False and len(xgxsdh) <= 11 and len(xgxsdh) != 0:
                xgxsdh = str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
                if xgxsdh == "@":
                    tuichu()
                    break
            while len(xgxsdh) > 11:
                xgxsdh = str(input("电话号码超过了11位,请重新输入内容可以为空(输入@退出):"))
                if xgxsdh == "@":
                    tuichu()
                    break
            while xgxsdh.isdigit() == False and len(xgxsdh) <= 11 and len(xgxsdh) != 0:
                xgxsdh = str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
                if xgxsdh == "@":
                    tuichu()
                    break
            update_sql = "update xs set phone='%s' where leanNo='%s'" % (xgxsdh, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="6":
            sfzhm_1 = str(input("请输入正确学生身份证号码(输入@退出):"))
            if sfzhm_1 == "@":
                tuichu()
                continue
            while len(sfzhm_1) == 0:
                sfzhm_1 = str(input("学生身份证号码不能为空,请输入(输入@退出):"))
                if sfzhm_1 == "@":
                    tuichu()
                    break
            while len(sfzhm_1) > 18 or len(sfzhm_1) < 18:
                sfzhm_1 = str(input("格式错误(身份证号码为18位)请重新输入(输入@退出):"))
                if sfzhm_1 == "@":
                    tuichu()
                    break
            select_sql = "select * from xs where sfzhm='%s'" % sfzhm_1
            leanno1 = cursor.execute(select_sql).fetchone()
            while leanno1 != None:
                sfzhm_1 = str(input("身份证号码不能为重复,请重新输入(输入@退出):"))
                if zfzhm_1 == "@":
                    tuichu()
                    break
                select_sql = "select * from xs where leanNo='%s'" % sfzhm_1
                leanno1 = cursor.execute(select_sql).fetchone()
            while len(sfzhm_1) == 0:
                sfzhm_1 = str(input("学生身份证号码不能为空,请输入(输入@退出):"))
                if sfzhm_1 == "@":
                    tuichu()
                    break
            update_sql = "update xs set sfzhm='%s' where leanNo='%s'" % (sfzhm_1, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="7":
            rxnf_1 = str(input("请输入正确学生入学年份(输入@退出):"))
            while len(rxnf_1) == 0:
                rxnf_1 = str(input("学生入学年份不能为空,请重新输入(输入@退出):"))
                if rxnf_1 == "@":
                    tuichu()
                    return
            if rxnf_1 == "@":
                tuichu()
                continue
            while rxnf_1.isdigit() == False:
                rxnf_1 = str(input("学生入学年份必须是数字,请重新输入(输入@退出):"))
                if rxnf_1 == "@":
                    tuichu()
                    return
            while len(rxnf_1) > 4 or len(rxnf_1) < 4:
                rxnf_1 = str(input("输入格式错误(年份为4位数)请重新输入:(输入@退出):"))
                if rxnf_1 == "@":
                    tuichu()
                    return
            update_sql = "update xs set rxnf='%s' where leanNo='%s'" % (rxnf_1, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="8":
            jtzz_1 = str(input("请输入正确学生家庭地址(输入@退出):"))
            while len(jtzz_1) == 0:
                jtzz_1 = str(input("学生家庭地址不能为空请重新输入(输入@退出):"))
                if jtzz_1 == "@":
                    tuichu()
                    return
            if jtzz_1 == "@":
                tuichu()
                continue
            update_sql = "update xs set jtzz='%s' where leanNo='%s'" % (jtzz_1, xh)
            cursor.execute(update_sql)
            print('修改成功')
            tuichu()
        elif xgxz=="9":
            tuichu()
            break
        else:
            print('输入有误,请重新输入:')
            continue
def scxs():
    while True:
        select_sql = "select count(*) from xs"
        count = cursor.execute(select_sql).fetchone()[0]
        if count==0:
            print("当前没有学生信息,无法删除")
            tuichu()
            break
        else:
            print('------欢迎进入删除选项-----')
            print('--------选项如下-----------')
            print('\t1.根据学号删除学生信息')
            print('\t2.删除全部学生信息')
            print("\t3.根据班级删除学生信息")
            print('\t4.根据入学年份删除学生信息')
            print('\t5.退出')
            xzscxs=str(input("请根据序号进行选择:"))
            while len(xzscxs)==0:
                xzscxs=str(input("选择不能为空,请重新选择:"))
            if xzscxs=="1":
                while True:
                    xhxss = str(input("请输入该学生的学号(输入@退出):"))
                    if xhxss=="@":
                        tuichu()
                        return
                    select_sql = "select * from xs where leanNo='%s'" % xhxss
                    name4 = cursor.execute(select_sql).fetchone()
                    while name4 == None:
                        xhxss = str(input("该学生不存在,请重新输入(输入@退出):"))
                        if xhxss == "@":
                            tuichu()
                            return
                        select_sql = "select * from xs where leanNo='%s'" % xhxss
                        name4 = cursor.execute(select_sql).fetchone()
                    xzsc2 = str(input("你确定要删除该学生的信息吗?(y/n)"))
                    if xzsc2 == "y" or xzsc2 == "Y":
                        delete_sql = "delete from xs where leanNo='%s'" % xhxss
                        cursor.execute(delete_sql)
                        print("该学生的信息,已被删除")
                        tuichu()
                        break
                    elif xzsc2 == "n" or xzsc2 == "N":
                        break
                    else:
                        print('输入有误,请重新输入')
                        continue
            elif xzscxs=="2":
                xzml=str(input("你确定要删除所有学生信息吗?(y/n)"))
                if xzml=="y" or xzml=="Y":
                    delete_sql = "delete from xs"
                    cursor.execute(delete_sql)
                    print("删除成功")
                    tuichu()
                    break
                else:
                    continue
            elif xzscxs=="3":
                while True:
                    xhxs = str(input("请输入要删除的班级(输入@退出):"))
                    if xhxs=="@":
                        tuichu()
                        break
                    select_sql = "select * from xs where classroom='%s'" % xhxs
                    name3 = cursor.execute(select_sql).fetchone()
                    while name3 == None:
                        xhxs = str(input("该班级不存在,请重新输入(输入@退出):"))
                        if xhxs=="@":
                            tuichu()
                            break
                        select_sql = "select * from xs where classroom='%s'" % xhxs
                        name3 = cursor.execute(select_sql).fetchone()
                    xzsc1 = str(input("你确定要删除该班级的信息吗?(y/n)"))
                    if xzsc1 == "y" or xzsc1 == "Y":
                        delete_sql = "delete from xs where classroom='%s'" % xhxs
                        cursor.execute(delete_sql)
                        print("该班级的信息,已被删除")
                        tuichu()
                        break
                    elif xzsc1=="n" or xzsc1=="N":
                        break
                    else:
                        print('输入有误,请重新输入')
                        continue
            elif xzscxs=="4":
                while True:
                    rxnfsc = str(input("你要删除哪一年入学的学生请输入(输入@退出):"))
                    if rxnfsc=="@":
                        tuichu()
                        break
                    select_sql = "select * from xs where rxnf='%s'" % rxnfsc
                    name5 = cursor.execute(select_sql).fetchone()
                    while name5 == None:
                        rxnfsc = str(input("该班级不存在,请重新输入(输入@退出):"))
                        if rxnfsc == "@":
                            tuichu()
                            return
                        select_sql = "select * from xs where rxnf='%s'" % rxnfsc
                        name5 = cursor.execute(select_sql).fetchone()
                    xzsc1 = str(input("你确定要删除该班级的信息吗?(y/n)"))
                    if xzsc1 == "y" or xzsc1 == "Y":
                        delete_sql = "delete from xs where rxnf='%s'" % rxnfsc
                        cursor.execute(delete_sql)
                        print("该年入学的学生的信息,已被删除")
                        tuichu()
                        break
                    elif xzsc1 == "n" or xzsc1 == "N":
                        tuichu()
                        break
                    else:
                        print('输入有误,请重新输入')
                        continue
            elif xzscxs=="5":
                tuichu()
                break
            else:
                print("输入有误,请重新输入")
                continue
def xiou(xh):
    xgxsxm = str(input("请输入正确姓名(输入@退出):"))
    if xgxsxm=="@":
        tuichu()
        return
    while len(xgxsxm) == 0:
        xgxsxm = str(input("姓名不能为空,请重新输入姓名(输入@退出):"))
        if xgxsxm == '@':
            tuichu()
            return
    while xgxsxm.isdigit()!=False:
        xgxsxm=str(input("学生姓名不能为数字,请重新输入(输入@退出):"))
        if xgxsxm == '@':
            tuichu()
            return
    rxnf_1 = str(input("请输入正确学生入学年份(输入@退出):"))
    while len(rxnf_1) == 0:
        rxnf_1 = str(input("学生入学年份不能为空,请重新输入(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            return
    if rxnf_1 == "@":
        tuichu()
        return
    while rxnf_1.isdigit() == False:
        rxnf_1 = str(input("学生入学年份必须是数字,请重新输入(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            return
    while len(rxnf_1) > 4 or len(rxnf_1) < 4:
        rxnf_1 = str(input("输入格式错误(年份为4位数)请重新输入:(输入@退出):"))
        if rxnf_1 == "@":
            tuichu()
            break
    xgxsbj = str(input("请输入正确班级(输入@退出):"))
    while len(xgxsbj) == 0:
        xgxsbj = str(input("班级不能为空,请重新输入班级(输入@退出):"))
        if xgxsbj == '@':
            tuichu()
            return
    xgxsnl = str(input("请输入正确年龄(输入@退出):"))
    while len(xgxsnl) == 0:
        xgxsnl = str(input("年龄不能为空请重新输入年龄(输入@退出):"))
        if xgxsnl == '@':
            tuichu()
            return
    while xgxsnl.isdigit()==False:
        xgxsnl = str(input("学生年龄必须是数字,请重新输入(输入@退出):"))
        if xgxsnl == "@":
            tuichu()
            return
    xgxsxb = str(input("请输入正确性别(输入@退出):"))
    while len(xgxsxb) == 0:
        xgxsxb = str(input("性别不能为空,请重新输入性别(输入@退出):"))
        if xgxsxb == '@':
            tuichu()
            return
    while xgxsxb.isdigit()!=False:
        xgxsxb=str(input("学生性别不能为数字,请重新输入(输入@退出):"))
        if xgxsxb=="@":
            tuichu()
            return
    while xgxsxb.isalpha()==True:
        xgxsxb=str(input("学生性别不能为字母,请重新输入(输入@退出):"))
        if xgxsxb=="@":
            tuichu()
            return
    xgxsdh = str(input("请输入正确手机号码内容可以为空(输入@退出):"))
    if xgxsdh == '@':
        tuichu()
        return
    while xgxsdh.isdigit()==False and len(xgxsdh)<=11 and len(xgxsdh)!=0:
        xgxsdh=str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
        if xgxsdh == "@":
            tuichu()
            return
    while len(xgxsdh)>11:
        xgxsdh=str(input("电话号码超过了11位,请重新输入内容可以为空(输入@退出):"))
        if xgxsdh == "@":
            tuichu()
            return
    while xgxsdh.isdigit()==False and len(xgxsdh)<=11 and len(xgxsdh)!=0:
        xgxsdh=str(input("电话号码必须为数字,请重新输入内容可以为空(输入@退出):"))
        if xgxsdh == "@":
            tuichu()
            return
    sfzhm_1=str(input("请输入正确学生身份证号码(输入@退出):"))
    while len(sfzhm_1)==0:
        sfzhm_1 = str(input("学生身份证号码不能为空,请输入(输入@退出):"))
        if sfzhm_1=="@":
            tuichu()
            return
    if sfzhm_1 == "@":
        tuichu()
        return
    while len(sfzhm_1)>18 or len(sfzhm_1)<18:
        sfzhm_1 = str(input("格式错误(身份证号码为18位)请重新输入(输入@退出):"))
        if sfzhm_1 == "@":
            tuichu()
            return
    jtzz_1=str(input("请输入正确学生家庭地址(输入@退出):"))
    while len(jtzz_1)==0:
        jtzz_1=str(input("学生家庭地址不能为空请重新输入(输入@退出):"))
        if jtzz_1 == "@":
            tuichu()
            return
    if jtzz_1 == "@":
        tuichu()
        return
    update_sql = "update xs set name='%s',classroom='%s',rxnf='%s',age='%s',sex='%s',phone='%s',sfzhm='%s',jtzz='%s' where leanNo='%s'" % (xgxsxm,xgxsbj,rxnf_1,xgxsnl,xgxsxb,xgxsdh,sfzhm_1,jtzz_1,xh)
    cursor.execute(update_sql)
    print("修改成功")
    tuichu()
def xsdc():
    xszlcx = xszl()
    if xszlcx != 0:
        select_sql = "select * from xs"
        result_list = cursor.execute(select_sql)
        a = pd.DataFrame(columns=["id", "学号", "姓名", "入学年份", "班级", "年龄", "性别", "电话号码", "身份证号码", "家庭地址"])
        for id,leanNo,name,rxnf,classroom,age,sex,phone,sfzhm,jtzz in result_list:
            a.loc[id]=(id,leanNo,name,rxnf,classroom,age,sex,phone,sfzhm,jtzz)
        select_sql = "select count(*) from xs"
        count = cursor.execute(select_sql).fetchone()[0]
        print("导出成功")
        print('一共导出了', count, '名学生')
        resu = r"D:\学生信息汇总.xlsx"
        print("文件导出在D分区根目录下(文件名称:学生信息汇总)")
        a.to_excel(resu, sheet_name="sheet1", index=False, header=True)
        tuichu()
        return
    else:
        print('学生信息为空,无法导出!')
        tuichu()
def dcbj():
    while True:
        bjcxx = str(input("请输入要导出的班级(输入@退出):"))
        if bjcxx=='@':
            tuichu()
            break
        select_sql = "select * from xs where classroom='%s'" % bjcxx
        r_1 = cursor.execute(select_sql).fetchone()
        while r_1!=None:
            select_sql = "select * from xs where classroom='%s'" % bjcxx
            result_list = cursor.execute(select_sql)
            a = pd.DataFrame(columns=["学号", "姓名", "入学年份", "班级", "年龄", "性别", "电话号码", "身份证号码", "家庭地址"])
            for id, leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz in result_list:
                a.loc[leanNo] = (leanNo, name, rxnf, classroom, age, sex, phone, sfzhm, jtzz)
            select_sql = "select count(*) from xs where classroom='%s'" % bjcxx
            count = cursor.execute(select_sql).fetchone()[0]
            print("导出成功")
            print('一共导出了', count, '名学生')
            resu = r"D:\班级学生信息汇总.xlsx"
            print("文件导出在D分区根目录下(文件名称:班级学生信息汇总)")
            a.to_excel(resu, sheet_name="sheet1", index=False, header=True)
            tuichu()
            return
        else:
            print('该班级不存在,请重新输入')
            tuichu()
            continue
def xsxxdc():
    while True:
        print("-------欢迎进入导出界面-------")
        print("-----------选择菜单-----------")
        print("-------1.导出全部学生信息-----")
        print("-------2.导出指定班级---------")
        print("-------3.返回-----------------")
        dcxz=str(input('请根据序号进行选择:'))
        if dcxz=="1":
            xsdc()
        elif dcxz=="2":
            dcbj()
        elif dcxz=="3":
            tuichu()
            break
        else:
            print("输入错误,请重新输入")
            continue
def xgxsxz():
    xh = input("请输入该学生学号(输入@退出):")
    if xh=='@':
        tuichu()
        return
    select_sql = "select * from xs where leanNo='%s'" % xh
    name2 = cursor.execute(select_sql).fetchone()
    while name2 == None:
        xh = input("该学生不存在,请重新输入(输入@退出):")
        if xh=="@":
            tuichu()
            return
        select_sql = "select * from xs where leanNo='%s'" % xh
        name2 = cursor.execute(select_sql).fetchone()
    while True:
        print("-------欢迎进入修改学生信息界面------")
        print('-------------选项菜单---------------')
        print('-------1.修改该学生所有信息----------')
        print('-------2.修改该学生单项信息----------')
        print('-------3.退出----------')
        xsxgxzxx = str(input("请根据序号进行选择:"))
        while len(xsxgxzxx)==0:
            xsxgxzxx = str(input("输入不能为空,请根据序号进行选择:"))
        if xsxgxzxx=="1":
            xiou(xh=xh)
        if xsxgxzxx=="2":
            xgxs(xh=xh)
        if xsxgxzxx=="3":
            break
        else:
            print('输入有误,请重新输入')
            continue
def ckxsxx():
    while True:
        print("------欢迎进入查询学生界面------")
        print('-----------选项菜单-------------')
        print('------1.查询所有学生信息--------')
        print('------2.根据学号查询学生信息-----')
        print('------3.根据姓名查询学生信息-----')
        print('------4.根据班级查询学生信息-----')
        print("------5.根据入学年份查询---------")
        print('------6.根据身份证号码查询-------')
        print("------7.根据性别查询-------------")
        print('------8.退出--------------------')
        cxxzxx = str(input("请根据序号进行选择:"))
        if cxxzxx == "1":
            xscx()
        elif cxxzxx == "2":
            xhcx()
        elif cxxzxx == "3":
            xmcx()
        elif cxxzxx == "4":
            bjcx()
        elif cxxzxx=="5":
            nfcx()
        elif cxxzxx=="6":
            sfzhmcx()
        elif cxxzxx=="7":
            xbcx()
        elif cxxzxx == "8":
            break
        else:
            print("输入有误,请重新输入")
            continue
import requests
import json
#api 获取天气 "%E9%83%91%E5%B7%9E"为郑州,可更换任意城市,也可以利用ip地址更换任意城市
#"key":"申请的AppKey", # 在api接口网站个人中心->我的数据,接口名称上方查看
url1 = 'http://apis.juhe.cn/simpleWeather/query?city=' +"%E9%83%91%E5%B7%9E" +"&key=xxxxxxxxxxxxx"
req = requests.get(url1)
dict_weather = json.loads(req.text)
wd=dict_weather['result']['future'][0]['temperature']
fx=dict_weather['result']['future'][0]['direct']
tq=dict_weather['result']['future'][0]['weather']
print("\033[1;30;47m\t……………………欢迎进入学生管理系统……………………\033[0m")
datetime_dt=datetime.datetime.now()
print('当前时间为:',datetime_dt)
print("当前天气为:",wd,fx,tq)
print("请先登录管理员账户")
glydlzc()
while True:
    print("\033[1;30;47m===========欢迎进入学生管理操作界面=========\033[0m")
    print("----------------功能菜单-------------------")
    print('\t\t\t1.查看学生信息')
    print('\t\t\t2.添加学生信息')
    print('\t\t\t3.修改学生信息')
    print('\t\t\t4.删除学生信息')
    print('\t\t\t5.导出学生信息')
    print('\t\t\t@.进入管理员界面')
    print('\t\t\t0.退出管理系统')
    print('----------------------------------------------')
    connect = sqlite3.connect("gly")
    cursor = connect.cursor()
    create_sql = "create table if not exists xs(id integer primary key,leanNo text,name text,rxnf text,classroom text,age text,sex text,phone text,sfzhm text,jtzz text)"
    cursor.execute(create_sql)
    xz=str(input("请根据序号进行选择:"))
    while len(xz)==0:
        xz=str(input("选择不能为空,请重新选择:"))
    if xz=="1":
        ckxsxx()
    elif xz=="2":
        tjxs()
    elif xz=="3":
        xgxsxz()
    elif xz=="4":
        scxs()
    elif xz=="5":
        xsxxdc()
    elif xz=="@":
        glydlzc()
    elif xz=="0":
        print("\033[1;30;47m已退出,欢迎下次使用,再见!!!\033[0m")
        break
    else:
        xz=str(input("输入错误,请重新输入:"))
    connect.commit()
    cursor.close()
    connect.close()

激活码也可以使用随机数或者固定,以上代码实现中都有使用例子

天气api  :天气预报查询接口_免费天气API接口_免费API数据接口 - 聚合数据 (juhe.cn)

ip地址查询api:IP地址查询接口_IP归属地查询接口_免费API数据接口 - 聚合数据 (juhe.cn)

邮箱实现参考python---使用QQ邮箱发送邮件_python qq邮箱发邮件_晚风吹儿的博客-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值