#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <winsock.h>
#include "mysql.h"
#include <process.h>
#define STKSIZE 16536
#define QLEN 5
#define STKSIZE 16536
#define BUFSIZE 1024
#define WSVERS MAKEWORD(2, 0)
MYSQL connection;
char *service = "2009";
//char buf[1024];
char id[6];
struct sockaddr_in fsin;
int alen;
float balance;
void errexit(const char *, ...);
SOCKET passiveTCP(const char *, int);
//************************************************connect*****************************
int connect(MYSQL * connection)
{
char username[15]="root";
char passwd[15]="528271";
char db_adress[15]="127.0.0.1";
printf("\n服务器端正在启动数据库,请稍候");
for(int i=0;i<4;i++)
{
Sleep(800);
printf(" .");
}
printf("\n");
if(mysql_real_connect(connection,db_adress,username,passwd,"student",0,NULL,0))
{
printf("\n数据库连接成功 !\n\n");
Sleep(1000);
system("cls");
return 1;
}
else
{
printf("\n连接数据库发生错误!\n");
if(mysql_errno(connection))
fprintf(stderr,"\n错误号:%d \n错误原因:%s\n",mysql_errno(connection),mysql_error(connection));
return 0;
}
}
//************************************************connect end*************************
//------------------------------------------------select -----------------------------
float chartofloat(char buf[])
{
float sum=0;
int l,i=0,j=0;
l=strlen(buf);
while(buf[j]!='.'&&j<l) j++;
if(j==l)
while(i<j)
{
sum=sum+(buf[i]-'0')*pow(10.0,j-i-1);
i++;
}
else
{
while(i<j)
{
sum=sum+(buf[i]-'0')*pow(10.0,j-i-1);
i++;
}
i=i+1;
while(i<l)
{
sum=sum+(buf[i]-'0')*pow(10.0,j-i);
i++;
}
}
// printf("now the float sum is %4.2f\n",sum);
return sum;
}
void display_row(MYSQL connection,MYSQL_ROW sqlrow,SOCKET ssock)
{
unsigned int m=0;
char sendbuf[1024];
int i=0;
float balance;
memset(sendbuf,0,sizeof(sendbuf));
while(m<mysql_field_count(&connection))
{
// printf("---->%-6s",sqlrow[m]);
memcpy(sendbuf,sqlrow[m],sizeof(sqlrow[m]));
// printf(" -->sendbuf now is %s。buflen is %d\n",sendbuf,strlen(sendbuf));
balance=chartofloat(sendbuf);
// printf("the select balance is %4.2f\n",balance);
send(ssock,sendbuf,strlen(sendbuf),0);
m++;
}
// printf("\n\n");
}
void select(MYSQL connection,SOCKET ssock,char buf[])
{
MYSQL_RES *res_ptr;
MYSQL_ROW sqlrow;
int res;
char stu_id[9];
char sql_sentence[100];
memset(stu_id,0,sizeof(stu_id));
memcpy(stu_id,&buf[1],strlen(&buf[1])); //将卡号拷到buf中
sprintf(sql_sentence,"SELECT bal FROM con_sys WHERE id='%s'",stu_id);
res=mysql_query(&connection,sql_sentence);
if(!res)
{
res_ptr=mysql_use_result(&connection);
if(res_ptr)
{
// printf("\n查询结果如下:\n");
while(sqlrow=mysql_fetch_row(res_ptr))
{
display_row(connection,sqlrow,ssock);
}
}
}
else
fprintf(stderr,"Query error! option:\n %d:%s\n",mysql_errno(&connection),mysql_error(&connection));
mysql_free_result(res_ptr);
}
//------------------------------------------------select end--------------------------
//************************************************modify*******************************
int modify(MYSQL connection,SOCKET ssock,char buf[])
{
int i,j=0;
char id[9];
char id_buf[9];
char price_buf[9];
float price;
char sql_sentence[100];
int res;
// printf("this is modify function!\n");
memset(id,0,sizeof(id));
memset(price_buf,0,sizeof(price_buf));
for(i=1;i<7;i++)
id[i-1]=buf[i];
while(buf[i]!='\0')
{
price_buf[j]=buf[i];
j++;
i++;
}
price=chartofloat(price_buf);
// printf("the consumption's id is:%s\n",id);
// printf("server get the price is:%4.2f\n",price);
if(buf[0]!='^')
sprintf(sql_sentence,"UPDATE con_sys SET bal=bal-%f WHERE id='%s'",price,id);
else
sprintf(sql_sentence,"UPDATE con_sys SET bal=%f WHERE id='%s'",price,id);
res=mysql_query(&connection,sql_sentence);
if(!res)
{
memset(id_buf,0,sizeof(id_buf));
id_buf[0]='*';
memcpy(&id_buf[1],id,strlen(id));
// printf("reflash id_buf is %s\n",id_buf);
select(connection,ssock,id_buf);
printf("\n消费成功!\n");
return 1;
}
else
{
fprintf(stderr,"insert error %d : %s\n",mysql_errno(&connection),mysql_error(&connection));
return 0;
}
}
void sys_operate(SOCKET sssock)
{
// printf("sys_operate is working...\n");
char recvbuf[1024];
memset(recvbuf,0,sizeof(recvbuf));
recv(sssock,recvbuf,sizeof(recvbuf),0);
// printf("the recvbuf is %s\n",recvbuf);
select(connection,sssock,recvbuf);
memset(recvbuf,0,sizeof(recvbuf));
recv(sssock,recvbuf,sizeof(recvbuf),0);
modify(connection,sssock,recvbuf);
(void) closesocket(sssock);
}
void main()
{
SOCKET msock,sssock;
WSADATA wsadata;
if (WSAStartup(WSVERS, &wsadata) != 0)
errexit("WSAStartup failed\n");
mysql_init(&connection);
connect(&connection);
msock = passiveTCP(service, QLEN);
while(1)
{
alen = sizeof(fsin);
sssock = accept(msock, (struct sockaddr *)&fsin, &alen);
if (sssock == INVALID_SOCKET)
errexit("accept: error number\n", GetLastError());
if(_beginthread((void (*)(void *))sys_operate,STKSIZE,(void *)sssock)<0) printf("BF failed!\n");
}
}
- 1
- 2
- 3
前往页