Python实践项目(二)学生信息管理系统

实训内容

 1、学生信息管理系统

 2、具有添加,删除,查询,统计,显示,排序功能

//导入主函数
from
index import main main()

主程序:

复制代码
  1 # 导入模块
  2 import os
  3 import re
  4 
  5 # 建立一个名为student.text的文本用于保存文件
  6 
  7 fileName = 'student.txt'
  8 
  9 
 10 # 定义函数main()
 11 def main():
 12     while True:
 13         menu()
 14         choice = int(input('请输入您的程序指令:'))
 15         if choice in [0, 1, 2, 3, 4, 5, 6]:
 16             if choice == 0:
 17                 print("您确定要退出吗?yes/no")
 18                 answer = input()
 19                 if answer == 'yes':
 20                     print('感谢您的使用!!!')
 21                     break  # 终止
 22                 else:
 23                     continue  # 中止
 24             elif choice == 1:
 25                 insert()
 26             elif choice == 2:
 27                 delete()
 28             elif choice == 3:
 29                 search()
 30             elif choice == 4:
 31                 total()
 32             elif choice == 5:
 33                 show()
 34             elif choice == 6:
 35                 sort()
 36         else:
 37             print('输入的指令不在范围内,请重新输入!!!')
 38 
 39 
 40 def menu():
 41     print('==============================学生信息管理系统==============================')
 42     print('︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽功能菜单︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽')
 43     print("*" * 74)
 44     print("******", " " * 60, "******")
 45     print("******\t    1.添加学生信息", " " * 18, "4.统计学生总人数\t    ******")
 46     print("******\t    2.删除学生信息", " " * 18, "5.显示所有学生信息    ******")
 47     print("******\t    3.查询学生信息", " " * 18, "6.排序(以总成绩分数)  ******")
 48     print("******\t    0.退出学生信息管理系统", " " * 32, "******")
 49     print("******", " " * 60, "******")
 50     print("*" * 74)
 51     print('︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾')
 52 
 53 
 54 def save(lst):
 55     stu_txt = open(fileName, 'a', encoding='utf-8')
 56     for item in lst:
 57         stu_txt.write(str(item) + '\n')
 58     stu_txt.close()
 59 
 60 
 61 # 录入学生信息
 62 def insert():
 63     global phone
 64     student_list = []
 65     while True:
 66         id = input('请输入学号: ')
 67         if not id:
 68             break
 69         name = input('请输入姓名: ')
 70         if not name:
 71             break
 72         sex = input('请输入性别: ')
 73         if not sex:
 74             break
 75         # phone = input('请输入手机号: ')
 76         # if not phone:
 77         count = 0
 78         for i in range(1, 4):
 79             phone = input("请输入你的手机号: ")
 80             # 利用正则表达式进行限定
 81             tel = re.match(r"^1[3456789]\d{9}$", phone)
 82             if tel:
 83                 print("输入成功!")
 84                 break
 85             if tel != phone:
 86                 count += 1
 87             if (count == 3):
 88                 print("录入失败,请30秒后重试!")
 89             if (count != 3):
 90                 print("录入错误,请核对你的手机号!")
 91         try:
 92             # 智育分满分70分,德育分满分20分,体育分满分10分
 93             zyf = int(input('请输入你的智育分:'))
 94             dyf = int(input('请输入你的德育分:'))
 95             tyf = int(input('请输入你的体育分:'))
 96         except:
 97             print('请您输入数字成绩!')
 98             continue
 99         # 将录入的学生信息保存到字典中
