电子词典项目(有借鉴)

这篇具有很好参考价值的文章主要介绍了电子词典项目(有借鉴)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务器

#include<myy.h>
#include<sqlite3.h>
 
#define err(msg) do{printf("__%d__",__LINE__);perror(msg);return -1;}while(0)
#define PORT 8888
#define IP "192.168.125.51"
typedef void (*sighandler_t)(int);
typedef struct
{
	char flag;
	char name[20];
	char text[128];
}msg;
char mean[32]="";
int do_register(msg *usr,int afd,sqlite3* db)
{ 
	char sql[256] = "" ;
	sprintf(sql,"insert into usr values('%s','%s');",usr->name,usr->text);
	char* errmsg = NULL;
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		strcpy(usr->text,"usr name already exist");
		printf("usr name already exist\n");
	}
	else
	{
		printf("registeration is ok\n");
		strcpy(usr->text,"usr name registeration successed");	
	}
	if(send(afd,usr,sizeof(msg),0)<0)err("send");
	
	if(recv(afd,usr,sizeof(msg),0)<0)err("recv");
	return 0;
}
int do_login(msg *usr,int afd,sqlite3* db)
{
	sqlite3* db_delete= NULL;
	char sql[256] ="";
	char* errmsg = NULL;
	char **pres=NULL;
	int row,column;
	sprintf(sql,"select * from usr where name='%s' and password='%s';",usr->name,usr->text);
	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(row==1) 
	{
		printf("login is ok\n");
		bzero(usr->text,sizeof(usr->text));
		strcpy(usr->text,"ok");
	}
	else{
		printf("login is failed\n");
		strcpy(usr->text,"usr name or password inputs error!");	
	}
	if(send(afd,usr,sizeof(msg),0)<0)err("send");
 
	if(recv(afd,usr,sizeof(msg),0)<0)err("recv");	
	return 0;
}
int callback_s(void* arg ,int columns, char** column_text, char** column_name)
{
	for(int i=1; i<columns; i+=2)
	{
			strcpy(mean,*(column_text+i));
	}
	printf("\n");
	return 0; }
 
int do_search(msg *usr,int afd,sqlite3* db)
{
	char sql[256] ="",sql_h[256]="",word[64]="",TIME[32]="";
	time_t t;
	struct tm *info = NULL;	
	int flag=0;
	
	strcpy(word,usr->text);	
	t =time(NULL);
    info =localtime(&t);
 
	sprintf(TIME,"%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);
	sprintf(sql,"select * from dict where word='%s';",usr->text);
	char* errmsg = NULL;
	if(sqlite3_exec(db, sql,callback_s,&flag, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		return -1;
	}
	bzero(usr->text,sizeof(usr->text));	
	strcpy(usr->text,mean);
	sprintf(sql_h,"insert into history values('%s','%s','%s',\'%s\');",usr->name,word,mean,TIME);
	
	bzero(mean,sizeof(mean));
	bzero(word,sizeof(word));
	if(sqlite3_exec(db,sql_h,NULL,NULL,&errmsg) != SQLITE_OK)	
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);		
	}
	if(send(afd,usr,sizeof(msg),0)<0)err("send");
 
	if(recv(afd,usr,sizeof(msg),0)<0)err("recv");	
	
	return 0;
}
int callback_h(void* arg ,int columns, char** column_text, char** column_name)
{
	int afd=*(int *)arg;
	msg usr;
	char word[64]="",TIME[32]="";
	bzero(usr.text,sizeof(usr.text));
	bzero(usr.name,sizeof(usr.name));	
	for(int i=0; i<columns; i++)
	{
		switch(i)
		{
		case 0:	{strcpy(usr.name,*(column_text));}break;
		case 1:	{strcpy(word,*(column_text+1));}break;
		case 2:	{strcpy(mean,*(column_text+2));}break;
		case 3:	{strcpy(TIME,*(column_text+3));}break;	
		}
	}
	sprintf(usr.text,"%s:%s\t%s\t%s",usr.name,word,mean,TIME);
	printf("%s\n",usr.text);
	
	if(s waitpidend(afd,&usr,sizeof(msg),0)<0)err("send");
	
	return 0; }
 
