python 入门实战 - 学生管理系统

开篇

最近在家闲来无事,入门了 python 语言。由于本人一直从事的 Java 开发,因此学起来容易许多。学习完后,就顺手作了一个学生管理系统(大学课设必备~~),来巩固了一下语法,下面会主要介绍下环境部署以及管理系统(代码在文末)。html

附学习教程:node

  1. 官方教程 : https://docs.python.org/zh-cn/3/python

  2. 廖雪峰 python 教程: [https://www.liaoxuefeng.com/wiki/1016959663602400/1017802264972000]mysql

  3. 菜鸟教程: 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 编辑器

另附 :

  1. vscode 的 python 基本开发配置 https://code.visualstudio.com/docs

  2. mac 安装 python3 的一种方式 brew install python3

  3. 安装 mysql 驱动 python3 -m pip install pymysql

    (你可能还会看到下面这种, python3 -m pip install mysql-connector 一开始用的时候踩了几个坑,就放弃了这个)

学生管理系统简介

顾名思义就是对学生进行增删改查,学生信息存储在 mysql 数据库中,作这个系统主要目的是练习巩固基本语法,因此在逻辑处理上确定不会特别严谨,甚至没怎么考虑逻辑问题。

用到的 python 语法
  • 循环

  • 条件分支

  • 集合

  • 类定义

  • 函数定义

  • 模块管理

  • 打印语句

  • 注释

代码简介

主要定义了三个类, 详情看文末代码(不要太在乎 类名,变量名,函数名的命名风格,还没看过 python 代码规范

  1. MysqlDb 操做数据库(增删改查)

  2. StudentInfoPrint 打印学生信息(打印单条,打印列表)

  3. 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()
相关文章
相关标签/搜索