python 基于控制台的学生管理系统
最近在学校python的时候想到以前学习的时候用java实现过类似的控制台的管理系统,现在学习python,我认为这也是认识语言的第一步。所以基于dict和list对学生信息管理做了一个简单的展示。
数据结构
学生数据 ={} 字典类型
json结构为
导入模块也使用此json结构,需要在文件目录自建data.txt
{
"665000": {
"name": "lisi",
"gender": "女",
"class": "aute",
"graders": {
"chinese": "12",
"math": "44",
"english": "54"
}
}
}
这是主界面
对应了五个功能模块
下面展示部分功能
信息展示
导入展示
以下是代码:
import time
import sys
import json
# 学生信息管理系统
class StudentMangerSystem:
# 学号
NUMBER = "NUMBER"
# 姓名
NAME = "name"
# 性别
GENDER = "gender"
# 班级
CLASS_ = "class"
# 成绩
GRADERS = "graders"
# 语文
CHINESE = "chinese"
# 数学
MATH = "math"
# 英语
ENGLISH = "english"
# 学生数据
studentInfo = {}
"""
account:学号
name:姓名
gender:性别
class_:班级
graders:成绩
"""
# 添加学生信息
def addStudentMsg(self, account, name, gender, class_, graders):
# 将数据加入新的字典中
newStudentMsg = {self.NAME: name, self.GENDER: gender, self.CLASS_: class_, self.GRADERS: graders}
# 合并学号和学生数据
msg = {account: newStudentMsg}
# 添加
self.studentInfo.update(msg)
# 输入学生信息
def inputStudentMsg(self):
name = input("请输入学生姓名:")
gender = input("请输入学生性别:")
class_ = input("请输入学生班级:")
chinese = input("请输入学生语文成绩:")
math = input("请输入学生数学成绩:")
english = input("请输入学生英语成绩:")
# 字典存学生成绩信息
studentScore = {self.CHINESE: chinese, self.MATH: math, self.ENGLISH: english}
# 返回数据列表
stuArr = [name, gender, class_, studentScore]
return stuArr
# 程序主页面
@staticmethod
def functionInterface():
print("ε=(´ο`*)))———————欢迎使用学生管理系统❥———————(^_-)")
print("请选择功能:")
print("输入Q——添加学生")
print("输入E——查询学生")
print("输入D——删除学生")
print("输入R——修改学生信息")
print("输入F——查询单条学生信息")
print("输入C——导入数据")
print("————————————————关闭系统请输入WQ————————————————")
function = input("请输入所需操作:")
if function == "Q":
stu.addStudent()
elif function == "E":
stu.selectStudent()
elif function == "D":
stu.delStudent()
elif function == "R":
stu.updateStudent()
elif function == "F":
stu.selectByNumber(None)
elif function == "C":
stu.importStudentMsg()
elif function == "WQ":
sys.exit(0)
else:
print("请输入正确的操作:")
isExit = input("请按任意键继续:")
if isExit == "Q":
stu.functionInterface()
else:
stu.functionInterface()
# 添加学生
@staticmethod
def addStudent():
flag = True
while flag:
num = input("请输入学号:")
# 获取学生信息list
studentArr = stu.inputStudentMsg()
stu.addStudentMsg(num, studentArr[0], studentArr[1], studentArr[2], studentArr[3])
isAdd = input("是继续否添加 Q——是 其它——否:")
if isAdd != "Q":
flag = False
stu.functionInterface()
# 查询所有学生信息
@staticmethod
def selectStudent():
try:
for k, v in stu.studentInfo.items():
print("===============================学生信息===============================")
# 防止程序出现学号为空的情况
if k is None:
continue
else:
print("学号:", k)
print("姓名:", v[stu.NAME])
print("性别:", v[stu.GENDER])
print("班级:", v[stu.CLASS_])
grader = v[stu.GRADERS]
print("语文:", grader[stu.CHINESE])
print("数学:", grader[stu.MATH])
print("英语:", grader[stu.ENGLISH])
except Exception:
print("===============================学生信息===============================")
finally:
text = input("按任意键回到主菜单:")
if text == "Q":
stu.functionInterface()
else:
stu.functionInterface()
# 按学号删除
@staticmethod
def delStudent():
number = input("请输入学号:")
try:
del stu.studentInfo[number]
print("学号:" + number + "删除成功")
except KeyError:
print("删除失败,请重试")
print("==================================")
print("Q——继续,其它——退出")
isExit = input("请输入操作:")
if isExit == "Q":
stu.delStudent()
else:
stu.functionInterface()
# 按学号进行修改
@staticmethod
def updateStudent():
try:
number = input("请输入学号继续:")
info = stu.studentInfo.get(number)
stu.msgPrint(info, number)
print("===============================输入Q退出===============================")
num = input("请输入序号:")
grader = info[stu.GRADERS]
if num == "0":
data = input("学号修改为:")
msg = {data: info}
stu.studentInfo.pop(number)
stu.studentInfo.update(msg)
if num == "1":
data = input("姓名修改为:")
info[stu.NAME] = data
if num == "2":
data = input("性别修改为:")
info[stu.GENDER] = data
if num == "3":
data = input("班级修改为:")
info[stu.CLASS_] = data
if num == "4":
data = input("语文成绩修改为:")
grader[stu.CHINESE] = data
if num == "5":
data = input("数学成绩修改为:")
grader[stu.MATH] = data
if num == "6":
data = input("英语成绩修改为:")
grader[stu.ENGLISH] = data
if num == "Q":
stu.functionInterface()
# 获取成绩字典更新数据
info[stu.GRADERS] = grader
# 更新
stu.studentInfo.update(info)
print("修改成功!!!")
print("如需继续修改")
stu.updateStudent()
except Exception:
print("没有查询到学生信息!正在返回主界面!")
time.sleep(3)
stu.functionInterface()
# 单个查询
@staticmethod
def selectByNumber(number):
if number is None:
number = input("请输入学号:")
try:
info = stu.studentInfo.get(number)
stu.msgPrint(info, number)
text = input("按任意键回到主菜单:")
if text == "Q":
stu.functionInterface()
else:
stu.functionInterface()
except Exception:
print("没有查询到学生信息!正在返回主界面!")
time.sleep(3)
stu.functionInterface()
# 信息打印
@staticmethod
def msgPrint(info, number):
print("===============================学生信息===============================")
print("0.学号:", number)
print("1.姓名:", info[stu.NAME])
print("2.性别:", info[stu.GENDER])
print("3.班级:", info[stu.CLASS_])
grader = info[stu.GRADERS]
print("4.语文:", grader[stu.CHINESE])
print("5.数学:", grader[stu.MATH])
print("6.英语:", grader[stu.ENGLISH])
print("====================================================================")
"""
导入格式为json格式,自行参照
{
"665000": {
"name": "去织达政",
"gender": "女",
"class": "aute",
"graders": {
"chinese": "reprehenderit pariatur",
"math": "sed aute nisi consectetur",
"english": "ullamco enim culpa sint"
}
}
}
"""
# 导入模块
@staticmethod
def importStudentMsg():
with open(r"week-three\data.txt", "r", encoding="utf-8") as f: # 打开文件
data = f.read() # 读取文件
# json转字典
msg = json.loads(data)
stu.studentInfo.update(msg)
print("导入成功")
text = input("按任意键回到主菜单:")
if text == "Q":
stu.functionInterface()
else:
stu.functionInterface()
if __name__ == '__main__':
stu = StudentMangerSystem()
# 执行主页面函数
stu.functionInterface()
data.txt
{
"665000": {
"name": "\u5f20\u4e09",
"gender": "\u7537",
"class": "\u8ba1\u7b97\u673a\u79d1\u5b66\u4e0e\u6280\u672f\u4e00\u73ed",
"graders": {
"chinese": "90",
"math": "80",
"english": "99"
}
},
"990999": {
"name": "\u674e\u56db",
"gender": "\u5973",
"class": "\u5927\u6570\u636e\u4e00\u73ed",
"graders": {
"chinese": "24",
"math": "42",
"english": "55"
}
},
"879500": {
"name": "\u738b\u4e94",
"gender": "\u7537",
"class": "\u8f6f\u4ef6\u4e00\u73ed",
"graders": {
"chinese": "100",
"math": "89",
"english": "90"
}
},
"667666": {
"name": "\u8d75\u516d",
"gender": "\u5973",
"class": "\u79fb\u52a8\u5e94\u7528\u4e00\u73ed",
"graders": {
"chinese": "79",
"math": "67",
"english": "87"
}
}
}
导入数据请自行修改路劲