学生管理系统大作业 Python

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)

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值