python 实现学生信息管理系统+MySql 数据库,包含源码及相关实现说明~

6 篇文章 1 订阅

学生信息管理系统

1、系统说明

python 编写的学生信息管理系统+MySQL数据库,实现了增删改查的基本功能。

2、数据库说明

本人使用的是 MySQL8.0 版本
数据库端口号为:3306
数据库用户名是:root
数据库名称是:practice
建立的表是:students

3、系统功能

  • 增加学生信息
  • 删除学生信息
  • 修改学生信息
  • 查询学生信息
  • 展示所有学生信息
  • 保存学生信息到 .txt 文件中
  • 退出系统

4、功能实现

本程序有两个功能文件 project.py 和 database.py,首先介绍 database.py 中的函数。
程序需要导入 pymysql 包,在运行代码前请先确定编程软件(本人使用的是pycharm)是否安装了 pymysql。

(1)condatabase():连接数据库函数,调用 pymysql 的方法 Connect(),其中参数包括数据库用户名,数据库密码,数据库 ip,数据库名称,数据库端口号以及字符集。其中需要用户手动输入数据库用户名,数据库密码,其他几项参数根据自己的信息写入代码中即可。如果用户输入的账户及密码有误则函数返回 False。
(2)add_student():向数据库中添加学生信息,操作数据库的固定流程:连接数据库,写 sql 语句,游标执行 sql 语句,关闭游标对象和数据库连接。不同之处在于根据不同的需求编写不同的 sql 语句。
(3)delete_student():删除数据库中的学生信息,具体实现同添加学生信息函数类似。
(4)select_student():查询数据库中的学生信息函数,注意该函数体中调用了 fetchone() 函数,若查询结果为空,该函数会返回 None。
(5)modify_student():修改数据库的学生信息,具体实现同添加学生信息函数类似。
(6)determine_student():判断学号是否已经在数据库中存在。
(7)show_student():输出学生信息,其中调用了 fetchall() 函数,会将查询结果以嵌套元组的方式返回。
(8)save_student():保存学生信息至 .txt 文件中,函数先判断系统中是否有学生信息,若系统为空,则提示错误信息无法保存;否则利用open()函数打开指定 .txt 文件利用 for 循环依次写入学生信息,最后记得关闭文件。

接下来是 project.py 中的函数介绍。

(1)menu():打印系统菜单函数,定义为类的静态方法。
(2)ui():用户登录函数,保存用户的数据库名称和数据库密码。
(3)add_student():增加学生信息函数,该函数可以一次增加任意数量的学生信息,而非每次只能添加一名学生;通过 for 循环依次由用户输入待添加的学生信息,若系统中不存在相同学号即可添加成功,若学号已存在,则提示错误信息无法添加。利用 database.py 中 DataBase 类中的 determine_student() 函数查询数据库中是否已经存在待添加学号学生信息。利用 DataBase 类中的 add_student() 函数向数据库中添加学生信息。
(4)delete_student():删除学生信息函数,同样利用 DataBase 类中的 determine_student() 函数查询数据库中是否存在待删除学号学生信息。若存在则利用 DataBase 类中的 delete_student() 函数删除数据库中的学生信息,否则返回无法删除提示。
(5)modify_student():修改学生信息函数,具体实现同删除学生信息函数类似,不同之处在于修改部分学生信息功能的实现,本程序中定义了一个 user_input() 方法,实现学生的信息可以不全部修改,若用户输入回车则对应项信息保持原值。
(6)select_student():查询学生信息函数,具体实现同删除学生信息函数类似。
(7)show_students():展示所有学生信息函数,调用 DataBase 类中的 show_student() 函数实现。
(8)data():保存学生信息函数,调用 DataBase 类中的 save_student() 函数实现。
(9)退出系统功能由 python 内置函数 exit() 实现。
(10)run():程序运行函数,在无限循环中判断用户输入为哪个功能代码相应地调用对应实现函数即可。若用户输入代码错误则系统给出错误提示。

5、程序源码

(1)database.py 文件

import pymysql

