[terry筆記]對人員列表文件進行資料庫操作

来源:http://www.cnblogs.com/kkterry/archive/2016/11/05/6034340.html
-Advertisement-
Play Games

原文件(數據已經脫敏): ...


 

 

原文件(數據已經脫敏):

staff_id,name,age,phone,dept,enroll_date
1,姬建明,25,152015410,運維,2013-11-01
2,劉海龍,26,186184177,運維,2012-12-25
3,閆培飛,25,157016802,IT,2015-10-14
4,孫海濤,33,158206312,IT,2005-09-27
5,張亞磊,24,137338110,IT,2014-06-23
6,張松,26,136837094,IT,2013-10-08
7,劉文劍,25,155550213,SA,2014-05-21
8,魏曼,18,189108670,運維,2014-05-21
9,宋曉楠,18,110168082,測試,2014-05-21
10,吳東杭,21,177108908,運維,1995-08-29
11,李靜,18,186127011,測試,2015-08-20
12,文鑫,23,181805410,無,2016-7-31
13,於洪林,31,133232639,運維,2013-6-24
14,王新凱,22,169965127,運維,2015-10-31
15,蓋爽,18,185003763,運維,2015-10-28
16,張振興,27,135214320,運維,2015-10-28
17,侯梓煜,21,186819511,運維,2016-10-31
18,張玉新,27,101241184,運維,2015-10-28
19,紀冠宇,24,150113743,運維,2015-11-12
20,李乾龍,24,185105376,運維,2015-7-13
21,楊洋,21,188131922,運維,2015-1-1
22,張澤偉,27,101029861,無,2011-2-1

如下是要求:
# 有以下員工信息表staff_table
# 1, AlexLi, 22, 13651054608, IT, 2013-04-01
# 現需要對這個員工信息文件,實現增刪改查操作
# 可進行模糊查詢,語法至少支持下麵3種:
# select name, age from staff_table where age > 22
# select * from staff_table where dept = "IT"
# select * from staff_table where enroll_date like "2013"
# 查到的信息,列印後,最後面還要顯示查到的條數
# 可創建新員工紀錄,以phone做唯一鍵,staff_id需自增
# 可刪除指定員工信息紀錄,輸入員工id,即可刪除
# 可修改員工信息,語法如下:
# UPDATE staff_table SET dept = "Market" where dept = "IT"
# 註意:以上需求,要充分使用函數,請盡你的最大限度來減少重覆代碼!
# select * from staff_table where age < 25

自己寫的代碼,替換和刪除後續補上:
  1 #查詢函數
  2 def select(column,term=[],symbol=[],option=[]):
  3     f=open("staff_table","r",encoding="utf-8")
  4     object = f.readline().strip().split(",")
  5 
  6     #查詢column為*,不帶條件,比如:select * from staff_table
  7     if column == "*" and not term and not symbol and not option:
  8         for line in f:
  9             object = line.strip().split(",")
 10             print("%s %s %s %s %s %s" % (object[0], object[1], object[2], object[3], object[4], object[5]))
 11         exit()
 12 
 13     #查詢column為*,帶條件,比如:select * from staff_table where age > 25
 14     if column == "*" and term:
 15         show_list=[]
 16         position = object.index(term)
 17         for line in f:
 18             object = line.strip().split(",")
 19             if object[0].isdigit:
 20                 if symbol == "=":
 21                     if object[position] == option.strip('\"'):
 22                         show_list.append(object)
 23                 elif symbol == ">":
 24                     if object[position] > option.strip('\"'):
 25                         show_list.append(object)
 26                 elif symbol == "<":
 27                     if object[position] < option.strip('\"'):
 28                         show_list.append(object)
 29                 elif symbol == ">=":
 30                     if object[position] >= option.strip('\"'):
 31                         show_list.append(object)
 32                 elif symbol == "<=":
 33                     if object[position] <= option.strip('\"'):
 34                         show_list.append(object)
 35                 elif symbol == "like":
 36                     if  option.strip('\"') in object[position]:
 37                         show_list.append(object)
 38         i = 0
 39         for i, ele in enumerate(show_list):
 40             print("%s %s %s %s %s %s" % (ele[0], ele[1], ele[2], ele[3], ele[4], ele[5]))
 41         print("共%s位成員%s %s %s" % (i + 1, term, symbol, option))
 42         exit()
 43 
 44     # 查詢column為自選,不帶條件,比如:select name,age,dept from staff_table
 45     if column != "*" and not term and not symbol and not option:
 46         column = column.split(",")
 47         position_list = []
 48         show_list1 = []
 49         show_list2 = []
 50         for i in range(0,len(column)):
 51             position = object.index(column[i])
 52             position_list.append(position)
 53         for line in f:
 54             object = line.strip().split(",")
 55             for i in range(0,len(position_list)):
 56                 show_list1.append(object[position_list[i]])
 57             show_list2.append(show_list1)
 58             show_list1 = []
 59         for i in show_list2:
 60             print(i)
 61         exit()
 62 
 63     # 查詢column為自選,帶條件,比如:select name,age,dept from staff_table where dept = "運維"
 64     if column != "*" and term:
 65         show_list=[]
 66         position = object.index(term)
 67         for line in f:
 68             object_data = line.strip().split(",")
 69             if object_data[0].isdigit:
 70                 if symbol == "=":
 71                     if object_data[position] == option.strip('\"'):
 72                         show_list.append(object_data)
 73                 elif symbol == ">":
 74                     if object_data[position] > option.strip('\"'):
 75                         show_list.append(object_data)
 76                 elif symbol == "<":
 77                     if object_data[position] < option.strip('\"'):
 78                         show_list.append(object_data)
 79                 elif symbol == ">=":
 80                     if object_data[position] >= option.strip('\"'):
 81                         show_list.append(object_data)
 82                 elif symbol == "<=":
 83                     if object_data[position] <= option.strip('\"'):
 84                         show_list.append(object_data)
 85                 elif symbol == "like":
 86                     if  option.strip('\"') in object_data[position]:
 87                         show_list.append(object_data)
 88         column = column.split(",")
 89         position_list = []
 90         show_list1 = []
 91         show_list2 = []
 92         for i in range(0,len(column)):
 93             position = object.index(column[i])
 94             position_list.append(position)
 95         for j in range(0,len(show_list)):
 96             for i in range(0,len(position_list)):
 97                 show_list1.append(show_list[j][position_list[i]])
 98             show_list2.append(show_list1)
 99             show_list1 = []
