Python面相对象案例熟悉对MySQL的操作(案例一、学生管理系统,案例二、模拟注册与用户登录)有源码

news2024/11/15 12:47:46

Python面相对象案例熟悉对MySQL的操作

案例一,学生管理系统

在这里插入图片描述

对数据表的要求:

在mysql中创建数据库gamedb,创建用户表userinfo,字段如下:

用户编号uid(int,主键,自动增长)

用户姓名uname(varchar(20),非空)

用户昵称nickname(varchar(20),非空,唯一约束)

用户密码upass(varchar(20),非空)

用户积分score(int,非空)

代码实现:

import pymysql

class PlayUserinfo:
    def __init__(self):
        self.conn = pymysql.connect(
            host='localhost',
            port=3307,
            db='testdb',
            user='root',
            password='123456',
            charset='utf8'
        )
        self.cursor = self.conn.cursor()

    def selectAll(self):
        sql = 'SELECT * FROM userinfo'
        self.cursor.execute(sql)
        rows = self.cursor.fetchall()
        print("userinfo的数据如下:")
        for row in rows:
            print(f"ID:{row[0]}\t姓名:{row[1]}\t性别:{row[2]}\t年龄:{row[3]}")


    def delName(self):
        delName = input("请输入要删除的学生姓名:")
        sql = "DELETE FROM userinfo WHERE uname = %s"
        self.cursor.execute(sql, (delName,))
        if self.cursor.rowcount > 0:
            self.conn.commit()
            print("删除成功")
        else:
            print("查无此人")
        self.selectAll()

    def addUser(self):
        userId = int(input("请输入用户id:"))
        userName =  input("请输入用户姓名:")
        userSex = input("请输入用户性别:")
        userAge = int(input("请输入用户年龄:"))
        # 写sql语句
        sql = "INSERT INTO userinfo(uid, uname, usex, uage) values (%s, %s, %s, %s)"
        self.cursor.execute(sql, (userId, userName, userSex, userAge))
        print(f"你已经成功添加\nid为:{userId},姓名为:{userName},性别为:{userSex}, 年龄为:{userAge}的用户信息")
        self.conn.commit()

    def updateUser(self):
        choose = int(input("请输入你的选择[1(改id) or 2(改姓名)]:"))
        if choose == 1:
            sql1 = "UPDATE userinfo SET uid = %s WHERE uname = %s "
            userName = input("请输入需要修改的用户姓名:")
            updId = int(input(f"请输入用户{userName}的新id:"))
            data_updId = (updId, userName)
            self.cursor.execute(sql1, data_updId)
            print(f'已成功将{userName}的id更新为{updId}')
            self.conn.commit()

        elif choose == 2:
            sql2 = "UPDATE userinfo SET uname = %s WHERE uname = %s "
            userName1 = input("请输入需要修改的用户姓名:")
            updName = input(f"请输入用户{userName1}的新name:")
            data_updName = (updName, userName1)
            self.cursor.execute(sql2, data_updName)
            print(f'已成功将{userName1}的id更新为{updName}')
            self.conn.commit()
        else:
            print("程序有待扩展,敬请期待!")
            exit(0)
        print('修改后再次查询:')
        self.selectAll()

    def outApp(self):
        print("欢迎下次回来!!!")
        exit(0)


if __name__ == '__main__':
    app = PlayUserinfo()
    while True:
        print("==========学生信息系统============\n1.查询全部信息\n2.输入名称删除对应的数据\n3.添加用户信息\n4.修改用户\n5.退出\n请输入你的选择[1 or 2 or 3 or 4 or 5 ]")
        xz = int(input("请输入你想操作的序号:"))
        num = [1, 2, 3, 4]
        if xz not in num:
            print("操作序号输入错误,按y重新输入,按n退出程序:")
            an = input("重新输入(按y)or退出(按n):")
            if an == 'n':
                print("已经安全退出,欢迎下次使用")
                exit()
            elif an == 'y':
                print("已经重新加载")
            else:

                if xz == 1:
                    print("欢迎使用查询全部信息:")
                    app.selectAll()
                elif xz == 2:
                    print("欢迎使用按姓名删除:")
                    app.delName()
                elif xz == 3:
                    print("欢迎使用添加用户:")
                    app.addUser()
                elif xz == 4:
                    print("欢迎使用修改用户")
                    app.updateUser()
                else:
                    print("您已经退出系统,欢迎下次使用:")
                    app.outApp()


案例二,模拟注册与用户登录

循环显示如下菜单:

1.注册新的游戏账号

2.显示所有游戏账号

3.按昵称删除游戏账号

