(一):程序介绍和流程图
(二):主要文件main.py
(三):基础文件basics.py
(四):管理学生信息manage.py
(五):查询学生信息query.py
(六):导入数据文件import_data.py
(七):导出数据文件export_data.py
def main( cn):
“”“调用add_stu,del_stu,modify_stu函数”""
def is_valid_date(str_date):
‘’‘判断是否是一个有效的日期字符串’’’
class Display():
“”“多个显示函数的集合”""
def add_modify_sno( cn):
‘’‘确保新的学号不存在’’’
def add_modify_grade( cn, sno):
‘’‘增加或修改成绩’’’
def del_stu( cn):
“”“删除学生,调用del_one_stu 和del_one_sclass “””
def del_one_stu( cn):
“”“删除一个学生”""
def del_one_sclass( cn):
“”“删除一个班级的学生”""
def modify_stu( cn):
“”“修改学生信息,调用modify_one_stu”""
def modify_one_stu( cn):
“”“选择需要修改的信息,并调用相应函数”""
def old_to_new( cn, sno, china, english):
“”“显示旧的信息,调用修改函数”""
def where_sno_find( cn, sel, sno):
“”“按学号进行查找返回信息”""
def where_sno_update( cn, upda, upda_infor, sno):
“”“按学号进行修改信息”""
# 管理学生信息
import os
import time
import basics as ba
def is_valid_date(str_date):
'''判断是否是一个有效的日期字符串'''
try:
time.strptime(str_date, "%Y-%m-%d")
except Exception:
return 0
class Display():
"""多个显示函数的集合"""
def __init__(self):
pass
def prefix( self, name):
print("****************************")
print(" %s菜单" % name)
print("****************************")
def main_show(self):
self.prefix("管理学生信息")
print("\t 1:添加学生信息")
print("\t 2:删除学生信息")
print("\t 3:修改学生信息")
print("\t 0:返回主菜单")
print("****************************\n")
def del_show(self):
self.prefix("\t删除")
print("\t 1:删除一个学生")
print("\t 2:删除一个班级")
print("\t 0:返回管理菜单")
print("****************************\n")
def modify_show(self):
self.prefix("\t修改")
print("\t 1:修改一个学生")
print("\t 0:返回管理菜单")
print("****************************\n")
def modify_one_show(self):
self.prefix("修改这个学生的")
print("\t 1:学号")
print("\t 2:姓名")
print("\t 3:性别")
print("\t 4:出生日期")
print("\t 5:班级")
print("\t 6:居住地")
print("\t 7:成绩")
print("\t 0:返回修改菜单")
print("****************************\n")
#增加和修改可共用的
def add_modify_sno( cn):
'''确保新的学号不存在'''
newsno = input("\n请输入新的学号(10位数字):")
if len( newsno) != 10:
print("输入的数字太长或太短,"
"请重新输入")
return 0
#判断是否存在,不存在 等于0
count = ba.judge_comment\
( cn, 'Students', 'Sname', 'Sno', newsno)
#存在的话,覆盖前需要删除操作
if count != 0:
confirm = input("学号'%s'已存在,"
"是否覆盖?(Y/N)" % newsno)
if confirm == 'n' or confirm == 'N':
return 0
else:
ba.del_students( cn, newsno)
return newsno
def add_modify_grade( cn, sno):
'''增加或修改成绩'''
while 1:
cno = 0
while cno == 0:
cname = input("\n请输入课程名")
cno = ba.judge_creat_cname( cn, cname)
sql = '''SELECT DISTINCT Racademicyear,
Rterm, Grade
FROM Reports
WHERE Sno = '%s' and Cno = '%s'
''' % ( sno, cno)
sstu = ba.common( cn, sql)
count = 0
for stu in sstu:
print("选课学年:%s\t选课学期:%s\t成绩:%s"
% (stu[0], stu[1], stu[2]))
count = count + 1
if count != 0:
confirm = input("请问是否覆盖?(Y/N)")
if confirm == 'n' or confirm == 'N':
judge = input("\n是否继续添加/修改成绩?(Y/N)")
if judge == 'n' or judge == 'N':
return
else:
continue
else:
ba.del_reports( cn, sno, cno)
year = int(input( "\n输入你想增加或修改的学年:"))
term = int(input( "输入你想增加或修改的学期:"))
grade = input("请输入%s学年第%s学期的%s的成绩:"%
(year, term, cname))
sql = '''insert into Reports
( Sno, Cno, Racademicyear, Rterm, Grade)
values( '%s', '%s','%s', '%s', '%s')
''' % ( sno, cno, year, term, grade)
cn.execute( sql)
cn.commit()
print("\n增加或修改成功!")
judge = input("\n是否继续添加/修改成绩?(Y/N)")
if judge == 'n' or judge == 'N':
return
#添加学生
def add_stu( cn):
while 1:
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
sno = add_modify_sno( cn)
if sno == 0:
continue
sname = input("请输入姓名:")
ba.insert_students( cn, sno, sname)
while 1:
sgender = input("请输入性别(男/女):")
if sgender != '男' and sgender != '女':
print("请输入'男'或'女'")
continue
else:
where_sno_update( cn, 'Sgender', sgender, sno)
break
confirm = input("\n是否输入出生日期?(Y/N)")
if confirm == 'y' or confirm == 'Y':
while 1:
sbirth = input("请输入出生日期:"
"(eg:2000-01-01)")
count = 0
try:
time.strptime(sbirth, "%Y-%m-%d")
except Exception:
print("请输入正确的日期格式"
"(eg:2000-01-01)")
continue
break
where_sno_update( cn, 'Sbirth', sbirth, sno)
confirm = input("\n是否输入居住地?(Y/N)")
if confirm == 'y' or confirm == 'Y':
snative = input("请输入居住地:")
where_sno_update( cn, 'Snative', snative, sno)
confirm = input("\n是否输入成绩?(Y/N)")
if confirm == 'y' or confirm == 'Y':
add_modify_grade( cn, sno)
confirm = input("\n是否继续添加学生?(Y/N)")
if confirm == 'n' or confirm == 'N':
break
#删除学生
def del_one_stu( cn):
"""删除一个学生"""
sno = input("请输入需要删除的学生的学号:")
count = ba.judge_comment\
( cn, 'Students', 'Sname', 'Sno', sno)
if count == 0:
print("学号不存在,请重新输入")
return
confirm = input("请问确认删除这个学生"
"在数据库中的全部信息吗?(Y/N)")
if confirm == 'y' or confirm == 'Y':
ba.del_students( cn, sno)
def del_one_sclass( cn):
"""删除一个班级的学生"""
sclass = input("请输入需要删除的班级(8位数字):")
if len( sclass) != 8:
print("输入的数字太长或太短,"
"请重新输入")
return
sql = "SELECT DISTINCT Sno FROM Students " \
"WHERE Sclass = '%s'" % sclass
cursor = cn.execute( sql) #这个corsor要用到
count = 0
for row in cursor:
count = count + 1
if count == 0:
print("班级不存在学生,请重新输入")
return
confirm = input("请问确认删除这个班级"
"在数据库中的全部信息吗?(Y/N)")
if confirm == 'y' or confirm == 'Y':
sql = "SELECT DISTINCT Sno FROM Students " \
"WHERE Sclass = '%s'" % sclass
cursor = cn.execute( sql) #这个corsor要用到
for row in cursor:
ba.del_students( cn, row[0])
def del_stu( cn):
"""删除学生,调用del_one_stu 和del_one_sclass """
while 1:
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
display = Display()
display.del_show()
try:
m22 = int( input("请输入选项:"))
except ValueError:
print("请重新输入正确的数字选项")
continue
if m22 == 1:
del_one_stu( cn)
elif m22 == 2:
del_one_sclass( cn)
elif m22 == 0:
return
else:
print("无效的命令,请重新输入")
#修改学生信息
def where_sno_find( cn, sel, sno):
"""按学号进行查找返回信息"""
sql = '''SELECT DISTINCT %s
FROM Students
WHERE Sno = '%s'
''' % ( sel, sno)
cursor = cn.execute(sql)
information = []
count = 0
for row in cursor:
information.append( row[0])
count = count + 1
if count == 1:
return information[0]
else:
return 0
def where_sno_update( cn, upda, upda_infor, sno):
"""按学号进行修改信息"""
sql = "UPDATE Students SET %s = '%s'" \
"WHERE Sno = '%s'"\
% ( upda, upda_infor, sno)
cn.execute(sql)
cn.commit()
def old_to_new( cn, sno, china, english):
"""显示旧的信息,调用修改函数"""
old = where_sno_find( cn, english, sno)
print("\n原来的%s为:%s" % (china, old))
new = input("请输入新的%s:" % china)
where_sno_update( cn, english, new, sno)
def modify_one_stu( cn):
"""选择需要修改的信息,并调用相应函数"""
display = Display()
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
while 1:
sno = input("请输入需要修改信息的学生学号:")
count = ba.judge_comment\
( cn, 'Students', 'Sname', 'Sno', sno)
if count == 0:
print("学号不存在,请重新输入")
continue
else:
break
while 1:
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
display.modify_one_show()
try:
m231 = int( input("请输入选项:"))
except ValueError:
print("请重新输入正确的数字选项")
continue
if m231 == 1: #修改学生的学号
print("\n原来的学号为:",sno)
change_sno = add_modify_sno( cn)
if change_sno != 0:
sql = "UPDATE Reports SET Sno = '%s'" \
"WHERE Sno = '%s'" \
% ( change_sno, sno)
cn.execute(sql)
cn.commit()
where_sno_update( cn, 'Sno', change_sno, sno)
sno = change_sno
elif m231 == 2: #修改学生的姓名
old_to_new( cn, sno, '姓名', 'Sname')
elif m231 == 3: #修改学生的性别
old_to_new( cn, sno, '性别', 'Sgender')
elif m231 == 4: #修改学生的出生日期
old_to_new( cn, sno, '出生日期', 'Sbirth')
elif m231 == 5: #修改学生的班级
old_to_new( cn, sno, '班级', 'Sclass')
elif m231 == 6: #修改学生的居住地
old_to_new( cn, sno, '居住地', 'Snative')
elif m231 == 7: #修改成绩
add_modify_grade( cn, sno)
elif m231 == 0: #返回修改菜单
return
else:
print("无效的命令,请重新输入")
def modify_stu( cn):
"""修改学生信息,调用modify_one_stu"""
display = Display()
while 1:
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
display.modify_show()
m23 = input("请输入选项:")
if m23 == '1':
modify_one_stu( cn)
elif m23 == '0':
return
else:
print("无效的命令,请重新输入")
#主函数
def main( cn):
"""调用add_stu,del_stu,modify_stu函数"""
while 1:
i = input("\n按下回车键后,将清空屏幕")
i = os.system("cls")
display = Display()
display.main_show()
try:
m2 = int( input("请输入选项:"))
except ValueError:
print("请重新输入正确的数字选项")
continue
if m2 == 1: #添加学生 √
add_stu( cn)
elif m2 == 2: #删除学生 √
del_stu( cn)
elif m2 == 3: #修改学生信息 √
modify_stu( cn)
elif m2 == 0:
i = input("\n按下回车键后,将清空屏幕,"
"返回主菜单")
i = os.system("cls")
return
else:
print("无效的命令,请重新输入")
如果文章对你有帮助,点赞是对我最好的鼓励了!