從零開始擼python

来源:https://www.cnblogs.com/AC-Mirabelle/archive/2022/10/10/16776880.html
-Advertisement-
Play Games

開始挑戰30天從零開始 >python全棧工程師 Day1:圖書管理系統 沒有選用pycharm,選擇了更輕量化的Sublime Text編輯器,擼了一個用json充當資料庫的圖書管理系統,簡單的熟悉一下流程 1 # 圖書館開館了,準備開發一個圖書管理系統。 2 # 用json模擬資料庫的方式完成下 ...


開始挑戰30天從零開始--------->python全棧工程師

Day1:圖書管理系統

沒有選用pycharm,選擇了更輕量化的Sublime Text編輯器,擼了一個用json充當資料庫的圖書管理系統,簡單的熟悉一下流程

 

 

  1 # 圖書館開館了,準備開發一個圖書管理系統。
  2 # 用json模擬資料庫的方式完成下列業務:
  3 
  4 # 1.用戶登錄;login()
  5 # 2.顯示圖書列表;showAllBooks()
  6 # 3.圖書上架;addBook()  增加圖書信息
  7 # 4.圖書下架;delBook() 刪除增加圖書信息
  8 
  9 # 5.借書;lendBook()判斷借出狀態是不是可借,如果是,就更改為已借出
 10 # 6.還書;returnBook()
 11 # 7.退出。
 12 
 13 # a.    使用json數據保存用戶數據(包含用戶名,密碼,姓名);
 14 # b.    使用json數據保存圖書數據(包含編號,書名,作者,借出狀態state); 
 15 # 可借---已借出
 16 # c.    編寫用戶各個業務函數,在main函數中將所有函數串聯起來;
 17 
 18 
 19 # userList='[{"用戶名":"Alex","密碼":123,"姓名":"張三"}]'
 20 # bookList='[{"編號":1001,"書名":"觀察人類","作者":"陳浩星","借出狀態":"已借出"}]'
 21 # with open("uer.txt","w") as f1,open("book.txt","w") as f2:
 22 #     f1.write(userList)
 23 #     f2.write(bookList)
 24 
 25 
 26 import json
 27 import datetime
 28 import time
 29 
 30 
 31 def readUserData():
 32     with open("uer.txt","r") as f:
 33         jsonData=f.read()
 34     userData=json.loads(jsonData)
 35     return userData
 36 
 37 
 38 
 39 def writeUserData(userList):
 40     jsonData=json.dumps(userList,ensure_ascii=False)
 41     with open("user.txt","w") as f:
 42         f.write(jsonData)
 43         print("----------------用戶數據寫入成功!")
 44 
 45 
 46 
 47 
 48 
 49 def readBookData():
 50     with open("book.txt","r") as f:
 51         jsonData=f.read()
 52     bookData=json.loads(jsonData)
 53     return bookData
 54 
 55 
 56 def writeBookData(bookList):
 57     jsonData=json.dumps(bookList,ensure_ascii=False)
 58     with open("book.txt","w") as f:
 59         f.write(jsonData)
 60         print("------------------圖書信息修改成功!")
 61 
 62 def login():
 63     i=0
 64     j=0
 65     msg="失敗"
 66     userList=readUserData()
 67 
 68     while i<5:
 69         i+=1
 70         count=input("請輸入用戶名:")
 71         for user in userList:
 72             if count==user["用戶名"]:
 73                 while j<3:
 74                     j+=1
 75                     pwd=input("請輸入密碼:")
 76                     if pwd==str(user["密碼"]):
 77                         msg="成功"
 78                         print("===============登錄成功================")
 79                         break
 80                     else:
 81                         print("---------------密碼有誤,請重新輸入----------------")
 82                 if msg=="失敗":
 83                     print("~~~~~~~~~~~~~密碼輸錯超過3次!~~~~~~~~~~~~~~~~~")
 84             else:
 85                 print("---------------------------用戶名不存在,請重新輸入!-------------------------")
 86         if msg=="成功":
 87             break
 88     if msg=="失敗":
 89         print("賬戶登錄異常,請聯繫管理員")
 90     return(msg)
 91 
 92 
 93 def showAllBooks():
 94     bookList=readBookData()
 95     print("---------------------------------------------------------------------------")
 96     for book in bookList:
 97         print(book["編號"],"  ",book["書名"],"  ",book["作者"],"  ",book["借出狀態"])
 98     print("---------------------------------------------------------------------------")
 99 
