樊新华,郑 红
(1东北大学计算机科学与工程学院,沈阳110169;2东北大学 工商管理学院,沈阳110169)
根据国际公认的老龄化社会标准,1999年中国就已经迈入了老龄化社会;截至2008年末,国内老龄人口已经达到1.69亿,现在仍以年均近1 000万的增幅在不断变换着这一数字[1]。伴随着中国老龄化问题的备受关注,老年群体中的高龄化、空巢化等问题正日趋严重。而且,高龄空巢老人无人照料也隐藏着不容忽视的社会风险。
中国步入老龄化社会后,国家和个人层面都面临着种种养老问题。但是,现阶段在养老方面,仍然处于诸多问题未臻妥善处置的阶段。当今,除了机构养老、居家养老和社区养老三种比较成熟的养老方式在普及推行外,还有借鉴国外发达国家的“时间银行”新型居家养老方式。
时间银行概念是在20世纪80年代初由美国人埃德加·卡恩提出。所谓时间银行,是指志愿者将参与公益服务的时间存进时间银行,当自己遭遇困难时就可以从中支取“被服务时间”[2-3]。孟艳等人[4]对国内的“时间银行”与社区养老结合的可行性进行研究,并提出了社区“时间银行”互助养老体系的思路。郑红等人[5]以货币经济学角度,对时间银行的可持续发展进行研究,并提出了在社区发行时间货币的想法。鲁伟等人[6]论证了时间货币所具有货币的所有职能,并说明以时间货币为媒介的老人照护支持系统的可行性。文献[7]和文献[8]应用现有的理论知识,成功建立了时间银行信息系统平台,并在数据管理方面也有相应斩获。现在,在国内的上海、广州、南京、重庆、武汉、郑州等众多城市已经出现了时间银行的试点工作范围[9],并尝试构建“年轻人照顾老人”,“老人帮助老人”的互助互惠型养老新形式。
为满足高龄、病残等弱势群体老人日常生活照顾需求,引入了时间银行和时间币的概念,并将社区居民、志愿者或身体状况良好的低龄老人的日常生活照护弱势群体老人的能力以时间币的形式储存起来,待志愿者或低龄老人到年老需要帮助时,直接从时间银行兑付其他人的服务,以缓解人到老年身边无人照料的社会风险,促进志愿者或低龄老人社会闲暇时间的有效利用和合理配置,从而真正实现了高龄老人在日常生活中亟待专人贴近照护的这一主旨设定目标[5-6]。时间币是交换帮助的媒介,储户通过帮助别人获取时间币,也通过支付时间币获取他人的帮助。在实际服务工作中,本着劳动不分贵贱,每个人的工作时间都是平等的思想,按照1:1的比例折算成时间币。
具体设计方案:首先,每位志愿者或社区居民都要凭借身份证到社区服务中心进行登记、审核工作;其次,通过审核后,为其设立相应账户。对于社区的高龄、孤寡、空巢及失能老人等弱势群体提供一定的救助,每月发放一定量的时间币;志愿者通过参与志愿活动及活动时长得相应的时间币,整个过程类似银行“存取转”的业务。在社区内,通过发行时间币的纸币,社区居民可以相互自愿结对,进行服务和交易,使操作过程更加灵活和便利。
为了更为便捷、准确地实时记录和处理时间币的存取转发等业务,同时进行业务核算和数据分析,实时掌控社区时间货币的发行、流通和回笼情况,开发了社区时间货币管理系统软件。该系统是将银行业务进行简化,运用计算机技术的有机融合,有效克服手工记账的局限性,可以节约大量人力财力,提高工作效率,还可对敏感数据进行加密,确保系统安全可靠。
依据社区货币理论和社区实际管理需求,参照商业银行系统的管理模式[10],在试点社区手工运营的基础上,对社区时间货币运营管理过程进行优化整合,并结合商业银行业务流程和软件工程的相关理论,将该系统分为系统业务处理、系统数据分析和系统辅助功能三部分。其中,账户管理、存取转发、结算管理为系统数据核算部分;查询输出和数据分析为系统数据分析部分;数据管理、辅助工具和系统帮助为系统辅助功能[7-8,11]。系统功能模块设计如图1所示。
图1 系统模块图Fig.1 The system module chart
由图1可见,系统中各主题模块的综合设计功能可阐释如下:
(1)账户管理模块:主要包括社区居民的账户开户、账户信息修改和账户挂失与销户功能。
(2)存取转发模块:主要包括账户中的时间币存与取,以及账户之间的转账,高残病特殊人群的发放时间币的功能。
(3)结算管理模块:主要包括按日、月、年进行业务数据的统计功能。
(4)查询输出模块:主要包括社区居民的账户信息、交易信息、结算信息和盘点信息的查询、导出、打印功能。
(5)数据分析模块:主要包括社区居民的赤字账户、活跃账户、休眠账户的查询、导出、打印功能。
(6)数据管理模块:主要包括社区信息、用户管理、设置额度、现币投入、用户日志和数据备份功能。
(7)辅助管理功能:主要包括在本系统中就可以使用上网、Word、Excel和计算器功能。
(8)系统帮助模块:主要包括密码修改、屏幕锁定、帮助手册和版权信息功能。
C#是MicroSoft由C和C++派生来的一种简单、现代、安全的面向对象类型的编程语言。C#简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,程序易于编写,容错率高。同时,C#还提供了可视化的应用程序开发工具和快速开发程序向导的新功能,大大地提高了编程效率和易用性。
Access数据库是MS Office中的一个数据库组件,存储方式简单,易于维护管理。其中,采用了图形用户界面、操作灵活,广泛地应用于开发应用系统。在编写程序时通过调用数据库引擎对数据库里的大量记录进行更新、检索、管理等操作。
本软件系统使用C#.NET和Access软件结合进行应用开发。其中,C#.NET软件主要开发应用系统用户界面和数据处理功能;Access数据库软件主要用于应用系统的数据保存功能;C#.NET通过ADO.NET组件来操作Access数据库的数据。
对于初次使用本系统的用户,必须通过默认的系统管理员对系统启用初始化处理,即在数据管理模块中,进行初始数据设置,主要包括社区信息、用户管理、设置额度等信息设置。其中,社区信息是用户管理、设置额度的操作基础,必须先审查通过社区信息的设置,此后才可执行用户管理、设置额度的操作。在初始数据设置后,用户就可以运行本系统,对指定的社区居民进行开设账户、存取转发、数据分析等操作。系统设计流程如图2所示。
图2 系统操作流程Fig.2 The system operation flow
在设计系统界面时,采用下拉式菜单的对话界面方式进行基本操作,当出现操作完成或发生错误时,会弹出提示信息,以减少用户的困惑和焦虑。整个系统的界面美观、操作友好,有利于无基础的用户操作。具体操作过程如下:
从开始或屏幕上启动应用软件系统,首先会出现用户登录界面,如图3所示。接下来,用户按照提示内容输入用户名、密码数据,选择用户权限等信息,其中用户权限分为系统管理员和操作员两类。此后,根据不同的用户权限,将进入相应操作的主界面,可以进行相应的操作。
图3 用户登录界面Fig.3 User login interface
以系统管理员的用户权限所涉及的系统主界面,如图4所示。在系统主界面中,可以根据不同的指令要求,在主菜单栏中选择相应子菜单来执行操作。
图4 主界面Fig.4 The main interface of the system
本系统使用C#.NET调用 ADO.NET组件来操作Access数据库中的数据编程技术,对此调用方法可做探讨详述如下。
ADO.NET是一组用于和数据源进行交互的面向对象类库。而且,这也是.NET平台的数据访问标准,由一组相关类和接口组成,主要包括2个核心组件:DataSet和数据提供程序。在ADO.NET对象模型中还可见到5个数据库访问和操作对象:Connection、 Command、 DataAdapter、 DataSet 和DataReader等对象[11-12]。其中,各对象的功能推介见表1。
表1 ADO.NET的对象功能Tab.1 The ADO.NET object function
对于Access数据库的访问,通常需引入命名空间,设计代码如下:
using System.Data;
using System.Data.OleDb;
对于信息系统来说,输入数据完整和正确是系统的基础,所以此系统对身份证、邮箱、电话等基本信息提供了数据校验功能。C#的WinForm中,信息验证可分为按键级、控件级和窗口级。一般情况下,使用文本框控件输入信息,在输入数据或输入结束时,通过激发相应事件对数据进行验证;或者在数据处理或数据保存时,对所有数据进行验证[13-14]。数据验证过程所用到的控件和事件,见表2。
表2 数据验证的控件和事件Tab.2 Data validation controls and events
另外,C#也提供了 ErrorProvider控件用于WinForm的数据验证。出现错误时,会在文本框控件旁边显示错误图标和提示信息。对于各种字符串的验证,使用正则表达式验证是最方便、最简单的方法。使用正则表达式验证,通常需引入命名空间,对应代码如下:
using System.Text.RegularExpressions;
在此,使用ErrorProvider控件对TextBox控件的输入数据的通用验证方法。通用函数如下:
private boolvalidaing(TextBoxtextbox, intlength, stringcontrolName)
{
boolresult=false;
if(textbox.TextLength= = 0) //显示错误图标
{
errorProvider1.SetError(textbox,"请输入"+controlName+"内容!");
textbox.SelectAll();
textbox.Focus();
}
else if(…)
{
……
}
else{ //取消错误图标
errorProvider1.SetError(textbox,"");
result=true;
}
returnresult;
}
在验证时,可以调用通用函数,如姓名的txtName控件,代码如下:
if(validaing(txtName, 8, "姓名") = = false)
return;
在系统开发中,为了保证一些关键信息的安全性(如用户名、密码等),经常会用到一些简单的加密、解密算法对其进行处理。具体操作:对于用户名和密码信息,在输入或修改时,先将输入数据加密后,再保存至数据库中;在登录时,可采用对输入数据加密后,在数据库中进行查询,或者将数据库中的数据解密,再与输入的数据进行比较的方式。
常用的加密算法分为对称加密和非对称加密,其中DES加密是一种对称加密体制,也是迄今为止最常用的、使用最广泛的加密算法[15-16]。将DES加密、解密算法封装在通用类中,便于管理和调用。在编写DES加密解密程序时,通常要引入命名空间:
using System.Text;
using System.Security.Cryptography;
using System.IO;
DES加密、解密算法类,可参考代码如下:
using System.Text;
using System.Security.Cryptography;
using System.IO;
classEntryptUtils
{
private staticbyte[]Keys={ …… };
//DES加密字符串
public static stringEncryptDES(stringencryptString)
{
stringencryptKey=…;
try
{
……
returnConvert.ToBase64String(mStream.ToArray());
}
catch
{
returnencryptString;
}
}
//DES解密字符串
public static stringDecryptDES(stringdecryptString)
{
stringdecryptKey=…;
try
{
……
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
returndecryptString;
}
}
}
在加密时,可以调用类中的方法,如密码的txtPassword控件,代码如下:
EntryptUtils.EncryptDES(txt_Password.Text.Trim())
总之,在系统开发过程中,为了简化数据库的访问过程,将常用的数据访问操作(如数据库连接打开和关闭、增删改查SQL语句执行、数据库事务等操作)封装在通用数据库访问类中,通过使用类的方法就可以实现数据库的访问;对数据验证方法,编写成公共程序,在需要的地方调用;将DES加密、解密算法封装在通用类中,在需要的地方进行调用。通过设计操作类文件,程序结构清晰,减少了软件的编码量,大大地提高编程效率。
本软件采用面向对象的编程方法,经过了试点社区的实际应用,满足了不熟悉编程的人员方便使用,为社区管理工作提供强大的辅助工具;同时节约社区管理的人力和财力成本,有助于社区管理工作的信息化。经过归纳梳理后,系统特点可概论如下。
(1)在输入数据过程中,有些输入数据进行了综合性校验,没有通过校验的数据会显示提示信息,提示用户应检查输入数据是否符合要求。
(2)对于使用本系统人员分别设置用户名、密码、权限的功能,并且不同的权限进行不同的操作,对使用人的操作时间进行记录。
(3)防止系统数据的意外丢失或损毁,可以对数据库数据进行备份恢复操作;同时,防止别人查看数据库,对数据库设置密码、关键字段进行加密处理等,保证数据库中的数据不会对外泄露。
在本系统的基础上,为了方便社区居民使用,今后拟将展开的工作如下:
(1)建立网站。让社区居民了解社区相关的动态信息。
(2)发布需求。社区居民可以发布需求帮助信息或提供帮助信息,并可提供帮助相似匹配推荐工作。
(3)网上操作。社区居民通过上网,可以进行时间币的查询、转账和修改相关信息。
通过以上网上功能的扩展,会大大提高了管理水平和效率,更利于便民服务,为社区居民和社会职能部门起到桥梁和纽带作用。另外,通过在试点社区引入时间币养老模式探索,积累经验,为社会职能部门设计引入社区时间币提供理论和实践参考。