分享
 
 
 

用VC实现在线订货

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

目前电子商务采用的处理模式大多是订货用户在网页上填写订单,发出订货请求,接着WEB服务器上运行CGI程序对用户填写的数据进行一定的处理后,发送到专用的电子商务服务器中,服务器则对发来的用户数据进行一系列校验,验证用户身份及证实所需的订货信息完整后,将订单写入数据库中,并向WEB服务器中的CGI程序发回一个交易成功的信息,证实交易完成。

我们利用VC++的AppWizard创建一个支持MFC类的控制台模式程序(An application that support MFC),命名为“Eshopping”,修改主程序文件EShopping.cpp如下:

#include "stdafx.h"

#include "EShopping.h"

#include "afxsock.h"

typedef struct OrderSet //用户自己定义的一个订货单结构

{

char UserName[24];

char Password[12];

char Goods[24];

int Count;

char Addr[256];

}ORDER;

……//省略部分机器生成代码

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])

{ if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

{……//省略部分机器生成代码

}else //程序处理的主体

{cout〈〈"Content-type:Text/HTML\n\n";

//输出回显给用户的HTML的头

cout〈〈"〈HTML〉〈HEAD〉〈TITLE〉〈/TITLE〉〈/HEAD〉〈BODY〉\n";

char *StreamSize=getenv("CONTENT_LENGTH"); //开始取得用户填写的信息

long dataSize=atol(StreamSize);

char* buffer[dataSize]=new char[dataSize];

::memset(buffer,0,dataSize);

cin〉〉buffer; //取得用户填写的信息

char Ware[5][256]; //这个数组用于从获取的字串中分离用户填写的数据

::memset(Ware,0,5256);

char* p=buffer;

int Row=0,Col=0;

while(Row〈5)//开始处理获取的字串

{if(*p= =’=’){//若在字串中遇到“=”号,意味着用户填写的一个项的开始

Col=0;

p++;

while(*p!=’&&’) { //若在字串中遇到“&&”号,意味着用户填写的一个项的结束

if(*p= =’+’) *p=’ ’; //字串中的“+”号要转成空格

Ware[Row][Col++]=*p;

p++; }

Row++; }

p++;

}

ORDER Order;//处理完字串后,把用户填写的数据填写到一个ORDER结构中

memcpy(Order.UserName,Ware[0],24);

memcpy(Order.Password,Ware[1],12);

memcpy(Order.Goods,Ware[2],24);

int Counts=atoi(Ware[3]);

Order.Count=Counts;

memcpy(Order.Addr,Ware[4],256);

WORD wVersionRequested; //开始连接到服务器上

WSADATA wsaData;

hostent FAR *hp;

wVersionRequested = MAKEWORD( 2, 0 );

WSAStartup( wVersionRequested, &&wsaData );

SOCKET sockClient= INVALID_SOCKET;

sockaddr_in addr; //填写一个sockaddr_in结构

hp = gethostbyname("Alex"); //假设服务器名为“Alex”

memcpy(&&(addr.sin_addr),hp-〉h_addr,hp-〉h_length);

addr.sin_family = AF_INET;

addr.sin_port =htons(1025); //假设服务器侦听端口为1025

sockClient= socket(AF_INET, SOCK_STREAM, 0);

connect(sockClient, (sockaddr *)&&addr, sizeof(addr));

//连接到服务器

send(sockClient,(char*)&&Order,sizeof(ORDER),0);

//发送用户填写的信息

while(TRUE)

//等待服务器发来确认信息,完成交易

{if(int length=recv(sockClient,buffer,dataSize)〉0)

{……//省略校验回送信息的代码

cout〈〈"cout〈〈"We have got your order!";

break;

}

}

closesocket(sockClient); //关闭socket

WSACleanup( );

cout〈〈"〈/BODY〉〈/HTML〉";

return 0;

}

return nRetCode;

}

上述程序只是一个获取英文电子订单并向服务器发送订单数据的CGI程序,假设服务器程序已经运行于服务器上,并在1025端口上进行侦听,验证后发送交易成功与否的信息。

以上程序在Windows 98、VC++ 6.0环境下调试通过,在OmniHTTPd 2.0 Alpha 8 服务器上运行正常。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有