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

大家好,又见面了,我是你们的朋友全栈君。

目标

  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()

总结

  • 函数
    • 定义和调用
    • 参数的使用
  • 面向对象
    • 定义类
    • 创建对象
    • 定义和调用实例属性
    • 定义和调用实例方法
  • 数据类型
    • 数据库形式存储

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

原文地址:https://cloud.tencent.com/developer/article/2134591

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340