Python---綜合案例

一、系統需求分析

1、需求分析

使用面向對象編程思想完成學員管理系統的開發,具體如下:

① 系統要求:學員數據存儲在文件中

② 系統功能:添加學員、刪除學員、修改學員信息、查詢學員信息、顯示所有學員信息、保存學員信息及退出系統等功能。

2、角色分析

在面向對象編程思想中,必須找到要具體實現操作的實體。

通過系統實現添加學員操作

通過系統實現刪除學員操作

....

最終可以得出一個結論:這個通訊管理系統,其主要的實體就是通訊錄管理系統本身

注意事項

① 為了方便維護代碼,一般一個角色一個程序文件

② 項目要有主程序入口,習慣為main.py

3、創建項目

創建類文件 => studentManager.py

創建項目入口文件 => main.py

二、系統的代碼開發

1、學員信息存儲代碼分析

students = [{}, {}, {}]

學員姓名

學員年齡

學員電話

學員信息(姓名、年齡、電話),可以使用字典來表示。但是我們已經學習了面向對象,其學員信息可以完全用對象來進行實現。

學員(主體) => 屬性(姓名、年齡、電話)

2、student.py類文件編寫

需求:

學員信息包含:姓名、年齡、電話

添加__str__魔法方法,方便查看學員對象信息


# 定義一個Student類
class Student():
? ? # 定義魔術方法,用于初始化屬性信息
? ? def __init__(self, name, age, mobile):
? ? ? ? self.name = name
? ? ? ? self.age = age
? ? ? ? self.mobile = mobile
? ? # 定義魔術方法,用于打印輸出學員信息
? ? def __str__(self):
? ? ? ? return f'{self.name}, {self.age}, {self.mobile}'


3、編寫studentManager.py代碼

studentManager.py


class StudentManager(object):
? ? # 定義__init__魔術方法,用于初始化操作
? ? def __init__(self):
? ? ? ? # 定義一個列表,將來用于保存所有學員信息
? ? ? ? self.student_list = []


未來數據的存儲格式如下:


self.student_list = [p1, p2, p3, p4, ...]


4、學員管理系統具體功能說明

需求:

存儲數據的位置:文件(student.data)

  • 加載文件數據

  • 修改數據后保存到文件

存儲數據的形式:列表存儲學員對象

系統功能:

① 添加學員信息

② 刪除學員信息

③ 修改學員信息

④ 查詢學員信息

⑤ 顯示所有學員信息

⑥ 保存學員信息

⑦ 退出系統

編寫程序代碼,用于實現以上的所有功能:

☆ 基礎邏輯代碼


class StudentManager(object):
? ? # 定義一個__init__魔術方法,用于初始化數據
? ? def __init__(self):
? ? ? ? # 初始化一個student_list屬性,用于將來保存所有學員對象信息
? ? ? ? self.student_list = []

? ? # 定義load_student()方法
? ? def load_student(self):
? ? ? ? pass

? ? # 定義靜態show_help()方法
? ? @staticmethod
? ? def show_help():
? ? ? ? print('-' * 40)
? ? ? ? print('傳智教育通訊錄管理系統V2.0')
? ? ? ? print('1.添加學員信息')
? ? ? ? print('2.刪除學員信息')
? ? ? ? print('3.修改學員信息')
? ? ? ? print('4.查詢學員信息')
? ? ? ? print('5.顯示所有學員信息')
? ? ? ? # V2.0新增功能
? ? ? ? print('6.保存學員信息')
? ? ? ? print('7.退出系統')
? ? ? ? print('-' * 40)

? ? def add_student(self):
? ? ? ? pass

? ? def del_student(self):
? ? ? ? pass

? ? def mod_student(self):
? ? ? ? pass

? ? def show_student(self):
? ? ? ? pass

? ? def show_all(self):
? ? ? ? pass

? ? def save_student(self):
? ? ? ? pass

