美文网首页
2018-07-23 学生管理系统

2018-07-23 学生管理系统

作者: Kris_Shin | 来源:发表于2018-07-23 19:03 被阅读0次
    '''
     @Author: Kris Shin
     @Date: 2018-07-23 15:48:12
     @Last Modified by: Kris Shin
     @Last Modified time: 2018-07-23 15:48:12
    '''
    import time  # 导入time库,方便使用sleep函数
    import random  # 随机生成id要用
    import os
    
    global allStus  # 声明全局变量列表,存储所有学生信息
    allStus = []
    
    
    def mainView():  # 定义主界面
        print('''
        ****************************************
        * 1. 添加学生
        * 2. 查找学生
        * 3. 更新学生
        * 4. 删除学生
        * 5. 查看所有学生
        * 6. 求学生平均成绩
        * 0. 退出系统
        ****************************************''')
    
    
    def randomId():  # 定义随机id生成方法
        id = ''
        for _ in range(4):
            id += str(random.randint(0, 9))
        return id
    
    
    def ctnAndExView():  # 将继续操作的界面和方法封装
        print('继续操作(任意键继续)\n0. 返回上级(0键返回上级)')
        return int(input('>>> '))  # 返回输入的值
    
    
    def addView():  # 添加学生功能实现
        id = randomId()  # 随机生成4为数字id
        print('* 添加学生')
        name = input('请输入姓名:\n>>> ')
        age = input('请输入年龄:\n>>> ')
        gender = input('请输入性别:\n>>> ')
        tel = input('请输入电话:\n>>> ')
        stu = []  # id,姓名,年龄,性别,电话存为列表
        scores = {'Math': 0, 'English': 0, 'Python': 0}  # 定义一个scores字典来存储各科成绩
        scores['Math'] = int(input('数学成绩:\n>>> '))
        scores['English'] = int(input('英语成绩:\n>>> '))
        scores['Python'] = int(input('Python成绩:\n>>> '))  # 修改字典的成绩值
        stu.extend([id, name, age, gender, tel, scores])  # 将所有输入值存储进stu列表对象
        print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython")  # 输出
        print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t添加成功' % (stu[0], stu[1], stu[2], stu[3], stu[4], scores['Math'], scores['English'], scores['Python']))
        return stu  # 返回stu列表
    
    
    def addStu():  # 添加学生方法
        global allStus  # 声明全局变量
        allStus.append(addView())  # 调用添加功能实现,将返回的列表对象存入allStu列表
    
    
    def searchStu():  # 定义查找方法
        print('* 查找学生')
        global allStus
        flag = False  # 声明标识变量,标识是否查找到学生
        name = input('请输入姓名:\n>>> ')
        print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython")
        for x in allStus:  # 遍历allStu
            if name in x:  # 判断是否有该姓名的学生
                flag = True  # 查找到学生则赋值该标识为True
                print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d' % (x[0], x[1], x[2], x[3], x[4], x[5]['Math'], x[5]['English'], x[5]['Python']))  # 输出学生信息
        if not flag:  # 如果没查找到学生则给出提示
            print('未查找到该姓名的学生')
        return name  # 返回输入的姓名,便于其他函数调用查找函数
    
    
    def updateStu():  # 定义更新学生函数
        print('* 修改学生')
        searchStu()  # 调用查找学生函数
        global allStus
        id = input('请输入你要修改学生的编号:\n>>> ')  # 得到要修改的学生的id
        for x in allStus:
            if id in x:
                name = input('请输入姓名:\n>>> ')
                age = input('请输入年龄:\n>>> ')
                gender = input('请输入性别:\n>>> ')
                tel = input('请输入电话:\n>>> ')
                stu = []
                scores = {'Math': 0, 'English': 0, 'Python': 0}
                scores['Math'] = int(input('数学成绩:\n>>> '))
                scores['English'] = int(input('英语成绩:\n>>> '))
                scores['Python'] = int(input('Python成绩:\n>>> '))
                stu.extend([id, name, age, gender, tel, scores])
                allStus[allStus.index(x)] = stu  # 通过index方法找到该id的学生的索引 并将更新后的stu对象赋值到allStu来更新学生信息
                print('修改成功!!')
                return -1  # 返回-1 表示该函数结束
        print('修改失败,该编号不存在')  # 如果上面查找到id那么这一步不会执行 否则提示无此id
    
    
    def deleteStu():  # 定义删除学生方法
        print('* 删除学生')
        name = searchStu()  # 调用查找学生方法 并得到返回的name
        global allStus
        cho = int(input('1.全部删除\n2.按编号删除\n>>> '))  # 提示删除的类型(对有重名的学生的情况的判断和处理)
        if cho == 2:
            id = input('请输入你要删除学生的编号:\n>>> ')
            for x in allStus:
                if id in x:
                    del allStus[allStus.index(x)]  # 通过输入id,来找到该id的索引,进行删除该学生的操作
                    print('删除成功!!')
                    return - 1
        elif cho == 1:  # 全部删除
            for _ in range(len(allStus)):  # 增加一次循环  因为通过name索引只能删除同名学生的第一个,需要重复操作
                for x in allStus:
                    if name in x:
                        del allStus[allStus.index(x)]  # 通过之前接收的查找学生的name来查找索引并删除
            print('删除完成')
            return -1
        print('删除失败,该编号不存在')  # 判断编号不存在的情况
    
    
    def showAllStu():  # 定义显示所有学生信息的方法
        print('* 查找学生')
        global allStus  # 声明调用全局变量
        print("编号\t姓名\t年龄\t性别\t电话\t数学\t英语\tPython")
        for x in allStus:  # 直接遍历学生信息,直接输出x,类型和标题无法对齐,所以取值进行输出
            print('%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d' % (x[0], x[1], x[2], x[3], x[4], x[5]['Math'], x[5]['English'], x[5]['Python']))
    
    
    def getAvgSco():  # 定义查看平均成绩
        print('* 查看学生平均成绩')
        global allStus
        print("编号\t姓名\t年龄\t性别\t电话\t平均成绩")
        for x in allStus:  # 直接将最后一项做平均数计算操作
            print('%s\t%s\t%s\t%s\t%s\t%.2f' % (x[0], x[1], x[2], x[3], x[4], (x[5]['Math']+x[5]['English']+x[5]['Python'])/len(x[5])))
    
    
    def mainSlc():  # 主操作函数
        while True:  # 便于循环操作
            mainView()  # 调用主界面
            slc = int(input('请选择操作:\n>>> '))
            if slc == 1:  # 判断选择 并进行相应操作
                while True:  # 便于重复操作
                    addStu()
                    select = ctnAndExView()  # 判断是否继续操作
                    if select == 0:  # 选择为0 返回主循环
                        break
            elif slc == 2:
                while True:
                    searchStu()
                    select = ctnAndExView()
                    if select == 0:
                        break
            elif slc == 3:
                while True:
                    updateStu()
                    select = ctnAndExView()
                    if select == 0:
                        break
            elif slc == 4:
                while True:
                    deleteStu()
                    select = ctnAndExView()
                    if select == 0:
                        break
            elif slc == 5:
                while True:
                    showAllStu()
                    select = ctnAndExView()
                    if select == 0:
                        break
            elif slc == 6:
                while True:
                    getAvgSco()
                    select = ctnAndExView()
                    if select == 0:
                        break
            elif slc == 0:
                print('退出中......')
                time.sleep(1)  # 暂停一秒钟
                return -1  # 返回-1 结束主循环 退出系统
            else:
                print('输入有误!!!')
            time.sleep(1)  # 每次操作完成暂停一秒钟
            os.system('cls')  # 清屏
    
    
    def main():  # 主函数
        while True:
            ex = mainSlc()  # 主操作界面
            if ex == -1:
                return -1  # 结束并退出
    
    
    if __name__ == '__main__':
        main()  # 启动主函数
    

    相关文章

      网友评论

          本文标题:2018-07-23 学生管理系统

          本文链接:https://www.haomeiwen.com/subject/obajmftx.html