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

学生信息管理系统

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
转载请注明出处,谢谢合作~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年6月21日
下一篇 2023年6月21日

相关推荐