美文网首页
Day_14-学生管理系统

Day_14-学生管理系统

作者: 两只小猪呼噜噜_1539 | 来源:发表于2019-01-13 21:43 被阅读0次

如何存放文件

1.代码文件放置于项目文件夹下
2.非代码文件放置于项目文件夹下的一个子文件夹下(命名固定,养成良好习惯)files

如何将模块文件相互关联

在主模块中导入其他模块

如何设计数据结构

目的
1.确定数据的存放类型

存放类型

1.字典
特点:一个字典里可以保存不同类型的数据信息
如何实现:通过key来区分不同类型

2.列表
特点:一个列表里可以保存相同类型的数据信息

实际运用
通过功能来确定数据类型
功能:面向生活,功能的特点
最外层是一个字典,确定整个项目
通过设置key来确定管理的项目
通过设置value来设置管理项目的数据结构

一个键值对对应一个功能或者是项目

2.存放类型的文件类型选择

文件类型选择

目的:为了将数据持久化
原因:程序在内存中运行,一旦结束,数据就会丢失,为了下次程序运行能够使用之前的数据,需要在程序结束前将数据保存在硬盘中
普通文本:内容是字符串
json:内容是数据类型

为何创建多个模块

目的:让代码更便于管理
原则:通常一个页面的代码放置于一个模块中

如何让模块的代码显示更有层次

思维方式:逆向思维

1.搭建框架,调试

如何搭建框架(不同条件实现不同功能)
分支:不同条件实现不同功能
循环:希望某些代码重复执行

2.根据功能确定函数名,并调用

3.根据难易程度逐一实现代码功能

通用模块

要求
1.函数说明文档清楚明白
2.面向生活,是否需要异常捕获

技巧

全局变量:储存可能会发生改变的数据

学生管理系统(第一遍)遗漏点

  • 从文件读取数据时,遗漏判断是否为空,如果有几层,要判断到直接要获取的数据类型为止
    -如何关联两个函数
    设置参数,可以让一个函数使用另一个函数的数据
    将数据设置为参数
  • 文件的读写需要异常捕获来确定是否有文件(告诉用户文件是否存在)
    设置返回值有助于判断是否读写成功

学生管理系统(第一遍)代码

文件夹:两个
第一个:项目文件夹
存放py模块和非代码文件夹
第二个:非代码文件夹
命名:files(自己熟悉的固定的文件名)
存放普通文本和json文件
普通文本:页面
json文件:放置用户信息

数据结构:
最外层:字典
目的:通过key来区分不同功能,也便于以后添加功能
中间层:列表
目的:存放相同类型的数据
最里层:字典
目的:存放不同类型的数据

文件的读写
数据本地化,为了将数据保存,并且以后还可以使用

登陆注册模块:mainPage.py

"""__author__ = 蒲 """
import fileManagerModule
import studentManagerSyetem

# 保管用户账号信息的文件
file_name = 'allUser.json'

def login():
    """登录功能"""
    all_user = fileManagerModule.read_json_file(file_name)
    # 输入账号
    while 1:
        user_name = input('请输入账号:')
        if user_name in all_user:
            break
        else:
            print('1.账号不存在,请重新输入')
            print('2.返回')
            input_value = input('请选择(1-2):')
            if input_value == '1':
                continue
            else:
                return
    # 输入密码
    while 1:
        password = input('请输入密码:')
        for key in all_user:
            if all_user[key] == password:
                print('登录成功')
                studentManagerSyetem.user_name = user_name
                studentManagerSyetem.show_student_page()
                return
        if all_user[key] != password:
            print('1.密码输入错误,请重新输入')
            print('2.返回')
            input_value = input('请选择(1-2):')
            if input_value == '1':
                continue
            else:
                return