4.退出

按下不同的选项就执行相应的功能

任务2:\模拟游戏登录功能,先提示输入昵称和密码,然后判断是否登录成功。

1.果输入错误则提示登录失败,累计3次就强制结束程序。

2.如果输入正确的昵称和密码则提示登录成功,并循环显示如下菜单:

1)查看自己的积分

2)修改自己的密码

3)退出

按下不同的选项就执行相应的功能

代码实现:

import pymysql


class CreateUserinfo:
    def __init__(self):
        self.conn = pymysql.connect(
            host='localhost',
            port=3307,
            db='testdb',
            user='root',
            password='123456',
            charset='utf8'
        )
        self.cursor = self.conn.cursor()

    def createTable(self):
        sql = """
            CREATE TABLE IF NOT EXISTS gameuserinfo1(
                uid INT AUTO_INCREMENT PRIMARY KEY,
                uname VARCHAR(20) NOT NULL,
                nickname VARCHAR(20) NOT NULL,
                upass VARCHAR(20) NOT NULL,
                score INT NOT NULL     
            )
        """
        self.cursor.execute(sql)
        # 插入数据
        sql1 = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES ('小小', 'qq', '123456', 0)"
        sql2 = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES ('大大', 'wx', '123', 100)"

        self.cursor.execute(sql1)
        self.cursor.execute(sql2)
        self.conn.commit()
        print("创建并插入数据成功")

    def selectAll(self):
        sql = 'SELECT * FROM gameuserinfo1'
        self.cursor.execute(sql)
        rows = self.cursor.fetchall()
        print("所有游戏号的数据如下:")
        for row in rows:
            print(f"ID:{row[0]}\t姓名:{row[1]}\t昵称:{row[2]}\t密码:******\t积分:{row[4]}")

    def delName(self):
        delName = input("请输入要删除的账号昵称:")
        sql = "DELETE FROM gameuserinfo1 WHERE nickname = %s"
        self.cursor.execute(sql, (delName,))
        if self.cursor.rowcount > 0:
            self.conn.commit()
            print("删除成功")
        else:
            print("该账号未注册!")
        self.selectAll()

    def addUser(self):
        userName = input("请输入新用户姓名:")
        userNickname = input("请输入新用户昵称:")
        userPassw = input("请输入新用户密码:")
        newScore = 0
        sql = "INSERT INTO gameuserinfo1 (uname, nickname, upass, score) VALUES (%s, %s, %s, %s)"
        self.cursor.execute(sql, (userName, userNickname, userPassw, newScore))
        self.conn.commit()
        print(f"你已经成功注册姓名为:{userName}, 昵称为:{userNickname}的账号, 请牢记你的密码:{userPassw}")


class ForUser:
    def __init__(self):
        self.conn = pymysql.connect(
            host='localhost',
            port=3307,
            db='testdb',
            user='root',
            password='123456',
            charset='utf8'
        )
        self.cursor = self.conn.cursor()

    def dengLu(self):
        count = 0
        nick = input("请输入昵称:")
        sql = 'SELECT upass FROM gameuserinfo1 WHERE nickname = %s'
        self.cursor.execute(sql, (nick,))
        password = self.cursor.fetchall()

        if not password:
            print("该昵称未注册!")
            return

        while count < 3:
            pasw = input("请输入密码:")
            if pasw == password[0][0]:
                print('登录成功!')
                return
            else:
                count += 1
                print('你输入的密码有错误!')

        print("你已经尝试了3次仍未登录成功,已退出登录")
        exit(0)

    def selectScore(self):
        nick = input("请输入你的昵称:")
        sql = 'SELECT score FROM gameuserinfo1 WHERE nickname = %s'
        self.cursor.execute(sql, (nick,))
        Score = self.cursor.fetchall()
        if Score:
            print("你账户的积分为:", Score[0][0])
        else:
            print("该昵称未注册!")

    def updateUser(self):
        choose = int(input("请输入你的选择[1(改昵称) or 2(改密码)]:"))
        if choose == 1:
            sql1 = "UPDATE gameuserinfo1 SET nickname = %s WHERE uname = %s"
            userName = input("请输入需要修改的用户姓名:")
            updNickname = input(f"请输入用户{userName}的新昵称:")
            data_updId = (updNickname, userName)
            self.cursor.execute(sql1, data_updId)
            self.conn.commit()
            print(f'已成功将{userName}的昵称更新为{updNickname}')
        elif choose == 2:
            sql2 = "UPDATE gameuserinfo1 SET upass = %s WHERE uname = %s"
            userName1 = input("请输入需要修改的用户姓名:")
            updPass = input(f"请输入用户{userName1}的新密码:")
            data_updName = (updPass, userName1)
            self.cursor.execute(sql2, data_updName)
            self.conn.commit()
            print(f'已成功将{userName1}的密码更新为{updPass}')
        else:
            print("无效的选择!")

        print('修改后再次查询:')
        self.selectAll()

    def outApp(self):
        print("欢迎下次回来!!!")
        exit(0)

    def selectAll(self):
        sql = 'SELECT * FROM gameuserinfo1'
        self.cursor.execute(sql)
        rows = self.cursor.fetchall()
        print("所有游戏号的数据如下:")
        for row in rows:
            print(f"ID:{row[0]}\t姓名:{row[1]}\t昵称:{row[2]}\t密码:******\t积分:{row[4]}")


