资源描述
基于哈夫曼编码的通信系统的设计与实现【实用文档】doc
文档可直接使用可编辑,欢迎下载
河北工业大学
《数据结构》课程实验
实验报告
题目:基于哈夫曼编码的通信系统的设计与实现
专业:计算机科学与技术
班级:计1301班
姓名:张路浩刘禄源刘磊波李浩川邹博睿王超
完成日期:2015-1-13
一、试验内容
1)初始化处理:建立通信系统
(1)建立有100句中文的信息集合,每个句子称为一条信息.
(2)输入编码参数:
① 从终端输入编码字符集大小n,字符编码长度m(设n为4,m为8);
② 从终端输入编码字符(设为A,B,C,D);
(3)生成每条信息的字符编码,构造字符编码集合;
(4)计算每个字符在字符编码集合中出现的概率;
(5)根据字符概率构造哈夫曼树,求出每个字符的二进制编码。
2)发送端信息编码
(1)用户从信息集合中选择一条信息,找到该信息对应的字符编码;
(2)根据该信息的字符编码,哈夫曼树求出的每个字符的二进制编码,构造出该信息的二进制编码,记录该二进制编码.(由于是软件模拟,没有发送设备,发送端的编码工作完成)。
3)接受端信息译码
(1)根据得到的信息的二进制编码,利用哈夫曼树求出的每个字符的二进制编码,还原出信息的字符编码;
(2)根据信息的字符编码,找到对应的信息。
5、实现提示
(1)本试验涉及到通讯学科的编码理论和信息学科的数据压缩技术。
(2)根据参数生成的通信系统的所有信息的有效存储问题。
(3)信息字符编码可参考随机数的方式生成,且要求保持唯一性
二、试验目的
(1)掌握二叉树的存储结构及其相关操作.
(2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。
三、流程图
开始
定义汉字信息
string message[10]
通过随机数函数对汉字信息用字符集进行编码psw[i]
设置随机数种子
srand(time(NULL));
定义字符集大小n
输入字符集内容
HT.HFMTree[i].word
输入n
统计汉字信息字符编码中各字符出现的频度HT.HFMTree[k].weight
用字符集对信息进行字符编码void CreatCode(HCodeType& HT,int n)
输入编码长度p
i<2n-1
Y
指针初始化
HT.HFMTree[i].parent = -1;
HT.HFMTree[i].rchild = -1; HT.HFMTree[i].lchild = -1;
逐个非叶结点构造
根据各字符构的频度构造哈夫曼树
CreatHFMTree(HT,n)
N
将各信息的字符编码进行哈弗曼树编码
寻找具有最小、次小值的根建树
哈夫曼编码
CreatHFMCode(HT,HFMCode,n);
链接父节点和兄弟结点,i++
父指针为空
Y
输出文字信息和对应的哈夫曼编码
Y
原来的最小变为次小,记下新的最小值
比原来最小的还要小
记下新的次小值
比原来的次小还小
N
结束
四、源程序代码
#include<iostream〉
#include<cstdlib>
#include<ctime>
#include〈string>
using namespace std;
constint n=4;//叶子节点个数
constint MAXVALUE = 9999;
intm,p; //编码参数
string l;
int size;
//构造哈夫曼树结点
typedefstruct{
int weight;//权值
int parent;//父节点
intlchild;//左子树
intrchild;//右子树
char word;//编码字符
}HNodeType;
//构造哈夫曼编码数组
typedefstruct{
HNodeTypeHFMTree[2*n-1];//结点数
int bit[n];
int start;
}HCodeType;
HCodeType HT;
HCodeTypeHFMCode[n];
string message[10]={
ﻩ{"人之初”},{"性本善"},{”性相近"},
ﻩ{"习相远”},{"苟不教”},{"性乃迁"},{"教之道"},{"贵以专"},
{"昔孟母"},{"择邻处"}};
string psw[10];//存储编码
//对信息进行编码
void CreatCode(HCodeType& HT,int n)
{
inti,j,k;
char ch;//存储编码的字符集
ﻩ//权重初始化
for(i=0;i<2*n-1;i++){
HT.HFMTree[i]。weight=0;
ﻩ}
cout〈<"请输入编码字符集的大小:m = ";
cin>〉m;
cout<<"请输入编码长度大小:p = ”;
cin〉〉p;
cout〈〈”请输入编码字符:"<〈endl;
for(i = 0;i〈m;i++){
cin>〉HT.HFMTree[i]。word;
}
//对汉字信息进行编码
srand(time(NULL));
cout<<"**************************************************************"<<endl;
cout〈〈”生成的编码为:"〈<endl;
for(i = 0;i〈10;i++){
for(j = 0;j<p;j++){
ch = HT。HFMTree[rand()%m].word;
psw[i] +=ch;
for(k = 0;k〈m;k++){
if(ch == HT.HFMTree[k].word)
HT.HFMTree[k].weight++;
ﻩ}
ﻩ}
if(i>0&&psw[i] == psw[i—1]){
i--;
}
else
cout<〈message[i]〈〈”: "〈<psw[i]〈<endl;
}
cout<〈"各字符出现的频度为:”<<endl;
for(i = 0;i〈m;i++){
cout〈<HT。HFMTree[i].word<<”出现的频度为:"〈〈HT.HFMTree[i].weight〈<endl;
ﻩ}
}
//创建哈弗曼树
voidCreatHFMTree(HCodeType& HT,int n)
{
inti,j;
int m1,x1,m2,x2;
for(i = 0;i〈2*n—1;i++){
HT。HFMTree[i].parent = -1;
HT。HFMTree[i].rchild = -1;
HT.HFMTree[i]。lchild = —1;
ﻩ}
for(i = 0;i<n-1;i++)
ﻩ{
x1 = x2 =MAXVALUE;
m1 = m2 =0;
for(j = 0;j<n+i;j++){
if(HT.HFMTree[j].parent==—1&&HT。HFMTree[j].weight〈x1){
x2 = x1;
ﻩm2 = m1;
x1 = HT。HFMTree[j].weight;
ﻩm1 = j;
ﻩ}
else if(HT.HFMTree[j].parent==—1&&HT.HFMTree[j].weight〈x2){
x2 = HT.HFMTree[j]。weight;
ﻩm2 = j;
ﻩ}
}
HT.HFMTree[m1]。parent=n+i;
HT。HFMTree[m2].parent=n+i;
HT。HFMTree[n+i]。weight=HT.HFMTree[m1]。weight+HT.HFMTree[m2].weight;
HT。HFMTree[n+i]。lchild=m1;
HT。HFMTree[n+i]。rchild=m2;
ﻩ}
cout〈<"**************************************************************"〈〈endl;
cout〈<"构造的哈弗曼树为:\n";
for(i = 0;i<(2*n-1);i++){
cout〈<i<〈" 字符"<<HT.HFMTree[i]。word〈<"的权重:”<〈HT。HFMTree[i]。weight〈<" 父结点的位置为:"<〈HT.HFMTree[i].parent
〈〈” 左孩子的位置为:"〈〈HT。HFMTree[i].lchild<<" 右孩子的位置为:"〈〈HT.HFMTree[i].rchild<<endl;
}
}
//对字符集编码
voidCreatHFMCode(HCodeType& HT,HCodeTypeHFMCode[],int n){
HCodeType cd;
inti,j,c,p;
for(i = 0;i〈n;i++){
cd.start = n—1;
c = i;
p = HT.HFMTree[i]。parent;
while(p != -1){
if(HT.HFMTree[p].lchild == c)
cd.bit[cd.start] = 0;
else if(HT。HFMTree[p].rchild == c)
cd.bit[cd.start] = 1;
cd.start-—;
ﻩc = p;
p = HT。HFMTree[c].parent;
}
for(j = cd.start+1;j<n;j++)
HFMCode[i]。bit[j] = cd.bit[j];
HFMCode[i].start = cd.start+1;
}
cout<〈"**************************************************************"〈<endl;
cout<〈"各字符的编码为:"<<endl;
for(i = 0;i<n;i++){
cout<<"字符”<〈HT。HFMTree[i].word<<"的编码为”;
for(j = 2;j〈n;j++){
cout<〈HFMCode[i]。bit[j];
}
cout<〈endl;
}
}
int main()
{
cout<〈"**************************************************************"<〈endl;
cout〈<"***************欢迎使用基于哈夫曼编码的通信系统***************"〈〈endl;
cout〈<"**************************************************************”<<endl;
string t[10];
CreatCode(HT,n);//对信息进行编码
CreatHFMTree(HT,n);
CreatHFMCode(HT,HFMCode,n);
//将信息进行转码
cout<<”**************************************************************”<<endl;
cout<<”编码结果为:"<<endl;
for(inti = 0;i〈10;i++){
cout<<message[i]〈〈”<-—-—-----——->";
for(int j = 0;j<p;j++){
for(int k = 0;k<m;k++){
if(psw[i][j] == HT。HFMTree[k].word){
for(int l = 2;l<n;l++){
cout<<HFMCode[k].bit[l];
ﻩ}
}
ﻩ}
}
cout<〈endl;
}
return 0;
}
五、调试过程
六、结果分析
山西大学本科毕业论文(设计)开题报告
姓 名
学 号
所在专业
论文(设计)题目
基于Android的餐厅自动点餐系统的设计与实现
选题的目的和意义:
伴随着时代的的进步,人们生活质量越来越好,闲暇时间去饭店吃饭请客已成为再不能普通的休闲活动.在这一活动中,除了饭菜的鲜美可口,顾客也会在意实惠和优质的服务。如何在餐厅保证本身利润的同时降低售价,并对顾客的服务体验没有影响,这就是我们着眼的地方,而这个系统也是为解决这一问题所诞生.通过手机点餐,减少服务员的劳动力,减少饭店的成本,从而使菜品的价格更加优惠,达到物美价廉.
减少不必要的浪费.我们常常去餐厅会有点餐单,而点菜单往往是一次性的,用Android手机点餐,不需要纸质介绍,并且可以更好的了解菜品,减少一次性浪费。
减少劳动力.餐厅的生意是有固定的时间段,而在单位时间内做更多有效的事情,间接的可以降低营业者的成本。我们以往点餐,服务员都会在旁边用纸和笔记录,即使是俩人点餐,也需要5~10分钟,人多可能需要的时间会更长。而用手机点餐可以节省这段时间。还有就是,为了更好的汇总信息,有些饭店还会把点餐的信息录入电脑,而这一过程有需要人力来完成。
顾客与顾客产生互动。手机点餐,可以丰富菜单内容,对每个菜品可以有更加详细的介绍。而且可以加入以往顾客对菜品的评价,哪些菜符合哪些人口味,也让顾客有针对性的点餐,同时也增加点餐的乐趣。
文献综述:
1.国内研究现状:
随着经济的迅速发展和人们生活水平的不断提高,餐饮业的竞争越来越激烈.要想在竞争中取得优势,就必须在经营管理、产品服务等方面提高服务管理意识。面对餐饮的经营起决定作用的是餐饮的管理.如何利用先进的管理手段来提高餐饮的管理水平,是每一个餐饮管理者所面临的重要课题.简单的服务标准已经不是制胜的法宝,只有管理做到最细微之处,才能让顾客体会到餐饮服务的高标准、高质量,而准确、快捷、周全往往就是最基本的成功要素。面对信息时代的挑战,利用科技手段提高企业管理无疑是一条行之有效的途径。因此采用电脑管理业务、财务等诸多环节已成为餐饮业快速发展的先决条件。
2.国外研究现状:
Android这个词的本来意思是指“安卓机器人",同时也就是谷歌于2007年11月5日所宣布的可以基于Linux平台上的open手机操作系统的名称,这个平台由安卓操作系统经过中间件再经过用户界面和应用软件一起组成,可以说是全球第一个为手机端上打造的真正是开放的和完整的移动应用软件.
Android是基于Linux内核的软件平台和操作系统,早期由谷歌开发(在华注册商标名为“安致”),后由开放手机联盟(Open Handset Alliance)开发。它采用了software stack,又名以软件叠层的知识架构,主要分为这三个重要的三部分。低层以内核工作为基础,只提供手机上很多的基本操作功能,以Java语言作为主力编写程序的一部分的开发.而且,它为了去推广这个技术,Google和很多个手机的公司建立了良好的开放手机联盟关系。
3。研究方向:
Android系统的开放性,Android开发平台允许任何厂商加入其中,任何软件公司都可以做Android软件的开发。iOS只有它本身的应用市场,而Android的应用市场光国内就有十几家,可见其开放性.
Android系统便于开发,Android平台提供给开发者的只是工具,越来越完善的工具,没有太多的门槛约束,你想开发,也许一台电脑足矣,这样一个自由的环境可以孕育很多各式各样新颖别致的APP。
Android硬件条件丰富,众多硬件厂商都为Android设计有相关产品,已经达到零件全球化,如果你技术过硬,也许可以自己组装一台只属于自己的手机。而市场上重几百到几千的Android都有,所以消费群体也相对广泛.
经济上的问题,主要包括三个方面,开发、运营和维护。开发方面,大多数的Android编程软件是官方免费,功能丰富且强大.运营方面,只要是服务端的投放,后期可以租用阿里巴巴或者百度的网络服务器,相对低的配置就可以,投入也不会很大而且相对稳定不用对服务器进行维护。后期维护,系统本事是有自己写的,对代码也比较熟悉,所以维护的经费可以忽略不计。
服务器端采用的是PHP等相关内容的后台管理,在学习过程中有相对固定的模板,采用模板框架,降低技术上的难度,也使得代码更加调理清楚.
客户端采用的Java与Android相结合,设计出基本的UI界面,将服务器端的信息通过网络下载下来,实现服务端与客户端的交互,从而实现响应的功能。
后台服务端由pc端电脑控制,而Android则有多种选择,可以用eclipse的自带模拟器,也可以用Genymotion的模拟器,也可以将Android的开发之选项开启,在实体的手机上运行模拟。
结合多种使用,后台管理端在pc上控制,Android应用端在Genymotion的模拟器上运行。
4、进展情况:
到目前为止,基本的准备工作基本完成,软件的安装与配置环境的搭建。素材结合网络上的一些主流网站app样式进行设计。对软件的功能还在进一步的探讨和完善.
手机使用的许多方面都在潜移默化的发生着改变。我着眼于餐厅点餐,利用手机进行菜品的挑选和下单.第一省料,在手机上点餐,减少了点餐纸的使用,避免不必要的浪费;第二省时,不再需要服务员站在旁边,记录点餐,从而间接的降低饭店的人力成本;第三省事,利用手机直接下单,直接录入管理后台,避免手工录入的错误;第四数据分析,经营一段时间后,可以汇总销售菜品的受欢迎程度,可以有针对性的改善。利人利己的手机点餐方式必定是未来餐饮业的点餐新方式。
5.存在的问题:
(1)用户安装的便捷程度,在推广过程中可能需要较长的时间让用户改变以往习惯。对于一些年龄稍大些的消费者,如何引导他们真确使用,并接受这种点餐方式这是一个很大的问题。
(2)在完成设计时,有很多技术不是很了解,需要参考大量的书籍文献,或者将学习其他的代码,从中学以致用.
(3)对数据库不太熟悉,需要将这部分的知识补充起来,完善知识体系。
6.目前发展趋势:
目前国内已经有部分餐厅使用到该技术,但主要是一些小的快餐式餐厅。在使用过程中发现许多传统点餐系统无法达到的功能.在就餐过程中可以对菜品进行评价,与之前的顾客与将来的顾客产生互动,打破时空的约束。方便餐厅的推广,由于现在社交软件的普及,我们可以预留几个接口,主要针对于几类主要的社交软件,比如发个朋友圈了,发条动态之类的活动,从而达到对本店宣传的功能
数据的收集利用,在顾客点餐的同时,产生相对应的数据,在积累到一定量级时,可以根据数据分析哪些菜比较受欢迎,为什么受欢迎,从而完善餐厅的菜品,使菜品更符合当地人的口味。
7.参考文献:
[1]郭霖 。 第一行代码—-Android.人民邮电出版社. 2014
[2]李刚.疯狂Android讲义(第三版).电子工业出版社.2015
[3王飞飞。MySQL数据库应用从入门到精通.中国铁道出版社。 2014[4]沈文轩,张春娜,曾子维。软件工程基础与实用教程。清华大学出版社.2012
[5](美)Y.Daniel Liang著,李娜译.Java语言程序设计进阶篇。机械工业出版社.2011
[6]Shane Conder Lauren Darcey.Android移动应用开发从入门到精通.人民邮电出版社。2010
[7]武永亮。 Android开发范例实战宝典。清华大学出版社。2014
[8]王家林,王家俊,王家虎 .Android项目实战。电子工业出版社.2013
[9]朱婧茜,何人可. Android手机应用界面布局的可用性测试研究.重庆:包装工程.2014(10):61—64
[10]韩璐,高贤强,王世发. 基于Android系统的手机软件开发研究.北京:电子技术与软件工程。2014(5):60-61
山西大学本科毕业论文(设计)开题报告
主要研究内容:
完成“餐厅点餐系统”的设计,餐厅点餐系统是一个适用于餐饮行业和消费者的软件,本系统初步拟定有以下模块组成:
(1)菜品管理:名称,及想要输入菜品的名称。分类,为了方便顾客挑选更有调理,我们这里可以将菜品归类,将不同的菜品放在不同的类别中,让顾客在点餐是更有针对性。
(2)菜品类别管理:及将菜品合理分类,如果是综合性的大饭店有各个派系的菜品,可以将分类分为各个派系,方便天南海北的顾客根据生活习惯挑选适合自己口味的菜肴.
(3)桌位管理:对餐厅的桌位的管理,在用户选择菜品之前会有桌位的管理,这样可以让送菜的服务员明确知道是哪一桌人点的菜。在这一模块有俩个选项,桌号和几人桌.
(4)订单管理:对顾客选定的菜品的汇总,当顾客确认选择的菜品后,订单管理处会有显示,这样服务员就可以进行开始配菜.在客户用完餐后可以清楚了解消费金额,方便结账。
(5)用户管理:及注册用户的管理,这里分为俩快,一块是后台的登录用户管理,这个不能注册,只能在用户管理中添加,只有有了该账户密码才能成功登录,防止信息泄露;另一块是客户端的用户的注册,这个是可以随便注册的,这块主要是收集顾客的信息,可以在促销活动中通知
(6)用户登录注册:收集用户的基本信息,也是用户在使用该软件时的凭证.
(7)选择菜品:顾客可以根据分类选择自己喜欢的菜品,而且每道菜都有精美的图片。
创新之处(如无可不填):
山西大学本科毕业论文(设计)开题报告
研究路线、方法、措施及实践方案或实验设计:
网站是在windows7的环境下,采用Java、Android等相关技术开发,开发环境采用eclipse和Genymotion软件和使用Java和Android语言进行开发,数据库采用MySQL来存放本网站的数据信息。
软件开发的主要步骤:
(1)需求分析和产品分析:不是马上动手去做功能分析、产品逻辑架构或者任务流程,而是认真的分析需求。分析现有的解决方案,在采集大量的数据之后,还要把数据汇成图表。
(2)产品故事版:在清晰需求分析和产品的目标之后.为达到这个产品的目标制定具体的方案。开始的方案是模糊的,我们只知道有一个大概的前进方向和目标.如何实现我们并不清晰。当然我们也没有必要,也没有可能马上就清晰起来,这需要一个过程。这个过程我们使用的工具就是“故事版”.把产品、人、环境放置于一定的场景之中,通过场景中人和产品发生的故事去推理产品应该有哪些的功能和逻辑流程细节。这是一个感性的过程,同时也是理性的分析过程。
(3)系统逻辑架构和任务流程:产品的策划和开发到此阶段已经开始越来越清晰了。这时候我们需要弄清楚系统中有那些部分组成,他们的关系又是如何的。他们相互之间数据是如何交换、流通和协同工作的。除此之外还需要细化每一个部分的任务流程。
(4)界面分析和线框原型制作:完成了任务流程。我们还需要对每个任务做细化的功能拆解。这一步骤就不详列了。在细化了功能的分解之后,我们要开始安排每个界面的具体的流程和界面当中应该有什么样的输入和输出的信息,以支撑当前步骤的需求。
(5)GUI设计:当用户确认线框原型之后。我们就可以开始进入GUI设计流程。现在很多公司在这个部分都做得不错。虽然他们的产品有时候很难用.
(6)开发阶段:按照所有的交互文档、逻辑架构文档、信息架构文档、任务流程分析、产品高保真原型等进行开发,使得开发过程条例清楚,不发生不必要的纰漏。
指导教师意见:
签字:
年 月 日
学院意见:
签字:
年 月 日
目 录
1 背景及意义1
2系统总体设计3
1系统目标3
2系统功能划分4
1 前台功能结构4
2 后台功能结构5
3 系统开发环境5
1 开发环境6
2 系统平台体系结构的选择6
3 JAVASCRIPT语言简介及特点6
4 JSP概述6
5 MYSQL7
6 JDBC技术7
3数据库设计8
3。1 数据库分析9
3。2 数据库概念设计10
3。3 数据库的逻辑设计11
4系统详细设计与实现11
4。1 前台设计12
1 前台页面设计与实现13
2 用户登录、管理员登录14
3 论坛版块的展示14
4 发表新主题15
5查看及回复主题15
4。2 后台设计16
1 管理员登录16
2用户信息管理17
结束语17
参考文献18
1、背景及意义
网络的兴起与发展,极大地改变了人们的思维和行为习惯.基于网络的应用也层出不穷,论坛就是最早兴起的应用之一。作为一种传递消息的方式,最早的BBS的作用是公布股市的即时消息,而随着时代的发展,现在的BBS的内容已达到无所不包的程度.小到生活趣事,大到专业知识,各种各样的主题论坛让人眼花缭乱。论坛网页的形式也由最初的静态页面发展到现在的动态页面,更好的实现了用户之间的交互。财大家园论坛就是通过动态Web开发技术和数据库技术实现的以财大学生与老师为主要服务对象的一个基于现实环境之上的一个网上论坛,力求创造出一个模拟的网上校园虚拟环境.此论坛是基于B/S模式的一种JSP网页论坛的设计与实现,力求做到界面友好、简单和易于操作。论文从几个大的方面来对系统的开发做出了阐述。在系统分析一章从需求分析和可行性分析两方面来做具体阐述;系统整体设计则从系统目标、系统功能划分和系统开发环境三大方面说明,结合后面的系统详细设计与实现一章完成对系统从整体到细节的全方位的理解.开发BBS论坛系统的目的是为了提供一个大家交流的平台,供人们发表看法、探讨经验、讨论问题。因此,BBS论坛系统的最基本的功能是发表主题,其次是其它人员根据主题发表自己的看法,即回复主题.考虑到现实情况,并不是每一个访问的游客都具有发表主题的权利,所以必须用一个身份绑定用户,赋予其发表主题的权利,这就需要实现用户注册及登录的功能。每一个系统都需要管理员这个特殊群体的存在,所以也需要实现管理员登陆的功能。管理员区别于一般用户的地方在于,管理员往往具有更高的权限,有权对用户信息和帖子内容作出某些“增删改查"的操作,所以,针对管理员,系统应该实现删除和修改帖子以及对用户的管理等功能,以实现管理员对社区的管理 。考虑到社区访问量会很大,用户发表的帖子的数量自然很多,在浩瀚的帖子海洋中,如何才能查看自己感兴趣的帖子成为了一个不得不考虑的问题。所以,系统还应该实现搜索帖子的功能,用模糊查询的方法,对社区的帖子进行筛检的工作。本系统针对用户还实现了一个特殊的功能,即邮件发送。如果某个用户对其他的用户感兴趣,那么可以通过将邮件发送到指定用户注册时所填写的邮箱地址,这样的话,就能够实现即时通讯的功能.
2 系统总体设计
1 系统目标
基于BBS论坛在现实生活的实际应用,本系统的系统目标是提供一个以现实环境为基础的网上模拟交流平台,通过它,人们可以不必拘泥于空间和时间上的限制,方便交流,畅所欲言,同时也能够更加便利的看到周围人的想法,观点,最大化的丰富人们的视野和生活,让人随时都能身在其中,随时也能置身事外。
2 系统功能划分
2.1 前台功能结构
系统的前台初始页面如下,登录地址为“http://localhost:8080/BBS":
图2-1财大家园网首页
当用户登录到论坛首页时,其默认的身份就是游客,只能查看、回复、搜索帖子,而不能执行发帖等其它操作。如果用户为非注册用户,则其可以进行注册以获得一个登录身份.如果用户为已注册用户,则其可以直接进行登录,然后以注册用户的身份执行诸如发表新主题、查看新主题、回复主题、搜索主题等一系列操作。
此时,用户已经具有了一种身份,此后用户可以以此种身份执行诸如发表新主题、查看主题、搜索主题、回复主题等操作.
2.2 后台功能结构
后台功能主要是针对管理员而设置的,用户以管理员的身份登陆后,就能执行后台管理的操作,具体到此BBS论坛,主要是指删除和修改主题以及对用户信息的管理。
后台系统流程图如下:
图2。2 后台系统流程图
2。3 系统开发环境
1 开发环境
在建立工程前,需要首先搭建开发环境。此BBS论坛系统的开发需要用到以下几种工具,故开发前需要进行相应的下载和安装:
开发平台:MyEclipse 9。0M2
Web服务器:Tomcat 7。0.5
数据库服务器:MySQL 5.1
辅助工具:Dreamweaver CS4
2 系统平台体系结构的选择
在系统开发领域内,目前存在两大主流系统平台的开发结构,一种是C/S结构,而另一种是B/S结构.C/S结构,即大家熟知的客户端/服务器结构,是一种应用较早,相对传统的开发模式。通过它,可以充分利用两端硬件环境的优势,将任务合理的分配到Client端和Server端,降低了系统的通讯开销。B/S结构,即浏览器/服务器结构,是随着Internet的兴起,对C/S结构的一种变化或者改进.在这种结构下,用户不需要借助于客户端软件,通过WWW浏览器,即可实现系统的全部既定功能。在这种模式下,一部分事务逻辑在前段实现,但是主要事务逻辑在服务器端实现,大大简化了客户端电脑载荷,减轻了系统维护与升级的成本,从而降低了用户的整体成本。从开放程度来说,传统的C/S结构虽然采用的是开放模式,但这个开放性只是针对系统开发一级的,在特定的应用中,无论是客户端还是服务器端都还需要特定的软件支持.而B/S结构,是一次性到位的开发,应用此模式开发的系统,不同人员,在不同地点,以不同的接入方式(比如LAN、WAN等)访问并操作共同的数据库,能有效地保护数据平台和管理访问权限,服务器的数据库也很安全。特别是在Java这样的跨平台语言出现之后,B/S架构管理软件起来更是显得方便,快捷和高效。可以说,B/S是乘着Internet兴起的风而杨风远航的,是适应时代的产物。但是,B/S也存在着自己的不足,比方说其在大量数据分析,实时控制应用方面就存在着需要改进的地方.综合考虑,本系统还是考虑使用当下流行的B/S结构作为系统的开发模式。
3JSP概述
JSP是由Sun公司在Java语言的基础上开发出来的一种动态网页制作技术,其将标记〈% %〉插入到页面中,从而使网页中的静态部分和动态部分分离开来。JSP是类似ASP的一种技术,在传统的静态网页HTML文件插入Java程序段和JSP标记,就形成了JSP文件。
JSP技术的强势在于:
1、一次编写,到处运行.在更换系统时,代码不需要做任何修改。
2、系统的多平台支持。基本上可以在所有平台上的任意环境下开发,在任意环境中进行系统部署,在任意环境中扩展。
3、强大的可伸缩性.通过小小的jar文件运行servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,一台服务器到无数台服务器,JSP表现了强大的可伸缩性。
4、多样化和功能强大的开发工具支持,常用的编辑工具有Dreamweaver和MyEclipse等。
3。3.5 MySQL
MySQL可以称得上是目前运行速度最快的SQL语言数据库,除了具有许多其他数据库所不具备的功能和选择外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人和商业用途,而不必支付任何费用。
3。3。6 JDBC技术
数据库管理是每个应用系统开发过程中不得不考虑的问题,目前主流的数据库有Oracle、SqlServer、MySql等。不管使用何种技术,都离不开JDBC技术的支持。JDBC的全称是Java DataBases Connectivity standard,即Java数据库连接,是一种数据库通用接口采用的主流技术。其定义了用来访问数据库源的标准Java类库,通过它使用一种标准方法,就能够方便的访问数据库资源.所以,JDBC又是一种规范,其目标是使应用程序开发人员通过它连接任何提供JDBC驱动程序的数据库系统,这样就使得程序员无需对某种数据库有过多的了解,大大加快了开发过程.
有了JDBC,向各种数据库发送SQL语句就是一件再简单不过的事了.换言之,有了JDBC,就不必为访问数据库A专门再写一个程序,又为访问数据库B专门写一个程序。所以,JDBC为Java应用程序与各种不同数据库之间进行对话提供了一个标准的方法,这也是Java语言“一次编写,到处运行"的优势。
4 数据库设计
4。1 数据库分析
数据库的设计,在应用系统的开发中起着举足轻重的作用。一个合理、有效的数据库设计不仅是做好系统的保证,也能降低程序的复杂性,使程序的开发过程变得更加容易.
本系统是一个中型的BBS论坛系统,考虑到用户信息量和用户需求等问题,决定采用MySQl作为项目用数据库。
MySQl是一个中小关系型数据管理系统,最初由MySQL AB公司发布。MySQL由于体积小、速度快、总体拥有成本低等原因,成为许多中小型网站数据库的首选。MySQL可以称得上是目前运行速度最快的SQL语言数据库,此外,MySQL数据库是一种完全免费的产品,用户可以直接从网上下载数据库,用于个人和商业用途,而不必支付任何费用。
4.2 数据库概念设计
ER图是实体联系图,E-R模型是对现实世界的一种抽象。其组成部分主要包括实体、联系和属性.使用这三种成分,我们可以很好的抽象出现实世界中的个体,并通过彼此之间的联系来抽象整个世界.E-R模型是设计数据库时经常使用到的方法。
经过分析,本系统创建了五张数据库表,即帖子表(article)、版块表(edit)、用户等级表(grade)、用户表(user)和管理员表(admin)。下面划分出本系统所使用的数据库实体,它们分别为用户(User)和帖子(Article)以及管理员(admin)。
以下是帖子、用户和管理员的实体图:
图4-1帖子实体图
4.3 数据库的逻辑设计
1、帖子表(Article)
下面是对表Article的具体设计
表4-3 article
字段名
属性
约束
意义
1
id
int
primary key
帖子id
2
pid
int
无
父亲id
3
rootid
int
无
根id
4
editNo
Int
无
所属版块
5
title
varchar(30)
无
标题
6
cont
text
无
内容
7
pdate
datetime
无
发帖时间
8
writer
varch
展开阅读全文