目 录
一 开发背景…………………………………………………………………………………………… 1
二 系统开发基础 …………………………………………………………………………………… 1
三 问题定义与可行性研究………………………………………………………………………… 2
四 系统设计…………………………………………………………………………………………… 2
(一)系统设计的任务……………………………………………………………………………… 2
(二)系统实现的功能……………………………………………………………………………… 2
(三)系统结构……………………………………………………………………………………… 2
(四)应用结构……………………………………………………………………………………… 3
(五)系统流程……………………………………………………………………………………… 4
(六)网络安全……………………………………………………………………………………… 4
五 详细设计…………………………………………………………………………………………… 4
(一)系统界面……………………………………………………………………………………… 4
(二)系统功能的实现……………………………………………………………………………… 4
(三)数据库的实现………………………………………………………………………………… 5
(四)程序安装与卸载……………………………………………………………………………… 8
六 编码与测试………………………………………………………………………………………… 9
七 运行与维护………………………………………………………………………………………… 11
八 结束语………………………………………………………………………………………………… 12
九 附录…………………………………………………………………………………………………… 12
十 参考文献……………………………………………………………………………………………… 14
基于外汇行情的WEB开发系统
一 开发背景:
此系统主要服务于建设银行大连市分行的外汇交易业务,建设银行大连市分行全新推出个人外汇买卖业务,此业务品种具有灵活、便捷的交易方式(柜台交易、电话银行交易、网上银行交易)、优惠的点差和“无微不至”的个性化服务的特点。个人外汇买卖业务是银行参照国际外汇市场的行情,提供即时外汇交易牌价,并接受个人客户的委托,按银行的报价将其持有的外币买卖成另一种外币的业务。交易币种包括美元、日元、港币、欧元、英镑、新加坡元、加拿大元、瑞士法郎、澳大利、亚元.个人外汇买卖牌价,是采用国际外汇市场实时汇率为参考,不低于10美元等额外币的交易.建行受理个人外汇买卖的客户对象为具有完全民事行为能力,在建行开有外币存款客户或持有外币现钞的个人(指持有合法有效身份证件的中国公民和在中华人民共和国境内居住满一年的外国人)。
二 管理信息系统基础
管理信息系统就是我们常说的MIS(Management Information System)。MIS是一门新的学科,它跨越了若干个领域,比如管理科学﹑系统科学﹑运筹学﹑统计学以及计算机科学。在这些学科的基础上,形成信息收集和加工的方法,从而形成一个纵横交织的系统。
(一) 管理信息系统的组成
管理信息系统在企业中的应用存在三个要素,这就是人、计算机和数据。
(二) 系统开发的一般方法
管理信息系统的开发是一个复杂的系统工程,它涉及到计算机处理技术、系统理论、组织结构、管理知识等各方面的问题,至今没有一种统一完备的开发方法。但是,每一种开发方法都要遵循相应的开发策略。
管理信息系统开发方法主要有:结构化生命周期开发方法、原型法、面向对象的开发方法等。
(三) 系统的开发过程
管理信息系统的开发过程一般包括系统开发准备、系统调研、系统分析、系统设计、系统实现、系统转换、系统运行与维护、系统评价等步骤。根据开发系统的大小、复杂、投入、方式、方法等因素的不同,各步骤的要求和内容也不同,用户需要根据实际情况进行取舍和计划。
(四) Active 数据对象
ADO,即ActiveX数据对象(ActiveX Data Object):实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口连接。
三 问题定义与可行性研究
(一)问题定义
外部网站外汇买卖牌价实时查询功能,是将建行外汇行情发布服务器广播的外汇行情实时数据接收到外部网站中,并将数据以网页的形式推送到客户的浏览器端。
(二)可行性研究
在对系统的目标环境进行分析的基础之上要对系统进行可行性研究分析。
从技术的可行性:充分利用银行和客户的软,硬件资源,保密技术。
从经济的可行性:进行开发成本的预算及了解取得效益的评估,进行成本效益分析。
从营运的可行性:开发项目的运行方式在银行和客户间是否行得通,客户是否同意,现有操作方式是否可行。
综合以上各方面进行系统可行性研究,编写可行性研究报告。
四、系统设计:
(一)系统设计的任务
系统设计的基本目的就是回答“概括地说,系统应该如何实现?”这个 问题。在系统分析阶段,利用一定的思想、方法和工具对现行系统进行调查、分析确定 了新的系统的逻辑结构,同时产生了一系列的系统分析文档资料,这些资料一方 面得到用户的确认,从而确保了新系统的正确性;另一方面则称为系统设计的依 据。系统设计的任务就是依据这些文档资料,采用正确的方法确定新的系统在计 算机内应该由哪些程序模块组成,它们之间用什么方式连接在一起已构成一个最 好的系统机内结构,同时还要使用一定的工具将所设计、输入\输出界面(人-机 界面)设计等。
(二)系统实现的功能
外汇牌价主要有以下三个作用:
1、 外汇牌价系统可以为客户即时的提供外汇信息。通过外汇牌价系统,客户可将手上的一种外币即时兑换成另一种外币,用以应付各种需要。
2、 外汇牌价系统可以帮助客户调整手中外币的币种结构。如某公司遵循“不要把所有的鸡蛋放在同一个篮子里”的原则,通过即期外汇买卖,将其全部外汇的15%由美元调整为欧元,10%调整为日元,通过此种组合可以分散外汇风险。
3、 外汇牌价系统还是外汇投机的重要工具。这种投机行为既有可能带来丰厚利润,也可能造成巨额亏损。
(三)系统模式和结构
1 系统模式
外汇行情牌价系统采用C/S(客户机/服务器模式),C/S的特点是一台数据库服务器加多个客户机,客户机和服务器共同分担任务,网络上传输的是请求信息和必要的数据,这种模式至今仍是应用系统的一种主要模式。
本系统主要完成数据数据管理,数据传输与数据分析等任务,由于数据库子系统有专人管理,需要经常对数据库进行测试和维护,,因此采用基于C/S的实现方式,并采用可视化的开发工具实现系统的功能。
2 系统结构
外部网站外汇买卖牌价的实时查询功能的实现是以建行已开发完成的外汇行情发布服务为基础的。其主要结构包括外汇行情广播服务器、隔离数据泵、外部网站服务器、客户端浏览器程序。其结构如图一
图一 系统结构图
外汇行情广播服务器 Sco5.0.4 |
IP:192.9.100.12 |
行内网络 |
|
外部网站服务器 NT 4.0 |
INTERNET |
客户端浏览器 |
隔离数据泵 Winnt |
串行口联接 |
工作流程如下:在银行内部网络主要是一台外汇行情广播服务器和一台隔离数据泵,两者用网线连接。服务器是SCO版本的Unix系统,隔离数据泵是WIN98或WINNT系统。外汇行情服务器同时又是一台FTP服务器,它为隔离数据泵设立了一个合法的用户名和密码,隔离数据泵通过FTP登录到行情服务器上,以数据包的方式获取行情数据。
在银行外部网,有外部网站服务器,是WIN2000操作系统,负责接收内部网的外汇行情数据包,并转化成外汇行情数据,写入access数据库,通过WEB服务器将外汇行情发布到网上。客户可以通过浏览器登录到WEB服务器上对外汇行情进行查询。
在内部网和外部网之间,也就是在隔离数据泵和外部网站服务器之间采用串行口连接,保证了数据的单向流动,只能从内部网流向外部网,从而保证了银行内部网的安全。
(四)应用结构:
外汇牌价系统的主要应用流程如下:行情服务----隔离数据泵----外汇行情本地服务器----行情接收守护程序----外汇行情数据文件----行情查询程序----浏览器.其结构见图二
图二 应用结构图
外汇行情广播服务器 Sco5.0.4 |
外部网站服务器 NT 4.0 |
客户端浏览器 |
行情服务 |
行情接收守护程序 |
外汇行情 数据文件 |
行情查询程序 |
浏览器 |
外汇行情 数据包 |
外汇行情 网页 |
隔离数据泵 |
外汇行情 数据包 |
外汇行情本地服务器 |
(五)系统流程如下:
行情服务器将每次外汇行情的变动以数据包的格式发送给行情接收守护程序,行情接收守护程序将报文解析后写入外汇行情数据文件中后汇合形成各币种的实时行情数据,当用户在网上向WEB服务器进行行情查询时。行情查询程序将外汇行情数据文件的内容以网页的形式送给用户。
(六)网络安全:
从网络拓扑上:系统采用一台PC机作为“隔离数据泵”,它将接收到的外汇行情数据包通过串行口转发至外部网站服务器上,从而从网络上分隔开了内部网与外部网的其它联系。
在应用上, “隔离数据泵”中的应用系统独占该串行口,并保证数据流向仅从内部网流向外部网,而从外部网向内部网不可行,从而保证了系统的安全。
五、详细设计:
(一)系统的主要界面
这是客户浏览最多的部份(见图三),客户只需在浏览器中输入网址,就能即时的看到外汇行情的变化,此网页每隔300秒动态的更新一次,用户也可手动更新,点刷新键即可.在这个画面中展现了英镑、美元、瑞士法郎、日圆、加元、欧元、港元、新加坡元等货币的买入价、卖出价、当日最高价、最低价、开盘价和收盘价,最大程度上满足了客户的需要,客户可根据外汇行情的变化,进行外汇买卖.
图三 系统界面图
(二)系统功能的实现
外汇牌价系统主要包括行情接收守护程序和行情查询程序,和隔离数据泵三部分
1行情接收守护程序
行情接收守护程序完成行情数据包的接收并将行情数据写入Access数据库中.
程序列表
NTService.cpp 完成行情接收守护程序的安装、拆卸、启动、停止、关闭。
MyService.cpp NTService.cpp的子类,完成行情数据包的接收并将行情数据写入Acces数据库中.
FCOffer.cpp 行情接收守护程序的入口程序。
FCOffer.ini 行情接收守护程序的配置文件
2 行情查询程序
FCOffer.asp 将外汇行情数据文件的内容以网页的形式送给用户。
3 隔离数据泵程序
FCOfferCom.cpp 完成从行情服务器上接收数据包,并将其发往串行口,并保证串行口的独占使用。
4隔离数据服务器程序
FCServer 完成从串行口取出数据,并将数据传送到外部网.
(三)数据库的实现
1动态数据库链接的实现(见附录代码一)
通过访问access数据库中的Freshtime表中fied属性(请参看数据库说明部分)每隔30秒是数据动态的更新。
2外汇行情数据包说明
外汇行情数据是外汇行情服务器在接收路透信息后,根据建行要求加点后形成建行的外汇买卖的报价.其数据包格式如下:
后续报文长度(2字节) |
币种1/币种2 现买入价/现卖出价 开盘买入价/开盘卖出价 最高买入价/最高卖出价 |
3外汇行情数据库的实现
外汇行情数据文件采用Access数据库。库名为FCOffer。其中包括四个数据表
- 币种代码表CurCode(见表一),主要属性有:
CurCode 文本 货币代码
CurSign 文本 货币符号
CurDesc 文本 货币中文名称
表一 货币代码表
CurCode | ||
贷币代码 | 贷币符号 | 中文名称 |
24 | ATS | 奥地利先令 |
29 | AUD | 澳大利亚元 |
25 | BEF | 比利时法郎 |
28 | CAD | 加拿大元 |
15 | CHF | 瑞士法郎 |
16 | DEM | 德国马克 |
31 | ESP | 西班牙比赛塔 |
33 | EUR | 欧元 |
42 | FIM | 芬兰马克 |
17 | FRF | 法国法郎 |
12 | GBP | 英镑 |
13 | HKD | 港元 |
88 | IEP | 爱尔兰磅 |
26 | ITL | 意大利里拉 |
27 | JPY | 日圆 |
89 | LUF | 卢森堡法郎 |
20 | NLG | 荷兰盾 |
90 | PTE | 葡萄牙埃斯库多 |
01 | RMB | 人民币 |
18 | SGD | 新加坡元 |
14 | USD | 美元 |
- 行情表 CurOffer(见表二),主要属性有:
C1Sign 文本 货币1代码
C2Sign 文本 货币2代码
OpenSell 货币 开盘卖出价
OpenBuy 货币 开盘买入价
MaxSel 货币 当日卖出最高价
MaxBuy 货币 当日买入最高价
CurSell 货币 当前卖出价
CurBuy 货币 当前买入价
表二 货币行情表
CurOffer | |||||||
贷币1代码 | 贷币2代码 | 买进价 | 卖出价 | 最高价 | 最低价 | 开盘价 | 最新价 |
AUD | CAD | ¥0.86 | ¥0.86 | ¥0.86 | ¥0.86 | ¥0.86 | ¥0.86 |
AUD | CHF | ¥0.82 | ¥0.82 | ¥0.82 | ¥0.82 | ¥0.82 | ¥0.82 |
AUD | HKD | ¥4.23 | ¥4.24 | ¥4.25 | ¥4.21 | ¥4.25 | ¥4.24 |
AUD | JPY | ¥65.19 | ¥65.65 | ¥65.42 | ¥65.27 | ¥65.37 | ¥65.42 |
AUD | SGD | ¥0.96 | ¥0.97 | ¥0.97 | ¥0.96 | ¥0.96 | ¥0.96 |
AUD | USD | ¥0.55 | ¥0.55 | ¥0.55 | ¥0.55 | ¥0.06 | ¥0.55 |
CAD | CHF | ¥0.95 | ¥0.95 | ¥0.95 | ¥0.95 | ¥0.95 | ¥0.95 |
CAD | HKD | ¥4.96 | ¥4.97 | ¥4.98 | ¥4.96 | ¥4.98 | ¥4.96 |
CAD | JPY | ¥75.76 | ¥76.12 | ¥75.97 | ¥75.86 | ¥75.95 | ¥75.94 |
CAD | SGD | ¥1.12 | ¥1.12 | ¥1.12 | ¥1.12 | ¥1.12 | ¥1.12 |
CHF | HKD | ¥5.31 | ¥5.32 | ¥5.34 | ¥5.28 | ¥5.31 | ¥5.32 |
CHF | JPY | ¥79.75 | ¥80.11 | ¥79.97 | ¥79.77 | ¥79.83 | ¥79.93 |
CHF | SGD | ¥1.18 | ¥1.18 | ¥1.18 | ¥1.18 | ¥1.18 | ¥1.18 |
EUR | AUD | ¥1.78 | ¥1.78 | ¥1.78 | ¥1.78 | ¥1.78 | ¥1.78 |
EUR | CAD | ¥1.53 | ¥1.54 | ¥1.54 | ¥1.53 | ¥1.53 | ¥1.53 |
EUR | CHF | ¥1.46 | ¥1.46 | ¥1.46 | ¥1.46 | ¥1.46 | ¥1.46 |
EUR | HKD | ¥7.75 | ¥7.76 | ¥7.79 | ¥7.71 | ¥7.77 | ¥7.76 |
EUR | JPY | ¥116.33 | ¥116.79 | ¥116.61 | ¥116.31 | ¥116.39 | ¥116.56 |
EUR | USD | ¥0.98 | ¥0.98 | ¥0.98 | ¥0.98 | ¥0.98 | ¥0.98 |
GBP | AUD | ¥2.83 | ¥2.83 | ¥2.83 | ¥2.82 | ¥2.82 | ¥2.83 |
GBP | CAD | ¥2.44 | ¥2.44 | ¥2.44 | ¥2.43 | ¥2.43 | ¥2.44 |
GBP | CHF | ¥2.31 | ¥2.32 | ¥2.32 | ¥2.31 | ¥2.31 | ¥2.32 |
GBP | EUR | ¥1.59 | ¥1.59 | ¥1.59 | ¥1.59 | ¥1.59 | ¥1.59 |
GBP | HKD | ¥12.24 | ¥12.24 | ¥12.27 | ¥12.19 | ¥12.24 | ¥12.24 |
GBP | JPY | ¥184.87 | ¥185.37 | ¥185.16 | ¥184.50 | ¥184.59 | ¥185.12 |
GBP | SGD | ¥2.73 | ¥2.73 | ¥2.73 | ¥2.72 | ¥2.72 | ¥2.73 |
GBP | USD | ¥1.56 | ¥1.56 | ¥1.56 | ¥1.55 | ¥1.56 | ¥1.56 |
HKD | JPY | ¥14.91 | ¥15.41 | ¥15.21 | ¥15.05 | ¥15.06 | ¥15.16 |
SGD | HKD | ¥4.47 | ¥4.47 | ¥4.47 | ¥4.46 | ¥4.47 | ¥4.47 |
SGD | JPY | ¥67.55 | ¥68.05 | ¥67.83 | ¥67.72 | ¥67.81 | ¥67.80 |
USD | CAD | ¥1.56 | ¥1.56 | ¥1.56 | ¥1.56 | ¥0.16 | ¥1.56 |
USD | CHF | ¥1.48 | ¥1.49 | ¥1.49 | ¥1.48 | ¥1.49 | ¥1.48 |
USD | HKD | ¥7.80 | ¥7.80 | ¥7.80 | ¥7.80 | ¥7.80 | ¥7.80 |
USD | JPY | ¥118.52 | ¥118.80 | ¥118.88 | ¥118.50 | ¥118.63 | ¥118.66 |
USD | SGD | ¥1.75 | ¥1.75 | ¥1.75 | ¥1.75 | ¥0.17 | ¥1.75 |
EUR | SGD | ¥1.72 | ¥1.72 | ¥1.72 | ¥1.72 | ¥1.72 | ¥1.72 |
D | HKD | ¥4.96 | ¥4.97 | ¥4.98 | ¥4.96 | ¥4.98 | ¥4.96 |
(3)刷新时间表FreshTime,主要属性有:
Fidx 布尔型 校验位
Fdate 日期型 年月日
Ftime 日期型 时分秒
(4)历史记录表history,主要属性有:
C1 文本型 货币一名称
C2 文本型 货币二名称
Buy 文本型 买入价
Sell 文本型 卖出价
Date 日期型 交易日期
4 隔离数据泵与隔离数据服务器间数据通讯说明
隔离数据泵与隔离数据服务器采用串行口通讯, 其数据线连接方式为串口零调调制连线.(见附表6)
图四 串口零调调制连线说明
串口1(9针 凸口) | 串口2(9针 凸口) |
2 | 3 |
3 | 2 |
1 | 1 |
9 | 9 |
5 | 5 |
由于外汇行情数据是以数据包的格式传送的,隔离数据泵与隔离数据服务器采用串行口通讯,通讯双方有数据缓冲,因此,双方通讯时,并不能保证隔离数据服务器每次能完整的接收一个数据包,因此,双方通讯时须要在隔离数据服务器端对数据进行重组形成原有格式的数据包,其方法如下:
在隔离数据泵处对数据包进行封装,封装格式如下:
数据包+’\xd’;
在隔离数据服务器端, 对接收到的数据进行重组,当发现有’\xd’字符时,从重组数据时拆卸出数据包。
(四)程序安装与卸载
1程序安装说明:
(1) 将行情接收守护程序Fcoffer.exe及配置文件Fcoffer.ini 数据库Fcoffer.mdb拷贝到d:\FCOFFER子目录下,并根据实际情况更改配置文件.
(2)在DOS环境下运行命令行 FCOffer –I完成行情接收守护程序的安装。
(3) 将FCOffer.asp 拷贝到IIS服务器的主目录下,并配置其属性使该目录有执行脚本的属性
(4) 配置文件FCOffer.ini说明:
HostIP=192.9.100.12 #行情广播服务器的IP地址
Port=10000 #行情广播服务器的服务端口
DBName=D:\FCOFFER\FCOffer.mdb #行情数据库全文件名
2详细安装说明
(1) 双击FCOffer.exe解压缩文件,(当出现对话框时,单击unzip按钮)
注:默认情况下将该文件解压缩至D:\FCOffer目录下,如不存在D:盘时不能,可将其
解压缩至C:\FCOffer目录下,在这种情况下,须在对话框的Unzip to Folder栏中将
D:\FCOffer 改为 C:\FCOffer 后再单击unzip按钮. 然后修改 C:\FCOffer\FCOffer.asp 的第45行
connstr="DBQ="+"d:\fcoffer\fcoffer.mdb"+ _
修改为
connstr="DBQ="+"c:\fcoffer\fcoffer.mdb"+ _
修改 C:\FCOffer\FCOffer.ini的第3行
DBName=D:\FCOFFER\FCOffer.mdb
修改为
DBName=C:\FCOFFER\FCOffer.mdb
(2) 安装FCOffer服务
单击 开始->程序->附件->命令提示符 进入命令行状态
运行命令 C:\> cd D:\FCOffer (若是安装在C:盘,命令为 cd \FCOffer)
然后运行命令 D:\FCOffer> FCOffer -i
(3) 启动FCOffer服务
单击 开始-> 设置 ->控制面板 -> 服务 进入服务管理器在服务管理器中单击FCOffer服务后,单击启动。在我行没有安装防火墙时,系统通过串行口传输数据时HostIP 设为127.0.0.1,同时要保证,先启动FCSer.exe(外汇牌价报文转发系统网站端程序)后,再启动FCOffer服务,关闭时先关闭FCOffer服务,然后关闭FCSer程序
(4)安装FCOffer.asp网页
进入"Internet服务管理器", 右键单击"默认Web站点",选择新建虚拟目录,在别名中输入FCOffer,在站点内容目录中输入本地目录C:\FCOffer在站点属性中选择"读取";"日志访问";"索引此资源"。在执行许可中选择"纯脚本"
3卸载说明
1. 单击 开始->程序->附件->命令提示符 进入命令行状态
运行命令 C:\> cd D:\FCOffer (若是安装在C:盘,命令为 cd \FCOffer)
然后运行命令 D:\FCOffer> FCOffer -u
2, 进入Internet服务管理器, 单击"默认Web站点",删除FCOffer虚拟目录
3. 删除FCOffer目录
六 编码与测试
外部网站外汇买卖牌价实时查询测试
- 外汇牌价报文转发WIN98端测试(见图五)
经过10小时测试, 将该程序结果与外汇行情广播服务器的发送数据包比较,数据一致且无丢包现象。
-
- 外汇牌价报文转发WINNT端测试(见图六)
经过10小时测试, 将该程序结果与外汇行情广播服务器的发送数据包比较,数据一致且无丢包现象。
图五 外汇牌价报文转发WIN98端测试图
图六 外汇牌价报文转发WINNT端测试图
-
- 外汇牌价测试(见图七)
图七 外汇牌价测试图
经过测试, 网页内容可按照外汇牌价报文内容进行变化.
七、运行与维护
系统维护是一项漫长而复杂的工作,它贯穿与整个系统的生命周期。外汇牌价系统的维护主要包括数据库的维护,客户接收程序的维护。
在外汇牌价变化过程中,数据库的维护是很重要的。一旦数据库因为某种故障出现问题,就会影响到整个系统的正常运行。所以要对数据库定期进行备份和恢复工作。
(一)对数据库的备份
数据库的备份就是制作数据库结构和数据的拷贝,以便在数据库遭到破坏时能够恢复数据库。在Microsoft access中,备份是动态的,即在进行备份的时候,允许用户对数据库继续进行操作。Microsoft access提供了满足各种需要的四种备份方法:
- 数据库备份:数据库完整备份,将拷贝所有对象、系统表和数据。
- 增量备份:更小更快的备份,仅备份更新过数据。数据库完整备份是用作系统失败时的基线,只有在执行了完全数据库备份之后,才能执行增量备份。
- 事务日志备份:只备份面向事务的日志。
- 文件/文件组备份:当数据库非常巨大时,可以执行数据库文件或文件组备份。
(二)对数据库的恢复
数据库恢复就是复原一个被破坏、出错或丢失的数据库的过程在进行数据库恢复时,系统首先进行一些操作,以确保数据库安全和迅速地恢复,同时必须确保数据库备份文件是有效的,并且在备份文件中包含了所需要的备份内容。数据库恢复是静态的,恢复时不允许用户继续操作数据库。当用完全数据库备份恢复时,系统将自动重建原来的所有数据库,并且把这些文件放在备份时的原始位置,这种过程是系统自动完成的,因此,在执行数据库恢复工作时,不需要重新建立数据库结构。
八、结 束 语
本人的毕业设计题目是基于外汇行情的网页开发系统,它是以Microsoft Access为后台数据库,以Visual C++为前台脚本开发环境,实现对外汇牌价变化的统一管理。它是我大学期间所学专业知识的总结。
在近几个月的毕业设计过程中,使本人系统开发的理论和实践能力都有了很大的提高。在此,感谢老师们,是他们在这四年中给我的无私帮助,我将终生难忘。在平时的学习生活中,各位老师不辞辛劳的教导,使我在多方面都达到了一个较高的层次。
由于本人能力有限,在整个设计中还有很多不足之处,本人会在今后的日子里,通过自己的努力将其改进.
九、附录
代码一 数据动态链接库的实现
<%
dim conn,connstr,rs,sqlstr
connstr="DBQ="+"d:\fcoffer\fcoffer.mdb"+ _
";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" + _
"DriverId=25;FIL=MS Access;ImplicitCommitSync=Yes;" + _
"MaxBufferSize=512;MaxScanRows=8;PageTimeout=5;" + _
" SafeTransactions=0;Threads=3;UserCommitSync=Yes;"
set conn = server.createobject("ADODB.CONNECTION")
conn.open connstr
sqlstr = "select FDATE,FTIME from FreshTime where Fidx='1'"
set rs = conn.Execute(sqlstr)
response.write CStr(rs(0)) + " " +CStr(rs(1))
rs.close
%>
<%
sqlstr = "select c1.curdesc,c2.curdesc,newp,buyp,sellp,maxp,minp,openp,c1.curcode,c2.curcode " + _
"from curoffer,curcode c1,curcode c2 " + _
"where curoffer.c1sign = c1.cursign and curoffer.c2sign = c2.cursign order by c1.curcode,c2.curcode"
set rs = conn.Execute(sqlstr)
do while not rs.eof
response.write "<tr bgcolor=""#C7DBFC""><td>"+CStr(rs(0))+"<img src=\fcoffer\"+CStr(rs(4))+".gif></td>"+chr(13)+chr(10)
response.write "<td>"+CStr((rs(1)))+"<img src=\fcoffer\"+CStr(rs(5))+".gif></td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(7),4,-1,0,-1)+"</td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(2),4,-1,0,-1)+"</td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(3),4,-1,0,-1)+"</td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(4),4,-1,0,-1)+"</td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(5),4,-1,0,-1)+"</td>"+chr(13)+chr(10)
response.write "<td align=right>"+FormatNumber(rs(6),4,-1,0,-1)+"</td></tr>"+chr(13)+chr(10)
rs.movenext
loop
rs.close
conn.close
%>
十、 参考文献
1. 张红军等译,Visual C++6.0中文版高级应用与开发指南,人民邮电出版社,1999年
2. 吴师通编著,Visual C++实用编程百例,清华大学出版社,2000年
3. 李玉东等编著,Visual C++ 6.0/.NET 控件大全,电子工业出版社,2002年
4. 何旭洪等编著,Visual C++ 6.0 数据库系统开发实例导航,人民邮电出版社,2003年
5. 付杰勇编著,VC中如何实现动态数据报表的打印和预览,计算机时代,2001年,
6. 尚红军编著,VC错误处理程序的设计,计算机与现代化,2001年
7. Peter Rob, Elie Semaan等编著,数据库设计与开发,电子工业出版社,2002年
8. 萨师煊,王珊编著,数据库系统概论,高等教育出版社,2001年
9. 谭浩强编著,C程序设计第二版,清华大学出版社,2001年
10.张基温编著,C++程序开发教程,清华大学出版社,2002年
11.甘仞初主编,信息系统开发,经济科学出版社 2000年
12. 甘仞初主编,管理信息系统,北京理工大学出版社,2002年