简单学生信息管理系统
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:
简单学生信息管理系统功能如下:
1. 一个可视化界面。分别有添加、删除、排序、4个功能选项,选择相应的功能进行下一步操作。
2. 添加功能。需要分别输入姓名、学号、成绩信息,保存到数据库。
3.删除功能。输入已添加学生的学号,进行全部信息的删除。
4. 修改功能。输入已存在的学号进行成绩的修改。
5.排序功能。对已输入的全部学生根据成绩进行排序。
主界面
本案例引入五个模块:python的os模块,以及自己定义的四个需要实现功能的模板,即用于实现添加、删除、排序和修改, 这个比较简单,直接上代码。
import os
import addstudent
import deletestudent
import changestudent
import rankstudent
filepath = 'D:\\python\\student.txt'
def main():
if not os.path.isfile(filepath):
#如果文件不存在,则创建一个空文件
#有多种方法可以创建一个空文件
open(filepath,"a").close()
while True:
print('\n\n')
print(' -----------------学生信息管理系统-----------------')
print('| 菜单: |')
print('| 1: 添加学生信息 |')
print('| 2: 删除学生信息 |')
print('| 3: 更改学生信息 |')
print('| 4: 按成绩排序 |')
print('| 0: 退出 |')
print(' --------------------------------------------------')
instruction = input("请输入选项:")
if instruction == "0":
exit(0)
elif instruction == "1":
addstudent.addStudent(filepath)
elif instruction == "2":
deletestudent.deleteStudent(filepath)
elif instruction == "3":
changestudent.changeStudent(filepath)
elif instruction == "4":
rankstudent.rankStudent(filepath)
else:
print("输入错误! 请输入正确选项:")
if __name__ =='__main__':
main()
student.py模块
此处定义一个关于学生信息的类(class),里面包括学生3各方面的数据(姓名、ID、成绩),在其他模块中,将对该类进行初始化,并填入学生的信息。
代码如下:
class Student():
def __init__(self, name, id, grade):
'初始化函数'
self.name = name
self.id = id
self.grade = grade
def __lt__(self, other):
'自定义比较器,这里使用student grade 来进行比较排序'
return (self.grade > other.grade)
def __str__(self):
'将一个对象实例转换成一个字符串'
return self.name + '\t' + str(self.id) + '\t' + str(self.grade)
def getStudentName(self):
return self.name
def getStudentId(self):
return self.id
def getStudentGrade(self):
return self.grade
def setStudentGrade(self, grade):
self.grade = grade
utils.py模块
此模块定义一些方法,如:查找需要操作法人学生ID,读取存储学生信息的文件,将存储学生信息的列表写入文件,检查输入学生ID和成绩是否合法等有效功能,以便于其他模块可以调用。可以说这个模块的功能是“工具包”。
代码如下:
import student
def searchStudentId(studentList, id):
#查找需要操作的学生ID
idx = 0
for stu in studentList:
if stu.getStudentId() == id:
return idx
else:
idx +=1
return idx
def fileRead(filepath):
#读入存储学生信息的文件,将所有学生信息读入内存
f = open(filepath, 'r')
studentList = []
for line in f.readlines():
stuInfo = line.strip().split()
stu = student.Student(stuInfo[0] ,int(stuInfo[1]), int(stuInfo[2]))
studentList.append(stu)
f.close()
return studentList
def fileWrite(filepath, studentList):
#将存储学生信息的列表写入文件中
f = open(filepath, 'w')
for stu in studentList:
f.write(str(stu) + '\n')
f.close()
print("保存...")
def checkId(id):
#检查输入的学号是否符合要求,这里假设学号为长度为4的数字
#isdigit()方法检测字符串是否只由数字组成
#如果字符串只包含数字则返回True,否则返回false
if len(id) ==4 and id.isdigit():
return True
else:
return False
def checkGrade(grade):
#检查输入成绩是否符合要求。这里假设成绩是0到100之间的整数
if grade.isdigit() and int(grade) >=0 and int(grade) <101:
return True
else:
return False
addstudent,py模块
添加学生信息
注意:要检查输入学生ID和学生成绩格式是否符合要求,需要调用utils.py
代码如下:
import utils
def addStudent(filepath):
print("请输入学生信息,其中ID为四位数字,")
#输入新增学生信息:姓名、学号、成绩
name = input("请输入学生姓名:").replace(' ', '')
id = input("请输入学生ID: ")
while not utils.checkId(id):
id =input("格式错误!请输入正确ID格式:")
grade = input("请输入学生成绩:")
while not utils.checkGrade(grade):
grade = input("格式错误!请输入正确成绩格式:")
print("你已经成功添加:")
print("姓名:", name, ", ID: ", id, ", 成绩:", grade)
while True:
instruct = input("保存? (Y/N):")
if instruct.lower() == 'y':
f = open(filepath, 'a')
f.write(name + '\t' + id + '\t' + grade + '\n')
f.close()
print('保存...')
break
elif instruct.lower() =='n':
print('不保存...')
break
deletestudent,py模块
用于删除学生信息
注意
- 删除学生信息,用到关于学生信息的类,需要调用student,py模块。删除时,需要先查询所删除的信息在学生列表的位置,查询功能需要调用util.py模块。
- 需要打开存储学生信息的文件,并将所有学生的信息读入内存。调用utils.py模块的fileRead( )函数
代码如下:
import student
import utils
def deleteStudent(filepath):
studentList = utils.fileRead(filepath)
if len(studentList) ==0:#如果文件为空,退出当前操作
print('没有学生信息!请添加学生信息。')
return
id = input('请输入学生ID:')
idx = utils.searchStudentId(studentList, int(id))
while idx >= len(studentList):
id = input("学生信息没有找到,请输入正确学生ID:")
idx = utils.searchStudentId(studentList, int(id))
while True:
instruct = input("确定删除? (Y/N):")
if instruct.lower() == 'y':
del studentList[idx] #删除找到的学生信息
#接下来将已经删除掉指定学生信息的数据再此写入文件
utils.fileWrite(filepath, studentList)
break
elif instruct.lower() == 'n':
print('不保存...')
break
修改信息模块
修改学生信息
代码如下:
import student
import utils
def changeStudent(filepath):
# 读入存储学生信息的文件,将所有学生信息读入内存
studentList = utils.fileRead(filepath)
if len(studentList) ==0:#如果文件为空,退出当前操作
print('没有学生信息!请添加学生信息。')
return
id = input('请输入学生ID:')
idx = utils.searchStudentId(studentList, int(id))
while idx >= len(studentList):
id = input("学生信息没有找到,请输入正确学生ID:")
idx = utils.searchStudentId(studentList, int(id))
#为了简单起见,这里我们假设只修改学生的分数,不能对姓名进行修改
grade = input('请更改此学生的成绩:')
while not utils.checkGrade(grade):
grade = input("格式错误!请输入正确成绩:")
studentList[idx].setStudentGrade(grade)
while True:
instruct = input("保存? (Y/N):")
if instruct.lower() == 'y':
utils.fileWrite(filepath, studentList)
break
elif instruct.lower() == 'n':
print('不保存...')
break
rankstudent.py模块
对学生信息进行排序(这里是根据学生成绩排序)
代码如下:
import student
import utils
def rankStudent(filepath):
# 读入存储学生信息的文件,将所有学生信息读入内存
studentList = utils.fileRead(filepath)
if len(studentList) == 0: # 如果文件为空,退出当前操作
print('没有学生信息!请添加学生信息。')
return
sortedStudentList = sorted(studentList)
print('姓名\t\t\tID\t\t\t\t成绩')
for stu in sortedStudentList:
print(stu.getStudentName() + '\t\t\t' + str(stu.getStudentId()) + '\t\t\t' + str(stu.getStudentGrade()))