class DataBase:
    # 定义连接数据库对象和游标对象
    db=None
    cursor=None

    # 连接数据库
    def condatabase(self,user,password):
        try:
            self.db=pymysql.Connect(
                user=user,
                password=password,
                host="localhost",
                database="practice",
                port=3306,
                charset="utf8"
            )
            self.cursor=self.db.cursor()
            return True
        except:
            return False

    # 添加学生信息
    def add_student(self,user,password,sno,sname,sex,birthday,phone,dorm):
        self.condatabase(self,user,password)
        sql="insert into students values(%s,%s,%s,%s,%s,%s)"
        add_data=[sno,sname,sex,birthday,phone,dorm]
        try:
            self.cursor.execute(sql,add_data)
            self.db.commit()
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()

    # 删除学生信息
    def delete_student(self,user,password,sno):
        self.condatabase(self,user,password)
        sql="delete from students where sno=%s"
        del_data=[sno]
        try:
            self.cursor.execute(sql,del_data)
            self.db.commit()
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()

    # 查询指定学生信息
    def select_student(self,user,password,sno):
        self.condatabase(self,user,password)
        sql="select * from students where sno=%s"
        sel_data=sno
        try:
            self.cursor.execute(sql,sel_data)
            result=self.cursor.fetchone()
            print("学号:%s  姓名:%s  性别:%s  年龄:%s  电话:%s  宿舍号:%s" % (result[0],result[1],result[2],result[3],result[4],result[5]))
            return result[0],result[1],result[2],result[3],result[4],result[5]
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()

    # 修改学生信息,学号不可修改
    def modify_student(self,user,password,sno,sname,sex,birthday,phone,dorm):
        self.condatabase(self,user,password)
        sql="update students set sname=%s,sex=%s,birthday=%s,phone=%s,dorm=%s where sno=%s"
        mod_data=[sname,sex,birthday,phone,dorm,sno]
        try:
            self.cursor.execute(sql,mod_data)
            self.db.commit()
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()

    # 判断学号是否存在
    def determine_student(self, user, password, sno):
        self.condatabase(self, user, password)
        sql = "select * from students where sno = %s"
        sel_data=sno
        try:
            self.cursor.execute(sql,sel_data)
            row = self.cursor.fetchone()
            if row is not None:
                return True
        except:
            self.db.rollback()
            return False
        finally:
            self.cursor.close()
            self.db.close()

    # 输出学生信息
    def show_student(self, user, password):
        self.condatabase(self, user, password)
        sql = "select * from students"
        try:
            self.cursor.execute(sql)
            students = self.cursor.fetchall()
            if len(students)==0:
                print("系统中没有学生信息,请先添加!")
            else:
                for row in students:
                    print("学号:%s  姓名:%s  性别:%s  年龄:%s  电话:%s  宿舍号:%s" % (row[0], row[1], row[2], row[3], row[4], row[5]))
        except:
            self.db.rollback()
        self.db.close()

    # 另存学生信息
    def save_student(self,user,password):
        self.condatabase(self,user,password)
        sql="select * from students"
        try:
            self.cursor.execute(sql)
            result=self.cursor.fetchall()
            if len(result)==0:
                print("系统中没有学生信息,请先添加!")
            else:
                file=open("学生信息.txt","a")
                for row in result:
                    file.write("学号:%s\t姓名:%s\t性别:%s\t年龄:%s\t电话:%s\t宿舍号:%s\n" % (row[0], row[1], row[2], row[3], row[4], row[5]))
        except:
            self.db.rollback()
        finally:
            self.cursor.close()
            self.db.close()
            file.close()

(2)project.py 文件

from database import DataBase

