Python实践项目(二)学生信息管理系统

简介: Python实践项目(二)学生信息管理系统

实训内容

1、学生信息管理系统

2、具有添加,删除,查询,统计,显示,排序功能

//导入主函数
from
index import main

main()

主程序:

# 导入模块
import os
import re
# 建立一个名为student.text的文本用于保存文件
fileName = 'student.txt'
# 定义函数main()
def main():
    while True:
        menu()
        choice = int(input('请输入您的程序指令:'))
        if choice in [0, 1, 2, 3, 4, 5, 6]:
            if choice == 0:
                print("您确定要退出吗?yes/no")
                answer = input()
                if answer == 'yes':
                    print('感谢您的使用!!!')
                    break  # 终止
                else:
                    continue  # 中止
            elif choice == 1:
                insert()
            elif choice == 2:
                delete()
            elif choice == 3:
                search()
            elif choice == 4:
                total()
            elif choice == 5:
                show()
            elif choice == 6:
                sort()
        else:
            print('输入的指令不在范围内,请重新输入!!!')
def menu():
    print('==============================学生信息管理系统==============================')
    print('︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽功能菜单︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽︽')
    print("*" * 74)
    print("******", " " * 60, "******")
    print("******\t    1.添加学生信息", " " * 18, "4.统计学生总人数\t    ******")
    print("******\t    2.删除学生信息", " " * 18, "5.显示所有学生信息    ******")
    print("******\t    3.查询学生信息", " " * 18, "6.排序(以总成绩分数)  ******")
    print("******\t    0.退出学生信息管理系统", " " * 32, "******")
    print("******", " " * 60, "******")
    print("*" * 74)
    print('︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾︾')
def save(lst):
    stu_txt = open(fileName, 'a', encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item) + '\n')
    stu_txt.close()
# 录入学生信息
def insert():
    global phone
    student_list = []
    while True:
        id = input('请输入学号: ')
        if not id:
            break
        name = input('请输入姓名: ')
        if not name:
            break
        sex = input('请输入性别: ')
        if not sex:
            break
        # phone = input('请输入手机号: ')
        # if not phone:
        count = 0
        for i in range(1, 4):
            phone = input("请输入你的手机号: ")
            # 利用正则表达式进行限定
            tel = re.match(r"^1[3456789]\d{9}$", phone)
            if tel:
                print("输入成功!")
                break
            if tel != phone:
                count += 1
            if (count == 3):
                print("录入失败,请30秒后重试!")
            if (count != 3):
                print("录入错误,请核对你的手机号!")
        try:
            # 智育分满分70分,德育分满分20分,体育分满分10分
            zyf = int(input('请输入你的智育分:'))
            dyf = int(input('请输入你的德育分:'))
            tyf = int(input('请输入你的体育分:'))
        except:
            print('请您输入数字成绩!')
            continue
        # 将录入的学生信息保存到字典中
        student = {'id': id, 'name': name, 'sex': sex, 'phone': phone, 'zyf': zyf, 'dyf': dyf, 'tyf': tyf}
        # 将学生信息添加到列表中
        # 可删!!!!!
        student_list.append(student)
        answer = input('是否继续添加?yes/no\n')
        if answer == 'yes':
            continue
        else:
            break
    # 保存学生信息
    save(student_list)  # 封装
    print('学生信息录入完毕!!!')
def show_student(lst):
    # 传过来空列表
    if len(lst) == 0:
        print('没有查找到该生信息!')
        return
    # 定义标题显示格式
    format_title = '{:^5}\t{:^23}{:^5}\t{:^11}\t{:^12}\t{:^10}\t{:^10}\t{:^6}\t{:^6}\t'
    print(format_title.format('学号', '姓名', '性别', '手机号', '智育分', '德育分', '体育分', '总成绩', '分数等级'))
    # 定义内容的显示格式
    format_data = '{:^6}\t{:^6}\t{:^6}\t{:^31}{:^3}\t{:^10}\t{:^9}\t{:^12}\t{:^12}\t'
    for item in lst:
        sum = int(item['zyf']) + int(item['dyf']) + int(item['tyf'])
        # grade等级的使用
        grade = ''
        if sum >= 85:
            grade = 'A'
        if 75 <= sum < 85:
            grade = 'B'
        if 65 <= sum < 75:
            grade = 'C'
        if 60 <= sum < 65:
            grade = 'D'
        if sum < 60:
            grade = 'error'
        # sum,grade的输出格式不同
        # format_data.format(sum,grade))
        print(format_data.format(item['id'], item['name'], item['sex'], item['phone'],
                                 item['zyf'], item['dyf'], item['tyf'],
                                 sum, grade))
    print('全部学生信息显示完毕!!!')
# 查询学生信息
def search():
    while True:
        stu_query = []
        id = ''
        # 判断文件是否存在
        if os.path.exists(fileName):
            # if的使用
            if id == '':
                id = input('请输入要查找的学生学号:')
            else:
                print('您的输入有误,请重新输入!')
                continue
            # 如果文件存在,并且用户输入了正确的查询标号,则打开文件
            with open(fileName, 'r', encoding='utf-8') as rfile:
                students = rfile.readlines()
            # 转换为字典类型
            for item in students:
                d = dict(eval(item))
                if id != '':
                    if id == d['id']:
                        stu_query.append(d)  # 追加
            # 显示查询结果
            show_student(stu_query)
            # 是否继续查询其他学生信息
            answer = input('还要查询其他学生吗?yes/no\n')
            if answer == 'yes':
                continue
            else:
                break
        else:
            print('学生信息不存在!')
            return
    print('学生信息查询结束,请进行下一步操作!!!')