100         student = {'id': id, 'name': name, 'sex': sex, 'phone': phone, 'zyf': zyf, 'dyf': dyf, 'tyf': tyf}
101         # 将学生信息添加到列表中
102         # 可删!!!!!
103         student_list.append(student)
104         answer = input('是否继续添加?yes/no\n')
105         if answer == 'yes':
106             continue
107         else:
108             break
109     # 保存学生信息
110     save(student_list)  # 封装
111     print('学生信息录入完毕!!!')
112 
113 
114 def show_student(lst):
115     # 传过来空列表
116     if len(lst) == 0:
117         print('没有查找到该生信息!')
118         return
119     # 定义标题显示格式
120     format_title = '{:^5}\t{:^23}{:^5}\t{:^11}\t{:^12}\t{:^10}\t{:^10}\t{:^6}\t{:^6}\t'
121     print(format_title.format('学号', '姓名', '性别', '手机号', '智育分', '德育分', '体育分', '总成绩', '分数等级'))
122     # 定义内容的显示格式
123     format_data = '{:^6}\t{:^6}\t{:^6}\t{:^31}{:^3}\t{:^10}\t{:^9}\t{:^12}\t{:^12}\t'
124     for item in lst:
125         sum = int(item['zyf']) + int(item['dyf']) + int(item['tyf'])
126         # grade等级的使用
127         grade = ''
128         if sum >= 85:
129             grade = 'A'
130         if 75 <= sum < 85:
131             grade = 'B'
132         if 65 <= sum < 75:
133             grade = 'C'
134         if 60 <= sum < 65:
135             grade = 'D'
136         if sum < 60:
137             grade = 'error'
138         # sum,grade的输出格式不同
139         # format_data.format(sum,grade))
140         print(format_data.format(item['id'], item['name'], item['sex'], item['phone'],
141                                  item['zyf'], item['dyf'], item['tyf'],
142                                  sum, grade))
143     print('全部学生信息显示完毕!!!')
144 
145 
146 # 查询学生信息
147 def search():
148     while True:
149         stu_query = []
150         id = ''
151         # 判断文件是否存在
152         if os.path.exists(fileName):
153             # if的使用
154             if id == '':
155                 id = input('请输入要查找的学生学号:')
156             else:
157                 print('您的输入有误,请重新输入!')
158                 continue
159             # 如果文件存在,并且用户输入了正确的查询标号,则打开文件
160             with open(fileName, 'r', encoding='utf-8') as rfile:
161                 students = rfile.readlines()
162             # 转换为字典类型
163             for item in students:
164                 d = dict(eval(item))
165                 if id != '':
166                     if id == d['id']:
167                         stu_query.append(d)  # 追加
168             # 显示查询结果
169             show_student(stu_query)
170             # 是否继续查询其他学生信息
171             answer = input('还要查询其他学生吗?yes/no\n')
172             if answer == 'yes':
173                 continue
174             else:
175                 break
176         else:
177             print('学生信息不存在!')
178             return
179     print('学生信息查询结束,请进行下一步操作!!!')
180 
181 
182 # 删除学生信息
183 def delete():
184     while True:
185         student_id = input('请输入要删除学生的学号:')
186         if student_id != '':
187             if os.path.exists(fileName):
188                 with open(fileName, 'r', encoding='utf-8') as file:
189                     student_old = file.readlines()
190             else:
191                 student_old = []
192             flag = False  # 标记是否删除
193             if student_old:
194                 with open(fileName, 'w', encoding='utf-8') as wfile:
195                     d = {}
196                     for item in student_old:
197                         d = dict(eval(item))  # 将字符串转换为字典
198                         if d['id'] != student_id:
199                             wfile.write(str(d) + '\n')
200                         else:
201                             flag = True
202                     if flag:
203                         print(f'学号为{student_id}的学生信息已经删除')
204                     else:
205                         print(f'学生表中没有找到学号为{student_id}的学生')
206             else:
207                 print('学生表已中无任何学生个人信息')
208                 break
209             show()  # 重新显示所有学生信息
210             answer = input('是否继续删除?yes/no\n')
211             if answer == 'yes':
212                 continue
213             else:
214                 break
215     print('删除学生信息已结束,请你进行下一步操作!!!')
216 
217 
218 # 统计学生总人数
219 def total():
220     # 判断文件是否存在,如果存在则打开文件,读取信息
221     if os.path.exists(fileName):
222         with open(fileName, 'r', encoding='utf-8') as rfile:
223             students = rfile.readlines()
224             # 判断读取到的学生信息是否为空
225             if students:
226                 print('一共有{}名学生'.format(len(students)))
227             else:
228                 print('学生系统中还没有录入学生信息!')
229     else:
230         print('学生信息不存在!')
231         return
232     print('学生总人数统计完毕,请进行下一步操作!!!')
233 
234 
235 # 显示所有学生信息
236 def show():
237     student_list = []
238     # 判断文件是否存在,如果存在则打开文件,读取信息
239     if os.path.exists(fileName):
240         with open(fileName, 'r', encoding='utf-8') as rfile:
241             students = rfile.readlines()
242             # 判断读取到的学生信息是否为空
243             if students:
244                 for item in students:
245                     student_list.append(eval(item))
246                 # 展示学生信息
247                 show_student(student_list)
248             else:
249                 print('学生文件中还没有录入学生信息!')
250     else:
251         print('学生文件不存在!')
252         return
253     print('学生信息已成功显示,请你进行下一步操作!!!')
254 
255 
256 # 对总学生成绩进行排序
257 def sort():
258     # 判断文件是否存在,如果存在则打开文件,读取信息
259     if os.path.exists(fileName):
260         with open(fileName, 'r', encoding='utf-8') as rfile:
261             students_list = rfile.readlines()
262         students_new = []
263         # 判断读取到的学生信息是否为空
264         if students_list:
265             # 将所有的item加入到students_new中
266             for item in students_list:
267                 d = dict(eval(item))
268                 students_new.append(d)
269                 # 利用匿名函数与sort方法进行排序
270                 # True为降序,False升序
271                 students_new.sort(key=lambda x: int(x['zyf']) + int(x['dyf']) + int(x['tyf']),
272                                   reverse=True)
273             # 将排序后的成绩进行输出
274             show_student(students_new)
275     print('学生信息排序完成并成功显示,请你进行下一步操作!!!')
276 
277 
278 if __name__ == '__main__':
279     main()
复制代码

总结:

复制代码
1.read ()
一次性将文件所有内容读取出来
2.与readlines
按行读取
3.float类型函数与int类型函数
4.分数名称大小写(Zyf and zyf)
5.sum相加问题
6.save保存分数等级的问题
7.(Python)解决lameError:name'XXX'is not defined的问题
8.python遇到NameError:name'_name_'is not defined这样的错误
name两端的双下划线
9.python学习-while True的用法
采用该语句的核心思想是如果出现错误的话,可以继续下一个循环。使用b
reak终止整个循环
对于学生管理系统有很大作用,不影响使用
10.python中使用fromat的时候报错IndexError: tuple index out of range
错误的原因是元组索引越界,因为后面format中的内容出现了赋值操作
复制代码

运行结果:

 

posted @   飞鱼Dai  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示