《Linux操作系统》课程设计报告-购物管理系统.doc_第1页
《Linux操作系统》课程设计报告-购物管理系统.doc_第2页
《Linux操作系统》课程设计报告-购物管理系统.doc_第3页
《Linux操作系统》课程设计报告-购物管理系统.doc_第4页
《Linux操作系统》课程设计报告-购物管理系统.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南城建学院Linux操作系统课程设计报告题目:购物管理系统 姓 名: 齐 超 学 号: 061408139 班 级: 0614081班 指导老师:邵国金、杨斌、魏新红 专 业: 计算机科学与技术 2011年 09 月 09 日前 言 随着Internet国际互联网的发展,越来越多的企业开始建造自己的网站。基于Internet的信息服务,商务服务已经成为现代企业一项不可缺少的内容。很多企业都已不满足于建立一个简单的仅仅能够发布信息的静态网站。现代企业需要的是一个功能强大的,能提供完善的电子商务服务的动态商务网站。目 录系统目的随着时代的发展,信息技术、Internet/Intranet技术、数据库技术的不断发展完善,网络进程的加快,传统的购物方式也越来越不能满足人们快节奏的生活需求,使得企业的IT部门已经认识到Internet的优势,电子商务就是在这样一个背景下产生发展起来的。伴随着电子商务技术的不断成熟,电子商务的功能也越来越强大,注册用户可以在网上搜索购买到自己想要的各种商品,初步让人们体会到了足不出户,便可随意购物的快感。这次的设计就正是一个电子商务系统的开发-网上购物系统。设计说明本系统是一个中小型的电子商务系统-网上购物系统,可以为各类用户提供方便的在线购物环境,符合目前国内流行的电子商务模式。用户可以在系统中实现验证、浏览商品、搜索查询商品、下定单、处理定单等功能;系统的组成有以下几个子系统组成:1. 主页,显示欢迎界面,提供近期的商品。3. 查询系统,通过商品类别、名称来查询是否有自己需要的商品。4. 购物车,处理订购并显示想要订购的商品。5. 用户身份验证系统。6. 用户资金验证系统。系统结构简介l 用户可以浏览网站l 验证用户身份l 提供搜索引擎,使用户能够按特定的条件对所需商品进行搜索l 用户下定单购买商品l 用户处理定单l 用户资金验证l 用户查看定单处理步骤系统运行环境配置操作系统:Windows XP,Microsoft SQL server,linux 操作系统。CPU:没有很高的要求,只要能够顺利运行Windows系列操作系统就可以了。内存:最低配置32MB,建议使用64MB以上内存,如果使用Windows 2000或Windows XP建议使用128MB以上内存。硬盘空间:至少需要50MB以上的硬盘空间来安装所需的组件。系统数据库介绍服务器方数据库表结构: 服务器商品表:商品号,端口号,单价,数量。 处理记录:端口号,流水账号,成功与否。 消费表:消费表编号,密码,金额。中间件第三方表: 端口表:端口号,地址信息。 消费记录表:端口号,流水账号,消费商品号,购买数量,消费编号。客户端表: 客户商品表:商品号,商品名称,数量,单价。 消费表:端口号,流水账号,消费品号,购买数量,消费编号。模块设计概述网上商品系统的主要体系结构包括: 数据服务器 linux 操作系统平台 客户端购物系统流程图:用户模块的程序流图:用户浏览商品选定商品放入购物车是否购买确认购买订单详情商品信息否否否否是是是用户第三方中间件流程图:请求消费判定消费卡购买信息中间件记录数据传入服务器判断资金是否足够1 处理大中资金数据2 处理服务器商品数量3 发出发货信息1. 客户端商品数量减少2. 出货时间是否继续交易退 出退 出报 错!信息无法购买报 错!报 错!用户NNNNNYYYYYNY给中间件传输系统其它功(1) 用户验证用户一旦成为本网站的会员后,即可在登陆页面中登陆,用户只要输入自己的用户名和密码即可实现登陆。这里有ASP函数对用户名和密码进行判断,以此来保证用户的合法性为了能更方便地使用网站的各项功能,用户登录也是必不可少的。当用户登录以后,便可进行查阅/更改自己的个人资料、修改/处理个人定单等操作。(2) 购物车当用户选好自己想要的商品后可把商品放入购物车中,购物车将自动产生相应的定单。当然,用户也可以从购物车里删除掉选好的商品,而相应定单的也会删除。(3) 用户资金验证程序代码数据库程序代码:#include #include #include #include #include #include #include #include #define rec_length20void strsplit(char *,char *,char );main(int argc, char *argv )/1 main struct sockaddr_in sin; struct servent *sp; int s,ns,pid;chard=|,tmp1000,buff500,cmd500;char *service,*log=svr.log;/chars=1234|567|7|90|abcd|efghijklmnop|;char*str;char*v100,*h500;inti,j,recs,flds,err_code,c,rd_l,wr_l;char *sat=OKOKOKOK,E_DBinit,E_DBconn,E_DBqry ,E_DBstor,E_DBnDAT,E_TCPsvr,E_TCPnam,E_TCPsoc,E_TCPcon,E_TCPsnd,E_TCPrcv,E_TCPbnd,E_TCPlsn,E_TCPacc;/declare structure and vars.MYSQLmysql;MYSQL_RES*result;MYSQL_ROWrow;if(argc!=1) service=argv1;else/2fprintf(stderr,NO service assigned!nUsage:n);fprintf(stderr,t%s server_name!n,argv0);fprintf(stderr,Note: svr_name is defined in file /etc/servicesn);exit(-1);/2/sprintf(buf,touch %s,log);system(buf);/ touch or create logif(rd_l=open(log,O_WRONLY|O_CREAT|O_APPEND,0644)=-1)fprintf(stderr,Log file %s open error!an,log);exit(-1);close(rd_l);for(i=0;is_port; if(bind(s,&sin,sizeof(sin)=-1)/2fprintf(stderr,Error: bind);err_code=13;goto end_1;/close(s); exit(-6);/2 if(listen(s,5)=-1)/2fprintf(stderr,Error: listen);err_code=14;goto end_1;/close(s); exit(-6);/2 while(1)/2 while fprintf(stderr,nttt Now wait connect .n);if(ns=accept(s,0,0)=-1) / wait a connection /3fprintf(stderr,error: accept); continue;/err_code=14;goto end_1;/3err_code=0;if(pid=fork()=-1) /conneted, and then create child proc/3fprintf(stderr,server: fork error!);close(s); exit(-1);/3if(pid!=0)/parent proce,nothing to do, and to the next loop/3close(ns);wait(0);continue;/3if(pid=0) / entered child proccedure/3 pid=0close(s);printf(Receive a client connect:%sn,argv1);if(rd_l=read(ns,buff,500)=0)/4fprintf(stderr,Read nothing from socket:nsn);err_code=12;goto end_1;/4printf(%s get message from ns: %sn,argv0,buff);buffrd_l=0;strcpy(tmp,buff);strsplit(buff,v,d);switch(v00)/4 switchcase 2:/query();sprintf(cmd,SELECT kid,money FROM K WHERE kid=%s and kpwd =%s,v1,v2);/execute queryprintf(nCMD=%sn,cmd);if(mysql_query(&mysql,cmd)!=0)/5fprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=3;goto end_1;/5/get resultif(result=mysql_store_result(&mysql)=NULL)/5fprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);mysql_free_result(result);err_code=4;goto end_1;/5/mysql_err:/sprintf(buff,%2.2d|,err_code);if(err_code!=0) goto end_1;recs=mysql_num_rows(result);row=mysql_fetch_row(result);sprintf(buff,%d|%s,recs,row1);double money; printf(-%s-,buff);/money=row1;/* if(recs=1)write(ns,1,wr_l);else write(ns,0,wr_l);flds=mysql_num_fields(result);for(i=0;irecs;i+)/5/process result setrow=mysql_fetch_row(result);for(j=0;jflds;j+)/6sprintf(cmd,%s|,rowj);strcat(buff,cmd);/6/5*/wr_l=strlen(buff);if(wr_l=write(ns,buff,wr_l)!=wr_l)/5fprintf(stderr,Write socket ns error!n);close(ns); exit(-4);/5 char rebuf500,rep500,repp500;if(rd_l=read(ns,rebuf,500)=0)/5fprintf(stderr,Read nothing from socket:nsn);err_code=12;goto end_1;/5 mysql_free_result(result); /may cause problem when no resultprintf(%s 接收信息: %sn,argv0,rebuf); strsplit(rebuf,h,d);double share=0;for(i=1;i=swit2(hi+1)/?sprintf(repp,%s|%s|%s|,hi,1,hi+1);printf(%s商品数量足够!,hi);strcat(rep,repp); /double ttt=swit2(hi+1) * row2; / ttt*=row2; / share+=ttt;elsesprintf(repp,%s|%s|%s|,hi,0,row1);printf(%s商品数量不足!,hi);strcat(rep,repp);/*if(share=money)sprintf(repp,%d,share);printf(%s卡上金额为:%d,所需金额为:%d!金额足够!,v1,money,share);strcat(rep,repp);double tt=money-share;sprintf(cmd,update K set money=%d where kid=%s;,tt,v1);printf(nCMD=%sn,cmd);if(mysql_query(&mysql,cmd)!=0)fprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=3;goto end_1;printf(数据库更新成功!n);elsesprintf(repp,%d,money);printf(%s卡上金额为:%d,所需金额为:%d!金额不足!,v1,money,share);strcat(rep,repp);*/printf(+%s,rep);wr_l=strlen(rep);if(wr_l=write(ns,rep,wr_l)!=wr_l)fprintf(stderr,Write socket ns error!n);close(ns); exit(-4);end_1:mysql_free_result(result); /may cause problem when no resultmysql_close(&mysql); /may cause problem when no &mysqlbreak;case 3:/trans();nothing(buff);break;default:fprintf(stderr,Func. code error in:n%s,buff);/4switch/写日志strncat(tmp,buff,wr_l);wr_l+=rd_l;tmpwr_l=0;strcat(tmp,n);+wr_l;printf(nTMP(%d:%d)=%sn,strlen(tmp),wr_l,tmp);if(flds=open(log,O_WRONLY|O_APPEND)=-1)fprintf(stderr,File %s open error!n,log);exit(-5);if(write(flds,tmp,wr_l)!=wr_l)fprintf(stderr,File %s write error!n,log);close(flds);exit(-6);close(flds);close(ns); exit(0);/3/2while/1mainvoid strsplit(char *s,char *v,char d)inti,j,l;j=0;vj=s;l=strlen(s);for(i=0;il;i+)if(*(s+i)!=|) continue;else *(s+i)=0;v+j=s+i+1;nothing(char *x)sprintf(x,00|);double swit1(char* s)double sum=0,sum1=0;int t=0,d=0;for(t;st!=.;t+)int i=st-48; sum+=i*pow(10,strlen(s)-1-t);sum/=pow(10,strlen(s)-t);t+;d=strlen(s)-t;for(t;tstrlen(s);t+) int i=st-48; sum1+=i*pow(10,strlen(s)-1-t);sum1/=pow(10,d);sum=sum+sum1;return sum;int swit2(char* s)int sum=0;int t=0;for(t;tstrlen(s);t+) int i=st-48; sum+=i*pow(10,strlen(s)-1-t);return sum;客户端程序代码:#include #include #include #include #include #include #include #include #include #include #define rec_length500char str512;main(int argc, char *argv )char*d=|;char*v100;int sql=0,rslt=0;/structure defined for request as a clientstructhostent *hp1;structsockaddr_in sin1;structservent *sp1;charsbuf1000,*log=mid.log;intss,spid,rd_l,wr_l,rd1l;char*sservice,*sdest;/structure defined for request as a serverstruct sockaddr_in sin;struct servent *sp;int s,ns,pid,err_code,recs,flds;charbuf500,tmp1000,cmd500;char*service;inti,j,c;char *sat=OKOKOKOK,E_DBinit,E_DBconn,E_DBqry ,E_DBstor,E_DBnDAT,E_TCPsvr,E_TCPnam,E_TCPsoc,E_TCPcon,E_TCPsnd,E_TCPrcv,E_TCPbnd,E_TCPlsn,E_TCPacc;/declare structure and vars for MySQLMYSQLmysql;MYSQL_RES*result;MYSQL_ROWrow;/test the environment parameter: lservice, dservice, server_nameif(argc=4) service=argv1;sservice=argv2; sdest=argv3;else fprintf(stderr,Parameter assigned Error!nUsage:n);fprintf(stderr,t%s lservice dservice server_name!n,argv0);fprintf(stderr,Note: server_name is defined in file /etc/hostsn);fprintf(stderr,and: lservice dservice are defined in file /etc/servicesn);exit(-1);/sprintf(buf,touch %s,log);system(buf);/ touch or create logif(rd1l=open(log,O_WRONLY|O_CREAT|O_APPEND,0644)=-1)fprintf(stderr,Log file %s open error!an,log);exit(-1);close(rd1l);err_code=0;if(sp=getservbyname(service,tcp)=NULL)fprintf(stderr,Error: getservbyname);err_code=6; exit(err_code);if(s=socket(AF_INET,SOCK_STREAM,0)=-1)fprintf(stderr,Error: socket create);err_code=8; exit(err_code);bzero(&sin,sizeof(sin);sin.sin_port=sp-s_port;if(bind(s,&sin,sizeof(sin)=-1)fprintf(stderr,Error: bind);err_code=13;close(s); exit(err_code);if(listen(s,5)=-1)fprintf(stderr,Error: listen);err_code=14;close(s); exit(err_code);/ initialize MYSQL structureif(mysql_init(&mysql)=NULL)strcpy(tmp,Error in mysql_init!);fprintf(stderr,%sn,tmp);err_code=1; goto end_1;sql=1;/connect to DataBaseif(!mysql_real_connect(&mysql,localhost,root,0,lyg,0,NULL,0)sprintf(tmp,数据库连接错误: %s %d,mysql_error(&mysql),mysql_errno(&mysql);fprintf(stderr,%sn,tmp);err_code=-2; goto end_1;while(1)fprintf(stderr,nttt Now wait connect .n);if(ns=accept(s,0,0)=-1) / wait a connection */fprintf(stderr,error: accept); continue;if(pid=fork()=-1) / conneted, and then create child procfprintf(stderr,server: fork error!);close(s); exit(-1);if(pid!=0) /parent proce, nothing to do, and to the next loopclose(ns);wait(0);continue;if(pid=0) / entered child proccedureclose(s);printf(Receive a client connect:%sn,argv1);sprintf(cmd,SELECT * FROM S;); / 构造命令if(mysql_query(&mysql,cmd)!=0) /execute queryfprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=3;goto end_1;if(result=mysql_store_result(&mysql)=NULL) /get resultfprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=4;goto end_1;rslt=1;sprintf(buf,%2.2d|,err_code);if(err_code!=0) goto end_1;recs=mysql_num_rows(result); / 获得行数flds=mysql_num_fields(result); / 获得域数fprintf(stderr,records=%d & fields=%dn,recs,flds);for(i=0;irecs;i+) / 处理结果集的每一行row=mysql_fetch_row(result);for(j=0;jflds;j+) / 处理行中的每个域,并构造返回串sprintf(cmd,%s|,rowj);strcat(buf,cmd);/fprintf(stderr,%sn,buf); / 显示返回信息wr_l=strlen(buf);if(wr_l=write(ns,buf,wr_l)!=wr_l)strcat(tmp,Write socket ns error!n);fprintf(stderr,Write socket error!n);else strncat(tmp,buf,wr_l);wr_l+=rd_l;/close(s);char buff500;if(rd_l=read(ns,buff,rec_length)=0)fprintf(stderr,Read nothing from socket:nsn);err_code=12; close(ns);exit(err_code);wr_l=rd_l; buffrd_l=0;/strcpy(sbuf,buf);fprintf(stderr,%s get message from ns: %sn,argv0,buff);/buffrd_l=0;strcpy(tmp,buff);strsplit(buff,v,d); / 拆分请求信息/printf(%c,v00);switch(v00) / 分析请求功能,并执行相关工作。这里只实现了查询功能. 其它功能由自己模仿查询功能来实现case 1: /query();sprintf(cmd,SELECT * FROM S WHERE sname like %s%;,v1); / 构造命令if(mysql_query(&mysql,cmd)!=0) /execute queryfprintf(stderr,Error in query: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=3;goto end_1;if(result=mysql_store_result(&mysql)=NULL) /get resultfprintf(stderr,Error in store_result: %s %dn,mysql_error(&mysql),mysql_errno(&mysql);err_code=4;goto end_1;rslt=1;sprintf(buf,%2.2d|,err_code);if(err_code!=0) goto end_1;recs=mysql_num_rows(result); / 获得行数flds=mysql_num_fields(resu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论