if __name__ == '__main__':
    app = CreateUserinfo()
    app2 = ForUser()
    app.createTable()  # 创建表格并插入初始数据
    app.selectAll()

    while True:
        print("==========数据库后端管理&&用户操作系统============\n---------数据库后端管理部分------------\n1.创建新的数据表\n"
              "2.查看所有用户信息\n3.删除用户信息\n4.注册用户信息\n---------用户操作系统------------\n5.使用登录界面\n6.查看账户的积分\n7.用户账号设置\n8.退出系统"
              "\n请输入你的选择[1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 ]")
        xz = int(input("请输入你想操作的序号:"))
        num = [1, 2, 3, 4, 5, 6, 7, 8]
        if xz not in num:
            print("操作序号输入错误,按y重新输入,按n退出程序:")
            an = input("重新输入(按y)or退出(按n):")
            if an == 'n':
                print("已经安全退出,欢迎下次使用")
                exit(0)
            elif an == 'y':
                print("已经重新加载")
                continue

        if xz == 1:
            print("欢迎使用创建数据表:")
            app.createTable()
        elif xz == 2:
            print("欢迎使用查看所有用户信息:")
            app.selectAll()
        elif xz == 3:
            print("欢迎使用删除用户信息:")
            app.delName()
        elif xz == 4:
            print("欢迎使用注册用户信息")
            app.addUser()
        elif xz == 5:
            print("欢迎使用登录界面")
            app2.dengLu()
        elif xz == 6:
            print("欢迎使用查看积分界面")
            app2.selectScore()
        elif xz == 7:
            print("欢迎使用修改用户信息界面")
            app2.updateUser()
        elif xz == 8:
            print("退出系统")
            app2.outApp()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Delphi】Delphi 中的 LiveBindings 使用场景与概念

LiveBindings 是 Delphi 提供的一种数据绑定机制&#xff0c;用于将 UI 控件与数据源&#xff08;如数据库字段、对象属性等&#xff09;进行动态连接。LiveBindings 允许开发人员通过可视化的方式绑定数据&#xff0c;省去了大量的手动编写代码&#xff0c;使 UI 更新和数据同…

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API&#xff0c;可以轻松集成到各类企业系统。支持丰富的文件类型&#xff0c;包括 Word 文档、PPT、exc…

『玉竹』基于Laravel 开发的博客、微博客系统和Android App

基于 Laravel 和 Filament 开发, 使用 Filament 开发管理后台&#xff0c;前端比较简洁。 博客大家都清楚是什么东西&#xff0c;微博客类似于微博之类的吧&#xff0c;有时候想要写的东西可能只有几句话&#xff0c;想要起个标题都不好起。 为了是微博客功能更好用&#xff0c…

Navicat导入Sql文件至Mysql数据库,事务失效

Mysql 版本&#xff1a;8.0.39 Navicat 版本&#xff1a;17.x、16.x 结论&#xff1a; Navicat 导入sql文件&#xff0c;事务不会生效&#xff0c;无论怎么设置 mysql.exe 导入sql文件&#xff0c;事务生效 测试 准备一张表 name约束不能为空&#xff0c;用于测试事务失败…

Qemu开发ARM篇-2、uboot交叉编译

文章目录 1、交叉编译工具安装2、uboot交叉编译3、FAQ 在继上一篇 Qemu开发ARM篇-1、环境搭建篇中&#xff0c;我们搭建安装了qemu虚拟机&#xff0c;在本节中&#xff0c;我们将演示如何安装交叉编译工具并交叉编译 uboot,在下一节中&#xff0c;我们将演示如何使用 qemu运…

如何快速找回Finalshell中VPS的SSH密码

