sqlite3_英英词典

客户端运行起来。先输入zhuce或者denglu 回车结束。
输入账号密码的时候回车结束。
实现的功能:
注册、登录账号;
注册之后可以直接查找。
登录时账号密码不对会直接退出。并关闭服务器端。
账号和密码保存在数据库中。
输入存在的单词,会返回该单词的意思。
输入不存在的单词,会报错。


将单词插入数据库中:

/*************************************************************************
> File Name: c.c
> Author:
> Mail:
> Created Time: Mon 15 Jun 2015 03:27:27 AM PDT
************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sqlite3.h>
#include<fcntl.h>
#include<sys/stat.h>


int main(int argc,const char * argv[])
{
FILE *fp1;
int i =0;
int num = 0;
char *p,*s,*y;
char *errmsg;
char sql[256];
char buff2[1024];
sqlite3 *db =NULL;
if(sqlite3_open("db.db",&db)!=SQLITE_OK)
{
sqlite3_errmsg(db);
exit(EXIT_FAILURE);
}
sqlite3_exec(db,"create table dir (ID INTEGER,WORD TEXT,MEANING TEXT)",NULL,&errmsg);
fp1 = fopen("dict.txt","r");
while(1)
{
fgets(buff2,1024,fp1);
p = buff2;
s = buff2;
y = buff2;
num = 0;
while(1)
{
while(*p!='\x20')
{
p++;
y++;
}
if(*p == '\x20')
{
*p = '\0';
}
p = p+1;
num = num +1;
y = y+1;
while(*p =='\x20')
{
p++;
y++;
num++;
}
while(*p!='\n')
{
p++;
num++;
}
if(*p == '\n')
{
*p = '\0';
}
p = p+1;
num = num+1;
i++;
printf("di%dci charu\n",i);
//printf("s:%s,y:%s",s,y);
sprintf(sql,"insert into dir values(%d,\"%s\",\"%s\") ",i,y);
sqlite3_exec(db,sql,&errmsg);
break;
}
}
}


服务器端程序:

/*************************************************************************
> File Name: server.c
> Author:
> Mail:
> Created Time: Mon 15 Jun 2015 03:59:26 AM PDT
************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netinet/ip.h>
#include<sqlite3.h>


int callback(void * h,int f_num,char **f_val,char **f_name);
int main(int argc,const char *argv[])
{
int listenfd = socket(PF_INET,SOCK_STREAM,0);
if(listenfd == -1)
{
perror("socket");
exit(EXIT_FAILURE);
}
int connfd;
char *p,*z,*m;
void *h;
char *errmsg;
sqlite3 *db ;
char sql[256];
char buff[1024];
char buff1[1024];
char buff2[1024];
char buffer[1024];
char buffer2[1024];
struct sockaddr_in servaddr;
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = PF_INET;
servaddr.sin_port = htons(8888);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
int on = 1;
if(setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))==-1)
{
perror("setsockopt");
exit(EXIT_FAILURE);
}
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
perror("bind");
exit(EXIT_FAILURE);
}
printf("bind success!\n");
listen(listenfd,8);
printf("listening...\n");
fd_set readfds,tmpfds;


FD_ZERO(&readfds);
FD_SET(0,&readfds);
FD_SET(listenfd,&readfds);


int maxfd = listenfd;


while(1)
{
tmpfds = readfds;
//struct timeval tv ={2,0};
int ret = select((maxfd+1),&tmpfds,NULL);
if(ret == -1)
{
perror("select");
exit(EXIT_FAILURE);
}
else if(ret = 0)
{
;
}
else
{
int i;
for(i = 0;i<=maxfd;i++)
{
if(FD_ISSET(i,&tmpfds))
{
if(i==STDIN_FILENO)
{
fgets(buff,sizeof(buff),stdin);
if(strncmp(buff,"quit",4)==0)
{
exit(0);
}
printf("shuru:%s\n",buff);
}
else if(i==listenfd)
{
connfd = accept(listenfd,NULL);
FD_SET(connfd,&readfds);
maxfd = maxfd>connfd?maxfd:connfd;
}
else
{
int recvbytes = 0;
recvbytes = recv(i,buff,0);
if(recvbytes == -1)
{
perror("recv");
close(i);
FD_CLR(i,&readfds);
}
if(recvbytes == 0)
{
printf("client[%d] shutdown\n",i);
close(i);
FD_CLR(i,&readfds);
}
printf("client:%s\n",buff);
if(strncmp(buff,"zhuce",5)==0)
{
recv(i,0);
if(sqlite3_open("db.db",&db)!=SQLITE_OK)
{
sqlite3_errmsg(db);
exit(EXIT_FAILURE);
}
sqlite3_exec(db,"create table name (NAME TEXT,MIMA TEXT)",&errmsg);
p = buff;
z = buff;
m = buff;
while(1)
{
while(*p!='\n')
{
p++;
m++;
}
if(*p == '\n')
{
*p = '\0';
}
p = p+1;
m = m+1;
while(*p!='\n')
{
p++;
}
if(*p == '\n')
{
*p ='\0';
}
sprintf(sql,"insert into name values(\"%s\",\"%s\")",z,m);
printf("sql:%s\n",sql);
//break;
if(sqlite3_exec(db,&errmsg)!=SQLITE_OK)
{
printf("insert error:%s\n",errmsg);
exit(EXIT_FAILURE);
}
break;
}


while(1)
{
if(recv(i,buff1,sizeof(buff1),0)==-1)
{
perror("recv");
exit(EXIT_FAILURE);
}

buff1[strlen(buff1)-1]='\0';
if(strncmp(buff1,4)==0)
{
send(i,0);
exit(0);
}
sprintf(sql,"select * from dir where WORD = \"%s\" ",buff1);
h = buff2;
strcpy(buff2,"bucunzai");
if(sqlite3_exec(db,callback,(void *)h,&errmsg) != SQLITE_OK)
{
printf("select error :%s\n",errmsg);
exit(EXIT_FAILURE);
}
//printf("xxxx:%s\n",buff2);

if(send(i,buff2,sizeof(buff2),0)==-1)
{
perror("send");
exit(EXIT_FAILURE);
}
//bzero(buff2,sizeof(buff2));
}
}
//if(strncmp(buff))
if(strncmp(buff,"denglu",6)==0)
{
recv(i,&db)!=SQLITE_OK)
{
sqlite3_errmsg(db);
exit(EXIT_FAILURE);
}
//sqlite3_exec(db,"select * from name where name = \"%s\" and mima = \"%s\"",sql);

h = buff2;
strcpy(buff2,&errmsg)!=SQLITE_OK)
{
printf("insert error:%s\n",errmsg);
printf("zhaobudaozhegeren\n");
exit(EXIT_FAILURE);
}
printf("zhanghao:%s\n",buff2);
if(strncmp(buff2,"bucunzai",8)==0)
{
strcpy(buffer2,"quit");
send(i,buffer2,sizeof(buffer2),0);
exit(0) ;
}
else if(strncmp(buff2,8)!=0)
{
while(1)
{
if(recv(i,0)==-1)
{
perror("recv");
exit(EXIT_FAILURE);
}

buff1[strlen(buff1)-1]='\0';
if(strncmp(buff1,4)==0)
{
send(i,0);
exit(0);
}
sprintf(sql,buff1);
h = buff2;
if(sqlite3_exec(db,&errmsg) != SQLITE_OK)
{
printf("select error :%s\n",errmsg);
exit(EXIT_FAILURE);
}
//printf("xxxx:%s\n",buff2);

if(send(i,0)==-1)
{
perror("send");
exit(EXIT_FAILURE);
}
}

}
break;
}


}


}
}
}
}
}
}
int callback(void *h,char **f_name)
{
printf("f_num = %d\n",f_num);
int j = 0;
for(j = 0;j<f_num;j++)
{
printf("%s:%s\n",f_name[j],f_val[j]);
sprintf(h,"%s:%s\n",f_val[j]);
}

//printf("%s:%s\n",f_name[f_num],f_val[f_num]);
return 0;
}


客户端程序:

/************************************************************************* > File Name: client.c > Author: > Mail: > Created Time: Mon 15 Jun 2015 04:24:26 AM PDT ************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netinet/ip.h> #include<arpa/inet.h> #include<sqlite3.h> int main(int argc,const char *argv[]) { int clientfd; char buff[1024]; char buff1[1024]; char buff2[1024]; char buff3[1024]; pid_t pid; clientfd = socket(PF_INET,0); if(clientfd == -1) { exit(EXIT_FAILURE); } struct sockaddr_in servaddr; servaddr.sin_family = PF_INET; servaddr.sin_port = htons(8888); servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); if(connect(clientfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1) { perror("connect"); exit(EXIT_FAILURE); } printf("connected..\n"); printf("-----zhuce / denglu-----\n"); if((pid = fork())==-1) { perror("fork"); exit(EXIT_FAILURE); } else if(pid == 0) { while(1) { fgets(buff,stdin); if(send(clientfd,0)==-1) { perror("send"); exit(EXIT_FAILURE); } //printf("buff:%s\n",buff); if(strncmp(buff,5)==0) { printf("****zhanghao****Enter****\n"); fgets(buff1,stdin); printf("******mima******Enter****\n"); fgets(buff2,stdin); strcat(buff1,buff2); if(send(clientfd,0)==-1) { perror("send"); exit(EXIT_FAILURE); } printf("***input words**quit->tuichu***\n"); //printf("quit tuichu \n"); while(1) { fgets(buff3,sizeof(buff3),stdin); if(send(clientfd,buff3,0)== -1) { perror("send"); exit(EXIT_FAILURE); } if(strncmp(buff3,4)==0) { //raise(SIGSTOP); printf("child process exit\n"); exit(0); } sleep(1); printf("***input words**quit->tuichu***\n"); } } if(strncmp(buff,6)==0) { printf("****zhanghao****Enter****\n"); fgets(buff1,0)==-1) { perror("send"); exit(EXIT_FAILURE); } } } } else { while(1) { if(recv(clientfd,0)==-1) { perror("recv"); exit(EXIT_FAILURE); } if(strncmp(buff,4)==0) { exit(0); } printf("%s\n",buff); } } return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


SQLite架构简单,又有Json计算能力,有时会承担Json文件/RESTful的计算功能,但SQLite不能直接解析Json文件/RESTful,需要用Java代码硬写,或借助第三方类库,最后再拼成insert语句插入数据表,代码非常繁琐,这里就不展示了。参考前面的代码可知,入库的过程比较麻烦,不能只用SQL,还要借助Java或命令行。SPL是现代的数据计算语言,属于简化的面向对象的语言风格,有对象的概念,可以用点号访问属性并进行多步骤计算,但没有继承重载这些内容,不算彻底的面向对象语言。...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。本教程将告诉您如何使用 SQLite 编程,并让你迅速上手。.................................
安卓开发,利用SQLite实现登陆注册功能
相比大多数数据库而言,具有等优势,广泛应用于、等领域。
有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数据库,就配置什么数据库即可。4.Users实体类,这个实体类要和数据库一样的,形成一一对应的关系。11.Sqlite数据库,需要在代码里面创建数据库,建立表,再建立数据。8.我们开启MySQL数据库,然后进行调试,看程序的结果。2.安装SqlSugar。
基于Android的背单词软件,功能强大完整。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。说白了就是使用起来轻便简单,
Android的简单购物车案例
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库...
Qt设计较为美观好看的登录注册界面(包含SQLite数据库以及TCP通信的应用)
SQLite是用C语言开发的跨平台小型数据库,可嵌入其他开发语言,也可在单机执行。SPL是用Java开发的跨平台的数据计算语言,可嵌入Java,可在单机执行,可以数据计算服务的形式被远程调用。两者的代码都是解释执行的。...
新建库.openDATA_BASE;新建表createtableLIST_NAME(DATA);语法:NAME关键字...<用逗号分割>删除表droptableNAME;查看表.schema查看表信息新建数据insertintoLIST_NAMEvalues();语法:CLASS,PARAMETER...,CLASS是类别,PARAMETER是参数<用逗号分割新建的
importsqlite3classDemo01:def__init__(self):self.conn=sqlite3.connect("sql_demo_001.db")self.cursor1=self.conn.cursor()self.cursor1.execute("select*fromtable_001wherename=?andid=?",('ssss&#0
 在客户端配置文件<configuration>节点下,添加:<connectionStrings>      <add name="localdb" connectionString="Data Source=config/local.db;Version=3;UseUTF16Encoding=True;" providerName="System.Data.SQLite.SQLiteFactory"/&g
提到锁就不得不说到死锁的问题,而SQLite也可能出现死锁。下面举个例子:连接1:BEGIN(UNLOCKED)连接1:SELECT...(SHARED)连接1:INSERT...(RESERVED)连接2:BEGIN(UNLOCKED)连接2:SELECT...(SHARED)连接1:COMMIT(PENDING,尝试获取EXCLUSIVE锁,但还有SHARED锁未释放,返回SQLITE_BUSY)连接2:INSERT...
SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。在使用SQLite前,我们先要搞清楚几个概念:表
设计思想————首先要确定有几个页面、和每个页面的大致布局由于是入门,我也是学习了不是很长的时间,所以项目比较low。。。。第一个页面,也就是打开APP的首页面:今天这个博客,先实现添加功能!:首先对主界面进行布局:其中activity_main.xml的代码为<?xmlversion="1.0"encoding="