学生信息管理系统 python实现(含全部代码)

这是一个使用Python实现的学生信息管理系统,包括添加、查询、删除、修改和排序学生信息等功能。系统将数据保存在文本文件中,并能根据成绩进行排序,支持统计总人数。此外,还提供了将项目打包成exe文件的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学生信息管理系统笔记python

一、需求分析

应具备的功能:

  1. 添加学生信息及成绩信息
  2. 将学生信息保存在文件中
  3. 修改和删除学生信息
  4. 查询学生信息
  5. 根据学生成绩进行排序
  6. 统计学生总分

二、系统设计

学生信息管理系统的7大模块

  1. 录入学生信息模块

  2. 查找学生信息

  3. 删除学生信息

  4. 修改学生信息

  5. 学生成绩排名

  6. 统计学生总人数

  7. 显示全部学生信息

在这里插入图片描述

四、系统实现

main()

menu()

search()

delete()

modify()

insert()

total()

show()

sort()

五、打包项目生存exe文件

安装第三方包

pip install PyInstaller

打开命令行,打包exe

pyinstaller -F “D:\Program Files (x86)\pycharm\PythonProject\studentsys\stusystem.py”

图片中标红位置为exe程序存储位置。

图片中标红位置为exe程序存储位置。
在这里插入图片描述

六、代码实现

import os.path

filename = 'students.txt'


def main():
    while True:
        menu()
        choice = int(input('请选择功能'))
        if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
            if choice == 0:
                answer = input('您确定退出系统吗?y/n')
                if answer == 'y' or answer == 'Y':
                    print("欢迎您的使用!!")
                    break
                else:
                    continue
            elif choice == 1:
                insert()
            elif choice == 2:
                search()
            elif choice == 3:
                delete()
            elif choice == 4:
                modify()
            elif choice == 5:
                sort()
            elif choice == 6:
                total()
            elif choice == 7:
                show()
        input()


def menu():
    print('==================学生信息管理系统==============')
    print('===============功能菜单==================')
    print('\t\t\t1. 录入学生信息')
    print('\t\t\t2. 查找学生信息')
    print('\t\t\t3. 删除学生信息')
    print('\t\t\t4. 修改学生信息')
    print('\t\t\t5. 对学生成绩进行排序')
    print('\t\t\t6. 统计学生总人数')
    print('\t\t\t7. 显示所有学生信息')
    print('\t\t\t0. 退出程序')
    print('======================================')


def insert():
    student_list = []
    while True:
        id = input("请输入ID:")
        if not id:
            break
        name = input("请输入姓名:")
        if not name:
            break
        try:
            english = int(input("请输入英语成绩:"))
            python = int(input("请输入python成绩:"))
            java = int(input("请输入Java成绩:"))
        except:
            print("输入无效,请重新输入")
        # 将录入的学生信息保存在字典中
        student = {'id': id, 'name': name, 'english': english, 'python': python, 'java': java}
        # 将学生信息添加到列表中
        student_list.append(student)
        answer = input("是否继续添加y/n?")
        if answer == 'y':
            continue
        else:
            break
    # 调用save函数保存信息
    save(student_list)
    print("学生信息保存成功")


def save(lst):
    try:
        stu_txt = open(filename, 'a', encoding='utf-8')
    except:
        stu_txt = open(filename, 'w', encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item) + '\n')
    stu_txt.close()


def search():
    student_query = []
    while True:
        id = ''
        name = ''
        if os.path.exists(filename):
            mode = input("按ID查找请按1,按姓名查找请按2:")
            if mode == '1':
                id = input("请输入学生ID:")
            elif mode == '2':
                name = input("请输入学生新明:")
            else:
                print("输入有误,请重新输入")
                search()
            with open(filename, 'r', encoding='utf-8') as file:
                student = file.readlines()
                for item in student:
                    d = dict(eval(item))
                    if id != '':
                        if d['id'] == id:
                            student_query.append(d)
                    elif name != '':
                        if d['name'] == name:
                            student_query.append(d)
            show_query(student_query)
            # 清空列表
            student_query.clear()
            answer = input("是否继续查询?y/n")
            if answer == 'y':
                continue
            else:
                break
        else:
            print("无学生信息")
            return


def show_query(lst):
    if len(lst) == 0:
        print("无相关信息")
        return
    # 定义标题显示格式
    format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('ID', '姓名', '英语成绩', 'python成绩', 'Java成绩', '总成绩'))
    # 定义内容显示格式
    format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(format_data.format(item.get('id'),
                                 item.get('name'),
                                 item.get('english'),
                                 item.get('english'),
                                 item.get('java'),
                                 int( item.get('english')) + int( item.get('english')) + int( item.get('java'))
                                 ))


def delete():
    while True:
        student_id = input("请输入删除学生的ID:")
        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:  # 空列表等于 False,非空列表等于True
                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'id为{student_id}的学生信息已被删除')
                    else:
                        print(f'没有找到学生ID为{student_id}的学生')
            else:
                print("无学生信息")
                break
            show()
            answer = input("是否继续删除?y/n")
            if answer == 'y':
                continue
            else:
                break


def modify():
    show()
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8') as file:
            student_old = file.readlines()
    else:
        return
    student_id = input("请输入修改学生的ID:")
    with open(filename, 'w', encoding='utf-8') as wfile:
        for item in student_old:
            d = {}
            d = dict(eval(item))
            if d['id'] == student_id:
                print("已经找到学生信息,请修改相关信息")
                while True:
                    try:
                        d['name'] = input("请输入姓名")
                        d['english'] = input("请输入英语成绩")
                        d['python'] = input("请输入python成绩")
                        d['java'] = input("请输入Java成绩")
                    except:
                        print("输入有误,请重新输入")
                    else:
                        break
                    wfile.write(str(d) + '\n')
                    print("修改成功")
            else:
                wfile.write(str(d)+'\n')
            answer = input("是否继续修改其他学生信息?y/n")
            if answer == 'y':
                modify()
            else:
                return


