前段时间应网友需求计划做一个简洁的”中药毒副作用查询”小工具

原料:

网友们提供了不少资料.最简洁的还属这个名单:
http://www.meoncn.cn/Item/3595.aspx

期望

我们预期一下我们希望做出一个什么东东,它应该:
可以展示资料里的药物及其属性关系.

例如:
“柴胡”对应
小柴胡片、小柴胡颗粒、得生丸、安坤赞育丸。;柴胡皂苷
能导致肾上腺肥大、胸腺萎缩,使人体免疫功能降低。
有肾毒性,能损害肾脏。

查这种对应关系,显然数据库最擅长这个了.但我们的程序很小并不是很适合添加现有的数据库模型.
那让我们自己来实现一个简单的数据库查询系统吧.

DIY数据格式

当我们明确了需求,下一步就是将原料数据经过最少的工序成本转换为满足现有需求并具有一定扩展能力的且适合处理的内容.

原数据已经分类很清楚,存储方法这里采用线性存储(因为数据只有不到一百条的样子),我首先关注如何将不同药物分开以及药物之间属性项目的分割.

我用”{}”来分割药物,用”;”来分割属性.
让我们来看现在是不是顺眼一些:

{柴胡;小柴胡片、小柴胡颗粒、柴胡口服液、柴胡舒肝丸、小儿热速清口服液、午时茶颗粒、牛黄清心丸、气滞胃痛颗粒、龙胆泻肝丸、加味逍遥丸、护肝片、补中益气丸、乳疾灵颗粒、逍遥丸、消食退热糖浆、通乳颗粒、黄连羊肝丸、得生丸、清瘟解毒丸、舒肝和胃丸、感冒清热颗粒、鼻渊舒口服液、鼻窦炎口服液、平肝舒络丸、安坤赞育丸。;柴胡皂苷;能导致肾上腺肥大、胸腺萎缩,使人体免疫功能降低。有肾毒性,能损害肾脏。;}
{马兜铃;龙胆泻肝丸、耳聋丸、八正丸(散)、纯阳正气丸、大黄清胃丸、当归四逆丸(汤)、导赤丸(散)、甘露消毒丹(丸)、排石颗粒、跌打丸、妇科分清丸、冠心苏合丸、苏合丸、辛荑丸、十香返生丸、济生桔核丸、止嗽化痰丸、八正合剂、小儿金丹片(丸)、分清五淋丸、安阳精制膏、辛夷丸、儿童清肺丸、九味羌活丸(颗粒、口服液)、川节茶调丸(散)、小儿咳喘颗粒、小青龙合剂(颗粒);马兜铃酸;马兜铃、关木通、天仙藤、青木香、广防己、汉中防己、细辛、追风藤、寻骨风、淮通、朱砂莲、三筒管、杜衡、管南香、南木香、藤香、背蛇生、假大薯、蝴蝶暗消、逼血雷、白金果榄、金耳环、乌金草,可能与上述药材混用而搀杂马兜铃酸的药材:木通、苦木通、紫木通、白木通、川木通、预知子、木防己、铁线莲、威灵仙、香防己、白英、白毛藤、大青木香等。马兜铃酸为肾毒素,能造成肾小管大量丧失,导致肾衰竭,是典型的“中草药肾病”,病情严重者需要终身做血液透析或肾移植。马兜铃酸也是潜在的致癌物质,动物实验表明,食用马兜铃酸会导致淋巴瘤、肾癌、肝癌、胃癌和肺癌。;//注意本条由于是马兜铃作为引用,如果再版希望数据能够改善.}

因为网页格式直接复制导致文本中很多回车,为了便于编辑和整理我们决定在每项的后面也就是”}”的后面加一个回车.那怎么办到呢?
首先删除所有回车,使用notepad++中的查找替换功能,.然后再用notepad++中替换功能在扩展模式,查找目标为}替换为}\r\n 当然这里要灵活使用啦.

自定义格式的读取

