电子词典项目 | 您所在的位置:网站首页 › 电子词典项目华清远见 › 电子词典项目 |
16. 电子词典项目需求 项目要求: 登录注册功能,不能重复登录,重复注册单词查询功能历史记录功能,存储单词,意思,以及查询时间基于TCP,支持多客户端连接采用数据库保存用户信息与历史记录将dict.txt的数据导入到数据库中保存。按下ctrl+c退出客户端后,注销该客户端的登录信息 格式要求: main函数只跑逻辑,不允许跑功能代码功能代码封装成函数 先分析需求将上述需求用流程图画出来根据流程图搭建代码框架一个功能一个功能实现 流程图:http://t.csdn.cn/ScQSW 网络编程电子词典项目: 目录 项目要求: 格式要求: 流程图: 服务器代码 客户端 实现效果 服务器代码头文件 #ifndef __FUNC_H__ #define __FUNC_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PORT 6666 #define IP "192.168.100.17" typedef void (*sighandler_t)(int); #define ERR_MSG(msg) do{\ fprintf(stderr,"line:__%d__\n",__LINE__);\ perror(msg);\ }while(0) struct msg{ char type; //消息类型 char name[128]; //名字 char password[128]; //密码 char word[128]; //单词 char trans[128]; //翻译 char time[256]; //时间 }sermsg; sqlite3* sqlite3_database(); //创建数据库表 int cli_net(); //创建套接字.链接客户端.绑定信息结构体 int sqlite3_close(sqlite3* db); //关闭数据库 int sqlite3_word(sqlite3* db); //导入单词函数 int sqlite3_worddelete(sqlite3 *db); //删除单词表函数 int ser_recv(int newfd,struct sockaddr_in cin); //接收函数 int do_login(int newfd); //登录函数 int do_register(int newfd); //注册函数 int do_find(int newfd); //查询单词 int do_history(int newfd); //查询历史记录 int do_quit(int newfd); //退出 void handler(int sig); //捕获僵尸进程 #endif功能文件 #include "01_serfunc.h" sqlite3 *db=NULL; char *errmsg=NULL; sqlite3* sqlite3_database() { //创建并打开一个数据库 if(sqlite3_open("./word.db",&db)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_open failed:%d:%s\n",\ __LINE__,sqlite3_errcode(db),sqlite3_errmsg(db)); return NULL; } printf("sqlite3_open success\n"); //删除单词表 sqlite3_worddelete(db); //创建一张表格,数据库中sql怎么写就怎么写 char sql[128]="create table if not exists wordbase(word char,explain char);"; if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_exec:%s\n",__LINE__,errmsg); return NULL; } printf("table stu create success\n"); //创建一张表格 用于保存用户注册信息 bzero(sql,sizeof(sql)); sprintf(sql,"create table if not exists userbase(user char primary key,password char);"); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_exec:%s\n",__LINE__,errmsg); return NULL; } printf("table userbase create success\n"); //创建一张表格 用于存储用户登录信息 bzero(sql,sizeof(sql)); sprintf(sql,"create table if not exists recordbase(user char primary key);"); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_exec:%s\n",__LINE__,errmsg); return NULL; } printf("table recordbase create success\n"); //创建一张表格 用于存储用户历史查询信息 bzero(sql,sizeof(sql)); sprintf(sql,"create table if not exists historybase(user char,word char,trans char,time char);"); if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_exec:%s\n",__LINE__,errmsg); return NULL; } printf("table historybase create success\n"); //导入单词函数 sqlite3_word(db); return db; } int sqlite3_close(sqlite3* db) //关闭数据库 { //关闭数据库 if(sqlite3_close(db)!=SQLITE_OK) { fprintf(stderr,"line:%d sqlite3_close failed:%d:%s\n",\ __LINE__,sqlite3_errcode(db),sqlite3_errmsg(db)); return-1; } return 0; } int sqlite3_word(sqlite3 *db) //导入单词函数 { //打开一个文件 FILE *fd=fopen("./dict.txt","r"); if(NULL==fd) { perror("fopen"); return -1; } printf("电子词典正在导入请稍后>>>\n"); //指定的文件中格式化获取数据 //存储每一行数据 char buf[512]=""; char get_word[128]=""; char get_explain[128]=""; char sql[128]=""; char *errmsg=NULL; //循环读取每一行内容 while(1) { bzero(get_word,sizeof(get_word)); bzero(get_explain,sizeof(get_explain)); if(fgets(buf,sizeof(buf),fd)==NULL) { printf("单词导入完毕\n"); return -1; } buf[strlen(buf)-1]='\0'; for(int i=0;i |
CopyRight 2018-2019 实验室设备网 版权所有 |