基于Python的简易宿舍管理系统 / 学生信息管理系统(重写带界面版)(课程作业附课程小论文)

本文介绍了使用Python实现的宿舍管理系统和学生信息管理系统,包括列表、字典、函数和循环等基础知识的应用,以及基本的增删改查功能。还展示了如何通过Tkinter实现GUI界面,提升用户体验。
该文章已生成可运行项目,

本文所有基础知识可通过此链接进行训练点我开练

本次为三个月学校学习的课程作业,仅用到Python入门知识,简旦易懂。

涉及到的主要有:列表,字典,函数定义调用,循环结构等入门知识

可满足大部分学校此课的基本要求,但添加的功能较少,可在此基础上进行二创,欢迎借鉴!

话不多说,上代码!

一、宿舍管理系统

message = []
room_number = []
room_name = []


# 欢迎界面
def welcome():
    print('欢迎使用XXXX大学学生宿舍管理系统')


# 目录
def catalogue():
    print('1.添加学生住宿信息')
    print('2.修改学生住宿信息')
    print('3.删除学生信息')
    print('4.浏览学生信息')
    print('5.查找住宿情况')
    print('6.退出系统')


# 1.添加信息功能
def add(name, classes, phone, building, room, berth):
    student = {'name': name, 'classes': classes, 'phone': phone, 'building': building, 'room': room, 'berth': berth}
    message.append(student)
    print('添加信息成功')


# 2.修改信息功能
def alter(name, new_classes, new_phone, new_building, new_room, new_berth):
    for student in message:
        if student['name'] == name:
            student['classes'] = new_classes
            student['phone'] = new_phone
            student['building'] = new_building
            student['room'] = new_room
            student['berth'] = new_berth
            print('修改信息成功')
            break


# 3.删除信息功能
def delete(name):
    for student in message:
        if student['name'] == name:
            message.remove(student)
            break


# 4.浏览学生信息
def details():
    print('name\t\tclasses\t\tphone\t\tbuilding\t\troom\t\tberth')
    for student in message:
        print("%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s" % \
              (student['name'], student['classes'], student['phone'], \
               student['building'], student['room'], student['berth']))


# 5.查找住宿情况
def seek():
    print('*' * 15)
    print('a.按学生姓名查询')
    print('b.按宿舍号查找')
    print('c.返回')


# a.按学生姓名查询学生住宿情况
def names(na):
    for student in message:
        if student['name'] == na:
            print('name\t\tclasses\t\tphone\t\tbuilding\t\troom\t\tberth')
            print("%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s\t\t%-10s" % \
                  (student['name'], student['classes'], student['phone'], \
                   student['building'], student['room'], student['berth']))
            break
        else:
            print('查无此人')


# b.按宿舍号查找宿舍入住情况
def buildings(roo):
    for student in message:
        if student['room'] == roo:
            print(room_name)
            break
        else:
            print("无")


def ehk():
    while True:
        welcome()
        catalogue()
        command = input('请输入你的选择:')
        if command == '6':
            print('欢迎下次光临')
            break
        elif command == '1':
            print('添加新同学')
            name = input('请输入姓名:')
            classes = input('请输入班级:')
            phone = input('请输入电话号码:')
            building = input('请输入楼号:')
            room = input('请输入宿舍号:')
            berth = input('请输入床位:')
            room_number.append(room)
            if room not in room_number:
                pass
            else:
                room_name.append(name)
            add(name, classes, phone, building, room, berth)
        elif command == '2':
            print('修改学生信息')
            name = input('请输入要修改的学生的姓名:')
            classes = input('请输入新的的班级:')
            phone = input('请输入新的电话号码:')
            building = input('请输入新的楼号:')
            room = input('请输入新的房间号:')
            berth = input('请输入新的床位:')
            alter(name, classes, phone, building, room, berth)
        elif command == '3':
            print('删除学生信息')
            name = input('请输入要删除的学生的姓名:')
            delete(name)
        elif command == '4':
            print('浏览学生信息')
            details()
        elif command == '5':
            print('查找住宿情况')
            seek()
            com = input('请输入选项:')
            if com == 'a':
                print('按学生姓名查询')
                na = input('请输入学生姓名:')
                names(na)
            elif com == 'b':
                print('按宿舍号查找')
                roo = input('请输入宿舍号:')
                buildings(roo)
            elif com == 'c':
                continue
            else:
                pass
        else:
            pass


# 定义列表,用来记录用户名和密码:
users = ['张三', '李四']
passwd = ['zhangsan', 'lisi']

while True:
    count = 0
    if count < 3:
        user = input("用户名:")
        mima = input("密码:")
        count += 1
        if user in users:
            index = users.index(user)
            pass_wd = passwd[index]
            if mima == pass_wd:
                print("%s登录成功" % user)
                ehk()
                break
            else:
                print("%s登录失败" % user)
        else:
            print("%s用户不存在" % user)
    else:
        print("已经超过三次机会")
        break

