python学生管理系统封装_python3学生管理系统

"""

欢迎使用[学生成绩管理系统]

1.显示所有学生信息

2.新建学生信息

3.查询学生信息

4.修改学生信息

5.删除学生信息

6.统计学生总人数

7.对学生成绩进行排序

0.退出系统

"""

#使用列表模拟学生数据库或采用文件存取的方式进行操作

# data =[

# {

# 'id':12441224,

# 'name':'张三',

# 'sex':'男',

# 'address':'佛山'

# },

# {

# 'id':67791224,

# 'name':'李四',

# 'sex':'男',

# 'address':'济南'

# },

# {

# 'id':15467124,

# 'name':'王五',

# 'sex':'女',

# 'address':'桂林'

# },

# ]

import os

filename='学生管理系统.txt'

def main():

while True:

menu_stu()

operation = int(input('请输入序号: ')) #input默认输入格式为字符串,要转换为int类型才可以进行判断

try:

if operation in [0, 1, 2, 3, 4, 5, 6, 7]:

if operation == 1:

show_all()

elif operation == 2:

create_stu()

elif operation == 3:

find_stu()

elif operation == 4:

modify_stu()

elif operation == 5:

delete_stu()

elif operation == 6:

total_stu()

elif operation == 7:

sort_stu()

elif operation == 0:

answer = input('您确定要退出系统吗?y/n: ')

if answer == 'y' or answer == 'Y':

print('谢谢您的使用!')

break # 退出系统

else:

continue

except:

print('您的输入有误,请重新输入: ')

continue

# 主菜单显示

def menu_stu():

print('***********************')

print('欢迎使用[学生成绩管理系统]')

print('1.显示所有学生信息')

print('2.新建学生信息')

print('3.查询学生信息')

print('4.修改学生信息')

print('5.删除学生信息')

print('6.统计学生总人数')

print('7.对学生成绩进行排序')

print('0.退出系统')

print('***********************')

# 1.显示所有学生信息

def show_all():

student_list=[]

if os.path.exists(filename):

with open(filename,'r',encoding='utf-8') as rfile:

students = rfile.readlines()

for item in students:

student_list.append(eval(item))

if student_list:

show_student(student_list)

# 2.新建学生信息

def create_stu():

# name = input_name()

# sex = sex_choice()

# address = input('输入地址: ')

# stu = {

# 'name':name,

# 'sex':sex,

# 'address': address

# }

# data.append(stu)

student_list = []

while True:

id = input('请输入ID(如1001): ')

if not id:

break

name = input('请输入姓名: ')

if not name:

break

try:

english = int(input('请输入英语成绩: '))

python = int(input('请输入python成绩: '))

address = input('请输入家乡地址: ')

except:

print('您的输入不符合规范,请重新输入!')

continue

stu = {'id':id,'name':name,'english':english,'python':python,'address':address}

student_list.append(stu)

answer=input('是否继续添加?y/n ')

if answer == 'y':

continue

else:

# 调用save()函数

save_stu(student_list)

print('学生信息录入完毕!!')

break

# save函数

def save_stu(list):

try:

stu_txt=open(filename,'a',encoding='utf-8')

except:

stu_txt=open(filename,'w',encoding='utf-8')

for item in list:

stu_txt.write(str(item)+'\n')

stu_txt.close()

# 3.查询学生信息

def find_stu():

# name = input('查询学生的名字: ')

# for stu in data:

# if stu['name'] == name:

# print(stu)

# return

# else:

# print('查无此人')

student_query=[]

while True:

id=''

name=''

if os.path.exists(filename):

mode=input('按ID查找请输入1,按姓名查找请输入2: ')

if mode=='1':

id=input('请输入学生ID: ')

elif mode=='2':

name=input('请输入学生姓名: ')

else:

print('您的输入有错误,请重新输入!')

find_stu()

with open(filename,'r',encoding='utf-8') as rfile:

student=rfile.readlines()

for item in student:

