No Bug
031402401鲍亮
031402402曹鑫杰
031402403常松
031402412林淋
031402418汪培侨
031402426许秋鑫
一、修改完善需求规格说明书
-
《需求规格说明书》初稿不足
1.未设置管理员的角色,对系统进行维护。
2.缺少数据精度规范。
-
改进内容
1.在性能需求中添加精度需求,对系统中运用到的数据进行类型定义,条件限制等。
2.设置管理员角色,更新类图、用例图、功能描述部分和验收标准中管理员功能部分
附coding.net文档链接
二、代码规范和编码原则
Android代码规范
-
命名基本规范
1.编程基本命名规范
(1)避免难懂的名称,如属性名xxK8
,这样的名称会导致多义性。
(2) 在面向对象的语言中,在类属性的名称中包含类名是多余的,如Book.BookTitle
,而是应该使用Book.Title
。
(3)在允许函数重载的语言中,所有重载都应该执行相似的函数。
(4)使用动词-名词的方法来命名对给定对象执行特定操作的例程,如CalculateInvoiceTotal()
。(例程是某个系统对外提供的功能接口或服务的集合
(5)只要合适,在变量名的末尾或开头加计算限定符(Avg
、Sum
、Min
、Max
、Index
)。
(6)在变量名中使用互补对,如min/max
、begin/end
和open/close
。
(7)布尔变量名应该包含Is,这意味着Yes/No 或 True/False 值,如 fileIsFound
。
(8)即使对于可能仅出现在几个代码行中的生存期很短的变量,仍然使用有意义的名称。仅对于短循环索引使用单字母变量名,如 i 或 j。
(9)为了帮助区分变量和类型/类/函数名,对类型/类/函数名使用Pascal大小写处理 (CalculateInvoiceTotal),其中每个单词的第 一个字母都是大写的。对于变量名,使用 camel大小写处理 (documentFormatType)。
(10)不要使用原义数字或原义字符串,而是使用命名常数,NUM_DAYS_IN_WEEK ,以便于维护和理解。
2.分类命名规范
(1)包的命名
Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。 例如: net.frontfree.javagroup
(2)类的命名
类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来代表对象的,所以在命名类时应尽量选择名词。 例如: Circle
(3)常量的命名
常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。 例如: MAX_VALUE
(4)参数的命名
参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。
3 .注释
(1)注释不要解释程序段是怎么运行的,应该解释程序做什么,为什么这么做。注释也要随着程序的修改而不断更新。
(2)注释放置的位置:对于比较短的注释(如变量的解释),不用另起一行注释,对于比较长的注释,要另起一行注释。
(3)对于每个变量名,每个函数,都要注释,对于一些较复杂的循环,要注释该循环是为了做什么。
(4)一个工程应有一个统一的头文件注释,以说明整个工程的信息、创建日期、版本等等。
(5)修改代码或删除时,将原代码用注释的方法屏蔽,同时要加开发者自身对修改操作的注释。格式为:
//原代码 //Added/(Modified/ Deleted) by 开发者姓名 年-月-日; //因为业务原因修改的,要注明修改或删除原因) 新代码
(6)使用XML文档格式,如下面方法的注释:
/// <summary>
/// 得到某人的年龄
/// </summary>
/// <param name= "userName "> 用户名 </param>
///<returns> 用户年龄 </returns>
public int GetUserAge(string userName)
{
//此处写你的程序代码 //
}
(7)移除所有临时或无关的注释,以避免在日后的维护工作中产生混乱。
(8)注释应对代码进行准确的说明,不应存在歧义。
(9)在整个应用程序中,使用具有一致的标点和结构的统一样式来构造注释。
4.基本数据类型命名规范
- Integer:int+描述
- Char:chr+描述
- Boolean:bln+描述
- Long:lng+描述
- Short:shr +描述
- Double:dbl+描述
- String:str+描述
- Float:flt+描述
- Single:sng+描述
- DataTime:dt+描述
- Array:arr+描述
- Object:obj+描述
如:String srtName
5.控件命名规范
- TextView :txt_+描述
- Button :btn_+描述
- ImageButton :imgBtn_+描述
- ImageView :imgView_+描述
- CheckBox :chk_+描述
- RadioButton :rdoBtn_+描述
- AnalogClock :anaClk_+描述
- DigitalClock :DgtClk_+描述 4
- DatePicker :dtPk_+描述
- TimePicker :tmPk _+描述
- ToggleButton :tglBtn_+描述
- EditText:edtTxt_+描述
- ProgressBar:lcb_+描述
- SeekBar:skBar _+描述
- AutoCompleteTextView:autoTxt_+描述
- MultiAutoCompleteTextView:mlAutoTxt_+描述
- ZoomControls:zmCtrl_+描述
- Include:ind_+描述
- VideoView:vdoVi_+描述
- WebView:webVi_+描述
- RatingBar:ratBar_+描述
- Tab:tab__+描述
- Spinner:spn_+描述
- Chronometer:Cmt_+描述
- ScrollView:sclVi_+描述
- TextSwitcher:txtSwt_+描述
- Gallery:gal_+描述
- ImageSwitcher:imgSwt_+描述
- GridView:gV_+描述
- ListView:lVi_+描述
- ExpandableList: epdLt_+描述
- MapView: mapVi_+描述
控件说明如下:
- TextView - 文本显示控件
- Button - 按钮控件
- ImageButton - 图片按钮控件
- ImageView - 图片显示控件
- CheckBox - 复选框控件
- RadioButton - 单选框控件
- AnalogClock - 钟表(带表盘的那种)控件
- DigitalClock - 电子表控件
- DatePicker - 日期选择控件
- TimePicker - 时间选择控件
- ToggleButton - 双状态按钮控件
- EditText - 可编辑文本控件
- ProgressBar - 进度条控件
- SeekBar - 可拖动的进度条控件
- AutoCompleteTextView - 支持自动完成功能的可编辑文本控件
- MultiAutoCompleteTextView - 支持自动完成功能的可编辑文本控件,允许输入多值(多值之间会自动地用指定的分隔符分开)
- ZoomControls - 放大/缩小按钮控件
- Include - 整合控件
- VideoView - 视频播放控件
- WebView - 浏览器控件
- RatingBar - 评分控件
- Tab - 选项卡控件
- Spinner - 下拉框控件
- Chronometer - 计时器控件
- ScrollView - 滚动条控件
- TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
- Gallery –画廊控件
- ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果) • GridView - 网格控件
- ListView - 列表控件
- ExpandableList - 支持展开/收缩功能的列表控件
-
代码书写规范
(1)建立标准的缩进大小(四个空格),并一致地使用此标准。用规定的缩进对齐代码节。
(2)在发布源代码的硬拷贝版本时使用特定的字体以及字号(新宋体、小五号)。
(3)在括号对对齐的位置垂直对齐左括号和右括号。
格式如下:
Int Sum()
{
}
(4)当有多层嵌套时,每一层嵌套都要有完整的{ }。
(5)为注释和代码建立最大的行长度,以避免不得不滚动源代码编辑器,并且可以提供整齐的硬拷贝表示形式。
(6)当一行内容太长而必须换行时,在后面换行代码中要使用缩进格式。每一行上放置的语句避免超过一条。特殊循环如for(i =0;i<100;i++)等除外。
(7)编写SQL语句时,对于关键字使用全部大写,对于数据库元素(如表、列和视图)使用大小写混合。例如SELECT * FROM Table1;
(8)将每个主要的SQL子句放在不同的行上,这样更容易阅读和编辑语句,例如:
SELECT FirstName, LastName
FROM Customers
WHERE State = 'WA '
(9)在物理文件之间在逻辑上划分源代码。
(10)将大的复杂代码段分为较小的、易于理解的模块。
-
代码设计规范
1.函数
app的绝大部分功能,都要在程序的函数中实现,函数要相对独立。
2.类
使用类来封装面向对象的概念和多态。
3.错误处理
(1)通常的法则是系统在正常状态并且用户正常操作下,不应产生任何异常。
(2)对可预见的错误不进行捕捉,而是在错误发生前通过条件判断避免发生。
(3)对不可预见或者难以解决错误进行try{…}catch(e){..}捕捉处理。
php编码规范
参考别人的代码规范后,汲取我们需要的部分,形成编码规范。附注:代码规范制定了代码基本元素的相关标准,确保共享的PHP代码间具有较高程度的技术互通性。
- 文件格式
1.缩进使用4个空格,不使用TAB键。每一个单词符号之间要有一个空格,除了()
以外
例如:
if (1 == $x) {
$indented_code = 1;
if (1 == $new_line) {
$more_indented_code = 1;
}
}
2.对于只含有PHP代码的文件,文件结尾忽略掉"?>"
。
3.PHP代码文件必须统一采用UTF-8
编码。
4.PHP代码文件必须以<?php
标签开始。
5.每行的结尾不允许出现多余的空格。
6.每行代码长度应控制在80个字符以内,最长不超过120个字符。为了方便查看,也为了系统为此做出更大开销。
- 命名规定
1.文件名只允许出现字母,采用驼峰法命名,并且首字母大写,每个单词首字母也要大写。
例如:DbMysql.php
2.类的命名采用驼峰法命名,并且首字母要大写,每个单词首字母也要大写。
3.方法名只允许由字母组成,下划线是不允许的,首字母要小写,其后每个单词首字母要大写,且越详细越好,应该能够描述清楚该方法的功能。
例如:switchModel
findPage
4.当类成员方法被声明为 private 时,必须分别以双下划线 "__
"为开头;被声明为 protected 时,必须分别以单下划线 "_
" 为开头;一般情况下的方法不含下划线。例如 :
class Foo
{
private function __example()
{
// ...
}
protected function _example()
{
// ...
}
public function example()
{
// ...
}
}
5.属性的命名只允许由字母组成,下划线是不允许的,首字母要小写,其后每个单词首字母要大写。
例如:tablePrefix
、tableName
6.被声明为 private的类成员属性必须由双下划线 "__
" 作为开头;被声明为 protected 的类成员属性必须由下划线 "_
" 作为开头;而声明为 public 的成员属性则在任何时候都不允许含有下划线。
class Foo
{
private $__name;
protected $_telephone;
public $num;
}
7.函数的命名使用小写字母和下划线的方式,且越详细越好,应该能够描述清楚该函数的功能。
例如:get_client_ip
8.当方法或函数参数不一定需要被赋值的时候,用 "null" 来代替 "false" 作为函数参数的默认值,除非该参数是 boolean 值。
9.变量只允许由小写字母和下划线组成,且建议用描述性的变量的命名,越详细越好,以至于像$i
或 $n
等等都是不鼓励使用的。
例如$user_name
10.类中的常量 constant 和全局范围内常量define,只能由大写字母和下划线组成,各个单词之间以下划线分割。
11.boolean 值和 null 值都采用小写。
12.确保文件的命名和调用大小写一致,是由于在类Unix系统上面,对大小写是敏感的。
- 编码风格
1.php 代码必须以完整的形式来定界(),即不要使用php 短标签(),且保证在关闭标签后不要有任何空格。
2.当一个字符串是纯文本组成的时候(即不含有变量),则必须总是以单引号'
作为定界符。例如:
$a = 'Example String';
3.变量替换中的变量只允许用 $+变量名 的形式。
例如:
$greeting = "Hello $name, welcome back!"; // 允许
$greeting = "Hello {$name}, welcome back!"; // 允许
$greeting = "Hello ${name}, welcome back!"; // 不允许
4.当用点号 "." 连接各字符串的时候,字符串与点号间必须用一个空格隔开,且允许把它分割成多行以增强可读性。在这种情况下,点号 "." 必须与等于号 "=" 对齐。例如:
$sql = "SELECT `id`, `name` " . " FROM `people` "
. "WHERE `name` = 'Susan' "
. "ORDER BY `name` ASC ";
5.当用 array 类型符号来构造数组的时候,必须在每个逗号之后加上一个空格来增强可读性。例如:$sampleArray = array(1, 2, 3, 'Think', 'SNS');
6.当使用 array 类型符声明关联数组的时候,我们鼓励把它分成多个行,只是我们必须同时保证每行的键与值的对齐,以保持美观。例如:
$sampleArray = array(
'firstKey' => 'firstValue',
'secondKey' => 'secondValue'
)
7.大括号的开始必须在类名的下一行顶格。例如:
class Think
{
// ...
}
8.不允许用 var 符号来声明变量,类成员变量必须以 private,protected 和 public 来声明。其次,把类成员声明为 public 而直接引用虽然是允许的,但通常更好的方法是使用 get 和 set 方法来访问类成员。
例如:
class Foo
{
protected $_testObj;
public function getTestObj()
{
return $this->_testObj;
}
public function setTestObj($testObj)
{
$this->testObj = $_testObj;
}
}
9.方法必须总是用 private,protected 或者 public 来声明其作用域。
10.函数或方法的初始大括号应该在函数声明的下一行顶格。例如:
function get_client_ip()
{
// …
}
11.在函数或方法名与参数括号之间不允许出现多余的空格。例如:
function get_client_ip()
{
// …
}
12.引用只允许定义在函数参数中,实时传递引用是禁止的。
// 引用定义在函数参数-允许的
function defineRefInMethod(&$a)
{
$a = 'a';
}
defineRefInMethod($b);
echo $b; // 'a'
// 实时传递引用-禁止的
function callTimePassRef($a)
{
$a = 'a';
}
callTimePassRef(&$c);
echo $c; // 'a'
13.基于"if", "else"和"else if"的条件控制里,我们必须用空格间隔开语句和括号,大括号的开始 "{" 必须与条件控制语句位于同一行,结束 "}" 必须总是独占一行且顶格,控制流程内容必须用四个空格进行缩进,且不使用"elseif"。
if ($condition) {
// ...
} else if ($_condition) {
// ...
} else {
// ...
}
14.在条件控制语句的条件括号内,必须用空格将操作符与其它元素隔开。如果遇到很长的逻辑判断,则鼓励用内嵌括号来分割各个逻辑。例如:
if (($a != 2) and ($b == 1)) {
$a = $b;
}
15."switch" 条件控制语句中,必须用空格将待测参数与其它元素分隔开。例如:
switch ($num) {
// …
}
16."switch" 语句的内容必须以四个空格缩进,"case" 条件控制的内容必须再加四个空格进行缩进。例如:
switch ($indentedSpaces) {
case 2:
echo "错误";
break;
case 4:
echo "正确";
break;
default:
break;
}
17.在 "switch" 语句中应该总是包括 "default" 控制。
18.有时候我们需要在 "case"
语境中省略掉 "break"
或 "return"
,这个时候我们必须为这些 "case" 语句加上 "// 此处无break" 注释。例如:
switch ($numPeople) {
case 1: // 此处无break
case 2:
break;
default:
break;
}
- 总结
对于方法或属性,这些在类里面的统一采用,驼峰法命名,首字母小写,后面每个单词开头要大写,除了上面的private,等等要加相应的下划线。
对于函数或变量,这些在类外面的,统一采用小写字母,函数和变量要尽量详细,都是小写字母+下划线的组合。
对于花括号的换行,对于函数,方法,类这些主题部分,花括号都要重新换行写,在这些主题部分内部的花括号不换行,直接接到对应关键的后面,例如:
for(){ } if(){ } switch(){ }
三、数据库设计
PowerDesigner设计图
- 注释
用户:User
用户名:userName
手机号:phoneNumber
密码:password
性别:sex
学校:school
头像:headportrait
生日:birthday
职业:occupation
个人说明:description
帖子:Message
帖子ID:messageId
类型:type
标题:title
来源:location
物品名称:commodity
状态:state
发布时间:postTime
单价:price
单位:unit
人数:member
截止时间:deadline
描述:description
图片:photo
联系方式:contact
用户相关帖子:UserMessage
浏览时间:readTime
收藏时间:collectTime
被举报帖子:ReportedMessage
举报者手机号:reporterNumber
管理员:Admin
用户名:Name
ER图
四、体系结构设计
采取MVC框架
-
模型(Model)封装的是数据源和所有基于对这些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。模型持有所有的数据、状态和程序逻辑。模型独立于视图和控制器。
-
视图(View)封装的是对数据源Model的一种显示。一个模型可以由多个视图,而一个视图理论上也可以同不同的模型关联起来。
-
控制器(Controller)封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。
主要功能流程描述
-
注册
-
发帖
-
举报
五、分工和工作量比例
- 分工
队员 | 工作 |
---|---|
鲍亮 | 项目的体系结构设计和界面设计;随笔撰写 |
曹鑫杰 | Android编码规范 |
常松 | 需求规格说明书改进;项目的体系结构设计和界面设计 |
林淋 | 数据库设计,ER图 |
汪培侨 | PHP编码规范 |
许秋鑫 | Android编码规范 |
- 工作量比例
队员 | 工作比例 |
---|---|
031402401鲍亮 | 0.17 |
031402402曹鑫杰 | 0.16 |
031402403常松 | 0.17 |
031402412林淋 | 0.17 |
031402418汪培侨 | 0.16 |
031402426许秋鑫 | 0.17 |