学生信息管理系统

时间:2019-08-06
本文章向大家介绍学生信息管理系统,主要包括学生信息管理系统使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

 

  • 文件结构
  • 详细代码,studentsystem.py
  5 # 文件名称:studentsystem.py
  6 # 开发工具:PyCharm
  7 import re  # 导入正则表达式模块
  8 import os  # 导入操作系统模块
  9 
 10 filename = "students.txt"  # 定义保存学生信息的文件名
 11 
 12 
 13 def menu():
 14     # 输出菜单
 15     print('''
 16     ╔———————学生信息管理系统————————╗
 17     │                                              │
 18     │   =============== 功能菜单 ===============   │
 19     │                                              │
 20     │   1 录入学生信息                             │
 21     │   2 查找学生信息                             │
 22     │   3 删除学生信息                             │
 23     │   4 修改学生信息                             │
 24     │   5 排序                                     │
 25     │   6 统计学生总人数                           │
 26     │   7 显示所有学生信息                         │
 27     │   0 退出系统                                 │
 28     │  ==========================================  │
 29     │  说明:通过数字或↑↓方向键选择菜单          │
 30     ╚———————————————————————╝
 31     ''')
 32 
 33 
 34 def main():
 35     ctrl = True  # 标记是否退出系统
 36     while (ctrl):
 37         menu()  # 显示菜单
 38         option = input("请选择:")  # 选择菜单项
 39         option_str = re.sub("\D", "", option)  # 提取数字
 40         if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
 41             option_int = int(option_str)
 42             if option_int == 0:  # 退出系统
 43                 print('您已退出学生成绩管理系统!')
 44                 ctrl = False
 45             elif option_int == 1:  # 录入学生成绩信息
 46                 insert()
 47             elif option_int == 2:  # 查找学生成绩信息
 48                 search()
 49             elif option_int == 3:  # 删除学生成绩信息
 50                 delete()
 51             elif option_int == 4:  # 修改学生成绩信息
 52                 modify()
 53             elif option_int == 5:  # 排序
 54                 sort()
 55             elif option_int == 6:  # 统计学生总数
 56                 total()
 57             elif option_int == 7:  # 显示所有学生信息
 58                 show()
 59 
 60 
 61 '''1 录入学生信息'''
 62 
 63 
 64 def insert():
 65     stdentList = []        # 保存学生信息的列表
 66     mark = True  # 是否继续添加
 67     while mark:
 68         id = input("请输入ID(如 1001):")
 69         if not id:  # ID为空,跳出循环
 70             break
 71         name = input("请输入名字:")
 72         if not name:  # 名字为空,跳出循环
 73             break
 74         try:
 75             english = int(input("请输入英语成绩:"))
 76             python = int(input("请输入Python成绩:"))
 77             c = int(input("请输入C语言成绩:"))
 78         except:
 79             print("输入无效,不是整型数值....重新录入信息")
 80             continue
 81         stdent = {"id": id, "name": name, "english": english, "python": python, "c": c}  # 将输入的学生信息保存到字典
 82         stdentList.append(stdent)  # 将学生字典添加到列表中
 83         inputMark = input("是否继续添加?(y/n):")
 84         if inputMark == "y":  # 继续添加
 85             mark = True
 86         else:  # 不继续添加
 87             mark = False
 88     save(stdentList)  # 将学生信息保存到文件
 89     print("学生信息录入完毕!!!")
 90 
 91 
 92 # 将学生信息保存到文件
 93 def save(student):
 94     try:
 95         students_txt = open(filename, "a")  # 以追加模式打开
 96     except Exception as e:
 97         students_txt = open(filename, "w")  # 文件不存在,创建文件并打开
 98     for info in student:
 99         students_txt.write(str(info) + "\n")  # 按行存储,添加换行符
