二手交易网站课程设计说明书.docx
《二手交易网站课程设计说明书.docx》由会员分享,可在线阅读,更多相关《二手交易网站课程设计说明书.docx(55页珍藏版)》请在冰豆网上搜索。
![二手交易网站课程设计说明书.docx](https://file1.bdocx.com/fileroot1/2023-2/21/731ad405-7e46-4c35-8896-26d23a03f5ac/731ad405-7e46-4c35-8896-26d23a03f5ac1.gif)
二手交易网站课程设计说明书
中北大学
应用软件架构设计实验周
课程设计说明书
学院:
电子计算机科学与技术学院
专业:
软件工程
题目:
二手物品市场
学生姓名:
师少兵
学号
0906054116
成绩
学生姓名:
耿庆博
学号
0906054137
成绩
学生姓名:
郭凯强
学号
0906054115
成绩
学生姓名:
于潇
学号
0906054104
成绩
学生姓名:
周小龙
学号
0906054147
成绩
指导教师
庞敏
2013年1月9日
1引言
1.1编写目的
本文档是为了让客户了解开发者所了解到的软件功能是否满足了客户的预想的功能,以及个功能模块之间是否存在与客户之间相违背的地方,如果关于该软件有什么需要改进的地方请客户及时提出方便开发人员更好的、更全面的开发该软件,该说明书也将作为开发者前期开发的重要依据。
开发人员编写该文档主要是为了让客户确认开发者即将开发的软件的功能是否有不足之处,有什么功能是没有必要开发的,有哪些功能是不合理的,希望通过该说明书能够让开发者和用户更好的沟通,并作为后期软件交付时软件是否符合用户标准的一个重要参考。
1.2背景说明
每年大四学生毕业时都有很多物品需要出售,这几年我发现学校一直没有一个正当的商品展示平台。
同学们的日常用品出售信息智能是通过口头传递或者发帖到各大论坛,这导致要出售的物品不能快速售出,论坛的秩序也变得混乱不堪。
因此大学急需一个二手物品展示平台来维持正常的论坛秩序,同时帮助大四学生快速将自己的学习用品以及其他日常用品快速出售,同时低年级的同学及附近村民也可以根据个人所需浏览网站获取信息。
该项目由耿庆博提出,由师少兵、耿庆博、于潇、周小龙、郭凯强共同开发,用户主要为在校大学生,该项目由中北大学运营。
1.3定义
列出本文件中用到的专门术语的定义和缩写词的原词组。
跳蚤市场:
俗称二手市场。
相传1884年,巴黎政府为维护干净市容,要求许多捡破烂为生的贫民将市区的废弃物搬运到荒废的军营,这些贫民以平时在垃圾堆里寻宝的功力,自行在废弃物中挑拣尚能用的物品过滤出售,没多久就形成一处固定的市集。
电子数码:
在百惠跳骚街的一个区域,主要用来放置电子数码产品信息。
下架:
与上架相对应的一个商品状态,物品下架之后其他用户不能看到该商品,此时商品的发布者可以查看商品。
1.4参考资料
(1)徐锋,陈喧.UML面向对象基础.北京:
中国水利水电出版社,2006
(2)王珊、萨师煊.数据库系统概论(第四版).北京:
高等教育出版社,2006
(3)冀振燕.UML系统分析与设计教程.北京:
人民邮电出版社,2010
(4)(美)沙赫.软件工程面向对象和传统的方法.北京:
机械工业出版社,2007
(5)孙涌.软件工程教程.北京:
机械工业出版社,2010
(6)杨树林胡洁萍.JAVA语言最新实用案例教程.北京:
清华大学出版社,2006
(7)BruceEckel,JAVA编程思想,北京:
机械工业出版社,2005
(8)孙晓龙、赵莉,JSP动态网站技术入门与提高,北京:
人民邮电出版社,2001
(9)张孝祥、徐明华,JSP基础与案例开发详解,北京:
清华大学出版社,2009
(10)唐爱国,杭志等,JSP技术详解与应用实践,北京:
清华大学出版社,2009
2总体设计
2.1需求规定
输入
处理
输出
用户名、密码、确认密码、qq、手机号码、昵称
将用户注册信息存放到数据库
注册成功信息
用户名、密码
查询数据库处理登陆信息
返回登陆结果
出售商品信息
将商品信息添加到数据库
将物品信息显示到列表
评价信息
保存评论内容及时间信息
评论信息及评论人
2.2运行环境
a.硬件环境要求:
PentiumⅡ或更高的微机。
b.内存要求:
容量至少64M。
c.必要环境:
JDK1.6及以上
d.安装所需硬盘:
10G以上
2.3基本设计概念和处理流程
图2-1组织结构图
图2-2交易通信图
图2-3发布商品通信图
图2-4系统用例图
2.4结构设计
2.4.1结构
图2-5系统功能结构图
2.4.2人工处理过程
●用户注册用户信息
●搜索商品
●登陆发布商品信息
●超级管理员添加普通管理员
3数据库设计
3.1概念结构设计
表3-1商品表(goods)
字段
类型
NULL
默认值
说明
其他
id
int
否
商品id
主键,自动增长
userid
int
否
用户编号
外键
name
varchar(100)
否
商品名称
category
vrachar(50)
否
分类
cgrade
varchar(50)
否
成色
全新、9成新、8成新
sellingprice
float
否
0.0
转卖价
专卖价必须不高于原价
costprice
float
否
0.0
原价
desc
mediumtext
否
描述
location
char(100)
否
所在地
conphone
char(11)
是
联系电话
conqq
char(15)
是
QQ
state
char(15)
否
商品状态
上架/下架
edittime
int
否
最近编辑时间
表3-2用户表(user)
字段
类型
NULL
默认值
说明
其他
id
int
否
用户编号
主键,自动增长
name
varchar(32)
否
用户名
只能是字母和数字
密码
varchar(32)
否
密码
md5加密后的字符串
reg_email
char(30)
否
注册邮箱
reg_cardid
char(20)
否
身份证号
reg_ip
char(20)
否
注册ip
reg_time
int(11)
否
注册时间
last_time
int(11)
否
上次登录时间
last_ip
char(20)
否
上次登录ip
image
varchar(100)
是
默认头像
个人头像
exp
int
否
1
经验值
购买商品会增加
表3-3评论表(comments)
字段
类型
NULL
默认值
说明
其他
id
int
否
评论id
主键,自动增长
userid
int
否
用户id
user表外键
goodsid
int
否
商品id
goods表外键
content
char(500)
否
评论内容
uptime
int
否
评论时间
表3-4分类表(category)
字段
类型
NULL
默认值
说明
其他
id
int
否
分类id
father_id
int
否
0
其上级id
name
varchar(50)
否
分类名称
表3-5等级经验表(rank_exp)
字段
类型
NULL
默认值
说明
其他
rank
int
否
等级
exp
int
否
经验值
新注册用户经验值默认值为1
rank_name
char(20)
否
等级名称
表3-6公告表(notice)
字段
类型
NULL
默认值
说明
其他
id
int
否
文章id
title
varchar(200)
否
标题
content
mediumtext
否
内容
author
char(50)
否
作者
uptime
int
否
日期
hits
int
否
0
点击量
每点击一次标题,点击量加1
表3-7关键字表(kword)
字段
类型
NULL
默认值
说明
其他
id
int
否
id
userid
int
否
用户编号
keyword
varchar(50)
否
关键字
num
char(50)
否
被搜索次数
3.2逻辑结构设计
图3-1系统E-R图
3.4安全保密设计
在数据库我们对密码进行了二次的SHA1加密,而且还使用了密钥。
即使我们的数据库信息被泄露,也不会被轻易地破解。
4系统出错处理设计
4.1出错信息
1.用户可能通过在浏览器中直接输入地址进入个人中心。
我们会通过session来控制会员是否已经登录,如果用户没有登录会直接跳转到“首页”或者“登录界面”。
2.展示的商品是通过获取URL中的参数来查询数据库的,如果用户恶意地或无意地修改了URL参数,我们会首先查询是否存在该商品,如果不存在直接跳转到首页,否则显示相应的信息。
4.2补救措施
重启服务器、数据库
5模块详细设计
5.1MODELS设计
php
classMyDBextendsCI_Model{
protected$res;
publicfunction__construct(){
parent:
:
__construct();
$this->load->database();
}
//使用query方式执行SQL语句
publicfunctionquery($sql){
$res=$this->db->query($sql);
if($res){
$this->res=$res;
}
}
publicfunctionget($table){
$res=$this->db->get($table);
}
//返回结果集一个对象数组
publicfunctionresult_object(){
return$this->res->result();
}
//返回结果的关联数组
publicfunctionresult_array(){
return$this->res->result_array();
}
//返回当前请求的行数
publicfunctionnum_rows(){
return$this->res->num_rows();
}
//返回当前请求的列数
publicfunctionnum_fields(){
return$this->res->num_fields();
}
/**返回结果集的第$num条数据,object类型
*注意是第$num条,而不是一共$num条,functionrow_array()一样
**/
publicfunctionrow_object($num){
return$this->res->row($num);
}
//返回结果集的第$num条数据,array类型
publicfunctionrow_array($num){
return$this->res->row_array($num);
}
//返回结果集第一条记录,默认为object类型,可传参'array'则返回array类型
publicfunctionfirst_row($type='object'){
//if($type=='array')return$this->res->first_row('array');
return$this->res->first_row($type);
}
//返回结果集最后一条记录,默认为object类型,可传参'array'则返回array类型
publicfunctionlast_row($type='object'){
return$this->res->last_row($type);
}
//返回最后插入记录的id,适用于主键自增的表
publicfunctioninsert_id(){
return$this->db->insert_id();
}
//返回insert/update/delete操作影响的条目数
publicfunctionaffected_rows(){
return$this->db->affected_rows();
}
//设置查询的返回
publicfunctionlimit($start=0,$offset=10){
$this->db->limit($offset,$start);
}
//查询的排序方式,默认为id降序
publicfunctionorder_by($field='id',$order='desc'){
$this->db->order_by($field,$order);
}
//查询某个字段的和
publicfunctionselect_sum($field){
$this->dn->select_sum($field);
}
//GROUPBY字句
publicfunctiongroup_by($field){
$this->db->group_by($field);
}
publicfunctionhaving($hav){
$this->db->having($hav);
}
publicfunctionwhere_in($field,$in){
$this->dn->where_in($field,$in);
}
/**
*参数说明
*int$mode返回类型
*0返回多条记录
*1返回单条记录
*2返回记录的数目
*3返回limit,limit=array(start,end)
*string/array$table数据库表,两种传值模式
*普通模式:
*'tb_member,tb_money'
*数组模式:
*array('tb_member','tb_money')
*string/array$fields需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式
*普通模式:
*'username,password'
*数组模式:
*array('username','password')
*string/array$where查询条件,允许为空,两种传值模式
*普通模式:
*'andtype=1andusernamelike"%os%"'
*数组模式:
*array('type=1','usernamelike"%os%"')
*string$orderby排序,默认为id倒序
*/
publicfunctionq_select($mode,$table,$fields='*',$where,$orderby='iddesc',$limit){
//参数处理
if(is_array($table)){
$table=implode(',',$table);
}
if(is_array($fields)){
$fields=implode(',',$fields);
}
if(is_array($where)){
$where=implode(',',$where);
}
if(is_array($limit)){
$limit=implode(',',$limit);
}
if($mode==2){
$this->query("SELECTidFROM{$table}WHERE1=1{$where}");
$return=$this->num_rows();
}elseif($mode==1){
$this->query("SELECT{$fields}FROM{$table}WHERE1=1{$where}ORDERBY{$orderby}");
$return=$this->first_row();
}else{
$this->query("SELECT{$fields}FROM{$table}WHERE1=1{$where}ORDERBY{$orderby}");
$return=$this->result_object();
}
return$return;
}
/**
*参数说明
*int$mode返回类型
*0返回多条记录
*1返回单条记录
*2返回记录的数目
*string$table数据库表
*普通模式:
*'tb_member,tb_money'
*string/array$fields需要查询的数据库字段,允许为空,默认为查找全部,两种传值模式
*普通模式:
*'username,password'
*数组模式:
*array('username','password')
*string/array$where查询条件,允许为空
*数组模式:
array('username'=>'test','password'=>'test')
*/
publicfunctionselect($mode,$table,$fields,$where=array('id>'=>-1)){
$this->db->where($where);
$this->db->select($fields);
$this->res=$this->db->get($table);
if($mode==2){
return$this->num_rows();
}elseif($mode==1){
return$this->first_row();
}else{
return$this->result_object();
}
}
/**
*参数说明
*int$mode返回类型
*0无返回值
*1返回影响的条目数
*2返回最后插入的id值
*string$table数据库表
*array$set插入的字段和值
*数组模式:
array('username'=>'test','password'=>'test')
**/
publicfunctioninsert($mode,$table,$set){
$t=count($set);
foreach($setas$key=>$value){
//$set[$key]=$this->db->escape($value);
}
$this->res=$this->db->insert($table,$set);
if($mode==2){
return$this->insert_id();
}elseif($mode==1){
return$this->affected_rows();
}else{
returnnull;
}
}
/**
*参数说明
*int$mode返回类型
*0无返回值
*1返回影响的条目数
*string$table数据库表
*array$set要修改的字段和值
*数组模式:
array('username'=>'test','password'=>'test')
*array$where限制条件
*数组模式:
array('age'=>20,'usernamelike'=>'%li%')
**/
publicfunctionupdate($mode,$table,$set,$where){
$this->db->where($where);
$this->res=$this->db->update($table,$set);
if($mode==1){
return$this->affected_rows();
}elseif($mode==0){
returnnull;
}
}
/**
*参数说明
*int$mode返回类型
*0无返回值
*1返回影响的条目数
*string$table数据库表
*array$where限制条件
*数组模式:
array('username'=>'test','password'=>'test')
**/
publicfunctiondelete($mode,$table,$where){
$this->db->where($where);
$this->res=$this->db->delete($table);
if($mode==1){
return$this->affected_rows();
}else{
returnnull;
}
}
/**
*多表连接查询
*参数说明
*int$mode0返回所有结果
*1返回第一条结果
*2返回结果数目
*array$field要查询的字段
*string$table1
*string$table2连接的两个表
*array$where限制条件
*array$join连接条件
**/
publicfunctionjoin_select($mode,$field,$table1,$table2,$where,$join){
$this->db->selec