python实现学生管理系统(文件操作,面向对象)

一、需求分析

  • 学生管理系统所具备功能
    1. 登录及注册管理账号
    2. 对学生信息要可以实现基本的增删改查功能
    3. 可以显示出所有的学生信息
    4. 将学生信息以及管理账户信息保存至对应文件

系统分析

  1. 系统管理登录模块

    1)管理员登录模块

    2) 管理员注册模块

  2. 学生信息管理模块

    1)添加学生信息模块

    2)删除学生信息模块

    3)修改学生信息模块

    4)查询学生信息模块

    5)显示学生信息模块

    6)保存数据模块

详细代码

1、StudentT类

import os

class StudentT(object):

    def __init__(self):
        self.student_list=[]
        self.student_dict={}


    #学生管理系统界面
    @staticmethod
    def jiemian():
        print("┌--------------------------┐")
        print("│       学生管理系统       │")
        print("│**************************│")
        print("│     1:添加学生信息       │")
        print("│     2:删除学生信息       │")
        print("│     3:修改学生信息       │")
        print("│     4:查询学生信息       │")
        print("│     5:显示所有学生       │")
        print("│     6:保存数据           │")
        print("│     7:退出系统           │")
        print("│==========================│")
        print("└--------------------------┘")


    #添加学生
    def add(self):
        number=input("请输入录入学生学号:")
        t = 0
        for student_dict_1 in self.student_list:
            if number == student_dict_1["number"]:
                t = 1
                break
        if t == 0:
            name=input("请输入录入学生姓名:")
            cls=input("请输入学生班级:")
            age=input("请输入录入学生年龄:")
            phone=input("请输入录入学生手机号:")
            addr=input("请输入录入学生家庭住址:")
            self.student_dict={"number":number,"name":name,"class":cls,"age":age,"phone":phone,"address":addr}
            self.student_list.append(self.student_dict)
            print()
            print("-----添加学生信息界面-----")
            print()
            print("学号\t\t","姓名\t\t","班级\t\t","年龄\t\t","电话号\t\t\t","家庭住址\t\t")
            print("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s" %(number,name,cls,age,phone,addr))
            print()
            print("录入成功!")
            print()
        else:
            print("\n该学生以存在\n")

    #删除学生
    def dele(self):
        number_del=input("请输入想要删除的学生学号:")
        for student_dict_1 in self.student_list:
            if number_del == student_dict_1["number"]:
                self.student_list.remove(student_dict_1)
                print("\n学号<%s>信息删除成功!\n" % number_del)
                break
        else:
            print("\n您输入的学生学号错误,请重新输入\n")

    #修改学生
    def xiugai(self):
        number_xiugai=input("请输入想要修改的学生学号:")
        for student_dict_1 in self.student_list:
            if number_xiugai == student_dict_1["number"]:
                self.student_list.remove(student_dict_1)
                print("\n-----修改界面-----\n")
                print("学号\t\t","姓名\t\t","班级\t\t","年龄\t\t","电话号\t\t","家庭住址\t\t")
                print("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s" %(student_dict_1["number"],
                                                           student_dict_1["name"],
                                                           student_dict_1["class"],
                                                           student_dict_1["age"],
                                                           student_dict_1["phone"],
                                                           student_dict_1["address"]))
                #回车不修改
                student_dict_1["number"]=self.new_input(student_dict_1["number"],"请输入修改后的学生学号[回车不修改]:")
                student_dict_1["name"]=self.new_input(student_dict_1["name"],"请输入修改后的学生姓名[回车不修改]:")
                student_dict_1["class"]=self.new_input(student_dict_1["class"],"请输入修改后的学生班级[回车不修改]:")
                student_dict_1["age"]=self.new_input(student_dict_1["age"],"请输入修改后的学生年龄[回车不修改]:")
                student_dict_1["phone"]=self.new_input(student_dict_1["phone"],"请输入修改后的学生手机号[回车不修改]:")
                student_dict_1["address"]=self.new_input(student_dict_1["address"],"请输入修改后的学生家庭地址[回车不修改]:")
                self.student_list.append(student_dict_1)
                print("\n修改成功!\n")
                break
        else:
            print("\n您输入的学生学号错误,请重新输入\n")

                

    #查找学生
    def find(self):
        find_number=input("请输入需要查找的学生学号:")
        t = 0
        for student_dict_1 in self.student_list:
            if find_number == student_dict_1["number"]:
                t = 1
                break
        if t == 1:
            print("\n-----查询结果界面-----\n")
            print("学号\t\t","姓名\t\t","班级\t\t","年龄\t\t","电话号\t\t\t","家庭住址\t\t")
            print("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s" %(student_dict_1["number"],
                                                       student_dict_1["name"],
                                                       student_dict_1["class"],
                                                       student_dict_1["age"],
                                                       student_dict_1["phone"],
                                                       student_dict_1["address"]))
        else:
            print("\n-----查询结果界面-----\n")
            print("\n无此学生信息\n")

    #显示所有学生信息
    def showall(self):
        if len(self.student_list)>0:
            print()
            print("-----显示所有学生信息-----")
            print()
            print("学号\t\t","姓名\t\t", "班级\t\t", "年龄\t\t", "电话号\t\t\t", "家庭住址\t\t")
            for student_dict_1 in self.student_list:
                print("%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s" %(student_dict_1["number"],
                                                           student_dict_1["name"],
                                                           student_dict_1["class"],
                                                           student_dict_1["age"],
                                                           student_dict_1["phone"],
                                                           student_dict_1["address"]))
        else:
            print("\n暂无数据!\n")

    #设置用户不输入内容返回原值,输入内容返回新内容
    def new_input(self,yuanzhi,message):
        self.input_str=input(message)
        if len(self.input_str) > 1:
            return self.input_str
        else:
            return yuanzhi


    #保存学生数据至文件中
    def save_file(self):
        f = open("./information/student.txt", 'w', encoding='utf-8')
        f.write(str(self.student_list))
        f.close()
        print("\n数据保存成功!\n")

    #将学生数据读取至变量中
    def read_file(self):
        if os.path.exists('./information/student.txt'):
            f = open('./information/student.txt', 'r', encoding='utf-8')
            ret = f.read()
            self.student_list=eval(ret)
            f.close()