我们的格式为
{独活;天麻丸、壮骨关节丸 抱龙丸;*;有肾毒性,可导致肾脏衰竭.;}
第一项是”主属性”,通过对主属性的匹配得出本条是否为查询结果.
如果不匹配直接找下一个{
如果匹配则向后读取,将”;”分割的各项读出.结束本次读取内容.

寻找这些特殊标记无论是”;”还是”{}”,都可以通过ifstream.get来完成,它可以逐个char字符读取.这样的隐患是无法对比文字和中文标点符号.
接下来匹配主属性.因为我们的属性都是通过”;”来分割的,ifstream.getline,改函数的优点是第三个参数可以指定读到什么内容时停止.

ifstream in=Null;
in.getline(cName, 1024, ';');//用';'作为分隔if (0 == strcmp(cName, "独活")){

这样cName的内容就是第一项属性的内容.
再次执行则读取第二项属性.
我们只需要将这些属性输入即可.

输入与输出

一个好的界面着实难以设计,但是命令行窗口也未免过于不友好.
所以掌握简单的界面设计是必要的.这里我用的是MFC.

效果如图:

本项目是公开源码的,所以你可以看到整个代码.
项目地址是:
http://code.taobao.org/svn/AntiZYwin32App/

后语

更进一步,网友希望能够根据第二项中的小项为索引检索整个内容.你有什么好的主意?
做一些实用的完整小项目,可能对人更有意义.
2015年10月19日 10:56:34

DIY一个简易查询系统相关推荐

  1. python查天气预报_Python编写一个天气预报查询系统

    Python编写一个天气预报查询系统 学了Python这么久 可以用它来做许多好玩的小程序哦! 这里给 大家做了个查询天气预报的小程序! 可以查询未来几天的天气! 需要大家自己修改下代码即可! 首先我 ...

  2. 手撸的一个快递查询系统,竟然阅读量过1.8w

    一.目的 做这个项目的初衷是因为我去年在微信卖老家水果,好多朋友下单后都问我快递单号,每天发货后我都要挨个甄别这个人是哪个快递信息,很麻烦一部小心就搞错了.基于这件小事我有了自助快递查询的这个想法.将 ...

  3. 用java建立一个学生查询系统_一个简单的java学生寝室查询系统

    本文实例为大家分享了java学生寝室查询系统的具体代码,供大家参考,具体内容如下 前端部分: index.html ahpu freshman dormitory inquiry html,body{ ...

  4. DIY一个DNS查询器:了解DNS协议

    每当我们在浏览器上敲入任何一个域名访问某个网站的时候,我们都要使用Dns协议进行一次"域名:IP"的查询;作为命令行使用者,与dns有关用的最多的就是Nslookup 命令吧:作为 ...

  5. Springboot+LayUI实现一个简易评论系统

    说明 这是个简单的评论系统,目的在于介绍简单的评论和回复功能.同时基于此可以扩展更全面的.自定义的评论系统,本工程仅供学习交流使用.喜欢的朋友给个赞:) 源码 https://gitee.com/in ...

  6. python做一个考试系统_请用 Python 语言编写一个简易的系统登录程序。

    import tkinter.messagebox import tkinter my_window = tkinter.Tk() # 生成 my_window 主窗口 my_window.title ...

  7. 小程序开发简易查询系统

    一.小程序开发的准备工作 注册邮箱,我用的qq邮箱,注册步骤略 注册小程序,注册地址:https://mp.weixin.qq.com/cgi-bin/wx?token=&lang=zh_CN ...

  8. 小白的第一个Python程序——成绩查询系统(一)

    作为一个刚学习Python不久的小白,成长之路上的坑坑坎坎沟沟壑壑必不可少,在我完成我的第一个程序之后(或许并不能称为程序,因为它实在是漏洞百出),通过我的自我总结我发现,学习前人的经验是一个少走弯路 ...

  9. 如何 DIY 一个自己的 NAS

    我一直有个想法:等毕业后租房子后,淘一些二手服务器.交换机.机架,自己在家里搞一个私有云,私有云需要准备一些文件存储服务器,用于支持 KVM 热迁移或者是自己的一些数据备份. NAS 是啥 NAS ( ...

最新文章

  1. 奇怪-正则匹配的test函数
  2. 常见电容器图片_各种电容器图片大集合
  3. 看后端程序员调试CORS的姿势
  4. Python 构建前端 页面继承及共享 - 转
  5. mdb 查询过于复杂_【律联云知产课堂】南京商标查询主要从哪些方面判断一个商标是否适合注册?...
  6. 除非万不得已,否则绝不谈判
  7. 文件/目录权限设置命令:chmod
  8. html5 valid,html5中valid、invalid、required的定义
  9. es6 属性及常用新属性汇总
  10. 【AI视野·今日CV 计算机视觉论文速览 第154期】Wed, 4 Sep 2019
  11. 中文编程入门(Lua5.4中文版)第一个 Lua 程序,世界,你好!
  12. python画图方法_python画图的两种方法
  13. 欲取代Android的Firefox OS 的意外复兴
  14. c语言运算符 4,C语言运算符
  15. 求助,电脑关闭游戏后自动弹出dptf
  16. FATE —— 二.3.2 Hetero-NN使用CustModel设置顶部、底部模型
  17. 数字孪生与3D可视化
  18. pydicom提取图片偏绿(光度解释异常)的处理方法
  19. 学习python(七)——zip() 、reserved()、sorted()
  20. 【浮*光】 #noip模拟# 2018.08.22

热门文章

  1. RT_thread STM32通用Bootloader 做OTA升级
  2. 知识分享 | Oracle的官方ACE是个啥 and如何搞定一个ACE!
  3. 时间序列平稳性分析和白噪声检验
  4. 使用Karabiner为Mac内置键盘、HHKB进行映射
  5. c语言数据类型与表达式,C语言的基本数据类型与表达式.ppt
  6. 【板栗糖GIS】win11提示无法成功操作 因为文件包含病毒
  7. 计算机网络笔记(复习)
  8. c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
  9. 1N4001-1N4007 整流二极管比较
  10. Debian10 更换软件源 配置中文环境 安装中文输入法