# 删除学生信息
def delete():
    while True:
        student_id = input('请输入要删除学生的学号:')
        if student_id != '':
            if os.path.exists(fileName):
                with open(fileName, 'r', encoding='utf-8') as file:
                    student_old = file.readlines()
            else:
                student_old = []
            flag = False  # 标记是否删除
            if student_old:
                with open(fileName, 'w', encoding='utf-8') as wfile:
                    d = {}
                    for item in student_old:
                        d = dict(eval(item))  # 将字符串转换为字典
                        if d['id'] != student_id:
                            wfile.write(str(d) + '\n')
                        else:
                            flag = True
                    if flag:
                        print(f'学号为{student_id}的学生信息已经删除')
                    else:
                        print(f'学生表中没有找到学号为{student_id}的学生')
            else:
                print('学生表已中无任何学生个人信息')
                break
            show()  # 重新显示所有学生信息
            answer = input('是否继续删除?yes/no\n')
            if answer == 'yes':
                continue
            else:
                break
    print('删除学生信息已结束,请你进行下一步操作!!!')
# 统计学生总人数
def total():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                print('一共有{}名学生'.format(len(students)))
            else:
                print('学生系统中还没有录入学生信息!')
    else:
        print('学生信息不存在!')
        return
    print('学生总人数统计完毕,请进行下一步操作!!!')
# 显示所有学生信息
def show():
    student_list = []
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students = rfile.readlines()
            # 判断读取到的学生信息是否为空
            if students:
                for item in students:
                    student_list.append(eval(item))
                # 展示学生信息
                show_student(student_list)
            else:
                print('学生文件中还没有录入学生信息!')
    else:
        print('学生文件不存在!')
        return
    print('学生信息已成功显示,请你进行下一步操作!!!')
# 对总学生成绩进行排序
def sort():
    # 判断文件是否存在,如果存在则打开文件,读取信息
    if os.path.exists(fileName):
        with open(fileName, 'r', encoding='utf-8') as rfile:
            students_list = rfile.readlines()
        students_new = []
        # 判断读取到的学生信息是否为空
        if students_list:
            # 将所有的item加入到students_new中
            for item in students_list:
                d = dict(eval(item))
                students_new.append(d)
                # 利用匿名函数与sort方法进行排序
                # True为降序,False升序
                students_new.sort(key=lambda x: int(x['zyf']) + int(x['dyf']) + int(x['tyf']),
                                  reverse=True)
            # 将排序后的成绩进行输出
            show_student(students_new)
    print('学生信息排序完成并成功显示,请你进行下一步操作!!!')
if __name__ == '__main__':
    main()

总结:

1.read ()
一次性将文件所有内容读取出来
2.与readlines
按行读取
3.float类型函数与int类型函数
4.分数名称大小写(Zyf and zyf)
5.sum相加问题
6.save保存分数等级的问题
7.(Python)解决lameError:name'XXX'is not defined的问题
8.python遇到NameError:name'_name_'is not defined这样的错误
name两端的双下划线
9.python学习-while True的用法
采用该语句的核心思想是如果出现错误的话,可以继续下一个循环。使用b
reak终止整个循环
对于学生管理系统有很大作用,不影响使用
10.python中使用fromat的时候报错IndexError: tuple index out of range
错误的原因是元组索引越界,因为后面format中的内容出现了赋值操作

运行结果:

相关文章
|
2月前
|
存储 数据采集 监控
Python定时爬取新闻网站头条:从零到一的自动化实践
在信息爆炸时代,本文教你用Python定时爬取腾讯新闻头条,实现自动化监控。涵盖请求、解析、存储、去重、代理及异常通知,助你构建高效新闻采集系统,适用于金融、电商、媒体等场景。(238字)
384 2
|
3月前
|
人工智能 Shell Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
245 0
|
3月前
|
异构计算 Python
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
ERROR: pip’s dependency resolver does not currently take into 报错-Python项目依赖冲突的解决方案-优雅草优雅草卓伊凡
361 1
|
3月前
|
API 语音技术 开发者
Python 项目打包,并上传到 PyPI,分享项目
本文介绍了如何使用 Poetry 打包并发布一个 Python 项目至 PyPI。内容包括:项目创建、配置 `pyproject.toml` 文件、构建软件包、上传至 PyPI、安装与使用。通过实例 iGTTS 展示了从开发到发布的完整流程,帮助开发者快速分享自己的 Python 工具。
机器学习/深度学习 算法 自动驾驶
671 0
|
3月前
|
存储 人工智能 算法
Python实现简易成语接龙小游戏:从零开始的趣味编程实践
本项目将中国传统文化与编程思维相结合,通过Python实现成语接龙游戏,涵盖数据结构、算法设计与简单AI逻辑,帮助学习者在趣味实践中掌握编程技能。
391 0
|
3月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
182 0
|
4月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
381 0
|
4月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
235 0
|
4月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
884 1

推荐镜像

更多