def sort():
    show()
    if os.path.exists(filename):
        with open(filename, 'r', encoding= 'utf-8') as file:
            students = file.readlines()
        students_new = []
        for item in students:
            d = dict(eval(item))
            students_new.append(d)
    else:
        return

    # 排序方式
    asc_or_desc = input("请选择升序 0 还是降序 1?")
    if asc_or_desc == '0':
        asc_or_desc_bool = False
    elif asc_or_desc == '1':
        asc_or_desc_bool = True
    else:
        print("输入有误,请重新输入")
        sort()
    mode = input("请选择排序方式(1.英语 2.python 3.Java 4.总成绩):")
    if mode == '1':
        students_new.sort(key=lambda x : int(x['english']), reverse=asc_or_desc_bool)
        # x 代表列表students_new中的项
    elif mode == '2':
        students_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool)
    elif mode == '3':
        students_new.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool)
    elif mode == '4':
        students_new.sort(key=lambda x: int(x['english']) + int(x['python']) + int(x['java']), reverse=asc_or_desc_bool)
    else:
        print("输入有误,请重新输入")
    show_query(students_new)


def total():
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8') as file:
            students = file.readlines()
            if students:
                print(f"总共有{len(students)}名学生")
            else:
                print("无学生信息")
    else:
        print("无学生信息")


def show():
    student_query = []
    if os.path.exists(filename):
        with open(filename, 'r', encoding='utf-8') as file:
            student = file.readlines()
            for item in student:
                d = dict(eval(item))
                student_query.append(d)
        show_query(student_query)
        # 清空列表
        student_query.clear()
    else:
        print("无学生信息")
        return


if __name__ == '__main__':
    main()

<think>好的,用户遇到了Git合并时本地更改会被覆盖的问题,需要解决方案。根据之前的引用资料,解决方法主要有commit、stash和revert三种。首先,我得确认用户的具体情况,比如他们的本地更改是否已经完成,是否需要保留,或者是否可以丢弃。用户可能不太清楚这三种方法的适用场景,需要详细解释每个选项的步骤和优缺点。比如,commit适用于需要保留更改的情况,stash适合临时保存以便后续恢复,而revert则是直接撤销更改,适用于不需要保留的情况。需要结构清晰,分点说明,每个方法都给出操作步骤和适用场景,帮助用户理解哪种情况最适合他们。还要注意使用中文,避免技术术语过于复杂,让用户容易理解。同时,生成相关问题,可能涉及如何恢复stash的内容,或者如何避免频繁冲突等,扩展用户的知识点。另外,要确保LaTeX格式正确,但在这个问题中可能用不上数学公式,所以主要关注代码块和引用标识。检查引用是否正确,比如引用[^1]和[^2]的来源是否相关,用户提供的引用内容是否准确对应解决方案。 最后,确保回答真实可靠,操作步骤准确无误,避免误导用户。可能还需要提醒用户根据具体情况选择方法,比如如果有未完成的实验性代码,stash可能是更好的选择,而如果是确定要保留的修改,则应该commit。</think>要解决Git合并时本地更改被覆盖的问题,可根据不同场景选择以下三种方法: ### 一、提交本地更改(commit) **适用场景**:当本地更改已测试通过且需要保留到版本历史中。 **操作步骤**: 1. 将改动添加到暂存区: ```bash git add . # 添加所有文件 # 或指定文件 git add file1.txt file2.py ``` 2. 提交更改并添加描述: ```bash git commit -m "完成用户登录模块优化" ``` 3. 执行合并操作: ```bash git merge origin/main ``` **优点**:保留完整的开发记录,便于后续追溯[^1]。 ### 二、暂存更改(stash) **适用场景**:需要临时保存未完成的修改(如调试代码),优先处理合并操作。 **操作步骤**: 1. 保存当前工作状态: ```bash git stash # 可选添加备注 git stash save "用户登录模块调试代码" ``` 2. 查看暂存记录列表: ```bash git stash list ``` 3. 合并远程分支: ```bash git merge origin/main ``` 4. 恢复暂存内容: ```bash git stash pop # 恢复并删除最近一次暂存 # 或指定特定暂存 git stash apply stash@{1} ``` **优点**:保持工作目录整洁,特别适合处理紧急合并任务[^2]。 ### 三、撤销本地更改(revert) **适用场景**:本地修改可丢弃(如实验性代码或错误修改)。 **操作步骤**: 1. 撤销所有未提交的修改: ```bash git checkout -- . # 全部文件 # 或指定文件 git checkout -- file1.txt ``` 2. 执行合并操作: ```bash git merge origin/main ``` **风险提示**:此操作不可逆,需确认文件无需保留。 --- ### 对比决策表 | 方法 | 保留记录 | 可恢复性 | 适用阶段 | |---------|----------|----------|------------------| | commit | ✅ | ✅ | 功能开发完成时 | | stash | ❌ | ✅ | 开发中途临时切换 | | revert | ❌ | ❌ | 放弃无效修改 | ### 扩展应用场景 - 当存在多个暂存时,可用`git stash list`查看记录,通过`git stash apply stash@{n}`精准恢复 - 合并后出现冲突时,可使用`git mergetool`可视化工具解决冲突 - 长期分支开发推荐使用`git rebase`保持提交历史线性
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值