• 从零开始学Python06作业源码(仅供参考)


    Python Version 2.7x

    一,bin目录:程序启动入口

    •   SelectLesson_start.py
     1 #!usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 # auther:Mr.chen
     4 # 描述:
     5 
     6 
     7 import sys
     8 sys.path.append('..')
     9 from src import users_business
    10 
    11 
    12 users_business.user_Main()

    二,lib目录:公共模型目录

    • Teachers_model.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:教师模型类
    
    
    class teacher_Model:
        '''
        教师模型类
        '''
        def __init__(self,name,age,sex):
            self.Name = name    #姓名
            self.Age = age      #年龄
            self.Sex = sex      #性别
            self.__Calary = 0     #工资
    
        def teacher_Accident(self):   #教学事故
            self.__Calary -= 10
    
    
        def teacher_Success(self,cost):   #教学成功
            self.__Calary += int(cost)
    
    
        def calary_Return(self):   #返回工资数据
            return self.__Calary
    • Lessons_model.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:
    
    import random,time
    
    class lesson_Model:
        '''
        课程模型类
        '''
        def __init__(self,lname,lcost,tobj):
            self.Lname = lname      #课程名
            self.Lcost = lcost      #课时费
            self.Tobj = tobj        #授课老师
            self.difficulty = random.randrange(10,40) #授课难度
    
    
        def classBegins(self):      #上课方法
            if self.success_Radio():
                self.Tobj.teacher_Success(self.Lcost)
                return True
            else:
                self.Tobj.teacher_Accident()
                return False
    
    
    
    
    
        def success_Radio(self):    #授课随机意外率
            num = random.randrange(1, 1000)
            if num <= (100-self.difficulty) * 10:
                return True
            else:
                a = random.randrange(1, 5)
                # print (type(a))
                lesson_Model.event(str(a))
                return False
    
        @staticmethod
        def event(num):     #授课意外事件
            dict = {'1': '据说老师刚刚失恋了,授课状态很差', '2': '据说老师已经递交了辞职报告,授课状态很差',
                    '3': '据说老师相亲去了,到现在状态都还没恢复。', '4': '据说老师家里节哀了,心情极度悲伤',
                    '5': '据说老师钱包丢了,内心无比哀叹'}
            time.sleep(1)
            print(dict[num])
    • Students_model.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:
    import random,time
    
    class student_Model:
        '''
        学生模型类
        '''
    
        # num = 0
        def __init__(self,name,age,account,password,lobj):
            self.Name = name            #姓名
            self.Age = age              #年龄
            self.Account = account      #账户名
            self.Password = password    #密码
            self.Lobj = lobj            #课程对象列表
            self.IQ= random.randrange(40,90)   #随机智商
            self.schedule = {}
            self.num = {}
            for lesson in self.Lobj:
                self.schedule[lesson] = 0    #课程进度率字典
                self.num[lesson] = 0         #课程修业次数
    
        def Classbegins(self,lesson_name):      #上课
            for obj in self.Lobj:
                if obj.Lname == lesson_name :
                    # print (self.num)
                    print('{0}课程进行第{1}次修业...'.format(obj.Lname, str(self.num[obj] + 1)))
                    time.sleep(1)
                    if self.success_Radio():
                        tag = obj.classBegins()
                        if tag:
                            self.schedule[obj] += 20
                            self.num[obj] += 1
                            time.sleep(1)
                            print ('你感觉非常好!')
                            time.sleep(1)
                            print ('{0}:{1}课程学习成功!完成率提高20%,达成率变为{2}%'.format(self.Name,obj.Lname,str(self.schedule[obj])))
                        else:
                            self.num[obj] += 1
                            time.sleep(1)
                            print ('你突然有一种骂娘的冲动...')
                            time.sleep(1)
                            print ('{0}:{1}课程学习失败,你对课程的理解没有丝毫提高,达成率为{2}%'.format(self.Name,obj.Lname,str(self.schedule[obj])))
                    else:
                        tag = obj.classBegins()
                        if tag:
                            self.schedule[obj] += 10
                            self.num[obj] += 1
                            time.sleep(1)
                            print('{0}:{1}课程学习欠佳!完成率提高10%,达成率变为{2}%'.format(self.Name,obj.Lname, str(self.schedule[obj])))
                        else:
                            self.num[obj] += 1
                            time.sleep(1)
                            print('你突然萌生了轻生的念头...')
                            time.sleep(1)
                            print('{0}:{1}课程学习失败,你对课程的理解没有丝毫提高,达成率为{2}%'.format(self.Name, obj.Lname,
                                                                                str(self.schedule[obj])))
                else:
                    pass
    
    
    
    
        def success_Radio(self):    #学习随机意外率
            num = random.randrange(1, 1000)
            if num <= self.IQ * 10:
                return True
            else:
                a = random.randrange(1,5)
                # print (type(a))
                student_Model.event(str(a))
                return False
    
    
        @staticmethod
        def event(num):     #学习意外事件
            dict = {'1':'你感觉头晕脑胀,浑身乏力!','2':'外面突然飞过一只蜻蜓,你看着他飞了一节课!',
                    '3':'女朋友来短信了,你激动的忘了听课','4':'你突然感觉肚子疼...原来是想拉屎了',
                    '5':'你的眼镜片碎了....'}
            time.sleep(1)
            print (dict[num])
    •  common.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:
    
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # 公共方法层
    
    import os,time,random,pickle
    
    DIR = os.path.dirname(__file__)
    DIR = DIR.replace('lib','db/')
    
    
    TAG = True      #循环控制标志
    
    
    def Exit():
        '''
        系统退出
        :return:None
        '''
        print ('程序退出!')
        exit()
    
    
    def MD5(password):
        '''
        加密函数
        :param firstsite: 密码字符串
        :return: 加密字符串
        '''
        import hashlib
        return hashlib.md5(password).hexdigest()
    
    
    def Verification_input():
        '''
        登录验证码校验
        :return: True
        '''
        while TAG:
            re = Verification_Code()
            code = raw_input('请输入括号里的验证码,不区分大小写({0}):'.format(re))
            if code.strip().lower() != re.lower():
                print('您输入的验证码有误,请重新输入!')
            else:
                return True
    
    
    def Verification_Code():
        '''
        生成随机的6位验证码:大小写字母数字的组合
        :return: 验证码
        '''
        code = ''
        b = random.randrange(0, 5)
        c = random.randrange(0, 5)
        for i in range(6):
            if i == b:
                a = random.randrange(1, 9)
                code = code + str(a)
            else:
                a = random.randrange(65, 90)
                if i == c:
                    code = code + chr(a).lower()
                else:
                    code = code + chr(a)
        return code
    
    
    
    
    
    def log_info_read(dir):
        '''
        配置文件全部读取
        :param user:用户名
        :return:dict字典
                如果无文件返回False
        '''
        if os.path.exists(dir):
            with open(dir,'r') as f:
                dict = pickle.load(f)
                return dict
        else:
            return False
    
    
    
    
    def log_info_write(dir,dict):
        '''
        配置文件全部写入
        :param user:用户名
        :param dict: 日志字典
        :return: True or False
        '''
        #if os.path.exists(user+'_log'):
        #print (DIR+user+'_log')
        with open(dir,'w') as f:
            pickle.dump(dict,f)
            return True

    三,src目录:程序业务目录

    • admin_business.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:
    
    import os,sys
    sys.path.append('..')
    from lib.Teachers_model import teacher_Model
    from lib.Lessons_model import lesson_Model
    from lib import common
    
    DIR = os.path.dirname(__file__)
    DIR = DIR.replace('src','db/')
    
    TAG = True
    
    def create_Teachers_model():
        """
        创建老师模型
        :return: None
        """
        while TAG:
            name = raw_input("请输入老师的姓名:")
            age = raw_input("请输入老师的年龄:")
            sex = raw_input("请输入老师的性别:")
            while TAG:
                text = """
                    老师信息如下:
                     姓名:{0}
                     年龄:{1}
                     性别:{2}
                """.format(name,age,sex)
                print (text)
                decide = raw_input("是否确认(y/n):")
                if decide == 'y':
                    P = teacher_Model(name,age,sex)
                    dict = common.log_info_read(DIR+'config_conf')
                    if dict != False:
                        dict['teachers'].append(P)
                        common.log_info_write(DIR + 'config_conf', dict)
                        print ("老师信息保存成功!")
                        return
                    else:
                        dict = {
                            'teachers':[P],
                            'lessons':[],
                            'students':[]
                        }
                        common.log_info_write(DIR+'config_conf',dict)
                        print ("老师信息保存成功!")
                        return
                elif decide == 'n':
                    break
                else:
                    print ("您的输入有误!")
    
    
    
    def create_Lesson_model():
        """
        创建课程模型
        :return: None
        """
        num = 0
        list = []
        dict = common.log_info_read(DIR + 'config_conf')
        if dict == False:
            print ("请先创建老师模型后再来!")
            return
        name = raw_input("请输入课程名称:")
        cost = raw_input("请输入课时费:")
        while TAG:
            print ("目前有{0}个老师可供选择,如下:".format(str(len(dict['teachers']))))
            for P in dict['teachers']:
                print ("{0}:姓名:{1},年龄:{2},性别:{3}".format(str(num+1),P.Name,P.Age,P.Sex))
                num += 1
                list.append(str(num))
            choose = raw_input("请输入索引选择授课老师:")
            if choose in list:
                tobj = dict['teachers'][int(choose)-1]
                L = lesson_Model(name,cost,tobj)
                while TAG:
                    text = """
                            课程的信息如下:
                             课程名:{0}
                             课时费:{1}
                            授课老师:{2}
                    """.format(name, cost, L.Tobj.Name)
                    print (text)
                    decide = raw_input("是否确认(y/n):")
                    if decide == 'y':
                        dict['lessons'].append(L)
                        common.log_info_write(DIR + 'config_conf', dict)
                        return
                    elif decide == 'n':
                        return
                    else:
                        print ("您的输入有误!")
            else:
                print ("您的输入有误!")
                num = 0
    
    
    def model_Config():
        """
        查看已经创建的模型
        :return: None
        """
        num = 0
        Num = 0
        dict = common.log_info_read(DIR + 'config_conf')
        if dict == False:
            print ("请先创建老师模型后再来!")
            return
        print ("已经创建的老师模型,如下:".format(str(len(dict['teachers']))))
        for P in dict['teachers']:
            print ("{0}:姓名:{1},年龄:{2},性别:{3}".format(str(num + 1), P.Name, P.Age, P.Sex))
            num += 1
        print ("已经创建的课程模型,如下:".format(str(len(dict['teachers']))))
        for P in dict['lessons']:
            print ("{0}:课程名:{1},课时费:{2},授课老师:{3}".format(str(Num + 1), P.Lname, P.Lcost, P.Tobj.Name))
            Num += 1
    
    
    
    
    def admin_Main(log = None):
        """
        管理员管理界面
        :param log: 用户登录标志
        :return: None
        """
        while TAG:
            text = """
                        欢迎来到管理员界面        {0}登陆中
                        1,创建老师模组
                        2,创建课程模组
                        3,查看模组配置
                        4,系统退出
            """.format(log)
            print (text)
            while TAG:
                choose = raw_input('请输入你的选择:')
                if choose == '1':
                    create_Teachers_model()
                    break
                elif choose == '2':
                    create_Lesson_model()
                    break
                elif choose == '3':
                    model_Config()
                    break
                elif choose == '4':
                    common.Exit()
                else:
                    print ('您的输入有误!')
    
    if __name__ == "__main__":
        admin_Main('admin')
    • users_business.py
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    # auther:Mr.chen
    # 描述:
    
    LOGIN = []
    TAG = True
    import os,sys
    sys.path.append('..')
    from lib import common
    from lib.Students_model import student_Model
    from src import admin_business
    
    DIR = os.path.dirname(__file__)
    DIR = DIR.replace('src','db/')
    
    
    
    def user_Login():
        dict = common.log_info_read(DIR + 'config_conf')
        if dict == False:
            print ("请让管理员先创建老师及课程模型后再来!")
            return
        while TAG:
            account = raw_input("请输入你的登录名:")
            if account == 'admin':
                password = raw_input("请输入你的登陆密码:")
                if password == '123123':
                    admin_business.admin_Main('admin')
            for S in dict['students']:
                if S.Account == account:
                    while TAG:
                        password = raw_input("请输入你的登陆密码:")
                        if S.Password == password:
                            print ('登陆成功')
                            LOGIN.insert(0,S)
                            user_Main(S.Name)
                        else:
                            print ("您输入的密码有误!")
            else:
                print ("您输入的账号有误,请重新输入!")
    
    
    
    def login_Check():
        dict = common.log_info_read(DIR + 'config_conf')
        if dict == False:
            print ("请让管理员先创建老师及课程模型后再来!")
            return
        name = raw_input("请输入你的姓名:")
        age = raw_input("请输入你的年龄:")
        account = raw_input("请输入你的登录账号:")
        password = raw_input("请输入你的登陆密码:")
        text = """
                你的注册信息如下:
                  姓名:{0}
                  年龄:{1}
                  登陆账号:{2}
                  登陆密码:{3}
        """.format(name,age,account,password)
        while TAG:
            print (text)
            decide = raw_input("是否确认(y/n):")
            if decide == 'y':
                S = student_Model(name,age,account,password,[])
                dict['students'].append(S)
                common.log_info_write(DIR + 'config_conf', dict)
                LOGIN.insert(0,S)
                print ('信息注册成功')
                user_Main(name)
            elif decide == 'n':
                return
            else:
                print ('你的输入有误!')
    
    
    def select_Lesson():
        num = 0
        List = []
        dict = common.log_info_read(DIR + 'config_conf')
        if LOGIN == []:
            print ('请登陆后再来!')
            return
        if dict == False:
            print ("请让管理员先创建老师及课程模型后再来!")
            return
        print ("目前的可选课程有{0}门,如下:".format(str(len(dict['lessons']))))
        for lesson in dict['lessons']:
            print ('{0},课程名:{1},课时费:{2},授课老师:{3}'.format(str(num+1),lesson.Lname,lesson.Lcost,lesson.Tobj.Name))
            num += 1
            List.append(str(num))
        while TAG:
            choose = raw_input("请输入索引选择课程(可以多选但不能重复):")
            if choose.isdigit():
                if len(choose) == len(set(choose)):
                    if set(choose) & set(List) == set(choose):
                        for S in dict['students']:
                            if S.Name == LOGIN[0].Name:
                                for i in list(choose):
                                    if dict['lessons'][int(i)-1] in S.Lobj:
                                        print ("您已经添加过{0}课程了".format(dict['lessons'][int(i)-1].Lname))
                                    else:
                                        S.Lobj.append(dict['lessons'][int(i)-1])
                                        S.schedule[dict['lessons'][int(i)-1]] = 0
                                        S.num[dict['lessons'][int(i) - 1]] = 0
                                common.log_info_write(DIR + 'config_conf', dict)
                                print ('选课成功!')
                                return
                            else:
                                pass
                    else:
                        print ("您的选择超范围,请重新选择!")
                else:
                    print ("您的选择里有重复内容,请重新输入!")
            else:
                print ('您的输入必须是纯数字,请重新输入!')
    
    
    def class_Begins():
        num = 0
        List = []
        dict = common.log_info_read(DIR + 'config_conf')
        if LOGIN == []:
            print ('请登陆后再来!')
            return
        if dict == False :
            print ("请让管理员先创建老师及课程模型后再来!")
            return
        for S in dict['students']:
            if S.Name == LOGIN[0].Name and S.Lobj == []:
                print ("您还没有选课,请选课后再来!")
                return
        while TAG:
    
            for obj in dict['students']:
                if obj.Name == LOGIN[0].Name:
                    print ("您有{0}门待修业课程,如下:".format(str(len(obj.Lobj))))
                    for lesson in obj.Lobj:
                        if obj.schedule[lesson] >= 100:
                            finished = '已达成'
                        elif obj.num[lesson] >= 9:
                            finished = '修业失败'
                        else:
                            finished = obj.schedule[lesson]
                        print ('{0},课程名:{1},课时费:{2},授课老师:{3},修业达成率:{4},已修业次数:{5}'.format(str(num+1),lesson.Lname,lesson.Lcost,lesson.Tobj.Name,finished,obj.num[lesson]))
                        num += 1
                        List.append(str(num))
            choose = raw_input("请输入你的选择(单选)(输入n返回上一级菜单):")
            if choose in List:
                # if LOGIN[0].schedule[LOGIN[0].Lobj[int(choose)]] < 100:
                for obj in dict['students']:
                    if obj.Name == LOGIN[0].Name:
                        for i in range(9):
                            # print (obj.Lobj[int(choose)-1])
                            if obj.schedule[obj.Lobj[int(choose)-1]] < 100 and obj.num[obj.Lobj[int(choose)-1]] < 9:
                                obj.Classbegins(obj.Lobj[int(choose)-1].Lname)
                                num = 0
                            else:
                                print ('您选择的课程已经修业完成,请重新选择!')
                                common.log_info_write(DIR + 'config_conf', dict)
                                num = 0
                                break
                        common.log_info_write(DIR + 'config_conf', dict)
            elif choose == 'n':
                return
            else:
                print ("您的输入有误!")
                num = 0
    
    
    
    
    def user_Main(log = None):
        if log == None:
            log = '用户未登录...'
        else:
            log = "{0}登陆中...".format(log)
        text = """
                  欢迎光临选课系统         {0}
                    1,学生登录
                    2,学生注册
                    3,学生选课
                    4,学生上课
                    5,系统退出
        """.format(log)
        while TAG:
            print (text)
            dict = {'1':user_Login,'2':login_Check,'3':select_Lesson,'4':class_Begins,'5':common.Exit}
            choose = raw_input("请输入你的选择:")
            if choose in dict.keys():
                dict[choose]()
            else:
                print ("你的输入有误!")
    
    if __name__ == "__main__":
        user_Main()

    四,db目录:配置文件目录,程序自动生成

    北京IT职业教育培训中心,欢迎来校咨询。微信号:yinsendemogui(添加时请注明博客园)
  • 相关阅读:
    C#数据结构之串
    DevExpress ChartControl 设置它的标题
    [转]DevExpress GridControl 关于使用CardView的一点小结
    将ImageList中的图片转化成byte数组
    可变参数
    jquery动态移除/增加onclick属性详解
    div中英文无法自动换行的解决办法
    jQuery三种事件绑定方式.bind(),.live(),.delegate()
    纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等),NB么?
    关于JS、JQuery、CSS的小知识点
  • 原文地址:https://www.cnblogs.com/chensiqiqi/p/6138142.html
Copyright © 2020-2023  润新知