Python项目:学生管理系统(数据库)

一、程序功能(Function)

1、功能概述

利用Python完成一个学生信息的增删改查程序,主要涉及知识点:程序控制结构(实现可进可退的多级菜单)、文件读写操作(学生信息要保存到磁盘上的文件里)、利用函数实现功能模块化。

2、思维导图

  • 百度脑图
    https://naotu.baidu.com/
    创建自己的思维导图,整理思绪,更有利于创建项目。
    在这里插入图片描述

二、学生实体(Entity)

1、思维导图

请添加图片描述

2、关系模式

  • 学生(学号, 姓名, 性别, 年龄, 班级, 专业, 系部, 电话)

3、学生表

  • 行——记录——元组
  • 列——字段——属性
    请添加图片描述
  • 在数据库中创建一个students表,将数据信息保存到表中,以便调用 在这里插入图片描述
2021001 李晓红 女 19 2021级软件4班 软件技术 人工智能与大数据学院 15945456780
2021002 王晓刚 男 18 2021级软件4班 软件技术 人工智能与大数据学院 13890904567
2021003 唐雨涵 女 19 2021级软件4班 软件技术 人工智能与大数据学院 18878789023
2021101 张三丰 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 15945456780
2021102 肖雨林 男 18 2021级大数据1班 大数据技术 人工智能与大数据学院 18890904560
2021103 郑小翠 女 19 2021级大数据1班 大数据技术 人工智能与大数据学院 15890904567

三、构造系统框架

1、创建主程序

请添加图片描述

  • 效果图
    请添加图片描述
  • 代码
# 主程序
while True:
    print('用户登录')
    print('==========')
    print('1.登录')
    print('2.退出')
    print('==========')
    mc1 = int(input('输入菜单号: '))
    if mc1 == 1:
        print('成功登入!')
    elif mc1 == 2:
        print('\n谢谢使用本程序\n')
        break

2、建立主菜单

  • 运用def定义函数定义学生管理系统主菜单,并调用。运行程序,查看结果。
    请添加图片描述

3、建立二级菜单

  • 运用def定义函数创建学生管理系统二级菜单并调用。 请添加图片描述

  • 运行程序,查看结果
    请添加图片描述

四、建立链接

1、安装pymysql库

(1)在spyder中安装

  • 若是用spyder编写程序,则需要打开Anaconda Powershell Prompt (anaconda3)
    请添加图片描述
  • 并且输入pip in stall pymysql
  • 等待下载完成
    请添加图片描述
  • 这里是已经下载好了的。

(2)在PyCharm中安装库

  • 这个方法有很多种:
  • 在命令提示符中安装:Win+R打开运行,输入cmd,进入命令提示符界面并输入pip install pymysql 回车等待安装完成即可。
    请添加图片描述
  • 这里提示已经安装。

2、将程序链接到数据库

在这里插入图片描述

  • 这里运用的是SSCursor,下面可以直接运用位置数即可;
  • 若是在这里运用DictCursor,那么下面就必须使用字段名来引用。

五、对学生管理系统中的数据进行操作

1、增加学生记录

  • 定义add_student()函数,并调用。
    在这里插入图片描述

  • 运行查看结果,并录入新的信息。
    在这里插入图片描述

2、查询学生记录

(1)查询全部学生记录

  • 为查询全部学生定义一条函数dis_all_stu()
    请添加图片描述

  • 运行程序查看结果
    在这里插入图片描述

  • 成功显示所有学生信息。
    在这里插入图片描述

  • 因为为了书写代码简洁明了,于是把这这条链接到数据库的代码放在了最开头,这样就不用在每次定义的时候再去书写一遍。

(2)按学号查询学生记录

  • 为进行按学号查询学生记录,定义一条id_dis_stu()函数
    在这里插入图片描述

  • 运行程序,查看结果
    在这里插入图片描述

  • 成功按学号显示学生信息

(3)按姓名查询学生记录

  • 为进行按姓名查询学生记录,定义一条name_dis_stu()函数
    在这里插入图片描述

  • 运行程序,查看结果
    在这里插入图片描述

  • 成功按学号显示学生信息.

3、修改学生信息

