博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学生选课系统数据存文件
阅读量:6452 次
发布时间:2019-06-23

本文共 9515 字,大约阅读时间需要 31 分钟。

#ADM.py#-*-coding:utf-8 -*-__author__ = 'MrChu'import hashlibclass GetMd5:#MD5加密    @classmethod    def get_md5(self,msg):        md5=hashlib.md5(b'salt!@#$%^&*')#加盐        md5.update(msg.encode('utf-8'))        return md5.hexdigest()class Course:#课程类    all_course_list=[]#所有课程列表    @classmethod    def add_new_course(cls,course):        Course.all_course_list.append(course)class Administrators:#管理员类    def __init__(self,name,pwd):#管理员初始化方法        self.adm_list=[]#管理员账号列表        self.stu_list=[]#学生账号列表        self.name=name#账号        self.pwd=pwd#密码        self.gongNeng_list =['new_Course','new_student','show_all_course','show_all_student','show_all_stu_course']#功能列表    def login(self,name,pwd):#管理员登录方法        with open('administrators.txt',mode='r',encoding='utf-8')as f:#读取管理员信息文件            for line in f:                if line=='':#去空行                    continue                self.adm_list.append(line.strip().split('|')[0])#把管理员账号放到管理员类的管理员账号列表                if name+'|'+GetMd5.get_md5(pwd) ==line.strip():#拼接传入的name和加盐的pwd,与文件数据作对比                    print('登录成功')                    self.main_run()#运行管理员主程序方法                    break            else:                print('登录失败,请重新输入')    def main_run(self):#管理员主程序方法        with open('student.txt',mode='r',encoding='utf-8')as f:#读学生的文件            for line in f:                if line=='':#去空行                    continue                self.stu_list.append(line.strip().split('|')[0])#把学生账号添加到管理员类的学生账号列表        with open('course.txt',mode='r',encoding='utf-8')as f:#读取课程文件            for line in f:                if line=='':#去空行                    continue                Course.all_course_list.append(line.strip())#把所有的课程放到课程类的课程列表中        print('欢迎进入管理员课程维护系统')        while 1:            print('1.创建课程')            print('2.创建学生账号')            print('3.查看所有课程')            print('4.查看所有学生')            print('5.查看所有学生的选课情况')            num=input('请选择要操作的序号(按Q退出维护系统)>>>')            if num.upper()=='Q':                break            func=getattr(self,self.gongNeng_list[int(num)-1])#反射通过输入的值运行相应的方法            func()    def new_Course(self):#创建新课程        while 1:            course=input('请输入新建课程(按Q退出):')            if course.upper() == 'Q':                break            if course in Course.all_course_list:#如果输入课程在课程类全部课程列表中                print('已有此课程')            else:                Course.add_new_course(course)#把课程添加到课程类全部课程列表中                with open('course.txt',mode='a',encoding='utf-8')as f:#在课程文件中追加写入新课程                    f.write(course+'\n')                print('创建课程成功')    def new_student(self):#创建新的学生对象        while 1:            name=input('请输入创建账号(按Q退出):')            if name.upper()=='Q':                break            psd=input('请输入创建密码:')            for el in self.stu_list:#遍历管理员类的学生账号列表                if name==el:#如果有此账号                    print('已有此账号')            else:                self.stu_list.append(name)#把学生账号添加入管理员类的学生账号列表                with open('student.txt',mode='a',encoding='utf-8')as f:#追加写入学生信息文件                    f.write(name+'|'+GetMd5.get_md5(psd)+'\n')                print('创建学生账号成功')    def show_all_course(self):#显示所有课程方法        print('现有课程有:')        for el in Course.all_course_list:            print(el)    def show_all_student(self):#显示所有学生方法        print('所有的学生有:')        for el in self.stu_list:            print(el)    def show_all_stu_course(self):#显示所有学生的选课信息方法        with open('student_chioce_course.txt', mode='r', encoding='utf-8')as f:            for line in f:                print(line.strip())    def zhuce(self,name,psd):#注册管理员方法        with open('administrators.txt',mode='r',encoding='utf-8')as f:#读取管理员信息文件            for line in f:                if line=='':                    continue                self.adm_list.append(line.strip().split('|')[0])#把管理员账号放到管理员类的管理员账号列表        if name in self.adm_list:#判断账号是否存在            print('已经存在此管理员')        else:            with open('administrators.txt', mode='a', encoding='utf-8')as f:#把新创建的管理员账号秘密追加写入管理员信息文件                f.write(name + '|' + GetMd5.get_md5(psd) + '\n')#账号拼接加盐密码写入            print('创建管理员账号成功')
#STU.py#-*-coding:utf-8 -*-__author__ = 'MrChu'import hashlibclass GetMd5:#MD5加密    @classmethod    def get_md5(self,msg):        md5=hashlib.md5(b'salt!@#$%^&*')#加盐        md5.update(msg.encode('utf-8'))        return md5.hexdigest()class Course:#课程类    all_course_list=[]#所有课程列表    @classmethod    def add_new_course(cls,course):        Course.all_course_list.append(course)class Student:#学生类    def __init__(self,name,pwd):#学生初始化方法        self.choiced_course_name_lst=[]#已经选课姓名列表        self.name=name #学生账号        self.pwd=GetMd5.get_md5(pwd) #学生密码        self.course_list=[]#学生已选课程列表        self.gongNeng_list=['show_all_course','choice_course','show_chioce_course','del_course']#功能列表        self.dic={}#存放每个学生已经选课的情况    def __str__(self):#打印学生对象的方法        return '学生账号对象'    def login(self,name,pwd):#学生登录方法        with open('student_chioce_course.txt',mode='r',encoding='utf-8')as f:#读取学生已经选取的课程文件            for line in f:                if line=='':                    continue                self.choiced_course_name_lst.append(line.strip().split('|')[0])#截取已经选课学生姓名放入学生类已经选课姓名列表        with open('student.txt', mode='r', encoding='utf-8')as f:#读学生文件            for line in f:                if name+'|'+GetMd5.get_md5(pwd) == line.strip():#拼接传入的name和pwd与文件中的数据对比                    if self.name in self.choiced_course_name_lst:                        print('此学生已经提交了选课方案,不能再次登陆')                        break                    else:                        print('登录成功')                        self.main_run()#运行主程序方法                        break            else:                print('登录失败,请重新输入')    def main_run(self):#主程序方法        with open('course.txt',mode='r',encoding='utf-8')as f:#读全部的课程文件            for line in f:                if line=='':#去除空行                    continue                Course.all_course_list.append(line.strip())#把所有的课程放到课程类的课程列表中        print('欢迎进入学生选课系统')        while 1:            print('1.查看所有课程')            print('2.选择课程')            print('3.查看所选课程')            print('4.删除已选课程')            num=input('请选择要操作的序号(按Q退出)>>>')            if num.upper()=='Q':                response=self.tiJiao()                if response==1:                    break            func=getattr(self,self.gongNeng_list[int(num)-1])#反射通过输入的值运行相应的方法            func()    def show_all_course(self):#显示所有课程的方法        print('现有课程有:')        for el in Course.all_course_list:#遍历课程类的全部课程列表            print(el)    def choice_course(self):#选课的方法        while 1:                course = input('请输入要添加的课程(按Q退出,):')                if course.upper() == 'Q':                    break                if course in Course.all_course_list:#所选课程在课程类的全部课程列表中,可以选课                    self.course_list.append(course)#把课程放到学生对象的已选课程列表                    print('添加成功')                else:                    print('没有此课程')    def show_chioce_course(self):#显示所选课程列表        print('您所选的课程有:')        for el in self.course_list:#遍历学生对象的已选课程列表            print(el)    def del_course(self):#删除学生已选课程列表的内容        while 1:            course = input('请输入要删除的课程(按Q退出):')            if course.upper()=='Q':                break            if course in self.course_list:                self.course_list.remove(course)                print('删除成功')            else:                print('没有此课程')    def tiJiao(self):#提交按钮方法        content=input('您是否确认提交选课,确认后不可修改,输入 Y 或者 N ?')        if content.upper()=='Y':            course_str = ''  # 设置一个空字符串            for el in self.course_list:  # 遍历学生对象的已选课程列表                course_str += el + '|'  # 动态拼接已选的所有课程            course_str = course_str.rstrip('|')  # 去除右边的'|'            with open('student_chioce_course.txt', mode='a', encoding='utf-8')as f:  # 打开学生已选课程文件                f.write(self.name + '|' + course_str + '\n')  # 拼接学生姓名写入学生的选课信息            return 1        elif content.upper()=='N':            return 0        else:            print('输入有误')            return -1
#main.py#-*-coding:utf-8 -*-__author__ = 'MrChu'import STUimport ADMclass Run:    @classmethod    def login(self):        while 1:            print('1.管理员登录')            print('2.学生登录')            print('3.注册管理员账号')            num = input("请选择登录方式(按'Q'退出程序)>>>")            if num.upper() == 'Q':                break            if int(num) == 1:                while 1:                    name = input('请输入登录账号(按Q返回主登录页面):')                    if name.upper() == 'Q':                        break                    pwd = input('请输入密码:')                    ad=ADM.Administrators(name,pwd)                    func=getattr(ad,'login')                    func(name,pwd)            elif int(num)==2:                while 1:                    name = input('请输入登录账号(按Q返回主登录页面):')                    if name.upper() == 'Q':                        break                    pwd = input('请输入密码')                    stu=STU.Student(name,pwd)                    func=getattr(stu,'login')                    func(name,pwd)            elif int(num) == 3:                while 1:                    name = input('请输入注册账号(按Q返回主登录页面):')                    if name.upper() == 'Q':                        break                    pwd = input('请输入密码')                    ad = ADM.Administrators(name, pwd)                    func = getattr(ad, 'zhuce')                    func(name, pwd)if __name__=="__main__":    Run.login()

 

转载于:https://www.cnblogs.com/PythonMrChu/p/9736284.html

你可能感兴趣的文章
在 ubuntu 搭建 docker registry 私有仓库
查看>>
沃通免费SSL证书2018新版上线,全球信任、限时申请!
查看>>
Oracle Linux 7.3 下安装 Oracle Database 12c R2
查看>>
java String比较相等时必须使用equals的引申
查看>>
报表开发FineReport优化报表取数
查看>>
你应该知道的计算机网络知识
查看>>
linux下单个网卡设置多IP
查看>>
大硬盘在服务器上使用
查看>>
阿里五年晋升三次,这个程序员要聊聊他的选择
查看>>
Linux 开机流程及修复MBR
查看>>
How-to use MySQL-python in Python
查看>>
从用户层面考虑如何做好一款产品
查看>>
MYSQL的limit和offset
查看>>
基于Corosync + LNMP + NFS 服务实现高可用
查看>>
Python 多线程
查看>>
[java理论篇]--JAVA反射机制
查看>>
PostgreSQL的HA(主备切换)
查看>>
安装Office2010/2007出现1935错误解决办法
查看>>
使用rpm包安装配置 LAMP
查看>>
如何利用PS脚本查询和管理硬盘空间
查看>>