d=dict(eval(item))

if id!='':

if d['id']==id:

student_query.append(d)

elif name!='':

if d['name']==name:

student_query.append(d)

#显示查询结果

show_student(student_query)

#清空列表

student_query.clear()

answer = input('是否继续查询?y/n ')

if answer == 'y':

continue

else:

break

else:

print('暂未保存学生信息!!')

return

def show_student(list):

if len(list)==0:

print('没有查询到学生信息,无数据显示!!')

return

#定义标题显示格式

format_title='{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^8}'

print(format_title.format('ID','姓名','英语成绩','Python成绩','地址'))

format_data = '{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^8}'

for item in list:

print(format_data.format(item.get('id'),

item.get('name'),

item.get('english'),

item.get('python'),

item.get('address')))

# 4.修改学生信息

def modify_stu():

if os.path.exists(filename):

with open(filename,'r',encoding='utf-8') as rfile:

stu_old=rfile.readlines()

else:

return

stu_id=input('请输入要修改学生的ID: ')

with open(filename,'w',encoding='utf-8') as wfile:

for item in stu_old:

d=dict(eval(item))

if d['id']==stu_id:

print('找到学生信息,可以进行修改操作!')

while True:

try:

d['name']=input('请输入姓名: ')

d['english'] = int(input('请输入英语成绩: '))

d['python'] = int(input('请输入python成绩 '))

d['address'] = input('请输入家乡地址: ')

except:

print('您的输入有误,请重新输入: ')

else:

break

wfile.write(str(d)+'\n')

print('修改成功!!')

else:

wfile.write(str(d)+'\n')

answer = input('是否继续删除?y/n ')

if answer == 'y':

modify_stu()

else:

return

# 5.删除学生信息

def delete_stu():

while True:

stu_id=input('请输入要删除的学生的id: ')

if stu_id!='':

if os.path.exists(filename):

with open(filename,'r',encoding='utf-8')as rfile:

stu_old=rfile.readlines()

else:

stu_old=[]

flag=False #标记是否删除

if stu_old:

with open(filename,'w',encoding='utf-8')as wfile:

d={}

for item in stu_old:

d=dict(eval(item)) #将字符串转换为字典

if d['id']!=stu_id:

wfile.write(str(d)+'\n')

else:

flag=True

if flag:

print(f'id为{stu_id}的学生信息已经被删除!!')

else:

print(f'没有找到ID为{stu_id}的学生信息!!')

else:

print('无学生信息!!')

break

show_all()

answer = input('是否继续删除?y/n' )

if answer == 'y':

continue

else:

break

else: continue

# 6.统计学生总人数

def total_stu():

if os.path.exists(filename):

with open(filename,'r',encoding='utf-8')as rfile:

students=rfile.readlines()

if students:

print(f'一共有{len(students)}名学生!!')

else:

print('还没有录入学生信息!!')

else:

print('暂未保存数据信息!!')

# 7.对学生成绩进行排序

def sort_stu():

show_all()

student_new=[]

if os.path.exists(filename):

with open(filename,'r',encoding='utf-8') as rfile:

student_list=rfile.readlines()

for item in student_list:

d=dict(eval(item))

student_new.append(d)

else:

return

asc_or_desc=input('请选择(0.升序 1.降序): ')

if asc_or_desc=='0':

asc_or_desc_bool=False

elif asc_or_desc=='1':

asc_or_desc_bool=True

else:

print('您的输入有误,请重新输入!!')

sort_stu()

mode=input('请选择排序方式(1.按英语成绩排序,2.按Python成绩排序,3.按ID排序: ')

if mode=='1':

student_new.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)#匿名函数的写法

elif mode=='2':

student_new.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)

elif mode=='3':

student_new.sort(key=lambda x:int(x['id']),reverse=asc_or_desc_bool)

else:

print('您的输入有误,请重新输入!!')

sort_stu()

show_student(student_new)

if __name__ == '__main__':

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值