(1)修改姓名

  • 为进行姓名信息修改,定义一条modify_stu_name()函数
    在这里插入图片描述

  • 运行程序,查看结果
    在这里插入图片描述

  • 成功修改姓名

  • 利用查询功能查看是否修改成功
    在这里插入图片描述

  • 操作成功!

(2)修改电话

  • 为进行姓名信息修改,定义一条modify_stu_phone()函数
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 利用查询功能查看是否修改成功
    在这里插入图片描述
  • 修改成功
  • 这里可以看出,其他字段内容的修改其实也大相径庭,只需将字段名修改即可。

4、删除学生信息

  • 为删除信息定义一个del_stu()函数
    在这里插入图片描述
  • 运行程序,查看结果
    在这里插入图片描述
  • 查询记录,检测是否成功删除记录。
    在这里插入图片描述
  • 操作成功
  • 学生管理系统(数据库版)成功完成。
  • 现在还是一个简陋的一个程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!

六、完整代码

# -*- coding: utf-8 -*-
"""
功能:学生管理系统
作者:zwh
日期:2021年12月7日
"""

import pymysql


# 定义数据链接参数
host = '127.0.0.1'
port = 3306
db = 'student'
user = 'root'
password = 'zl202111'

# 获取数据链接
conn = pymysql.connect(host=host, port=port, db=db, user=user, password=password)
cursor = conn.cursor(pymysql.cursors.SSCursor)




def add_student():  # 添加学生信息
    sql = 'insert into students values(%s, %s, %s, %s, %s, %s, %s, %s )'
    print('录入信息:')
    id = int(input('id:'))
    name = input('name:')
    gender = input('gender:')
    age = int(input('age:'))
    class_grade = input('class_grade:')
    major = input(('major:'))
    college = input('college:')
    telephone = input('telephone:')
    row = (id, name, gender, age, class_grade, major, college, telephone)
    print(row)
    count = cursor.execute(sql, row)
    if count > 0:
        # 提交数据修改
        conn.commit()
        # 提示用户操作成功
        print('记录插入成功!')
    else:
        # 提示操作失败
        print('记录插入失败!')

def dis_all_stu():  # 查询所有学生信息
    cursor.execute('select * from students ')
    # 获取全部学生数据
    students = cursor.fetchall()
    # print(students)
    for stu in students:
        # print(students[i])
        print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(stu[0], stu[1], stu[2], stu[3], stu[4],stu[5], stu[6], stu[7]))

def id_dis_stu():  # 以学号查询学生信息
    # 执行SQL查询
    id = input('输入待查id:')
    cursor.execute('select * from students where id = %s', (id))
    # 获取全部学生数据
    student = cursor.fetchall()
    if student == []:
            print(f'未查到学号为{id}的学生!')
    else:        
        for i in student:
            print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7]))

def name_dis_stu():   # 以姓名查询学生信息
    # 执行SQL查询
    name = input('输入待查name:')
    cursor.execute('select * from students where name = %s', (name))
    # 获取全部学生数据
    student = cursor.fetchall()
    if student == []:
            print(f'未查到姓名为{name}的学生!')
    for i in student:
        print('{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}'.format(i[0], i[1], i[2], i[3], i[4], i[5], i[6], i[7]))

