美文网首页
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