员工管理系统

#include   "1.h"


int main(int argc, const char *argv[])
{
		//捕获17号信号 SIGCHLD
	sighandler_t s = signal(17, handler);
	if(SIG_ERR == s)
	{
		ERR_MSG("signal");
		return -1;
	}
    word_exist();//初始化
	int sfd = tcp_lianjie();
    	int newfd = 0;
	pid_t pid = 0;
	struct sockaddr_in cin;
	socklen_t addrlen = sizeof(cin);
	while(1)
	{
		//父进程只负责连接
		newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
		if(newfd < 0)
		{
			ERR_MSG("accept");
			return -1;
		}
 
		printf("[%s : %d] newfd = %d 连接成功\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port),newfd);
 
		//创建子进程
		pid = fork();
		if(pid > 0)
		{
			close(newfd);
		}
		else if(0 == pid)
		{
			close(sfd);
		 rcv_cli_msg(newfd,cin);
			close(newfd);
			exit(0);
		}
		else
		{
			ERR_MSG("fork");
			return -1;
		}
	}
	close(sfd);
	return 0;
}

服务器

.c文件

#include "1.h"



int tcp_lianjie(void)
{
	int sfd = socket(AF_INET,SOCK_STREAM,0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}

	int reuse = 1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse ,sizeof(reuse)) < 0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}
	printf("允许端口快速重用\n");


	struct sockaddr_in sin;
	sin.sin_family = AF_INET;
	sin.sin_port = htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);


	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
	{
		ERR_MSG("bind");
		return -1;
	}

	if(listen(sfd,128)<0)
	{
		ERR_MSG("listen");
		return -1;
	}
	return sfd; 


}
void handler(int sig)
{
	//回收僵尸进程
	while(waitpid(-1, NULL, WNOHANG) > 0);
}
//接收客户端信息
int rcv_cli_msg(int newfd, struct sockaddr_in cin)
{
	//打开存储用户信息的数据库
	sqlite3* db_user = NULL;
	if(sqlite3_open("./my.db",&db_user) != SQLITE_OK)
	{
		printf("errmsg:%s\n",sqlite3_errmsg(db_user));
		fprintf(stderr,"__%d__ sqlite3_open failed\n",__LINE__);
		return -1;
	}
	struct message buf;
	ssize_t res = 0;
	char name[50] = "";
	while(1)
	{
		memset(&buf,0, sizeof(buf));
		//循环接收
		res = recv(newfd, &buf, sizeof(buf), 0);
		printf("%c\n",buf.head);
		if(res < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		else if(0 == res)
		{
			sqlite3_close(db_user);
			return 0;
		}
		switch (buf.head)
		{
		case 'Z':
			//普通用户登录

			break;
		case 'D':
			//管理用户登录
			//printf("%s\n",buf.password);
			user_in(newfd,cin,buf.name,db_user,buf.password);
			strcpy(name,buf.msg);
			break;
		case 'C':
			//查询用hu
			search(newfd,cin,buf,db_user);
			break;
		case 'H':
			xiugai(newfd,cin,buf,db_user);
			break;
		case 'Q':
			tianjia(newfd,cin,buf,db_user);
			break;
		case 'I':
			shanchu(newfd,cin,buf,db_user);
			break;
		case 'K':
			jilu(newfd,cin,buf,db_user);
			break;
		case 'P':
			ptyh(newfd,cin,buf.name,db_user,buf.password);
			break;
		case 'T':
			ptjilu(newfd,cin,buf,db_user);
			break;
		default:
			printf("buf.head = %c \t客户端错误\n",buf.head);
		}
	}
	return 0;

}

void word_exist()
{
	//创建用户数据库
	if(access("./my.db",F_OK) == 0)//数据库已经存在
	{
		return;
	}
	//打开数据库
	printf("正在创建用户数据库\n");

	sqlite3* db_user = NULL;
	if(sqlite3_open("./my.db", &db_user) != SQLITE_OK)
	{
		printf("errmsg:%s\n", sqlite3_errmsg(db_user));
		fprintf(stderr, "__%d__ sqlite3_open failed\n", __LINE__);
		exit(0);
	}
	//创建一个用户表格
	char* sql = "create table if not exists yhb(id char primary key,name char,pwd char,gongzi char);" ;
	char* errmsg = NULL;

	if(sqlite3_exec(db_user, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		exit(0);
	}

	//创建一个用户表格
	char* sql1 = "create table if not exists jlb (id char,name char,shijian char);";
	char* errmsg1 = NULL;
	if(sqlite3_exec(db_user, sql1, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		exit(0);
	}

	//关闭数据库
	sqlite3_close(db_user);

	printf("用户数据库创建成功\n");
	return;
}
int user_in(int newfd,struct sockaddr_in cin,char *name,sqlite3* db_user,char* password)
{

	// printf("%d\n",buf.password);
	struct message buf;
	printf("%s\n",buf.password);
	printf("用户请求登录\n");
	buf.head = 'D';
	strcpy(buf.msg,"登录成功\n");

	//查询用户名密码是否正确
	if(do_select(db_user,"yhb",name,password) == -1)
	{
		//用户名错误
		buf.head = 'F';
		strcpy(buf.msg,"用户名不存在\n");
		printf("用户名[%s]不存在\n",name);
	}
	else if(pwd_select(db_user,"yhb",password,name) == -1)

	{
		//密码错误
		buf.head = 'F';
		strcpy(buf.msg,"密码错误\n");
		printf("用户名[%s]密码错误\n",name);
	}
	//发送给客户端
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}
}
int do_select(sqlite3* db,char* table,char* name,char* buf)
{
	char sql[128] = "";
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	sprintf(sql,"select * from %s where name='%s';",table,name);
	printf("%s\n",sql);

	if(sqlite3_get_table(db, sql, &pres, &row, &column, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_get_table:%s\n", __LINE__, errmsg);
		return -1;
	}

	if(column == 0)//没有相关的单词或者用户名
	{
		printf("没有查询到\n");
		return -1;
	}

	//释放获取到的空间
	sqlite3_free_table(pres);
	pres = NULL;
	return 0;
}
int pwd_select(sqlite3* db,char* table,char* password,char *name)
{
	char sql[128] = "";
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	printf("%s\n",name);
	sprintf(sql,"select * from %s where pwd='%s';",table,password);
	printf("%s\n",sql);
	if(sqlite3_get_table(db,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值