此系统仍有很多不足,如制表未对齐,功能少,不可存储多次班级宿舍信息进行归类等,有精力将进行修改完善。对此系统有任何疑问也可私聊询问。

另附课程小论文,在资源中可以免费下载

二、学生信息管理系统

24/5/27更新:最近有学妹找我,遇见了同一个老师,所以给做了一个学生信息管理系统,这次的版本相较于之前的加了tk的GUI界面,因为本人现在主要是C++方向的学习,Python很久没有写了,所以关于上一篇的bug很多没有改,也不再回答评论中的提问,毕竟过去一两年的代码又有多少人还记得,再者每个人的错误都不一样,更多的可能是环境的问题,这次给大家新的管理系统,同样这次的代码不会回答bug,像这样很基础的管理系统,问GPT同样可以解决,除非你加V我可能会回复你的问题

关于论文,我已经放在资源了,自取,积分是平台自动设置的,有时间我会给改回去

import tkinter as tk
from idlelib import window
from tkinter import messagebox, simpledialog

student_list = []
def menu():
    print("----------学生管理系统-----------")
    print("-----------功能菜单-------------")
    print('学生管理系统 V1.0')
    print('1.录入学生信息')
    print('2.删除学生信息')
    print('3.修改学生信息')
    print('4.查找学生信息')
    print('5.统计学生总人数')
    print('6.排序')
    print('7.显示所有学生信息')
    print('8.退出系统')
    cmd = input('请输入您的选择:')
    print('-' * 30)
    return cmd
def add_student():
    def add_student_info():
        name = name_entry.get()
        classes = classes_entry.get()
        student_id = student_id_entry.get()
        scores = scores_entry.get()
        # 添加学生信息到 student_list
        student_list.append({"name": name, "classes": classes, "id": student_id, "scores": scores})
        messagebox.showinfo("展示结果", "添加成功")
        # 清空输入框
        name_entry.delete(0, tk.END)
        classes_entry.delete(0, tk.END)
        student_id_entry.delete(0, tk.END)
        scores_entry.delete(0, tk.END)

    global student_list
    add_window = tk.Toplevel()
    add_window.title("录入学生信息")
    add_window.geometry("400x200")

    tk.Label(add_window, text="姓名:").grid(row=0, column=0)
    name_entry = tk.Entry(add_window)
    name_entry.grid(row=0, column=1)

    tk.Label(add_window, text="班级:").grid(row=1, column=0)
    classes_entry = tk.Entry(add_window)
    classes_entry.grid(row=1, column=1)

    tk.Label(add_window, text="学号:").grid(row=2, column=0)
    student_id_entry = tk.Entry(add_window)
    student_id_entry.grid(row=2, column=1)

    tk.Label(add_window, text="成绩:").grid(row=3, column=0)
    scores_entry = tk.Entry(add_window)
    scores_entry.grid(row=3, column=1)

    tk.Button(add_window, text="确定", command=add_student_info).grid(row=4, column=1)
    add_window.mainloop()


def delete_student():
    def delete_student_info():
        nonlocal name
        name = name_entry.get()
        for i, student in enumerate(student_list):
            if student['name'] == name:
                del student_list[i]
                messagebox.showinfo("展示结果", "删除成功")
                break
        else:
            messagebox.showinfo("展示结果", "学生不存在")

    name = None
    name_entry = None
    delete_window = tk.Toplevel()
    delete_window.title("删除学生信息")
    delete_window.geometry("300x150")

    tk.Label(delete_window, text="请输入学生姓名:").pack()
    name_entry = tk.Entry(delete_window)
    name_entry.pack()

    tk.Button(delete_window, text="确定", command=delete_student_info).pack()
    delete_window.mainloop()

def query_student():
    def update_student_info():
        nonlocal name
        name = name_entry.get()
        for student in student_list:
            if student['name'] == name:
                student['name'] = new_name.get()
                student['classes'] = new_classes.get()
                student['id'] = new_id.get()
                student['scores'] = new_scores.get()
                messagebox.showinfo("展示结果", "修改成功")
                return
        messagebox.showinfo("展示结果", "学生不存在")

    name = None
    update_window = tk.Toplevel()
    update_window.title("修改学生信息")
    update_window.geometry("400x300")

    tk.Label(update_window, text="姓名:").grid(row=0, column=0)
    name_entry = tk.Entry(update_window)
    name_entry.grid(row=0, column=1)

    tk.Label(update_window, text="新姓名:").grid(row=1, column=0)
    new_name = tk.Entry(update_window)
    new_name.grid(row=1, column=1)

    tk.Label(update_window, text="新班级:").grid(row=2, column=0)
    new_classes = tk.Entry(update_window)
    new_classes.grid(row=2, column=1)

    tk.Label(update_window, text="新学号:").grid(row=3, column=0)
    new_id = tk.Entry(update_window)
    new_id.grid(row=3, column=1)

    tk.Label(update_window, text="新成绩:").grid(row=4, column=0)
    new_scores = tk.Entry(update_window)
    new_scores.grid(row=4, column=1)

    tk.Button(update_window, text="确定", command=update_student_info).grid(row=5, column=1)
    update_window.mainloop()

