import io
import os
import time
#菜单
def Menu():
print('*********************************')
print('* 学生信息管理系统 *')
print('*********************************')
print('* 增加学生信息---1 *')
print('* 删除学生信息---2 *')
print('* 查找学生信息---3 *')
print('* 更改学生信息---4 *')
print('* 显示学生信息---5 *')
print('* 退出管理系统---0 *')
print('*********************************')
#输入为回车的处理
def Deal(data):
while data=='':
data = input('输入有误!请重新输入:')
return data
#输入需要全为数字的处理
def Number(chance):
chance = Deal(chance)
while True:
if not chance.isdigit():
chance = input('输入有误!请重新输入:')
else:
chance = int(chance)
break
return chance
#检验学号信息是否重复
def Repeat(stu_id):
while True:
if stu_id in stu :
stu_id = input('该学号已存在,请重新输入:')
else:
break
return stu_id
#学号信息
def Id_stu(check=1):
#判断学号是否已存在,判断学号是否为数字且为六位
stu_id = input('请输入学生的学号:')
while True:
if check :#check=1默认检测学号功能启动
stu_id=Repeat(stu_id)
if not stu_id.isdigit() or len(stu_id)!= 6 :#学号都为数字,且长度为6
stu_id = input('学号输入有误,请重新输入:')
else :
break
return stu_id
#姓名信息
def Name_stu(stu_id=0,check=0):
stu_name = input('请输入学生的姓名:')
stu_name = Deal(stu_name)
if check:#check=1时,启动更改信息的功能
stu[stu_id]['姓名'] = stu_name
return stu_name
#年龄信息
def Age_stu(stu_id=0,check=0):
stu_age = input('请输入学生的年龄(17~25):')
#判断年龄是否为数字且合法
while not stu_age.isdigit() or int(stu_age)<17 or int(stu_age)>25 :
stu_age = input('年龄输入有误,请重新输入:')
if check:
stu[stu_id]['年龄'] = stu_age
return stu_age
#班级信息
def Class_stu(stu_id=0,check=0):
stu_class = input('请输入学生的班级:')
stu_class = Deal(stu_class)
if check:
stu[stu_id]['班级'] = stu_class
return stu_class
#专业信息
def Major_stu(stu_id=0,check=0):
stu_major = input('请输入学生的专业的信息:')
stu_major = Deal(stu_major)
if check:
stu[stu_id]['专业'] = stu_major
return stu_major
#性别信息
def Sex_stu(stu_id=0,check=0):
stu_sex = Number(input('请输入学生的性别信息(男---1 女---2) :'))
while stu_sex not in [1,2]:
stu_sex = Number(input('输入有误,请重新输入:'))
if stu_sex==1:
result = '男'
elif stu_sex==2:
result = '女'
if check:
stu[stu_id]['性别'] = result
return result
#添加********************************************************************************************************
def Input_stu():
while True:
#输入学号
stu_id = Id_stu()
#输入姓名
stu_name = Name_stu()
#输入年龄
stu_age = Age_stu()
#输入班级
stu_class = Class_stu()
#输入专业
stu_major = Major_stu()
#输入性别
stu_sex = Sex_stu()
#添加学生信息
stu[stu_id] = {'学号':stu_id,'姓名':stu_name,'年龄':stu_age,'班级':stu_class,'专业':stu_major,'性别':stu_sex}
print('学生信息添加成功!')
check = input('是否继续添加学生信息:y/Y---是 n/N---否\n')
while check not in ['Y','y','n','N']:
check =input('选择有误,请重新输入:')
if check in ['n','N']:
print('学生信息添加结束!')
break
#删除菜单
def Delete_Menu():
print('*********************************')
print('* 按照学号删除---1 *')
print('* 按照名字删除---2 *')
print('* 退出 ---0 *')
print('*********************************')
chance = Number(input('请输入操作选项:'))
while chance not in [1,2,0]:
chance = Number(input('输入有误,请重新输入:'))
return chance
#按照学号删除
def Delete_id():
delete_target = Id_stu(0)#输入删除的学号
if delete_target in stu: #遍历字典,查找学号是否存在
del stu[delete_target]
print('学生信息删除成功!')
else:
print('未储存该学生信息!')
#按照姓名删除
def Delete_name():
delete_target = Name_stu()#输入删除的姓名
check = True #用来判断是否存在输入的姓名,默认不存在
for person in stu:
if stu[person]['姓名'] == delete_target:
if check:
print('符合条件的学生信息:')
check = False
Show_one(person)
if check:
print('未储存该学生信息!')
else:
Delete_id()
#删除*****************************************************************************************************
def Delete_stu():
while True:
chance = Delete_Menu()
if chance==1:
Delete_id()
elif chance==2:
Delete_name()
elif chance==0 :
print('退出成功!')
break
#查找菜单
def Find_Menu():
print('*********************************')
print('* 按照学号查找---1 *')
print('* 按照姓名查找---2 *')
print('* 按照年龄查找---3 *')
print('* 按照班级查找---4 *')
print('* 按照专业查找---5 *')
print('* 按照性别查找---6 *')
print('* 退出 ---0 *')
print('*********************************')
find_chance = Number(input('请输入你的选项:'))
while find_chance not in [0,1,2,3,4,5,6,]:
find_chance = Number(input('输入有误,请重新输入选项:'))
return find_chance
#按单个要求查找
def Findson_stu(key,target):
check = True #判断是否存在该信息,默认不存在
for person in stu:
if stu[person][key]==target:
check=False
Show_one(person)
if check:
print('未查找到该信息!')
#查找
def Find_stu():
while True:
find_chance = Find_Menu()
if find_chance==1 :
find_id = Id_stu(0)#不启动学号查重的功能
Findson_stu('学号',find_id)
elif find_chance==2 :#请输入需要查找的姓名
find_name = Name_stu()
Findson_stu('姓名',find_name)
elif find_chance==3 :#请输入需要查找的年龄
find_age = Age_stu()
Findson_stu('年龄',find_age)
elif find_chance==4 :#请输入需要查找的班级
find_class = Class_stu()
Findson_stu('班级',find_class)
elif find_chance==5 :#请输入需要查找的专业
find_major = Major_stu()
Findson_stu('专业',find_major)
elif find_chance==6 :#请输入需要查找的性别
find_sex = Sex_stu()
Findson_stu('性别',find_sex)
elif find_chance==0 :
print('查找结束!')
break
else:
print('输入有误!')
#更改菜单
def Change_Menu():
print('*********************************')
print('* 更改姓名---1 *')
print('* 更改年龄---2 *')
print('* 更该班级---3 *')
print('* 更改专业---4 *')
print('* 更改性别---5 *')
print('* 退出 ---0 *')
print('*********************************')
change_chance = Number(input('请输入你的选项:'))
while change_chance not in [0,1,2,3,4,5]:
change_chance = Number(input('输入有误,请重新输入选项:'))
return change_chance
#更改***********************************************************************************************************
def Change_stu():
change_id = Id_stu(0)
if change_id not in stu:
print('未储存该学生信息!')
return 0
print('该学生原信息:')
Show_one(change_id)
while True:
change_chance = Change_Menu()
if change_chance==1:
Name_stu(change_id,1)#check=1时,启动信息更改的功能
elif change_chance==2:
Age_stu(change_id,1)
elif change_chance==3:
Class_stu(change_id,1)
elif change_chance==4:
Major_stu(change_id,1)
elif change_chance==5:
Sex_stu(change_id,1)
elif change_chance==0:
break
else:
print('输入有误!')
print('更改学生信息成功!')
#显示一个人·
def Show_one(son):
print('*********************************')
for key in ['学号','姓名','年龄','班级','专业','性别']:
print('{}:'.format(key),stu[son][key])
#显示所有人*******************************************************************************************
def Show_stu():
check = True#判断学生信息是否为空,默认为空
for son in stu:
check = False
Show_one(son)
if check:
print('未储存学生信息!')
#检测文件是否为空
def Read_check():
file = 'STdata.txt'
if os.path.getsize(file):
return True
return False
#程序开始时,读取文件中的数据,读取模式
def Read():
cnt=0
stu_r = open('STdata.txt','r',encoding='UTF-8')
if not Read_check():
return 0
value = [0,1,2,3,4,5,6]
for line in stu_r:
if cnt==0:
pass
else:
value[cnt] = line.strip()
value[cnt] = value[cnt][3:]
#print(value[cnt])
if cnt==6:
stu[value[1]] = {'学号':value[1],'姓名':value[2],'年龄':value[3],'班级':value[4],'专业':value[5],'性别':value[6]}
cnt=0
else:
cnt=cnt+1
stu_r.close()
#程序结束时,将数据储存到硬盘的文件中,写出模式
def Write():
stu_w = open('STdata.txt','w',encoding='UTF-8')
for person in stu:
stu_w.write('***********************\n')
keys = ['学号','姓名','年龄','班级','专业','性别']
for key in keys:
connect = stu[person][key]
temp = '{}:{}\n'.format(key,connect)
stu_w.write(temp)
stu_w.close()
#主函数
stu = {}#创建一个空字典
if os.path.exists('STdata.txt'):#检验文件是否存在
Read()
else:
print('需要创建STdata.txt文档!')
while True:
Menu()
chance = input('请输入你的选项:')
chance = Number(chance)
if chance == 1:
Input_stu()
elif chance == 2:
Delete_stu()
elif chance == 3:
Find_stu()
elif chance == 4:
Change_stu()
elif chance == 5:
Show_stu()
elif chance == 0:
print('感谢您的使用!')
break
else:
print('输入有误!')
pass
Write()
time.sleep(2000)
学生管理系统大作业 Python
最新推荐文章于 2025-04-11 12:05:25 发布