买了vps亦或者重装了系统&#xff0c;就会更新SSH的连接密码&#xff0c;如果忘记保存或者遗忘&#xff0c;在邮箱里也找不到&#xff0c;再重装系统会非常麻烦。这时就需要在Finalshell中找回SHH的密码了。方法如下&#xff1a; 第一步&#xff1a;无认哪一种方法&#xff0c…

嵌入式入门小工程

此代码基于s3c2440 1.点灯 //led.c void init_led(void) {unsigned int t;t GPBCON;t & ~((3 << 10) | (3 << 12) | (3 << 14) | (3 << 16));t | (1 << 10) | (1 << 12) | (1 << 14) | (1 << 16);GPBCON t; }void le…

window下idea中scala的配置

目录 Scala安装步骤&#xff1a; 1.下载scala安装包 2.配置环境变量&#xff1a; 3.检查scala是否安装成功&#xff1a; 4.idea安装scala插件 5.导入scala-sdk 6.新建scala文件 Scala安装步骤&#xff1a; 1.下载scala安装包 访问Scala官网&#xff1a;https://www.sca…

MySQL高阶1907-按分类统计薪水

目录 题目 准备数据 分析数据 总结 题目 结果表 必须 包含所有三个类别。 如果某个类别中没有帐户&#xff0c;则报告 0 。 按 任意顺序 返回结果表。 查询每个工资类别的银行账户数量。 工资类别如下&#xff1a; "Low Salary"&#xff1a;所有工资 严格低于…

YOLOv8改进 | 特征融合篇,YOLOv8添加iAFF(多尺度通道注意力模块),并与C2f结构融合,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

刷题训练之栈

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握字符串算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷题…

【C++】C++库:如何链接外部库、静态链接和动态链接,以及如何自建库并使用

十三、C库&#xff1a;如何链接外部库、静态链接和动态链接&#xff0c;以及如何自建库并使用 本篇讲C库&#xff0c;先讲如何在项目中使用外部库&#xff0c;包括静态链接和动态链接的实现&#xff1b;再讲如何在VisualStudio中自建模块或库项目&#xff0c;让所有项目都能使…

大数据实验2.Hadoop 集群搭建(单机/伪分布式/分布式)

实验二&#xff1a; Hadoop安装和使用 一、实验目的 实现hadoop的环境搭建和安装Hadoop的简单使用&#xff1b; 二、实验平台 操作系统&#xff1a;Linux&#xff08;建议Ubuntu16.04或者18.04&#xff09;&#xff1b;Hadoop版本&#xff1a;3.1.3&#xff1b;JDK版本&…

C#解决方案的各种操作

C#开发编程软件下载安装 C#开发编程软件下载安装_c#下载安装-CSDN博客文章浏览阅读208次。。。。_c#下载安装https://rxxw-control.blog.csdn.net/article/details/140879228 C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信_c# s1200 s7协议设置-CSDN博客文章浏览阅读…

Linux开发工具(git、gdb/cgdb)--详解

目录 一、Linux 开发工具分布式版本控制软件 git1、背景2、使用 git&#xff08;1&#xff09;预备工作——安装 git&#xff1a;&#xff08;2&#xff09;克隆远程仓库到本地&#xff08;3&#xff09;把需要提交的代码拷贝到本地仓库&#xff08;4&#xff09;提交本地仓库文…

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

在Linux中运行flask项目

准备 这里我准备了一个GitHub上某个大佬写的留言板的Flask项目&#xff0c;就用这个来给大家做示范了。 查看留言板的目录结构 查看主程序所用的库函数 只有一个第三方库 Flask 安装pip sudo apt install python3-pip -y测试 pip 安装成功 修改pip镜像源 修改pip的默认下载…

篮球运动场景物体检测系统源码分享

篮球运动场景物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

Three.js 3D人物漫游项目(中)

本文目录 前言最终效果展示1、人物添加阴影1.1 添加地板1.1.1 效果 1.2 模型castShadow1.2.1 效果 1.3 轨道控制器1.3.1 效果 2、创建建筑物2.1 代码2.2 效果 前言 在数字技术的浪潮中&#xff0c;三维图形渲染技术以其独特的魅力&#xff0c;正逐步渗透到我们生活的方方面面&a…

Blender软件三大渲染器Eevee、Cycles、Workbench对比解析

Blender 是一款强大的开源3D制作平台&#xff0c;提供了从建模、雕刻、动画到渲染、后期制作的一整套工具&#xff0c;广泛应用于电影、游戏、建筑、艺术等领域。 渲染101云渲染云渲6666 相比于其他平台&#xff0c;如 Autodesk Maya、3ds Max 或 Cinema 4D&#xff0c;Blende…