简单版本学生信息管理系统,用python基础语法实现,基于python 3.6
容错率很高的代码,做了很多异常处理功能,出错也不会丢失信息
启动时自动从文件中读取已有学生信息,退出时自动保存
程序分3个模块:
Menu:进行菜单管理
Student_managemant:进行学生信息管理
main:主函数
直接上代码,有注释
Menu.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# -*- coding: UTF-8 -*-
import sys
import os
class Menu():
"""
菜单管理类
作用:向控制台打印学生信息,从控制台获取输入信息,并进行错误处理
"""
def welcome( self ):
"""
欢迎语句
"""
def top_menu( self ):
"""
一级菜单,提示使用者输入命令
"""
print ( """
请选择要进行的操作:
1、添加学生信息
2、删除学生信息
3、查询单个学生信息
4、输出所有学生信息
5、输出所有学生信息,按照成绩由高到低排名
6、保存并退出
#、操作中输入错误时,按Ctrl+C跳转到主菜单
""" )
def top_menu_get_data( self ):
"""
获取一级菜单使用者输入的命令
"""
self .data = int ( input ())
return [ self .data]
def sub_menu1( self ):
"""
打印子菜单1并收集信息
子菜单1用于添加学生信息
"""
print ( """
正在添加学生信息:
请输入学生姓名:""" )
self .name = input ().strip()
print ( """
请输入学生年龄:""" )
self .age = int ( input ())
print ( """
请输入学生成绩""" )
self .score = int ( input ())
return [ self .name, self .age, self .score]
def sub_menu23_get_name( self ):
"""
收集子菜单2、3的输入信息
子菜单2、3作用是删除或者查询单个学生信息
"""
print ( """
请输入学生姓名:""" )
self .name = input ().strip()
return [ self .name]
if __name__ = = '__main__' :
print ( "Testing Menu Module" )
menu = Menu()
print (menu.top_menu())
print (menu.top_menu_get_data())
print (menu.sub_menu1())
print (menu.sub_menu23_get_name())
|
student_managemeng.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# -*- coding: UTF-8 -*-
import sys
import os
class Student():
"""
学生类,用于保存学生信息
只能添加__slots__ = ['name', 'age', 'score']中的三个属性,如需修改,请改变该列表内容
name: 学生姓名
age : 学生年龄
score:学生成绩
"""
__slots__ = [ 'name' , 'age' , 'score' ]
def __init__( self , name_str, age_int, score_int):
"""
学生类的初始化函数
name_str :学生姓名
age_int :学生年龄
score_int:学生成绩
"""
self .name = name_str
self .age = age_int
self .score = score_int
def __str__( self ):
"""
Student类转为字符串信息的函数
调试时使用
"""
return "%s : %s\n%s : %d\n %s: %d\n" % ( "name" .center( 10 ), self .name, "age" .center( 10 ), self .age, "score" .center( 10 ), self .score)
class Student_Info():
"""
学生信息管理类
用于存储多个学生信息
包含属性:
列表L:元素为Student类的实例
"""
def __enter__( self ):
"""
错误处理机制的初始化函数
调用with语句时首先调用此函数,然后将返回值返回给as后的变量
功能:
打开存储学生信息的文件,将其信息读入内存中
"""
try :
file = open ( "student_info.txt" , 'rt' )
except :
print ( "文件未找到,请联系管理员..." )
exit( - 1 )
self .L = list ()
for i in file :
if i = = '\n' :
break
l = i.split()
s = Student(l[ 0 ], int (l[ 1 ]), int (l[ 2 ]))
self .L.append(s)
print ( "学生信息读取成功..." )
file .close()
return self
def __exit__( self , exc_type, exc_value, exc_tb):
"""
错误处理机制的资源回收函数
跳出with语句时调用此函数
功能:
发生错误的情况下存储学生信息到文件中,防止信息丢失
关闭文件流文件
"""
file = open ( "student_info.txt" , 'wt' )
for i in self .L:
s = "%s %d %d\n" % (i.name, i.age, i.score)
file .write(s)
file .close()
def add_student( self , S):
"""
添加学生信息到列表L中
"""
if isinstance (S, Student):
self .L.append(S)
return True
return False
@staticmethod
def print_all(L):
"""
类的静态方法
参数为:元素为Student类的列表
功能:按照表格格式打印列表中所有学生信息
"""
if len (L) = = 0 :
print ( "数据库中没有学生信息,请先添加学生信息" )
return
print ( "\n|%s|" % ( "name" .center( 15 )), end = '')
print ( "%s|" % ( "age" .center( 15 )), end = '')
print ( "%s|" % ( "score" .center( 15 )))
for i in L:
print ( "|%s|" % (i.name.center( 15 )), end = '')
print ( "%s|" % ( str (i.age).center( 15 )), end = '')
print ( "%s|" % ( str (i.score).center( 15 )))
def print_sorted( self ):
"""
将学生信息按成绩排序,并调用静态方法print_all()按照格式打印
"""
sorted_list = sorted ( self .L, key = key_fun, reverse = True )
self .print_all(sorted_list)
def key_fun(s1):
"""
Student_Info类中规定排序规则的函数,按照分数排名,所以返回score
"""
return s1.score
|
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
# -*- coding: UTF-8 -*-
import sys
import os
import student_management as sm
import menu
#用with语句块进行操作,即使发生错误,也能进行资源释放与数据保存工作
#减小程序bug带来的损失
with sm.Student_Info() as si:
#初始化菜单类实例,打印欢迎信息
m = menu.Menu()
m.welcome()
while True :
#打印1级菜单
m.top_menu()
#获取用户输入的信息,如果发生错误,则重新打印一级菜单
try :
op_data = m.top_menu_get_data()
except :
print ( "输入不合法,请重新选择" )
continue
#用户选择添加学生信息
if op_data[ 0 ] = = 1 :
#获取并添加学生信息
try :
l = m.sub_menu1()
s = sm.Student(l[ 0 ], l[ 1 ], l[ 2 ])
if not si.add_student(s):
print ( "\n添加失败" )
print ( "\n信息添加成功" )
except :
print ( "输入数据不合法,请重新选择" )
#用户选择删除学生信息
elif op_data[ 0 ] = = 2 :
#获取学生姓名并删除学生信息,flag用于判断学生信息是否被删除
#如果没有被删除,说明学生不存在,打印错误信息
name = m.sub_menu23_get_name()[ 0 ]
flag = False
for i in range ( len (si.L)):
if si.L[i].name = = name:
del si.L[i]
flag = True
break
if flag = = False :
print ( "学生不存在,删除失败" )
else :
print ( "学生信息删除成功" )
#用户选择查询单个学生信息
elif op_data[ 0 ] = = 3 :
#获取学生姓名并查询学生信息,flag用于判断学生信息是否被打印
#如果没有被打印,说明学生不存在,打印错误信息
name = m.sub_menu23_get_name()[ 0 ]
flag = False
for i in range ( len (si.L)):
if si.L[i].name = = name:
print (si.L[i])
flag = True
if flag = = False :
print ( "学生不存在,查询失败" )
#用户选择打印学生信息,直接调用静态函数打印
elif op_data[ 0 ] = = 4 :
si.print_all(si.L)
#用户选择按照成绩排序打印学生信息,直接调用函数
elif op_data[ 0 ] = = 5 :
si.print_sorted()
#用户选择退出,直接退出循环,程序下一步将退出with语句块
#退出with语句块后,程序自动调用Student_Info.__exit__()方法,保存学生信息,关闭文件,退出
elif op_data[ 0 ] = = 6 :
break
|
代码地址为:python学生信息管理系统
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/WilliamCode/article/details/85378895