class Student(object):
    # 定义用户名和密码
    user = None
    password = None

    # 添加学生信息
    def add_student(self):
        student_number = int(input("请输入添加的学生人数:"))
        for i in range(student_number):
            sno = input("请输入学号:")
            if not DataBase.determine_student(DataBase, self.user, self.password, sno):
                sname = input("请输入姓名:")
                sex = input("请输入性别:")
                birthday = input("请输入出生日期:")
                phone = input("请输入电话:")
                dorm = input("请输入宿舍号:")
                DataBase.add_student(DataBase, self.user, self.password, sno, sname, sex, birthday, phone, dorm)
                print("成功添加学号为【%s】的学生!\n"%sno)
            else:
                print("系统已存在学号为【%s】的学生信息,请勿重复添加!"%sno)

    # 删除学生信息
    def delete_student(self):
        sno=input("请输入需要删除的学生学号:")
        if DataBase.determine_student(DataBase,self.user,self.password,sno):
            DataBase.delete_student(DataBase,self.user,self.password,sno)
            print("成功删除学号为【%s】的学生!"%sno)
        else:
            print("系统中不存在学号为【%s】的学生,无法删除!"%sno)

    # 实现修改学生信息时,用户不输入则学生属性不发生改变的功能
    def user_input(self,message,info):
        s=input(message)
        if s=="":
            return info
        else:
            return s

    # 修改学生信息,学号不可修改
    def modify_student(self):
        sno=input("请输入需要修改的学生学号:")
        if DataBase.determine_student(DataBase,self.user,self.password,sno):
            sno, sname, sex, birthday, phone, dorm = DataBase.select_student(DataBase, self.user, self.password, sno)
            sname=self.user_input("请输入学生姓名:【回车不修改】",sname)
            sex = self.user_input("请输入学生性别:【回车不修改】",sex)
            birthday = self.user_input("请输入学生出生日期:【回车不修改】",birthday)
            phone = self.user_input("请输入学生电话:【回车不修改】",phone)
            dorm = self.user_input("请输入学生宿舍号:【回车不修改】",dorm)
            DataBase.modify_student(DataBase,self.user,self.password,sno,sname,sex,birthday,phone,dorm)
            print("成功修改学号为【%s】的学生信息!"%sno)
        else:
            print("系统中不存在学号为【%s】的学生,无法修改!"%sno)

    # 查询学生信息
    def select_student(self):
        sno = input("请输入需要查询的学生学号:")
        if DataBase.determine_student(DataBase, self.user, self.password, sno):
            DataBase.select_student(DataBase,self.user,self.password,sno)
        else:
            print("系统中不存在学号为【%s】的学生!" % sno)

    # 输出学生信息
    def show_students(self):
        DataBase.show_student(DataBase,self.user,self.password)

    # 保存学生信息
    def data(self):
        DataBase.save_student(DataBase, self.user, self.password)
        print("保存成功!")

    # 功能菜单打印
    @staticmethod
    def menu():
        print("**************************")
        print("**  输入:0  --退出程序--  **")
        print("**  输入:1  --添加学生--  **")
        print("**  输入:2  --输出学生--  **")
        print("**  输入:3  --删除学生--  **")
        print("**  输入:4  --查询学生--  **")
        print("**  输入:5  --修改学生--  **")
        print("**  输入:6  --另存学生--  **")
        print("**************************")

    # 登录界面
    def ui(self):
        print("*********************************")
        print("**     欢迎使用学生信息管理系统    **")
        print("**   请输入用户名和密码以进入系统   **")
        print("*********************************")
        self.user = input("请输入用户名(用户名输入 exit 则退出程序):")
        self.password = input("请输入密码:")
        print("-"*33)

    # 程序调用
    def run(self):
        while True:
            self.ui()
            if DataBase.condatabase(DataBase, self.user, self.password):
                print("登陆成功!!!")
                while True:
                    self.menu()
                    number = input("请输入功能前面的代码:")
                    if number == "1":
                        self.add_student()
                    elif number == "2":
                        self.show_students()
                    elif number == "3":
                        self.delete_student()
                    elif number == "4":
                        self.select_student()
                    elif number == "5":
                        self.modify_student()
                    elif number == "6":
                        self.data()
                    elif number == "0":
                        print("感谢使用,欢迎下次登陆!")
                        exit()
                    else:
                        print("您输入的序号不对,请重新输入!")

            elif self.user == "exit":
                exit()
            else:
                print("-"*33)
                print("用户名或密码错误,请重新输入!")

(3)main.py 文件

from project import Student

s=Student()
s.run()

6、运行结果

(1)输入用户名和密码登陆系统
在这里插入图片描述
(2)增加学生信息
在这里插入图片描述
在这里插入图片描述
(3)输出学生信息
在这里插入图片描述
(4)删除学生信息
在这里插入图片描述
(5)查询学生信息和修改学生信息
在这里插入图片描述
(6)保存学生信息
在这里插入图片描述在这里插入图片描述
(7)退出系统
在这里插入图片描述


