面向对象版学员管理系统(存储数据库)

面向对象版学员管理系统(存储数据库)数据库,面向对象

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目标

  1. 了解⾯向对象开发过程中类内部功能的分析⽅法
  2. 了解常⽤系统功能
    1. 添加
    2. 删改
    3. 修改
    4. 查询

系统需求

使用面向对象编程思想完成学员管理系统的开发,具体如下:

  1. 系统要求:学员数据存储在数据库中
  2. 系统功能:添加学员,删除学员,修改学员信息,查询学员信息,显示所有学员信息

准备程序文件

1.分析

  1. 学员
  2. 管理系统

注意:为方便维护,一般一个角色一个程序文件,项目要有主程序入口,习惯为main.py

2.创建程序文件

程序文件如下:

  • 程序入口文件:main.py
  • 学员文件:student.py
  • 管理系统文件:managerSystem.py

书写程序

student.py

需求:

  • 学员信息包含:姓名、性别、⼿机号;
  • 添加 __str__ ⽅法,⽅便查看学员对象信息
class Student(object):
    def __init__(self, name, gender, tel):
        # 姓名、性别、手机号
        self.name = name
        self.gender = gender
        self.tel = tel

    def __str__(self):
        return f'{self.name}, {self.gender}, {self.tel}'

managerSystem.py

需求:

  • 存储数据的位置:数据库
    • 增删改查
  • 存储数据的形式
  • 系统功能
    • 添加
    • 删除
    • 修改
    • 查询
    • 显示所有信息
from student import *
import pymysql
#数据库名称
DBhost = 'localhost'
DBuser = 'root'
DBpassword = '*******'#数据库系统
DBname = 'dbtest'
class StudentManager(object):
    def __init__(self):
        # 存储学员数据 -- 列表
        self.student_list = ()
        #存储学员数据--数据库
        try:
            self.db = pymysql.connect(host=DBhost, user=DBuser, password=DBpassword, database=DBname)
            print("数据库连接成功!")
            self.cur = self.db.cursor()  # 声明一个游标

            # self.cur.execute('DROP TABLE IF EXISTS studentmassage')
            # # 用户输入姓名、性别、手机号
            # sql = "CREATE table studentmassage(Name char(20) NOT NULL,sex char(30),idcard char(20))"  # 表头标签 双引号!
            # self.cur.execute(sql)  # execute执行sql语句
        except pymysql.Error as a:
            print("数据库连接失败!" + str(a))
    # 一. 程序入口函数
    def run(self):
        # 1. 加载文件里面的学员数据
        self.load_student()
        while True:
            # 2. 显示功能菜单
            self.show_menu()
            # 3. 用户输入目标功能序号
            menu_num = int(input('请输入您需要的功能序号:'))

            # 4. 根据用户输入的序号执行不同的功能 -- 如果用户输入1,执行添加
            if menu_num == 1:
                # 添加学员
                self.add_student()
            elif menu_num == 2:
                # 删除学员
                self.del_student()
            elif menu_num == 3:
                # 修改学员信息
                self.modify_student()
            elif menu_num == 4:
                # 查询学员信息
                self.search_student()
            elif menu_num == 5:
                # 显示所有学员信息
                self.show_student()
            elif menu_num == 6:
                # 保存学员信息
                self.save_student()
            elif menu_num == 7:
                # 退出系统 -- 退出循环
                break

    # 二. 系统功能函数
    # 2.1 显示功能菜单 -- 打印序号的功能对应关系 -- 静态
    @staticmethod
    def show_menu():
        print('请选择如下功能:')
        print('1:添加学员')
        print('2:删除学员')
        print('3:修改学员信息')
        print('4:查询学员信息')
        print('5:显示所有学员信息')
        print('6:保存学员信息')
        print('7:退出系统')

    # 2.2 添加学员
    def add_student(self):
        # 1. 用户输入姓名、性别、手机号
        name = input('请输入您的姓名:')
        gender = input('请输入您的性别:')
        tel = input('请输入您的手机号:')

        # 2. 创建学员对象 -- 类 ?类在student文件里面  先导入student模块,再创建对象
        student = Student(name, gender, tel)
        sql1 = "insert into studentmassage(Name,sex,idcard)value(%s,%s,%s)"
        # 3. 将该对象添加到学员数据库
        value = (student.name,student.gender,student.tel)#添加信息
        #print(value)
        self.cur.execute(sql1,value)#执行语句
        self.db.commit()#数据提交

    # 2.3 删除学员
    def del_student(self):
        # 1. 用户输入目标学员姓名
        del_name = input('请输入要删除的学员姓名:')

        sql3 = "select Name from studentmassage" #按名字查询数据库
        self.cur.execute(sql3)
        results1 = self.cur.fetchall()#返回的名字的元组
        # print(results1)
        u=0#标志变量
        for ty in results1:#循环遍历
            name = ty[0]
            if name == del_name:#判断名字是否存在
                u=1
                sql2 = "delete from studentmassage where Name =%s"
                self.cur.execute(sql2, del_name)#删除名字的操作
                self.db.commit()
        if u==0:
            print("查无此人!")

    # 2.4 修改学员信息
    def modify_student(self):
        # 1. 用户输入目标学员姓名
        modify_name = input('请输入要修改的学员姓名:')
        sql3 = "select Name from studentmassage"
        self.cur.execute(sql3)
        results1 = self.cur.fetchall()
        u = 0
        for ty in results1:
            name = ty[0]
            if name == modify_name:
                u = 1
                sql2 = "delete from studentmassage where Name =%s"
                # newname = input("请输入新名字:")
                # newsex = input("请输入性别:")
                # newtel = input("请输入手机号:")
                self.cur.execute(sql2,modify_name)#删除姓名
                self.db.commit()
                self.add_student()#执行新添加
                break
        if u == 0:
            print("查无此人!")
        # 2. 遍历列表数据,如果学员存在修改姓名性别手机号,否则提示学员不存在
        # for i in self.student_list:
        #     if modify_name == i.name:
        #         i.name = input('姓名:')
        #         i.gender = input('性别:')
        #         i.tel = input('手机号:')
        #         print(f'修改学员信息成功,姓名{i.name}, 性别{i.gender}, 手机号{i.tel}')
        #         break
        # else:
        #     print('查无此人!')

    # 2.5 查询学员信息
    def search_student(self):
        # 1. 用户输入目标学员姓名
        search_name = input('请输入您要搜索的学员姓名:')
        sqlselect = "select * from studentmassage"
        self.cur.execute(sqlselect)
        results1 = self.cur.fetchall()  # 接收查询的信息,是一个元组
        #print(results1)
        # 2. 遍历列表。如果学员存在打印学员信息,否则提示学员不存在
        h=1
        for i in results1:
            name = i[0]
            gread = i[1]
            stuid = i[2]
            if search_name == name:
                print(f'姓名是{name}, 性别是{gread}, 手机号是{stuid}')
                h = 0

        if h==1:
            print('查无此人!')

    # 2.6 显示所有学员信息
    def show_student(self):
        sql4 = "select Name,sex,idcard from studentmassage"
        self.cur.execute(sql4)
        results2 = self.cur.fetchall()
        print(results2)
    # 2.7 保存学员信息
    def save_student(self):
        pass
    # 2.8 加载学员信息
    def load_student(self):
        pass