int do_history(msg* usr,int afd,sqlite3* db)
{
	char sql[256]="";
	sprintf(sql,"select * from history where name='%s';",usr->name);
	char* errmsg = NULL;
	if(sqlite3_exec(db, sql,callback_h,&afd, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_get_table:%s\n", __LINE__, errmsg);
		return -1;
	}	
	printf("this is all\n");
	usr->text[0]='\0';
 
	if(send(afd,usr,sizeof(msg),0)<0)err("send");
	exit(0);
}
void handler(int sig)
{
	while(waitpid(-1,NULL,WNOHANG)>0);
}
int main(int argc, const char *argv[])
{
	int afd,sfd=socket(AF_INET,SOCK_STREAM,0);
	if(sfd<0)err("socket");
	int reuse = 1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)err("setsockopt");
	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("bind");
	if(listen(sfd,10)<0)err("listen");
	struct sockaddr_in cin;
	socklen_t addrlen=sizeof(cin);
	if(SIG_ERR==signal(SIGCHLD,handler))err("signal");
	
		sqlite3* db = NULL;
	if(sqlite3_open("./my.db", &db) != SQLITE_OK)
	{
		printf("err_code:%d\n", sqlite3_errcode(db));
		printf("errmsg:%s\n", sqlite3_errmsg(db));
		fprintf(stderr, "__%d__ sqlite3_open failed\n", __LINE__);
		return -1;
	}
 
	char* sql_dict = "create table if not exists dict (word char,mean char);" ;
	char* sql_usr = "create table if not exists usr (name char primary key,password char);" ;
	char* sql_history = "create table if not exists history (name char,word char,mean char,time char);" ;
	char* errmsg = NULL;
	if(sqlite3_exec(db, sql_usr, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		return -1;
	}
	if(sqlite3_exec(db, sql_history, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		return -1;
	}
	if(sqlite3_exec(db, sql_dict, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
		return -1;
	}
	msg usr;
	char choose = 0;
	int res=0,pid;
	while(1)
	{
		if((afd=accept(sfd,(struct sockaddr*)&sin,&addrlen))<0)err("accept");
 
		pid=fork();
		if(pid>0)
		{
					close(afd);
		}
		else if(pid==0)
		{
			memset(&usr,0,sizeof(msg));
					res=recv(afd,&usr,sizeof(usr),0);
			if(res<0)err("recv");
			printf("flag=%c\n",usr.flag);
			while(res>0)
			{
				switch(usr.flag)
				{
					case 'R':do_register(&usr,afd,db);break;
					case 'L':do_login(&usr,afd,db);break;
					case 'S':do_search(&usr,afd,db);break;
					case 'H':do_history(&usr,afd,db);break;
					default:printf("error\t261\n");
				}
			}
		}
	}
	return 0;
}

客户端

#include <sqlite3.h>
#include<myy.h>
 
#define err(msg) do{printf("__%d__",__LINE__);perror(msg);return -1;}while(0)
#define PORT 8888
#define IP "192.168.125.51"
typedef struct 
{
	char flag;
	char name[20];
	char text[128];//密码或单词
}msg;
int do_register(msg *usr,int sfd)
{ 
	printf("注册中\n");
	ssize_t res;
	usr->flag='R';
	printf("用户名:");
	scanf("%s",usr->name);
	printf("密码:");
	scanf("%s",usr->text);
	if(send(sfd,usr,sizeof(msg),0)<0)err("send");
	res = recv(sfd,usr, sizeof(msg), 0);
	if(res < 0)err("recv");
	else if(0 == res)
	{
		printf("server is off-line\n");
	}
	printf("%s\n",usr->text);
	return 0;
}
int do_login(msg *usr,int sfd)
{	
	printf("登录...\n");
	ssize_t res;
	usr->flag='L';   
	printf("用户名:");
	scanf("%s",usr->name);
	printf("密码:");
	scanf("%s",usr->text);
	if(send(sfd,usr,sizeof(msg),0)<0)err("send");		
	
	res = recv(sfd,usr,sizeof(msg),0);
	if(res < 0)err("recv");
	
	if(strncmp(usr->text,"ok",3)==0)
	{
		printf("%s : log_in successfully\n",usr->name);
		return 1;
	} 
	else{
	printf("%s\n",usr->text);
	}
	return 0;
}
 
 
int do_search(msg *usr,int sfd)
{
	printf("#退出\n");
	ssize_t res;
	usr->flag='S';
	while(1)
	{
	printf("查询的单词:");
	scanf("%s",usr->text);
	if(strcmp(usr->text,"#")==0)break;
	if(send(sfd,usr,sizeof(msg),0)<0)err("send");
		
	res=recv(sfd,usr, sizeof(msg), 0);
	if(res<0)err("recv");
	printf("mean:%s\n",usr->text);
	}
}
int do_history(msg *usr,int sfd)
{
	usr->flag='H';
	ssize_t res;
	if(send(sfd,usr,sizeof(msg),0)<0)err("send");
	printf("the following is history:\n");
	while(1)
	{
	res = recv(sfd,usr, sizeof(msg), 0);
	if(res<0)err("recv");
	else if(res>0)
	{
	printf("%s\n",usr->text);
	}
	else 
	{
		printf("this is all history\n");
		break;
	}
	}
	return 0;	
}
int main(int argc, const char *argv[])
{	int sfd=socket(AF_INET,SOCK_STREAM,0);	
	if(sfd<0)err("msg");
	int reuse = 1;
	if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)err("setsockopt");
	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("connect");
	msg usr;
	char choose = 0;
	int choice=0;//不初始化
	while(1)
	{
		memset(&usr,0,sizeof(msg));
		system("clear");
		puts("1. 注册");
		puts("2. 登录");
		puts("3. 退出");
	 
		printf("请输入选项>>>");
		scanf("%c",&choose);	
	
		switch(choose)
		{
		case '1':
			do_register(&usr,sfd);
			break;
		case '2':
			if(do_login(&usr,sfd)>0)
			{
			goto log_in;
			}
			break;
		case '3':
			close(sfd);
			exit(0);
			break;
		default:
			printf("错误,重新输入\n");
		}
 
		printf("清屏>>>\n");
		while(getchar()!=10);
 
	}
	
log_in:
	while(1)
	{
	printf("1.查询单词");
	printf("2. 历史记录");
	printf("3. 退出");
 
	printf("输入选项>>>");

	scanf("%d",&choice);
	getchar();
	switch(choice)
	{
	case 1:
	
		do_search(&usr,sfd);
		break;
	case 2:	
		do_history(&usr,sfd);
			break;	
	case 3:	
			close(sfd);
			exit(0);
			break;	
	default:
		printf("输入错误,请重新输入\n");
	}
	}
	
	return 0;
}

导入文章来源地址https://www.toymoban.com/news/detail-619358.html

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
 
int main(int argc, const char *argv[])
{
	//打开数据库
	sqlite3* db = NULL;
	if(sqlite3_open("./my.db", &db) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_open:%s\n", __LINE__, sqlite3_errmsg(db));
		return -1;
	}
 
	char sql[400] = "create table if not exists dict (word char, mean char)";
	char* errmsg = NULL;
	if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
	{
		fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__,errmsg);
		return -1;
	}
 
 
	
	FILE* fp = fopen("./dict.txt", "r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}
 
	char buf[300] = "";
	char word[50]="", mean[300]="";
	int i = 0;
 
	while(fgets(buf, sizeof(buf), fp) != NULL)
	{
		buf[strlen(buf)-1] = 0;
	
		for(i=0; i<strlen(buf)-2; i++)
		{
			if(buf[i]!=' ' && buf[i+1]==' ' && buf[i+2]==' ')
			{
				strncpy(word, buf, i+1);
			}
			else if(buf[i]==' '&& buf[i+1]==' ' && buf[i+2]!=' ')
			{
				strcpy(mean, (buf+i+2));
				break;
			}
		}
 		sprintf(sql, "insert into dict values(\"%s\", \"%s\");", word, mean);
		if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
		{
			fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__,errmsg);
			return -1;
		}
 
		bzero(word, sizeof(word));
		bzero(mean, sizeof(mean));
	}
	return 0;
}

到了这里,关于电子词典项目(有借鉴)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于数据库及TCP网络编程实现的电子词典

    目录 一、前言 二、项目介绍 三、功能实现 3.1. 用户注册 3.1.1 功能演示 3.1.2 功能函数实现 3.2. 用户登录 3.2.1 功能演示 3.2.2 功能函数实现 3.3. 查询单词 3.3.1 功能演示 3.3.2 功能函数实现 3.4. 历史查询 3.4.1 功能演示 3.4.2 功能函数实现 四、代码实现 4.1 服务器程序 server.c 4.2 客户

    2023年04月09日
    浏览(85)
  • 通过C实现sqlite3操作,(增删改查),导入电子词典

    一、插入 二、导入电子词典

    2024年02月12日
    浏览(42)
  • 用Microsoft Access作为DBMS,建立数据库和数据表来实现对一个简易的英汉电子词典进行存储和管理,这个简易电子词典中的内容至少包括:英文单词名、词性、汉语释义

    已完善英语词典词典所有功能,酌情使用 酌情参考 本单元的作业,意在检测学生是否达到以下学习目标: (1)掌握JDBC数据库访问的基本步骤; (2)掌握利用JDBC建立数据库连接的方法; (3)掌握利用JDBC对数据库进行查询的方法; (4)掌握利用JDBC对数据库中的数据进行增、删、]改

    2024年02月04日
    浏览(71)
  • 公司前端实习项目技术,可以借鉴一些组件设计思路及基本代码逻辑,应届生来!

    1.跳转 2.请求 1.mounted() 1.从登陆界面开始,通过Common.httpRequest()发送请求,经过Common.forward()跳转传参,在mounted或者created生命周期中通过common.getActivePageStack()获取到跳转所传参数,这样就可以根据id或者其他唯一数据发送请求查询所需数据 1.DialogInfo 1.用法 先引入组件 在

    2024年02月21日
    浏览(57)
  • day2 在线词典项目注册登录的实现

    2024年02月07日
    浏览(38)
  • 微软detours代码借鉴点备注

    借鉴点1 Loadlibray的时间选择 注入库wrotei.dll,为了获取istream的接口,需要loadlibrary,但是在dllmain中是不建议这样做的。因此,动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint = (int (WINAPI *)(VOID))DetourGetEntryPoint(NULL); ... //挂载入口 DetourAttach((PVOID)TrueEntryPo

    2024年04月09日
    浏览(49)
  • 借鉴国际经验 加快推进教育数字化升级

    ■策 论·“教育数字化赋能基础教育高质量发展”系列评论之六 教育部2022年工作要点提出,实施教育数字化战略行动,加快推进教育数字转型和智能升级。然而,我国基础教育数字化正处于起步阶段,有必要学习与借鉴国际经验,实现教育数字化赋能基础教育高质量发展。

    2024年02月11日
    浏览(48)
  • 电子设计项目

    全套完整毕业设计智能家居控制系统设计 16X16点阵滚动显示_单片机595+138LED点阵 基于WIFI传输的单片机传感器设计(毕业论文) 基于单片机设计的多点测温系统-数码管显示温度 基于单片机设计的公交报站器(毕业设计) 基于单片机设计的空调温度控制器(毕业设计) 基于单片

    2023年04月20日
    浏览(100)
  • 爱心代码——c++(借鉴b站up主)

    如果打开不了 graphics,可能缺少EasyX文件,找官网下一个即可,如果还有更简洁的方式请留言

    2024年02月05日
    浏览(33)
  • 实战项目——多功能电子时钟

    通过按键来控制状态机的状态,在将状态值传送到各个模块进行驱动,在空闲状态下,数码管显示基础时钟,基础时钟是由7个计数器组合而成,当在ADJUST状态下可以调整时间,并且基础时间会随基础时钟的改变而改变,同过位置使能来确定更改的值在按下确定来更改基础时钟

    2024年02月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包