常见的几种图表控件

作者: 天涯无情 @ 11/11 2006, 16:41

  今天为了在vb中读取sqlserver的数据动态绘制图表,如折线图,饼状图等,差不多花了一天的时间在百度里,没想到现在还是要回归到起点,决定还是采用微软的mschart控件.如此,主要基于几点:1.该控件读取数据方便,可以接收recordset记录集.2.原本发现它界面很丑,可是通过设置它的属性,还是能够修饰得漂亮一点得.3.其它控件不是装不上就是无法满足我得要求.

  当然还有其它几种好用的控件,如:

1.formula one & formula impression.该控件能够实现excel的类似功能,同时也能做出很多类型的图表,因此,而且能够直接内嵌到程序中,因此如果对报表之类要求比较高的话,不妨试试,性价比很高哦.原本打算在这个项目中采用6.0版本的,以便&另外一个系统统一起来,可是我的系统是xp,竟然装不上.不过它的安装说明确实说了只能在win95,win98,winNT4.0里使用.但奇怪的是xp系统里竟然能安装上6.1版本的.

这里提供一个下载地址,有英文版的,还有中文破解.

http://www.pdriver.com/display.asp?key_id=886

2.微软的excel控件,在vb中加载excel库引用就可以.但是数据&图标都是在excel里创建.如果想将图表直接在form里显示的话,可以先将excel的图标存成图片格式,然后再加载到程序的界面中.

3.微软的office web component.里面有chartspace,chartsheet.一个用于绘图,一个则与excel的功能类似,同时如果不是动态绘图的话,chartspace支持直接鼠标操作,即能够实现数据以图表的形式显示出来.


一个程序的调试过程

作者: 天涯无情 @ 09/10 2006, 08:46

  学习数据结构的集合,根据范例程序写了一个例子:

头文件是:product.h,内容如下:

#include <string>
using namespace std;

class products
{
public:
   products(const string& com = "", const string& nm = ""):company(com),name(nm){}         //构造函数
   string getCompany() const; //获取生产公司名
   string getName() const;  //获取产品名字
   friend bool operator< (const products& lhs, const products& rhs); 

   friend bool operator== (const products& lhs, const products& rhs);

 private:
   string company;
   string name;
};

//函数的实现如下:

string products::getCompany() const
{
 return company;
}
string products::getName() const
{
 return name;
}

bool operator< (const products& lhs, const products& rhs);
{
 return lhs.company < rhs.company;
}

bool operator== (const products& lhs, const products& rhs);
{
 return lhs.company == rhs.company;
}

//----------头文件的定义结束----------

主函数的程序如下:

#include <iostream>
#include <set>
#include "product.h"


using namespace std;

void main(void)
{
 
 products proArr[] = {products("Microsoft", "word"), products("Inprise", "C++ Builder"),products("Microsoft", "Excel"),}; //声明一个products数组
 int arrSize = sizeof(proArr)/sizeof(products); //获取数组中products的个数
    
 multiset <products> software(proArr, proArr + arrSize); //初始化多重集合
  
 cout << "Number of software productss = " << software.size() << endl;//打印集合的个数
 
 }

//主函数结束

编译,发现不能通过,提示说两个友元重载函数不能访问私有成员.可是友元函数就是用于访问保护成员和私有成员的非成员函数啊!先不管它,毕竟我设计了两个与私有成员交互的接口,因此我将友员函数的实现改为如下:

bool operator< (const products& lhs, const products& rhs);
{
 return lhs.getCompany()< rhs.getCompany();
}

bool operator== (const products& lhs, const products& rhs);
{
 return lhs.getCompany() == rhs.getCompany();
}

 这样总可以了吧?再次编译,还是有一个错误,为什么?仔细看了错误,说是'<'是不确定的(ambiguous),定位错误,却是到了ms vc提供的模板类进去.我就迷糊了:这是什么错误啊?于是开始一步步校对自己的代码.

1.会不会重载'<'和'=='错了?因此决定不加载string类而自己写两个比较函数.

bool compare(string& s1, string& s2);
bool equal(string& s1, string& s2);

