最近在家闲来无事,入门了 python 语言。由于本人一直从事的 Java 开发,因此学起来容易许多。学习完后,就顺手作了一个学生管理系统(大学课设必备~~),来巩固了一下语法,下面会主要介绍下环境部署以及管理系统(代码在文末)。html
附学习教程:node
官方教程 : https://docs.python.org/zh-cn/3/python
廖雪峰 python 教程: [https://www.liaoxuefeng.com/wiki/1016959663602400/1017802264972000]mysql
菜鸟教程: https://www.runoob.com/python3/python3-comment.htmllinux
Mac OS + python3 + mysql5.6 + Visual Studio Codeweb
上面是个人开发环境,依据下方自行选择sql
操做系统 必备, MacOS , windows , linux 都是 ok 的数据库
python3 必备, 下载地址: https://www.python.org/downloads/release/python-370/编程
mysql 非必备, 个人管理系统用到了数据库,因此才装的vim
Ide 必备, 选择 vscode 单纯是我的喜爱 ,你也能够选择 pycharm (跟 idea 同家公司),nodepad++ 等任意一款工具,甚至 vim 编辑器
另附 :
vscode 的 python 基本开发配置 https://code.visualstudio.com/docs
mac 安装 python3 的一种方式 brew install python3
安装 mysql 驱动 python3 -m pip install pymysql
(你可能还会看到下面这种, python3 -m pip install mysql-connector
一开始用的时候踩了几个坑,就放弃了这个)
顾名思义就是对学生进行增删改查,学生信息存储在 mysql 数据库中,作这个系统主要目的是练习巩固基本语法,因此在逻辑处理上确定不会特别严谨,甚至没怎么考虑逻辑问题。
循环
条件分支
集合
类定义
函数定义
模块管理
打印语句
注释
主要定义了三个类, 详情看文末代码(不要太在乎 类名,变量名,函数名的命名风格,还没看过 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()