使用面向对象编程的方式实现以下业务逻辑:
3. 张三查看了 1小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
4. 输出张三看到的这些信息
5. 突然张三收到好友李四的信息:信息叫:张三,我是李四,你在干嘛(张三创建了一个好友组,里面有好友李四)
6. 张三回复李四:我在想你呀
首先我们来分析一下
1、流程分析
3.张三查看了 1个小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主)
4.输出张三看到的这些信息
5.李四发送消息给张三,信息为:张三,我是李四,你在干嘛
6.张三发送消息给李四,信息为:我在想你呀
2、功能分析:
1.识别对象
QQ会员,QQ会员登录信息,QQ会员消息,QQ会员群, QQ会员和群的关系(一对多)
2.识别对象的属性
QQ会员:
QQ会员消息:属性:id,内容,发送时间,发送人,接收人,状态(已读,未读),查看时间
QQ会员和群的关系:(这种关系也是一个类,也可以产生很多的实例)
属性:id,user_id,group_id,create_time
3.识别对象的方法
QQ会员:
方法:
1.登录 ,
2.查看消息
3.发送消息
QQ会员登录信息:
1.保存会员的登录信息
QQ会员消息:
方法:修改状态(可以被修改为已读),获取会员消息,添加会员消息
QQ会员群:
方法:1.获取所有的群 2.创建群(张三查看行政部门群,说明这个群肯定是被某个人创建的)
QQ会员和群的关系:
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目录中
<?PHP //数据库连接类 class MysqL{ //属性:id,姓名,账号,密码,登录时间 public $link = ;//id public function __construct(){ //创建连接 $this->init(); } public function __destruct(){ //销毁数据库连接 if( $this->link ){ MysqLi_close($this->link); } } //创建连接,初始化连接 public function init( ){ //创建连接 $config = Array( type=>'MysqL', hostname=>127.0.0.1, database=>qq, username=>root, password=>root ); $this->link = MysqLi_connect($config['hostname'],$config['username'], $config['password'],$config['database']); } } ?>
model/Group.class.PHP
<?PHP require_once MysqL.class.PHP; class Group{ // 属性:id,创建会员,群名称,群的创建时间 public $id = ; public $userid = ; public $groupName = ; public $createTime = ; public $MysqL = ; public $tableName = qq_user_group; public function __construct(){ $this->MysqL = new MysqL(); } //1.获取所有的群 //如果不指定具体的创建人,可以获取所有的群 public function getAll($creatorUserId=''){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $where = ; if( !empty($userid) ){ $where .= creator_user_id=.$creatorUserId; } $sql = select * from {$this->tableName} where 1=1 and {$where}; //执行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.创建群 留给同学些,课上就不写了,因为目前的最终效果不需要呈现,默认已经是张三创建好了 public function create(){ echo 创建了群; } } ?>
Message.class.PHP
<?PHP require_once dirname(__FILE__)./MysqL.class.PHP; // 会员消息类 class Message{ //属性:id,内容,发送时间,发送人,接收人,状态(已读,未读),查看时间 public $id = ; public $content = ; public $sendTime = ; public $sendUserId = ; public $toUserId = ; public $status = ; public $readTime = ; public $MysqL = ; public $tableName = qq_msg; public function __construct(){ $this->MysqL = new MysqL(); } // 方法:修改状态(可以被修改为已读),查看消息,发送消息 public function updateStatus($id,$status){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $sql = update {$this->tableName} set status={$status} where id={$id}; //执行 $result = MysqLi_query($conn,$sql); if( $result ){ return true; }else{ return false; } } //查看会员消息列表 public function getMsgList($userid,$type,$startTime,$endTime,$groupId){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $where = to_user_id={$userid} ; if( $type !=){//这里特别注意不能直接写!empty,会导致0的情况考虑不进来 而0表示未读 $where .= and status=.$type; } if( !empty($startTime) && !empty($endTime) ){ //判断时间 $where .= and create_time between {$startTime} and {$endTime}; } if( $groupId ){ $where .= and group_id = .$groupId; } $sql = select * from {$this->tableName} where {$where}; //执行 $result = MysqLi_query($conn,$sql); //获取数据 // return MysqLi_fetch_all($result); $list = Array(); while( $row=MysqLi_fetch_assoc($result) ){ $list[] = $row; } return $list; } //添加消息 public function add($userid,$content,$toUserId,$groupId){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $sql = insert into {$this->tableName} (content,create_time,send_user_id, to_user_id,status,read_time,group_id) values ('{$content}',.time().,{$userid}, {$toUserId},0,0,.$groupId.) ; //执行 $result = MysqLi_query($conn,$sql); if( $result ){ return true; }else{ return false; } } } ?>
model/User.class.PHP
<?PHP //引入UserLoginInfo require_once MysqL.class.PHP; require_once UserLoginInfo.class.PHP; require_once Message.class.PHP; class User{ //属性:id,姓名,账号,密码,登录时间 public $id = ;//id public $name = ;//姓名 public $username = ;//账号 public $password = ;//密码 public $MysqL = ; public $tableName = qq_msg; public function __construct($id,$name,$username,$password){ //初始化对象 $this->id = $id; $this->name = $name; $this->username = $username; $this->password = $password; $this->MysqL = new MysqL(); } public function login( $inputUsername,$inputPassword ){ //登录逻辑 //判断用户名和密码是否正确 if( $inputUsername != $this->username || $inputPassword !=$this->password){ return array(msg=>用户名或者账号错误); } //登录成功 $logintime = time(); // echo $this->name.使用账号:{$inputUsername}和密码{$inputPassword}登录了, // 登录时间为:.date('Y-m-d H:i:s',$logintime); //将登录信息保存到数据库 $logininfo = new UserLoginInfo(); $result = $logininfo->save($this->id); return $result; } //查看消息 public function getMessage($startTime,$endTime,$groupId){ //查看消息相当于通过查看这个动作和消息进行了互动 //所以通过方法的调用来执行 $messageModel = new Message(); return $messageModel->getMsgList($this->id,'',$startTime,$endTime,$groupId); } //发送消息相当于通过查看这个动作和消息进行了互动 public function sendMessage($content,$toUserId,$groupId){ //所以通过方法的调用来执行 $messageModel = new Message(); return $messageModel->add($this->id,$content,$toUserId,$groupId); } } ?>
model/UserGroupRelation.class.PHP
<?PHP require_once MysqL.class.PHP; class UserGroupRelation{ // 属性:id,创建会员,群名称,群的创建时间 public $id = ; public $userid = ; public $groupName = ; public $createTime = ; public $MysqL = ; public $tableName = qq_user_group_relation; public function __construct(){ $this->MysqL = new MysqL(); } //1.获取一个群里所有的会员 根据群获取会员 public function getUserList($groupid){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $sql = select * from {$this->tableName } where group_id={$groupid}; //执行 $result = MysqLi_query($conn,$sql); //获取数据 // return MysqLi_fetch_all($result); $list = Array(); while( $row=MysqLi_fetch_assoc($result) ){ $list[] = $row; } return $list; } //2.根据某个会员获取他所有的群 public function getGroupList($userid){ //创建连接 $conn = $this->MysqL->link; //写sql,执行sql $sql = select * from {$this->tableName } where user_id={$userid}; //执行 $result = MysqLi_query($conn,$sql); //获取数据 // return MysqLi_fetch_all($result); $list = Array(); while( $row=MysqLi_fetch_assoc($result) ){ $list[] = $row; } return $list; } } ?>
model/UserLoginInfo.class.PHP
<?PHP require_once MysqL.class.PHP; class UserLoginInfo{ //属性:id,会员id,登录时间 public $id = ;//id public $userid = ;//姓名 public $loginTime = ;//登录时间 public $MysqL = ; public $tableName = qq_user_login_record; public function __construct(){ $this->MysqL = new MysqL(); } //方法: public function save( $userid ){ //添加用户登录记录 $logintime = time(); //保存到数据库 //创建连接 $conn = $this->MysqL->link; //写sql执行sql $sql = insert into .$this->tableName. (user_id,login_time) values({$userid}, {$logintime} ); //执行 $result = MysqLi_query($conn,$sql); //这种增,删,改的动作返回的结果是一个数字 1表示成功 if( $result ){ return true; }else{ return false; } } //获取用户最后登录信息 public function getLastLoginInfo($userid){ //创建连接 $conn = $this->MysqL->link; //写sql执行sql $sql = select * from .$this->tableName. where user_id={$userid} order by id desc limit 2; //执行 $result = MysqLi_query($conn,$sql); //获取数据 $lastLoginInfo = MysqLi_fetch_assoc($result); return $lastLoginInfo; } } ?>
3、写流程
创建index.PHP
<?PHP //业务代码 require_once model/Message.class.PHP; require_once model/User.class.PHP; require_once model/UserGroupRelation.class.PHP; require_once model/UserLoginInfo.class.PHP; //张三登录 $zhangsan = new User(1,张三,a,b); // //登录 $zhangsan->login(a,b); echo $zhangsan->name.使用账号a和密码b 登录了<br/><br/>; //输出最后登录时间 $logininfoModel = new UserLoginInfo(); //获取最后登录信息 $lastLoginInfo = $logininfoModel->getLastLoginInfo($zhangsan->id); $lastLoginTime = date(Y-m-d H:i:s,$lastLoginInfo['login_time']); echo $zhangsan->name.最后登录时间为.$lastLoginTime.<br/><br/>; // 2.张三查看了 1个小时内的行政部门群的信息(这个群里有张三,李四,王五,其中张三是群主) $startTime= strtotime(-1 hour); $endTime = time(); $msglist = $zhangsan->getMessage($startTime,$endTime,1);//查看行为 echo 张三查看了 1小时内的行政部门群的信息<br/><br/>; echo <b>张三看到的信息是</b></br/><br/>; //3.输出张三看到的这些信息 // print_r($msglist); foreach( $msglist as $msg ){ echo 【发送人id】:.$msg[send_user_id].【内容】:.$msg[content].<br/>; } echo <br/><br/>; //4.突然张三收到好友李四的信息:信息叫:张三,你在干嘛 //相当于是李四给张三发送了消息 $lisi = new User(2,李四,lisi,123456); $lisi->sendMessage(张三,我是李四,你在干嘛,$zhangsan->id,2); echo 李四发了信息给张三,说“张三,我是李四,你在干嘛”<br/><br/>; //5.张三回复李四:我在想你呀 $zhangsan->sendMessage(我在想你呀,$lisi->id,2); echo 张三回复了李四,说“我在想你呀”; ?>
运行结果如下:
张三使用账号a和密码b 登录了
张三最后登录时间为2020-06-01 12:40:20
张三查看了 1小时内的行政部门群的信息
张三看到的信息是
【发送人id】:3【内容】:张三,我是王五
李四发了信息给张三,说“张三,我是李四,你在干嘛”
张三回复了李四,说“我在想你呀”
我们再来看数据库里的表有哪些变化
消息表数据增加了
总结:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。