100     students_txt.close()  # 关闭文件
101 
102 
103 '''2 查找学生成绩信息'''
104 
105 
106 def search():
107     mark = True
108     student_query = []  # 保存查询结果的学生列表
109     while mark:
110         id = ""
111         name = ""
112         if os.path.exists(filename):  # 判断文件是否存在
113             mode = input("按ID查输入1;按姓名查输入2:")
114             if mode == "1":
115                 id = input("请输入学生ID:")
116             elif mode == "2":
117                 name = input("请输入学生姓名:")
118             else:
119                 print("您的输入有误,请重新输入!")
120                 search()  # 重新查询
121             with open(filename, 'r') as file:  # 打开文件
122                 student = file.readlines()  # 读取全部内容
123                 for list in student:
124                     d = dict(eval(list))  # 字符串转字典
125                     if id is not "":  # 判断是否按ID查
126                         if d['id'] == id:
127                             student_query.append(d)  # 将找到的学生信息保存到列表中
128                     elif name is not "":  # 判断是否按姓名查
129                         if d['name'] == name:
130                             student_query.append(d)  # 将找到的学生信息保存到列表中
131                 show_student(student_query)  # 显示查询结果
132                 student_query.clear()  # 清空列表
133                 inputMark = input("是否继续查询?(y/n):")
134                 if inputMark == "y":
135                     mark = True
136                 else:
137                     mark = False
138         else:
139             print("暂未保存数据信息...")
140             return
141 
142 
143 '''3 删除学生成绩信息'''
144 
145 
146 def delete():
147     mark = True  # 标记是否循环
148     while mark:
149         studentId = input("请输入要删除的学生ID:")
150         if studentId is not "":  # 判断要删除的学生是否存在
151             if os.path.exists(filename):  # 判断文件是否存在
152                 with open(filename, 'r') as rfile:  # 打开文件
153                     student_old = rfile.readlines()  # 读取全部内容
154             else:
155                 student_old = []
156             ifdel = False  # 标记是否删除
157             if student_old:  # 如果存在学生信息
158                 with open(filename, 'w') as wfile:  # 以写方式打开文件
159                     d = {}  # 定义空字典
160                     for list in student_old:
161                         d = dict(eval(list))  # 字符串转字典
162                         if d['id'] != studentId:
163                             wfile.write(str(d) + "\n")  # 将一条学生信息写入文件
164                         else:
165                             ifdel = True  # 标记已经删除
166                     if ifdel:
167                         print("ID为 %s 的学生信息已经被删除..." % studentId)
168                     else:
169                         print("没有找到ID为 %s 的学生信息..." % studentId)
170             else:  # 不存在学生信息
171                 print("无学生信息...")
172                 break  # 退出循环
173             show()  # 显示全部学生信息
174             inputMark = input("是否继续删除?(y/n):")
175             if inputMark == "y":
176                 mark = True  # 继续删除
177             else:
178                 mark = False  # 退出删除学生信息功能
179 
180 
181 '''4 修改学生成绩信息'''
182 
183 
184 def modify():
185     show()  # 显示全部学生信息
186     if os.path.exists(filename):  # 判断文件是否存在
187         with open(filename, 'r') as rfile:  # 打开文件
188             student_old = rfile.readlines()  # 读取全部内容
189     else:
190         return
191     studentid = input("请输入要修改的学生ID:")
192     with open(filename, "w") as wfile:  # 以写模式打开文件
193         for student in student_old:
194             d = dict(eval(student))  # 字符串转字典
195             if d["id"] == studentid:  # 是否为要修改的学生
196                 print("找到了这名学生,可以修改他的信息!")
197                 while True:  # 输入要修改的信息
198                     try:
199                         d["name"] = input("请输入姓名:")
200                         d["english"] = int(input("请输入英语成绩:"))
201                         d["python"] = int(input("请输入Python成绩:"))
202                         d["c"] = int(input("请输入C语言成绩:"))
203                     except:
204                         print("您的输入有误,请重新输入。")
205                     else:
206                         break  # 跳出循环
207                 student = str(d)  # 将字典转换为字符串
208                 wfile.write(student + "\n")   # 将修改的信息写入到文件
209                 print("修改成功!")
210             else:
211                 wfile.write(student)  # 将未修改的信息写入到文件
212     mark = input("是否继续修改其他学生信息?(y/n):")
213     if mark == "y":
214         modify()  # 重新执行修改操作
215 
216 
217 '''5 排序'''
218 
219 
220 def sort():
221     show()  # 显示全部学生信息
222     if os.path.exists(filename):  # 判断文件是否存在
223         with open(filename, 'r') as file:  # 打开文件
224             student_old = file.readlines()  # 读取全部内容
225             student_new = []
226         for list in student_old:
227             d = dict(eval(list))  # 字符串转字典
228             student_new.append(d)  # 将转换后的字典添加到列表中
229     else:
230         return
231     ascORdesc = input("请选择(0升序;1降序):")
232     if ascORdesc == "0":  # 按升序排序
233         ascORdescBool = False           # 标记变量,为False表示升序排序
234     elif ascORdesc == "1":  # 按降序排序
235         ascORdescBool = True          # 标记变量,为True表示降序排序
236     else:
237         print("您的输入有误,请重新输入!")
238         sort()  
239     mode = input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序):")
240     if mode == "1":  # 按英语成绩排序
241         student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
242     elif mode == "2":  # 按Python成绩排序
243         student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
244     elif mode == "3":  # 按C语言成绩排序
245         student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
246     elif mode == "0":  # 按总成绩排序
247         student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
248     else:
249         print("您的输入有误,请重新输入!")
250         sort()
251     show_student(student_new)  # 显示排序结果
252 
253 
254 ''' 6 统计学生总数'''
255 
256 
257 def total():
258     if os.path.exists(filename):  # 判断文件是否存在
259         with open(filename, 'r') as rfile:  # 打开文件
260             student_old = rfile.readlines()  # 读取全部内容
261             if student_old:
262                 print("一共有 %d 名学生!" % len(student_old))
263             else:
264                 print("还没有录入学生信息!")
265     else:
266         print("暂未保存数据信息...")
267 
268 
269 ''' 7 显示所有学生信息 '''
270 
271 
272 def show():
273     student_new = []
274     if os.path.exists(filename):  # 判断文件是否存在
275         with open(filename, 'r') as rfile:  # 打开文件
276             student_old = rfile.readlines()  # 读取全部内容
277         for list in student_old:
278             student_new.append(eval(list))  # 将找到的学生信息保存到列表中
279         if student_new:
280             show_student(student_new)
281     else:
282         print("暂未保存数据信息...")
283 
284 
285 # 将保存在列表中的学生信息显示出来
286 def show_student(studentList):
287     if not studentList:
288         print("(o@.@o) 无数据信息 (o@.@o) \n")
289         return
290     format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"
291     print(format_title.format("ID", "名字", "英语成绩", "Python成绩", "C语言成绩", "总成绩"))
292     format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"
293     for info in studentList:
294         print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
295                                  str(info.get("c")),
296                                  str(info.get("english") + info.get("python") + info.get("c")).center(12)))
297 
298 
299 if __name__ == "__main__":
300     main()

原文地址:https://www.cnblogs.com/lws865/p/11307452.html