若有任何问题欢迎各位小伙伴评论区留言交流呀~
希望大家都走在开满鲜花的路上呀~


版权说明

原文作者:早知晓
博文链接:Click here
转载请注明出处,谢谢合作~


  • 49
    点赞
  • 438
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 43
    评论
### 回答1: 学生宿舍管理系统是基于Python、PyQt5和MySQL开发的一个项目,旨在帮助学校高效管理学生宿舍的入住、退宿、维修等信息。下面是该项目的详细说明文档: 1. 系统功能 - 学生宿舍的入住管理:可以添加、删除、修改学生的宿舍信息,包括姓名、学号、宿舍楼号、宿舍号等内容。 - 学生宿舍的维修管理:可以记录宿舍的维修情况,包括宿舍号、维修日期、维修原因等信息,并能够查看历史维修记录。 - 学生宿舍的退宿管理:可以退宿学生,并更新宿舍的入住状态。 - 学生宿舍的查询功能:可以通过学号、宿舍楼号、宿舍号等信息,查询学生宿舍的相关信息。 2. 系统架构 - 前端界面使用PyQt5库实现,包括各个功能模块的界面设计。 - 后端数据存储使用MySQL数据库,存储学生宿舍的相关信息。 - Python作为开发语言,通过PyQt5库提供的方法与MySQL数据库进行交互。 3. 系统运行环境 - 操作系统:推荐使用Windows系统,也可以在Linux或Mac OS上运行。 - Python版本:推荐Python3.x版本。 - PyQt5安装:使用pip命令安装PyQt5库,pip install pyqt5。 - MySQL安装:安装MySQL数据库,并创建对应的数据库和表。 4. 运行方式 - 下载源码:从GitHub或其他源码托管平台下载学生宿舍管理系统源码。 - 配置数据库:在源码中修改连接数据库相关信息,包括MySQL的地址、用户名、密码等。 - 运行程序:通过Python命令运行主程序文件,即可启动系统界面。 - 页面操作:根据界面提供的按钮和输入框进行相应的添加、修改、删除、查询等操作。 5. 注意事项 - 由于本项目是基于Python和PyQt5开发的,需要对Python和GUI界面开发有一定的了解。 - 在使用该系统之前,需要创建对应的数据库和表,并将相关信息配置到源码中。 - 可以根据实际需要进行功能的扩展和修改,例如增加宿舍楼管理、学生信息管理等模块。 这个学生宿舍管理系统源码提供了一个简单易用的GUI界面,方便学校管理学生宿舍的各项信息,并且可以快速查询和统计宿舍相关数据,帮助学校实现宿舍管理的自动化和规范化。 ### 回答2: 学生宿舍管理系统是基于Python、PyQt5和MySQL实现的一款图形用户界面(GUI)应用程序。该系统旨在帮助学校管理学生宿舍的入住、退房和维护等事务。 系统数据库设计如下: 1. 学生表(Student):包含学生的基本信息,如学号、姓名、性别、年龄等。 2. 宿舍楼表(DormitoryBuilding):记录宿舍楼的信息,如楼号、楼层数、可容纳人数等。 3. 宿舍房间表(DormitoryRoom):每个宿舍楼内包括多个宿舍房间,该表记录了宿舍房间的编号、所在楼号、可容纳人数等。 4. 入住记录表(CheckInRecord):记录学生的入住情况,包括入住日期、房间号、学生信息等。 系统的功能模块如下: 1. 学生管理:可以对学生的基本信息进行增加、删除、修改和查询操作。 2. 宿舍楼管理:可以对宿舍楼的信息进行增加、删除、修改和查询操作。 3. 宿舍房间管理:可以对宿舍房间的信息进行增加、删除、修改和查询操作。 4. 入住管理:可以对学生的入住情况进行登记、查询和退房操作。 5. 统计功能:可以统计宿舍楼的入住情况和宿舍房间的入住率。 系统的GUI界面采用PyQt5库进行开发,具有用户友好的操作界面,方便用户进行操作和管理。 总结起来,该学生宿舍管理系统使用Python编程语言、PyQt5图形界面库和MySQL数据库实现学生、宿舍楼、宿舍房间和入住记录的管理功能,方便学校对学生宿舍的管理和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

早知晓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值