100         for i in show_list2:
101             print(i)
102         exit()
103 
104 #插入函數:
105 def insert(name,age,phone,dept,enroll_date):
106     f = open("staff_table","r",encoding="utf-8")
107     num = 0
108     for line in f:
109         object = line.strip().split(",")
110         if phone == object[3]:
111             print("手機號重覆,無法插入")
112             exit()
113         num = object[0]
114     f.close()
115     num = int(num)
116     num = num + 1
117     num = str(num)
118     name = name.strip('\"')
119     age = str(age)
120     phone = str(phone)
121     dept = dept.strip('\"')
122     enroll_date = enroll_date.strip('\"')
123     new_line = "\n"+num+","+name+","+age+","+phone+","+dept+","+enroll_date
124     f = open("staff_table","a",encoding="utf8")
125     f.write(new_line)
126     f.close()
127 
128 
129 def update():
130     pass
131 
132 def delete():
133     pass
134 
135 msg = """
136 請選擇:
137 1.查詢
138 2.插入
139 3.更新
140 4.刪除
141 5.退出
142 """
143 main_dic = {
144     "1":select,
145     "2":insert,
146     "3":update,
147     "4":delete,
148     "5":exit
149 }
150 
151 
152 while True:
153     f = open("staff_table","r",encoding="utf-8")
154     print("成員表如下".center(40, "*"))
155     for line in f:
156         object = line.strip().split(",")
157         print("%s %s %s %s %s %s" % (object[0],object[1],object[2],object[3],object[4],object[5]))
158     print(msg)
159     column=[]
160     term=[]
161     symbol=[]
162     option=[]
163     choice = input("what do you want :")
164     if len(choice) == 0 or choice not in main_dic:continue
165     if choice == "5":break
166     if choice == "1":
167         select_sql = input("查詢語句 :")
168         select_sql_list=select_sql.split(" ")
169         column = select_sql_list[1]
170         if len(select_sql_list) > 7:
171             term = select_sql_list[5]
172             symbol = select_sql_list[6]
173             option = select_sql_list[7]
174         main_dic["1"](column,term,symbol,option)
175     if choice == "2":
176         insert_sql = input("插入語句 :")
177         insert_sql_list = insert_sql.split(" ")
178         # insert into staff_table values ("terry",22,13333333,"it","2013-1-1")
179         column_str = insert_sql_list[4]
180         column_list = column_str.lstrip("(").rstrip(")").split(",")
181         name = column_list[0]
182         age = column_list[1]
183         phone = column_list[2]
184         dept = column_list[3]
185         enroll_date = column_list[4]
186         main_dic["2"](name,age,phone,dept,enroll_date)

 





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

-Advertisement-
Play Games
更多相關文章
  • Linux 掛載 備註:如果掛載到有文件的目錄下 會遮擋原先文件 必須卸載掛載的硬碟 才能顯示 Linux umount 卸載 ...
  • avahi-daemon是一種Linux操作系統上運行在客戶機上實施查找基於網路的Zeroconf service的服務守護進程。 該服務可以為Zeroconf網路實現DNS服務發現及DNS組播規範。 用戶程式通過Linux D-Bus信息傳遞接收發現到網路服務和資源的通知。 該守護進程配合緩存用戶 ...
  • 從沒想到自己會開通博客,之前在編程上遇到問題 總會來到博客園來檢索點文檔看一下。 今天終於動手註冊開通了一個博客 希望能在這記錄下自己在程式世界的 一點一滴 每一步腳印 每一次進步 望大家共勉 ...
  • **************************************************************************************** ...
  • Makefile linux 程式開發的一道坎. 也是linux開發中最重要的基本功之一, 不求深入, 但求讀懂. ...
  • 這個方法百度到的,有個面試我的讓我做,百度了一堆資料才實現。 ...
  • *
    ...
  • 一.神秘的webservice Web service是一個平臺獨立的,低耦合的,自包含的、基於可編程的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。Web Service技術, 能使得運行在不同 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...