设计思路
1.添加学生时:
- 对每个输入项做单独判断
- 在每个输入项错误五次后自动返回到选择操作界面
- 所以数据输入完以后 添加到数据库时自动去除输入的内容的两边空格
- 自动检测学号是否存在数据库中,如果存在则提示重新输入
2.查询学生信息时:
查询方式有:
- 查询所有
- 条件查询
条件查询包括有:
- 学号查询
- 姓名查询
- 班级查询
- 性别查询
- 手机号查询
- 年龄查询
所有输入选择框或输入框时均为三次错误自动返回到选择操作界面
3.删除学生信息时:
- 删除指定学生信息
- 删除所有学生信息
删除指定学生信息包括有:
- 根据学号删除
- 根据班级删除
- 根据性别删除
- 根据姓名删除
4.更改学生信息时:
- 先列出数据库中的所有学生信息
- 根据学号更改信息
- 根据姓名更改信息
5.特别功能
- 天气显示
- 导出信息
- 添加地址查询
- 添加男女查询
- 成绩 单独一张表
- 系统激活码邮箱发送
- 时间显示
登录管理系统特点:
- 单独的表格存储账号和密码 可以做到数据一对一
- 添加账号时,可以判断账号目前是否存在数据库中
- 修改账号密码时,要求输入原密码 并且三次输入错误后自动返回到选择操作界面
- 查询账号时 ,列出所有账号 不显示密码
- 删除账号时,为了防止数据库中没有任何账号 要求root账号不能被删除 只能更改密码
- 登录系统时自动生成四位数的包含数字和大小写字母的验证码 验证时不区分大小写
- 每个包含数字编号选择时自动判断合法性 字母则要求重新输入 每个输入框只能错误三次 Y/n的选择时不区分大小写
- 部分使用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)