大家好,今天小编来为大家解答qq网站php源码分享这个问题,qq网站代码很多人还不知道,现在让我们一起来看看吧!
本文为php中文网认证作者:“易达”投稿,欢迎加入php中文网有偿投稿计划!
问题:
使用面向对象编程的方式实现以下业务逻辑:
1.张三使用账号a,密码b登录了qq
2.显示出张三最后的登录的时间
3.张三查看了1小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
4.输出张三看到的这些信息
5.突然张三收到好友李四的信息:信息叫:张三,我是李四,你在干嘛(张三创建了一个好友组,里面有好友李四)
6.张三回复李四:我在想你呀
首先我们来分析一下
1、流程分析
1.张三使用账号a,密码b登录了qq
2.显示出张三最后的登录的时间
3.张三查看了1个小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
4.输出张三看到的这些信息
5.李四发送消息给张三,信息为:张三,我是李四,你在干嘛
6.张三发送消息给李四,信息为:我在想你呀
2、功能分析:
1.识别对象
QQ会员,QQ会员登录信息,QQ会员消息,QQ会员群,QQ会员和群的关系(一对多)
2.识别对象的属性
QQ会员:
属性:id,姓名,账号,密码
QQ会员登录信息:(一个会员可以多次登录,有多条登录记录)
属性:id,会员id,登录时间
QQ会员消息:属性:id,内容,发送时间,发送人,接收人,状态(已读,未读),查看时间
QQ会员群:属性:id,创建会员,群名称,群的创建时间
QQ会员和群的关系:(这种关系也是一个类,也可以产生很多的实例)
属性:id,user_id,group_id,create_time
3.识别对象的方法
QQ会员:
方法:
1.登录,
2.查看消息
3.发送消息
QQ会员登录信息:
1.保存会员的登录信息
2.获取用户最后的登录信息
QQ会员消息:
方法:修改状态(可以被修改为已读),获取会员消息,添加会员消息
QQ会员群:
方法:1.获取所有的群2.创建群(张三查看行政部门群,说明这个群肯定是被某个人创建的)
QQ会员和群的关系:
方法:1.根据会员查看她所有的群=获取会员所有的群
2.根据一个群,可以查看这个群里的所有成员
3、数据库分析:
1.QQ会员:其中属性对应的就是表中的字段
2.QQ会员消息:其中属性对应的就是表中的字段
3.QQ会员群:其中属性对应的就是表中的字段
4.QQ会员和群的中间表:因为一个会员可以从属于多个会员群,所以需要有张这个表
字段:id,会员id,群id,入群时间
5.QQ会员登录信息列表
分析完成后,我们来具体的操作
1、创建数据库,初始化数据
创建数据库,名字我们尽量通俗易懂点好,就叫做qq
创建表qq_group表会员组
创建表qq_msg消息表
创建表qq_user会员表
创建表qq_user_group_relation会员和组的关系表
创建表qq_user_login_record会员登录信息记录表
初始化数据,哪些是项目的启动数据呢
1、会员有张三,李四,王五,他们分别有账号密码
2、有2个组行政部门群组,好友组
3、张三创建了行政部门群,张三,李四,王五都在该群里
4、张三还创建了好友组,里面有李四
接下里我们把这些数据填入数据库中
1、会员有张三,李四,王五,他们分别有账号密码(qq_user)
2、有2个组行政部门群组,好友组(qq_group)
3、张三创建了行政部门群,张三,李四,王五都在该群里
4、张三还创建了好友组,里面有李四(qq_user_group_relation)
为了让行政群里能有消息,我们先试着在消息表里添加一条记录
2、创建类,实现类
根据分析,我们应该至少要创建5个类,但是所有的类都需要数据库连接,所以我们可以单独创建一个数据库类,所以有6个类需要创建
为了方便管理,我们把这些类都放到model目录中
model/Mysql.class.php
<?php
//数据库连接类
classMysql{
//属性:id,姓名,账号,密码,登录时间
public$link=&34;;//id
publicfunction__construct(){
//创建连接
$this->init();
}
publicfunction__destruct(){
//销毁数据库连接
if($this->link){
mysqli_close($this->link);
}
}
//创建连接,初始化连接
publicfunctioninit(){
//创建连接
$config=Array(
&34;=>&39;,
&34;=>&34;,
&34;=>&34;,
&34;=>&34;,
&34;=>&34;
);
$this->link=mysqli_connect($config[&39;],$config[&39;],
$config[&39;],$config[&39;]);
}
}
?>
model/Group.class.php
<?php
require_once&34;;
classGroup{
//属性:id,创建会员,群名称,群的创建时间
public$id=&34;;
public$userid=&34;;
public$groupName=&34;;
public$createTime=&34;;
public$mySql=&34;;
public$tableName=&34;;
publicfunction__construct(){
$this->mySql=newMySql();
}
//1.获取所有的群
//如果不指定具体的创建人,可以获取所有的群
publicfunctiongetAll($creatorUserId=&39;){
//创建连接
$conn=$this->Mysql->link;
//写sql,执行sql
$where=&34;;
if(!empty($userid)){
$where.=&34;.$creatorUserId;
}
$sql=&34;;
//执行sql
$result=mysqli_query($conn,$sql);
//获取数据
//$list=mysqli_fetch_all($result);
$list=Array();
while($row=mysqli_fetch_assoc($result)){
$list[]=$row;
}
//end
//返回数据
return$list;
}
//2.创建群留给同学些,课上就不写了,因为目前的最终效果不需要呈现,默认已经是张三创建好了
publicfunctioncreate(){
echo&34;;
}
}
?>
Message.class.php
<?php
require_oncedirname(__FILE__).&34;;
//会员消息类
classMessage{
//属性:id,内容,发送时间,发送人,接收人,状态(已读,未读),查看时间
public$id=&34;;
public$content=&34;;
public$sendTime=&34;;
public$sendUserId=&34;;
public$toUserId=&34;;
public$status=&34;;
public$readTime=&34;;
public$mySql=&34;;
public$tableName=&34;;
publicfunction__construct(){
$this->mySql=newMySql();
}
//方法:修改状态(可以被修改为已读),查看消息,发送消息
publicfunctionupdateStatus($id,$status){
//创建连接
$conn=$this->mySql->link;
//写sql,执行sql
$sql=&34;;
//执行
$result=mysqli_query($conn,$sql);
if($result){
returntrue;
}else{
returnfalse;
}
}
//查看会员消息列表
publicfunctiongetMsgList($userid,$type,$startTime,$endTime,$groupId){
//创建连接
$conn=$this->mySql->link;
//写sql,执行sql
$where=&34;;
if($type!=&34;){//这里特别注意不能直接写!empty,会导致0的情况考虑不进来而0表示未读
$where.=&34;.$type;
}
if(!empty($startTime)&&!empty($endTime)){
//判断时间
$where.=&34;;
}
if($groupId){
$where.=&34;.$groupId;
}
$sql=&34;;
//执行
$result=mysqli_query($conn,$sql);
//获取数据
//returnmysqli_fetch_all($result);
$list=Array();
while($row=mysqli_fetch_assoc($result)){
$list[]=$row;
}
return$list;
}
//添加消息
publicfunctionadd($userid,$content,$toUserId,$groupId){
//创建连接
$conn=$this->mySql->link;
//写sql,执行sql
$sql=&39;{$content}&34;.time().&34;.$groupId.&34;;
//执行
$result=mysqli_query($conn,$sql);
if($result){
returntrue;
}else{
returnfalse;
}
}
}
?>
model/User.class.php
<?php
//引入UserLoginInfo
require_once&34;;
require_once&34;;
require_once&34;;
classUser{
//属性:id,姓名,账号,密码,登录时间
public$id=&34;;//id
public$name=&34;;//姓名
public$username=&34;;//账号
public$password=&34;;//密码
public$mySql=&34;;
public$tableName=&34;;
publicfunction__construct($id,$name,$username,$password){
//初始化对象
$this->id=$id;
$this->name=$name;
$this->username=$username;
$this->password=$password;
$this->mySql=newMySql();
}
publicfunctionlogin($inputUsername,$inputPassword){
//登录逻辑
//判断用户名和密码是否正确
if($inputUsername!=$this->username||
$inputPassword!=$this->password){
returnarray(&34;=>&34;);
}
//登录成功
$logintime=time();
//echo$this->name.&34;.date(&39;,$logintime);
//将登录信息保存到数据库
$logininfo=newUserLoginInfo();
$result=$logininfo->save($this->id);
return$result;
}
//查看消息
publicfunctiongetMessage($startTime,$endTime,$groupId){
//查看消息相当于通过查看这个动作和消息进行了互动
//所以通过方法的调用来执行
$messageModel=newMessage();
return$messageModel->getMsgList($this->id,&39;,$startTime,$endTime,$groupId);
}
//发送消息相当于通过查看这个动作和消息进行了互动
publicfunctionsendMessage($content,$toUserId,$groupId){
//所以通过方法的调用来执行
$messageModel=newMessage();
return$messageModel->add($this->id,$content,$toUserId,$groupId);
}
}
?>
model/UserGroupRelation.class.php
<?php
require_once&34;;
classUserGroupRelation{
//属性:id,创建会员,群名称,群的创建时间
public$id=&34;;
public$userid=&34;;
public$groupName=&34;;
public$createTime=&34;;
public$mySql=&34;;
public$tableName=&34;;
publicfunction__construct(){
$this->mySql=newMySql();
}
//1.获取一个群里所有的会员根据群获取会员
publicfunctiongetUserList($groupid){
//创建连接
$conn=$this->mySql->link;
//写sql,执行sql
$sql=&34;;
//执行
$result=mysqli_query($conn,$sql);
//获取数据
//returnmysqli_fetch_all($result);
$list=Array();
while($row=mysqli_fetch_assoc($result)){
$list[]=$row;
}
return$list;
}
//2.根据某个会员获取他所有的群
publicfunctiongetGroupList($userid){
//创建连接
$conn=$this->mySql->link;
//写sql,执行sql
$sql=&34;;
//执行
$result=mysqli_query($conn,$sql);
//获取数据
//returnmysqli_fetch_all($result);
$list=Array();
while($row=mysqli_fetch_assoc($result)){
$list[]=$row;
}
return$list;
}
}
?>
model/UserLoginInfo.class.php
<?php
require_once&34;;
classUserLoginInfo{
//属性:id,会员id,登录时间
public$id=&34;;//id
public$userid=&34;;//姓名
public$loginTime=&34;;//登录时间
public$mySql=&34;;
public$tableName=&34;;
publicfunction__construct(){
$this->mySql=newMySql();
}
//方法:
publicfunctionsave($userid){
//添加用户登录记录
$logintime=time();
//保存到数据库
//创建连接
$conn=$this->mySql->link;
//写sql执行sql
$sql=&34;.$this->tableName.
&34;;
//执行
$result=mysqli_query($conn,$sql);
//这种增,删,改的动作返回的结果是一个数字1表示成功
if($result){
returntrue;
}else{
returnfalse;
}
}
//获取用户最后登录信息
publicfunctiongetLastLoginInfo($userid){
//创建连接
$conn=$this->mySql->link;
//写sql执行sql
$sql=&34;.$this->tableName.
&34;;
//执行
$result=mysqli_query($conn,$sql);
//获取数据
$lastLoginInfo=mysqli_fetch_assoc($result);
return$lastLoginInfo;
}
}
?>
3、写流程
创建index.php
<?php
//业务代码
require_once&34;;
require_once&34;;
require_once&34;;
require_once&34;;
//张三登录
$zhangsan=newUser(1,&34;,&34;,&34;);
////登录
$zhangsan->login(&34;,&34;);
echo$zhangsan->name.&34;;
//输出最后登录时间
$logininfoModel=newUserLoginInfo();
//获取最后登录信息
$lastLoginInfo=$logininfoModel->getLastLoginInfo($zhangsan->id);
$lastLoginTime=date(&34;,$lastLoginInfo[&39;]);
echo$zhangsan->name.&34;.$lastLoginTime.&34;;
//2.张三查看了1个小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
$startTime=strtotime(&34;);
$endTime=time();
$msglist=$zhangsan->getMessage($startTime,$endTime,1);//查看行为
echo&34;;
echo&34;;
//3.输出张三看到的这些信息
//print_r($msglist);
foreach($msglistas$msg){
echo&34;.$msg[&34;].&34;.$msg[&34;].&34;;
}
echo&34;;
//4.突然张三收到好友李四的信息:信息叫:张三,你在干嘛
//相当于是李四给张三发送了消息
$lisi=newUser(2,&34;,&34;,&34;);
$lisi->sendMessage(&34;,$zhangsan->id,2);
echo&34;;
//5.张三回复李四:我在想你呀
$zhangsan->sendMessage(&34;,$lisi->id,2);
echo&34;;
?>
运行结果如下:
张三使用账号a和密码b登录了张三最后登录时间为2020-06-0112:40:20张三查看了1小时内的行政部门群的信息张三看到的信息是【发送人id】:3【内容】:张三,我是王五李四发了信息给张三,说“张三,我是李四,你在干嘛”张三回复了李四,说“我在想你呀”
我们再来看数据库里的表有哪些变化
登录信息表数据增加了
消息表数据增加了
总结:
1、讲解了一个简单的qq会员登录聊天的场景
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!