? ? # 定義一個run()方法,專門用于實現對管理系統中各個功能調用
? ? def run(self):
? ? ? ? # 1、調用一個學員加載方法,用于加載文件中的所有學員信息,加載完成后,把得到的所有學員信息保存在student_list屬性中
? ? ? ? self.load_student()
? ? ? ? # 2、顯示幫助信息,提示用戶輸入要實現的功能編號
? ? ? ? while True:
? ? ? ? ? ? # 顯示幫助信息
? ? ? ? ? ? self.show_help()
? ? ? ? ? ? # 提示用戶輸入要操作功能編號
? ? ? ? ? ? user_num = int(input('請輸入要操作功能的編號:'))
? ? ? ? ? ? if user_num == 1:
? ? ? ? ? ? ? ? self.add_student()
? ? ? ? ? ? elif user_num == 2:
? ? ? ? ? ? ? ? self.del_student()
? ? ? ? ? ? elif user_num == 3:
? ? ? ? ? ? ? ? self.mod_student()
? ? ? ? ? ? elif user_num == 4:
? ? ? ? ? ? ? ? self.show_student()
? ? ? ? ? ? elif user_num == 5:
? ? ? ? ? ? ? ? self.show_all()
? ? ? ? ? ? elif user_num == 6:
? ? ? ? ? ? ? ? self.save_student()
? ? ? ? ? ? elif user_num == 7:
? ? ? ? ? ? ? ? print('感謝您使用傳智教育通訊錄管理系統V2.0,歡迎下次使用!')
? ? ? ? ? ? ? ? break
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? print('信息輸入錯誤,請重新輸入...')


☆ main.py入口文件的編寫


# 從studentManager模塊中導入StudentManager類功能
from studentManager import StudentManager

# 定義入口代碼
if __name__ == '__main__':
? ? student_manager = StudentManager()
? ? student_manager.run()


☆ 編寫add_student()學員添加方法實現

需求:用戶輸入學員姓名、年齡、手機號,將學員添加到系統。

步驟:

① 用戶輸入姓名、年齡、手機號

② 創建該學員對象(真正添加到列表中的是對象)

③ 將該學員對象添加到列表[] => append()


? ? from student import Student
?? ?... ? ?
? ? ...
? ? ...
? ? def add_student(self):
? ? ? ? # 提示用戶輸入學員信息
? ? ? ? name = input('請輸入學員的姓名:')
? ? ? ? age = int(input('請輸入學員的年齡:'))
? ? ? ? mobile = input('請輸入學員的電話:')
? ? ? ? # 使用Student類實例化對象
? ? ? ? student = Student(name, age, mobile)
? ? ? ? # 調用student_list屬性,追加student對象信息
? ? ? ? self.student_list.append(student)
? ? ? ? print('學員信息已添加成功')


☆ 編寫del_student()學員刪除方法實現

需求:用戶輸入目標學員姓名,如果學員存在則刪除該學員。

步驟:

① 用戶輸入目標學員姓名

② 遍歷學員數據列表,如果用戶輸入的學員姓名存在則刪除,否則則提示該學員不存在。


?? ? ? ?def del_student(self):
? ? ? ? # 提示用戶輸入要刪除的學員姓名
? ? ? ? name = input('請輸入要刪除的學員姓名:')
? ? ? ? # 對student_list屬性(本質列表)進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? # 找到了要刪除的學員,刪除
? ? ? ? ? ? ? ? self.student_list.remove(i)
? ? ? ? ? ? ? ? print(f'學員{name}信息刪除成功')
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要刪除的學員不存在...')


☆ 編寫mod_student()學員修改方法實現


? ? def mod_student(self):
? ? ? ? # 提示用戶輸入要修改的學員姓名
? ? ? ? name = input('請輸入要修改的學員姓名:')
? ? ? ? # 對student_list屬性進行遍歷,判斷要修改的學員姓名是否存在
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? i.name = input('請輸入修改后的學員姓名:')
? ? ? ? ? ? ? ? i.age = int(input('請輸入修改后的學員年齡:'))
? ? ? ? ? ? ? ? i.mobile = input('請輸入修改后的學員電話:')
? ? ? ? ? ? ? ? print(f'學員信息修改成功,修改后信息如下 => 學員姓名:{i.name},學員年齡:{i.age},學員電話:{i.mobile}')
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要修改的學員信息不存在...')


