开篇
最近在家闲来无事,入门了 python 语言。因为本人一直从事的 Java 开发,所以学起来容易许多。学习完后,就顺手做了一个学生管理系统(大学课设必备~~),来巩固了一下语法,下面会主要介绍下环境部署以及管理系统(代码在文末)。
附学习教程:
正文
基本环境
Mac OS + python3 + mysql5.6 + Visual Studio Code
上面是我的开发环境,依据下方自行选择
操作系统 必备, MacOS , windows , linux 都是 ok 的
mysql 非必备, 我的管理系统用到了数据库,所以才装的
Ide 必备, 选择 vscode 单纯是个人喜好 ,你也可以选择 pycharm (跟 idea 同家公司),nodepad++ 等任意一款工具,甚至 vim 编辑器
另附 :
mac 安装 python3 的一种方式 brew install python3
安装 mysql 驱动 python3 -m pip install pymysql
(你可能还会看到下面这种, python3 -m pip install mysql-connector 一开始用的时候踩了几个坑,就放弃了这个)
学生管理系统简介
顾名思义就是对学生进行增删改查,学生信息存储在 mysql 数据库中,做这个系统主要目的是练习巩固基本语法,所以在逻辑处理上肯定不会特别严谨,甚至没怎么考虑逻辑问题。
用到的 python 语法
循环
条件分支
集合
类定义
函数定义
模块管理
打印语句
注释
代码简介
主要定义了三个类, 详情看文末代码(不要太在意 类名,变量名,函数名的命名风格,还没看过 python 代码规范)
MysqlDb 操作数据库(增删改查)
StudentInfoPrint 打印学生信息(打印单条,打印列表)
StudentSystem 学生管理 (程序入口类)
总结
有一句话说的好,语言都是相通的。当你熟悉了一门编程语言后,再去学习其他语言就会事半功倍。当然要想真正掌握一门语言需要时间的磨练。所谓入门就是掌握基本语法,python 中还有很多高级特性需要学习,比如 IO,网络编程,线程,web开发等等。另外就是只有更多的实战,才能掌握那些知识点,光看是不行的。
附: 代码及数据库脚本
数据库脚本
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS `tb_student`;
CREATE TABLE `tb_student` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL,
`sex` varchar(2) COLLATE utf8mb4_bin DEFAULT NULL,
`birthday` varchar(10) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
SET FOREIGN_KEY_CHECKS = 1;
代码
from datetime import datetime
import pymysql
'''
数据库工具类,提供增删改查操作
'''
class MysqlDb:
def __init__(self, host, username, password, db_name):
self.conn = pymysql.connect(
host=host, # 数据库主机地址
user=username, # 数据库用户名
passwd=password, # 数据库密码
database=db_name # 数据库
)
self.my_cursor = self.conn.cursor()
# 插入一条数据
def insertOne(self, sql, params):
self.my_cursor.execute(sql, params)
self.conn.commit()
return self.my_cursor.rowcount
# 查询全部
# TODO self.get_cursor().execute(sql) self.get_cursor().fetchall(), 报错
def findAll(self, sql):
self.my_cursor.execute(sql)
return self.my_cursor.fetchall()
# 删除一条数据
def deletebyId(self, sql, id):
self.my_cursor.execute(sql, id)
self.conn.commit()
# 根据参数查询
def findByParams(self, sql, params):
self.my_cursor.execute(sql, params)
return self.my_cursor.fetchall()
# 更新单条数据
def updateOne(self, sql, params):
self.my_cursor.execute(sql, params)
self.conn.commit()
'''
格式化输出学生信息
可以打印单条,也可以打印多条
'''
class StudentInfoPrint:
# 打印单个学生信息
def beauty_print_one(self, stu):
print(f"\t\t{stu[0]} | {stu[1]} | {stu[2]} | {stu[3]}")
# 打印学生列表
def beauty_print_list(self, student_list):
print(f"\t\t序号| 姓名 | 性别 | 生日")
for stu in student_list:
self.beauty_print_one(stu)
'''
学生信息管理类
'''
class StudentSystem:
def __init__(self):
self.data = []
self.mysql_db = MysqlDb('localhost','root', '123456', 'student_sys')
self.my_print = StudentInfoPrint()
# 显示菜单
def show_menu(self):
print("""
-- 1.查询所有学生 --
-- 2.添加学生信息 --
-- 3.修改学生信息 --
-- 4.删除学生信息 --
-- 5.查询学生信息 --
-- 0.退出系统 --
""")
# 显示所有学生信息
def show_all(self):
student_list = self.mysql_db.findAll('select * from tb_student')
self.my_print.beauty_print_list(student_list)
# 添加学生信息
def add_student(self):
name = input('请输入姓名:')
sex = input('请输入性别:')
birthday = input('请输入生日:')
insert_sql = 'insert into tb_student(name, sex, birthday) values(%s, %s, %s)'
sql_params = (name, sex, birthday)
rowcount = self.mysql_db.insertOne(insert_sql, sql_params)
if rowcount == 1:
print("添加成功")
# 根据学生姓名查询学生信息
def find_byname(self, keyword):
select_sql = 'select * from tb_student where name like %s'
student_list = self.mysql_db.findByParams(select_sql, '%'+keyword+'%')
return student_list
# 修改学生信息
def modify_student(self):
keyword = input('请输入要修改的学生姓名:')
student_list = self.find_byname(keyword)
if student_list:
if len(student_list) == 1:
student_id = student_list[0][0]
else:
self.my_print.beauty_print_list(student_list)
student_id = input('查询出多条结果,请输入要修改的学生 id: ')
# 执行修改操作
option = input('请选择要修改的信息,1. 姓名 | 2. 性别 | 3. 生日 : ')
if option == '1':
keyword = input('请输入要修改的姓名:')
update_sql = 'update tb_student set name=%s where id=%s'
elif option == '2':
keyword = input('请输入要修改的性别:')
update_sql = 'update tb_student set sex=%s where id=%s'
elif option == '3':
keyword = input('请输入要修改的生日:')
update_sql = 'update tb_student set birthday=%s where id=%s'
sql_params = (keyword, student_id)
self.mysql_db.updateOne(update_sql, sql_params)
else:
print('查无此人')
# 删除学生信息
def del_student(self):
keyword = input('请输入要删除的学生姓名:')
student_list = self.find_byname(keyword)
if student_list:
student_id = ''
if len(student_list) == 1:
student_id = student_list[0][0]
else:
self.my_print.beauty_print_list(student_list)
student_id = input('查处多条记录,请输入要删除的学生 id: ')
# 执行删除操作
self.mysql_db.deletebyId('delete from tb_student where id=%s', student_id)
else:
print('查询结果为空!')
# 查询并打印学生列表
def find_and_print(self):
name = input('请输入要查询的学生姓名: ')
student_list = self.find_byname(name)
self.my_print.beauty_print_list(student_list)
# 执行对应的操作
def execute_operation(self, op):
if op == '1':
self.show_all()
elif op == '2':
self.add_student()
elif op == '3':
self.modify_student()
elif op == '4':
self.del_student()
elif op == '5':
self.find_and_print()
elif op == '0':
print('已退出')
exit(0)
# 启动入口函数
def start(self):
while True:
self.show_menu()
op = input("请输入要执行的操作序号: ")
self.execute_operation(op)
if __name__ == '__main__':
app = StudentSystem()
app.start()