《Linux操作系統(tǒng)》課程設(shè)計(jì)報(bào)告購(gòu)物管理系統(tǒng)
《《Linux操作系統(tǒng)》課程設(shè)計(jì)報(bào)告購(gòu)物管理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《Linux操作系統(tǒng)》課程設(shè)計(jì)報(bào)告購(gòu)物管理系統(tǒng)(29頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 河南城建學(xué)院 《Linux操作系統(tǒng)》課程設(shè)計(jì)報(bào)告 題目:購(gòu)物管理系統(tǒng) 姓 名: 齊 超 學(xué) 號(hào): 061408139 班 級(jí): 0614081班 指導(dǎo)老師:邵國(guó)金、楊斌、魏新紅 專(zhuān) 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 2011年 09 月 09 日 前 言 隨著Internet國(guó)際互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的企業(yè)開(kāi)始建造自己的網(wǎng)站?;贗nternet的信息服務(wù),商務(wù)服務(wù)已經(jīng)成為現(xiàn)代企業(yè)一項(xiàng)不可缺少的內(nèi)容。很多企業(yè)都已不滿(mǎn)足于建
2、立一個(gè)簡(jiǎn)單的僅僅能夠發(fā)布信息的靜態(tài)網(wǎng)站?,F(xiàn)代企業(yè)需要的是一個(gè)功能強(qiáng)大的,能提供完善的電子商務(wù)服務(wù)的動(dòng)態(tài)商務(wù)網(wǎng)站。 目 錄 系統(tǒng)目的 隨著時(shí)代的發(fā)展,信息技術(shù)、Internet/Intranet技術(shù)、數(shù)據(jù)庫(kù)技術(shù)的不斷發(fā)展完善,網(wǎng)絡(luò)進(jìn)程的加快,傳統(tǒng)的購(gòu)物方式也越來(lái)越不能滿(mǎn)足人們快節(jié)奏的生活需求,使得企業(yè)的IT部門(mén)已經(jīng)認(rèn)識(shí)到Internet的優(yōu)勢(shì),電子商務(wù)就是在這樣一個(gè)背景下產(chǎn)生發(fā)展起來(lái)的。伴隨著電子商務(wù)技術(shù)的不斷成熟,電子商務(wù)的功能也越來(lái)越強(qiáng)大,注冊(cè)用戶(hù)可以在網(wǎng)上搜索購(gòu)買(mǎi)到自己想要的各種商品,
3、初步讓人們體會(huì)到了足不出戶(hù),便可隨意購(gòu)物的快感。這次的設(shè)計(jì)就正是一個(gè)電子商務(wù)系統(tǒng)的開(kāi)發(fā)---網(wǎng)上購(gòu)物系統(tǒng)。 設(shè)計(jì)說(shuō)明 本系統(tǒng)是一個(gè)中小型的電子商務(wù)系統(tǒng)----網(wǎng)上購(gòu)物系統(tǒng),可以為各類(lèi)用戶(hù)提供方便的在線購(gòu)物環(huán)境,符合目前國(guó)內(nèi)流行的電子商務(wù)模式。用戶(hù)可以在系統(tǒng)中實(shí)現(xiàn)驗(yàn)證、瀏覽商品、搜索查詢(xún)商品、下定單、處理定單等功能; 系統(tǒng)的組成有以下幾個(gè)子系統(tǒng)組成: 1. 主頁(yè),顯示歡迎界面,提供近期的商品。 3. 查詢(xún)系統(tǒng),通過(guò)商品類(lèi)別、名稱(chēng)來(lái)查詢(xún)是否有自己需要的商品。 4. 購(gòu)物車(chē),處理訂購(gòu)并顯示想要訂購(gòu)的商品。 5. 用戶(hù)身份驗(yàn)證系統(tǒng)。 6. 用戶(hù)資金驗(yàn)證系統(tǒng)。 系統(tǒng)結(jié)構(gòu)簡(jiǎn)介 l
4、 用戶(hù)可以瀏覽網(wǎng)站 l 驗(yàn)證用戶(hù)身份 l 提供搜索引擎,使用戶(hù)能夠按特定的條件對(duì)所需商品進(jìn)行搜索 l 用戶(hù)下定單購(gòu)買(mǎi)商品 l 用戶(hù)處理定單 l 用戶(hù)資金驗(yàn)證 l 用戶(hù)查看定單處理步驟 系統(tǒng)運(yùn)行環(huán)境配置 操作系統(tǒng):Windows XP,Microsoft SQL server,linux 操作系統(tǒng)。 CPU:沒(méi)有很高的要求,只要能夠順利運(yùn)行Windows系列操作系統(tǒng)就可以了。 內(nèi)存:最低配置32MB,建議使用64MB以上內(nèi)存,如果使用Windows 2000或Windows XP建議使
5、用128MB以上內(nèi)存。 硬盤(pán)空間:至少需要50MB以上的硬盤(pán)空間來(lái)安裝所需的組件。 系統(tǒng)數(shù)據(jù)庫(kù)介紹 服務(wù)器方數(shù)據(jù)庫(kù)表結(jié)構(gòu): 服務(wù)器商品表:商品號(hào),端口號(hào),單價(jià),數(shù)量。 處理記錄:端口號(hào),流水賬號(hào),成功與否。 消費(fèi)表:消費(fèi)表編號(hào),密碼,金額。 中間件第三方表: 端口表:端口號(hào),地址信息。 消費(fèi)記錄表:端口號(hào),流水賬號(hào),消費(fèi)商品號(hào),購(gòu)買(mǎi)數(shù)量,消費(fèi)編號(hào)。 客戶(hù)端表: 客戶(hù)商品表:商品號(hào),商品名稱(chēng),數(shù)量,單價(jià)。 消費(fèi)表:端口號(hào)
6、,流水賬號(hào),消費(fèi)品號(hào),購(gòu)買(mǎi)數(shù)量,消費(fèi)編號(hào)。 模塊設(shè)計(jì)概述 網(wǎng)上商品系統(tǒng)的主要體系結(jié)構(gòu)包括: 數(shù)據(jù)服務(wù)器 linux 操作系統(tǒng)平臺(tái) 客戶(hù)端 購(gòu)物系統(tǒng)流程圖: 用戶(hù)模塊的程序流圖: 用戶(hù)瀏覽商品 選定商品 放入購(gòu)物車(chē) 是否購(gòu)買(mǎi) 確認(rèn)購(gòu)買(mǎi) 訂單詳情 商品信息 否 否 否 否 是 是 是 用戶(hù) 第三方中間件流程圖: 請(qǐng)求消費(fèi) 判定消費(fèi)卡 購(gòu)買(mǎi)信息 中間件記錄數(shù)據(jù) 傳入服務(wù)器 判斷資金是否足夠 1. 處理大中資金
7、數(shù)據(jù) 2. 處理服務(wù)器商品數(shù)量 3. 發(fā)出發(fā)貨信息 1. 客戶(hù)端商品數(shù)量減少 2. 出貨時(shí)間 是否繼續(xù)交易 退 出 退 出 報(bào) 錯(cuò)! 信息無(wú)法購(gòu)買(mǎi) 報(bào) 錯(cuò)! 報(bào) 錯(cuò)! 用戶(hù) N N N N N Y Y Y Y Y N Y 給中間件傳輸 系統(tǒng)其它功 (1) 用戶(hù)驗(yàn)證 用戶(hù)一旦成為本網(wǎng)站的會(huì)員后,即可在登陸頁(yè)面中登陸,用戶(hù)只要輸入自己的用戶(hù)名和密碼即可實(shí)現(xiàn)登陸。這里有ASP函數(shù)對(duì)用戶(hù)名和密碼進(jìn)行判斷,以此來(lái)保證用戶(hù)的合法性為了能更方便地使用網(wǎng)站的各項(xiàng)功能,用戶(hù)登錄也是必不可少的。當(dāng)用戶(hù)登錄以后,便可進(jìn)行查閱/更改自己的個(gè)人資料、修改/
8、處理個(gè)人定單等操作。 (2) 購(gòu)物車(chē) 當(dāng)用戶(hù)選好自己想要的商品后可把商品放入購(gòu)物車(chē)中,購(gòu)物車(chē)將自動(dòng)產(chǎn)生相應(yīng)的定單。當(dāng)然,用戶(hù)也可以從購(gòu)物車(chē)?yán)飫h除掉選好的商品,而相應(yīng)定單的也會(huì)刪除。 (3) 用戶(hù)資金驗(yàn)證 程序代碼 數(shù)據(jù)庫(kù)程序代碼: #include <stdio.h> #include <sys/types.h> #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include
9、 <mysql/mysql.h> #include <math.h> #define rec_length 20 void strsplit(char *,char **,char ); main(int argc, char **argv ) { //1 main struct sockaddr_in sin; struct servent *sp; int s,ns,pid; char d='|',tmp[1000],buff[500],cmd[500]; char *service,*log=&qu
10、ot;svr.log"; // char s[]="1234|567|7|90|abcd|efghijklmnop|"; char *str; char *v[100],*h[500]; int i,j,recs,flds,err_code,c,rd_l,wr_l; char *sat[]={ "OKOKOKOK","E_DBinit","E_DBconn","E_DBqry ","E_DBstor", "E_DBnDAT
11、","E_TCPsvr","E_TCPnam","E_TCPsoc","E_TCPcon", "E_TCPsnd","E_TCPrcv","E_TCPbnd","E_TCPlsn","E_TCPacc" }; //declare structure and vars. MYSQL mysql; MYSQL_RES *result; MYSQL_ROW row;
12、 if(argc!=1) service=argv[1]; else { //2 fprintf(stderr,"NO service assigned!\nUsage:\n"); fprintf(stderr,"\t%s server_name!\n",argv[0]); fprintf(stderr,"Note: svr_name is defined in file /etc/services\n"); exit(-1); } //2 // sprintf(buf,"t
13、ouch %s",log);system(buf);// touch or create log if((rd_l=open(log,O_WRONLY|O_CREAT|O_APPEND,0644))==-1) { fprintf(stderr,"Log file %s open error!\a\n",log); exit(-1); } close(rd_l); for(i=0;i<100;i++) v[i]=NULL; // initialize MYSQL structure if(mysql_
14、init(&mysql)==NULL) { //2 fprintf(stderr,"Error in mysql_init!\n"); err_code=1; goto end_1; } //2 //connect to DB if(!mysql_real_connect(&mysql,"localhost","root",0,"lyg",0,NULL,0)) { //2 fprintf(stderr,"Error in connection: %s
15、[%d]\n",\ mysql_error(&mysql),mysql_errno(&mysql)); mysql_close(&mysql); err_code=-2; goto end_1; // goto mysql_err; } //2 if((sp=getservbyname(service,"tcp"))==NULL) { //2 fprintf(stderr,"Error: getservbyname"); err_code=6; goto
16、end_1; } //2 if((s=socket(AF_INET,SOCK_STREAM,0))==-1) { //2 fprintf(stderr,"Error: socket create"); err_code=9;goto end_1; } //2 bzero(&sin,sizeof(sin)); sin.sin_port=sp->s_port; if(bind(s,&sin,sizeof(sin))==-1) { //2 fprintf(stderr,"Er
17、ror: bind"); err_code=13;goto end_1; // close(s); exit(-6); } //2 if(listen(s,5)==-1) { //2 fprintf(stderr,"Error: listen"); err_code=14;goto end_1; // close(s); exit(-6); } //2 while(1) { //2 while fprintf(stderr,"\n\t\t\t Now wait con
18、nect ...\n"); if((ns=accept(s,0,0))==-1) { // wait a connection //3 fprintf(stderr,"error: accept"); continue; // err_code=14;goto end_1; }//3 err_code=0; if((pid=fork())==-1) { //conneted, and then create child proc//3 fprintf(stderr,"server: fork
19、error!"); close(s); exit(-1); }//3 if(pid!=0) {//parent proce,nothing to do, and to the next loop//3 close(ns); wait(0); continue; }//3 if(pid==0) { // entered child proccedure //3 pid=0 close(s); printf("Receive a client connect:%s\n",argv[1]
20、); if((rd_l=read(ns,buff,500))==0) { //4 fprintf(stderr,"Read nothing from socket:ns\n"); err_code=12;goto end_1; } //4 printf("%s get message from ns: %s\n",argv[0],buff); buff[rd_l]='\0'; strcpy(tmp,buff); strsplit(buff,v,d); s
21、witch(v[0][0]) { //4 switch case '2': // query(); sprintf(cmd,"SELECT kid,money FROM K WHERE kid='%s' and kpwd ='%s'",v[1],v[2]); //execute query printf("\nCMD=%s\n",cmd); if(mysql_query(&mysql,cmd)!=0) { //5
22、 fprintf(stderr,"Error in query: %s [%d]\n",\ mysql_error(&mysql),mysql_errno(&mysql)); err_code=3;goto end_1; } //5 //get result if((result=mysql_store_result(&mysql))==NULL) { //5 fprintf(stderr,"Error in store_result: %s [%d]\n&quo
23、t;,\ 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(resul
24、t); sprintf(buff,"%d|%s",recs,row[1]); double money; printf("-----%s------",buff); //money=row[1]; /* if(recs==1) write(ns,"1",wr_l); else write(ns,"0",wr_l); flds=mysql_num_fi
25、elds(result); for(i=0;i<recs;i++){ //5 //process result set row=mysql_fetch_row(result); for(j=0;j<flds;j++){ //6 sprintf(cmd,"%s|",row[j]); strcat(buff,cmd); } //6 } //5 */ wr_l=strlen(buff); if((wr_l=write(ns,buff,wr_l))!=wr_l
26、){ //5 fprintf(stderr,"Write socket ns error!\n"); close(ns); exit(-4); } //5 char rebuf[500],rep[500],repp[500]; if((rd_l=read(ns,rebuf,500))==0) { //5 fprintf(stderr,"Read nothing from socket:ns\n"); err_code=12;goto end_
27、1; } //5 mysql_free_result(result); //may cause problem when no result printf("%s 接收信息: %s\n",argv[0],rebuf); strsplit(rebuf,h,d); double share=0; for(i=1;i<3;i=i+2) { // if(compare(h[i],""))
28、 // break; sprintf(cmd,"SELECT sid,num,price FROM S WHERE sid='%s'",h[i]); printf("\nCMD=%s\n",cmd); if(mysql_query(&mysql,cmd)!=0) { //5 fprintf(stderr,"Error in query: %s [%d]\n",\ mysql_error(&mysql),mysql_errno
29、(&mysql)); err_code=3;goto end_1; } //5 //get result if((result=mysql_store_result(&mysql))==NULL) { //5 fprintf(stderr,"Error in store_result: %s [%d]\n",\ mysql_error(&mysql),mysql_errno(&mysql)); mysql_free_result(resu
30、lt); err_code=4;goto end_1; } //5 if(err_code!=0) goto end_1; recs=mysql_num_rows(result); row=mysql_fetch_row(result); printf("_______%s________%d___%d___",row[0],swit2(row[1]),swit1(row[2]));
31、 printf("TTTTTTTTTTTTTT%sTTTTTTTTT%sTT",h[i],h[i+1]); if(swit2(row[1])>=swit2(h[i+1]))//??????????????????????????????? { sprintf(repp,"%s|%s|%s|",h[i],"1",h[i+1]); printf("%s商品數(shù)量足夠!&q
32、uot;,h[i]); strcat(rep,repp); //double ttt=swit2(h[i+1]) * row[2]; // ttt*=row[2]; // share+=ttt; } else { sprintf(repp,&qu
33、ot;%s|%s|%s|",h[i],"0",row[1]); printf("%s商品數(shù)量不足!",h[i]); strcat(rep,repp); } } /* if(share<=money) { sprintf(repp,"%d",share); printf("%s卡上金額為:%d,所需金額為:%d!金額足夠!",v[1],money,share); strcat(rep,repp);
34、 double tt=money-share; sprintf(cmd,"update K set money='%d' where kid='%s';'",tt,v[1]); printf("\nCMD=%s\n",cmd); if(mysql_query(&mysql,cmd)!=0) { fprintf(stderr,"Error in query: %s [%d]\n",\ mysql_er
35、ror(&mysql),mysql_errno(&mysql)); err_code=3;goto end_1; } printf("數(shù)據(jù)庫(kù)更新成功!\n"); } else { sprintf(repp,"%d",money); printf("%s卡上金額為:%d,所需金額為:%d!金額不足!",v[1],money,share); strcat(rep,repp); } */ printf(
36、"++++++++%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 result mysql_close(&mysql); //may
37、 cause problem when no &mysql break; case '3': // trans(); nothing(buff); break; default: fprintf(stderr,"Func. code error in:\n%s",buff); } //4 switch //寫(xiě)日志 strncat(tmp,buff,wr_l);wr_l+=rd_l; tmp[wr_l]='\0'; s
38、trcat(tmp,"\n");++wr_l; printf("\nTMP(%d:%d)=%s\n",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 wr
39、ite error!\n",log); close(flds);exit(-6); } close(flds); close(ns); exit(0); } //3 } //2 while } //1 main void strsplit(char *s,char **v,char d) { int i,j,l; j=0;v[j]=s; l=strlen(s); for(i=0;i<l;i++){ if(*(s+i)!='|') continue; else
40、{ *(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;s[t]!='.';t++) { int i=s[t]-48; sum+=i*pow(10,strlen(s)-1-t); } sum/=pow(10,strlen(s)-t
41、); t++; d=strlen(s)-t; for(t;t<strlen(s);t++) { int i=s[t]-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;t<strlen(s);t++) { int i=s[t]-48; sum+=i*po
42、w(10,strlen(s)-1-t); } return sum; } 客戶(hù)端程序代碼:#include <stdio.h> #include <error.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <mysql/mysql
43、.h> #include <string.h> #define rec_length 500 char str[512]; main(int argc, char **argv ) { char *d="|"; char *v[100]; int sql=0,rslt=0; // structure defined for request as a client struct hostent *hp1; struct sockaddr_in sin1; struct servent *sp1; char sbuf
44、[1000],*log="mid.log"; int ss,spid,rd_l,wr_l,rd1l; char *sservice,*sdest; // structure defined for request as a server struct sockaddr_in sin; struct servent *sp; int s,ns,pid,err_code,recs,flds; char buf[500],tmp[1000],cmd[500]; char *service; int i,j,c; char *sat[]={
45、 "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
46、","E_TCPacc" }; //declare structure and vars for MySQL MYSQL mysql; MYSQL_RES *result; MYSQL_ROW row; // test the environment parameter: lservice, dservice, server_name if(argc==4) { service=argv[1];sservice=argv[2]; sdest=argv[3]; } else { fprintf(std
47、err,"Parameter assigned Error!\nUsage:\n"); fprintf(stderr,"\t%s lservice dservice server_name!\n",argv[0]); fprintf(stderr,"Note: server_name is defined in file /etc/hosts\n"); fprintf(stderr,"and: lservice dservice are defined in file /etc/services\n&quo
48、t;); exit(-1); } // sprintf(buf,"touch %s",log);system(buf);// touch or create log if((rd1l=open(log,O_WRONLY|O_CREAT|O_APPEND,0644))==-1) { fprintf(stderr,"Log file %s open error!\a\n",log); exit(-1); } close(rd1l); err_code=0; if((sp=getservbyname(servi
49、ce,"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_por
50、t=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 stru
51、cture if(mysql_init(&mysql)==NULL) { strcpy(tmp,"Error in mysql_init!"); fprintf(stderr,"%s\n",tmp); err_code=1; goto end_1; } sql=1; //connect to DataBase if(!mysql_real_connect(&mysql,"localhost","root",0,"lyg",0,NULL,0
52、)) { sprintf(tmp,"數(shù)據(jù)庫(kù)連接錯(cuò)誤: %s [%d]",\ mysql_error(&mysql),mysql_errno(&mysql)); fprintf(stderr,"%s\n",tmp); err_code=-2; goto end_1; } while(1) { fprintf(stderr,"\n\t\t\t Now wait connect ...\n"); if((ns=accept(s,0,0))==-1)
53、{ // wait a connection */ fprintf(stderr,"error: accept"); continue; } if((pid=fork())==-1) { // conneted, and then create child proc fprintf(stderr,"server: fork error!"); close(s); exit(-1); } if(pid!=0) { //parent proce, nothing to do, and to the
54、next loop close(ns);wait(0);continue; } if(pid==0) { // entered child proccedure close(s); printf("Receive a client connect:%s\n",argv[1]); sprintf(cmd,"SELECT * FROM S;"); // 構(gòu)造命令 if(mysql_query(&mysql,cmd)!=0) { //execute query fprintf
55、(stderr,"Error in query: %s [%d]\n",\ mysql_error(&mysql),mysql_errno(&mysql)); err_code=3;goto end_1; } if((result=mysql_store_result(&mysql))==NULL) { //get result fprintf(stderr,"Error in store_result: %s [%d]\n",\ mysql_error(&
56、;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); // 獲得行數(shù) flds=mysql_num_fields(result); // 獲得域數(shù) fprintf(stderr,"records=%d & fields=%d\n"
57、;,recs,flds); for(i=0;i<recs;i++) { // 處理結(jié)果集的每一行 row=mysql_fetch_row(result); for(j=0;j<flds;j++) { // 處理行中的每個(gè)域,并構(gòu)造返回串 sprintf(cmd,"%s|",row[j]); strcat(buf,cmd); } // fprintf(stderr,"%s\n",buf); // 顯示返回信息 } wr_l=strlen(b
58、uf); 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 buff[500]; if((rd_l=read(ns,buff,rec_leng
59、th))==0) { fprintf(stderr,"Read nothing from socket:ns\n"); err_code=12; close(ns); exit(err_code); } wr_l=rd_l; buff[rd_l]='\0'; // strcpy(sbuf,buf); fprintf(stderr,"%s get message from ns: %s\n",argv[0],buff); //buff[rd_l]='\0
60、'; strcpy(tmp,buff); strsplit(buff,v,d); // 拆分請(qǐng)求信息 // printf("%c",v[0][0]); switch(v[0][0]) { // 分析請(qǐng)求功能,并執(zhí)行相關(guān)工作。這里只實(shí)現(xiàn)了查詢(xún)功能. 其它功能由自己模仿查詢(xún)功能來(lái)實(shí)現(xiàn) case '1': // query(); sprintf(cmd,"SELECT * FROM S WHERE sname like '%%%s%';",v[1]); // 構(gòu)造
61、命令 if(mysql_query(&mysql,cmd)!=0) { //execute query fprintf(stderr,"Error in query: %s [%d]\n",\ mysql_error(&mysql),mysql_errno(&mysql)); err_code=3;goto end_1; } if((result=mysql_store_result(&mysql))==NULL) { //get result
62、 fprintf(stderr,"Error in store_result: %s [%d]\n",\ 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); // 獲得行數(shù) fl
63、ds=mysql_num_fields(result); // 獲得域數(shù) fprintf(stderr,"records=%d & fields=%d\n",recs,flds); for(i=0;i<recs;i++) { // 處理結(jié)果集的每一行 row=mysql_fetch_row(result); for(j=0;j<flds;j++) { // 處理行中的每個(gè)域,并構(gòu)造返 sprintf(cmd,"%s|",row[j]); st
64、rcat(buf,cmd); } fprintf(stderr,"%s\n",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 { st
65、rncat(tmp,buf,wr_l); wr_l+=rd_l; } if(rslt!=0) mysql_free_result(result); // 釋放結(jié)果集 if(sql!=0) mysql_close(&mysql); // 釋放MYSQL對(duì)象 close(ns); // 關(guān)閉網(wǎng)絡(luò)鏈接 // 以下為寫(xiě)日志部分 strcat(tmp,"\n"); ++wr_l; if((flds=open(log,O_WRONLY|O_APPEND))==-1) { //
66、 打開(kāi)日志文件 fprintf(stderr,"File %s open error!\n",log); exit(-5); } if(write(flds,tmp,strlen(tmp))!=strlen(tmp)) { // 寫(xiě)日志 fprintf(stderr,"File %s write error!\n",log); close(flds);exit(-6); } close(flds); break; case '2
67、39;: printf("Receive a client connect:%s\n",argv[1]); fprintf(stderr,"%s get message from ns: %s\n",argv[0],buff); //訪問(wèn)服務(wù)器端 if((sp1=getservbyname(sservice,"tcp"))==NULL) { fprintf(stderr,"Error: getservbyname s1"); er
68、r_code=6;goto log; } if((hp1=gethostbyname(sdest))==0) { fprintf(stderr,"Error: gethostbyname s1"); err_code=7;goto log; } bzero(&sin1,sizeof(sin1)); bcopy(hp1->h_addr,&sin1.sin_addr,hp1->h_length); sin1.sin_family=hp1->h_addr
69、type; sin1.sin_port=sp1->s_port; if((ss=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Error: socket s1"); err_code=8;goto log; } if(connect(ss,&sin1,sizeof(sin1))==-1) { fprintf(stderr,"Error: connect s1"); clos
70、e(ss); err_code=9;goto log; } printf("%s",buff); if(write(ss,buff,rd_l)!=rd_l) { //to server fprintf(stderr,"Write Socket ss ERROR! s1\n"); close(ss); err_code=10;goto log; } char rep[20]; i
71、f((rd1l=read(ss,rep,20))==0) { //from server fprintf(stderr,"Read Socket ss Error! s1\n"); close(ss); err_code=11;goto log; } rep[rd1l]='\0'; printf("%s get reply: %s\n",argv[0],rep); // close(ss);
72、 //fprintf(stderr,"and,send it back to client: %s\n",sbuf); printf("rep:%s",rep); if((rd1l=write(ns,rep,20))!=rd1l) { fprintf(stderr,"Write socket ns error llll!\n"); close(ns); err_code=10;goto log;
73、 } // close(ns); char repp[500]; if((rd1l=read(ns,repp,500))==0) { //from server fprintf(stderr,"jieshouzhangdan error\n"); close(ns); err_code=11;goto log; } repp[rd1l]='\0'; printf("%s 接收信息: %s\n",argv[0],repp); // close(ns); if((rd1l=write(ss,repp,200))!=rd1l) { fprintf(stderr,"Write socket ss>>>>>> error!\n"); close(ss); err_code=10;goto log; } //close(ss);
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識(shí)競(jìng)賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫(kù)試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫(kù)試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫(kù)試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識(shí)測(cè)試題庫(kù)及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測(cè)工種技術(shù)比武題庫(kù)含解析
- 1 礦山應(yīng)急救援安全知識(shí)競(jìng)賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案