学生信息管理系统python版
本文实例为大家分享了python学生信息管理系统的具体代码,供大家参考,具体内容如下
#!/usr/bin/envpython
#@Time:2018/3/3017:37
#@Author:KiritoLiu
#@Contact:kiritoliuyhsky@gmail.com
#@Site:
#@File:学生信息管理系统.py
#@Software:PyCharm
importpymysql
importdatetime
importre
defCalAge(Date):
#生日(年月日(数据库中的))转换为年龄
ifDate=="NULL":
return"无"
try:
Date=Date.split('-')
Birth=datetime.date(int(Date[0]),int(Date[1]),int(Date[2]))
Today=datetime.date.today()
if(Today.month>Birth.month):
NextYear=datetime.date(Today.year+1,Birth.month,Birth.day)
elif(Today.monthBirth.day):
NextYear=datetime.date(Today.year+1,Birth.month,Birth.day)
elif(Today.day3}|\t{:<4}\t|{}|\t{:<3}\t\t|{:<8}|{}|{}".format("学号","姓名","性别","班级","电话","年龄","出生日期"))
forvoinalist:
birth=vo[5]
bir=birth.strftime("%Y-%m-%d")
ifbir=="1949-10-01":
bir="NULL"
print("{:>5}|\t{:<4}\t|{}|\t{:<10}\t|{:<11}|{}|{}".format(vo[0],vo[1],vo[2],vo[3],vo[4],CalAge(bir),bir))
db.commit()
exceptExceptionaserr:
db.rollback()
print("SQL查看失败!错误:",err)
db.close()
defseeone(a):
#根据学号,查看某一条数据
db=pymysql.connect(host="localhost",user="root",password="123456",db="stu",charset="utf8")
#创建游标对象
cursor=db.cursor()
stuid=int(a)
sql="selects.sno,s.name,s.sex,s.cla,s.tel,s.birthdayfromstuswheres.sno='%d'"%stuid
try:
m=cursor.execute(sql)
b=cursor.fetchone()
ifb==None:
print("您的输入有误,将会退出系统")
quit()
else:
print("{:>3}|\t{:<4}\t|{}|\t{:<3}\t\t|{:<8}|{}|{}".format("学号","姓名","性别","班级","电话","年龄","出生日期"))
birth=b[5]
bir=birth.strftime("%Y-%m-%d")
ifbir=="1949-10-01":
bir="NULL"
print("{:>5}|\t{:<4}\t|{}|\t{:<10}\t|{:<11}|{:<2}|{}".format(b[0],b[1],b[2],b[3],b[4],CalAge(bir),bir))
db.commit()
exceptExceptionaserr:
db.rollback()
print("SQL查询失败!错误:",err)
db.close()
defaddmql():
#添加一条数据
db=pymysql.connect(host="localhost",user="root",password="123456",db="stu",charset="utf8")
#创建游标对象
cursor=db.cursor()
sql="selects.snofromstus"
cursor.execute(sql)
alist=cursor.fetchall()#此处读取数据库中的所有学号
blist=()#建立一个空的元组用于存放学号
print("以下学号已被占用,不可使用:")
foriinalist:
blist+=i#存放所有的学号
print(i[0],end="")#输出已经被使用过的学号
print()
sno=int(input("请输入添加的学员的学号:\n"))
ifsnoinblist:#判断学号是否被使用过,学号不可以重复
print("您输入的学号已被占用!系统即将退出!")
quit()
sname=input("请输入添加的学员的姓名:\n")
sex=input("请输入添加的学员的性别(男or女):\n")
ifsex=="男"orsex=="女":
sex=sex
else:
sex="男"
print("性别输入有误,已默认为男")
cla=input("请输入添加的学员的班级(例:Python01):\n")
tel=input("请输入添加的学员的电话:\n")
iftel==re.search(r"(1[3456789]\d{9})",tel):
tel=tel
print("电话输入错误,已重置为空")
else:
tel=""
sbir=input("请输入添加的学员的出生日期(例:2001-1-1):\n")
ifsbir==re.search(r"(\d{4}-\d{1,2}-\d{1,2})",sbir):
sbir=sbir
else:
sbir="1949-10-01"
print("出生日期输入错误,已重置为初始值")
sql="Insertintostu(sno,name,sex,cla,tel,birthday)values('%d','%s','%s','%s','%s','%s')"%(sno,sname,sex,cla,tel,sbir)
try:
m=cursor.execute(sql)
#事务提交
db.commit()
print("成功添加条数:",m)
print("您添加的信息为:")
seeone(sno)
exceptExceptionaserr:
db.rollback()
print("SQL添加失败!错误:",err)
db.close()
defupdatasql():
#更新修改某条数据
db=pymysql.connect(host="localhost",user="root",password="123456",db="stu",charset="utf8")
#创建游标对象
cursor=db.cursor()
stuid=int(input("请输入要修改的学员的学号:\n"))#一个班不超过100人,以stuid作为索引
try:
seeone(stuid)
print("======可修改的学员信息的名称======")
print("{0:2}{1:5}{2:5}{3:5}".format("","1.姓名","2.性别","3.班级"))
print("{0:2}{1:5}{2}".format("","4.电话","5.出生日期"))
a=int(input("请选择要修改的学员信息的名称(学号不可修改):\n"))
ifa==1:
xm=input("请输入修改后的姓名:\n")
sql="UPDATEstusSETs.name='%s'WHEREs.sno='%d'"%(xm,stuid)
elifa==2:
xb=input("请输入修改后的性别(男or女):\n")
ifxb=="男"orxb=="女":
xb=xb
else:
xb="男"
print("性别输入有误,已默认为男")
sql="UPDATEstusSETs.sex='%s'WHEREs.sno='%d'"%(xb,stuid)
elifa==3:
bj=input("请输入修改后的班级:\n")
sql="UPDATEstusSETs.cla='%s'WHEREs.sno='%d'"%(bj,stuid)
elifa==4:
dh=input("请输入修改后的电话:\n")
sql="UPDATEstusSETs.tel='%s'WHEREs.sno='%d'"%(dh,stuid)
ifdh==re.search(r"(1[3456789]\d{9})",dh):
'''正则表达式匹配判断输入是否合格'''
dh=dh
else:
dh=""
print("电话输入错误,已重置为空")
elifa==5:
birday=input("请输入修改后的出生日期(格式:2000-1-1):")
ifbirday==re.search(r"(\d{4}-\d{1,2}-\d{1,2})",birday):
'''正则表达式匹配判断输入是否合格'''
birday=birday
else:
birday="1949-10-01"
print("出生日期输入错误,已重置为初始值")
sql="UPDATEstusSETs.birthday='%s'WHEREs.sno='%d'"%(birday,stuid)
else:
print("您的输入有误,将会退出!")#此处退出防止某些误操作导致的数据库数据泄露
quit()
cursor.execute(sql)
db.commit()
print("修改后的该学员信息为:")
seeone(stuid)
exceptExceptionaserr:
db.rollback()
print("SQL修改失败!错误:",err)
db.close()
defdelsql():
#删除某条学生数据
db=pymysql.connect(host="localhost",user="root",password="123456",db="stu",charset="utf8")
#创建游标对象
cursor=db.cursor()
stuid=int(input("请输入要删除的学员的学号:\n"))#一个班不超过100人,以stuid作为索引
try:
print("======即将删除的学员信息的名称======")
seeone(stuid)
a=input("请确认是否删除该学员信息(y/n):\n")
ifa=='y'ora=='Y':
sql="deletefromstuwheresno='%d'"%(stuid)
cursor.execute(sql)
else:
print("取消学员信息删除,即将退出系统")
quit()
db.commit()
print("该学员信息已删除")
exceptExceptionaserr:
db.rollback()
print("SQL删除失败!错误:",err)
db.close()
defmainstu():
whileTrue:
#输出初始界面
print("="*12,"学员信息管理系统","="*15)
print("{0:2}{1:13}{2:15}".format("","1.查看学员信息","2.添加学员信息"))
print("{0:2}{1:13}{2:15}".format("","3.修改学员信息","4.删除学员信息"))
print("{0:2}{1:13}".format("","5.退出系统"))
print("="*45)
key=int(input("请输入对应的选择:\n"))
#根据键盘值判断并进行操作
ifkey==1:
print("="*12,"学员信息浏览","="*15)
seesql()
input("按回车继续")
elifkey==2:
print("="*12,"学员信息添加","="*15)
addmql()
input("按回车继续")
elifkey==3:
print("="*12,"学员信息修改","="*15)
seesql()
updatasql()
input("按回车继续")
elifkey==4:
print("="*12,"学员信息删除","="*15)
seesql()
delsql()
input("按回车继续")
elifkey==5:
print("="*12,"再见","="*12)
quit()
else:
print("="*12,"您的输入有误,请重新输入","="*12)
mainstu()
配套的数据库文件,内含数据
--MySQLdump10.13Distrib5.7.12,forWin64(x86_64) -- --Host:localhostDatabase:stu -------------------------------------------------------- --Serverversion5.7.17-log /*!40101SET@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT*/; /*!40101SET@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS*/; /*!40101SET@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION*/; /*!40101SETNAMESutf8*/; /*!40103SET@OLD_TIME_ZONE=@@TIME_ZONE*/; /*!40103SETTIME_ZONE='+00:00'*/; /*!40014SET@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,UNIQUE_CHECKS=0*/; /*!40014SET@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0*/; /*!40101SET@OLD_SQL_MODE=@@SQL_MODE,SQL_MODE='NO_AUTO_VALUE_ON_ZERO'*/; /*!40111SET@OLD_SQL_NOTES=@@SQL_NOTES,SQL_NOTES=0*/; -- --Tablestructurefortable`stu` -- DROPTABLEIFEXISTS`stu`; /*!40101SET@saved_cs_client=@@character_set_client*/; /*!40101SETcharacter_set_client=utf8*/; CREATETABLE`stu`( `id`int(3)NOTNULLAUTO_INCREMENT, `sno`int(3)NOTNULL, `name`varchar(20)NOTNULL, `sex`varchar(1)NOTNULL, `cla`varchar(10)NOTNULL, `tel`varchar(11)DEFAULTNULL, `birthday`datetimeDEFAULTNULL, PRIMARYKEY(`id`), UNIQUEKEY`stu_no_UNIQUE`(`sno`) )ENGINE=InnoDBAUTO_INCREMENT=32DEFAULTCHARSET=utf8; /*!40101SETcharacter_set_client=@saved_cs_client*/; -- --Dumpingdatafortable`stu` -- LOCKTABLES`stu`WRITE; /*!40000ALTERTABLE`stu`DISABLEKEYS*/; INSERTINTO`stu`VALUES(1,1,'张三','男','Python01','12345678910','1999-01-0100:00:00'),(2,2,'李四','男','Python01','18866668888','1996-12-0600:00:00'),(3,3,'王五','男','Python02','12345665410','1996-11-2700:00:00'),(4,4,'赵六','女','Python02','12332233210','1997-10-2400:00:00'),(5,5,'qq01','女','Python03','13322223322','1990-01-3100:00:00'),(6,6,'qq02','男','Python03','12288886666','1992-02-2000:00:00'),(7,7,'qq03','女','Python03','13579264801','2000-10-3000:00:00'),(8,8,'uu01','男','Python01','18898084886','1998-08-0800:00:00'),(9,9,'uu02','女','Python02','12022000022','1994-04-0100:00:00'),(10,10,'aa','女','Python02','18899998888','2004-04-0400:00:00'),(11,11,'bb','男','Python03','19264664234','1995-05-1500:00:00'),(25,12,'uu10','男','Python04','17788992332','1996-12-0600:00:00'),(28,13,'uu10','女','Python04','13571854999','1996-12-0600:00:00'); /*!40000ALTERTABLE`stu`ENABLEKEYS*/; UNLOCKTABLES; -- --Dumpingeventsfordatabase'stu' -- -- --Dumpingroutinesfordatabase'stu' -- /*!40103SETTIME_ZONE=@OLD_TIME_ZONE*/; /*!40101SETSQL_MODE=@OLD_SQL_MODE*/; /*!40014SETFOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS*/; /*!40014SETUNIQUE_CHECKS=@OLD_UNIQUE_CHECKS*/; /*!40101SETCHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT*/; /*!40101SETCHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS*/; /*!40101SETCOLLATION_CONNECTION=@OLD_COLLATION_CONNECTION*/; /*!40111SETSQL_NOTES=@OLD_SQL_NOTES*/; --Dumpcompletedon2018-03-3115:10:58
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。