




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据库课程设计说明书数据库系统课程设计报告题目:天下Movie微信公众号课程代号: 0686416 课程名称:数据库系统课程设计学号:_ _姓名:_ _ 完成日期:2016年10月29号第一章 引言1.1设计开发的意义2016年是社交网络爆发的一年,手机则是社交网络重要的通信工具,而微信是手机成为重要工具中主要的一部分。我们针对微信平台开发微信公众号的开发是为了让学生的编程技术顺应时代潮流,不拘泥于课本知识,了解现实社会生活中客户需求,更好的提高自己的技术。同时,也从编程角度深刻感受到了社交网络带给我们的便利。我们的选题其中主要内容展示是电影。电影市场在2016年由疯狂趋于理性,大家更注重于电
2、影的质量,所以我们选择了“天下Movie”这样的课题,既能提升我们的编程水平,又能贴近生活,服务大家。1.2任务及目标项目的提出者:天津理工大学计算机与通信工程学院课题开发组。开发单位:13级中加6班项目小组。任务:建立一个服务电影爱好者的微信公众号,在新浪云建立后台数据库,响应微信公众号的请求。目标:微信公众号可以实现电影的搜索,电影查询,留影评。主要功能:电影搜索功能;电影排行榜查询功能;留影评。可用性:很高,基本满足需求。安全性:很高,云端数据库只有我们2个人才能操作。注册用户只能对自己部分数据进行修改删除等操作。可维护性:云端维护,有网即可,比较方便。可跨平台性:移植性较强。可针对不同
3、要求的微信公众号。1.3开发环境操作系统:windows 10编译环境:使用html,CSS,微信测试号进行UI开发使用Mysql进行数据库管理第二章 系统分析与设计2.1系统需求分析2.1.1 处理需求1 用户订阅我们的微信公众号,公众号自动表示感谢;2 用户点击微信公众号菜单栏进行电影搜索和电影排行查询;3 用户点击微信公众号菜单栏登录微网站进行留影评,并对影评经行增删改查等操作;4 用户点击微信公众号菜单栏,公众号自动回复消息:加入我们的微信群,并提供群二维码;2.1.1 数据流图2.1.2 数据字典m_movie表欄位型態Null預設值註解movieIDint(11)否电影idmovi
4、evarchar(255)否电影名datedate否发行日期countryvarchar(255)否国家lengthvarchar(255)否时长scorefloat否评分intromediumtext是NULL简介awardmediumtext是NULL所获奖项moviepicvarchar(255)是NULL电影图片m_dist表欄位型態Null預設值註解distIDint(11)否发行商iddistvarchar(255)否发行商名m_dist_m表欄位型態Null預設值註解movieIDint(11)否电影iddistIDint(11)否发行商idm_dire表欄位型態Null預設值註
5、解direIDint(11)否导演iddirevarchar(255)否导演名m_dire_m表欄位型態Null預設值註解movieIDint(11)否电影iddireIDint(11)否导演idm_class表欄位型態Null預設值註解classIDint(11)否类型idclassvarchar(255)否类型m_class_m表欄位型態Null預設值註解movieIDint(11)否电影idclassIDint(11)否类型idm_actor表欄位型態Null預設值註解actorIDint(11)否演员idactorvarchar(255)否演员名m_act_m表欄位型態Null預設值註
6、解movieIDint(11)否电影idactorIDint(11)否演员idc_user表欄位型態Null預設值註解userIDint(255)否用户idusernamevarchar(255)否用户名passwordvarchar(255)否密码emailvarchar(255)是NULL邮箱c_comm表欄位型態Null預設值註解commIDint(11)否留言iduserIDint(11)否用户idtimedatetime否最后更新时间titletext否标题commtext否留言内容2.2 数据库概念结构设计E-R图2.3数据库逻辑结构设计电影电影id,电影名,发行日期,国家,时长,
7、评分,简介,所获奖项,相关图片演员演员id,演员名演员对应演员id,电影id导演导演id,导演名导演对应导演id,电影id发行商发行商id,发行商名发行商对应发行商id,电影id类型类型id,类型名类型对应类型id,电影id用户信息用户id,用户名,密码,邮箱留言信息留言id,用户id,最后更新时间,标题,留言内容2.4 数据库物理结构设计m_movie表m_dist表m_dist_m表m_dire表m_dire_m表m_actor表m_act_m表m_class表m_class_m表c_comm表c_user表2.5 功能图第三章 系统开发及实现3.1论述设计开发采用的技术及设计效果3.1.
8、1微信界面 功能:微信用户关注公众号,公众号向用户发送信息。以及菜单栏显示。界面设计效果:实现方法:在新浪云(SAE)端上传代码包index.php.zip,代码配置微信接口,实现微信公众号和新浪云数据库的链接。3.1.2电影区-搜电影 功能:点击电影去搜电影,进入电影搜索界面界面设计效果:实现:编写search.html,然后上传到新浪云端,在浏览器显示,用query.php链接新浪云的Mysql数据库去查寻具体电影名字。功能:展示具体电影的内容界面设计效果:实现:编写concent.html,然后上传到新浪云端,在浏览器显示,用conn.php调用数据库显示出要查找电影的具体内容。3.1.
9、3电影区-查询排行榜 功能:实现电影按照排行榜进行查询,可以按类型,可以按评分和年代进行排序。界面设计效果:实现:编写list.php,然后上传到新浪云端,在浏览器显示出要查找电影的具体内容。3.1.3互动区-评电影功能:用户的注册登录界面设计效果:实现:编写login.html和login.php实现用户的注册、登陆。用户登陆后调用loged.php使用户可以留言。3.1.4互动区-微信群功能:让微信公众号开发人员和用户有良好的互动界面设计效果:实现:在新浪云端的index.php文件中设置返回参数,用户点击查看全文即可看到我们的群二维码。第四章 总结这次课程设计学校安排了2周时间让我们完成
10、,我们选择了“电影推荐:微信公众号-天下Movie”的课题,并从图书管借了数据库程序设计、HTML设计、php的资料书,对课程设计中会遇到的问题提前做了些准备,并到网上也找相关的系统的代码看了下,对这个系统有了一定的全局观,完成了初步的需求分析。稍作细化后,便开始设计数据库。而后做了界面设计,完成了程序大部分的主要界面。我们从系统的功能、规模和实用方面考虑,采用HTML+Mysql技术。在数据库设计阶段:细致的考虑到了用户的全部需求,并用了大量的时间进行了信息的收集建立了比较完善的信息表;编码阶段:在设计接近完成的时候,我们对部分代码做了优化,对界面效果进行了调整。这次课程设计,我更加深入的了
11、解到软件工程的复杂性,以及前期规划分析的重要性。以及团队协作的重要性,决定在以后的学习中学习一些先进的思想,并多加实践,从写程序和软件架构两个方面都增强自己的能力。在编程中遇到了很多困难,我们在立项时候因为没有接触过微信开发,并不了解微信平台是需要开发权限的,使我们走了弯路;在UI设计时候,我们的界面功能经过了反复的修改,在一定程度上延缓了设计进程。网页显示在页面上回进行转码,与我们设想的有差别。我们没有使用响应式开发设计是我们的一大缺陷,这直接影响了用户体验。通过这次的数据库课程,我学会了在制作程序时应仔细谨慎,因为细小的错误都会导致程序的失败。另外老师还教会了我们,在制作一个系统时,要有自
12、己的思想,使自己制作的程序能锦上添花,做出属于自己的东西。我也会在以后的生活学习中尽量完善自己的工作,使自己做的更好!第五章 参考文献1 方倍工作室微信公众平台开发(58)自定义菜单方倍工作室 - 博客园2013-08-09 2菜鸟教程HTML/CSSw3cschool菜鸟教程 3美Robert W.Sebesta 著 马跃 李增民 李立新 译 Web程序设计(第7版) 清华大学出版社4 PHP官方网站 5 Jeffrey D.Ullman Jennifer Widom 著 数据库系统基础教程 机械工业出版社附录 1 conn.php<?php/连接数据库header("Con
13、tent-Type:text/html; charset=utf-8"); $con = mysqli_connect('','5xmwwlwnkw','zyjwkz4mhly005lm33i3jy010m0wzxky50mjhh5h','app_tianxiamovie');if (mysqli_connect_errno() printf("Connect failed: %sn", mysqli_connect_error(); exit();?>附录 2 index.php<?ph
14、p/* 数据库设计作业,新浪云连接微信公众号*/ define("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();if (!isset($_GET'echostr') $wechatObj->responseMsg();else $wechatObj->valid();class wechatCallbackapiTest public function valid() $echoStr = $_GET"echostr" if($this
15、->checkSignature() echo $echoStr; exit; private function checkSignature() $signature = $_GET"signature" $timestamp = $_GET"timestamp" $nonce = $_GET"nonce" $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpS
16、tr = sha1( $tmpStr ); if( $tmpStr = $signature ) return true; else return false; public function responseMsg() $postStr = $GLOBALS"HTTP_RAW_POST_DATA" if (!empty($postStr) $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->M
17、sgType); switch ($RX_TYPE) case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; default: $resultStr = "" break; echo $resultStr; else echo "" exit; private function receiveEvent($
18、object) $contentStr = "" switch ($object->Event) case "subscribe": $contentStr = "你好,欢迎订阅天下Movie!点击菜单栏的“电影区可以进行电影搜索和电影排行榜查询”,点击“互动区可以加入微信群和留影评哦!”/微笑" case "unsubscribe": break; case "CLICK": switch ($object->EventKey) case "微信群": $con
19、tentStr = array("Title" =>"微信群", "Description" =>"爱好电影小伙伴们欢迎你来!", "PicUrl" =>" "Url" =>" break; default: $contentStr = array("Title" =>"评电影", "Description" =>"大胆的发表您的评价吧",
20、"PicUrl" =>" "Url" =>" break; break; default: break; if (is_array($contentStr) $resultStr = $this->transmitNews($object, $contentStr); else $resultStr = $this->transmitText($object, $contentStr); return $resultStr; private function transmitText($object, $con
21、tent, $funcFlag = 0) $textTpl = "<xml><ToUserName><!CDATA%s></ToUserName><FromUserName><!CDATA%s></FromUserName><CreateTime>%s</CreateTime><MsgType><!CDATAtext></MsgType><Content><!CDATA%s></Content><Fu
22、ncFlag>%d</FuncFlag></xml>" $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content, $funcFlag); return $resultStr; private function transmitNews($object, $arr_item, $funcFlag = 0) /首条标题28字,其他标题39字 if(!is_array($arr_item) return; $itemTpl
23、 = " <item> <Title><!CDATA%s></Title> <Description><!CDATA%s></Description> <PicUrl><!CDATA%s></PicUrl> <Url><!CDATA%s></Url> </item>" $item_str = "" foreach ($arr_item as $item) $item_str .= spri
24、ntf($itemTpl, $item'Title', $item'Description', $item'PicUrl', $item'Url'); $newsTpl = "<xml><ToUserName><!CDATA%s></ToUserName><FromUserName><!CDATA%s></FromUserName><CreateTime>%s</CreateTime><MsgType>
25、<!CDATAnews></MsgType><Content><!CDATA></Content><ArticleCount>%s</ArticleCount><Articles>$item_str</Articles><FuncFlag>%s</FuncFlag></xml>" $resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, t
26、ime(), count($arr_item), $funcFlag); return $resultStr; ?>附录 3 search.html<!DOCTYPE ><html ><!-查找页面-><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>天下Movie</title><link href="css/searchstyle.c
27、ss" rel="stylesheet" type="text/css" media="all"/></head><body style=" margin-top:100px;"><center><img border=0 src="/html/logo.png"></center><div class="box0 word"></div></br></br&
28、gt;<form action="query.php" name="search" method="GET"><table border="0" align="center" cellpadding="0" cellspacing="0" class="tab_search"> <tr><td><input type="text" name="searc
29、h" title="Search" class="searchinput" id="searchinput" onkeydown="if (event.keyCode=13) " onblur="if(this.value='')value='输入电影名称'" onfocus="if(this.value='输入电影名称')value=''" value="输入电影名称" size=
30、"10"/><!-光标落在和离开时的事件-></td><td> <input type="image" width="30" height="30" class="searchaction" onclick="if(document.forms'search'.searchinput.value='输入电影名称')document.forms'search'.searchinput.valu
31、e=''" alt="Search" src="/image/s.png" border="0" hspace="2"/><!-回应点击事件显示光标-></td></tr></table></form></body></html>附录 4 query.php<?phpinclude("conn.php");/搜索结果页面$movie=$_GET"search&quo
32、t;$sql="SELECT * FROM m_movie where movie='$movie'"$sqla="SELECT * FROM m_actor WHERE actorID IN(select actorID from m_act_m where movieID IN(select movieID from m_movie where movie='$movie')"$sqlb="SELECT * FROM m_dire WHERE direID IN(select direID from m_di
33、re_m where movieID IN(select movieID from m_movie where movie='$movie')"$sqlc="SELECT * FROM m_dist WHERE distID IN(select distID from m_dist_m where movieID IN(select movieID from m_movie where movie='$movie')"$result=mysqli_query($con,$sql);$row=mysqli_fetch_assoc($r
34、esult);if(!isset($row) $home_url = 'false.html'header('Location:'.$home_url);?><!DOCTYPE><html><!-具体电影内容展示页面-><head><meta charset="utf-8"> <title>天下Movie</title><link href="css/contentstyle.css" rel="stylesheet&
35、quot; type="text/css" media="all"/></head><body> <center><img border=0 src="/html/logo.png"></center><div class="box0 word"> </div> </br> <div class="box"><div class="box1"><
36、img src="<?php echo $row'moviepic'?>" width="300px" height="400px" > </div><div><p><h3>©片名:<?php echo $row'movie' ?></h3></p> <p><h3>©导演:<?php $resultb=mysqli_query($con,$s
37、qlb); while($rowb=mysqli_fetch_assoc($resultb) print_r($rowb'dire'); echo "/" ?></h3></p> <p><h3>©演员:<?php $resulta=mysqli_query($con,$sqla); while($rowa=mysqli_fetch_assoc($resulta) print_r($rowa'actor'); echo "/" ?></h
38、3></p> <p><h3>©发 行:<?php $resultc=mysqli_query($con,$sqlc); while($rowc=mysqli_fetch_assoc($resultc) print_r($rowc'dist'); echo "/" ?></h3></p> <p><h3>©年 代:<?php echo $row'date'?></h3></p>&
39、lt;p><h3>©国 家:<?php echo $row'country'?></h3></p><p><h3>©时 长:<?php echo $row'length'?></h3></p><p><h3>©评 分:<?php echo $row'score'?></h3></p></div><div class
40、="box2"><p><h3 class="h1">©获奖:<?php echo $row'award'?></h1></p> <p><h3 class="h1">©简 介:<?php echo $row'intro'?></h1></p></div></div><center><h3><a h
41、ref="</body></HTML>附录 5 list.php<!DOCTYPE ><html><!-排序页面-><head ><meta charset="utf-8"> <title>天下Movie</title><link href="css/liststyle.css" rel="stylesheet" type="text/css" media="all"/&g
42、t;</head><body><center><img border=0 src="/html/logo.png"></center><div class="box0 word"></br></div><div class="box worda"> <div class="box1"> <div class="dropdown"> <button class=
43、"dropbtn">类型</button> <div class="dropdown-content"> <a href=" <a href=" <a href=" <a href=" <a href=" <a href=" <a href=" <a href=" <a href=" </div> </div></div> <div clas
44、s="box1"> <div class="dropdown"> <button class="dropbtn">评分</button> <div class="dropdown-content"> <a href=" <a href=" </div></div> </div> <div class="box1"> <div class="drop
45、down"> <button class="dropbtn">年份</button> <div class="dropdown-content"> <a href=" <a href=" </div> </div></div> <div> <table width="530" height="103" border="0" align="center
46、" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> <tr> <th width="400" bgcolor="#E3E3E3" scope="col">文章标题</th> <th width="100" height="38" bgcolor="#E3E3E3" scope="col"
47、>评分</th> </tr> <?phpinclude("conn.php");$classid=$_GET"class"$time=$_GET"time"$score=$_GET"score"if (isset($classid) $sql="SELECT movie FROM m_movie WHERE movieID IN(select movieID from m_class_m where classID='$classid')" i
48、f ($score=ASC|$score=DESC) $sql="SELECT * FROM m_movie ORDER BY m_movie.score $score " if ($time=ASC|$time=DESC) $sql="SELECT * FROM m_movie ORDER BY m_movie.date $time " $result=mysqli_query($con,$sql);$count=mysqli_num_rows($result);$page_size=5;$page_count=ceil($count/$page_si
49、ze); $init=1; $page_len=4; $max_p=$page_count; $pages=$page_count; /判断当前页码 if(empty($_GET'page')|$_GET'page'<0) $page=1; else $page=$_GET'page' $offset=$page_size*($page-1); if (isset($classid) $sqla="SELECT * FROM m_movie WHERE movieID IN( select movieID from m_class
50、_m where classID=$classid) limit $offset,$page_size" ; if ($score=ASC|$score=DESC) $sqla="SELECT * FROM m_movie ORDER BY m_movie.score $score limit $offset,$page_size" if ($time=ASC|$time=DESC) $sqla="SELECT * FROM m_movie ORDER BY m_movie.date $time limit $offset,$page_size"
51、; $resulta=mysqli_query($con,$sqla);while($row=mysqli_fetch_assoc($resulta)?> <tr> <td bgcolor="#E0EEE"> <div align="center"> <a href="query.php?search=<?php echo $row'movie'?>"><?php echo $row'movie'?></a> &l
52、t;/div> </td> <td bgcolor="#E0EEE0" height="25px"> <div align="center"> <?php echo $row'score'?> </div> </td> </tr><?php $page_len=( $page_len%2)?$page_len:$page_len+1;/页码个数 $pageoffset=( $page_len-1)/2;/页码个数左右偏移量
53、$key="<div>" $key.="<span>$page/$pages</span>" /第几页,共几页 if($page!=1) $key.="<a href="".$_SERVER'PHP_SELF'."?class=".($classid)."&score=".($score)."&time=".($time)."&page=1" >第一页<
54、/a>" /第一页 $key.="<a href="".$_SERVER'PHP_SELF'."?class=".($classid)."&score=".($score)."&time=".($time)."&page=".($page-1)."">上一页</a>" /上一页 else $key.="第一页" ;/第一页 $key.="上一页&q
55、uot; ;/上一页 if($pages>$page_len) /如果当前页小于等于左偏移 if($page<=$pageoffset) $init=1; $max_p=$page_len; else/如果当前页大于左偏移 /如果当前页码右偏移超出最大分页数 if($page+$pageoffset>=$pages+1) $init = $pages-$page_len+1; else /左右偏移都存在时的计算 $init = $page-$pageoffset; $max_p = $page+$pageoffset; for($i=$init;$i<=$max_p;$
56、i+) if($i=$page) $key.='<span>' .$i. '</span>' else $key.="<a href="".$_SERVER'PHP_SELF'."?class=".($classid)."&score=".($score)."&time=".($time)."&page=".$i." " ".$i."</a>&qu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全试题分类标准及答案
- 安全生产模拟试题及答案
- 安全考核试题及答案
- 2025年工业领域CCS技术应用案例深度解读报告
- 《编制说明-公安交通集成指挥平台数据共享技术规范》
- 中国动画课件下载网
- 淤血肝超声诊断
- 肝硬化患者的饮食护理
- 春节学生安全教育
- 红色教育基地分享
- 科学种植活动促进小学生实践能力提升的探究
- 变电站-配电房挂轨巡检机器人技术方案
- 【高校环艺】室内外手绘效果图表现教案
- DB50-T 548.4-2024城市道路交通管理设施设置规范第4部分:道路交通安全设施
- 项目股份买断合同范本
- 青岛版数学八年级下册-《平方根》教学课件
- 校园文印店经营方案
- 2024届重庆市沙坪坝区英语八年级第二学期期末监测试题含答案
- 2023北京西城区高二下学期期末英语试题及答案
- 实现马克思主义中国化时代化新的飞跃
- 2024网站渗透测试报告
评论
0/150
提交评论