基于udp的云词典项目

一、效果实现

在这里插入图片描述

二、框架搭建

客户端:通过while+switch case 搭建的基本框架,通过用户输入选项,进行相应的功能匹配。由于涉及到两个菜单,所以设置了flag来决定使用哪一个菜单,当用户成功登录后,对flag进行改变,进而改变接下来出现的菜单以及进入的switch case。
服务端:也是通过while+switch case 搭建的基本框架,通过循环接收、匹配消息类型,进入到相应的功能。
在这里插入图片描述

三、类型定义

构造了一个结构体,包含消息类型(type)、用户名(name)、密码(passd)、以及用来传递单词、解释、各种提示的content。然后是建立枚举,在switch时代替具体数字,让代码更具可读性。
在这里插入图片描述

四、具体实现

1. 客户端注册

用户输入用户名和密码,设置消息类型,将数据传递给服务端.
在这里插入图片描述

2. 服务端处理注册

服务端接收到数据,判断消息为注册处理,进入相应功能。首先将用户姓名去和数据库中的用户表进行匹配,根据用户存在与否,发送不同消息提示,如果是新用户,将用户信息插入到用户表中,同时创建该用户的用户记录表,存储用户查询的记录。
在这里插入图片描述

3. 客户端登录

用户登录和前面注册差不多,用户输入名字和密码,设置号消息类型,然后发给服务端。阻塞等待服务端回信。登录成功时,将flag改变,切换到功能菜单。
在这里插入图片描述

4. 服务端处理登录

服务端接收数据后,分析消息类型,进入到相应功能。首先将登录信息去和数据库中的用户表进行匹配,根据匹配成功与否,进行相应提示,比如没有该用户、密码错误、登录成功。登录成功后,保存用户名,为后面查询单词和查找记录时用。
在这里插入图片描述

5. 客户端查询

用户输入查询内容,设置消息类型后发送给服务端,阻塞等待服务端发送查询结果。如果输入的是“#”,则退出查询,返回到功能菜单操作。接收到信息后,打印解释。
在这里插入图片描述

6. 服务端处理查询

打开字典文件,循环读取字典里的每一行,每次读取,将读取内容和用户查询数据进行对比,对比字符数为查询的字符数。匹配成功则将时间和单词存储到用户历史表中,同时返回相应解释。
在这里插入图片描述

7. 客户端记录

发送消息类型给服务端,循环接收、打印服务端发来的用户历史,当没有记录或者打印结束时,进行相应提示。
在这里插入图片描述

8. 服务端处理记录

服务端查询数据库中的用户历史表,将所有记录发送给客户端,如果没有记录或发送结束时,发送相应提示信息。
在这里插入图片描述


问题总结

  1. 一开始想的用链表,没有用数据库,后来写到一半了,才决定用数据库,浪费了很多时间,提前想好实现流程和数据存储太重要了。不然后面各种问题不断。
  2. 函数返回值为空时,return后面经常不自觉的写-1。
  3. Strcpy和strcmp写着写着写混了。
  4. 服务端有一个case下面忘记写break,所以在查询单词时会把用户记录打印出来,百思不得其解,又没忘case这个地方想,浪费很多时间。
  5. 查询时需要将时间和单词存储到用户记录表中,可是客户端又没给传名字,所以存储时没法存储。想到了在用户登录那一步,设置全局变量提前保存用户名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值