zoukankan      html  css  js  c++  java
  • 项目——学生信息管理

    学生信息管理

    student_management/
    ├── func.py
    ├── info.db.bak
    ├── info.db.dat
    ├── info.db.dir
    ├── __init__.py
    ├── main.py
    ├── __pycache__
    │   ├── func.cpython-37.pyc
    │   ├── __init__.cpython-37.pyc
    │   ├── main.cpython-37.pyc
    │   └── setting.cpython-37.pyc
    └── setting.py

    main.py

    #!/usr/bin/env python
    #!encoding: UTF-8
    # main.py
    
    import shelve
    import sys
    
    sys.path.append('/noon/noon/project/student_management')
    
    from func import *
    from setting import *
    
    if __name__ == '__main__':
        db = shelve.open(filename)  # 打开数据库文件
        info()  # show menu
    
        while True:
            opt = input('请选择: ')
            if not opt in options:
                print('选项: ', options)
            if opt == 'q':
                print('欢迎下次再来!')
                db.close()
                break
            elif opt == '1':
                try:
                    add_info(db)
                except AssertionError as err:
                    print(err)
            elif opt == '2':
                show_info(db)
            elif opt == '3':
                try:
                    delete_info(db)
                except AssertionError as err:
                    print(err)
            elif opt == '4':
                try:
                    change_info(db)
                except AssertionError as err:
                    print(err)
            elif opt == '5':    
                sort_info_by_key(db)
            elif opt == '6':
                sort_info_by_key(db, reverse=True)
            elif opt == '7':
                sort_info_by_key(db, key='age')
            elif opt == '8':
                sort_info_by_key(db, key='age', reverse=True)
            elif opt == '9':
                clear_info()

    setting.py

    #!/usr/bin/env pythono
    #!encoding: UTF-8
    # setting.py
    
    """
    All settings for project student management
    """
    
    max_score = 100  # 最大成绩
    max_age = 100  # 最大年龄
    
    filename = '/home/noon/noon/project/student_management/info.db'  # 数据库文件地址
    
    options = [str(i) for i in range(1, 10)] + ['q']  # 可使用的选项 

    func.py

    #!/usr/bin/env python
    #!encoding: UTF-8
    # func.py
    
    """
    all functions necessary for project student management 
    """
    
    from setting import *
    
    def get(s, e, f='int'):
        "a function to get input in <type int> or <type float>"
        while True:
            try:
                n = float(input(s))
            except:
                print(e)
                continue
            else:
                if f == 'int':
                    return int(n)
                return n
    
    def info():
        'menu'
        print('+', '-'*50, '+', sep='')
        line = lambda s: print('|', s, '|', sep='')
        line(' 1) 添加学生信息' + ' '*34)
        line(' 2) 显示学生信息' + ' '*34)
        line(' 3) 删除学生信息' + ' '*34)
        line(' 4) 修改学生成绩' + ' '*34)
        line(' 5) 按学生成绩高-低显示学生信息' + ' '*19)
        line(' 6) 按学生成绩低-高显示学生信息' + ' '*19)
        line(' 7) 按学生年龄高-低显示学生信息' + ' '*19)
        line(' 8) 按学生年龄低-高显示学生信息' + ' '*19)
        line(' 9) 清屏' + ' '*42)
        line(' q) 退出' + ' '*42)
        print('+', '-'*50, '+', sep='')
    
    def add_info(db):
        'func 1: add_info'
        name = input('名字: ')
        if name:
            if name in db:
                flag = input('{name}已经存在于数据库中,是否覆盖(Y/N)? '.format(name=name))
                if flag.lower() not in ['y', 'yes']:
                    return 
            age = get(s='年龄: ', e='请输入int数据类型!')
            assert 1<=age<=max_age, '年龄必须在1~{max_age}岁区间。'.format(max_age=max_age)
            score = get(f='float', s='成绩: ', e='请输入float数据类型!')
            assert 0<=score<=max_score, '成绩必须在0~{max_score}区间。'.format(max_score=max_score)
            db[name] = dict(zip(['name', 'age', 'score'], [name, age, score]))
            print('成功添加信息{info}.'.format(info=db[name]))
    
    def show_info(db):
        'func 2: show_info'
        for stu in db:
            print(stu)
            for k, v in db[stu].items():
                print('	', k, '->', v)
    
    def delete_info(db):
        'func 3: delete_info'
        name = input('名字: ')
        if name:
            assert name in db, '不存在{name}学生的信息'.format(name=name)
            flag = input('确定删除信息{name}(Y/N)?'.format(name=name))
            if flag.lower() in ['y', 'yes']:
                deleted = db[name]
                del db[name]
                print('成功删除信息{info}.'.format(info=deleted))
    
    def change_info(db):
        'func 4: change_info'
        name = input('名字:')
        if name:
            assert name in db, '不存在{name}学生的信息'.format(name=name)
            score = get(f='float', s='成绩: ', e='请输入float数据类型!')
            assert 0<=score<=max_score, '成绩必须在0~{max_score}区间'.format(max_score=max_score)
            student = db[name]
            student['score'] = score
            db[name] = student    
            print('成功修改信息{info}.'.format(info=db[name]))
    
    def sort_info_by_key(db, key='score', reverse=False):
        "func 5 & func 6 & func 7 & func 8: sort_info_by_key"
        keys = [db[stu][key] for stu in db]
        if reverse:
            keys.sort(reverse=True)
        else:
            keys.sort()
        done = [stu for stu in db]
        while done:
            for stu in db:
                if db[stu]['name'] not in done:
                    continue
                if db[stu][key] == keys[0]:
                    print(db[stu]['name'])
                    for k, v in db[stu].items():
                        print('	', k, '->', v)
                    keys.pop(0)
                    done.pop(done.index(db[stu]['name']))    
    
    def clear_info():
        "func 9: clear_info"
        import os    
        os.system('clear')
        info()
    Resistance is Futile!
  • 相关阅读:
    QTextStream 居然接受FILE*这样的传统参数
    基于IOCP的高速文件传输代码
    tornado web框架
    Kaggle入门
    NET Core 介绍
    Wireshark
    设计和应用分布式调用跟踪系统
    Visual Studio Code和Docker开发asp.net core和mysql应用
    背单词
    多环境开发
  • 原文地址:https://www.cnblogs.com/noonjuan/p/11195362.html
Copyright © 2011-2022 走看看