案列:学生管理系统

###1.读写文件

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
import json


# 普通文本文件的读操作
def text_read(file_name: str):
"""
普通文本文件的读操作
:param file_name: 要读的文件的名字
:return: 读到的内容
"""
try:
with open('./files/'+file_name, encoding='utf-8') as f:
return f.read()
except FileNotFoundError:
print('%s文件不存在' % (file_name))
return None


# 将文本写入指定的文件中
def text_write(file_name: str, content: str):
"""
将文本写入指定的文件中
:param file_name: 文件名
:param content: 要写入到文件中的内容
:return: 是否写入成功
"""
with open('./files/'+file_name, 'w', encoding='utf-8') as f:
f.write(content)
return True


# 读json文件中的内容
def json_read(file_name: str):
"""
获取json文件中的内容
:param file_name: 文件名
:return: python类型的数据
"""
try:
with open('./files/'+file_name, encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
# print('%s文件不存在!' % file_name)
return None


def json_write(file_name: str, content):
"""
将内容写入文件中
:param file_name:
:param content:
:return: 写入是否成功
"""
try:
with open('./files/'+file_name, 'w', encoding='utf-8') as f:
json.dump(content, f)
return True
except:
# print('写入失败')
return False

###2.登录主页

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


import module.file_manager as file_manager
import student_manager


# 注册
def register():
"""注册"""
# 控制输入账号
while True:
# 1.输入账号
user_name = input('请输入账号(3~6位):')
# 2.检测账号的位数是否符合要求
if not 3 <= len(user_name) <= 6:
print('账号有误!请重新输入!')
continue
else:
break

# 控制输入密码
while True:
# 3.在账号输入成功的前提下输入密码
pass_word = input('请输入密码(6~12位):')
# 4.检测密码是否合格
if not 6 <= len(pass_word) <= 12:
print('密码有误!请重新输入!')
continue
else:
break

# 检测账号是否已经注册过!
"""
数据设计:用一个字典来保存所有的账号和密码,账号:密码 -->
将保存所有的账号和密码对应的字典存到一个文件中 --> 选json文件
{用户名:密码}
"""
# 1.获取之前注册过的所有的账号信息
all_user = file_manager.json_read('all_user.json')

# 2.判断输入成功的账号是否存在
if user_name in all_user:
print('注册失败!该用户名已经被注册了!')
return

# 3.账号可用,将账号信息添加到所有的用户中
all_user[user_name] = pass_word

# 4.更新本地文件
re = file_manager.json_write('all_user.json', all_user)
if re:
print('注册成功!')
else:
print('注册失败!')


# 登录
def login():
# 1.输入账号和密码
user_name = input('请输入账号:')
pass_word = input('请输入密码:')
# 2.检测账号是否已经注册过
# 获取系统所有的用户
all_user = file_manager.json_read('all_user.json')
# 判断账号是否存在
if user_name not in all_user:
print('登录失败! 账号不存在!')
return
# 账号存在就先通过账号去获取正确的密码
pass_word_old = all_user[user_name]
if pass_word == pass_word_old:
print('登录成功!')
# 登录成功后要做什么,写在这儿....
student_manager.show_manager_page(user_name)

else:
print('登录失败!密码错误!')


def show_main_page():
"""
显示主页
"""
while True:
# 显示页面
print(file_manager.text_read('main_page.txt'))
# 选择
value = input('请选择(1-3):')
# 根据不同的选择做出不同的反应
if value == '1':
# print('登录功能')
login()
elif value == '2':
# print('注册功能')
# 注册
register()
elif value == '3':
return
else:
print('输入有误!')


if __name__ == '__main__':
# 1.显示登录注册页面
show_main_page()

###3.学生管理系统

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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
"""__author__ = 余婷"""
import module.file_manager as file_manager

# 全局变量用来保存当前登录成功的用户名
current_user = None

"""
数据结构:
1.账号和账号管理的学生要一一对应
aaa stu1, stu2
bbb stu3
2.一个账号要管理多个学生
3.一个学生要存储多个信息。每个学生存储的信息数量一样

方案一:整个管理系统所有的账号管理的学生放在一起
{
账号1:[{'name': name1,'age': age, 'tel':tel1, 'id':id1},...],
账号2:[学生1, 学生2],
账号3:[]...
...
}
将大字典写到一个json文件

方案二:
一个账号对应一个json文件,每个json文件中就是一个列表
json文件名和账号名一一对应

aaa.json :
{
"count":0, # 当前系统已经添加的学生数目
"all_students":[{'name': name1,'age': age, 'tel':tel1, 'id':id1},...]
}
"""
# 通过全局变量保存常用的key
key_count = 'count'
key_all_students = 'all_students'
key_name = 'name'
key_age = 'age'
key_tel = 'tel'
key_id = 'id'


def get_current_userinfo():
"""获取当前账号对应的json文件中的内容"""
content = file_manager.json_read(current_user+'.json')
if not content:
content = {}
return content


# 添加学生
def add_student():
"""添加学生"""
# 0.获取当前账号的数据
user_info = get_current_userinfo()

while True:
# 1.输入学生信息
name = input('请输入学生的姓名:')
age = input('请输入学生的年龄:')
tel = input('请输入学生的电话:')
# 2.产生学号
number = user_info.get(key_count, 0)
number += 1
stu_id = 'stu' + str(number).rjust(3, '0')
# 3.创建学生
stu = {key_name: name, key_age: age, key_tel: tel, key_id: stu_id}

# 4.添加学生
all_students = user_info.get(key_all_students, [])
all_students.append(stu)

# 5.将新的数据更新到文件中
user_info[key_count] = number
user_info[key_all_students] = all_students
result = file_manager.json_write(current_user+'.json', user_info)
if result:
print('添加成功!')
else:
print('添加失败!')

# 6.给出选择
print('1. 继续')
print('2. 返回')
value = input('请选择(1-2):')
if value == '1':
continue
else:
return


def show_student_info(stu):
"""显示一个学生的信息"""
print('学号:%s 姓名:%s 年龄:%s 电话:%s'\
% (stu[key_id], stu[key_name], stu[key_age], stu[key_tel]))


def find_student_with_name(name, all_students):
"""按姓名查找学生"""
find_students = [] # 保存符合条件的所有学生
for stu in all_students:
if stu[key_name] == name:
find_students.append(stu)
return find_students


def find_student_with_id(stu_id, all_students):
"""按学号去查找学生"""
for stu in all_students:
if stu[key_id] == stu_id:
return stu
return None


def find_student():
"""查找学生"""
# 1.拿到所有学生
user_info = get_current_userinfo()
all_students = user_info.get(key_all_students, None)
if not all_students:
print('当前账号没有可管理的学生!')
return

while True:
print('1.查看所有学生\n2.按姓名查找\n3.按学号查找\n4.返回')
value = input('请选择(1-4):')
if value == '1':
for stu in all_students:
show_student_info(stu)
elif value == '2':
name = input('请输入姓名:')
students = find_student_with_name(name, all_students)
if students:
for stu in students:
show_student_info(stu)
else:
print('没有找到学生%s!' % name)

elif value == '3':
stu_id = input('请输入学号:')
stu = find_student_with_id(stu_id, all_students)
if stu:
show_student_info(stu)
else:
print('没有找到学号%s对应的学生!' % stu_id)

else:
return


def delete_student():
"""删除学生"""
# 1.拿到所有学生
user_info = get_current_userinfo()
all_students = user_info.get(key_all_students, [])
if not all_students:
print('当前账号没有可管理的学生!')
return

while True:
# 2.给出选择
print('1.按姓名删除\n2.按学号删除\n3.返回')
value = input('请选择(1-3):')

# 3.根据不同的选择做不同的事
if value == '1':
name = input('请输入姓名:')
# 找到同名的所有学生
students = find_student_with_name(name, all_students)

# 判断系统中是否有该学生
if not students:
print('该学生不存在!')
continue

# 如果找到了学生,先展示找到的所有学生
index = 0
for stu in students:
print(index, end=' ')
show_student_info(stu)
index += 1
print('q 返回上一层')
# 问想要具体删除哪个学生
del_index = input('请输入要删除的学生对应的标号:')

if del_index == 'q':
continue
else:
# 找到要删除的学生对应的字典
del_stu = students[int(del_index)]
# 从所有的学生对应的列表中去删除
all_students.remove(del_stu)
# 将新的数据更新到json文件中
result = file_manager.json_write(current_user+'.json', user_info)
if result:
print('删除成功!')
else:
print('删除失败!')
elif value == '2':
del_id = input('输入要删除的学号:')
# 根据学号查找学生
del_stu = find_student_with_id(del_id, all_students)
if not del_stu:
print('没有该学生!')
continue
show_student_info(del_stu)
value = input('是否删除(Y/N):')
if value == 'Y':
all_students.remove(del_stu)
else:
continue
# 删除后更新数据
result = file_manager.json_write(current_user+'.json', user_info)
if result:
print('删除成功!')
else:
print('删除失败!')
else:
return


# 显示管理页面
def show_manager_page(user_name):
"""
显示学生管理页面首页
:return:
"""
# 1.保存登录成功的用名
global current_user
current_user = user_name

# 2.显示页面
while True:
content = file_manager.text_read('manager_page.txt')
print(content % user_name)

# 3.做选择
value = input('请选择(1-5):')
if value == '5':
return
elif value == '1':
add_student()
elif value == '2':
# print('查看学生')
find_student()
elif value == '3':
print('修改学生信息')
elif value == '4':
# print('删除学生')
delete_student()
else:
print('输入有误!')

###4.主页样式

1
2
3
4
5
6
* * * * * * * * * * * * * * * * * * * * * * *
* ❀❀欢迎来到xx学生管理系统❀❀ *
* 1. 登 录 *
* 2. 注 册 *
* 3. 退 出 *
* * * * * * * * * * * * * * * * * * * * * * *

###5.学生管理系统界面

1
2
3
4
5
6
7
8
* * * * * * * * * * * * * * * * * * * *
* ❀欢迎%s进入学生管理系统 ❀ *
* 1.添加学生的信息 *
* 2.查找学生的信息 *
* 3.修改学生的信息 *
* 4.删除学生的信息 *
* 5.退出学生管理系统 *
* * * * * * * * * * * * * * * * * * * *