python3.6实现学生信息管理系统
作者:WilliamCode 发布时间:2021-02-09 20:54:48
标签:python,管理系统
简单版本学生信息管理系统,用python基础语法实现,基于python 3.6
容错率很高的代码,做了很多异常处理功能,出错也不会丢失信息
启动时自动从文件中读取已有学生信息,退出时自动保存
程序分3个模块:
Menu:进行菜单管理
Student_managemant:进行学生信息管理
main:主函数
直接上代码,有注释
Menu.py
# -*- coding: UTF-8 -*-
import sys
import os
class Menu():
"""
菜单管理类
作用:向控制台打印学生信息,从控制台获取输入信息,并进行错误处理
"""
def welcome(self):
"""
欢迎语句
"""
print("\n欢迎来到 WilliamCode 学生信息管理系统")
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
# -*- 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
# -*- 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
0
投稿
猜你喜欢
- 前言对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭。文章针对Python 2.7,主要因为3对
- 本文实例为大家分享了python实现爬取图书封面的具体代码,供大家参考,具体内容如下kongfuzi.py利用更换代理ip,延迟提交数据,设
- 基础这个模块是socket的异步实现,让我们先来熟悉一下模块中的一些类和方法:1.asyncore.loop输入一个轮询循环直到通过计数或打
- 本文代码实现Python多线程扫描端口,具体实现代码如下。#coding:utf-8import socketimport threadim
- 看下面的例子就明白了class Test(object): def __init__(self, value='hell
- 在网上搜索的时候,经常看到两种打开方式: dispatch和EnsureDispatchimport win32com.client as
- 大名鼎鼎的FCKeditor终于在最近发布新版本了,与增加版本号不同,这次完全把它改名了,更名为CKeditor。这应该是和它的开发公司CK
- ASP开发中有用的函数(function)集合,挺有用的,请大家保留!'******************************
- 本文实例为大家分享了使用RNN进行文本分类,python代码实现,供大家参考,具体内容如下1、本博客项目由来是oxford 的nlp 深度学
- 1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。2.
- 1、从半年以前要“去中心化”开始,豆瓣作了不少大的调整,重要的是上线了很多的新功能。同城、日记、相册、音乐试听、等等。2、一个多月来,豆瓣上
- 一、图像缩略图的编辑图像的缩略图是指把图像按原比例缩小,可作为原图的预览,这在网络速度比较慢时可快速地显示图片的概图。当你的网页上有大型图片
- 最近常有厦门的客户通过网站上的联系方式加我QQ,询问网站改版的情况。几乎每日都要针对客户网站存在的问题做一番分析,然后客户以价格等其他因素结
- 本文重点系统分析网页性质结构化的数据解析csv数据保存环境介绍python 3.8pycharm 专业版 >>> 激活码#
- MySQL使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数MySQL客户尝试使用当前Unix用
- PyQt5访问系统剪切板QClipboard类介绍QClipboard类提供了对系统剪切板的访问,可以在应用程序之间复制和粘贴数据,它的操作
- 上期回顾:亚马逊购物用户体验分析 (一)“查找内部”功能书是在亚马逊最常被购买的产品之一,所以毋庸置疑亚马逊的开发小组已经建立了一个关于“查
- 初识defaultdict之前在使用字典的时候, 用的比较随意, 只是简单的使用dict.然而这样在使用不存在的key的时候发生KeyErr
- 意思就是画四条直线,四条直线都不能相交即可。#!/usr/bin/python#coding: UTF-8import turtleimpo
- 一旦被黑客获取到webshell,黑客就知道了你的sqlserver管理员密码,如果sqlserver再没有经过安全设置那么黑客很容易就提权