电子词典dictionary

一、项目要求:

     1.登录注册功能,不能重复登录,重复注册。用户信息也存储在数据库中。

     2.单词查询功能

     3.历史记录功能,存储单词,意思,以及查询时间,存储在数据库

     4.基于TCP,支持多客户端连接

     5.采用数据库保存用户信息与历史记录

     6.将dict.txt的数据导入到数据库中保存。

     7.返回上级、按下ctrl+c退出客户端后,该用户退出登录

二、格式要求:

     1.main函数只跑逻辑,不允许跑功能代码

     2.功能代码封装成函数

三、项目功能:

     1.注册

     2.登录

     3.查询单词

     4.查看历史记录

     5.退出登录

四、框架设计:

4.1服务器设计 

4.2客户端设计

五、功能说明:

5.1用户注册

      输入用户名和密码,插入用户表中,用户名不能和已有用户名字冲突,否则失败。

5.2用户登录

      输入用户名和密码,通过遍历表中数据,核对数据信息,成功,转到第二个操作界面。

5.3查询单词

      输入单词,在词典文件中查找,存在得到单词解释,并且将查询记录保存到记录表中。

5.4查询历史记录

      遍历记录表中数据,将用户查询的时间和单词打印到终端上。

5.5多进程实现TCP并发

六、具体代码:

head.h:

#ifndef __HEAD_H__
#define __HEAD_H__

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


#define PORT 8808
#define IP "127.0.0.1"
#define ERR_MSG(msg) { fprintf(stderr,"__%d__",__LINE__); perror(msg); }

int put_dict(sqlite3 *db);
void handler(int sig);
int do_register(sqlite3 *db,char *buf);
void do_register_cli(char *buf);
int Register(sqlite3 *db,char *buf);
void do_login(char *buf);
int Login(sqlite3 *db,char *buf);
int do_select_user(sqlite3 *db,char *name);
int do_insert(sqlite3 *db,char *words,char *mean,char *save_buf);
int Search(sqlite3 *db,char *buf,char *save_buf);
int Search_res(sqlite3 *db,char *buf,char *save_buf);
int deal_cli_msg(int newfd,struct sockaddr_in cin,sqlite3 *db);

#endif

dictionary.c(功能函数):

#include "head.h"

//导入词典
int put_dict(sqlite3 *db)
{
	//创建并打开一个数据库
	if(sqlite3_open("./dict.db",&db) != SQLITE_OK)
	{
		printf("sqlite3_open:%s %d __%d__\n",\
				sqlite3_errmsg(db),sqlite3_errcode(db),__LINE__);
		return -1;
	}

	//创建一个表格 create table stu (id int,name char,score float);
	//数据库中sql语句怎么写,这里就怎么写
	char sql[128] = "create table dict (word char,mean char);";
	char* errmsg = NULL;

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open:%s %d __%d__\n",\
				errmsg,sqlite3_errcode(db),__LINE__);
		return -1;
	}

	//打开文件
	FILE* fp = fopen("./dict.txt","r");
	if(NULL == fp)
	{
		perror("fopen");
		return -1;
	}

	//循环读取文件中的数据,一行一行的读取
	char buf[256] = "";
	char word[32] = "";
	char mean[200] = "";
	int count = 1;
	int i =0;
	char* ptr = NULL;

	while(1)
	{
		if(fgets(buf,sizeof(buf),fp) == NULL)
			break;
		buf[strlen(buf)-1] = 0;

		//分离单词和意思
		bzero(word,sizeof(word));
		bzero(mean,sizeof(mean));

		//获取" "子串在buf中的地址
		ptr = strstr(buf," ");
		if(NULL == ptr)
		{
			printf("没有找到对应子串\n");
			break;
		}
		strncpy(word,buf,ptr-buf);    //" "子串前面是单词
		strcpy(mean,ptr+3);           //" "子串后面是意思

		//插入到数据库中
		sprintf(sql,"insert into dict values(\"%s\",\"%s\"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值