Windows编程课设(C#)——基于WPF和.net的即时通讯系统(仿微信)

news2024/11/23 15:47:49

一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。

提供的服务

  1. 注册功能:用户通过手机号码进行账号的注册,每个手机号唯一对应一个用户,需要接收验证码进行手机的绑定。此外用户需要上传头像,设置用户名和密码等信息以完成注册功能。
  2. 登录功能:系统提供两种登录方式:一种采用手机号+密码的方式进行登录;一种通过 QQ 平台的 OAuth2 进行登录,即将用户与 QQ号进行关联,通过该方式不需要设置手机号码。
  3. 好友相关功能:a.用户可以通过搜索其他用户的手机号码,用户名等方式查找其他用户,并查看其他用户的信息。b.可以向用户发送好友添加请求,发送请求时可以携带验证信息,同时可以为该其设置一个备注名。被发送好友添加请求的用户可以选择接受或者拒绝该请求,如果接受请求则同样可以为好友设置备注名。c.用户可以删除好友,单方发出删除请求后后双方的好友关系同时解除。d.用户可以通过好友备注或者手机号码等对好友列表进行筛选,搜索好友。
  4. 聊天功能:a.用户可以与自己的好友进行聊天,发送文本消息。b.用户接收到消息之后会有未读消息数量的提示。c.用户可以进入群组中发送消息,群组会话中可以看到所有用户的用户名和头像。d.用户可以查看群组或者好友的所有聊天记录。
  5. 用户个人资料修改功能:用户可以修改自己的头像、用户名、个性签名、性别、邮箱以及所在地区等信息,对于账号 id、手机号码以及注册时间等信息则没有权限进行修改。
  6. 消息推送:当用户上线或下线时,都会将消息推送给所有的好友。
  7. AI 机器人功能:每个用户在完成注册之后都会分配得到一个属于自己的AI机器人,其具有专属于这个用户的上下文,用户可以与其交流,向其提问,或者对其进行训练已达到自己的预期。

运行说明

  1. 打开软件后首先进入登录界面,如果已经完成注册,则通过输入手机号码和密码进行登录,也可以使用QQ进行授权登录。如果未注册则可以点击注册账号按钮进入注册界面。

    image-20230608011840400
  2. 进入注册界面后,点击头像框的从本地选择图片作为头像,紧接着填写用户名、密码以及手机号码,用户名和密码会有长度的限制,而手机号码会进行合法性的校验。手机号码合法的情况下,点击获取验证码按钮之后,对应的手机号就可以收到验证短信。接着填写验证码之后就可以点击注册按钮完成注册。

    image-20230608012107352
  3. 注册成功之后会自动跳转到登录界面,接着输入注册的手机号码和密码之后点击登录(或键入回车键)就可以进入主界面。用户在注册后系统会自动添加一个名为 Robot的AI好友,可以通过在消息框输入内容后点击发送按钮或键入回车键发送消息与其进行对话。

    image-20230608012240341
  4. 用户也可以点击添加按钮进入添加好友界面,通过输入用户名搜索其他用户(支持模糊查询)。

    image-20230608012514776

    image-20230608012537088

  5. 用户可以点击查询结果项进入用户的个人资料界面查看用户相关信息。

image-20230613182431662

  1. 如果想要添加用户则通过点击+号按钮,进入好友请求界面。在该界面可以通过点击用户名后的铅笔按钮为用户设置备注名,同时填写验证消息,最后通过点击发送请求按钮来发送好友请求。

    image-20230608013003891

    image-20230608013014916

  2. 另一个用户可以通过点击好友请求按钮进入好友请求列表界面,查看发送给自己的添加好友请求。可以通过点击√按钮来接受请求,也可以通过点击×按钮来拒绝请求。之后同样可以通过点击用户名后面的铅笔按钮为好友设置备注名。

    image-20230608013238301

    image-20230608013255018

  3. 接受请求之后双方便成为好友关系,并且可以在各自的好友列表中看到对方的存在。好友列表会有一个带颜色的圆圈表示用户状态,绿色表示用户在线,灰色表示用户离线。用户可以点击好友来进入与其的会话框,之后即可以与好友进行通讯。用户还可以点击群聊按钮进去群聊列表,之后同样可以选择一个群聊进行通讯。

    image-20230608013607364

    image-20230608013738335

  4. 用户可以通过列表上访的搜索框进行搜索,如果当前是在好友列表则搜索显示匹配的好友;如果当前切换到了群组列表,则搜索显示出匹配的群组。

  5. 用户还可以通过点击上方的房子形状的按钮进入个人主页。在该界面中用户可以通过点击铅笔按钮进入修改模式,点击之后用户可以上传头像,修改用户名、个性签名、性别、邮箱号、所在地区等信息,对于账号,手机号码和注册时间等信息则无法进行修改。修改完成之后点击Save则完成保存并且同步渲染到主界面,如果点击Cancel则会将所有信息重置到修改以前。

image-20230613182519003

  1. 用户通过右键指定的好友可以唤起一个菜单,其中可以选择显示好友资料或者删除好友。如果点击删除好友则会弹出提示框询问是否确认操作,在确认删除之后则会解除双方的好友消息,同时将双方从对方的好友列表中移除,此外被删除方还会收到被对方删除的提示消息。

    image-20230608014346891

    image-20230608014409209

  2. 当用户进入主界面之后,点击界面右上方的x按钮并不会退出软件,而只是最小化到系统托盘。如果用户想真正退出程序,应该通过右键系统托盘选择退出项进行退出。

image-20230608014609622 ## 环境准备
  1. 数据库准备:需要先运行MySQL脚本,进行数据库表的创建
  2. 服务器准备:修改Server项目中的application.xaml文件,配置OAuth2授权平台的相关信息以及项目的端口等信息后启动服务端。(其中第三方授权依赖引入自我的阿里云私服,Maven无法直接下载,可前往我的Github:openauth-spring-boot-starter进行下载)
  3. 客户端准备:进入App.xaml.cs文件配置服务端的IP地址,同时在HttpUtil工具类中接入AI机器人接口、短信验证服务接口等,正确地配置SocketUtil中的连接。

项目源码

WPF-IM:Ken-Chy129/WPF-IM: 一款参考QQ、微信的即时通讯软件。采用CS结构,客户端基于.Net与WPF开发,服务端使用Java开发。 (github.com)

引用到的依赖:

  1. OAuth2登录脚手架:Ken-Chy129/openauth-spring-boot-starter: 基于OAuth2的第三方授权登录脚手架,轻量且方便,支持自定义扩展 (github.com)
  2. Ken-Chy129/OpenAuth: 基于OAuth2的第三方授权登陆组件,目前已集成Github、Gitee以及QQ等第三方平台的授权登录,具有高度封装,使用简单,易扩展等优点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

强化学习笔记-0910 On-policy Method with Approximation

前几章我们所讨论的强化学习方法都是将价值函数建模为一个table形式,通过状态来查询具体状态的价值。但是当状态-动作空间极大,且多数状态-动作并没有太大意义时,这种table查询效率是极低的。 因此本节是将价值函数建模为一个参数模型&#…

修改文件权限chown/chgrp/chmod【Linux】

文章目录 Linux当中的权限问题Linux权限的概念切换用户账号 Linux权限管理文件类型和访问权限(事物属性) Linux文件名后缀文件权限值的表示方法 文件访问权限的相关设置方法如何改变文件的访问权限如何改变文件的拥有者如何改变文件的所属组如何修改文件…

leetcode 152.乘积最大子数组

题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 来源:力扣&a…

从2PC和容错共识算法讨论zookeeper中的Create请求

大家好,我是方圆。最近在读《数据密集型应用系统设计》,其中谈到了zookeeper对容错共识算法的应用。这让我想到之前参考的zookeeper学习资料中,误将容错共识算法写成了2PC(两阶段提交协议),所以准备以此文对…

Speech | 提取语音(数据集)的语音特征合集

本文主要讲解了提取数据集的一些主要工具,以及如何使用这些工具,包含安装以及运行命令。 提取语音(数据集)的语音特征工具(Extract audio features toolkits) • openSMILE • COVAREP • ESPNet • YAAF…

Java集合框架:链表和LinkedList详解

目录 一、ArrayList的缺陷 二、链表(主要介绍不带头的非循环的 单链表 / 双链表) 注: 三、模拟链表的实现: MySingleList(单链表) MyLinkedList(双链表) 四、LinkedList的使用 …

HNU计算机体系结构-实验一:RISC-V指令理解

HNU计算机体系结构-实验一 前言1.实验目的2.实验步骤1.安装模拟器Ripes2.生成汇编指令3.思考问题1)指令add x15, x14, x152)指令bge x15 x14 -683)指令lw x15, -20 x84)指令sw x15, -20 x85)简述BranchE信号的作用6&am…