2、Student类

import os
import student_tools

class Student(student_tools.StudentT):
    def __init__(self):
        self.user_pwd = []
        student_tools.StudentT.__init__(self)

    #保存管理员数据至文件中
    def save_staff(self):
        f = open("./information/staff.txt", 'w', encoding='utf-8')
        f.write(str(self.user_pwd))
        f.close()

    #将管理员数据读取至变量中
    def read_staff(self):
        f = open('./information/staff.txt', 'r', encoding='utf-8')
        ret = f.read()
        self.user_pwd=eval(ret)
        f.close()

    #登录
    def denglu(self):
        self.read_staff()#将管理员数据读取至变量中
        users = input("请输入您的用户名:")
        pwds = input("请输入您的密码:")
        user_pwd = users+"&"+pwds+"\n"
        t = 0
        for i in self.user_pwd:
            if i == user_pwd:
                t=1
                break
        if t == 1:
            print("登录成功!")
            self.student()
        else:
            print("账号或密码不正确!")

    #注册
    def zhuce(self):
        self.read_staff()#将管理员数据读取至变量中
        users=input("请输入您要注册的用户名:")
        t = 0
        for i in self.user_pwd:
            if users+"&" in i:
                t = 1
                break
        if t == 0:
            pwds=input("请输入您要注册的密码:")
            user_pwd = users+"&"+pwds+"\n"
            self.user_pwd.append(user_pwd)
            self.save_staff()#保存管理员数据至文件中
            print("\n注册成功!\n")
        else:
            print("\n该账户已存在!\n")

    #检测文件夹
    def inspect(self):
        cat = os.listdir()       #获取目录
        t = 1
        #判断目录中是否有所需文件夹
        for i in cat:
            if i == "information":
                t = 0
                break
        if t != 0:
            #若没有则新建
            os.mkdir("information")

    #登录界面
    def dljiemian(self):
        while True:
            print("----------------------------")
            print("*   学生管理系统登陆界面   *")
            print("*                          *")
            print("*       1:登   录          *")
            print("*       2:注   册          *")
            print("*       3:退   出          *")
            print("*                          *")
            print("----------------------------")
            xx=input("请输入您的选择:")
            #1.登录
            if xx=='1':
                self.denglu()
            elif xx=='2':
            #2.注册
                self.zhuce()
            elif xx=='3':
            #3.退出
                print("\n欢迎再次使用!\n")
                input("")
                break
            else:
                print("输入错误,请重新输入")


    #学生管理系统
    def student(self):
        super().read_file()
        while True:
            #调用student_tools模块中的界面函数
            super().jiemian()
            x=input("请输入您的选择:")
            #添加学生
            if x=='1':
                super().add()
            #删除学生
            elif x=='2':
                super().dele()
            #修改学生
            elif x=='3':
                super().xiugai()
            #查询学生
            elif x=='4':
                super().find()
            #显示所有学生
            elif x=='5':
                super().showall()
            #保存数据至文件中
            elif x=='6':
                super().save_file()
            #退出学生管理系统,返回上一层登录界面系统
            elif x=='7':
                print()
                print("成功退出学生管理系统!")
                break
            else:
                print("\n输入错误,请重新输入\n")

    #调用最先执行的登录界面函数
if __name__=='__main__':
    wtt=Student()
    wtt.inspect()
    wtt.dljiemian()

注:StudentT类 保存为student_tools.py文件,若修改次文件名则需对应修改Student类第二行;若运行次系统侧运行Student类所保存的文件即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容