【本期导读】完成病人资料登记模块
五一前真是太忙了,没空研究这个系统,不过零零碎碎地有做一些,但上节计划要做的字典维护模块遇到一些技术问题,暂且放后处理,这周主要把
病人资料登记模块的核心业务做好了,截图如下:
病人资料登记.jpg
字典维护模块遇到的问题有:
1.怎么用grid完成增加,更新及删除记录
2.如何做成一个通用的模板应用在所有字典的维护上
【下期提示】完成病人资料修改模块
posted @ 2006-04-28 13:41 水晶鱼 阅读(216) | 评论 (0)编辑 收藏
 
【本期导读】 主界面开发,确定基本模块
沉寂一整周了,今天终于把主界面做好了。
最近7天特别忙,赶上公司项目发布最新版本,一大堆的测试任务不敢懈怠,当学习与工作冲突时还是应当以工作为重,学习暂放一边,所以这次学习比计划多花了几天,不过虽然内容很少,但也遇到了几个难题:
1.如何给窗体加上一个背景图片?
2.如何使HtmlWindow内的链接正常打开?
我想在窗体上显示一张背景图片,于是翻看wxPthon 的API文档,想找找有没有像VB里的frame的picture属性,但出乎意料的时,wx.Window中并没有这种属性,虽然可以在此之上再放一个图片控件,来达到同样的效果,正在发愁,于是拿起《wxPython in Action 》(下文简称为PA)这本书快速探索一遍,终于找到办法了,原来要实现这样的效果,需要建立定制,参照里面的办法写了一个可以配置背景图片的window类:
 1import wx
 2
 3class ImageBackGroundWindow(wx.Window):
 4    def __init__(self, parent, image):
 5        wx.Window.__init__(self, parent)
 6        self.photo = image.ConvertToBitmap()
 7        self.positions = [(0,0)]
 8        self.Bind(wx.EVT_PAINT, self.OnPaint)
 9    def OnPaint(self, evt):
10        dc = wx.PaintDC(self)
11        brush = wx.Brush("sky blue")
12        dc.SetBackground(brush)
13        dc.Clear()
14        for x,y in self.positions:
15            dc.DrawBitmap(self.photo, x, y, True)
主界面剩余的难题就是怎么组织代码,UI编程最麻烦的就是这个了,再加上目前也没搜到什么好的为Python量身定做的UI设计工具,只能自己一行一行地写了,但这时就需要注意组织代码了,不然一个复杂的界面写出来都是一大堆难看懂的锁碎代码,我只是一个测试员,对开发接触才刚起步,对这方面的意识暂时也没有什么好的想法,但在《PA》一书中有讲到怎么写出一个漂亮简洁的wxPthon界面代码,有时间一定要好好研究一下。
经过几天的努力,主界面基本框架算是弄好了,剩下的就是各个业务模板的界面及具体业务实现了。我首先挑最容易的来处理,先做关于对话框,不过在做这个窗体时也遇到一个问题,即上述的第2个问题,后来发现是因为在htmlWindow类中少了这个方法:
1def OnLinkClicked(self, linkinfo):
2            import webbrowser
3            webbrowser.open(linkinfo.GetHref(), 1)

主界面和关于窗体截图如下:
main.jpgabout.jpg
【下期提示】 完成字典管理模块
posted @ 2006-04-18 19:27 水晶鱼 阅读(363) | 评论 (0)编辑 收藏
 
