一、系统需求
使用面向对象编程思想完成学员管理系统的开发,具体如下:
- 系统要求:学员数据存储在⽂件中
- 系统功能:添加学员、删除学员、修改学员信息、查询学员信息、显示所有学员信息、保存学员信息及退出系统等功能。
二、创建程序文件
三、代码实现
数据库连接
con = pymysql.connect(host='localhost', user='root', password='manager', database='student', port=3306)
print('数据库连接成功!') # 连接成功,输出
# 创建一个游标
cur = con.cursor()
程序入口函数
# 一. 程序入口函数
def run(self):
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.load_student()
elif menu_num == 7:
# 退出系统 -- 退出循环
break
显示功能菜单函数
@staticmethod
def show_menu():
print('请选择如下功能:')
print('1:添加学员')
print('2:删除学员')
print('3:修改学员信息')
print('4:查询学员信息')
print('5:显示所有学员信息')
print('6:保存学员信息')
print('7:退出系统')
添加学员信息函数
def add_student(self):
try:
name = input('请输入您要添加的姓名:')
sex = input('请输入您要添加的性别:')
tel = input('请输入您要添加的电话:')
# 创建一个游标
cur = con.cursor()
# SQL 插入语句
sql = "insert into stutable(sname,ssex, stel)values (%s,%s,%s)"
value = (name, sex, tel)
# 执行sql语句
cur.execute(sql, value)
# 提交到数据库执行
con.commit()
print("添加成功")
con.close()
except:
# 如果发生错误则回滚
con.rollback()
print("添加失败")
删除学员信息函数
def del_student(self):
try:
del_name = input('请输入要删除的学员姓名:')
# SQL 插入语句
sql = "delete from stutable where sname = %s" # 数据库删除数据语句
value = (del_name)
# 执行sql语句
cur.execute(sql, value)
# 提交到数据库执行
con.commit()
print("删除成功")
con.close()
except pymysql.Error as e:
# 如果发生错误则回滚
con.rollback()
print('数据删除失败:'+str(e))
修改学员信息函数
# 2.4 修改学员信息
def modify_student(self):
try:
# 1. 用户输入目标学员姓名
modify_name = input('请输入要修改的学员姓名:')
# 1. 用户输入要修改的信息
modify_name1 = input('请输入要修改的学员姓名:')
# SQL 插入语句
sql = "update stutable set sname = %s where sname = %s" # 数据库更新数据语句
value = (modify_name1,modify_name)
# 执行sql语句
cur.execute(sql, value)
# 提交到数据库执行
con.commit()
print("数据修改成功")
con.close()
except pymysql.Error as e:
# 如果发生错误则回滚
con.rollback()
print("数据修改失败")
查询学员信息函数
def search_student(self):
try:
# 1. 用户输入目标学员姓名
search_name = input('请输入您要搜索的学员姓名:')
# SQL 插入语句
sql = "select * from stutable where sname = %s" # 数据库更新数据语句
value = (search_name)
# 执行sql语句
cur.execute(sql,value)
print("数据查询成功")
results = cur.fetchall() # 接收返回值,fetchall() :返回多个元组,即返回多个记录(rows),如果没有结
for row in results:
xingming = row[0]
xingbie = row[1]
dianhua = row[2]
print('姓名:%s,性别:%s,电话:%s' % (xingming, xingbie, dianhua))
con.close()
except pymysql.Error as e:
print("没有此人,数据查询失败")
显示所有学员信息函数
# 2.6 显示所有学员信息
def show_student(self):
# 1. 打印表头
print('姓名\t\t性别\t\t手机号')
try:
# SQL 插入语句
sql = "select * from stutable" # 数据库更新数据语句
# 执行sql语句
cur.execute(sql)
results_list = cur.fetchall()
for i in results_list:
for j in range(len(i)):
print(i[j],end="\t")
print('\n')
con.close()
except pymysql.Error as e:
print("数据查询失败")
自动保存学员信息函数
一、使用定时器实现每秒自动保存
def save_student(self):
print("保存成功!")
t2 = threading.Timer(1,function=self.save_student()) #使用定时器
t2.start()
t2.cancel()
二、读取文件中的数据并自动存入数据库中(每秒保存一条数据)
def load_student(self):
# 1. 打开文件:尝试r打开,如果有异常w
try:
f = open('student.data', 'r')
except:
f = open('student.data', 'w')
else:
# 2. 读取数据:文件读取出的数据是字符串还原列表类型;[{}] 转换 [学员对象]
data = f.readline() # 读取一行
new_list = eval(data) #new_list的值为[{'sname': '张三', 'ssex': '男', 'stel': '2342'}, {'sname': '32', 'ssex': '45', 'stel': '23'}]
for i in new_list:
print(i['sname'],i['ssex'],i['stel']) #读取列表中字典的值
sname = i['sname']
ssex = i['ssex']
stel = i['stel']
try:
# 创建一个游标
cur = con.cursor()
# SQL 插入语句
sql = "insert into stutable(sname,ssex, stel)values (%s,%s,%s)"
value = (sname, ssex, stel)
# 执行sql语句
cur.execute(sql, value)
# 提交到数据库执行
con.commit()
print("保存成功")
time.sleep(1)
except:
print("保存失败")
finally:
# 3. 关闭文件
f.close()
student.data文件中的数据
运行结果