学生选课系统数据存储用shelve

工程目录:

#bin/run.py
from core.main import Run
Run.login()
#core/ADM.py
#-*-coding:utf-8 -*-
__author__ = ‘MrChu‘
import hashlib
import shelve
#shelve={‘Student‘:[{‘name‘:‘xxx‘,‘passWord‘:‘xxx‘,‘course‘:[]},{...},{...}],
              #         ‘Administrators‘:[{‘name‘:‘xxx‘,passWord‘:‘xxx‘},{...},{...}],
              #         ‘Course‘:[‘xxx‘,‘xxx‘,‘xxx‘]
class GetMd5:#MD5加密
    @classmethod
    def get_md5(self,msg):
        md5=hashlib.md5(b‘[email protected]#$%^&*‘)#加盐
        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):#管理员登录方法
        #读取管理员信息文件
        f = shelve.open(r‘../db/data‘, writeback=True)
        self.adm_list = f[‘Administrators‘]
        self.stu_list = f[‘Student‘]
        Course.all_course_list = f[‘Course‘]
        # print(self.stu_list)
        f.close()
        dic={}
        dic[‘name‘] = name
        dic[‘passWord‘]=GetMd5.get_md5(pwd)
        if dic in self.adm_list:#拼接传入的name和加盐的pwd,与文件数据作对比
            print(‘登录成功‘)
            self.main_run()#运行管理员主程序方法
        else:
            print(‘登录失败,请重新输入‘)
    def main_run(self):#管理员主程序方法
        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):#创建新课程
        f = shelve.open(r‘../db/data‘, writeback=True)  # 读学生的文件
        while 1:
            course=input(‘请输入新建课程(按Q退出):‘)
            if course.upper() == ‘Q‘:
                break
            if course in Course.all_course_list:#如果输入课程在课程类全部课程列表中
                print(‘已有此课程‘)
            else:
                Course.add_new_course(course)#把课程添加到课程类全部课程列表中
                f[‘Course‘]=Course.all_course_list
                print(‘创建课程成功‘)
        f.close()
    def new_student(self):#创建新的学生对象
        f = shelve.open(r‘../db/data‘, writeback=True)  # 读学生的文件
        while 1:
            name=input(‘请输入创建账号(按Q退出):‘)
            if name.upper()==‘Q‘:
                break
            psd=input(‘请输入创建密码:‘)
            for el in self.stu_list:#遍历管理员类的学生账号列表
                    if name==el[‘name‘]:#如果有此账号
                        print(‘已有此账号‘)
                        break
            else:
                dic={}
                dic[‘name‘]=name
                dic[‘passWord‘]=GetMd5.get_md5(psd)
                dic[‘course‘]=[]
                self.stu_list.append(dic)#把学生账号添加入管理员类的学生账号列表
                f[‘Student‘]=self.stu_list#追加写入学生信息文件
                print(‘创建学生账号成功‘)
        f.close()
    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[‘name‘])
    def show_all_stu_course(self):#显示所有学生的选课信息方法
        print(‘所有学生选课情况如下:‘)
        for el in self.stu_list:
            try:
                print(el[‘name‘],el[‘course‘])
            except KeyError as e:
                pass
    def zhuce(self,name,psd):#注册管理员方法
        #读取管理员信息文件
        f=shelve.open(r‘../db/data‘,writeback=True)
        self.adm_list=f[‘Administrators‘]#把管理员账号放到管理员类的管理员账号列表
        for el in self.adm_list:
                if name==el[‘name‘]:#判断账号是否存在
                    print(‘已经存在此管理员‘)
                    break
        else:
            #把新创建的管理员账号秘密追加写入管理员信息文件
            dic = {}
            dic[‘name‘] =name
            dic[‘passWord‘]=GetMd5.get_md5(psd)
            self.adm_list.append(dic)
            f[‘Administrators‘]=self.adm_list
            print(‘创建管理员账号成功‘)
        f.close()
#core/main.py
#-*-coding:utf-8 -*-
__author__ = ‘MrChu‘
import shelve
from .import STU
from .import ADM
#shelve={‘Student‘:[{‘name‘:‘xxx‘,‘passWord‘:‘xxx‘,‘course‘:[]},{...},{...}],
              #         ‘Administrators‘:[{‘name‘:‘xxx‘,passWord‘:‘xxx‘},{...},{...}],
              #         ‘Course‘:[‘xxx‘,‘xxx‘,‘xxx‘]  }
class 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()
#core/STU.py
#-*-coding:utf-8 -*-
__author__ = ‘MrChu‘
import hashlib
import shelve  #shelve={‘Student‘:[{‘name‘:‘xxx‘,‘passWord‘:‘xxx‘,‘course‘:[]},{...},{...}],
              #         ‘Administrators‘:[{‘name‘:‘xxx‘,passWord‘:‘xxx‘},{...},{...}],
              #         ‘Course‘:[‘xxx‘,‘xxx‘,‘xxx‘]                                        }
