学生信息管理系统-1.0(无界面版 )

python基础课的期末作业,

留个记录,主要是比普通的多了用pandas和openpyxl两个库,从excel导出和导入功能放到append部分:

效果:

 正题

分7个部分,因为我是新手方便编写,结构如下:

append.py

import pandas as pd
import openpyxl

menu_append = '''
------学生信息管理系统------
1. 增加单个学生信息
2. 从excel导入学生信息
3. 导出学生信息到excel
0. 返回上级菜单
---------------------------
'''
def add_student(db):
    id = input("请输入学号:").strip()
    name = input("请输入姓名:").strip()
    class_name = input("请输入班级:").strip()

    # 检查学号是否重复
    for student in db:
        if student['id'] == id:
            print("学号已存在,请使用其他学号。")
            return

    # 添加学生信息到数据库
    new_student = {
        'id': id,
        'name': name,
        'class_name': class_name  # 确保使用合适的键名
    }
    db.append(new_student)
    print("学生信息添加成功!")


def export_students_to_excel(db):
    file_path = input("请输入要保存的Excel文件路径(包括文件名和后缀,如output.xlsx):").strip()
    
    # 将数据库转换为DataFrame
    df = pd.DataFrame(db)
    
    try:
        # 将DataFrame写入Excel文件
        df.to_excel(file_path, index=False)
        print("学生信息导出成功!")
    except Exception as e:
        print(f"导出Excel文件时发生错误:{e}")




def import_students_from_excel(db):
    file_path = input("请输入Excel文件路径:").strip()
    try:
        # 读取Excel文件
        data = pd.read_excel(file_path)

        # 遍历每一行,将学生信息添加到数据库
        for index, row in data.iterrows():
            id = row['学号']  # 假设Excel中有“学号”这一列
            name = row['姓名']  # 假设Excel中有“姓名”这一列
            class_name = row['班级']  # 假设Excel中有“班级”这一列

            # 检查学号是否重复
            if any(student['id'] == id for student in db):
                print(f"学号 {id} 已存在,跳过该学生。")
                continue

            # 添加学生信息到数据库
            new_student = {
                'id': id,
                'name': name,
                'class_name': class_name
            }
            db.append(new_student)

        print("学生信息从Excel导入成功!")

    except Exception as e:
        print(f"导入Excel文件时发生错误:{e}")

def db_append(db):
    new_db = db
    while True:
        print(menu_append)
        choice = input("请输入选项:")
        if choice == "1":
            add_student(new_db)
            continue
        elif choice == "2":
            import_students_from_excel(new_db)
            continue
        elif choice == "3":
            export_students_to_excel(new_db)  
            continue
        elif choice == "0":
            break
        else:
            print("输入错误,请重新输入!")
    return new_db


 delete.py

from display import search_by_id
menu_delete = '''
--------学生信息管理系统--------
1. 删除单个学生信息
2. 批量删除学生信息
3. 条件删除学生信息
0. 返回上级菜单
--------------------------------
'''

def delete_by_id(db, id):
    for i in db:
        if i['id'] == id:
            db.remove(i)
    return db

def db_delete(db):
    new_db = db
    while True:
        print(menu_delete)
        choice = input("请输入选项:")
        if choice == '1':
            id = input("请输入要删除的学生ID:")
            if search_by_id(db, id) is None:
                print("未找到输入的ID")
            new_db = delete_by_id(new_db, id)
            print("删除成功!")
            continue
        elif choice == '2':
            ids = input("请输入要删除的学生ID,多个ID用空格分隔:")
            ids = ids.split()
            for id in ids:
                if search_by_id(db, id) is None:
                    print(f"未找到输入的ID: {id}")
                new_db = delete_by_id(new_db, id)
            print("批量删除成功!")
            continue
        elif choice == '3':
            print("条件删除功能暂未实现!")
            continue
        elif choice == '0':
            break
        else:
            print("输入错误,请重新输入!")
    return new_db

 modify.py

from display import search_by_id

menu_modify = '''
--------学生信息管理系统---------
1. 修改学生信息
2. 批量修改学生信息
0. 返回上级菜单
--------------------------------
'''

def update_record(db, record):
    new_db = db
    old_record = search_by_id(db, record['id'])  # 找到原记录
    new_db.remove(old_record)  # 从原记录中删除
    new_db.append(record)  # 添加新记录
    return new_db  # 返回更新后的数据库

def db_modify(db):
    new_db = db
    while True:
        print(menu_modify)
        choice = input("请输入选项:")
        if choice == '1':
            id = input("请输入学生ID:")
            record = search_by_id(db, id)
            if len(record) != 0:
                print("找到记录:可修改")
                print(record)
            else:
                print("未找到记录!")
            name = input("请输入学生姓名:")
            calss_name = input("请输入班级名称:")
            record['name'] = name
            record['class_name'] = calss_name
            new_db = update_record(new_db, record)
            print("修改后的记录:")
            print(record)
            continue
        elif choice == '2':
            print("批量修改功能暂未开放!")
            continue
        elif choice == '0':
            break
        else:
            print("输入错误,请重新输入!")
    return new_db

 display.py

