如何做好需求分析

作者: 天涯无情 @ 05/23 2007, 23:26
识别系统需求
1.商业运作和过程是什么?(你要干什么)
2.商业过程应该怎样完成?(怎样完成它,需要完成哪些步骤)
3.需求信息是什么?(为了实现系统你需要哪些信息)
识别系统需求信息收集的方法:
.向系统相关者分发和收集调查表
.复查现有的报表和表格,过程描述
.主持与用户的面谈和讨论
.观察商业过程和工作流
.建立原形
.主持联合应用程序设计会议
=======
与用户面谈的清单:
面谈之前:
确立面谈目的
确定要包括的相关用户
确定参加会议的项目小组长成员
建立要讨论的问题和列表
复查有关文档和资料
确立时间地点
通知所有参加者有关会议的目的,时间和地点
进行面谈:
衣着得体;
准时到达
寻找异常和错误观点情况
深入调查细节
详细记录;
指出和记录下未回答条目和未解决问题
面谈之后:
复查笔记的准确性,完整性,可理解性
把所收集的信息转化为适当的模型和文档资料
确定需要进一步澄清的问题域
适当的时候向参加会议的每一个人发一封感谢信.

在MO平台上实现图形编辑功能

作者: 天涯无情 @ 05/01 2007, 10:44

  这两天在做一个MO+VB的小系统,在上学期做的系统基础之上改了改,也差不多够用了,但是这次要求能够有图形的编辑功能。MO本身是没有直接的接口可以调用的,因此就翻了翻资料,硬着头皮拼命找。终于在MO自带的例子当中找到了Edit的代码,它提供的是在一个新建图层上添加对象,删除对象,同时节点的添加,删除和移动。刚一看,还挺兴奋的,总算找到了相关资料(图形编辑的资料网上还是比较少的)。宝贝啊,让我兴奋了挺久的。一运行,感觉还不错。
  而我要实现的功能是:从地图中查找要编辑的空间对象(包含点,线,面),然后对该对象进行编辑;能够在该图层上添加相应的类型对象,能够删除对象;
于是兴致高昂地开始啃那么代码,一看就开始犯晕了,它包含了几个类,东西真多!而且我还要针对我的实际情况进行修改。琢磨了大约一天的时间,总算有了点眉目。今天开始动手把功能全部做出来了。说下整体的实现思路:
1.通过空间查询接口选择一个对象(线图层选择线对象,点图层选择点对象,面图层选择面对象)
2.在动态图层上高亮显示编辑的对象以及它的节点,这一步比较复杂,花费了大量的时间。
判断点击的位置是否靠近对象的节点(节点可以通过对象的parts得到),如果是则直接高亮显示对象以及节点,同时用另一种颜色标识该节点用以表示该节点被选中了;否则只是高亮显示对象以及节点。
在这一步实现的过程中,一定要注意很多图层中的对象拥有子对象,即object.parts.count>1;所以我用了两个变量进行控制:m_selPolyPart表示选中节点所在的子对象索引,m_selVertex表示该节点在该子对象点集中的索引;这样就很容易知道选中节点的位置了,下一步移动节点的时候好控制。
3.编辑节点,包括添加节点,删除节点,移动节点。现在只实现了移动节点的功能,效果与arcgis的效果差不多。

处于编辑状态下的对象:

移动对象某些节点后的贴图:

保存编辑后的贴图,已经没有高亮显示:


扫雷周

作者: 天涯无情 @ 04/02 2007, 22:16

  已经第六周了,要根据windows API 写个与操作系统提供的扫雷游戏一致的游戏,现在雷区已经做的差不多了,增加对菜单的响应就ok了,贴2个界面上来展示一下。以后有谁想要单击版的扫雷游戏可以找我要,呵呵。

写到这,主要做了以下一些工作:

1。学会了从系统自带的扫雷提取用到的资源:如数字,雷,方块等;

2。做了一个需求分析,不过是参照别人的;

3。利用画线技术,定时器,贴图进行界面的设计;

4。对鼠标事件进行响应,同时写了连续翻雷的递归算法:

 