def register():
    """注册功能"""

    # 判断账号
    while 1:
        username = input('请输入账号(3-6):')
        if 3 <= len(username) <= 6:
            break
        else:
            print('账号长度不符合规格, 请重新输入')

    # 判断密码
    while 1:
        # 输入密码
        password = input('请输入密码(6-12):')
        # 判断密码是否符合要求
        if 6 <= len(password) <= 12:
            # 符合要求
            print('密码输入成功')
            break
        else:
            # 不符合要求
            print('密码长度不符合规格,请重新输入')

    all_user = fileManagerModule.read_json_file(file_name)
    if not all_user:
        all_user = {}
    # 更新数据
    all_user[username] = password
    # 将更新的数据重新写入文件中
    result = fileManagerModule.write_json_file(all_user, file_name)
    if result:
        print('注册成功')
    else:
        print('注册失败')

def show_system_interface():
    """显示登录注册页面,并且做出相应选择"""
    while 1:
        print(fileManagerModule.read_text_file('system_interface.txt'))
        input_value = input('请选择(1-3):')
        if input_value == '1':
            login()
        elif input_value == '2':
            register()
        elif input_value == '3':
            return
        else:
            print('输入有误,请重新输入')

def main():
    show_system_interface()

if __name__ == '__main__':
    main()

学生管理模块:studentManagerSyetem.py

"""__author__ = 蒲"""
import fileManagerModule

user_name = 'abc'
key_max_number = 'max_number'
key_stu_name = 'name'
key_stu_age = 'age'
key_stu_tel = 'tel'
key_stu_id = 'id'
key_all_student = 'all_student'

def show_student_info(stu:dict):
    """显示学生信息"""
    return '学号:%s 姓名:%s 年龄:%s 电话:%s' % (stu[key_stu_id], stu[key_stu_name], stu[key_stu_age], stu[key_stu_tel])

def del_name_student():
    """按姓名删除学生"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    if not all_students:
        print('没有学生,请先添加学生')
    input_name = input('请输入要删除的学生姓名:')
    students = all_students[key_all_student]
    same_students = []
    for dict in students:
        if input_name == dict[key_stu_name]:
            same_students.append(dict)
    # 判断里面是否添加过学生
    if same_students == []:
        print('没有该学生信息')
        return
    # 将相同的学生每人贴上一个标签
    index = 0
    for stu in same_students:
        # 打印学生的信息
        print(str(index) + ' ' + show_student_info(stu))
        index += 1
    print('q 退出')
    input_value = input('请选择要删除学生对应的标号:')
    if input_value == 'q':
        return
    # 删除学生
    del_stu = same_students[int(input_value)]
    students.remove(del_stu)
    # 更新数据
    all_students[key_all_student] = students
    # 将更新的数据保存到本地
    result = fileManagerModule.write_json_file(all_students, user_name + '.json')
    if result:
        print('删除成功')
    else:
        print('删除失败')
    print('1.请继续')
    print('2.返回')
    input_value1 = input('请选择(1-2):')
    if input_value1 != '1':
        return

def del_id_student():
    """按学号删除学生"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    if not all_students:
        print('没有学生,请先添加学生')
        return
    input_id = input('请输入要删除的学生学号:')
    students = all_students[key_all_student]
    for dict in students[:]:
        if input_id == dict[key_stu_id]:
            students.remove(dict)
    # 更新数据
    all_students[key_all_student] = students
    # 将数据重新写入
    result = fileManagerModule.write_json_file(all_students, user_name + '.json')
    if result:
        print('删除成功')
    else:
        print('删除失败')
    print('1.请继续')
    print('2.返回')
    input_value = input('请选择(1-2):')
    if input_value != '1':
        return

def del_student():
    """删除学生"""
    while 1:
        print('1.按姓名删除')
        print('2.按学号删除')
        print('3.返回')
        input_value = input('请选择(1-3):')
        if input_value == '1':
            # 按姓名删除
            del_name_student()
        elif input_value == '2':
            # 按学号删除
            del_id_student()
        elif input_value == '3':
            return
        else:
            print('输入有误,请重新输入')

