#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<event.h>
#include<signal.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<mysql/mysql.h>
#define MAXFD 100
struct event* fd_event[MAXFD];//存描述副和指针的对应关系
MYSQL mysql;
typedef struct Data
{
char *value;//存放字符串
}Data;
typedef struct Seqlist
{
Data *str;
int cutsize;//当前长度,以及存放逗号个数
int maxsize;//最大容量
}*PSeqlist,Seqlist;
PSeqlist Init_list()
{
PSeqlist L;
L = (PSeqlist )(malloc (sizeof(PSeqlist)));
L->str = (Data*)(malloc(sizeof(Data)*10));
L->str->value = (char*)(malloc(sizeof(char)*20));
L->cutsize = 1;
L->maxsize = 10;
return L;
}
int IsFull(PSeqlist L)
{
return L->cutsize > L->maxsize;
}
void Extend(PSeqlist L) //扩容
{
L->str = (Data*)realloc(L->str,sizeof(Data)*L->cutsize);
L->maxsize = L->cutsize;
}
PSeqlist function(char *buff)//字符串切割
{
PSeqlist L;
L=Init_list();
int i =0;
for( ;i<strlen(buff);i++)
{
if(buff[i]==',')
L->cutsize++;
}
if(IsFull(L))
{
Extend(L);
}
char *ptr;
ptr = strtok(buff,",");
i = 0;
while(ptr != NULL)
{
L->str[i].value = ptr;
i++;
ptr = strtok(NULL,",");
}
return L;
}
int create_socket();
void User_register(int sockfd,PSeqlist L);//注册
void User_Login(int sockfd,PSeqlist L);//用户登录
void Car_Add(int sockfd,PSeqlist L);//车牌增加
void Car_Delete(int sockfd,PSeqlist L);//车牌删除
void Car_Change(int sockfd,PSeqlist L);//车牌修改
void Car_Search_num(int sockfd,PSeqlist L);//车牌号查询
void User_Delete(int sockfd,PSeqlist L);//用户删除
void User_Search_id(int sockfd,PSeqlist L);//用户id查询
void User_Search_num(int sockfd,PSeqlist L);//用户电话查询
void User_Change_num(int sockfd,PSeqlist L);//用户电话修改
void User_Mail_change(int sockfd,PSeqlist L);//用户邮箱修改
void User_Password_change(int sockfd,PSeqlist L);//用户密码
void recv_cb(int fd,short event,void *arg);
void listen_cb(int fd,short event,void *arg);
void Admistrator_Register(int sockfd,PSeqlist L);//管理员注册
void Admistrator_Delete(int sockfd,PSeqlist L);//管理员注销
void Admistrator_Login(int sockfd,PSeqlist L);//管理员登录
void Adminstrator_Password_Update(int sockfd,PSeqlist);//修改管理员密码
void Parking_Add(int sockfd,PSeqlist L);//增加停车场
void Parking_Delete(int sockfd,PSeqlist L);//删除停车场
void Parking_Update(int sockfd,PSeqlist L);//更新停车场信息
void Parking_Select_Id(int sockfd,PSeqlist L);//根据id查询停车场信息
void Resolve(int sockfd,PSeqlist L);//解析函数
void User_Parking_in(int sockfd,PSeqlist L);//用户端查询停车场所有信息
void User_Parking_m(int sockfd,PSeqlist L);//用户端根据车牌号查询自己的停车金额
void User_Parking_t(int sockfd,PSeqlist L);//用户端根据车牌号查询自己的停车时间
void User_Parking_Tinit(int sockfd,PSeqlist L);//用户停车时的初始化时间
void U_Capacity_add(int sockfd,PSeqlist L);//出车
void Parking_Capacity_Update(int sockfd,PSeqlist L);//修改停车场容量
void Select_User_Carid(int sockfd,PSeqlist L);
void Resolve(int sockfd,PSeqlist L)
{
// PSeqlist L;
// L=Init_list(); //初始化顺序表
// L = function(buff);//切割字符串存在顺序表中 其中L->str[0].value为函数符号
if(!strcmp(L->str[0].value,"UL"))
User_Login(sockfd,L);//用户登录
if(!strcmp(L->str[0].value,"UR"))
User_register(sockfd,L);//用户注册
if(!strcmp(L->str[0].value,"CA"))
Car_Add(sockfd,L);//车辆增加
if(!strcmp(L->str[0].value,"CD"))
Car_Delete(sockfd,L);//车辆注销
if(!strcmp(L->str[0].value,"CS"))
Car_Search_num(sockfd,L);//车辆车牌号查询
if(!strcmp(L->str[0].value,"CU"))
Car_Change(sockfd,L);//车辆修改
if(!strcmp(L->str[0].value,"UD"))
User_Delete(sockfd,L);//用户删除
if(!strcmp(L->str[0].value,"USi"))
User_Search_id(sockfd,L);//用户id查询
if(!strcmp(L->str[0].value,"USn"))
User_Search_num(sockfd,L);//用户电话查询
if(!strcmp(L->str[0].value,"UCn"))
User_Change_num(sockfd,L);//用户电话修改
if(!strcmp(L->str[0].value,"MN"))
User_Mail_change(sockfd,L);//用户邮箱修改
if(!strcmp(L->str[0].value,"UPc"))
User_Password_change(sockfd,L);//用户密码修改
if(!strcmp(L->str[0].value,"AL"))
Admistrator_Login(sockfd,L);//管理员登录
if(!strcmp(L->str[0].value,"AR"))
Admistrator_Register(sockfd,L);//管理员注册
if(!strcmp(L->str[0].value,"APC"))
Adminstrator_Password_Update(sockfd,L);//管理员密码修改
if(!strcmp(L->str[0].value,"CID"))
Select_User_Carid(sockfd,L);
if(!strcmp(L->str[0].value,"PI"))
Parking_Add(sockfd,L); //增加停车场
if(!strcmp(L->str[0].value,"PD"))
Parking_Delete(sockfd,L); // 删除停车场
if(!strcmp(L->str[0].value,"PU"))
Parking_Update(sockfd,L); // 更新停车场
if(!strcmp(L->str[0].value,"PS"))
Parking_Select_Id(sockfd,L); //根据Id查询停车场的信息*/
if(!strcmp(L->str[0].value,"UPi"))
User_Parking_in(sockfd,L);//用户端查询停车场所有信息,格式为P_name(第一行),P_capacity(第一行),P_site(第一行),P_charge(第一行),P_tel(第一行),P_name(第二行),P_capacity(第二行).....
if(!strcmp(L->str[0].value,"UPm"))
User_Parking_m(sockfd,L);//用户端根据车牌号查询自己的停车金额
if(!strcmp(L->str[0].value,"UPt"))
User_Parking_t(sockfd,L);//用户端根据车牌号查询自己的停车时间
if(!strcmp(L->str[0].value,"UPT"))
User_Parking_Tinit(sockfd,L);//用户停车时的初始化时间 需要客户端传递1.usrname 2.P_name 以及停车
if(!strcmp(L->str[0].value,"UCa"))
U_Capacity_add(sockfd,L);//出车并且删除P_parking表中的记录 需要客户端传递1.usrname
if(L->str[0].value==NULL)
exit(0);
}
int create_socket()
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if ( sockfd == -1 )
{
return -1;
}
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;
saddr.sin_port = htons(6500);
saddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
if ( res == -1 )
{
return -1;
}
listen(sockfd,5);
return sockfd;
}
void fd_event_init()
{
int i = 0;
for( ;i < MAXFD; i++ )
{
fd_event[i] = NULL;
}
}
void fd_event_add(int fd, struct event* ev)
{
if ( fd >= 100 )
{
return;
}
fd_event[fd] = ev;
}
struct event* fd_event_find( int fd)
{
if ( fd >= 100 )
{
return NULL;
}
return fd_event[fd];
}
void recv_cb(int fd,short event,void *arg)
{
PSeqlist L;
L=Init_list();
if (event & EV_READ)
{
char buff[200] = {0};
int num = recv(fd,buff,127,0);
printf("%s\n",buff);
L = function(buff);
if(num == 0)
{
struct event *s = fd_event_find(fd);
event_del(s);
close(fd);
return;
}
}
Resolve(fd,L);
}
void listen_cb(int fd,short event,void *arg)
{
struct event_base *base = (struct event_base*)arg;
struct sockaddr_in caddr;
int len = sizeof(caddr);//
int c = accept(fd,(struct sockaddr*)&caddr,&len);
if(c<0)
{
perror("accept error");
return ;
}
printf("客户端描述符为 %d 的用户已连接服务器\n",c);
struct event *c_ev = event_new(base,c,EV_READ|EV_PERSIST,recv_cb,NULL);
assert(c_ev != NULL);
event_add(c_ev,NULL);
fd_event_add(c,c_ev);
}
void User_register(int sockfd,PSeqlist L)//注册 +
{
//printf("IM User_register\n");
char sql_insert[200]={0};//保存插入语句
sprintf(sql_insert,"insert into person values('%s','%s','%s','%s','%s');",L->str[1].value,L->str[
毕业小助手
- 粉丝: 2767
- 资源: 5583
最新资源
- 基于java+ssm+mysql的咖啡在线销售系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的老年公寓信息管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的旅游网页系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的马病管理系统 源码+数据库+论文(高分毕设项目).zip
- Python游戏源码-05贪吃蛇版本2
- Python开源扫雷游戏
- 基于java+ssm+mysql的企业员工管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的人事档案管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的社区管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于COMSOL电磁轨道炮的三维模型分析与模拟,comsol电磁轨道炮模型 三维 ,核心关键词:comsol电磁轨道炮模型; 三维; 电磁轨道炮; 建模; 仿真
- Python游戏源码-06贪吃蛇游戏项目源码
- 基于java+ssm+mysql的数据库系统原理课程平台 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的实验室排课系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的手机官网 源码+数据库+论文(高分毕设项目).zip
- LicenseTool黑锁工具
- 基于java+ssm+mysql的停车管理系统 源码+数据库+论文(高分毕设项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