class GetMd5:#MD5加密
    @classmethod
    def get_md5(self,msg):
        md5=hashlib.md5(b‘[email protected]#$%^&*‘)#加盐
        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.name=name #学生账号
        self.pwd=GetMd5.get_md5(pwd) #学生密码
        self.course_list=[]#学生已选课程列表
        self.student=[]#学生字典组成的列表[{‘name‘:‘xxx‘,‘passWord‘:‘xxx‘,‘course‘:[]},{...},{...}]
        self.gongNeng_list=[‘show_all_course‘,‘choice_course‘,‘show_chioce_course‘,‘del_course‘]#功能列表
    def __str__(self):#打印学生对象的方法
        return ‘学生账号对象‘
    def login(self,name,pwd):#学生登录方法
        f = shelve.open(r‘../db/data‘, writeback=True)  #读学生的文件
        self.student=f[‘Student‘]
        Course.all_course_list = f[‘Course‘]
        for el in self.student:
            if name==el[‘name‘]and GetMd5.get_md5(pwd)==el[‘passWord‘]:
                for i in range(len(self.student)):
                    if self.student[i][‘name‘] == self.name:
                        self.course_list = f[‘Student‘][i][‘course‘]
                        f.close()
                print(‘登录成功‘)
                self.main_run()#运行主程序方法
                break
        else:
            print(‘登录失败,请重新输入‘)
    def main_run(self):#主程序方法
        print(‘欢迎进入学生选课系统‘)
        while 1:
            print(‘1.查看所有课程‘)
            print(‘2.选择课程‘)
            print(‘3.查看所选课程‘)
            print(‘4.删除已选课程‘)
            num=input(‘请选择要操作的序号(按Q退出)>>>‘)
            if num.upper()==‘Q‘:
                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:#所选课程在课程类的全部课程列表中,可以选课
                    if course in self.course_list:
                        print(‘已选了此门课程,不能重复选择‘)
                    else:
                        self.course_list.append(course)#把课程放到学生对象的已选课程列表
                        lst=[]
                        for el in self.student:
                            if el[‘name‘]==self.name:
                                dic={}
                                dic[‘name‘]=self.name
                                dic[‘passWord‘]=self.pwd
                                dic[‘course‘]=self.course_list
                                lst.append(dic)
                            else:
                                lst.append(el)
                        f = shelve.open(r‘../db/data‘, writeback=True)#读学生的信息
                        # print(lst)
                        f[‘Student‘]=lst
                        f.close()
                        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)
                lst = []
                for el in self.student:
                    if el[‘name‘] == self.name:
                        dic = {}
                        dic[‘name‘] = self.name
                        dic[‘passWord‘] = self.pwd
                        dic[‘course‘] = self.course_list
                        lst.append(dic)
                    else:
                        lst.append(el)
                f = shelve.open(r‘../db/data‘, writeback=True)  # 读学生的信息
                # print(lst)
                f[‘Student‘] = lst
                f.close()
                print(‘删除成功‘)
                break
            else:
                print(‘没有此课程‘)

原文地址:https://www.cnblogs.com/PythonMrChu/p/9784244.html

时间: 2024-10-13 22:18:34

学生选课系统数据存储用shelve的相关文章

学生选课系统----LoginWindow

/** * @author 李佩 * * @version v1 * * @time 2016/12/1 15:37 * * @program 创建对应数据表实体的老师类,方便dao与数据库的连接 * */ package com.csms.windows; // 导入要用到的包 import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import com.csm

学生选课系统----TeacherWindow

/** * @author 李佩 * * @version v1 * * @time 2016/12/6 9:29 * * @program 画出学生选课系统的学生界面 * */ package com.csms.windows; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.even

学生选课系统----StudentWindow

/** * @author 李佩 * * @version v1 * * @time 2016/12/2 22:21 * * @program 画出学生选课系统的学生界面 * */ package com.csms.windows; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import java.util.List; import com.csms.

JAVA | 学生选课系统

这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student import java.sql.Connection;import java.sql.DriverManager;//import java.sql.Statement;import java.sql.SQLException; public class xu{ private static Connecti

3.python小项目:学生选课系统

学生选课系统 编程核心:在对象中封装对象 目录结构: 1.administrator.py import random import os import sys sys.path.append(os.path.dirname(os.path.dirname(__file__))) import time import pickle from lib import models from config import settings from lib.models import * # 全部导入

学生选课系统----TeacherDAO

老师信息操作: /** * @author 李佩 * * @version v1 * * @time 2016/12/2 14:54 * * @program 老师信息与数据库之间的操作 * */ package com.csms.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import ja

学生选课系统----SelectCourseDAO

/** * @author 李佩 * * @version v1 * * @time 2016/12/5 22:03 * * @program 已选课程信息与数据库进行操作的类 * */ package com.csms.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.ut

学生选课系统----实体类

学生: package com.csms.entity; /** * @author 李佩 * * @version v1 * * @time 2016/12/1 10:10 * * @program 创建对应数据表实体的学生类,方便dao与数据库的连接 * */ public class Student { // 学生登录系统的登录名 private String loginName; // 登录密码 private String loginPSD; // 学生学号 private Strin

面向对象的应用:学生选课系统

一.要求: 选课系统 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 使用pickle保存在文件 学生: 学生:用户名.密码.性别.年龄.选课列表[].上课记录{课程1:[di,a,]} 1.列举所有课程 2.选择课程 3.学生上课, 4.ret = 课程.work() 获取课程的返回; 资产+=课时费 二.代码思路 2.1 管理员系统 a.定义了Teacher类,name,age,gender,property,其中property为私有成员,用对象