里面包含所有的功能,如果要添加功能需要自己定义def,然后在菜单页面添加相应操作

main.py

# 1. 导入管理系统模块
from managerSystem import *

# 2. 启动管理系统
# 保证是当前文件运行才启动管理系统:if --创建对象并调用run方法
if __name__ == '__main__':
    student_manager = StudentManager()
    student_manager.run()

总结

  • 函数
    • 定义和调用
    • 参数的使用
  • 面向对象
    • 定义类
    • 创建对象
    • 定义和调用实例属性
    • 定义和调用实例方法
  • 数据类型
    • 数据库形式存储
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/193710.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微信公众平台开发(46)在线电影/移动影院

    微信公众平台开发(46)在线电影/移动影院微信公众平台开发微信公众平台开发模式企业微信公众平台在线电影移动影院微信电影移动电影作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixi

  • XOR 加密简介

    XOR 加密简介作者: 阮一峰日期: 2017年5月31日本文介绍一种简单高效、非常安全的加密方法:XOR加密。一、XOR运算逻辑运算之中,除了 AND 和 OR,还有一种 XOR 运算,中文称为”异或运算”。它的定义是:两个值相同时,返回false,否则返回true。也就是说,XOR可以用来判断两个值是否不同。trueXORtrue/

  • POJ 2996 Help Me with the Game (模拟)

    POJ 2996 Help Me with the Game (模拟)题目链接:http://poj.org/problem?id=2996POJ训练计划中的模拟都是非常棒的模拟,也非常有代表性。这个题讲的是给你一个国际象棋棋盘,敲代码打印出黑白两方的棋子。以及棋子的坐标。可是须要注意的国际棋盘的坐标问题例如以下图这个国际棋盘能够看到数字轴和字母轴的方向以及增减关系。所以在这个题的统计的时候须要进行坐标转换。由于已经做过类似的方法…

  • Android定时器Timer简单使用「建议收藏」

    Android定时器Timer简单使用「建议收藏」Android定时器Timer简单使用Timer简介Timer使用总结Timer简介Timer(计时器)位于java.util包下,可用于创建定时任务,任务可以安排为一次性执行,也可以定期重复执行。每个计时器对象对应一个后台线程(TimerThread)。简单理解为创建Timer对象,对应TimerThread线程循环开始从TaskQueue队列中执行一个TimerTask任务。Timer使用创建Timer对象vartimer=Timer()添加需要执行的任务//创建计

  • jenkinsfile docker_python安装虚拟环境

    jenkinsfile docker_python安装虚拟环境前言之前我们用docker手动安装了jenkins环境,在jenkins中又安装了python3环境和各种安装包,如果我们想要在其他3台机器上安装,又是重复操作,重复劳动,那会显得很low,这里可以

  • 数据接口-免费版(股票数据API)「建议收藏」

    获取股票数据的源头主要有:数据超市、雅虎、新浪、Google、和讯、搜狐、ChinaStockWebService、东方财富客户端、证券之星、网易财经。数据超市2016年5月6日更新。根据最近频繁出现的数据超市,可以无限制获取相关数据,而不再需要使用爬虫等方式获取,这样不仅节省了极大资源,也有利于遍历数据。具体的方法不再赘述,列出来相关网站清单,开发者可自行到这些网站查询调用方法。聚合数据 htt…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号