def id_change_student():
    """按学号修改学生信息"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    if not all_students:
        print('没有学生,请先添加学生')
        return
    input_id = input('请输入要修改的学生学号:')
    students = all_students[key_all_student]
    for stu in students:
        if input_id == stu[key_stu_id]:
            print('1.修改学生年龄')
            print('2.修改学生电话')
            print('3.返回')
            input_num = input('请选择(1-3)')
            if input_num == '1':
                input_name = input('请输入新的年龄:')
                stu[key_stu_age] = input_name
            elif input_num == '2':
                input_tel = input('请输入新的电话:')
                stu[key_stu_tel] = input_tel
            else:
                return
    # 将更新的数据重新写入文件中
    result = fileManagerModule.write_json_file(all_students, user_name + '.json')
    if result:
        print('修改成功')
    else:
        print('修改失败')
    print('1.继续修改')
    print('2.返回')
    input_num1 = input('请选择(1-2):')
    if input_num1 != '1':
        return

def name_change_student():
    """按姓名修改学生信息"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    if not all_students:
        print('没有学生,请先添加学生')
        return
    students = all_students[key_all_student]
    input_name = input('请输入要修改的学生姓名:')
    same_students = []
    for stu in students:
        if input_name == stu[key_stu_name]:
            same_students.append(stu)
    if not same_students:
        print('没有该学生')
        return
    index = 0
    for change_stu in same_students:
        print(str(index) + ' ' + show_student_info(change_stu))
    print('q. 退出')
    input_value = input('请输入要修改学生的标号:')
    if input_value == 'q':
        return
    change_student = same_students[int(input_value)]
    print('1.修改学生年龄')
    print('2.修改学生电话')
    print('3.返回')
    input_num2 = input('请选择(1-3):')
    if input_num2 == '1':
        input_age1 = input('请输入新的年龄:')
        change_student[key_stu_age] = input_age1
    elif input_num2 == '2':
        input_tel1 = input('请输入新的电话')
        change_student[key_stu_tel] = input_tel1
    else:
        return
    for stu in students:
        if change_student[key_stu_id] == stu[key_stu_id]:
            students.remove(stu)
            students.append(change_student)
    result = fileManagerModule.write_json_file(all_students, user_name + '.json')
    if result:
        print('修改成功')
    else:
        print('修改失败')
    print('1.继续修改')
    print('2.返回')
    input_value1 = input('请选择(1-2):')
    if input_value1 != '1':
        return

def change_student():
    """修改学生信息"""
    while 1:
        print('1.按姓名修改')
        print('2.按学号修改')
        print('3.返回')
        input_value = input('请选择(1-3):')
        if input_value == '1':
            # 按姓名修改
            name_change_student()
        elif input_value == '2':
            # 按学号修改
            id_change_student()
        elif input_value == '3':
            return
        else:
            print('输入有误,请重新输入')


