#include"common.h"
#define PORT atoi(argv[2])
#define IP argv[1]
sqlite3* db;
char gettime[128]={0};
void handler(int sig)
{
while(waitpid(-1, NULL, WNOHANG) > 0);
}
int rcv_cli_msg(int newfd, struct sockaddr_in cli);
char* get_time()
{
time_t t;
time(&t);
struct tm *info = localtime(&t);
if(NULL == info)
{
ERR_MSG("localtime");
return NULL;
}
sprintf(gettime,"%d-%02d-%02d %02d:%02d:%02d", \
info->tm_year+1900, info->tm_mon+1, info->tm_mday,\
info->tm_hour, info->tm_min, info->tm_sec);
return gettime;
}
int func_login(int fd,MSG* msg) //登录函数 返回0成功,-1失败
{
char sql[DATALEN] = {0};
char *errmsg;
char **result;
int nrow,ncolumn;
msg->info.power = msg->power;
msg->info.no=msg->no;
strcpy(msg->info.passwd,msg->passwd);
printf("usrtype: %#x-----no: %d---passwd: %s\n",msg->info.power,msg->info.no,msg->info.passwd);
sprintf(sql,"select * from staff where power=%d and no='%d' and passwd='%s';",msg->info.power,msg->info.no,msg->info.passwd);
if(sqlite3_get_table(db,sql,&result,&nrow,&ncolumn,&errmsg) != SQLITE_OK)
{
printf("---****----%s.\n",errmsg);
}else
{
if(nrow == 0)
{
strcpy(msg->recvmsg,"name or passwd failed.\n");
}else
{
strcpy(msg->recvmsg,"OK");
}
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return -1;
}
}
return 0;
}
void func_user_modify(int fd,MSG *msg)// 用户修改
{
char sql[512]={0};
char *errmsg = NULL;
sprintf(sql,"update staff set passwd='%s',age=%d,phone='%s' where no=%d",msg->info.passwd,msg->info.age,msg->info.phone,msg->no);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
return;
}
else
{
strcpy(msg->recvmsg,"修改完成");
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
printf("修改完成\n");
bzero(sql,sizeof(sql));
char order[128]={0};
sprintf(order,"工号:%d 的员工修改了自己的信息",msg->no);
sprintf(sql,"insert into history values('%s','%s')",get_time(),order);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
return;
}
void func_user_search(int fd,MSG*msg)// 用户查询
{
char sql[512]={0};
char *errmsg = NULL;
sprintf(sql,"select * from staff where no=%d",msg->info.no);
char** pres;
int row, column;
if(sqlite3_get_table(db, sql, &pres, &row, &column, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_get_table: %s\n", __LINE__, errmsg);
return ;
}
msg->flags=row;
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
int i=0;
int j = 0;
int k = 0;
for(i=0; i<row+1; i++)
{
for(j=0; j<column; j++)
{
strcpy(msg->recvmsg,pres[k++]);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
}
sqlite3_free_table(pres);
}
void func_admin_modify(int fd,MSG* msg)// 管理员修改
{
char sql[512]={0};
char *errmsg = NULL;
sprintf(sql,"update staff set name='%s',passwd='%s',age=%d,phone='%s',work='%s' where no=%d",msg->info.name,msg->info.passwd,msg->info.age,msg->info.phone,msg->info.work,msg->info.no);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
return;
}
else
{
strcpy(msg->recvmsg,"修改完成");
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
printf("修改完成\n");
bzero(sql,sizeof(sql));
char order[128]={0};
sprintf(order,"工号:%d 的员工修改了工号:%d 的信息",msg->no,msg->info.no);
sprintf(sql,"insert into history values('%s','%s')",get_time(),order);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
return;
}
void func_admin_add(int fd,MSG*msg)// 管理员添加人员
{
char sql[512]={0};
char *errmsg = NULL;
sprintf(sql,"insert into staff values(%d,%d,'%s','%s',%d,'%s','%s','%s','%s',%f)",msg->info.no,msg->info.power,msg->info.name,msg->info.passwd,msg->info.age,msg->info.phone,msg->info.addr,msg->info.work,msg->info.date,msg->info.salary);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
return;
}
else
{
strcpy(msg->recvmsg,"添加完成");
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
bzero(sql,sizeof(sql));
char order[128]={0};
sprintf(order,"工号:%d 的员工添加了工号:%d 的信息",msg->no,msg->info.no);
sprintf(sql,"insert into history values('%s','%s')",get_time(),order);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
return;
}
void func_admin_del(int fd,MSG* msg)// 管理员删除人员
{
char sql[512]={0};
char *errmsg = NULL;
sprintf(sql,"delete from staff where no=%d",msg->info.no);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
return;
}
else
{
strcpy(msg->recvmsg,"删除完成");
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
printf("删除完成\n");
bzero(sql,sizeof(sql));
char order[128]={0};
sprintf(order,"工号:%d 的员工删除了工号:%d 的信息",msg->no,msg->info.no);
sprintf(sql,"insert into history values('%s','%s')",get_time(),order);
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec: %s\n", __LINE__, errmsg);
strcpy(msg->recvmsg,errmsg);
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
}
return;
}
void func_admin_search(int fd,MSG* msg)//管理员查询
{
char sql[512]={0};
char *errmsg = NULL;
if(msg->info.no==0)
{
sprintf(sql,"select * from staff");
}
else{
sprintf(sql,"select * from staff where no=%d",msg->info.no);
}
char** pres;
int row, column;
if(sqlite3_get_table(db, sql, &pres, &row, &column, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_get_table: %s\n", __LINE__, errmsg);
return ;
}
msg->flags=row;
if(send(fd,msg,sizeof(MSG),0)<0)
{
ERR_MSG("send");
return ;
}
int i=0;
int j = 0;