bool operator< (const products& lhs, const products& rhs)
{
  return compare(lhs.getCompany(), rhs.getCompany());
 }

 bool operator== (const products& lhs, const products& rhs)
{
 return equal(lhs.getCompany(), rhs.getCompany());
}

 //s1 < s2 返回true,否则返回false
 bool compare(string& s1, string& s2)
 {
  char *p1 = &s1[0];
  char *p2 = &s2[0];
  for (int i=0; i< ((s1.length()>s2.length())?s2.length():s1.length()); i++)
  {
   if (*p1 < *p2)
   {
    return true;
    break;
   }
   else if (*p1 == *p2)
   {
    p1++;
    p2++;
   }
   else
   {
    return false;
    break;
   }
  }

  if (s1.length() < s2.length())
   return true;
  else
   return false;
 
 }

 //s1 == s2 返回true,否则返回false
 bool equal(string& s1, string& s2)
 {
  if(s1.length() == s2.length())
  {
   for (int i=0; i< s1.length(); i++)
   {
    if (s1[i] != s2[i])
    {
     return false;
     break;
    }
   }

   return true;

  }
  else
   return false;
 }
 

再次编译,还是不行!!同样提示'<' is ambigious.而检查了重载函数的代码,没错啊!看来问题不是在头文件了。

2.主函数的内容为空,编译,果然没有错误,因此就逐行定位,发现到

multiset <products> software(proArr, proArr + arrSize); //初始化多重集合
时,就出现了这个错误。为什么初始化会不正确?想了想,集合是在二叉树的基础上构建的,因此在初始化时,就相当于将数据放入到二叉树中,而此间就要设计到proArr数组中各个数据的比较,难道还是'<'的重载时出错了?此时发现自己又踏入了一个死循环中。叫了别人来帮我调试,也不知道是何缘故。浪费了我一晚上的精力啊!!!

今天上午打开电脑,又想到了这个问题,还是不甘心,于是决定彻底弄清friend函数,上网找了一下,耶?竟然也有好多人对friend函数不能访问私有成员的疑问。打开几篇帖子来看,有人说是因为没有ms VC6.0 没有装sp5的缘故。我就想:我的这个问题是不是也有牵连?

立马上网下了sp5,装完立马运行,编译通过!将头文件的实现也改成最开始的函数实现,也没有提示不能访问私有成员的错误了!

晕倒,折腾了半天原来是微软的软件问题。


ArcObjects开发必备资料

作者: 天涯无情 @ 09/09 2006, 06:11

  ERSI应当说是当今GIS界的领军产品,因此使用它的产品做项目的肯定不在少数。虽然说arcgis的产品系列功能比较强大,但是也是相当复杂,就像它的桌面产品上手都比较困难,更不用说它的组建产品了。但是,有一点值得注意的是:只要理解清楚了它的设计模式,系统架构,再加上一些实践开发,征服它指日可待。这边提供几个Arcobjects开发所需的资料,相关资料的获取可以通过Internet。

  1.安装了ArcGIS Desktop Developer Kit之后有个开发文档,我想这是最贴近也是最好的资源了。它还提供了各个类的属性,方法的具体描述,同时提供了大量的例子。

  2.安装目录下的对象模型图(.pdf格式),清楚详细地描述了各个类的相关关系,它将有助于你理解接口的设计模式。如果将这些文档都看懂并能熟悉地相互调用的话,我想你应该可以轻松地进行开发了。

  3.权威开发文档《Exploring Arcobjects》,讲的非常详细,同时也提供了示范代码,它将让你深入arcgis的心脏。


C/S模式与B/S模式

作者: 天涯无情 @ 06/24 2006, 12:03

一. 什么是C/S模式?

答:C/S (Client/Server,客户机/服务器)模式又称C/S结构,是软件系统体系结构的一种。C/S模式简单地讲就是基于企业内部网络的应用系统。与B/S(Browser/Server,浏览器/服务器)模式相比,C/S模式的应用系统最大的好处是不依赖企业外网环境,即无论企业是否能够上网,都不影响应用。

二.什么是B/S模式?

答:B/S(Browser/Server,浏览器/服务器)模式又称B/S结构。它是随着

Internet技术的兴起,对C/S模式应用的扩展。在这种结构下,用户工作界面是通过IE浏览器来实现的。B/S模式最大的好处是运行维护比较简便,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN,Internet/Intranet等)访问和操作共同的数据;最大的缺点是对企业外网环境依赖性太强,由于各种原因引起企业外网中断都会造成系统瘫痪。

Browser/server 模式
服务器端用asp+sql server开发;
客户端用
Internet Explorer
浏览器 / 服务器

三.C/S的实用与缺陷