# 修改学生姓名
def modify_stu_name():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_name = input('输入修改后的姓名:')
            count = cursor.execute('update students set name = %s where id = %s', (new_name, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_gender():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_gender = input('输入修改后的性别:')
            count = cursor.execute('update students set gender = %s where id = %s', (new_gender, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_age():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_age = input('输入修改后的年龄:')
            count = cursor.execute('update students set age = %s where id = %s', (new_age, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_cg():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_class_grade = input('输入修改后的班级:')
            count = cursor.execute('update students set class_grade = %s where id = %s', (new_class_grade, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_major():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_major = input('输入修改后的专业:')
            count = cursor.execute('update students set major = %s where id = %s', (new_major, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_college():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_college = input('输入修改后的学院:')
            count = cursor.execute('update students set college = %s where id = %s', (new_college, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_stu_phone():
    while True:
        id = input('输入待修改信息的id:')
        cursor.execute('select * from students where id = %s', (id))
        student = cursor.fetchall()
        if student == []:
            print(f'未查到学号为{id}的学生!')
        else:
            new_phone = input('输入修改后的电话:')
            count = cursor.execute('update students set telephone = %s where id = %s', (new_phone, id))
            if count > 0:
                conn.commit()
                print('数据修改成功!')
                break
            else:
                print('数据修改失败!')

def modify_student():  # 修改学生信息
    while True:
        print('\n查询学生记录\n')
        print('=================')
        print('1.修改姓名')
        print('2.修改性别')
        print('3.修改年龄')
        print('4.修改班级')
        print('5.修改专业')
        print('6.修改学院')
        print('7.修改电话')
        print('8.返回上级菜单')
        print('=================')
        mc4 = int(input('输入菜单号:'))
        if mc4 == 1:
            modify_stu_name()
        elif mc4 == 2:
            modify_stu_gender()
        elif mc4 == 3:
            modify_stu_age()
        elif mc4 == 4:
            modify_stu_cg()
        elif mc4 == 5:
            modify_stu_major()
        elif mc4 == 6:
            modify_stu_college()
        elif mc4 == 7:
            modify_stu_phone()
        else:
            break


def query_student():  # 查询学生记录
    while True:
        print('\n查询学生记录\n')
        print('=================')
        print('1.按学号查询学生记录')
        print('2.按姓名查询学生记录')
        print('3.查询全部学生记录')
        print('4.返回上级菜单')
        print('=================')
        mc3 = int(input('输入菜单号:'))
        if mc3 == 1:
            id_dis_stu()
        elif mc3 == 2:
            name_dis_stu()
        elif mc3 == 3:
            dis_all_stu()
        else:
            break



# 删除信息
def del_stu():
    # 执行SQL查询
    id = input('输入待查学号:')
    count = cursor.execute('delete from students where id = %s', (id))

    if count > 0:
        # 提交数据修改
        conn.commit()
        print('记录删除成功!')
    else:
        print('记录删除失败!')


def login():
    username = input('输入用户名: ')
    password = input('输入密码: ')
    if username == 'zl' and password == '0':
        while True:
            print('\n学生信息管理\n')
            print('===========')
            print('1. 增加学生记录')
            print('2. 查询学生记录')
            print('3. 修改学生记录')
            print('4. 删除学生记录')
            print('5. 返回上级菜单')
            print('===========')
            mc2 = int(input('输入菜单号: '))
            if mc2 == 1:
                add_student()
            elif mc2 == 2:
                query_student()
            elif mc2 == 3:
                modify_student()
            elif mc2 == 4:
                del_stu()
            else:
                break
    else:
        print('\n用户名或密码错误,请重新登录\n')

# 主程序
while True:
    print('用户登录')
    print('==========')
    print('1.登录')
    print('2.退出')
    print('==========')
    mc1 = int(input('输入菜单号: '))
    if mc1 == 1:
        login()
    elif mc1 == 2:
        print('\n谢谢使用本程序\n')
        break

七、总结

1、关于该系统现存在的问题

  • 1.关于登录界面,当输入字符时会报错,这个问题可以将代码改为:
while True:
    print('用户登录')
    print('==========')
    print('1.登录')
    print('2.退出')
    print('==========')
    mc1 = input('输入菜单号: ')
    if mc1 == str(1):
        login()
    elif mc1 == str(2):
        print('\n谢谢使用本程序\n')
        break
    elif mc1 != 1 or mc1 != 2:
        print('请输入正确的菜单号!')
  • 2、修改学生记录还可以按照其他字段的信息修改,也可以单独修改一个字段的信息。
    ……
  • 该系统现在还是一个简陋的程序,还有许多需要改进的地方,需要慢慢改进,如果有好的建议,评论区见,谢谢!

2、学习总结

  • 书写程序时需要有一个好的思路,这样有利于对整个系统结构结构框架进行构建。
  • 在写程序时,为防止出错找不到原因,可以先打开另一个页面,进行代码测试,书写正确后在放入主程序,这样可以高效避免错误发生。
  • 书写程序需要有一个清晰的头脑,所以一定要注意休息。
  • 学习python不是一天两天的事,要懂得《劝学》中的“锲而舍之,朽木不折;锲而不舍,金石可镂”
  • 注意:Road in the foot!!!
  • 18
    点赞
  • 188
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Python支持多种数据库编程接口,其中最常用的是Python DB-API。可以使用Python DB-API访问常用的数据库管理系统(如MySQL、PostgreSQL、SQLite等)。要访问数据库,需要安装相应的驱动程序(如MySQL Connector、psycopg2等)。 示例代码: ```python import mysql.connector # 建立连接 conn = mysql.connector.connect( host="hostname", user="username", password="password", database="database" ) # 创建游标 cursor = conn.cursor() # 执行SQL语句 cursor.execute("SELECT * FROM table") # 获取结果 result = cursor.fetchall() # 处理结果 for row in result: print(row) # 关闭游标和连接 cursor.close() conn.close() ``` 上面的代码使用mysql-connector-python驱动程序连接到MySQL数据库。可以通过更改驱动程序和连接参数来访问其他数据库管理系统。 另外还有一些更高级的库,如SQLAlchemy、Django ORM等可以使用。 ### 回答2: 编写Python数据库需要使用第三方库来连接和操作数据库。最常用的Python数据库库是SQLAlchemy和sqlite3。 使用SQLAlchemy,首先需要安装SQLAlchemy库,可以使用pip进行安装。安装完成后,可以通过导入相应的模块来连接数据库和执行SQL语句。首先,需要建立一个Engine对象,用于连接数据库。然后,使用Session对象来操作数据库。可以使用ORM(对象关系映射)方式,将数据库表映射为Python对象,方便操作和管理。 另外,还可以使用sqlite3库编写Python数据库。sqlite3是Python内置的库,不需要安装额外的库。使用sqlite3库编写数据库需要使用连接对象和游标对象。首先,使用sqlite3.connect()方法来连接数据库文件。然后,使用游标对象执行SQL语句,包括创建表、插入数据、查询数据等。最后,记得要提交或回滚对数据库的更改,并关闭连接。 在编写Python数据库时,需要注意保护数据库的安全性。使用参数化查询,可以有效防止SQL注入攻击。另外,需要注意事务的处理,确保数据的完整性和一致性。同时,为了提高数据库的性能,在进行大量数据插入或更新操作时,可以考虑使用事务批量操作,减少连接数据库的次数。 总之,编写Python数据库需要使用第三方库来连接和操作数据库,如SQLAlchemy和sqlite3。可以使用ORM方式或直接执行SQL语句来操作数据库。在编写过程中,要注意保护数据库的安全性和处理事务,同时考虑性能优化。 ### 回答3: 编写Python数据库需要以下步骤: 1. 选择数据库Python支持多种关系型数据库,如MySQL、PostgreSQL和SQLite等,也支持非关系型数据库如MongoDB和Redis等。根据项目需求选择一个合适的数据库。 2. 安装数据库驱动程序:Python需要通过数据库驱动程序来连接数据库。不同数据库有不同的驱动程序,需要根据选择的数据库安装对应的驱动程序。 3. 连接数据库:使用Python数据库API(如Python DB-API 2.0)来连接数据库。通过提供数据库的主机名、端口号、用户名和密码等信息来建立连接。连接成功后,可以执行数据库操作。 4. 创建数据库表:使用SQL语句在数据库中创建表。可以使用Python数据库API中的`execute()`方法来执行SQL语句。 5. 插入、更新和删除数据:使用SQL语句或者Python数据库API提供的操作方法来插入、更新和删除数据。可以使用`execute()`方法执行SQL语句,也可以使用提供的方法执行相应的操作。 6. 查询数据:使用SQL语句或者Python数据库API提供的查询方法来查询数据。可以使用`execute()`方法执行SQL语句,也可以使用提供的方法查询相应的数据。 7. 关闭数据库连接:在完成数据库操作后,需要关闭数据库连接。使用Python数据库API提供的`close()`方法来关闭数据库连接。 编写Python数据库需要熟悉数据库的基本操作和相应的数据库驱动程序。通过合理的使用数据库操作和Python的编程技巧,可以实现对数据库的增删改查等操作。编写数据库时,需要注意数据的安全性和有效性,防止出现数据库注入等安全问题。此外,也可以使用ORM(对象关系映射)工具简化数据库编程,如SQLAlchemy和Django的ORM等。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值