/**
  @brief    掀开周围没有雷数的方块
    
   利用递归算法
  @param   hwnd 窗口句柄
  @param   iRow 方块行值
  @param   iCol 方块列值
  @return   无返回值
*/
void SettleNoneMine(HWND hwnd, int iRow, int iCol)
{
 RECT newRect;
 if (iRow>=0 && iRow=0 && iCol {
  MineInfo[iRow][iCol].flag = OPEN;
  newRect.left = MINEFLD_LEFTPOS + iCol*MINE_BITMAP_WIDTH;
  newRect.top = MINEFLD_TOPPOS + iRow*MINE_BITMAP_HEIGHT;
  newRect.bottom = newRect.top + MINE_BITMAP_HEIGHT;
  newRect.right = newRect.left + MINE_BITMAP_WIDTH;
  InvalidateRect(hwnd, &newRect, TRUE);
  
  //掀开周边8个方格
  if (MineInfo[iRow][iCol].mineNum == 0)
  {
   if((MineInfo[iRow-1][iCol-1].flag==UNFLAG || MineInfo[iRow-1][iCol-1].flag==QUESTION
    && MineInfo[iRow-1][iCol-1].mineNum!=-1) && (iRow-1>=0 && iCol-1>=0)) //左上角
   {
    SettleNoneMine(hwnd, iRow-1, iCol-1);
   }
   if((MineInfo[iRow-1][iCol].flag==UNFLAG || MineInfo[iRow-1][iCol].flag==QUESTION
    && MineInfo[iRow-1][iCol].mineNum!=-1) && (iRow-1>=0 )) //正上方
   {
    SettleNoneMine(hwnd, iRow-1, iCol);
   }
   if((MineInfo[iRow-1][iCol+1].flag==UNFLAG || MineInfo[iRow-1][iCol+1].flag==QUESTION
    && MineInfo[iRow-1][iCol+1].mineNum!=-1) && (iRow-1>=0 && iCol+1   {
    SettleNoneMine(hwnd, iRow-1, iCol+1);
   }
   if((MineInfo[iRow][iCol-1].flag==UNFLAG || MineInfo[iRow][iCol-1].flag==QUESTION
    && MineInfo[iRow][iCol-1].mineNum!=-1) && (iCol-1>=0)) //正左方
   {
    SettleNoneMine(hwnd, iRow, iCol-1);
   }
   if((MineInfo[iRow][iCol+1].flag==UNFLAG || MineInfo[iRow][iCol+1].flag==QUESTION
    && MineInfo[iRow][iCol+1].mineNum!=-1) && (iCol+1   {
    SettleNoneMine(hwnd, iRow, iCol+1);
   }
   if((MineInfo[iRow+1][iCol-1].flag==UNFLAG || MineInfo[iRow+1][iCol-1].flag==QUESTION
    && MineInfo[iRow+1][iCol-1].mineNum!=-1) && (iRow+1=0)) //左下方
   {
    SettleNoneMine(hwnd, iRow+1, iCol-1);
   }
   if((MineInfo[iRow+1][iCol].flag==UNFLAG || MineInfo[iRow+1][iCol].flag==QUESTION
    && MineInfo[iRow+1][iCol].mineNum!=-1) && (iRow+1   {
    SettleNoneMine(hwnd, iRow+1, iCol);
   }
   if((MineInfo[iRow+1][iCol+1].flag==UNFLAG || MineInfo[iRow+1][iCol+1].flag==QUESTION
    && MineInfo[iRow+1][iCol+1].mineNum!=-1) && (iRow+1   {
    SettleNoneMine(hwnd, iRow+1, iCol+1);
   }
    
  }
 }

}


Google Earth KML

作者: 天涯无情 @ 12/27 2006, 23:37

  下一阶段有可能做跟这个东西有关的一项工作,先看看。这里有个网址专门介绍kml的,还比较详细,感兴趣的可以看看。

   http://www.step1.cn/googleapi/map/kml.htm


今天心情不错

作者: 天涯无情 @ 11/12 2006, 10:52

  经过周末两天时间的不懈努力,工作终于有了迅速的进展,总的工作就剩下地下水等值曲线&等值面的绘制了.没想到经过两天努力把图表功能给完成了,效果看起来还不错,比较高兴.

这两天主要解决了以下几个难点:

1.图表控件的选择,最终使用了mschart,发现它的功能还是比较强大的,之前太小瞧它了.通过一系列属性设置同样能够让你的图表美观起来.如标签名,网格间隙都是可以在代码里控制的.

2.mschart的datasource属性只能为一个记录集,因此要画多条曲线的画,在记录集里就应该有多列.我的表只有时间,编码,地下水水位四个字段,而我要实现在某个时段内不同编码的站点的对比图.经过一段时间的考虑,我使用交叉表解决了这个问题,在sqlServer中使用交叉表的方法可查下更详细的资料,举个例子:

SELECT TitleOfCourtesy,
  SUM(CASE City WHEN 'London' THEN ReportsTo ELSE NULL END) AS [London City],
 SUM(CASE City WHEN 'Redmond' THEN ReportsTo ELSE NULL END) AS [Redmond City],
 SUM(CASE City WHEN 'Seattle' THEN ReportsTo ELSE NULL END) AS [Seattle City]
FROM Employees GROUP BY TitleOfCourtesy

同时你还可以结合嵌套查询,联合查询等其它条件,我写的一个简单的语句如下,

select substring(CONVERT(varchar(10), YMDHM, 111),3,10) as ymdhm, sum(case STCD when '" & staCode(0) & "' then " & strFieldN & " else 0 end) as [" & staCode(0) & "] from " & strTableN & " where stcd in (" & staCode(0) & ") and  ymdhm >= '" & strStartTime & "' and ymdhm <= '" & strEndTime & "' group by ymdhm order by ymdhm asc".

3.mschart还支持数据源为数组类型,这次为了做多个年份,同一个站点的水位对比分析,就使用了这种方法.其中需要用到多个循环,所以执行效率可能低一点.

4.突然间发现vb用类的思想设计框架的话,也能够使效率大大提高,更为关键的是灵活性强,而且也使代码更为简洁,这样就不用成天想着怎么去拷贝代码了.



  © 感知世界,感知未来, All rights reserved.