一、系统需求说明

本项目计划实现一个学生管理系统,学生信息包括:姓名、性别、手机号码,系统包含以下功能。

模块

子模块

说明

查询模块

查询全部学生的信息

显示当前系统内所有学员的信息

查询模块

精准查询学生的个人信息

输入查询的姓名,匹配相同的学员信息

查询模块

模糊查询学生姓名

不完全输入学生姓名,找到匹配的信息

查询模块

查询男女人数

统计当前系统内男女的数量

删除模块

删除单个学生的信息

输入所需要删除的学员姓名来删除信息

修改模块

修改单个学生的信息

输入学员姓名,匹配相同信息,修改信息项

添加模块

添加学生信息

添加学员的信息(学号、姓名、性别、手机号)

查询模块

将所有学生信息输出

将系统中存储的信息打印到txt文档中

删除模块

一键删除txt文档

删除已存在的学生信息txt文档(永久删除)

退出模块

退出系统

退出程序

学生管理系统功能一览表

设计内容:

  1. 简单的增删查改;
  2. 设计了模糊查找功能,可以通过输入姓名中的某个字,匹配当前数组中所有姓名带该字的学员信息,让系统管理员在查找信息时更加方便,避免了错别字输入而导致无法快速查询及某些学生的姓名过于“复杂”而无法及时敲出该姓名;
  3. 内置了性别统计功能,使程序更加便捷于查找男女比例;
  4. 可以将已有的信息输出到txt文件上,模拟打印功能。

二、系统设计

  1. 实现技术:Python程序设计语言
  2. 数据结构设计:采用字典和数组存放学生信息
  3. 系统模块设计

系统模块规划如上图所示。

三、系统功能的实现函数

(1) 显示界面 功能

处理思路:使用print()打印菜单内容

# 定义功能界面函数
def info_print():
    print('\n请选择 功能------------')
    print('-' * 20)
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员信息')
    print('5.显示/打印所有学员(txt)')
    print('6.删除txt文件')
    print('0.退出系统')
    print('-' * 20)

(2) 添加学员信息 功能

处理思路:使用字典接收用户输入学员信息,再将字典转存入列表

# 定义添加学员信息的函数
def add_info():
    # 1.接收用户输入学员信息
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_sex = input('请输入性别:(男或女)')
    new_tel = input('请输入手机号:')
    # 声明info是全局变量
    global info
    # 2.检测用户输入的姓名是否存在,存在则报错提示
    for i in info:
        if new_name == i['name']:
            print('用户已存在')
            return

    # 3.如果用户输入的姓名不存在,则添加该学员信息
    info_dict = {'id': new_id, 'name': new_name, 'sex': new_sex, 'tel': new_tel}
    # 4.将用户输入的数据追加到字典
    # 5.将这个学员的字典数据追加到列表
    info.append(info_dict)

(3) 删除学员 功能

处理思路:输入姓名,匹配是否存在,是则删除

# 删除学员功能函数
def del_info():
    # 1.用户输入要输出的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    global info
    # 2.判断学员是否存在,存在则删除,否则报错提示
    for i in info:
        if del_name == i['name']:
            info.remove(i)
            break
    else:
        print('该学员不存在')
    print(info)

(4) 修改学员信息 功能

处理思路:输入需修改学员姓名,判断是否存在,是则进行修改

# 修改函数
def modify_info():
    # 1.用户输入要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')
    global info
    # 2.判断学员是否存在:存在则修改,否则报错
    for i in info:
        if modify_name == i['name']:
            i['name'] = input('请输入新的姓名')
            i['id'] = input('请输入新的学号')
            i['sex'] = input('请输入性别')
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        print('该学员不存在')
    print(info)

(5) 精准查询 功能

处理思路:输入学员全名,若存在则显示该学员信息

# 查询学员
def search_info():
    # 1.输入要查找的学员姓名:
    search_name = input('请输入要查找的学员姓名:')
    global info
    # 2.判断学员是否存在:是则显示该生信息,否则报错提示
    for i in info:
        if search_name == i['name']:
            print('查找到的学员信息如下:-------------')
            print(f"该学员的学号是{i['id']},姓名是{i['name']},性别为:{i['sex']},手机号是{i['tel']}")
            break
    else:
        print('查无此人......')

(6) 模糊查找 功能

处理思路:只通过输入学员的姓名中的单个或多个字来查找有类似的学员信息

# 模糊查找
def fuzzy_finder(key, data):
    suggestions = []
    pattern = '.*%s.*' % key    # 正则表达式
    regex = re.compile(pattern)
    for item in data:
        match = regex.search(item['name'])
        if match:
            suggestions.append(item)
    return suggestions

(7) 统计性别 功能

处理思路:额外给定两个数组分别存储男,女人数。将遍历到的元素分配到对应数组,输出数组长度,即为男女人数。

# 统计性别
def sex_ratio():
    global info, boys, girls
    for i in info:
        if i['sex'] == '女':
            girls.append(i)
        elif i['sex'] == '男':
            boys.append(i)
    print(f'男生人数为:{len(boys)},女生人数为:{len(girls)}')

(8) 显示所有学员信息 功能

处理思路:在控制台上输出列表中的字典内容

def print_all():
    print('学号\t姓名\t性别\t手机号')
    for i in info:
        print(f"该学员的学号是{i['id']},姓名是{i['name']},性别为:{i['sex']},手机号是{i['tel']}")

(9) 输出数组内容为txt文档 功能

处理思路:在桌面上建立一个txt文件,将存储学员信息的数组写入到该文件

