DIY乙個簡易查詢系統

2021-07-05 23:23:42 字數 1393 閱讀 1971

前段時間應網友需求計畫做乙個簡潔的」中藥毒***查詢」小工具

網友們提供了不少資料.最簡潔的還屬這個名單:

我們預期一下我們希望做出乙個什麼東東,它應該:

可以展示資料裡的藥物及其屬性關係.

例如:

「柴胡」對應

小柴胡片、小柴胡顆粒、得生丸、安坤贊育丸。;柴胡皂苷

能導致腎上腺肥大、胸腺萎縮,使人體免疫功能降低。

有腎毒性,能損害腎臟。

查這種對應關係,顯然資料庫最擅長這個了.但我們的程式很小並不是很適合新增現有的資料庫模型.

那讓我們自己來實現乙個簡單的資料庫查詢系統吧.

當我們明確了需求,下一步就是將原料資料經過最少的工序成本轉換為滿足現有需求並具有一定擴充套件能力的且適合處理的內容.

原資料已經分類很清楚,儲存方法這裡採用線性儲存(因為資料只有不到一百條的樣子),我首先關注如何將不同藥物分開以及藥物之間屬性專案的分割.

我用」{}」來分割藥物,用」;」來分割屬性.

讓我們來看現在是不是順眼一些:

因為網頁格式直接複製導致文字中很多回車,為了便於編輯和整理我們決定在每項的後面也就是」}」的後面加乙個回車.那怎麼辦到呢?

首先刪除所有回車,使用notepad++中的查詢替換功能,.然後再用notepad++中替換功能在擴充套件模式,查詢目標為}替換為}\r\n 當然這裡要靈活使用啦.

我們的格式為

第一項是」主屬性」,通過對主屬性的匹配得出本條是否為查詢結果.

如果不匹配直接找下乙個」,都可以通過ifstream.get來完成,它可以逐個char字元讀取.這樣的隱患是無法對比文字和中文標點符號.

接下來匹配主屬性.因為我們的屬性都是通過」;」來分割的,ifstream.getline,改函式的優點是第三個引數可以指定讀到什麼內容時停止.

ifstream in=null;

in.getline(cname, 1024, ';');//用';'作為分隔

if (0 == strcmp(cname, "獨活"))

{

這樣cname的內容就是第一項屬性的內容.

再次執行則讀取第二項屬性.

我們只需要將這些屬性輸入即可.

乙個好的介面著實難以設計,但是命令列視窗也未免過於不友好.

所以掌握簡單的介面設計是必要的.這裡我用的是mfc.

效果如圖:

更進一步,網友希望能夠根據第二項中的小項為索引檢索整個內容.你有什麼好的主意?

做一些實用的完整小專案,可能對人更有意義.

2023年10月19日 10:56:34

DIY乙個DNS查詢器 程式實現

李鑫大牛的部落格 1資源記錄 resource record 中的rddata內容的格式。2關於壓縮編碼的指標問題。3 冗餘結構不清晰。尤其是壓縮編碼的問題,困擾了我很久,找了很多中文資料,都說到當長度的值為 192 的時候為指標,下一位元組的內容即偏移的位置,但是在過程中卻發現存在該值為 193 ...

DIY乙個DNS查詢器 程式實現

1資源記錄 resource record 中的rddata內容的格式。2關於壓縮編碼的指標問題。3 冗餘結構不清晰。尤其是壓縮編碼的問題,困擾了我很久,找了很多中文資料,都說到當長度的值為 192 的時候為指標,下一位元組的內容即偏移的位置,但是在過程中卻發現存在該值為 193 的情況,一直不解了...

乙個簡易查詢引起的悲劇

有乙個歷史庫伺服器,大約有20左右的資料庫,14000左右的連線,50左右的併發,平日表現的挺好的,一日忽然間鬧騰起來了,在一些表上加了索引,好轉一些,但是仍然報警。實際上,每天抓到的bad trace 並不是很多,並且大部分查詢條件都很簡單,一些查詢時間比較長的查詢出現的次數也不多,這個事情糾結了...