def find_student_name():
    """按照姓名查找学生"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    while 1:
        input_name = input('请输入要查找的学生姓名:')
        count = 0
        for student in all_students[key_all_student]:
            if input_name == student[key_stu_name]:
                print(show_student_info(student))
                count += 1
        if count == 0:
            print('没有该学生信息')
            print('1.重新输入 2.返回')
            input_value = input('请选择(1-2):')
            if input_value != '1':
                return


def find_student_stu():
    """按照学号查找学生"""
    all_students = fileManagerModule.read_json_file(user_name + '.json')
    while 1:
        input_id = input('请输入要查找的学生学号:')
        count = 0
        for student in all_students[key_all_student]:
            if input_id == student[key_stu_id]:
                print(student)
                count += 1
        if count == 0:
            print('没有该学生信息')
            print('1.重新输入 2.返回')
            input_value = input('请选择(1-2):')
            if input_value != '1':
                return


def find_student():
    """查找学生"""
    while 1:
        print('1.查看所有学生')
        print('2.按姓名查找')
        print('3.按学号查找')
        print('4.返回')
        input_value = input('请选择(1-4):')
        if input_value == '1':
            # 查看所有学生
            all_students = fileManagerModule.read_json_file(user_name + '.json')
            for stundent in all_students[key_all_student]:
                print(show_student_info(stundent))
        elif input_value == '2':
            # 按姓名查找
            find_student_name()
        elif input_value == '3':
            # 按学号查找
            find_student_stu()
        elif input_value == '4':
            return
        else:
            print('输入有误,请重新输入')




def add_the_student():
    """添加学生"""
    while 1:
        # 读取文件中的学生信息
        all_students = fileManagerModule.read_json_file(user_name + '.json')
        if not all_students:
            all_students = {}
        # 读取文件中的学号
        max_num = all_students.setdefault('max_number', 0)
        max_num += 1
        # 输入学生信息
        name = input('请输入姓名:')
        age = input('请输入年龄:')
        tel = input('请输入电话:')
        id = 'stu' + str(max_num).rjust(5, '0')
        # 将学生信息存进字典中
        student = {key_stu_name: name, key_stu_age: age, key_stu_tel: tel, key_stu_id: id}
        # 将新学生加入到系统的所有学生中
        students = all_students.get(key_all_student, [])
        students.append(student)
        # 更新数据
        all_students[key_all_student] = students
        all_students[key_max_number] = max_num
        # 将更新后的数据写入文件中
        result = fileManagerModule.write_json_file(all_students, user_name + '.json')
        if result:
            print('添加成功')
        else:
            print('添加失败')
        print('1.继续添加')
        print('2.返回')
        input_value = input('请选择(1-2):')
        if input_value != 1:
            return

def add_student():
    """是否添加学生"""
    print('====添加学生====')
    print('1.添加')
    print('2.返回')
    input_value = input('请选择(1-2):')
    if input_value == '1':
        add_the_student()
    else:
        return

def show_student_system(user_name):
    """将使用者传入界面"""
    return (fileManagerModule.read_text_file('student_system_interface.txt')) % user_name

def show_student_page():
    """显示学生管理页面"""
    while 1:
        # 打印学生管理页面
        print(show_student_system(user_name))
        # 根据不同输入做出不同选择
        input_value = input('请选择(1-5):')
        if input_value == '1':
            # 添加学生
            add_student()
        elif input_value == '2':
            # 查找学生
            find_student()
        elif input_value == '3':
            # 修改学生
            change_student()
        elif input_value == '4':
            # 删除学生
            del_student()
        elif input_value == '5':
            break
        else:
            print('输入有误,请重新输入')

def main():
    show_student_page()


if __name__ == '__main__':
    main()

文件管理模块:fileManagerModule.py

"""__author__ = 蒲金彪"""

# 文件管理模块,声明与文件读写相关的函数

import json

# 文件是否存在(异常捕获,返回值)
# 通过参数用用户的角度来思考
def read_text_file(file_name: str):
   """
   读取普通文本的内容
   :param file_name: 文件名
   :return: 文本的所有内容,不存在返回None
   """
   try:
       with open('files/' + file_name, 'r', encoding='utf-8') as f:
           return f.read()
   except:
       print('警告:文件%s不存在' % file_name)


def write_text_file(content, file_name):
   """
   向普通文本中写入内容
   :param content: 文件内容
   :param file_name: 文件名
   :return: 不存在返回None
   """
   try:
       with open('file/' + file_name, 'w', encoding='utf-8') as f:
           f.write(content)
           # 判断写入成功
           return True
   except:
       print('警告:写入失败')
       # 判断写入失败
       return False

def read_json_file(file_name):
   """
   读取json文件中的内容
   :param file_name: 文件名
   :return: 不存在返回None
   """
   try:
       with open('files/' + file_name, 'r', encoding='utf-8') as f:
           return json.load(f)

   except (UnboundLocalError,FileNotFoundError):
       print('警告:文件%s不存在' % file_name)



# 写入时需要考虑传达给用户是否写入成功(用返回值来分辨)
# 写入时,关注的是是否写入成功
def write_json_file(content, file_name):
   """
   将指定数据写入json文件中
   :param content:要写入的内容(能够转换为json的对象)
   :param file_name: 要写入数据的json文件名
   :return: 是否写入成功
   """
   try:
       with open('files/' + file_name, 'w', encoding='utf-8') as f:
           json.dump(content, f)
           # 判断写入成功
           return True

   except:
       print('警告:写入失败')
       # 判断写入失败
       return False

相关文章

网友评论

      本文标题:Day_14-学生管理系统

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