def find_student():
    mode = simpledialog.askstring("查询方式", "请输入查询方式(1.姓名 2.学号):", parent=window)
    if mode == '1':
        name = simpledialog.askstring("输入姓名", "请输入学生姓名:", parent=window)
        for student in student_list:
            if student['name'] == name:
                messagebox.showinfo("查询结果",
                                    f"姓名: {student['name']}\n班级: {student['classes']}\n学号: {student['id']}\n成绩: {student['scores']}")
                return
        messagebox.showinfo("查询结果", "未找到该学生")
    elif mode == '2':
        student_id = simpledialog.askstring("输入学号", "请输入学生学号:", parent=window)
        for student in student_list:
            if student['id'] == student_id:
                messagebox.showinfo("查询结果",
                                    f"姓名: {student['name']}\n班级: {student['classes']}\n学号: {student['id']}\n成绩: {student['scores']}")
                return
        messagebox.showinfo("查询结果", "未找到该学生")
    else:
        messagebox.showinfo("查询结果", "无效的查询方式")


def sort_students():
    # 假设按成绩排序
    student_list.sort(key=lambda x: float(x['scores']), reverse=True)
    sorted_students = {student['id']: student for student in student_list}
    messagebox.showinfo("操作完成", "学生信息已按成绩排序")
    # 可以选择在这里显示排序后的学生信息
    for student_id, student_info in sorted_students.items():
        print(f"学号: {student_id}, 姓名: {student_info['name']}, 成绩: {student_info['scores']}")


# def display_all_students(student_list):
#     for student in student_list:
#         print(f"姓名: {student['name']}, 班级: {student['classes']}, 学号: {student['id']}, 成绩: {student['scores']}")

def display_all_students(student_list):
    students_info = "\n".join(
        f"姓名: {student['name']}, 班级: {student['classes']}, 学号: {student['id']}, 成绩: {student['scores']}"
        for student in student_list
    )
    messagebox.showinfo("所有学生信息", students_info)
def count_students():
    total_students = len(student_list)
    messagebox.showinfo("学生总人数", f"目前系统中共有 {total_students} 名学生")

def exit_system():
    window.quit()

def main():

    # 创建按钮并添加到主窗口
    buttons = {
        "1.录入学生信息": add_student,
        "2.删除学生信息": delete_student,
        "3.修改学生信息": query_student,
        "4.查找学生信息": find_student,
        "5.统计学生总人数": count_students,
        "6.排序学生信息": sort_students,
        "7.显示所有学生信息": lambda: display_all_students(student_list),
        "8.退出系统": exit_system
    }

    for text, command in buttons.items():
        if text == "8.退出系统":
            # 为退出系统按钮设置一个确认对话框
            def command_with_confirmation():
                response = simpledialog.askyesno("确认退出", "你确定要退出系统吗?")
                if response:
                    window.quit()

            btn = tk.Button(window, text=text, command=command_with_confirmation)
        else:
            btn = tk.Button(window, text=text, command=command)
        btn.pack()



# 主窗口初始化
window = tk.Tk()
window.title('学生管理系统')
window.geometry("800x600")

# 创建按钮并添加到主窗口

b1 = tk.Button(window, text="1.录入学生信息", command=add_student)
b1.pack()

b2 = tk.Button(window, text="2.删除学生信息", command=delete_student)
b2.pack()

b3 = tk.Button(window, text="3.修改学生信息", command=query_student)
b3.pack()

b4 = tk.Button(window, text="4.查找学生信息", command=find_student)
b4.pack()

b5 = tk.Button(window, text="5.统计学生总人数", command=count_students)
b5.pack()

b6 = tk.Button(window, text="6.排序学生信息", command=sort_students)
b6.pack()

b7 = tk.Button(window, text="7.显示所有学生信息", command=lambda: display_all_students(student_list))
b7.pack()

b8 = tk.Button(window, text="8.退出系统", command=exit_system)
b8.pack()
# 启动事件循环
window.mainloop()


# 确保程序在被调用时执行主函数
if __name__ == "__main__":
    main()


本文章已经生成可运行项目
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Outlier_9

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值