员工管理系统

本文介绍了使用C语言构建员工管理系统的实现过程,包括服务器和客户端的主程序结构,涉及到.c源文件和相应的头文件设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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, 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;
	}
	printf("%s\n",pres[column]);
	if(strcmp(pres[column],"001")!=0)
	{
		printf("不是管理员\n");
		return -1;
	}

	//释放获取到的空间
	sqlite3_free_table(pres);
	pres = NULL;
	return 0;
}
int chakan(sqlite3* db,char* table,char* id,struct message cil_buf,int sfd)

{
	char sql[128] = "";
	struct message buf;
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	//printf("%s\n",name);
	sprintf(sql,"select * from %s where id='%s';",table,id);
	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;
	}
	strcpy(buf.id,pres[column]);
	strcpy(buf.name,pres[column+1]);
	strcpy(buf.password,pres[column+2]);
	strcpy(buf.gongzi,pres[column+3]);
	buf.head = 'C';
	strcpy(buf.msg,"查询成功\n");
	char sql2[128];
	if(send(sfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}

	/* sprintf(sql,"select * from %s where id='%s';",table,jlid);
	   if(sqlite3_get_table(db, sql2, &pres, &row, &column, &errmsg) != SQLITE_OK)
	   {
	   fprintf(stderr, "__%d__ sqlite3_get_table:%s\n", __LINE__, errmsg);
	   return -1;
	   }
	   strcpy(buf.name,pres[column+1]);
	   char sql3[128];
	   sprintf(sql3,"insert into jlb values('%s','%s','chaxun%s')",jlid,buf.name,id);
	   */
	//释放获取到的空间
	sqlite3_free_table(pres);
	pres = NULL;
	return 0;

}
int search(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3* db_user)
{
	struct message buf;

	buf.head = 'C';
	printf("%s\n",buf.id);

	//调用查找函数查找单词
	if(chakan(db_user,"yhb",cil_buf.id,cil_buf,newfd) == -1)
	{
		//用户名错误
		buf.head = 'F';
		strcpy(buf.msg,"id不存在\n");
		printf("id[%s]不存在\n",buf.id);
		if(send(newfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}


	}
	printf("%s\n",buf.id);


	return 0;
}
int xiugai(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user)
{
	char sql[128];
	struct message buf;
	buf.head = 'H';
	char* errmsg = NULL;
	printf("%s\n",cil_buf.msg);
	printf("%s\n",cil_buf.xiugai);
	if(strcmp(cil_buf.msg,"name")==0)
	{
		sprintf(sql,"UPDATE yhb SET name='%s'  WHERE id='%s';",cil_buf.xiugai,cil_buf.id);
		printf("%s\n",sql);
		if(sqlite3_exec(db_user,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
		{
			fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
			return -1;
		}
		strcpy(buf.msg,"修改成功\n");
		if(send(newfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	}
	else if(strcmp(cil_buf.msg,"pwd")==0)
	{
		sprintf(sql,"UPDATE yhb SET pwd='%s'  WHERE id='%s';",cil_buf.xiugai,cil_buf.id);
		printf("%s\n",sql);
		if(sqlite3_exec(db_user,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
		{
			fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
			return -1;
		}
		strcpy(buf.msg,"修改成功\n");
		if(send(newfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	}
	else if(strcmp(cil_buf.msg,"gongzi")==0)
	{
		sprintf(sql,"UPDATE yhb SET gongzi='%s'  WHERE id='%s';",cil_buf.xiugai,cil_buf.id);
		printf("%s\n",sql);
		if(sqlite3_exec(db_user,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
		{
			fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
			return -1;
		}
		strcpy(buf.msg,"修改成功\n");
		if(send(newfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	}
	else
	{
		//修改错误
		buf.head = 'F';
		strcpy(buf.msg,"修改失败\n");
		printf("修改失败\n");
	}
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}
	char sql3[128];
	sprintf(sql3,"insert into jlb values('%s','%s','%sxiugai%s');",cil_buf.jlid,cil_buf.jlname,cil_buf.msg,cil_buf.xiugai);
	printf("%s\n",sql3);
	if(sqlite3_exec(db_user,sql3,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
		return -1;
	}


}
int tianjia(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user)
{
	char sql[128];
	struct message buf;
	buf.head = 'Q';
	char* errmsg = NULL;
	sprintf(sql,"insert into yhb values('%s','%s','%s','%s')",cil_buf.id,cil_buf.name,cil_buf.password,cil_buf.gongzi);
	printf("%s\n",sql);
	if(sqlite3_exec(db_user,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
		return -1;
		{
			//修改错误
			buf.head = 'F';
			strcpy(buf.msg,"修改失败\n");
			printf("修改失败\n");
		}

	}
	strcpy(buf.msg,"修改成功\n");
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}
	char sql3[128];
	sprintf(sql3,"insert into jlb values('%s','%s','添加了id%s的信息');",cil_buf.jlid,cil_buf.jlname,cil_buf.id);
	printf("%s\n",sql3);
	if(sqlite3_exec(db_user,sql3,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
		return -1;
	}


}
int shanchu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user)
{
	char sql[128];
	struct message buf;
	buf.head = 'I';
	char* errmsg = NULL;
	sprintf(sql,"DELETE FROM yhb WHERE id='%s'",cil_buf.id);
	printf("%s\n",sql);
	if(sqlite3_exec(db_user,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
		return -1;
		{
			//修改错误
			buf.head = 'F';
			strcpy(buf.msg,"修改失败\n");
			printf("修改失败\n");
		}

	}
	strcpy(buf.msg,"修改成功\n");
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}
	char sql3[128];
	sprintf(sql3,"insert into jlb values('%s','%s','删除了%s');",cil_buf.jlid,cil_buf.jlname,cil_buf.id);
	if(sqlite3_exec(db_user,sql3,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec:%s\n",errmsg);
		return -1;
	}



}
int jilu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user)
{
	char sql[128]="select * from jlb;";
	struct message buf;
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	if(sqlite3_get_table(db_user, sql, &pres, &row, &column, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_get_table:%s\n", __LINE__, errmsg);
		return -1;
	}
	//能运行到当前位置则说明,查询函数运行成功

	int i = 0;
	ssize_t res;
	for(i=0; i<(row+1)*column; i++)
	{

		if(i%column == (column-1))
		{
	strcpy(buf.id,pres[column]);
	strcpy(buf.name,pres[column+1]);
	strcpy(buf.msg,pres[column+2]);
	
			
			if(send(newfd,&buf,sizeof(buf),0) < 0)
			{
				ERR_MSG("send");
				return -1;
			}
			bzero(buf.id,sizeof(buf.id));
			bzero(buf.name,sizeof(buf.name));
bzero(buf.msg,sizeof(buf.msg));

			
		}
	}
	buf.head = 'N';
	strcpy(buf.msg,"修改成功\n");
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}

}
int ptyh(int newfd,struct sockaddr_in cin,char *name,sqlite3* db_user,char *password)
{
	struct message buf;
	
	printf("用户请求登录\n");
strcpy(buf.name,name);
strcpy(buf.password,password);
	//查询用户名密码是否正确
	if(do_select(db_user,"yhb",buf.name,buf.password) == -1)
	{
		//用户名错误
		buf.head = 'F';
		strcpy(buf.msg,"用户名不存在\n");
		printf("用户名[%s]不存在\n",name);
	}
	else if(pwdpt_select(db_user,"yhb",buf,newfd) == -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;
	}

	}
	return 0;
}
int pwdpt_select(sqlite3* db,char* table,struct message buf,int sfd)
{

	char sql[128] = "";
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	sprintf(sql,"select * from %s where pwd='%s';",table,buf.password);
	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)//没有相关的单词或者用户名
	{
       return -1;
	}
	else {
		strcpy(buf.id,pres[column]);
	buf.head = 'P';
	strcpy(buf.msg,"登录成功\n");

	//发送给客户端
	if(send(sfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return 0;
	}
	}
	//释放获取到的空间
	sqlite3_free_table(pres);
	pres = NULL;
	return 0;
}
int ptjilu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user)
{
	char sql[128];
	sprintf(sql,"select * from jlb where id='%s';",cil_buf.id);

	struct message buf;
	char ** pres = NULL;    //存储查询结果的首地址
	int row, column;        //查询结果的行列数
	char* errmsg = NULL;
	if(sqlite3_get_table(db_user, sql, &pres, &row, &column, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_get_table:%s\n", __LINE__, errmsg);
		return -1;
	}
	//能运行到当前位置则说明,查询函数运行成功

	int i = 0;
	ssize_t res;
	for(i=0; i<(row+1)*column; i++)
	{

		if(i%column == (column-1))
		{
	strcpy(buf.id,pres[column]);
	strcpy(buf.name,pres[column+1]);
   strcpy(buf.xiugai,pres[column+2]);
	
			
			if(send(newfd,&buf,sizeof(buf),0) < 0)
			{
				ERR_MSG("send");
				return -1;
			}
			bzero(buf.id,sizeof(buf.id));
			bzero(buf.name,sizeof(buf.name));
bzero(buf.msg,sizeof(buf.msg));

			
		}
	}
	buf.head = 'N';
	strcpy(buf.msg,"修改成功\n");
	if(send(newfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("send");
		return -1;
	}
}

头文件

#ifndef __1_H__
#define __1_H__ 
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
#include <sqlite3.h>
#include <signal.h>
#include <time.h>
#define ERR_MSG(msg) do{\
fprintf(stderr, "__%d__:", __LINE__);\
perror(msg);\
}while(0)

#define PORT 8888
#define IP "192.168.100.88"
struct message
{
	char head;
	char msg[20];
	char name[10];
	char password[10];
	char id[10];
	char gongzi[10];
	char xiugai[20];
	char jlid[10];
	char jlname[10];
};

int tcp_lianjie(void);//tcp连接成功
typedef void (*sighandler_t)(int);
void handler(int sig);//回收僵尸进程
int rcv_cli_msg(int newfd, struct sockaddr_in cin);//接收客户端信息
void word_exist(void);//初始化判断
int do_select(sqlite3* db,char* table,char* name,char* buf);
int user_in(int newfd,struct sockaddr_in cin,char *name,sqlite3* db_user,char *password);
int pwd_select(sqlite3* db,char* table,char* password,char* name);
int chakan(sqlite3* db,char* table,char* id,struct message cil_buf,int sfd);
int search(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3* db_user);
int xiugai(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user);
int tianjia(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user);
int shanchu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user);
int jilu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user);
int ptyh(int newfd,struct sockaddr_in cin,char *name,sqlite3* db_user,char *password);
int pwdpt_select(sqlite3* db,char* table,struct message buf,int sfd);
int ptjilu(int newfd,struct sockaddr_in cin,struct message cil_buf,sqlite3*db_user);

#endif

客户端主程序

#include "1.h" 


int main(int argc, const char *argv[])
{
	//创建流式套接字
	int sfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sfd < 0)
	{
		ERR_MSG("socket");
		return -1;
	}
 
	//填充要连接的服务器的地址信息结构体
	struct sockaddr_in sin;
	sin.sin_family 		= AF_INET;
	sin.sin_port 		= htons(PORT);
	sin.sin_addr.s_addr = inet_addr(IP);
 
	//连接服务器
	if(connect(sfd, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		ERR_MSG("connect");
		return -1;
	}	
	printf("连接成功服务器\n");

	int choose;
	int num;
	while(1)
	{
			system("clear");

		menu(1);
		scanf("%d",&choose);
		while(getchar() != 10);
		switch(choose)
		{
		case 1:	
			//登录
			num = user_in(sfd);
		//	menu(2);
			break;
		case 2:
           ptyh_in(sfd);
			break;
		case 3:
			//退出
			system("clear");
			exit(0);
		default:
			printf("输入错误\n");
		}
	}
	return 0;
}

.c文件

#include "1.h"
//菜单函数
void menu(int n)
{
	if(1 == n)
	{
		printf("------------------------\n");
		printf("-----1.管理员登录-------\n");
		printf("-----2.普通用户登录-----\n");
		printf("-----3.退出-------------\n");
		printf("------------------------\n");
	}
	else if( 2 == n)
	{
		printf("--------------------\n");
		printf("---1:查询----------\n");
		printf("---2:修改----------\n");
		printf("---3:添加用户------\n");
		printf("---4:删除用户------\n");
		printf("---5:查询历史记录*--\n");
		printf("---6:退出-----------\n");
		printf("--------------------\n");

	}
	else if( 3 == n)
	{
		printf("--------------------\n");
		printf("---1:查询----------\n");
		printf("---2:查询历史记录*--\n");
		printf("---3:退出-----------\n");
		printf("--------------------\n");

	}
	else if( 4 == n)
	{
		printf("--------------------\n");
		printf("---1:NMAE-----------\n");
		printf("---2:PWD------------\n");
		printf("---3.GONGZI---------\n");
		printf("--------------------\n");

	}

}
//用户登录
int user_in(int sfd)
{
	system("clear");
	struct message buf;
	buf.head = 'D';
	printf("请输入用户名user>>>");
	scanf("%s",buf.name);
	printf("请输入密码password>>>");

	scanf("%s",buf.password);


	//printf("%s\n",buf.msg);
	if(send(sfd,&buf,sizeof(buf),0) <0)
	{
		ERR_MSG("send");
		return -1;
	}
	if(recv(sfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("recv");
		return -1;
	}
	if(buf.head=='D')
	{
	
		printf("登录成功\n");
		
	}
	else if(buf.head == 'F')//'F'登录失败
	{
		printf("%s",buf.msg);
		return -1;//密码错误,用户名不存在
	}
	gongneng(sfd,buf);
	return 0;
}
int gongneng(int sfd,struct message buf)
{
	int choose;
	while(1)
	{
		system("clear");
		menu(2);
		scanf("%d",&choose);
		while(getchar()!=10);
		switch(choose)
		{
		case 1:
			//查看
			chakan(sfd,buf.name,buf.id);
			break;
		case 2:
			//修改
			xiugai(sfd,buf.id);
			break;
		case 3:
			//添加
			tianjia(sfd);
			break;
		case 4:
			//删除
			shanchu(sfd);
			break;
		case 5:
			//查看历史
		   jilu(sfd);
			break;
		case 6:
			//退出
		  return 0;
		default:
			printf("输入错误\n");
		}
	}
}
int chakan(int sfd,char *name,char *id)
{
	system("clear");
	struct message buf;


	while(1)
	{

		buf.head = 'C';
		printf("请输入id(输入#结束查看)>>>");
		fgets(buf.id,sizeof(buf.id),stdin);
		buf.id[strlen(buf.id)-1] = 0;
		if(buf.id[0] == '#')//退出查看
		{
			system("clear");
			break;
		}
		if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'F')//F查看失败
		{
			printf("%s",buf.msg);
		}
		else if(buf.head == 'C')//C查看成功
		{
			printf("id[%s] name[%s] pwd[%s] gongzi[%s]",buf.id,buf.name,buf.password,buf.gongzi);
		}
		else
		{
			printf("服务器异常");
			break;
		}
	}
}
int xiugai(int sfd,char *name)
{ 
	
	system("clear");
	menu(4);
	struct message buf;
	buf.head='H';
	while(1)
	{
		printf("输入本身id(输入#退出)\n");

		scanf("%s",buf.jlid);
		if(buf.jlid[0]=='#')
		{
			break;
		}
		printf("输入本身name\n");
		scanf("%s",buf.jlname);
		int choose;
		buf.head='H';
		 printf("请输入要修改的选项\n>>>");
  	   scanf("%d",&choose);
	   while(getchar()!=10);
		switch(choose)
		{
			case 1:
		strcpy(buf.msg,"name");

			break;
		case 2:
	   strcpy(buf.msg,"pwd");
			break;
		case 3:
		strcpy(buf.msg,"gongzi");
			break;
			default:
			printf("输入错误\n");
		}
        xiugai_1(sfd,buf); 
	}
  return 0;
}
int xiugai_1(int sfd,struct message buf)
{
	 	system("clear");

      printf("请输入要修改的内容和id>>>");
	  scanf("%s",buf.xiugai);
	  printf("输入id\n");
	  scanf("%s",buf.id);
	  
		
 		if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'F')//F查看失败
		{
			printf("%s",buf.msg);
		}
		else if(buf.head == 'H')//C查看成功
		{
			printf("%s\n",buf.msg);
		}
}
int tianjia(int sfd)
{
	system("clear");

	struct message buf;			system("clear");



		printf("输入本身id(输入#退出)\n");
		scanf("%s",buf.jlid);
		if(buf.jlid[0]=='#')
		{
			return 0;
		}
		printf("输入本身name\n");
		scanf("%s",buf.jlname);

//	struct message buf;
	buf.head='Q';
	printf("请输入id\n");
	scanf("%s",buf.id);
	printf("请输入namn\n");
	scanf("%s",buf.name);
	printf("请输入pwd\n");
	scanf("%s",buf.password);
	printf("请输入gongzi\n");
	scanf("%s",buf.gongzi);
 		if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'F')//F查看失败
		{
			printf("%s",buf.msg);
		}
		else if(buf.head == 'Q')//Q查看成功
		{
			printf("%s\n",buf.msg);
		}


return 0;
}

int shanchu(int sfd)
{
	system("clear");

   struct message buf;
		printf("输入本身id\n");
		scanf("%s",buf.jlid);
		printf("输入本身name\n");
		scanf("%s",buf.jlname);
	system("clear");

   buf.head='I';
   printf("请输入您要删除的id(输入#返回)\n");
   scanf("%s",buf.id);
   if(strcmp(buf.id,"#")==0)
   {
			system("clear");
			return 0;
   }
   if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'F')//F查看失败
		{
			printf("%s",buf.msg);
		}
		else if(buf.head == 'I')//Q查看成功
		{
			printf("%s\n",buf.msg);
		}

}

int jilu(int sfd)
{
	system("clear");

	struct message buf;
	buf.head='K';
     if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	 while(1)
	 {
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'N')
		{
			printf("接收完毕\n");
			break;
		}

	printf("id[%s] name[%s] shijian[%s]",buf.id,buf.name,buf.msg);
	 printf("输入#退出\n");
	 scanf("%s",buf.id);
	 if(buf.id[0]=='#')
	 {
		 break;
	 }
	//	printf("id[%s] name[%s] pwd[%s] gongzi[%s]",buf.id,buf.name,buf.password,buf.gongzi);
	 }
	 return 0;
}
int ptyh_in(int sfd)
{
	system("clear");
	struct message buf;
	buf.head = 'P';
	printf("请输入用户名user>>>");
	scanf("%s",buf.name);
	printf("请输入密码password>>>");

	scanf("%s",buf.password);


	//printf("%s\n",buf.msg);
	if(send(sfd,&buf,sizeof(buf),0) <0)
	{
		ERR_MSG("send");
		return -1;
	}
	if(recv(sfd,&buf,sizeof(buf),0) < 0)
	{
		ERR_MSG("recv");
		return -1;
	}
	printf("%c\n",buf.head);
	if(buf.head=='P')
	{
	
		printf("%s\n",buf.msg);
		
	}
	else if(buf.head == 'F')//'F'登录失败
	{
		printf("%s",buf.msg);
		return -1;//密码错误,用户名不存在
	}
	ptgongneng(sfd,buf);
	return 0;
     //ongneng()
}

int ptgongneng(int sfd,struct message buf)
{
	int choose;
	while(1)
	{
		menu(3);
		scanf("%d",&choose);
		while(getchar()!=10);
		switch(choose)
		{
		case 1:
			//查看
			ptchakan(sfd,buf.name,buf.id);
			break;
		case 2:
			//查看历史
		   ptjilu(sfd,buf.name,buf.id);
			break;
		case 3:
			//退出
		  return 0;int chakan(int sfd,char *name,char *id);

		default:
			printf("输入错误\n");
		}
	}
}
int ptchakan(int sfd,char *name,char *id)
{
	system("clear");
	struct message buf;
buf.head='C';
    strcpy(buf.id,id);
		if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}
		if(buf.head == 'F')//F查看失败
		{
			printf("%s",buf.msg);
		}
		else if(buf.head == 'C')//C查看成功
		{
			printf("id[%s] name[%s] password[%s]  gongzi[%s]",buf.id,buf.name,buf.password,buf.gongzi);
		}
		else
		{
			printf("服务器异常");
			return 0;
		}
		printf("请输入id(输入#结束查看)>>>");
		fgets(buf.id,sizeof(buf.id),stdin);
		buf.id[strlen(buf.id)-1] = 0;
		if(buf.id[0] == '#')//退出查看
		{
			system("clear");
			return 0;
		}

}
int ptjilu(int sfd,char* name,char* id)
{
	system("clear");

	struct message buf;
	strcpy(buf.id,id);
	buf.head='T';
     if(send(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("send");
			return -1;
		}
	 while(1)
	 {
		if(recv(sfd,&buf,sizeof(buf),0) < 0)
		{
			ERR_MSG("recv");
			return -1;
		}

		if(buf.head == 'N')
		{
			printf("接收完毕\n");
			break;
		}
	printf("id[%s] name[%s] shijian[%s]",buf.id,buf.name,buf.xiugai);
	 printf("输入#退出\n");
	 scanf("%s",buf.id);
	 if(buf.id[0]=='#')
	 {
		 break;
	 }

	//	printf("id[%s] name[%s] pwd[%s] gongzi[%s]",buf.id,buf.name,buf.password,buf.gongzi);
	 }
	 return 0;

头文件

#ifndef __1_H__
#define __1_H__
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <arpa/inet.h>
#include <string.h>
 
//打印错误新的宏函数
#define ERR_MSG(msg)  do{\
    fprintf(stderr, " __%d__ ", __LINE__);\
    perror(msg);\
}while(0)


struct message        
{
	char head;
	char msg[20];
	char name[10];
	char  password[10];
	char id[10];
	char gongzi[10];
	char xiugai[20];
	char jlid[10];
	char jlname[10];
};


 
#define PORT 8888
#define IP  "192.168.100.88" 
void menu(int n);//菜单
int user_in(int sfd);//用户登录
int gongneng(int sfd,struct message buf);//管理员功能
int chakan(int sfd,char *name,char *id);
int xiugai(int sfd,char *name);
int xiugai_1(int sfd,struct message buf);
int tianjia(int sfd);
int shanchu(int sfd);
int jilu(int sfd);
int ptyh_in(int sfd);
int ptgongneng(int sfd,struct message buf);
int ptchakan(int sfd,char *name,char *id);
int ptjilu(int sfd,char *name,char *id);

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值