资源描述
校园停车场管理系统
设计说明书
课程名称: 软件工程课程设计
小组成员:-------------------------------------------------
指导教师: ---------
课程时间: 2013.08.27——09.06
II
目录
第一章 问题定义 1
1.1 引言 1
1.2 系统名称及概况 1
第二章 可行性研究 1
2.1 系统分析 1
2.2 系统组成 3
第三章 需求分析 3
3.1 功能需求分析 3
3.2 数据库需求分析 6
3.2.1 数据库的概念模型 6
3.2.2 数据库的逻辑模型 7
第四章 总体设计 11
4.1 总体设计 11
4.2 数据流图 11
4.3 业务流程分析 12
4.4 系统功能模块 13
4.5 系统模块设计 14
4.6 数据库的实现脚本 15
4.6.1 定义SQL模式 15
4.6.2 创建基本表 15
4.6.3 创建SQL索引 19
4.6.4 SQL数据控制——授予权限 19
第五章 详细设计 20
5.1 软件结构功能模块 20
5.2 程序流程图 22
第六章 编码与测试 26
6.1 身份验证C++源程序代码 26
6.2 身份验证MFC窗口实现 27
6.3 身份验证模块软件测试 28
结语 28
附件1:伸缩门改造目标样式 29
附件2:校园停车场分布示意图 30
第一章 问题定义
1.1 引言
近年来,随着我国经济的快速发展,人们生活水平的不断提高,物质需求和生活方式也发生着深刻的变化,以前属于奢侈品的汽车己经逐步走入了人们的日常生活。伴随汽车消费大众化,校园内车辆数迅速增加,迫切需要规范化的校园停车场管理系统对校园停车进行高效管理。
停车是"速度为零的交通”,停车场及附属相关设施是静态交通的重要组成部分。目前的多数停车场存在着以下几个问题,管理漏洞、系统的可靠性、独立性强、收费过程比较繁琐、劳动强度高、停车场利用率低下、票款易流失等。针对这些问题,该停车场管理系统从以下几方面进行设计:针对管理进行了优化,采用划卡消费和现金支付相结合,系统计时收费;采用关系数据库标准语言SQL,借助VC++ 6.0软件进行窗口设计。优化后的系统使用方便、服务高效、收费透明、可防止票款的流失,提高可靠性的同时也提高了操作者的工作效率。
1.2 系统名称及概况
系统名称:校园停车场管理系统
建设性质:新建系统及校园出入口伸缩门改造(目标样式见附件1)
建设地点:吉林大学南岭校区
系统概况:
在校园东门和西门安装停车管理及实时监控系统,主要功能包括泊位引导、停车收费、实时监控跟踪等。将校园内停车泊位划分为几个停车场区(见附件2),车辆在入口可以清楚地知道各停车区的泊位利用情况,经过信息登记,在道路标志引导下进入相应停车区的空闲泊位。车辆在入口进行信息登记后,系统可以对车辆进行实时监控,直到车辆在出口进行信息核对并缴费后离开校园。
第二章 可行性研究
2.1 系统分析
系统采用感应卡实施管理,在停车场的出入口各设置一套出入口管理设备,使停车场形成一个相对封闭的场所,进出车辆只需将感应卡在读卡箱前轻晃一下,系统即能瞬时完成检验、记录、核算、收费等工作,挡车道闸自动启闭,实现方便快捷的停车场管理。
停车卡可根据车主身份的不同,分别发行月租卡、免费卡和临时卡三种类型的卡。系统支持三种卡类的不同收费方式,以满足按车主身份分别收费的要求。电脑自动计时、计费,免费卡和月租卡自动识别,临时卡人工收取现金,服务快捷高效,电脑显示屏及收费显示屏同时显示停车时间与应收费用,卡上余额或有效期限,收费透明度高,票箱显示屏还提示指导住户使用停车场,并以文明语言问候致意。
软件管理实行分级权限制。对出口值班员来讲,其登录后可进入收费管理,期间该出口所有收费均自动记入该值班员名下并存入电脑数据库。由于值班员受权限限制,不能进入系统中更高的软件菜单项,所以对电脑所记录的数据无法干涉;上级管理者可以随时查询,核对或打印一个值班段或任何一段时间乃至整个停车场的工作记录。这样就从根本上杜绝了停车费用流失和财务统计的失误,同时系统自动运行,杜绝了人情车、霸王车造成的经济损失。
系统还可在停车场的出入口各安装的1台高解像度彩色固定摄像机、固定支架、自动光圈手动对焦镜头,可24小时监视车辆出入情况,看清车牌号码。当有车辆驶入车场时,摄像机将信号通过视频电缆传输到停车场管理系统中,存入数据库中;当有车辆驶离车场时,车辆除应交纳必要的管理费用外,驶离车辆的所有资料(车牌、型号、颜色等)都必须与驶入车场时的资料对比相同(为人工识别),闸杆才升起,让车辆通过。
综上分析,停车场管理系统的车辆进出工作流程为:
进场时,驾驶员驱车到入口控制机处,如果是月租卡或免费卡(称为固定卡)用户,直接刷卡就能进入。读卡后,系统会判断卡是否在有效限期内,是否有余额,并且判断是否有在停车场内部未出的记录。如果满足预设条件,则开闸放行,否则语音提示不放行。如果是临时卡,则驾驶员自己取卡,道闸开启,车辆通行。
出场时,固定卡,直接刷卡进出;临时卡,操作员收费后,开闸放行。
车辆不论是进或者出,在开启道闸的瞬间,摄像系统拍照记录并保存。车辆通过道闸后,道闸自动落杆。
停车场管理系统分为入场停车和出场取车两部分。系统流程图如图2-1所示。
图 2-1 系统流程图
A.入场停车流程
(1)入场
根据车位实时统计显示系统给出的停车场实时利用信息来控制车辆的入场,停车场在有车位的情况下方能停车。
(2)卡审核
刷卡或者发放临时卡,系统自动记卡编号、卡号、卡类型、余额、发卡时间、有效时间、卡状态(已发或挂失)等基本信息,刷卡时并判断卡的有效性,若有效,图像系统自动摄录一幅车辆进场图像于电脑,播放欢迎词,并放行车辆。
(3)停车
系统为用户分配停车位,用户在道路泊位引导标志的指引下,到指定停车位置停车。
B.出场取车流程
若用户需要查找停放位置,拨打卡面上提供的帮助电话,操作员在系统中帮忙查找车辆停放位置信息。
(1)出场审核
车辆在出口处刷卡或交还临时卡,系统自动记录卡信息。同时系统自动显示该车进场图像,收费员确认无误后收费。
(2)收费
系统根据车辆信息、卡类型以及停车时间等,依据收费标准计算收费额度实施收费环节。(划卡或人工收取现金)
(3)出场
交费之后,操作员按确认键,图像系统自动摄录一幅车辆出场图像于电脑,语音系统提示“谢谢,祝您一路平安!”等声音,电动栏杆升起。车辆通过埋在车道下的车辆检测线圈后,电动栏杆自动落下。
2.2 系统组成
系统分为软件部分和相应的硬件设施。
软件部分:停车计费系统、车位实时统计显示系统。
硬件设施:感应卡(具备GPS定位功能)、泊位引导标志、校园泊车实时监控摄像系统、自动挡车道闸、车辆检测器(环型感应线圈检测器、超声波检测器、红外检测器、雷达检测器、视频检测器等)、刷卡机箱、控制主板、票据打印机、停车场嵌入式计算机、自动发卡机、自动收卡机。
第三章 需求分析
3.1 功能需求分析
根据停车场管理系统的需求,确定了该系统的用例图如下图所示。
图3-1 停车场管理系统用例图
图3-2 客户用例图
图3-3 系统管理员用例图
图3-4 操作员用例图
如图3-1所示,该系统主要有超级管理员、管理员和操作员三种角色,不同角色的基本任务如下所述。
超级管理员具有最高权限,即对本系统所有权限的操作权和授予权。超级管理员授权给管理员,并赋予管理员应有的权限。
管理员可根据需要来维护角色信息,并授权给相应的操作员,进行系统的基本参数设置、权限设置、数据管理和操作员的档案管理。
操作员行使管理员赋予的权限,进行档案管理(车辆档案、卡档案管理、用户档案管理)、入场管理、收费管理和出场管理。
根据用例图得到的部分类图,如图 3-5
图 3-5 类图
3.2 数据库需求分析
3.2.1 数据库的概念模型
如图 3-6所示的系统数据库ER图,制定一个收费标准,要根据卡的类型以及收费的标准(时收费或次收费)来确定。停车场的每一个用户都有唯一的一条卡信息与自己的车信息绑定。停车场的总车位数决定了车位表的总车位,一个车位只能存放一辆车。根据入场时的信息和出场时的信息以及收费标准,综合得出收费金额。交班记录要记下该员工的上、下班时间以及在这段时间内的所有操作。
图 3-6 系统数据库ER图
根据系统需求,本系统需要设计13张表。
卡信息表:存放卡的相关信息。
停车场参数表:存放停车场的基本参数。
用户表:存放用户的基本信息。
车信息表:存放车的基本信息。
权限表:存放对应的权限信息和对应的行使该权限人员的相关信息。
时收费表:存放按时收费的时间段。
次收费表:存放按次收费的时间段。
入场表:存放入场时候的一些信息。
出场表:存放出场时的相关信息。
交班表:存放操作员交接班的相关信息。
收费表:存放停车一段时间的收费信息。
车位表:用于存放每一个车位上的停车状态。
收费标准表:存放收费的统一标准。
3.2.2 数据库的逻辑模型
针对ER模型中对表的要求,下面给出各个表的详细结构。
表3-1 卡信息表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
cardid
卡编号
var char
20
否
是
cardno
卡号
var char
20
是
否
cardtype
卡类型
var char
20
是
否
cardmoney
余额
money
8
是
否
sendtime
发卡时间
timestamp
8
是
否
activetime
有效时间
timestamp
8
是
否
sendflag
已发
boolean
1
是
否
loseflag
挂失
boolean
1
是
否
表3-2 停车场参数表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
parkname
停车场名字
var char
20
是
否
parktotal
总车位
int
4
是
否
entertotal
入口车道数
int
4
是
否
exittotal
出口车道数
int
4
是
否
parktel
停车场电话
var char
20
是
否
parkadd
停车场地址
var char
20
是
否
表3-3 用户表
字段名
描述
类型
长度
是否为空
是否主键
id
编号
var char
20
否
是
username
用户名
var char
20
是
否
usersex
性别
char
2
是
否
usertel
电话
var char
20
是
否
cardno
卡号
var char
20
是
否
carno
车牌
var char
20
是
否
address
地址
var char
20
是
否
表3-4 车信息表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
carid
编号
var char
20
否
是
carno
车牌号
var char
20
是
否
cartype
车类型
var char
20
是
否
表3-5 权限表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
poperatorid
编号
var char
20
否
是
poperatorname
姓名
var char
20
是
否
poperatorsex
性别
char
10
是
否
poperatorpsw
密码
var char
20
是
否
poperatorright
权限
var char
20
是
否
表3-6时收费表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
timeno
时间号
int
4
否
是
starttime
开始时间
char
10
是
否
endtime
结束时间
char
10
是
否
表3-7 次收费表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
timesno
次号
int
4
否
是
starttime
开始时间
char
10
是
否
endtime
结束时间
char
10
是
否
表3-8 入场表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
encardid
入场编号
var char
20
否
否
encardno
卡号
var char
20
是
否
encarno
车牌
var char
20
是
否
enway
入场车道
var char
20
是
否
entime
入场时间
timestamp
8
是
否
enposition
占用车位
var char
20
是
否
表3-9 出场表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
exited
出场编号
var char
20
否
否
excardno
卡号
var char
20
是
否
excarno
车牌
var char
20
是
否
exway
出场车道
var char
20
是
否
extime
出场时间
timestamp
8
是
否
exposition
腾出车位
var char
20
是
否
表3-10 交班表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
tnoperator
操作员
var char
20
否
否
tnlogintime
登录时间
timestamp
8
是
否
tnturntime
交班时间
timestamp
8
是
否
entimes
进场次数
int
4
是
否
extimes
出场次数
int
4
是
否
totalmoney
金额总计
money
8
是
否
表3-11 收费表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
chargeid
收费编号
var char
20
否
否
chcardno
卡号
var char
20
是
否
chcarno
车牌
var char
20
是
否
chmoney
收费金额
money
8
是
否
表3-12 车位表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
cpcarno
车牌
var char
20
是
否
positionstate
车位状态
var char
20
是
否
表3-13 收费标准表
字段名
描述
类型
长度
是否为空
是否主键
id
自增
int
4
否
是
chargestid
标准编号
int
4
是
否
cardtype
卡类型
var char
20
是
否
cartype
车类型
var char
20
是
否
chargetype
收费类型
var char
20
是
否
timeno
时间编号
int
4
是
否
unittime
单位时间
int
4
是
否
unitsum
单位金额
int
4
是
否
maxsum
最大金额
int
4
是
否
第四章 总体设计
4.1 总体设计
首先判断登录的身份,进入相应的操作页面进行需要的操作,最终完成目的操作的功能。本系统UML活动图如图4-1所示。
它们的内在关系由数据库和程序来控制。
图4-1 UML活动图
4.2 数据流图
本软件的顶层数据流图如图4-2所示:
图4-2 顶层数据流图
4.3 业务流程分析
本系统的使用者是停车场的工作人员,为了便于管理并借鉴现有停车场的管理模式,划分成三个角色的用户。工作人员首先登陆系统,经过一系列的身份验证,登陆成功之后进入相应的操作界面,实现各自的管理功能。总体功能分析业务流程图。如图 4-3业务流程图
图4-3 业务流程图
其中各模块有对应的添加、修改及删除功能。
4.4 系统功能模块
如图 3-3 系统功能模块划分
图 4-4 系统功能模块划分
4.5 系统模块设计
(1)授权管理模块 具有最高管理权限超级管理员对该模块进行操作,对管理员进行授权,添加、删除、修改管理员。
(2)系统设置 由超级管理员授权的管理员行使该功能,主要是对停车场的参数进行设置。
(3)操作员档案管理 由管理员行使修改功能,对停车场业务操作员进行管理,添加、删除、修改操作员的信息。
(4)数据管理模块 该模块显示了停车场日常运行所产生的数据,场内车辆,进出数据,收费金额以及交班记录的相关信息。
(5)档案管理 该部分功能为操作员所使用,主要是对停车场发放的卡进行管理、车档案的管理以及停车场顾客的信息档案管理。他们都有自己的添加、删改、修改的功能。
(6)入场管理 该模块是本系统的一个重要的功能模块,主要采集汽车入场时候的一些必要的参数,对参数进行处理和判断,这些获得的参数提交到后台进行相关的处理。
(7)出场管理 汽车离场之前对其进行的离场验证和停车时间的数据收集,为下一收费模块提供数据。
(8)收费管理 该模块是本系统最重要的一个模块,根据出入场提供的参数结合该模块收费标准的设置计算出收费的金额,完成收费并打印出收费清单。
4.6 数据库的实现脚本
4.6.1 定义SQL模式
为停车场管理系统定义一个SQL模式,其拥有者为超级管理员。
CREATE SCHEMA PARK AUTHORIZATION administrator;
4.6.2 创建基本表
1 卡信息表
CREATE TABLE PARK.pcard
(
id int IDENTITY (1, 1) NOT NULL ,
cardid var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
cardno var char (20) ,
cardtype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
cardmoney money NULL ,
sendtime timestamp NULL ,
activetime timestamp NULL ,
sendflag var char (10) COLLATE Chinese_PRC_CI_AS NULL ,
loseflag var char (10) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id,cardid));
2 停车场参数表
CREATE TABLE PARK. parkparameter
(
id int IDENTITY (1, 1) NOT NULL ,
parkname var char (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
parktotal int NULL ,
entertotal int NULL ,
exittotal int NULL ,
parkadd var char (50) COLLATE Chinese_PRC_CI_AS NULL ,
parktel var char (20) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id),);
3 用户表
CREATE TABLE PARK.users
(
Id int IDENTITY (1, 1) NOT NULL ,
userid var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
username var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
usersex var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
usertel var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
usercarid var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
usercardid var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
useradd var char (50) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id)
FOREIGN KEY (usercarid) REFERENCES car(carid),
FOREIGN KEY (usercardid) REFERENCES pcard(cardid));
4 车信息表
CREATE TABLE PARK.car
(
id int IDENTITY (1, 1) NOT NULL ,
carid var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
carno var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
cartype var char (20) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id,carid));
5 权限表
CREATE TABLE PARK.rateright
(
Id int IDENTITY (1, 1) NOT NULL ,
poperatorid var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
poperatorname var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
poperatorsex char (10) COLLATE Chinese_PRC_CI_AS NULL ,
poperatorpsw var char (20) COLLATE Chinese_PRC_CI_AS NULL,
poperatorright var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
PRIMARY KEY (id,poperatorid));
6 时收费表
CREATE TABLE PARK.ptime
(
Id int IDENTITY (1, 1) NOT NULL ,
timeno int NOT NULL ,
starttime var char (50) COLLATE Chinese_PRC_CI_AS NULL ,
endtime var char (50) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id,timeno));
7 次收费表
CREATE TABLE PARK.ptimes
(
id int IDENTITY (1, 1) NOT NULL ,
timesno int NOT NULL ,
starttimes char (8) COLLATE Chinese_PRC_CI_AS NULL ,
endtimes char (8) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id, timesno));
8 入场表
CREATE TABLE PARK.entrance
(
id int IDENTITY (1, 1) NOT NULL ,
encardno var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
encardtype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
encarno var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
encartype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
enway var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
entime timestamp NULL ,
enposition var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
enchargetype var char (50) COLLATE Chinese_PRC_CI_AS NULL ,
enoperator var char (50) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id));
9 出场表
CREATE TABLE PARK.pexit
(
id int IDENTITY (1, 1) NOT NULL ,
excardno var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
excarno var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
exway var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
extime timestamp NULL,
exposition var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
PRIMARY KEY (id));
10 交班表
CREATE TABLE PARK.turn
(
id int IDENTITY (1, 1) NOT NULL ,
tnoperator var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
tnlogintime timestamp NULL ,
tnturntime timestamp NULL ,
entimes int NULL ,
extimes int NULL ,
totalmoney money NULL,
PRIMARY KEY (id));
11 收费表
CREATE TABLE PARK.charge
(
id int IDENTITY (1, 1) NOT NULL ,
cardid var char (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
cardtype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
cartype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
carno var char (50) COLLATE Chinese_PRC_CI_AS NULL ,
money money NULL,
PRIMARY KEY (id));
12 车位表
CREATE TABLE PARK.carposition
(
Id int IDENTITY (1, 1) NOT NULL ,
cpcarno var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
positionstate var char (20) COLLATE Chinese_PRC_CI_AS NULL,
PRIMARY KEY (id));
13 收费标准表
CREATE TABLE PARK.standardcharge
(
id int IDENTITY (1, 1) NOT NULL ,
chargestid int NOT NULL ,
cardtype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
cartype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
chargetype var char (20) COLLATE Chinese_PRC_CI_AS NULL ,
timeno int NULL ,
unittime int NULL ,
unitsum int NULL ,
maxsum int NULL,
PRIMARY KEY (id));
4.6.3 创建SQL索引
为了方便用户电话查询车辆停放位置信息,建立入场车辆车牌号索引。
CREATE CLUSTER INDEX encarno_index ON entrance(encarno);
4.6.4 SQL数据控制——授予权限
超级管理员将对数据库的一部分控制权限授予给管理员角色,并把管理员角色授予给所有管理员。
GRANT ALL PRIVILEGES
ON TABLE pcard, parkparameter, users,car, rateright, ptime, ptimes, entrance, pexit, turn, carposition TO manager;
GRANT SELECT,INDEX ON TABLE charge , standardcharge TO manager;
GRANT manager TO PUBLIC;
第五章 详细设计
5.1 软件结构功能模块
图3-2所示,软件结构功能中操作员功能模块图如图5-1所示:
身份验证
初始化
重新验证
非正常退出出
消息循环
值班管理
车位管理
用户管理
退出
正常退出
软件介绍
信息
查询
入场停车
值班历史查询
值班管理
记事
删除用户
添加用户
取车并算取费用
关于,帮助
查询某个日期的情况
查询以前的入车情况
查询账本
图5-1 操作员功能模块图
管理员功能模块图如图5-2所示:
身份验证
初始化
重新验证
非正常退出出
消息循环
权限设置
停车场管理
数据管理
退出
正常退出
操作员档案管理
信息
查询
停车场使用权限管理
操作员权限授予
操作员权限更改
数据分类统计
打印数据报表
停车场基本参数设置
增加、删除、修改操作员档案
查询某个日期的情况
查询以前的入车情况
查询账本
图5-2 管理员功能模块图
5.2 程序流程图
5.2.1 用户登录模块程序流程图
图5-3 用户登录模块程序流程图
5.2.2 授权管理模块程序流程图
超级管理员对管理员的授权和管理员对操作员的授权,调用同一授权管理模块。
图5-4 授权管理模块程序流程图
5.2.3档案管理模块程序流程图
管理员对操作员档案进行管理和操作员对卡、车、顾客等档案进行管理,调用同一档案管理模块。
图5-5 档案管理模块程序流程图
5.2.4 收费管理模块程序流程图
图5-6 收费管理模块程序流程图
第六章 编码与测试
本章主要对用户登录模块的实现及测试展开研究,其他模块方法相同。
6.1 身份验证C++源程序代码
#include "PasswordDlg.h"
BOOL CMyDialog2App::InitInstance()
{
int nCount=0,m=0;
while(nCount<3)
{
CPasswordDlg PassDlg;
if(PassDlg.DoModal()==IDOK)
if((strcmp(PassDlg.m_strUserName,"441004"))&&(strcmp(PassDlg.m_strPassword,"jluedu"))!=0)
{
if((strcmp(PassDlg.m_strUserName,"171004"))&&(strcmp(PassDlg.m_strPassword,"rjgcks"))!=0)
{
if((strcmp(PassDlg.m_strUserName,"353533"))&&(strcmp(PassDlg.m_strPassword,"class4"))!=0)
{
MessageBox(NULL,"用户名或密码错误,请重新输入!",
"错误信息",MB_OK|MB_ICONERROR);
nCount++;
}
else {m=3;break;}
}
else {m=2;break;}
}
else{ m=1;break; }
else
{
return FALSE;
}
}
if(nCount>=3)
{
MessageBox(NULL,"输入已经超过3次,请退出!",
"错误信息",MB_OK|MB_ICONERROR);
return FALSE;
}
6.2 身份验证MFC窗口实现
借助Visual C++ 6.0 编程软件,实现用户登录身份验证,如图6-1。
图6-1 用户登录界面
当用户名或密码输入有误时,会弹出相应提示信息,并重新输入,如图6-2。
图6-2 登录信息错误提
展开阅读全文