☆ 編寫show_student()學員查詢方法實現


? ? def show_student(self):
? ? ? ? # 提示用戶輸入要查詢的學員姓名
? ? ? ? name = input('請輸入要查詢的學員姓名:')
? ? ? ? # 對student_list屬性進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? if i.name == name:
? ? ? ? ? ? ? ? print(i)
? ? ? ? ? ? ? ? break
? ? ? ? else:
? ? ? ? ? ? print('您要查找的學員信息不存在...')


☆ 編寫show_all()方法查詢所有學員實現


? ? def show_all(self):
? ? ? ? # 直接對列表進行遍歷
? ? ? ? for i in self.student_list:
? ? ? ? ? ? print(i)


☆ 編寫save_student()方法學員信息保存功能實現

需求:將所有學員信息都保存到存儲數據的文件。

步驟:

① 打開文件 ② 讀寫文件 ③ 關閉文件

思考:

① 文件寫入的數據是學員對象的內存地址嗎?

答:一定不能是對象的內存地址,因為隨著系統的運行,內存地址可能會隨時改變。

② 文件內數據要求的數據類型是什么?答:必須是字符串,可以使用str()轉換

擴展:把對象轉換為dict字典格式 => __dict__

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215046.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

56.windows docker 安裝ES、Go操作ES

文章目錄 一、環境準備1、 docker安裝ES2、啟動容器3、圖像化客戶端工具ElasticSearch-Head 二、Go ES連接與認證1、 連接ES2、配置ES認證 三、索引的增刪改查四、文檔的增刪改創建單個文檔根據文檔id刪除文檔批量刪除文檔批量創建文檔 五、文檔查詢列表查詢精確匹配模糊匹配嵌…

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、顯卡驅動安裝 執行nvidia-smi查看安裝情況 二、cuda安裝 cuda官網下載cuda_11.6.2_510.47.03_linux.run,安裝執行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安裝項,驅動不用安裝,即第一項(Driver)&#xff…

如何使用Java在Excel中添加動態數組公式?

本文由葡萄城技術團隊發布。轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 前言 動態數組公式是 Excel 引入的一項重要功能,它將 Excel 分為兩種風格:Excel 365 和傳統 …

虹科技術 | IO-Link Wireless如何賦能工廠車間邁向無線自動化?

大規模定制、卓越運營和商業智能正在從根本上改變制造業,為了在競爭中立于不敗之地,制造商需要更加靈活、通用、可擴展和具有成本效益的機器和生產線。隨著制造商向工業 4.0 邁進,更好的適應性、更高的吞吐量和更短的停機時間是他們的共同要求…

打包CSS

接上一個打包HTML繼續進行CSS的打包 1.在之前的文件夾里的src文件夾創建一個css文件 2.在瀏覽器打開webpack——>中文文檔——>指南——>管理資源——>加載CSS 3.復制第一句代碼到終端 4.復制下圖代碼到webpack.config.js腳本的plugins:[.....]內容下…

【docker】Hello World

搜索hello-world鏡像 docker search hello-world拉去鏡像 docker pull hello-world查看本地鏡像 docker images 運行鏡像 docker run hello-world查看所有的容器 docker ps -a查詢start狀態容器 docker ps 輸出介紹 CONTAINER ID: 容器 ID。IMAGE: 使用的鏡像。COMMAN…

面試經典150題(14)

leetcode 150道題 計劃花兩個月時候刷完,今天(第五天)完成了1道(14)150: 14. (134. 加油站)題目描述: 在一條環路上有 n 個加油站,其中第 i 個加油站有汽油 gas[i] 升。 你有一輛油…

<JavaEE> 鎖進階 -- synchronized 的鎖優化

目錄 一、如何形容 synchronized 鎖 二、鎖升級 2.1 偏向鎖 2.2 輕量級鎖 2.3 重量級鎖 三、鎖消除 四、鎖粗化 一、如何形容 synchronized 鎖 synchronized 鎖是一個內部優化非常好的鎖,大部分情況下這個鎖都是適用的。在初始階段 synchronized 是一個樂觀…

