目录
C语言——在线词典
功能介绍:基于Linux操作系统、网络编程和数据库实现在线词典,客户端可以进行注册、登录、查询、查看历史记录和退出功能,服务端基于TCP通信,多线程实现并发访问客户端,并利用sqlite3数据库实现对用户信息的管理。
一、需求分析
1.注册:若用户名已经注册过,可重新注册
2.登录:用户名或密码错误需重新登录
3.查询:输入要查的单词,#键结束查询
4.历史:可以查询当前用户历史查找过的单词
5.退出:退出在线词典
二、客户端功能设计
三、设计数据库mydict.db
这里数据库已经设计好了,创建了两个表,一个是user表,用来存放用户名和密码;一个是record表,用来存放查询过的的单词、查询时间和查询用户。
四、引入词典文件-dict.txt
部分词典内容展示,这里截图显示。
五、代码实现
1、 客户端:
//客户端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#define N 20
#define M 200
#define R 1 //注册
#define L 2 //登录
#define Q 3 //查询单词
#define H 4 //历史记录
#define E 5 //退出
typedef struct{
int type;//消息类型
char name[N];//用户名
char text[M];//单词 或 密码
}MSG;
#define LEN_SMG sizeof(MSG)
typedef struct sockaddr SA;
//用户注册
void do_register(int sockfd,MSG *pbuf){
pbuf->type = R;
printf("用户名:");
scanf("%s",pbuf->name);
printf("密码:");
scanf("%s",pbuf->text);
send(sockfd,pbuf,LEN_SMG,0);
recv(sockfd,pbuf,LEN_SMG,0);
printf("%s\n",pbuf->text);
sleep(1);
}
//用户登录
int do_login(int sockfd,MSG *pbuf){
pbuf->type = L;
printf("用户名:");
scanf("%s",pbuf->name);
printf("密码:");
scanf("%s",pbuf->text);
send(sockfd,pbuf,LEN_SMG,0);//发送给服务器
recv(sockfd,pbuf,LEN_SMG,0);//从服务器接收
if(pbuf->type == 8){
printf("%s\n",pbuf->text);
sleep(1);
return 1;
}
else{
printf("%s\n",pbuf->text);
return 0;
}
}
//查询单词
void do_query(int sockfd,MSG *pbuf){
pbuf->type = Q;