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()
相關文章
相關標籤/搜索