网上购物系统项目开发总结报告Word文档下载推荐.docx
- 文档编号:20362492
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:24
- 大小:144.37KB
网上购物系统项目开发总结报告Word文档下载推荐.docx
《网上购物系统项目开发总结报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网上购物系统项目开发总结报告Word文档下载推荐.docx(24页珍藏版)》请在冰豆网上搜索。
(2)严格遵守学校的纪律和机房的各项管理规定。
(3)严格请假制度,需请假时,必须经指导老师批准。
2)技术要求
按软件工程的思想和方法来设计这一项目,并把它作为一个工程来做。
设计的每一步都有要形成文档,“成品”出来以后要有使用说明书和测试报告。
最后按院方统一要求整理出软件实习“论文”,并分别以电子和书面文档的形式上交。
因不是针对某个具体业务系统的,该系统的设计只是一个大的框架,但要求对实际系统进行模拟,能针对实际系统更好。
建议模拟移动公司的手机代收费系统。
要求本设计的三部分都要对所接收和发送的数据以文件形式留迹并同时在屏幕上显示。
客户端要求对接收到的返回数据进行正确格式的显示或打印。
服务器端要先建立模拟用数据文件或数据库,这是服务的基础。
服务器数据库要求使用Linux提供的免费的MySQL。
开发时主要用到C访问MySql的接口程序MySqlCAPI。
该设计的三个部分都要设计出程序,并要在验收时进行演示。
3)具体要求
(1)客户端
客户端程序可命名为client,要求带有两个命令行参数一个是服务(自己定义,定义在/etc/services中,比如mysvr15678),另一个是目的主机(定义在/etc/hosts内,也可使用DNS来解析),缺省时为本机。
客户至少要实现如下功能:
用户管理;
查询;
交易(交费,购物等);
撤销;
统计。
(2)中间件
中间件程序命名为middleware,要带有三个参数,一个是服务器的服务(名字,与客户端同),第二个作为请求的服务(自己定义,定义在/etc/services中,要区别于客户端,比如mysvr25679),第三个为目的主机(定义在/etc/hosts内),缺省时为本机。
中间件要完成与客户要求相符的功能:
是本地的本地处理,否则发往服务器方。
具体地是:
接收客户方数据;
组织服务器方所需数据;
重组服务方返回数据,并返回给客户方。
(3)服务器
服务器程序可命名为server,要求带有一个服务参数,与中间件的mysvr2同。
服务器方程序要完成客户端或中间件提出的业务请求,并做好留迹工作。
(4)留迹或log
留迹或log工作在客户端、中间件和服务器三方都要做,以供统计或核对使用。
客户端或中间件方可以使用文本文件或数据库,但在服务器方张须使用MySql数据
三.流程图如下
1.注册功能流程图
2.商品搜索流程图
3.用户登录流程图
4.购物流程图
四.客户端的功能实现部分及源代码
•
客户端是打开一通信通道,并连接到服务器所在主机的特定端口。
向服务器发服务请求,等待并接收应答;
请求结束后关闭通信通道。
socket程序库是UNIX网络上最普及的API,可调用socket程序库提供的各个程序开发网络软件和网络系统。
TCP/IP协议被集成到UNIX内核中时,相当于在UNIX系统引入了一种新型的I/0操作。
UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多。
在UNIX系统中,网络应用编程界面有两类:
UNIXBSD的套接字(socket)和UNIXSystemV的TLI。
由于Sun公司采用了支持TCP/IP的UNIXBSD操作系统,使TCP/IP的应用有更大的发展,其网络应用编程界面(套接字)在网络软件中被广泛应用其中和套接字有关的函数有:
创建套接字—socket()地址绑定—bind()建立连接—connect()与accept()监听连接—listen()数据传输—send()/write()与recv()/read()关闭套接字—close()。
数据可中所用的东西有:
在命令提示符下输入:
mysql或mysql–uroot进入mysql系统。
提示符为“>
”,可以使用的命令有:
showdatabases/tables;
usedatabase;
createdatabasedb;
createtabletbl;
dropdatabasedb/tabletbl;
select…fromtbl…where…insert…intotbl…values…update…tbl…set…where…delete…fromtbl…where…
因为我们要完成的事网上购物系统,所以客户端组要是完成查询可购买的功能,所以所用的到数据库也相对的简单。
客户端部分源代码
#include<
time.h>
stdio.h>
sys/types.h>
fcntl.h>
sys/socket.h>
netinet/in.h>
netdb.h>
mysql/mysql.h>
#definerec_length20
main(intargc,char**argv)
{
structhostent*hp;
structsockaddr_insin;
structservent*sp;
charc;
charbuff[1000],cmd[500],spname[13],spnum[6];
ints,err_code,recs,flds,i,rd_l,wr_l;
intop;
char*service,*dest,*log="
clt.log"
;
MYSQLmysql;
MYSQL_RES*result;
MYSQL_ROWrow;
1.运用unix_socket的内容完成服务器与客户端的基本定义:
if(argc!
=1){service=argv[1];
dest=argv[2];
}
else{
fprintf(stderr,"
NOserviceassigned!
\nUsage:
"
);
%sservice_namedestination!
\n"
argv[0]);
Note:
service_nameisdefinedin/etc/services\n"
destinationisdefinedin/etc/hosts\n"
exit(-1);
}
sprintf(cmd,"
touch%s"
log);
system(cmd);
err_code=0;
if(mysql_init(&
mysql)==NULL){//2
fprintf(stderr,"
Errorinmysql_init!
exit(-1);
}//2
2.把服务器与客户端通过说句库连接起来,并完成基本的通信功能。
//connecttoDB
if(!
mysql_real_connect(&
mysql,"
localhost"
"
root"
0,"
clt"
0,NULL,0)){//2
Errorinconnection:
%s[%d]\n"
\
mysql_error(&
mysql),mysql_errno(&
mysql));
mysql_close(&
mysql);
err_code=-2;
gotomysql_err;
//query();
sprintf(cmd,"
SELECT*FROMmain"
//executequery
if(mysql_query(&
mysql,cmd)!
=0){//5
Errorinquery:
//mysql_close(&
err_code=-3;
gotomysql_err;
}//5
//getresult
if((result=mysql_store_result(&
mysql))==NULL){//5
Errorinstore_result:
mysql_free_result(result);
err_code=-4;
mysql_err:
if(err_code!
=0){
mysql_close(&
}
//sprintf(buff,"
1|"
recs=mysql_num_rows(result);
flds=mysql_num_fields(result);
if(recs==0){
fprintf(stderr,"
NoDatainTableUNIT"
gotomysql_err2;
//processresultset
bzero(buff,500);
printf("
\ninputthenameofgoods:
scanf("
%s"
spname);
spname[13]='
\0'
row=mysql_fetch_row(result);
getdate(cmd);
//getdateDate+unit_code+jnl
sprintf(buff,"
1|%s|%8.8s%4.4s%5.5d|%4.4s|"
spname,cmd,row[0],atoi(row[1]),row[0]);
\n===%s===\n"
buff);
//
i=atoi(row[1])+1;
UPDATEmainsetcurr_jnl=\'
%d\'
whereunit_id=\'
%s\'
i,row[0]);
//fprintf(stderr,"
%s\n"
cmd);
mysql_err2:
mysql_free_result(result);
mysql_err1:
leb_send:
if((sp=getservbyname(service,"
tcp"
))==NULL){
Error:
getservbyname"
exit(-5);
if((hp=gethostbyname(dest))==0){
gethostbyname"
exit(-6);
bzero(&
sin,sizeof(sin));
bcopy(hp->
h_addr,&
sin.sin_addr,hp->
h_length);
sin.sin_family=hp->
h_addrtype;
sin.sin_port=sp->
s_port;
if((s=socket(AF_INET,SOCK_STREAM,0))==-1){
socket"
if(connect(s,&
sin,sizeof(sin))==-1){
connect"
close(s);
//next2Linebuildrequestmessage
if((wr_l=write(s,buff,strlen(buff)))!
=strlen(buff)){//toserver
WriteSocketsERROR\n!
close(s);
if((rd_l=read(s,cmd,500))==0){//getreplayfromserver
ReadSocketsError\n"
exit(-2);
printf("
%s\tsend:
%s\n\tgetreply:
(%dBs)%s\n"
argv[0],buff,rd_l,cmd);
cmd[rd_l]='
buff[wr_l]='
strcat(buff,"
|OKOK|"
wr_l+=6;
strncat(buff,cmd,rd_l);
wr_l+=rd_l;
buff[wr_l++]='
\n'
if((flds=open(log,O_WRONLY|O_APPEND))==-1){
File%sopenerror!
exit(-5);
if(write(flds,buff,wr_l)!
=wr_l){
File%swriteerror!
close(flds);
close(flds);
while
(1){bzero(buff,500);
bzero(spnum,6);
othertransactions:
\npleaseinputyouroption:
1:
query2:
buy3:
print4:
quit(q/Q)\n"
%d"
&
op);
if(op==4)exit(0);
if(op==2){
printf("
\nnumber:
spnum);
spnum[6]='
%1.1d|%s|%s|%8.8s%4.4s|%5.5d|%4.4s|"
op,spname,spnum,cmd,row[0],atoi(row[1]),row[0]);
gotoleb_send;
exit(0);
getdate(char*d)
{inti;
time_tt,t1;
structtm*t_m;
if((t=time(&
t1))==-1)return-1;
t_m=localtime(&
t);
sprintf(d,"
%4.4d%2.2d%2.2d"
t_m->
tm_year+1900,t_m->
tm_mon+1,t_m->
tm_mday);
d[8]='
return0;
3,服务器端的功能实现及源代码
服务器端所用到的函数与客服端的几乎是一样的,用到套接字的内容,和数据库的东西,但是其中的数据库要相对复杂。
他可以接收来自客服端的命令请求,并分析命令然通过数据库对客服端的请求给予答复。
服务器端的源代码为
#include<
stdlib.h>
voidstrsplit(char*,char**,char);
main(intargc,char**argv)
{//1main
structsockaddr_insin;
structservent*sp;
ints,ns,pid;
chard='
|'
tmp[1000],buff[500],cmd[500];
char*service,*log="
svr.log"
//chars[]="
1234|567|7|90|abcd|efghijklmnop|"
char*str;
char*v[100],*tt;
inti,j,recs,flds,err_code,c,rd_l,wr_l;
doublepay;
//declarestructureandvars.
=1)service=argv[1];
else{//2
\t%sserver_name!
svr_nameisdefinedinfile/etc/services\n"
for(i=0;
i<
100;
i++)v[i]=NULL;
1.数据库的初始化和套接字的运用
//initializeMYSQLstructure
sp"
))==NULL){//2
if((s=socket(AF_INET,SOCK_STREAM,0))==-1){//2
socketcreate"
if(bind(s,&
sin,sizeof
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网上 购物 系统 项目 开发 总结报告