menu_display = '''
1 全部学生信息
2 按学号查询
3 按姓名查询
4 其他条件查询
0. 返回上一级菜单
'''
 
# 通过id查询学生信息
def search_by_id(db, id):
    for i in db:
        if i['id'] == id:
            return i  # 返回包含找到的记录的列表
    else:
        return []  # 如果没有找到,返回一个空列表

# 通过姓名查询学生信息
def search_by_name(db, name):
    for i in db:
        if i['name'] == name:
            return [i]  # 返回包含找到的记录的列表
    else:
        return []  # 如果没有找到,返回一个空列表

# 显示所有结果
def show_all(db):
    if db is None:
        print("学生数据库未初始化!")
        return
    total = len(db)
    print(f"共有{total}条记录")
    for i in range(total):  # 遍历索引
        student = db[i]  # 获取学生字典
        student_id = student.get('id', '未知')  # 使用 get() 防止 KeyError
        student_name = student.get('name', '未知')
        student_class = student.get('class_name', '未知')
        print(f"学号:{student_id} 姓名:{student_name} 班级:{student_class}")


def show_result(records):
    if type(records) == list:
        total = len(records)
    else:
        total = 1
    print(f"共有{total}条记录")
    for student in range(total):  # 遍历索引
        if type(records) == list:
            student = records[student]  # 获取学生字典
        else:
            student = records  # 获取学生字典
        student_id = student.get('id', '未知')  # 使用 get() 防止 KeyError
        student_name = student.get('name', '未知')
        student_class = student.get('class_name', '未知')
        print(f"学号:{student_id} 姓名:{student_name} 班级:{student_class}")

def db_display(db):
    while True:
        print(menu_display)
        choice = input("请输入选项:")
        if choice == '1':
            show_all(db)
            continue
        elif choice == '2':
            id = input("请输入学号:")
            records = search_by_id(db, id)
            # 如果返回空列表,说明没有找到相关记录
            if records == []:
                print("没有查询到相关记录")
            else:
                show_result(records) 
        elif choice == '3':
            name = input("请输入姓名:")
            records = search_by_name(db, name)
            # 如果返回空列表,说明没有找到相关记录
            if records == []:
                print("没有查询到相关记录")
            else:
                show_result(records) 
        elif choice == '4':
            print("暂不支持其他条件查询")
            continue
        elif choice == '0':
            break
        else:
            print("输入错误,请重新输入")

count.py

def db_count(db):
    print('暂时不支持统计功能')

 db.py

import pickle as p

def loaddb(db_file):
    db = list()
    try:
        with open(db_file, 'rb') as f:
            db = p.load(f)
    except FileNotFoundError:
        print('数据库文件不存在!')
    return db


def dumpdb(db, db_file):
    try:
        with open(db_file, 'wb') as f:
            p.dump(db, f)
    except:
        print('数据库保存失败!')

if __name__ == '__main__':
    file_name = 'data.dat'
    data = [{'name': '张三', 'age': 20, 'gender': '男'}, {'name': '李四', 'age': 21, 'gender': '女'},{None}]
    with open(file_name, 'wb') as f:
        p.dump(data, f)
    with open(file_name, 'rb') as f:
        data = p.load(f)
        print(data)
        print('load success!')

 student.py

from pathlib import Path # 导入pathlib模块,用来处理文件路径
from db import loaddb, dumpdb # 导入数据库操作函数
from display import db_display # 导入数据库显示函数
from append import db_append # 导入数据库追加函数
from delete import db_delete # 导入数据库删除函数
from modify import db_modify # 导入数据库修改函数
from count import db_count # 导入数据库统计函数

menu = '''
---------------学生信息管理系统---------------  
1. 显示学生信息
2. 增加学生信息
3. 删除学生信息
4. 修改学生信息
5. 统计
0. 退出
---------------------------------------------
'''

db_file = 'student.dat'
if Path(db_file).exists():
    student_db = loaddb(db_file)
else:
    student_db = [
    {'id': '001', 'name': '张三', 'class_name': '一班'},
    {'id': '002', 'name': '李四', 'class_name': '二班'}
]
    dumpdb(student_db, db_file)
    print('数据库文件不存在,已自动创建!')

while True:
    print(menu)
    
    choice = int(input('请输入选项:'))
    if choice in [1, 2, 3, 4, 5, 0]:
        pass
    else:
        print('输入错误,请重新输入!')
        continue

    if choice == 1:
        db_display(student_db)
        continue
    elif choice == 2:
        student_db = db_append(student_db)
        continue
    elif choice == 3:
        student_db = db_delete(student_db)
        continue
    elif choice == 4:
        student_db = db_modify(student_db)
        continue
    elif choice == 5:
        db_count(student_db)
        continue
    elif choice == 0:
        dumpdb(student_db, db_file)
        print('退出完成!')
        break

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值