分布式搜索引擎02

分布式搜索引擎02 在昨天的學習中,我們已經導入了大量數據到elasticsearch中,實現了elasticsearch的數據存儲功能。但elasticsearch最擅長的還是搜索和數據分析。 所以今天,我們研究下elasticsearch的數據搜索功能。我們會分別使用DSL和Res…

react面試總結2

redux中sages和thunk中間件的區別,優缺點 Redux 中的 redux-saga 和 redux-thunk 都是中間件,用于處理異步操作,但它們有一些區別。 Redux Thunk: 簡單易用:redux-thunk 是比較簡單直觀的中間件,它允許 …

手撕分布式緩存---HTTP Server搭建

經過了前兩個章節的學習,分布式緩存的存儲與新增我們已經實現了,并且對其做了高可用處理。本章節我們剝離和緩存強相關的邏輯,開始搭建一個HTTP服務器,畢竟緩存數據庫搭建完之后別人沒法訪問也是沒有用處的。這一章節我們重點學習…

ElasticSearch應用場景以及技術選型[ES系列] - 第496篇

歷史文章(文章累計490) 《國內最全的Spring Boot系列之一》 《國內最全的Spring Boot系列之二》 《國內最全的Spring Boot系列之三》 《國內最全的Spring Boot系列之四》 《國內最全的Spring Boot系列之五》 《國內最全的Spring Boot系列之六》 M…

PDF控件Spire.PDF for .NET【轉換】演示:將 PDF 轉換為 Excel

PDF是一種通用的文件格式,但它很難編輯。如果您想修改和計算PDF數據,將PDF轉換為Excel將是一個理想的解決方案。在本文中,您將了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中將 PDF 轉換為 Excel。 Spire.Doc 是一款專門對 Word 文檔進行…

【華為數據之道學習筆記】3-10元數據管理架構及策略

元數據管理架構包括產生元數據、采集元數據、注冊元數據和運 維元數據。 產生元數據: 制定元數據管理相關流程與規范的落地方案,在IT產品開發過程中實現業務元數據與技術元數據的連接。 采集元數據: 通過統一的元模型從各類IT系統中自動采集元…

多線程(初階九:線程池)

目錄 一、線程池的由來 二、線程池的簡單介紹 1、ThreadPoolExecutor類 (1)核心線程數和最大線程數: (2)保持存活時間和存活時間的單位 (3)放任務的隊列 (4)線程工…

Axure的安裝以及簡單使用

目錄 Axure簡介 是什么 有什么用 Axure的優缺點 優點: 缺點: 安裝 漢化 Axure的使用 工具欄 頁面 ?編輯 添加子頁面 ?編輯 Axure簡介 是什么 Axure是一款著名的原型設計工具。它允許用戶創建交互式線框圖、流程圖、原型和其他設計文檔&…

「Verilog學習筆記」脈沖同步電路

專欄前言 本專欄的內容主要是記錄本人學習Verilog過程中的一些知識點,刷題網站用的是牛客網 timescale 1ns/1nsmodule pulse_detect(input clk_fast , input clk_slow , input rst_n ,input data_in ,output dataout );reg data_level, dat…

第十一章 React 封裝自定義組件

一、專欄介紹 🌍🌍 歡迎加入本專欄!本專欄將引領您快速上手React,讓我們一起放棄放棄的念頭,開始學習之旅吧!我們將從搭建React項目開始,逐步深入講解最核心的hooks,以及React路由、…

【NLP】RAG 應用中的調優策略

? 檢索增強生成應用程序的調優策略 沒有一種放之四海而皆準的算法能夠最好地解決所有問題。 本文通過數據科學家的視角審視檢索增強生成(RAG)管道。它討論了您可以嘗試提高 RAG 管道性能的潛在“超參數”。與深度學習中的實驗類似,例如&am…

關于jinja2高版本api變化導致notebook導出html失敗的問題

最新jinja2版本已經到了3.1.2,但是nbconvert引用的應該是老版本,具體代碼報錯如下 Type "help", "copyright", "credits" or "license" for more information. >>> import nbconvert Traceback (most…