通达信筹码集中度计算公式,解决了结果不同的问题

筹码分布图基本上是国内股票交易软件的标配,一般在K线图窗口的右侧。通达信软件中,在右下角有个“筹”,点击之后就可以看到“筹码分布图”。(如下图)筹码分布图是根据一定的模型计算出的流通股票持仓成本分布情况&…

postman接口关联实战解析

在使用postman做接口测试时,有时候后面的接口需要获取前面接口的某一个返回值做为请求参数,这时就可以使用关联。 如从A接口提取出a字段的值,供B接口的b字段使用。 一个接口的返回报文如下: {"retCode": "0&quo…

【数据库原理与实践】知识点归纳(上)

第1章 数据库系统概述 (数据处理技术的发展 数据库的基本概念和特点) 一:数据、信息、知识、决策 对应:Data、Information、Knowledge、Decision 二:数据库技术的产生与发展 产生原因:数据管理任务的…

如何正确使用Postman变量?又该如何灵活设置变量?

目录 引言 理解变量 postman的变量类型 变量作用域 变量覆盖规则 创建变量 创建全局变量 创建环境变量 创建集合变量 使用变量 引言 Postman变量可以帮助你快速生成测试数据、模拟不同的场景和环境。 但是,如何正确使用Postman变量?又该如何…

Android的服务Service

Android学了太久了,都忘了。复习下四大组件之一的Service。 介绍 Android的Service是一种在后台执行长时间运行操作的组件,它可以在没有用户界面的情况下执行任务,并且可以与应用程序的其他组件进行通信。Service通常用于处理网络请求、音乐…

快速创建Django项目

环境搭建 安装Django之前需要先安装python环境和pycharm。 目前 Django 1.6.x 以上版本已经完全兼容 Python 3.x。 python安装教程:https://blog.csdn.net/David_house/article/details/100110542 项目创建 打开pycharm,选择文件–>新建项目 创建D…

MySQL操作基础

文章目录 一、Mysql的基本概念1.1数据库有哪些组成数据表数据库 1.2数据库系统和数据库管理系统1.3数据库的发展史 二、数据库的分类三、数据库的数据类型三、数据库的操作3.1查看数据库的结构3.2创建及删除数据库和表3.3管理表中的数据记录3.4修改表名和表结构 Linux操作系统&…

11.JavaWeb-Spring框架

1.Spring概念 Spring框架是一个轻量级开源的应用程序框架,用于开发Java企业级应用程序。它提供了一种综合的编程和配置模型,可以帮助开发人员构建灵活、可扩展且易于维护的应用程序。 Spring的根本使命:简化Java开发 【Spring给予了Java新生】…

文心一言 VS 讯飞星火 VS chatgpt (40)-- 算法导论5.4 4题

四、一次聚会需要邀请多少人,才能让其中 3 人的生日很可能相同? 文心一言: 为了解决这个问题,我们需要先计算出所有可能的生日组合数,然后计算出其中生日相同的组合数。 已知需要邀请的人数为:23人 根据组合数公式…

大数据开发之Hive案例篇12:HDFS rebalance 一例

文章目录 一. 问题描述二. 解决方案2.1 增加节点2.2 rebalance2.3 rebalance引发的问题 一. 问题描述 公司的离线数仓是CDH集群,19个节点,HDFS存储空间大约400TB左右,使用量在200TB左右。 由于历史遗留的问题,数据仓库需要重构&a…

将Qtcreator编译器、调试器等配置为MSVC2017/2019

目录 1. 前言 2. 工具/原料 2.1. 安装Windows下的软件开发调试器 3. 配置Qtcreator 1. 前言 安装Qt或Qtcreator时,一般选择MinGW 64-bit或MSVC编译器。对于MinGW 64-bit很简单,一般安装后会自动在Qtcreator配置好,不用费心就可以进行开发…

一种对不同类型齐格勒-尼科尔斯 P-I-D 控制器调谐算法研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于NIM_DUILIB_FRAMEWORK框架的网易云信demo:NIM_PC_DEMO

NIM_PC_DEMO 网易云信 PC IM Demo 是基于网易云信 PC SDK 制作的即时通讯示例程序,UI 库使用 NIM Duilib 制作。 github地址:。 1、预览 2、最低要求 CMake 3.10 或以上版本。Visual Studio 2017 或以上版本。Git。 3、开发步骤 NIM Demo 从 8.4.0 版本开始使…