软件工作的基本方法之一:5分钟工作制
在软件工作中,遇到小难题(如:语法、简单算法等)时,如果自己5分钟内没有解决,则直接询问本小组的其他人员。
相关的一个基本工作方法:15分钟工作制
如果一个问题,本小组15分钟内无法解决时,则把本问题记录下来,留待明天(后续)解决。
以上2个方法,可以有效的保证工作的进度,保证工作的愉快程度。
相关的方法是:
软件开发工作中的1030原则2种方法的区别在2点:
1、时间长短不一,5分钟短,1030原则长一倍;
2、适用地方不一,5分钟适用于简单问题,1030适用于其他问题。
posted @
2007-05-11 09:02 石正 阅读(194) |
评论 (0) |
编辑 收藏
我工作的计算机编号是51,现在才明白,是每天都是劳动节的意思! 劳动节快乐!天天快乐!
最近真忙啊!
posted @
2007-04-29 16:15 石正 阅读(220) |
评论 (0) |
编辑 收藏
C++中,CTime 与 CString转换
CTime m_StartTime1 = CTime::GetCurrentTime();
CString csStartTime = m_StartTime1.Format( "%Y%m%d%H%M%S" );
一.将CString转为CTime的几种方法
CString timestr = "2000年04月05日";
int a,b,c ;
sscanf(timestr.GetBuffer(timestr.GetLength()),"%d年%d月%d日",&a,&b,&c);
CTime time(a,b,c,0,0,0);
--------or - ---------------------
CString s("2001-8-29 19:06:23");
int nYear, nMonth, nDate, nHour, nMin, nSec;
sscanf(s, "%d-%d-%d %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);
CTime t(nYear, nMonth, nDate, nHour, nMin, nSec);
---- or ------------------------
CString timestr = "2000年04月05日";
int year,month,day;
BYTE tt[5];
//get year
memset(tt, 0, sizeof(tt));
tt[0] = timestr[0];
tt[1] = timestr[1];
tt[2] = timestr[2];
tt[3] = timestr[3];
year= atoi((char *)tt);
//get month
memset(tt, 0, sizeof(tt));
tt[0] = timestr[6];
tt[1] = timestr[7];
month = atoi((char *)tt);
//get day
memset(tt, 0, sizeof(tt));
tt[0] = timestr[10];
tt[1] = timestr[11];
CTime time(year,month,day,0,0,0);
从上面来看,很明显使用sscanf()函数的优势.
二.将CTIme转换为CString的方法:
CTime tmSCan = CTime::GetCurrentTime();
CString szTime = tmScan.Format("'%Y-%m-%d %H:%M:%S'");
这样得到的日期时间字符串就是以"2006-11-27 23:30:59"的格式.这是不是很方便呢?
//取得CTime中的日期
CString cstrDate = tmScan.Format("%Y-%m-%d");
//取得CTime中的时间
CString cstrTime = tmScan.Format("%H:%M-%S");
sprintf还有个不错的表妹:strftime,专门用于格式化时间字符串的,用法跟她表哥很像,也是一大堆格式控制符,只是毕竟小姑娘家心细,她还要调用者指定缓冲区的最大长度,可能是为了在出现问题时可以推卸责任吧。这里举个例子:
更多更好的sprintf()函数说明参考:《spirntf,你知道多少?》
http://blog.csdn.net/steedhorse/archive/2005/03/25/330206.aspx
time_t t = time(0);
//产生"YYYY-MM-DD hh:mm:ss"格式的字符串。
char s[32];
strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));
sprintf在MFC中也能找到他的知音:CString::Format,strftime在MFC中自然也有她的同道:CTime::Format,这一对由于从面向对象哪里得到了赞助,用以写出的代码更觉优雅。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1417748
posted @
2007-04-18 09:47 石正 阅读(12937) |
评论 (5) |
编辑 收藏
源代码格式不对,也是软件错误。
源代码是软件的一个重要的组成部分,源代码格式不对,换句话说,源代码错误,肯定是软件错误。所以,把源代码编译没有错误等价为源代码正确,是错误的,把运行没有错误,等价为源代码正确,是错误的。
源代码格式的几点应该注意的事项(常识):
1、源代码的书写格式,应该体现源代码内部的逻辑关系;
2、源代码内部最重要的代码行是:空行;空行把代码分成各个相对独立的组成部分;
3、源代码内部第二重要的代码行是:注释行;
4、源代码行内最重要的字符是:空格;空格把代码行分成各个相对独立的组成部分;
5、源代码行内第二重要的字符是:制表符(Tab),制表符是行首缩进使用的字符;
6、注释合格的标准是:同等级技术能力的技术人员,可用比较方便的看懂代码;或者,应该从事该工作的技术人员可以容易的看懂;
7、注释行数应该占到总代码行数的三分之一;
8、每个源代码文件头部都必须有说明本文件功能的注释;
9、自己定义的每个函数都必须有说明函数功能的注释;
10、自己定义的每个变量都必须有说明变量功能的注释;
11、注释应该使用自己的母语(汉语);
12、一句注释合格的标准是,表达了需要表达的内容,语法正确;
13、清楚的注释能够方便代码阅读者理解代码的逻辑关系和各个函数的功能;
14、键盘上最重要的键是空格键,空格占英文文章的比例是20%左右;写软件源代码时,空格的比例也很大;所以,键盘上面积最大的键是空格;
posted @
2007-04-18 09:08 石正 阅读(499) |
评论 (1) |
编辑 收藏
引用自
http://www.91php.cn/trackback.php?tbID=88&extra=964ce999cp
SQL Server 2000中,当新建一个空的数据库后,在查询分析器中执行
sp_database 或select * from sysobjects where xtype = 'U'
都会得到dtproperties表,并显示为用户表, 可这个表我从没有创建过。但是在企业管理器中,dtproperties却显示为系统表。难道是bug ? 查看dtproperties,里面没有数据,是个空表。在SQL Server联机丛书里没有关于这个表的描述。
dtproperties表在企业管理器中无法删除,但在查询分析器中 执行drop table dtproperties却可以删除。
手工建立一个表,表名就叫dtproperties,然后再查看,在企业管理器中赫然显示为系统表!! 看来Bug是一定的了。
重新创建一个数据库, 写个触发器,让其在dtproperties表执行insert时执行,然后在SQL Server里随意操作,hehe,终于发现,在新建关系图时,dtproperties表被插入数据,看来它是用来存储数据关系图的。呵呵,想点办法,数据关系图以后也可以备份下来了。
再用drop table dtproperties删除表dtproperties,[手工创建dtproperties ,结构任意,] 然后在企业管理器中新建数据关系图,呵呵,SQL Server报错!再次证实前面的猜想!
SQL Server 2005中dtproperties 表不存在了,取而代之的是sysdiagram (记不住具体的名称了) ,这个bug也不存在了,SQL Server 2005中的系统表和SQL Server 2000有了很大的不同。
posted @
2007-04-05 10:21 石正 阅读(811) |
评论 (0) |
编辑 收藏
posted @
2007-03-30 09:51 石正 阅读(172) |
评论 (0) |
编辑 收藏
VC++6 写完的程序程编译链接通过后,点运行的时候出现one or more files out of date or not exist,解决办法。
把所有日期大于当前系统日期的文件,打开后,添加一个空格,然后保存,即可。
可以对照文件的目录,按时间倒序排列后,逐个处理。
posted @
2007-03-22 17:10 石正 阅读(1259) |
评论 (2) |
编辑 收藏
sysobjects
在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行。只有在 tempdb 内,每个临时对象才在该表中占一行。
列名 |
数据类型 |
描述 |
name
|
sysname
|
对象名。 |
Id
|
int
|
对象标识号。 |
xtype
|
char(2)
|
对象类型。可以是下列对象类型中的一种:
C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 L = 日志 FN = 标量函数 IF = 内嵌表函数 P = 存储过程 PK = PRIMARY KEY 约束(类型是 K) RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 UQ = UNIQUE 约束(类型是 K) V = 视图 X = 扩展存储过程 |
uid
|
smallint
|
所有者对象的用户 ID。 |
info
|
smallint
|
保留。仅限内部使用。 |
status
|
int
|
保留。仅限内部使用。 |
base_schema_ ver
|
int
|
保留。仅限内部使用。 |
replinfo
|
int
|
保留。供复制使用。 |
parent_obj
|
int
|
父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID)。 |
crdate
|
datetime
|
对象的创建日期。 |
ftcatid
|
smallint
|
为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0。 |
schema_ver
|
int
|
版本号,该版本号在每次表的架构更改时都增加。 |
stats_schema_ ver
|
int
|
保留。仅限内部使用。 |
type
|
char(2)
|
对象类型。可以是下列值之一:
C = CHECK 约束 D = 默认值或 DEFAULT 约束 F = FOREIGN KEY 约束 FN = 标量函数 IF = 内嵌表函数 K = PRIMARY KEY 或 UNIQUE 约束 L = 日志 P = 存储过程 R = 规则 RF = 复制筛选存储过程 S = 系统表 TF = 表函数 TR = 触发器 U = 用户表 V = 视图 X = 扩展存储过程 |
userstat
|
smallint
|
保留。 |
sysstat
|
smallint
|
内部状态信息。 |
indexdel
|
smallint
|
保留。 |
refdate
|
datetime
|
留作以后使用。 |
version
|
int
|
留作以后使用。 |
deltrig
|
int
|
保留。 |
instrig
|
int
|
保留。 |
updtrig
|
int
|
保留。 |
seltrig
|
int
|
保留。 |
category
|
int
|
用于发布、约束和标识。 |
cache
|
smallint
|
保留。 |
posted @
2007-03-21 10:16 石正 阅读(2416) |
评论 (0) |
编辑 收藏
系统表的应用
系统表用的不多,写几个常用的系统表
各个数据库中的系统表:
1.SysObject:
存放数据库中的各个对象!
最重字段
1.1 Name,Id,Crdate,Xtype (U :用户表,V:视图,Tr:触发器,P:存储过程,S,系统表)
1.2 常用函数 Object_ID('对象名'),Object_Name
此外我们如果想生成1,2,3,4,5这样的等差数列,可以这样做
Select Identity(int,1,1) As Id Into # From SysObjects,SysColumns
2.SysColumns
存放各列的信息
最重字段
2.1 Name,Id,Colid--字段在表中存放的顺序
设一个表中字段有很多,想列出某表除某字段外的所有字段,可以这样写
Declare @Fields Varchar(5000)
Select @Fields=@Fields+Name
From SysColumns
Where Id=Object_ID('Test') and Name Not In ('字段1','字段2')
又如如何用列序号选择特定列
Create Function F_ColumnOrder(@TableName Varchar(10),@Colid Int)
Returns Table
As
Return
Select Name From SysColumns
Where ID=Object_ID(@TableName) And Colid=@Colid
--Try
Select * From Dbo.F_ColumnOrder('Users',2)
3.SysFiles
如果我们想知道SQL的数据文件存放目录的话,可以用
Select FileName From SysFiles
4.SysComments
保存视图或存储过程的语句!
5.Sysforeignkeys
fkeyid:外键表对象ID,rKeyid:主键表对象ID
有时我们想把数据库中的所有表都去掉,但是有约束的存在,有些表必须在主表前删除,否则就会报错,
这种情况下我们就通过该表来实现
**********************************************************
Master表中的系统表
SysDataBases
重要字段
1.1 Name,Dbid,Crdate
常用函数 DB_ID('数据库名')
sysaltfiles
保存各个数据库的MDF文件的物理地址
SysProcesses
保存进程信息
Kill spid 杀掉某进程
5.注意sp_MsForEachTable函数
删除某数据库中表
Exec Sp_MsForEachTable 'Truncate Table ?'
注意:有约束的不能删除,会出错的
6.如果想改系统表怎么办?
2种方法
1.通过查询分析器改
用如下语句:
Exec Sp_Configure 'allow updates',1--允计修改
Reconfigure with override
Exec Sp_Configure 'allow updates',0--不允计修改
Reconfigure with override
2.通过企业管理器改
在SQL实例上右键-属性-允计修改系统目录直接进行修改
posted @
2007-03-21 10:12 石正 阅读(720) |
评论 (0) |
编辑 收藏
master--->数据库的核心库,存储很多系统的信息和登录的信息等
tempd--->存储了诸如临时表等信息
Northwind--->北风数据库,是个例子数据库,可以模拟很多操作,并且提供例子供参考
名称 地址 说明
sysaltfiles 主数据库 保存数据库的文件
syscharsets 主数据库 字符集与排序顺序
sysconfigures 主数据库 配置选项
syscurconfigs 主数据库 当前配置选项
sysdatabases 主数据库 服务器中的数据库
syslanguages 主数据库 语言
syslogins 主数据库 登陆帐号信息
sysoledbusers 主数据库 链接服务器登陆信息
sysprocesses 主数据库 进程
sysremotelogins主数据库 远程登录帐号
syscolumns 每个数据库 列
sysconstrains 每个数据库 限制
sysfilegroups 每个数据库 文件组
sysfiles 每个数据库 文件
sysforeignkeys 每个数据库 外部关键字
sysindexs 每个数据库 索引
sysmenbers 每个数据库 角色成员
sysobjects 每个数据库 所有数据库对象
syspermissions 每个数据库 权限
systypes 每个数据库 用户定义数据类型
sysusers 每个数据库 用户
posted @
2007-03-21 10:07 石正 阅读(400) |
评论 (0) |
编辑 收藏