《基于NET模拟超市购物结算功能》PSP设计过程.docx
《《基于NET模拟超市购物结算功能》PSP设计过程.docx》由会员分享,可在线阅读,更多相关《《基于NET模拟超市购物结算功能》PSP设计过程.docx(34页珍藏版)》请在冰豆网上搜索。
《基于NET模拟超市购物结算功能》PSP设计过程
软件过程与管理
大作业
题目《基于.NET模拟超市购物结算
功能》——PSP设计过程
院系信息工程学院
专业班级12软件工程本1班
学生姓名
学号1242159103
设计地点教学13(602)
指导教师
起止时间:
2015年4月14日至2015年4月24日
目录
第一章项目概述3
1.项目业务3
1.1业务流程3
1.2需求分析3
2.项目结构4
2.1整体模块流程图4
2.4付款模块流程图5
3.数据库的设计5
3.1用户表的设计5
3.2商品表的设计6
3.2注册表的设计6
第二章项目PSP设计6
1.项目模块OST设计6
2.项目模块FST设计7
3.项目模块SST设计8
4.项目模块LST设计9
第三章项目PSP度量10
1.项目时间度量10
2.项目缺陷度量11
3.项目规模估算11
4.项目计划总结12
第四章项目实现与评审14
1.项目实现14
1.1代码实现14
2.项目评审19
2.1代码评审19
2.2设计评审20
第五章项目展示20
1.超市结算的首界面20
2.登录失败21
2.1失败情况一21
2.2失败情况二21
3.注册模块22
4.登录成功情况23
5.付款页面情况24
第六章总结26
第七章参考文献26
第一章项目概述
1.项目业务
1.1业务流程
网上超市购物系统的功能流程:
顾客成功登录后就可以进入网上购物系统里进行查看商品信息和选购自己所需物品,若顾客没有账号,可以先到注册页面中注册一个账号后登录系统。
顾客在添加商品时,需要添加商品的名称,价格以及数量。
系统便对查看库房信息,当货物充足的时候提取货物给用户,然后进行结账交易。
顾客也可以删除易购买商品,也可以查询自己易购买的那些商品的详细信息,查询时要指明查询的商品的记录号是多少,还可以指定查询第一个或最后一个购买的商品信息。
顾客还可以打印要购买的商品的清单,顾客在付款交易时首先生成一张临时的订单,然后顾客可以选择支付方式,完成付款后,系统会提示顾客购成功。
1.2需求分析
1)用户可以添加购买一种商品,添加的信息包括商品名称、数量和单价
2)用户可以删除已购买的一种商品
3)用户可以查询已购买的一种商品的详细信息,查询时要指明查询的商品的记录号是多少(商品记录号是按照商品购买次序编的),还可以指定查询第一个或最后一个购买的商品信息。
4)用户可以删除所有已添加到购物车的商品
5)用户可以打印要购买的商品的清单
6)用户可以清空显示信息的窗口
7)用户可以要求结帐,系统会打印出用户购物清单,并给出总价。
2.项目结构
2.1整体模块流程图
2.4付款模块流程图
3.数据库的设计
3.1用户表的设计
3.2商品表的设计
3.2注册表的设计
第二章项目PSP设计
1.项目模块OST设计
表1付款模块的OST
设计人员:
董琪日期:
2015/4/21
教练:
李恋语言:
C#
场景编号
1
用户目的
场景目的
描述一次商品付款失败的过程
操作来源
步骤
动作
备注信息
用户
1
启动系统
系统
2
要求用户输入品名
检查是否超时
用户
3
输入品名
检查是否超时
系统
4
检验是否品名是否存在
系统
5
要求用户输入数量
检查是否超时
用户
6
输入数量
系统
7
要求用户输入单价
用户
8
输入单价
检查是否超时
系统
9
检验单价是否正确
单价不正确
系统
10
付款失败
2.项目模块FST设计
表2付款模块的FST
设计人员:
董琪日期:
2015/4/21
教练:
李恋语言:
C#
类名
Shop
继承关系
属性
声明
描述
MaxTime:
Integer,Minutes
系统初始化
n:
Integer
计算尝试次数
nMax:
Integer
最大允许尝试次数
ValidIdSet
一个集合,包含所有合法品名,单价
方法
声明
描述
VoidShop.Start(n:
Int)
系统初始化
BooleanShop.Getnname(nname:
String)
获取String类型的品名,如果是合法字符串,则返回true,超时或者非法字符串则返回false
BooleanShop.Checknname(nname:
String)
Nname是否存在合法用户集中,如果属于则认为合法,反之,不合法
IntShop.Getnum(num:
Int)
获取商品数量,如果是合法字符串,则返回true,超时或者不是合法字符串则返回false
IntShop.GetPrise(Prise:
String)
获取商品的价格,如果是合法字符串,则返回true,超时或者不是合法字符串则返回false
IntShop.CheckPrise(Prise:
String)
Nname是否存在合法用户集中,如果属于则认为合法,反之,不合法
VoidShop.Pay(nname:
String,n:
Int)
尝试次数超过最大次数时,拒绝用户进行下面操作,反之允许当前用户操作以及付款。
3.项目模块SST设计
表3付款模块的SST
设计人员:
董琪日期:
2015/4/21
教练:
李恋语言:
C#
状态名称
描述
Start
付款系统启动
方法/参数
描述
Name
商品的名称
num
商品的数量
Prise
商品的价格
n
名称价格输入错误的次数
nMax
出错的最大上限,超出拒绝付款
Fail
付款结果:
成功Fail=0,失败Fail=1
状态/下一个状态
转换条件
动作
Start
Start
不存在
Checknname
永真
Getname,n:
=0;nameandPrise!
Valid
CheckPrise
不存在
End
不存在
Checknname
Start
不存在
Checknname
不存在
CheckPrise
Validname
Getprise
End
超时
File:
=true
CheckPrise
Start
不存在
Checknname
不存在
CheckPrise
不存在
End
Validname^ValidPrise
Fail:
=false,paysuccsess
End
N>=nMax^Timeout
Fail:
=false,payfail
End
End
不存在
4.项目模块LST设计
表4付款模块的LST
设计人员:
董琪日期:
2015/4/21
教练:
李恋语言:
C#
参考:
n:
theerrorcounter,maximunvaluenMax
name:
BooleanindicatorofnameValidandname!
Valid
num:
intindicatorofnumValidandnum!
Valid
Prise:
BooleanindicatorofpirseValidandprise!
Valid
Fial:
Booleanindicatoroffailurecondition,endsession
Payontothesystem
Startbyiniiallizingthenerrorcounter,setname:
=!
Valid,
num:
=!
Valid,Prise:
=!
Valid,andFail:
=false
Getname
RepeatthemainloopuntilavalidnameandnumandPriseorFail
ChecknameforValidity.{Checknamestart}
IfnonameresponseinMaxtime,setFail:
=true
Getnumforchecknullor!
null
GetPriseandcheckforvalidity.{checkPrisestart}
IfnoPriseresponseinMaxtime,setFail:
=true
Ifname!
ValidorPrise!
Valid,stepthencounter
IfnexceedsnMax,setFail:
=true
UntilnameandPriseValidorFail=true
Otherwise,repeatthemainloop.
IfFail=truecutoffpay,otherwisepaysuccess{Endstart}
第三章项目PSP度量
1.项目时间度量
表5时间记录日志
学生
董琪
日期
4/14/15
教员
李恋
课程
软件过程与管理
日 期
开始时间
结束时间
中断时间
净时间
活 动
备 注
C
U
15/5/1
8:
00
8:
25
5
20
设计
设计登录模块
15/5/1
8:
30
9:
00
10
20
设计
设计登陆模块异步处理情况
15/5/2
14:
00
15:
00
20
40
设计
设计注册模块
15/5/7
12:
00
14:
00
20
100
编码
实现登录模块
15/5/7
14:
10
14:
30
20
测试
测试登录模块的功能
15/5/8
13:
00
13:
50
10
40
修复
修复登录模块的缺陷
15/5/12
17:
00
20:
00
30
30
编码
实现登录模块的异步处理
15/5/12
20:
10
20:
35
5
20
测试
测试登录模块异步处理的功能
15/5/13
8:
00
8:
50
20
30
修复
修复异步处理出现的缺陷
15/5/14
13:
00
15:
00
10
110
编码
实现注册模块
15/5/14
15:
30
16:
00
5
25
测试
测试注册模块的功能
15/5/14
16:
00
17:
20
30
50
修复
修复注册模块的缺陷
15/5/15
14:
00
15:
00
60
设计
设计付款模块
15/5/16
12:
00
14:
00
20
100
编码
实现付款模块的功能
15/5/16
14:
20
14:
55
5
30
测试
测试付款模块的功能
15/5/16
15:
00
16:
00
10
50
修复
修复付款模块的缺陷
15/5/17
13:
00
15:
00
30
90
测试
测试所有模块的整体功能
15/5/17
15:
00
16:
00
10
50
修复
修复完善整个项目的小缺陷
2.项目缺陷度量
表6缺陷记录日志
学生
董琪
日期
2015-5-7
教员
李恋
程序号
01
日期
编号
类型
引入阶段
排除阶段
修复时间
相关缺陷
2015-5-8
1
数据
编码
修复
40
在数据库连接出现了问题,导致数据库无法连接
2015-5-13
2
函数
编码
测试
30
异步处理的功能函数没有实现
2015-5-14
3
函数
编码
测试
50
在注册模块中的异步处理没有实现,不能提醒用户已存在
2015-5-16
4
语法
编码
测试
10
在代码中总是少;导致语法出现错误
2015-5-16
5
函数
编码
测试
20
在付款模块中,添加商品信息的函数没有实现
2015-5-16
6
赋值
编码
测试
10
在定义变量时没有初始化变量
2015-5-17
7
接口
编码
修复
30
在登录模块和注册模块的跳转没有实现好
2015-5-17
8
环境
编码
测试
30
测试的时候出现了中断现象
3.项目规模估算
表7:
董琪的程序规模估计
学生 董琪 日期 15/5/15
教员 李恋 课程 软件过程与管理
程序
代码行
以前的功能
估计的功能
最小
平均
最大
Loops
4
10
简单While-loop
5
14
中等repeat-until
Repeat-until
7
11
14
Case
2
11
小的Case语句
Case
5
8
11
3
14
大的Case语句
Data
6
18
小的链表
Calc.
1
20
小的计算
calculation
10
15
20
估计
22
34
45
4.项目计划总结
表8:
PSP项目计划总结表
学生 董琪 日期 2015/4/21
程序 001 程序号# 001
教师 李恋 程序设计语言 C#
总结 计划 实际 累计
Minutes/LOC 6.30 4.93 5.92
LOC/Hour 10.47 12.90 10.95
Defects/KLOC 96.90 77.9 92.53
过程效益33.380.040.0
A/FR
程序规模(LOC)
新开发与更改的 67 77 335
最大规模 85
最小规模 49
开发阶段时间/min 计划 实际 累计 累计百分比
计划 23 32 120 6.5
设计 39 44 195 10.6
编码 166 155 792 43.1
代码复查 29 34 145 7.9
编译 24 8 100 5.5
测试 62 39 279 15.2
后置处理 41 46 206 11.2
总计 384 358 1837 100.0
最大时间 487
最小时间 281
引入的缺陷 计划 实际 累计 累计百分比 Def/Hour
计划
设计 1 1 5 16.1 1.54
编码 5 4 25 80.7 1.89
代码复查
编译 1 1 3.2
测试
总计 6 6 31 100.0
排除的缺陷 计划 实际 累计 累计百分比 Def/Hour
计划
设计
编码
代码复查 2 4 12 38.7 4.97
编译 3 1 13 41.9 7.80
测试 1 1 6 19.4 1.29
总计 6 5 31 100.0
第四章项目实现与评审
1.项目实现
1.1代码实现
登录模块的代码:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespaceshop
{
publicpartialclassForm2:
Form
{
publicForm2()
{
InitializeComponent();
}
privatevoidbutton1_Click(objectsender,EventArgse)
{
Stringname=this.textBox1.Text;//(this.textBox1.Text为输入用户名的文本框的名字)
Stringpass=this.textBox2.Text;//(这里是输入密码的)
Stringconn=@"DataSource=