100 
101 
102 
103 def addBook():
104     # num=int(input("請輸入圖編號:"))
105     fig=[0]
106     bookList=readBookData()
107     for book in bookList:
108         fig.append(book["編號"])
109     newfig=max(fig)+1
110     name=input("請輸入圖書名:")
111     author=input("請輸入作者名:")
112     status="可借"
113     newbook={"編號":newfig,"書名":name,"作者":author,"借出狀態":status}
114 
115     bookList.append(newbook)
116     # book=json.dumps(bookList,ensure_ascii=False)
117     # with open("book.txt","w") as f:
118     #     f.write(book)
119     writeBookData(bookList)
120     print("圖書添加成功!")
121 
122 def delBook():
123     bookList=readBookData()
124     data=input("請輸入要下架的圖書名稱或者編號:")
125     for book in bookList:
126         if data==book["書名"] or int(data)==book["編號"]:
127             bookList.remove(book)#刪除圖書信息
128             print("-----------圖書【{}】已下架!".format(book["書名"]))
129             writeBookData(bookList)
130     print("輸入圖書信息有誤!")
131 
132 
133 def lendBook():
134     bookList=readBookData()
135     num=int(input("請輸入要借的圖書編號:"))
136     msg=0 #0表示沒有 1可借 2不可借
137     for book in bookList:
138         if num==book["編號"]:
139             if book["借出狀態"]=="可借":
140                 msg=1
141                 print("您已成功借出圖書,{}!".format(book["書名"]))
142                 book["借出狀態"]="已借出"
143                 writeBookData()
144             else:
145                 msg=2
146                 print("-------{}已借出,歡迎下次再來!".format(book["書名"]))
147     if msg==0:
148         print("該圖書未被圖書館收錄,請聯繫管理員補充")
149 
150 
151 
152 
153 
154 def returnBook():
155     bookList=readBookData()
156     num=int(input("請輸入還書編號:"))
157     msg=0
158     for book in bookList:
159         if num==book["編號"]:
160             if book["借出狀態"]=="已借出":
161                 msg=1
162                 print("----------成功歸還圖書{}-----------".format(book["書名"]))
163                 book["借出狀態"]="可借"
164                 writeBookData(bookList)
165             elif book["借出狀態"]=="可借":
166                 msg=2
167                 print("------------歸還失敗!-------------")
168     if msg==0:
169         print("------------該圖書不在館藏之內,歸還失敗!-------------")
170 
171 
172 
173 
174 
175 #------------主函數-----------------
176 #-----------------------------------
177 def main():
178     print("--------------------------------------圖書管理系統1.0-------------------------------------")
179     msg=login()
180     print("登錄結果:",msg)
181     if msg=="成功":
182         while 1==1:
183             print("1.顯示所有圖書;\n2.圖書上架;\n3.圖書下架;\n4.借書;\n5.還書")
184 
185             print("-----------------------------------------------------------------------------------------")
186             act=int(input("請輸入業務編號(1-5):"))
187             if act==1:
188                 showAllBooks()
189 
190             elif act==2:
191                 addBook()
192 
193             elif act==3:
194                 delBook()
195 
196             elif act==4:
197                 lendBook()
198 
199             elif act==5:
200                 returnBook()
201 
202             else:
203                 print("沒有此業務!")
204 
205 
206 
207 
208 
209 #-----------------------------------
210 
211 if __name__=='__main__':
212     main()

總體來說login的時候只考慮交互邏輯,並沒有考慮到安全性等情況,安全邏輯較低,較容易收到DDos攻擊,正式建站的時候,安全邏輯要考慮進去,以上是第一天全部工作,加油~哈哈哈


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 滑鼠拖拽元素移動,算是一個稍微有點點複雜的交互。 而在本文,我們就將打破常規,向大家介紹一種超強的僅僅使用純 CSS 就能夠實現的滑鼠點擊拖拽效果。 在之前的這篇文章中 -- 不可思議的純 CSS 實現滑鼠跟隨,我們介紹了非常多有意思的純 CSS 的滑鼠跟隨效果,像是這樣: 但是,可以看到,上 ...
  • AgileBoot 倉庫 後端地址:https://github.com/valarchie/AgileBoot-Back-End 技術棧:Springboot / Spring Security / MyBatis Plus JPA 無XML/ Druid / Redis / Hutool / J ...
  • 平時聽到一些同學說技術方案沒什麼深度,很難講出來,怎麼去體現技術方案設計的深度是大家普遍關心的一個問題,這個問題不是個例問題,因此分享下自己的一些觀點和看法。主要從三個部分來講: 第一部分主要分析為什麼技術方案沒有體現出深度,找到問題後就好解決,並提出技術方案的廣度和深度特征; 第二部分是技術... ...
  • 本文重點分析介紹在營銷自動化業務中實時營銷場景的背景價值、實時營銷引擎架構以及項目開發過程中如何利用動態隊列做好業務流量隔離,動態發佈,使用規則引擎來提升營銷規則的配置效率等幾種關鍵技術設計實踐。 ...
  • hi,這裡桑小榆。 本篇,我們開始探討微服務架構這塊內容,並打算專門寫一個微服務的專欄。寫微服務的知識體系其實早有動機,把微服務架構知識梳理完整,由於很多因素沒能開展開來,所以一直擱置了。 這次,我繼續持大道至簡的思想,來探討微服務架構的全面內容。儘管我們在實際工作中並沒有用到這塊內容,本職本分或許 ...
  • 什麼是滾動數組 簡單來說,滾動數組就是一種具有短暫記憶力的數組,它會犧牲時間來節省空間,用size=3的數組來“存儲”30000個數據。這麼說有點離譜、抽象,畢竟a[3]怎麼存儲a[30000]裡面的東西呢。這就是滾動數組的特性,即只記錄少量的後續需要使用的數據,而將之前用過且不再需要調用的數據拋棄 ...
  • 1.文章添加頁url開設 2.添加文章頁面已經富文本編輯器的使用 富文本編輯器kindeditor只要到官網下載下來,放入static文件夾就行,如何在html的script處添加對應固定代碼 {% extends 'backend/base.html' %} {% block article %} ...
  • 相信使用過Spring的眾多開發者都知道Spring提供了非常好用的JavaMailSender介面實現郵件發送,在Spring Boot的Starter模塊中也為此提供了自動化配置。 下麵通過實例來講解如何在Spring Boot中使用JavaMailSender發送郵件。 什麼是SMTP? SM ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...