【本期导读】使用wxPthon开发界面,完成登录模块
wxPthon是一个非常强大的界面制作模块,下载地址是http://www.wxpython.org/。wxPython安装包中附送了大量实例代码,每个界面控件的使用方法都有介绍,同时还可以去查看在线api文档http://www.wxpython.org/docs/api/wx-module.html,这个文档的风格很像javadoc,习惯了java api 文档的人一看就清楚,如果想系统地了解一下wyPython则可以下载官方推荐的《wxPython in Action 》一书。
粗略浏览一下wyPtyhon Demo,便立即开始尝试编写ClinicOS的登录模块,首先确认一下界面表现力和功能:
界面元素:
1.一个登录窗体
2.帐号标签及文本框,密码标签及文本框
3.确定和取消按钮
功能:
1.单击『确定』按钮时能验证输入的帐号和密码是否正确,如果正确则显示Clinic主界面(TODO,暂时让它显示一个成功消息框),否则提示“帐号或密码错误”。
2.单击『取消』按钮退出登录模块
经过一番努力,终于把界面画好了,暂时丑了点,待以后给它美容。
登录.jpg
不过画这点界面很不方便,得有点耐心,特别是控件的位置要全手工地调坐标,这对于缺乏方向和位置感的我来说更是痛苦,想找一个可以做界面用的IDE for python,却始终没找到,没办法,只好将痛苦忍受到底。
以下是完整的代码:
其中53行中使用的utils.encrypt这个方法,是自己写的一个md5加密方法,这在python里非常简单,只需要3句:
1.导入md5和base64:import md5,base64
2.创建一个md5对象实例: md5.new("字符串").digest()
3.将生成的md5串做个base64转换:base64.b64encode(md5.new("字符串").digest()这个返回的就是加密字符串。

【下期提示】逐步深入学习wxPython 制作ClinicOS主界面
posted @ 2006-04-11 14:11 水晶鱼 阅读(550) | 评论 (1)编辑 收藏
 
【本期导读】使用PySQLite连接SQLite遇到的问题与解决方法
Python要操作SQLite可以使用Pyslqite模块,最新的模块可以去www.pysqlite.org下载,当初下载的时候顺便简单看了看usage-guide(http://initd.org/pub/software/pysqlite/doc/usage-guide.html),觉得挺简单的,没有仔细研究便开始考虑编写,我考虑把sqlite的访问写成一个类,在类的初始化和销毁时候分别建立连接和关闭连接,然后再添加一个执行sql语句的方法,由于传入的sql可能没有返回值也可能有返回值,而返回的值可能是单列值也可能是多条记录,基于这种复杂情况,就让这个方法返回一个列表,管它返回什么,通通加到列表中然后返回,我觉得在这一点上,python比其它语言方便多了。下面是这个类:
#!/usr/bin/python
#
 -*- coding: UTF-8 -*-
#
 $Id: dbconnect.py 8 2006-04-08 14:21:32Z Administrator $
import ConfigParser
import locale
from pysqlite2 import dbapi2 as sqlite

class SqliteConnection:
    
    
def __init__(self,dbname):
        
"""
        初始化数据库连接
         
"""        
        self.conn 
= sqlite.connect(dbname)
    
def execute(self,sql):
        
"""
        执行传入的sql语句,返回一个元组或者None
        
"""
        self.cu
=self.conn.cursor()
        self.cu.execute(sql)
        self.conn.commit()

        self.rows
=[]
        
for self.row in self.cu:
            self.rows.append(self.row)
        
return self.rows
    
def __del__(self):
        
"""关闭数据库连接"""
        self.conn.close()
def test():
    
"""测试方法"""
    config
=ConfigParser.ConfigParser()
    config.read(
'config')
    dbname
=config.get('SQLiteDB','filename')
    
    test
= SqliteConnection(":memory:")
    test.execute(
"create table person(lastname, firstname)")
    test.execute(
"insert into person(lastname,firstname) values('三','张')")
    test.execute(
"insert into person(lastname,firstname) values('四','李')")
if __name__=='__main__':
    test()
之前简单试过一下访问sqlite一切OK,可是当然运行一下这个类时,结果居然出错了:
Traceback (most recent call last):
  File "D:\source\dbconnect.py", line 49, in
?
    test()
  File "D:\source\dbconnect.py", line 42, in
test
    temp=test.execute("select * from person")
  File "D:\source\dbconnect.py", line 22, in
execute
    self.cu.execute(sql)
pysqlite2.dbapi2.OperationalError: Could not decode to UTF-8 column firstname wi
th text 张
既然出错了,那么大概是这几种情况:
1.pysqlite不支持中文
2.sqlite不支持中文
3.代码出了问题
出错之后,经过测试,排除第1和2两种可能,
于是我仔细简单代码,可还是没有找到出错原因,于是想查看pysqlite源代码,可是他的代码是封闭在一个pyd的二进制文件中的,没办法查看,于是去下载pysqlite的源代码,拿到源代码后在pysqlite-2.2.0\src\cursor.c这个代码中找到了OperationalError错误类型,知道原来是字符转换时出这个错。于是我就试试将返回值转为可是我弄了很久都没有弄好,在网上google一下也没有找到这方面的资料,找了一天了也没有找到解决的办法,无奈之下险些泄气。虽然之前看过pysqlite文档,但看得不仔细,只是简单浏览,当时只是想这东西应该挺简单的,例子也够详细就没有花太多时间去看文档,为得也是节省时间。现在遇到问题了,还是老老实实仔细看看pysqlite文档吧。果然不枉我滴着眼药水把它看完,终于找到原因了,原来pysqlite中有个con.text_factory可以解决这个问题,这个参数默认值是unicode ,现在只需要把它设置成str就可以了:
至此总算解决了这个困扰我一天的问题了。
【下期提示】开始学习wxPython,体验一下它的强大界面表现力。
posted @ 2006-04-09 22:13 水晶鱼 阅读(905) | 评论 (2)编辑 收藏
 
【本期导读】设计数据库结构
这两天简单浏览一下SQLite的相关文档,发现这个东东确实还不错,至少比Access好多了,能自动根据数据来分配相应空间,不会像Access那样用着用着就变肥了。
作为轻量级的本地数据库,我所期望的功能都具备了:
1.能否保存复杂数据,支持Blob。
2.支持自动编号。但前提是将主键一定要是Integer类型。能自动根据当前记录最大值向下继续编号。
3.支持标准SQL语句。对数据类型检查不严格,能自动将数据类型转成SQLite标准数据类型,这一点在脚本移植很管用,能将其它数据库管理系统的脚本直接导入,但要注意避免使用SQLite暂不支持的命令。
4.支持触发器。这个功能不错。什么时候支持存储过程就更好了,^_^
对SQLite了解还不是很深入,边用边学吧。
开始着手建数据库,搜索了一下数据库模型工具,以前没有用过什么这方面的工具,随便搜到一个CASEStudio。用了一下,感觉功能还不错,支持很多数据库,能自动生成数据库脚本,可惜不支持SQLite数据库引擎。胡乱画了一通,终于把ClinicOS数据库E-R图画好了,
ClinicDB.png
也顺便生成了数据库脚本,经过零零散散的近5个小时的努力,数据库结构总算搭建好了。
【下期提示】准备学习Python了,先学习PySQLite,解决编写数据库读写问题
posted @ 2006-04-07 21:09 水晶鱼 阅读(1439) | 评论 (1)编辑 收藏
 
今天晚上去外面吃饭,刚吃完饭回来,坐车坐得头晕晕的,回到电脑起,一看有个网友传了一个文件过来,让我接收,一看文件名"广告.pif",问他是什么东东,说是他做的广告图片,心想还有图片后缀名为"pif"的?心感怪异,不过我还是好奇地接了过来,看他到处想耍什么花招,保存到桌面,一看ICON却是一个dos快捷方式,于是用记事本打开看看,发现开头有"This program must be run under Win32",然后结尾处有"KERNEL32.DLL advapi32.dll oleaut32.dll shell32.dll shlwapi.dll user32.dll   LoadLibraryA  GetProcAddress  ExitProcess   RegCloseKey   SysFreeString   ShellExecuteA   PathFileExistsA   CharNextA   "
原来是一个Dos程序病毒,嘿嘿,小样,还想黑我!赶紧对它来一个shift+delete.
【以下为模拟截图】
===========================================
病毒演示01.JPG病毒演示02.jpg病毒演示03.jpg
水晶鱼 21:24:46
呵呵,这是病毒
 
水晶鱼 21:24:52
很让你失望,害不到我
 
芥蒂&~ 21:26:44
 小样算你小命好
水晶鱼 21:25:49
切,这种小case 拿去欺负那些不懂电脑的吧 
 
芥蒂&~ 21:27:17
是吗,那你来点高级的 
 
水晶鱼 21:26:30
赚钱要紧,没空害人 ,年轻人,做人要厚道
 
芥蒂&~ 21:28:04
偶以为你是傻B所以发给你瞧瞧,,偶也不是这个号号的主人
水晶鱼 21:27:12

 
芥蒂&~ 21:28:38
 要不要合作 ?
水晶鱼 21:27:33

芥蒂&~ 21:28:43
 在打电话?
水晶鱼 21:27:39
没空合作,珊瑚虫告诉我你的IP在扬州
,正在打电话通知扬州110。

消息一出,此人已不在线......
posted @ 2006-04-06 23:26 水晶鱼 阅读(593) | 评论 (3)编辑 收藏
 

【本期导读】 确定ClinicOS功能
工作任务很重,没什么时间学习,很不容易挤出一点时间来研究我的学习任务。
这一节我把题目叫作《需求分析》实在......惭愧。没有学过软件工程,更没有做过需求分析,只是在凭借自己的想当然来罗列功能,打算有空的时候去找本好书好好学学软件工程。接下来还是罗列一下我的想法吧,我觉得这样的一个小系统应该包括以下功能:
一.病人病史档案管理
 1.登记病人基本信息
 2.登记病人本次病历
 3.登记本次病人症状、医生处方、所用治疗药品
 4.打印病历卡
 5.查询病史档案
二.药品管理
 1.药品入库登记
 2.入库审核
 3.药品出库登记,包括报废出库及领药出库
 4.出库审核
 5.物品状态提醒:过期药品警戒,库存数量警戒
 6.入库查询及统计
 7.库存查询及统计
 8.出库查询及统计
 9.报废药品及统计
三.财务结算
 1.病人收费登记:诊断费+药品费
 2.药品采购支出登记
 3.每日收支报表
 4.每月收支情况报表
 5.年度收支统计分析表

【下期提示】要学习的东西很多,下来我想还是从简单入手,先学Sqlite,不知道有没有什么好用的用来写Sqlite脚本的客户端工具?

posted @ 2006-04-05 17:01 水晶鱼 阅读(194) | 评论 (0)编辑 收藏
 

虽然单元测试用例已经全部写完了,但有一个问题一直困扰着我,在写Junit(我这里用的是spring的Junit框架:AbstractTransactionalSpringContextTests)测试用例时,想在BTestCase类中调用ATestCase中的某个public 的方法a,但是又不能把ATestCase中的a方法提出到另一个类中,因为这个a方法也必须继承AbstractTransactionalSpringContextTests类,
例如:
测试基类MyTest
///import 略
public class MyTest extends AbstractTransactionalSpringContextTests {
             //略
}

测试类A
///import 略
public class A extends MyTest {
            public void a() {
                  //略,注意,此处有一些需要继承MyTest 才能访问的方法
                   
            }
            public void testA(){
                   //略
            }
}

测试类B
///import 略
public class B extends MyTest {
            
            public void testAFromClassA(){
                    A aFromClassA=new A();
                    aFromClassA.a();
                    aFromClassA.testA();

                   //略
            }
}
B类肯定会出错的,这里只是描述我想达到的效果,不知道哪位大位知道处理这类问题

posted @ 2006-04-04 22:30 水晶鱼 阅读(607) | 评论 (2)编辑 收藏
 

【本期导读】 实例学 Python
去年大约11月一位牛人同事鼓励我去掌握一门脚本语言并推荐使用Python,
我是从那时开始接触它的,虽然一度用它解决不少文本处理的小问题,但总觉得学习得不刻深入,
所以想系统地学习一下Python,并决定通过一个综合的实例dive into python。
学习背景说完了,该谈正题了,我决定做一个诊所管理系统ClinicOS,呵呵,这种软件满大街都是,
但是像我这么无聊,决定用Python实现的跨平台的版本应该还没出现吧?题目定了,开始着手开发吧,
首先准备工具,除了必要的Python2.4外还需要准备以下几个模块:
1.wxPthon2.6。用于做界面。
2.py2exe0.6.3。用它打包,把python程序转成exe。
3.pySqlite2.1.3。由于数据库选择用sqlite,所以选它作为sqlite开发接口。
4.Sqlite。用作数据存储。
看来要学的东西很多,不过在开始开发前,先给这个学习定一个deadline吧,争取4月23日
之前提交一个可用版本。
【下期提示】接下来要确定一下软件需求了,不知道各位路过的大侠能否提供一些建议?或者期望这个小软件提供什么功能?

posted @ 2006-04-04 15:09 水晶鱼 阅读(231) | 评论 (0)编辑 收藏
 

三年以来,做笔记一直都用笔和纸,所以没有打算过要用Blog,
最近一个月莫名其妙不见了三支笔,笔记本(非电子版)也用光了,
嘿嘿,找不到笔和纸,只好写blog了......

posted @ 2006-04-03 22:56 水晶鱼 阅读(193) | 评论 (0)编辑 收藏
仅列出标题
共3页: 上一页 1 2 3