最近在家閒來無事,入門了 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()