`
wodamazi
  • 浏览: 1414419 次
文章分类
社区版块
存档分类
最新评论

我开发的一个信息管理小工具——PersonalInfo

 
阅读更多

一款个人信息管理工具PersonalInfo

PersonalInfo是我写的一个小小的个人信息管理工具,我一直使用它来管理我收集的各种信息和资料,一有时间就改一下,个人感觉这个小软件还是很方便灵活的。

这个软件充分挖掘了.NET Framework的潜力,总代码量上万行,涉及到.NET主要的技术领域。发布的程序包中包括有软件源码、本软件说明文档和另一篇详细介绍此软件的文档(即本人拙著《编程的奥秘》一书的最后一章)。

需要指出的是,在写作《编程的奥秘》一书时,此软件还并不完善,存在着一些重大BUG,现在发布的是稳定的版本,我用它好久了,发现的BUG都已更正。

现将程序源码及可执行文件一并发布,与诸位软件开发爱好者相互交流。

软件界面如下:

这个工具的思想很简单:

以树型结构分类管理信息。信息附加于树节点之上,并跟随着树节点的移动而移动。

目前支持五种类型的树节点:

1)纯文本型节点:只有树节点文本,不包含其他的信息。

2)详细信息型节点:关联有一个文档

3)文件型节点:如上图所示,除了关联有一个文档之外,还同时附加有一个文件。

4)文件夹型节点:类似于文件型节点,只不过这一节点对应于多个文件。

5)图片型节点:类似于文件夹型节点,只不过这一节点对应的多个文件都是图片文件。

上述五种类型的节点可以相互转换,其节点所关联的信息会被保留(不过某些操作是不可逆的)。

基本操作方法:

1)在树节点上右击,其弹出菜单中包括树的所有功能。

2)在右侧文本框中右击,其弹出菜单中包括文档操作的所有功能。

编译、运行与修改:

运行环境为Windows XP Sp2/Sp3Windows Server 2003Vista,安装有 .NET 3.5

本程序使用VB.NET开发。请使用Visual Studio 2008打开PersonalInfo文件夹下的PersonalInfo.sln即可编译此程序。

源代码中有详细的注释。

树型数据采用XML格式存储,文本及文件流数据存放于Access数据库中。

本软件特点是:

1)支持全功能的树操作:节点的升级、降级、上移和下移、改名等。特别是可以剪切一个节点(包括其所有子树),再在新位置粘贴,从而快速移动子树。

2)文件本身以二进制方式被保存到数据库中,因此,不用担心文件的丢失。同时,可以方便对文件进行增加、删除和导出操作。

3)提供方便的查找功能,参见下图:

既可以模糊查找数据库中的记录,也可以直接查找树中的文本(直接在上图“在当前网格记录中找”文本框中输入文字,动态筛选出数据)。

找到数据后,单击“在树中定位”,即可找到此信息所对应的树节点,并在主窗口中显示。

4)可以递归导出某个树节点(包括其子树)的所有文本,可以在“选项”窗口中设置将数据另存为文件还是直接复制到剪贴板。

5)右侧的文本框其实是一个小型的“Word”文档编辑器,支持各种常规的编辑操作,以及打印功能(如下图)。

6)在“系统功能”菜单中选择“选项”命令,可以设定一些参数(比如设定背景图片等):

特别地,如果将本软件置于调试状态,则用户所做的所有操作均会被记录在Trace.txt文件中。这是我为了方便调试而加入的,可以关掉这个功能。

在调试状态下,所有信息全部从数据库中直接读取,速度慢些,同时对一些危险操作会给出提示。

关闭调试状态后,系统自动缓存数据,提升了响应速度,但会消耗更多的内存。

7)在“系统功能”菜单可以备份数据,其实就是将ACCESS数据库和树结构文件(MainTree.xml)以及系统配置参数对象PersonalInfo.cfg复制到指定的BackUp文件夹中。可以方便地恢复数据。

   (8)图片型节点并不实用(现实中我几乎不用它),在图片的显示上还存在一些小问题(比如图片的拉伸与还原),而且还有些必要的图像处理功能没加入(比如从剪贴板复制和粘贴), 是个鸡肋,我不想花时间去修改它了,暂且留着吧。

  (9)几个类库项目中都有许多类没有用在本程序中,这些类是我陆陆续续写来用于其他软件中的,为了便于管理我就把它们都放在同一个类库了,以便于复用。

  如果有朋友想进一步优化,可以把这些无关的类删除。

  另外,代码中有一些是用于调试的,出于偷懒与随意,我没有采用加条件编译控制的方式,这部分代码其实也是可以删除的。

关于本软件的开发历程与后续打算:

本软件最初写于2004年,后来慢慢地完善,修改了无数个BUG,最近一次修改是去年12月。目前发布的是一个较稳定的版本,可以从“系统功能”菜单中选择“关于”命令查看开发记录。

还有许多功能是可以加入的,但目前的功能我觉得己经够用了,除了修改发现的一些BUG,已不再打算添加新功能。

今后的开发计划是:用WPF+LINQ彻底重写此软件,提供更多更强的实用功能(如采用插件架构,提供密码保护等)。

关于本软件的声明:

本软件由我个人独立开发,诸位朋友可以自由地使用这个软件及其源码,但请不要用于商业目的。对于此软件的BUG,以及我正打算开发的WPF版本,朋友们有何建议请发邮件到我的个人邮箱:

JinXuLiang@bit.edu.cn

或者访问我个人博客:

http://blog.csdn.net/bitfan

===============

请访问CSDN下载频道下载此软件源码及文档

下载PersonalInfohttp://download.csdn.net/source/980550

***************************************************************************

昨天刚发布的小工具,今天就收到了一位软件工程师吴先生的邮件,指出了软件中的一些不足,我觉得很好,就把他的邮件附在下面了:

============================

你好,JinXuLiang@bit.edu.cn,在PersonalInfo程序中看到您的Email地址,就想起来跟您发这封邮件交流一下作为专业软件公司普通工程师对您这个软件的看法。纯属个人技术与爱好交流。

1. 整体软件风格不专业,很有学校的风格,或者说这个软件的第一感觉,是像学生做出来的作业,后者一个毕业设计,但是跟正式的软件(无论是商用的还是开源的)相比,还有一定的差距。主要表现在:

1) 背景图片。专业的软件立志于占用最少的资源,像这种背景图片在桌面系统并不常见,在Web系统比较常见。

2) 即使包含背景图片,也要允许用户关闭掉这个功能。而不是仅仅的可以更换图片。

3)文字的引用问题:在工具栏的第4个按钮下面,有一些“儿子”和“兄弟”类似的文字不太合适。一般用子节点,或者邻节点,同级节点比较合适。

4)按钮风格不统一。我指的是Button Style,还有Button的大小也不统一,Width可以根据文字个数来定,那么Height应该是统一的。

5)“关于”对话框里面的内容可编辑 —— Bug

6)“放大镜”只可放大,没看见缩小。

7)“放大镜”,“粗体”。。。等为什么不用一个Toolbar呢?

8) “插入行号”对话框的窗体大小可改变。——Bug。并且“保留文本原有格式(”只能看到一个括号。参看图片。——Bug

另外,这个窗口不是模态的。——是否Bug?按普通的Esc键不能退出当前窗口。

简单的看了一下,给您发了这些问题,如果您想把这个当作一个Open的软件来做,那么我说的细节也许对您有参考意义。

希望能够看到更好的软件。多谢。

====================

吴先生指出的问题有不少是存在的。


我写这个软件原先纯粹是写来自己用的,所以就比较偷懒了,自己用着怎么方便就怎么来,有关用户界面的显示,基本上没花太多心思,只将重点放在提供足够的功能上了。实用是第一位的,不管界面上如何丑陋,我觉得最要命的是别一再地出现“数据丢失”这类重大的BUG,因此许多时间在于与这些BUG进行搏斗。这个软件内部是相当复杂的,因此让软件能稳定运行、找到引发BUG的原因很痛苦,现在发布的就是这样的一个版本,我在较长的使用过程中没有再发现丢失数据的情况。


我发布这个软件其实没有什么想法,只是觉得可能对某些朋友有用,就放到CSDN的下载频道上了。大家随便用用吧。有时间有兴趣的朋友可以自行完善。


基于Windows Form版本的PersonalInfo我不打算继续完善了,因为我觉得够用了,除非需要更正引发“数据丢失”这样的严重BUG。

我现在想开发本软件的WPF版本,我会在新版本中更正吴先生指出的这些缺陷。

WFP+LINQ是让人震撼的技术,新版本会拥有比现在版本更强的功能,如通过外挂插件动态扩充节点类型、数据加密、二进制文件的压缩存储、可选择数据保存在ACCESS还是SQLSERVER、基于XAML的全新用户界面、用LINQ重写中间层以大幅度精简代码等等。

我个人比较喜欢学了一点技术就用它来做点有趣的东西,比如有时间时会用WPF实现分形理论中的一些算法,以得到漂亮的令人爽心悦目的计算机图案。

软件技术用来“玩”而非谋生时,就很有趣了。  :)
分享到:
评论

相关推荐

    面向对象软件实践.doc

    将介绍一个完整的面向对象软件——PersonalInfo的开发与设计过程,,其中涉及到了本书中所介绍的大部分技术,整个软件代码总量接近10000行,期望读者能从这个略具规模的工具软件开发过程中学习到面向对象程序的设计...

    Java运行于手机的一个联系人管理小程序.rar

    Java运行于手机的一个联系人管理小程序,RMS记录读取和修改程序,  Display display = null; // 设备的显示器  List list = null;  TextField nameField; // 姓名文本域  TextField honeField; //电话号码...

    在JavaScript中如何访问暂未存在的嵌套对象

    其中之一就是当你试图访问嵌套对象时,会遇到这个错误 Cannot read property ‘foo’ of undefined 在大多数情况下,处理嵌套的对象,通常我们需要安全地访问最内层嵌套的值。 来个粟子: const user = { id: ...

    EzKais:凯斯·博特

    埃兹凯斯凯斯·博特迈尔凯斯(Kais IDN Bot)的韦尔科姆后卫如何使用: 从下载Node js 打开personalinfo.txt文件您的信息集(必须与Google表单中的选项匹配) 总是在每行末尾加一个?*? 作为障碍电子邮件的第一行第...

    AJAX简单应用实例-弹出层

    function createobj() { if (window.ActiveXObject) { return(new ActiveXObject(“Microsoft.... } } function personalInfo() { var oBao=createobj(); var cont=document.getElementById(“person_deti

    personal info

    personal info

    ubcontacttracingandappointment:UB联系人跟踪和约会系统

    创建ad_application和ad_personalInfo的视图 为员工个人和部门创建视图 在表中设置约会代码列 1.2版将在校园联系人跟踪中使用 目标为了轻松地跟踪与同事保持联系的同事,以使员工成为积极的员工,员工将扫描放置在...

Global site tag (gtag.js) - Google Analytics