MIS在我国已有20多年的发展历程, 但真正普及应用还是近十年来的事。由于负责企业庞大而复杂的数据信息的管理,在企业生产经营管理中发挥了巨大的作用,C/S本身也是属于发展到90年代的较为先进的结构。 这种模式将应用一分为二,服务器负责数据管理,客户机完成与用户的交互任务。C/S 具有强壮的数据操纵和事务处理能力,以及数据的安全性和完整性约束。但随着企业规模的日益扩大,应用程序的复杂程度不断提高,逐渐也暴露了以下几点:

1.开发成本较高。C/S 结构对客户端软硬件要求较高,尤其是软件的不断升级,对硬件要求不断提高,增加了整个系统的成本,客户端越来越臃肿。

2.移植困难。不同开发工具开发的应用程序,一般来说互不兼容,不能搬到其它平台上运行。

3.用户界面风格不一,使用繁杂,不利于推广使用。

4.维护复杂,升级麻烦。如果应用程序要升级,必须到现场为客户机一一升级,每个客户机上的应用程序都需维护。

5.信息内容和形式单一,因为传统MIS 一般为事务处理,界面基本遵循数据库的字段解释,开发之初就已确定,而且不能随时截取办公信息和档案等外部信息,用户获得的只是单纯的字符和数字,既枯燥又死板。

6.新技术不能轻易应用。因为一个软件平台及开发工具一旦选定,不可能轻易更改。

 

四、B/S的先进与不足

基于B/S的Intranet技术,其三项优势是实质性的:

1.它是有计算技术以来最稳定的技术平台。在 C/S时代,用户最苦恼的问题莫过于如何选择一个稳定的平台。由于以前的技术基础不是网络,因此自然地发展出众多的互不兼容的技术平台。每种技术平台,从用户应用稳定性要求来看,都可以说是昙花一现,给用户留下了无奈与苦恼。只有进入网络计算机时代,由于上亿用户都联在网上,其技术才获得了高度稳定性。它只能发展,不能被推翻,所有人只能支持和遵循它,不能控制它。

2.它本质上是一种客户机技术,这对于大中型企业特别合适。在C/S模式下,每种应用的主要部分是在客户机侧。别的不说,光是在众多的客户机侧安装和维护多种应用的多个版本,就叫人受不了。而Internet技术却不同,上亿个用户只是通过浏览器这个统一界面,就可享受到无限丰富的,永远在不断变化和发展着的信息服务。Intranet原则上取消了所有在客户机侧的维护工作。

3.它提供了异种机、异种网、异种应用服务的联机、联网、统一服务的最现实的开放性基础。通过Intranet技术统一访问异种数据库,早已成为现实。从 ISDN 到ATM,再到现在大行其道的TCP/IP,正是由于 Internet的大行其道,宽带IP将会成为真正的、统一服务的(数据、语音、多媒体)网络基础。但是存在着两大问题,一为:企业是一个有结构、有管理、有确定任务的有序实体,而Internet面向的却是一个无序的集合,B/S必须适应并迎合长期C/S下的有序需求方式。其二为:企业中已经积累了或多或少的各种基于非Internet技术上的应用,与这些应用联接,是Intranet一项极其重要而繁重的任务。缺乏对动态页面的支持能力,没有集成有效的数据库处理功能,系统的扩展能力差,安全性难以控制,好集成工具不足等等,都让我们应慎重行事。


Java程序员免费学习材料

作者: 天涯无情 @ 05/25 2006, 17:55

   今天在公司看到zengzm发得一个他学C&C++的帖子,让我自愧不如。上面罗列着许多他自己看过的书,而对我来说也就仅仅两本!而且可能还只是看,并没有掌握其精髓。确实应该向他好好学习。当然只是向他学其中的方法,并不一定说我立马要学C++。其实当前我更喜欢学Java,虽然我的一个朋友告诉我说,如果要学好语言,那么请从底层的语言如C++学起。但是,思考了一段时间,再结合实际情况,我还是选择了Java,我希望在我9月份上学之前,能够对java有个新的领悟。

   在网上确实能找到一些免费的学习资料,中文java网站提供了大量的免费的英文学习资料,覆盖了几乎各方面,英文好的,可以立刻去看看。

   我觉得当前我要掌握的是《thinking in Java》&《java语言命令详解》,同时空闲之余还应当多多关注语言之外的东西。



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