医疗固定资产管理——源代码

应某医院副院长要求,开发一个数据库类程序,方便管理单位的医疗设备。需求如下:

  • 添加、修改和删除条目;
  • 搜索条目;
  • 数据库移动储存;
  • 数据库需要加密;
  • 运行于Windows平台;
  • 不允许云同步。

规划阶段决定采用WPF技术来开发程序,即:用XAML实现表层UI,用C#实现程序功能。WPF的优点是UI设计和核心设计可以分离,并且WPF窗口完美支持Windows的DPI缩放,传统的Windows Forms窗口会在高分辨率屏幕上变得模糊,不方便日后升级设备。

数据库核心决定采用轻量级SQLite数据库,避免SQL Server动辄GB级的安装体积,并且支持数据级加密。(我见过一个国营企业,使用SQL Server来实现一个很简单的数据库操作。应用入口设置了口令验证,但是数据库明文储存,因此只要用SQL Server提供的数据库浏览器打开数据库文件即可浏览所有条目——里面条目的命名居然是用汉语拼音)。

开发时采用 .Net Framework 4.5 框架,该框架在Windows 8及以上系统被系统内置,Windows Vista及以上可以通过独立安装实现,不支持Windows XP以及更低版本操作系统。应用程序为32位,保证最大兼容性,日后可开发64位版本。

由于该程序的性质更像是“企业应用”,简单明晰即可,不需要花哨的动画和过度,因此UI设计以简单清晰为原则,字体足够大,,保证远距离操作依然有足够的可见性。至于美观度……再好的东西看多了也会腻,所以为什么要在这上面费心思?

UI概览
UI概览,请无视上面文字。

UI设计原则:

WPF架构允许用XAML先行设计程序UI,并且对UI的布局、控件的属性和控件事件进行声明。这种思路后来也被Android所借鉴(用XML先行设计UI,再通过Java类来实现功能)

由于“添加”功能是最常用的功能,“添加”按钮一定要能非常容易点到——处理方法简单粗暴,右侧一个长长的竖条就是“添加”按钮。在程序全屏运行时,将鼠标指针甩到右侧边缘即可点按,甚至不需要看到鼠标指针在哪。

因为电脑放在办公桌上,经常需要离电脑很远来查看信息,所以字体必须保证够大,以保证远距离可见性。

搜索功能被简化为一个又长又大又宽的文本框(TextBox),借鉴Google的Instant Search理念,不需要提前选择匹配项,随着文字的输入,下方的列表视图(ListBox)会自动更新搜索到的条目。

Parallels 图片 3
搜索:What You See Is What You Get.

底层设计原则:

采用SQLite轻量级数据库核心,安装文件仅10MB左右。相比SQL Server动辄GB级的体量轻巧很多。

数据库文件本身必须加密,不能留下“程序入口需要验证,而数据库本身明文存储”这种低级错误。数据库的密码以HardCode写进程序本身(将来会加入验证入口),密码格式为GUID,无法猜测,暴力破解的难度极高。

数据库中每一个条目都对应一个GUID,这也是程序内部识别条目的唯一方式。.Net Frameworks提供了一行代码生成GUID的方法,可谓“前人栽树、后人乘凉”:

System.Guid guid = new System.Guid();

将Guid显式转换为字符串便可以直接使用。

由于客户希望数据库文件移动储存(放在U盘或者移动硬盘内),而这种储存介质又极易因为外部环境而损坏,客户又要求不要云同步,因此,数据库的备份工作要尽量完善。每一次对数据库进行修改之后,在关闭程序时,都会保存一份数据库的副本备份。

private void Backup(object sender, System.ComponentModel.CancelEventArgs e)
 {
    if (dataProcessed != 0)
    {
       File.Copy("mspr.db", "mspr.backup", true);
    }
 }

未来改进方向:

  • 多项搜索
  • 程序入口的口令验证
  • 范围搜索
  • UI进一步优化
  • 64位支持
  • 性能优化

源代码:

Medical Static Property Registration

发布者

Frank Septillion

I would always try to find instead of ask.

发表评论

电子邮件地址不会被公开。 必填项已用*标注