目录
一、前言
二、项目介绍
三、功能实现
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 客户端程序 client.c
五、总结
一、前言
今天是培训的第62天,这两个月的时间里,先后学习了C语言、shell编程、makefile编程、数据结构、IO进程和网络编程,时间紧任务重,但只学习知识不去运用肯定是不行的,所以通过今天这个项目,对所学知识进行回顾和融会贯通,同样也是一个短期的成果展示。
二、项目介绍
主要利用数据库和TCP网络编程,制作一个服务器和客户端程序,实现:一用户注册,二用户登录,三用户在线查询单词,四查询用户历史记录功能。
服务器程序等待客户端连接,接收客户端发来的数据,根据不同的数据包类型,决定是执行注册操作、还是登录操作,如果是注册程序还需遍历数据库用户表,判断用户名是否重复注册,如果是登录操作还需与数据库用户表对比,判断用户名和密码是否匹配;接着如果用户登录成功,再根据数据包类型,决定执行单词查询操作,或者查询历史操作,并将期间该用户的查询到的单词数据库入表,以提供后续的查询历史操作。
客户端程序提供可视化界面,提示用户按需求操作,根据用户选择组装相应的数据包发送给服务器,根据数据的应答数据包,显示对应的提示,用户登录成功后,跳转到单词查询的二级界面,以提供接下来的服务。
三、功能实现
3.1. 用户注册
3.1.1 功能演示
3.1.2 功能函数实现
server.c文章来源:https://www.toymoban.com/news/detail-405925.html
//用户注册函数
void do_register(int connectfd, msg_t *msg, sqlite3 *db)
{
char sqlstr[STR_NUM] = {0};
char *errmsg;
//使用sqlite3_exec函数调用插入函数判断是否能够插入成功
//由于用户名设置为主键,所以如果用户名已经存在就会报错
sprintf(sqlstr, "INSERT INTO usr VALUES('%s', '%s')", msg->name, msg->data);
if (sqlite3_exec(db, sqlstr, NULL, NULL, &errmsg) != SQLITE_OK)
{
sprintf(msg->data, "User %s already exist!!!", msg->name);
}
else
{
strcpy(msg->data, "Register was successful!!!");
}
if (-1 == send(connectfd, msg, sizeof(msg_t), 0))
{
perror("fail to send");
exit(-1);
}
return;
}
client.c文章来源地址https://www.toymoban.com/news/detail-405925.html
//用户注册函数
void do_register(int socketfd, msg_t *msg)
{
//指定操作码
msg->type = REGISTER;
//输入用户名
printf("input your name:");
scanf("%s", msg->name);
//输入密码
printf("input your password:");
scanf("%s", msg->data);
//发送数据
if (-1 == send(socketfd, msg, sizeof(msg_t), 0))
{
p
到了这里,关于基于数据库及TCP网络编程实现的电子词典的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!