简单练习:学生管理系统

简单学生信息管理系统

版权声明:本文为博主原创文章,遵循 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模块

  用于删除学生信息
注意

  1. 删除学生信息,用到关于学生信息的类,需要调用student,py模块。删除时,需要先查询所删除的信息在学生列表的位置,查询功能需要调用util.py模块。
  2. 需要打开存储学生信息的文件,并将所有学生的信息读入内存。调用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()))

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值