def create_file():
    file = open("C:\\Users\\ASUS\\Desktop\\myTxt.txt", 'w', encoding="UTF-8")  # 写入内容
    file.write(str(info))
    file.close()

(10) 删除txt文档 功能

处理思路:永久删除该txt文档(无法在回收站找回)

def delete_file():
    os.unlink("C:\\Users\\ASUS\\Desktop\\myTxt.txt")
    print("myTxt.txt已被删除")

四、参考源码(全)

import re
import os

info = []
boys = []
girls = []


# 定义功能界面函数
def info_print():
    print('\n请选择 功能------------')
    print('-' * 20)
    print('1.添加学员')
    print('2.删除学员')
    print('3.修改学员')
    print('4.查询学员信息')
    print('5.显示/打印所有学员(txt)')
    print('6.删除txt文件')
    print('0.退出系统')
    print('-' * 20)


# 定义添加学员信息的函数
def add_info():
    # 1.接收用户输入学员信息
    new_id = input('请输入学号:')
    new_name = input('请输入姓名:')
    new_sex = input('请输入性别:(男或女)')
    new_tel = input('请输入手机号:')
    # 声明info是全局变量
    global info
    # 2.检测用户输入的姓名是否存在,存在则报错提示
    for i in info:
        if new_name == i['name']:
            print('用户已存在')
            return

    # 3.如果用户输入的姓名不存在,则添加该学员信息
    info_dict = {'id': new_id, 'name': new_name, 'sex': new_sex, 'tel': new_tel}
    # 4.将用户输入的数据追加到字典
    # 5.将这个学员的字典数据追加到列表
    info.append(info_dict)


# 删除学员功能函数
def del_info():
    # 1.用户输入要输出的学员姓名
    del_name = input('请输入要删除的学员的姓名:')
    global info
    # 2.判断学员是否存在,存在则删除,否则报错提示
    for i in info:
        if del_name == i['name']:
            info.remove(i)
            break
    else:
        print('该学员不存在')
    print(info)


# 修改函数
def modify_info():
    # 1.用户输入要修改的学员的姓名
    modify_name = input('请输入要修改的学员的姓名:')
    global info
    # 2.判断学员是否存在:存在则修改,否则报错
    for i in info:
        if modify_name == i['name']:
            i['name'] = input('请输入新的姓名')
            i['id'] = input('请输入新的学号')
            i['sex'] = input('请输入性别')
            i['tel'] = input('请输入新的手机号:')
            break
    else:
        print('该学员不存在')
    print(info)


# 查询学员
def search_info():
    # 1.输入要查找的学员姓名:
    search_name = input('请输入要查找的学员姓名:')
    global info
    # 2.判断学员是否存在:是则显示该生信息,否则报错提示
    for i in info:
        if search_name == i['name']:
            print('查找到的学员信息如下:-------------')
            print(f"该学员的学号是{i['id']},姓名是{i['name']},性别为:{i['sex']},手机号是{i['tel']}")
            break
    else:
        print('查无此人......')


# 模糊查找
def fuzzy_finder(key, data):
    suggestions = []
    pattern = '.*%s.*' % key    # 正则表达式
    regex = re.compile(pattern)
    for item in data:
        match = regex.search(item['name'])
        if match:
            suggestions.append(item)
    return suggestions


# 统计性别
def sex_ratio():
    global info, boys, girls
    for i in info:
        if i['sex'] == '女':
            girls.append(i)
        elif i['sex'] == '男':
            boys.append(i)
    print(f'男生人数为:{len(boys)},女生人数为:{len(girls)}')


# 显示所有学员信息
def print_all():
    print("1.控制台显示\n2.打印到为txt文件(可供下载)")
    myFind = int(input("输入操作代码:"))
    if myFind == 1:
        print('学号\t姓名\t性别\t手机号')
        for i in info:
            print(f"该学员的学号是{i['id']},姓名是{i['name']},性别为:{i['sex']},手机号是{i['tel']}")
    elif myFind == 2:
        create_file()
    else:
        print("输入有误")


def create_file():
    file = open("C:\\Users\\ASUS\\Desktop\\myTxt.txt", 'w', encoding="UTF-8")  # 写入内容
    file.write(str(info))
    file.close()


def delete_file():
    os.unlink("C:\\Users\\ASUS\\Desktop\\myTxt.txt")
    print("myTxt.txt已被删除")


while True:
    # 1.显示功能界面
    info_print()
    # 2.用户输入功能序号
    user_num = int(input('请输入功能序号:'))
    # 3.按照用户输入的功能序号,执行不同的功能(函数)
    if user_num == 1:
        add_info()
    elif user_num == 2:
        del_info()
    elif user_num == 3:
        modify_info()
    elif user_num == 4:
        print('请选择查找方式:\n1.精准查找\n2.模糊查找\n3.统计男女\n0.退出')
        myFind = int(input())
        if myFind == 1:
            search_info()
        elif myFind == 2:
            findName = input('请输入要查找的学员姓名:')
            result = fuzzy_finder(findName, info)
            print(result)
        elif myFind == 3:
            sex_ratio()
        elif myFind == 0:
            print('返回主菜单')
            continue
        else:
            print('输入有误,已返回主菜单')
            continue
    elif user_num == 5:
        print_all()
    elif myFind == 6:
        delete_file()
    elif user_num == 0:
        exit_flag = input('确定要退出吗? yes or no')
        if exit_flag == 'yes':
            print('已退出程序')
            break
        elif exit_flag == 'no':
            print('返回主菜单')
            continue
        else:
            print('输入有误,已返回主菜单')
            continue
    else:
        print('输入的功能序号有误')
        continue

小小作业,溜了溜了~

-End-

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