软件工程课程设计报告.docx
- 文档编号:8640545
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:19
- 大小:216.89KB
软件工程课程设计报告.docx
《软件工程课程设计报告.docx》由会员分享,可在线阅读,更多相关《软件工程课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。
软件工程课程设计报告
第一章软件项目开发计划
1.1范围
1.1.1项目目标
本项目的目标是实现一个商店销售管理系统,可以实现对商店商品的管理,同时对商店内部人员以及日常销售也可以进行相应的管理工作。
1.1.2主要功能
该系统的主要功能是实现四类功能:
营业员管理、客户管理、商品信息管理以及查询结算管理,具体的实现功能如表所示:
功能类别
子功能
功能描述
营业员管理
增加营业员
由高级管理员增加营业员信息
修改营业员
由高级管理员修改营业员信息
删除营业员
由高级管理员删除营业员信息
查询营业员
由高级管理员查询营业员信息
客户管理
增加客户
由营业员添加客户信息
修改客户
由营业员修改客户信息
删除客户
由营业员删除客户信息
查询客户
由营业员查询客户信息
商品信息管理
商品信息添加
由高级管理员添加商品信息
商品信息修改
由高级管理员修改商品信息
商品信息删除
由高级管理员删除商品信息
商品信息查询
由高级管理员查询商品信息
查询结算管理
客户消费结算
由营业员根据客户本次消费情况结算其消费额
客户消费记录查询
由营业员根据客户姓名或身份证号查询其以往消费记录
营业员奖金结算
由高级管理员根据营业员本月的销售额度进行奖金结算
营业员销售记录查询
由高级管理员根据营业员姓名或编号查询其销售记录
1.1.3系统接口
该系统为用户提供的接口是VC环境下的MFC中基于GUI编程的控件,用各类控件来承接用户从外界输入的数据,并将这些数据作为后台数据库表中的数据。
1.1.4开发概述
本次设计出的销售管理系统,后台数据库采用SQLSever2000,以保证数据的安全、高效和稳定;前台采用Microsoft公司的VisualC++6.0作为主要开发工具,并利用ADO技术作为数据库的链接,它可以与SQLSever2000数据库无缝衔接。
1.2资源
1.2.1人员资源
整个项目组共有5名成员,其中一名项目组长,4名项目开发人员。
1.2.2硬件资源
终端服务为系统开发提供了完备的硬件资源,可以实现大规模的数据处理工作。
1.2.3软件资源
前台界面开发选用微软旗下的VS6.0开发环境,后台数据库选用SQLServe2000,它可以实现大规模的数据存储及处理。
1.3进度安排
1.3.1任务
该系统的开发主要分为以下几个阶段:
问题定义、可行性分析、需求分析、概要设计、详细设计、编码与单元测试、集成测试、系统维护
在编码上面我们主要将整个系统分成若干个可以独立存在的模块,将不同的人员分配以不同的模块进行编码。
系统主要分为以下几个模块:
模块1:
营业员管理模块(由高级管理员对商店营业员进行管理)
模块2:
客户管理模块(由营业员对客户进行相应的管理,即增删改查四项功能)
模块3:
商品信息管理模块(由营业员对商店主要商品进行日常管理)
模块4:
查询结算管理模块(包括不同查询结算方式)
1.3.2进度计划及人员安排
11月21日:
由组长组织成员对任务进行需求分析整理,撰写需求分析报告(包括用例图)、项目计划(甘特图)
11月22日:
评审需求分析报告,并进行修改,得到最终的需求分析报告
11月23日:
系统项目设计,这里包括概要设计和详细设计
11月24日:
撰写系统的设计文档,并组织组员进行程序的编写
11月25日至11月30日:
编写代码并做一定的单元测试:
12月1日:
集成测试
12月2日:
编写用户使用手册,提交整个项目
1.3.3Gantt图
系统Gantt图如下图所示:
第二章需求分析
2.1环境分析
2.1.1系统关键用户
经分析,商店销售管理系统的关键用户为高级管理员、营业员和顾客
2.1.2系统目标(可行性分析)
通过调查分析,系统需要满足如下功能:
(1)根据不同用户登录系统分配不同权限;
(2)对高级管理员、营业员信息的日常管理;
(3)对顾客日常消费的管理;
(4)对营业员的销售情况进行管理;
(5)对顾客的信息进行管理;
(6)对商店中商品的信息进行管理;
2.1.3
系统的组织结构图
对组织结构图的几点说明:
(1)商店中共有两种角色,高级管理员具有最高权限,营业员具有一般权限
(2)高级管理员可以对商店中的任何角色进行相应的操作;
(3)营业员仅仅可以对顾客的信息进行操作
(4)高级管理员还可以对商店中商品的信息进行相应的操作;
(5)高级管理员可以查看营业员的销售情况,并根据销售情况发放奖金;
2.2系统流程(可操作性分析)
2.2.1可操作性描述
商店销售管理系统,后台数据库采用SQLSever2000,以保证数据的安全、高效和稳定;前台采用Microsoft公司的VisualC++6.0作为主要开发工具,它可以与SQLSever2000数据库无缝衔接。
2.2.2系统流程图
2.3问题和约束
传统的商品销售管理方式已经不能满足大众的需要,人工记账、核算、查询等工作既费时、费力,又容易出错。
因此我们通过计算机运行商店销售管理系统,以上问题即可迎刃而解。
2.3.1定义问题
●营业员不能通过简单的操作对顾客进行管理
●高级管理员管理信息时存在较大困难,且销售盘点时操作繁琐
●高级管理员对商品信息进行管理时工作量较大
2.3.2定义约束
●期限
系统要在两周内完成
●硬件和软件
该系统必须具有后台数据库,以保证数据的安全、高效和稳定和作为主要开发工具该系统的前台。
必须运行在现有操作系统之上。
●分布式方面和扩展性
新的系统必须能够在一个多用户的环境中运行且设有权限。
系统的操作要独立于操作系统中现有的管理系统。
2.4系统目标分析
2.4.1总体目标
本系统定义的总体目标为:
(1)对顾客信息进行管理、对营业员信息进行监控;
(2)改善运转效率,从而提高商店管理员的管理操作能力;
(3)为营业员每月销售额度的奖金提供有用的信息;
(4)为顾客每次消费提供方便的操作平台;
2.4.2特定目标
本系统由连接数据库模块、系统登录模块、高级用户管理模块、营业员管理模块、客户管理模块、商品信息管理模块、查询结算管理模块七个模块组成。
2.4.3系统的用例图
2.5范围和边界
2.5.1范围和边界
本系统的范围涉及到高级管理员、营业员和顾客。
该系统为不同人员设定的权限不同,其主要功能包括:
(1)高级管理员
具有最高权限,可以对营业员信息以及商品信息进行管理。
(2)营业员
仅可以对顾客信息进行管理。
(3)顾客
可以根据自己的信息查询消费清单,该过程由营业员完成。
为了使系统在特定的时间约束内实现并使系统设计的效率最高,将系统划分为六个模块,分别实现相应功能。
2.5.2功能模块图
2.5.3功能模块接口
登录模块对操作员信息表进行操作,匹配登录名和密码后进行系统登录。
高级用户管理模块对记录基本信息的表进行操作为其它模块提供基本信息。
营业员管理对营业员等表进行操作记录信息,为其他模块提供营业员信息。
商品信息管理模块通过对表的操作,管理商品信息。
查询结算模块则是按照查询条件对表进行匹配查询,并根据查询结果做相应的结算操作,该模块是方便操作员的可视化模块。
第三章概要设计
3.1信息源和用户
3.1.1信息源
客户信息表、商品信息表、营业员信息表、高级管理员信息表、客户结款表、客户消费记录表
3.1.2用户
高级管理员、营业员、普通客户(可设置登陆权限)
3.2信息要求
3.2.1设置系统管理员登陆口令,普通用户登陆口令。
3.2.2设置权限
3.2.3输出各种表
3.3系统的E-R模型
3.4关系模型
3.5数据库设计
第四章详细设计
4.1系统功能模块
系统主要分为登录模块、高级用户管理模块、营业员管理模块、客户管理模块、商品信息管理模块、查询结算管理模块。
每个模块实现的具体功能如下:
●连接数据库模块
该模块主要实现了基于ADO连接数据库的操作,将整个过程封装在一个特定的类中。
●系统登录模块
该模块主要实现不同用户对系统的访问,系统根据用户类别分配不同的权限。
●高级用户管理模块
该模块主要实现对高级管理员的管理,实现增加、修改、查询、删除功能。
●营业员管理模块
该模块主要实现由高级管理员对营业员信息进行管理,实现增加、修改、查询、删除功能。
●客户管理模块
该模块主要实现由营业员对顾客信息进行管理,实现增加、修改、查询、删除功能。
●商品信息管理模块
该模块主要实现由高级管理员对商品信息进行管理,实现增加、修改、查询、删除功能。
●查询结算管理模块
该模块主要实现一下功能:
(1)由营业员根据客户本次消费情况结算其消费额。
(2)由营业员根据客户姓名、身份证号等对其以往消费记录进行查询。
(3)由高级管理员根据营业员本月销售额计算其奖金。
(4)由高级管理员根据营业员编号等信息查询其以往销售记录。
4.2连接数据库模块设计
4.2.1模块过程化描述
连接数据库模块主要是用于前台开发界面与后台数据库之间的连接,而连接的方法是ADO方法。
该模块首先定义了两个指向Connection和Recordset的对象指针以及连接数据库时所需要的初始化函数,其次用这两个指针初始化Connection对象,然后用这个对象去调用上面定义的函数中的参数去实现数据库的连接。
为了实现ADO连接数据库,并且使得操作方便,我们在这里将上述方法封装在一个特定的类中,即CADOConn。
4.2.2功能模块函数的定义
(1)初始化连接数据库函数
voidADOConn:
:
OnInitADOConn()
该函数没有任何形参,其主要功能是使前台界面连接上后台的数据库。
(2)执行查询函数
_RecordsetPtr&ADOConn:
:
GetRecordSet(_bstr_tbstrSQL)
该函数含有一个形参,即_bstr_t类定义的一个智能指针bstrSQL。
其主要功能是使得前台界面能在后台数据库上执行查询功能。
(3)执行SQL语句函数
BOOLADOConn:
:
ExecuteSQL(_bstr_tbstrSQL)
该函数只含有一个形参,即_bstr_t类定义的一个智能指针bstrSQL。
其主要功能是使得前台界面能在后台数据库上执行SQL语句。
(4)关闭连接函数
voidADOConn:
:
ExitConnect()
该函数没有形参,其主要功能就是在执行完相应的操作后断开与数据库的连接,以保证数据库不被修改。
4.3系统登录模块设计
4.3.1模块过程化描述
系统登录模块是为使用系统的用户提供一个登录接口,即登录界面,并根据用户名判断其相应的用户角色,从而分配给其系统相应的操作权限。
该模块的实现是首先建立了一个对话框并在此基础上建立一个实现的类,在类中封装了实现登录系统的功能,并根据后台表中的字段判断其登录者的角色,然后系统会自动分配其相应的使用功能。
4.3.2功能模块函数的定义
(1)登录按钮的触发事件函数
voidCLoginDlg:
:
OnButton()
该函数是登录按钮的触发事件函数,其主要实现了根据用户输入的信息进行系统登录的操作。
4.4营业员管理模块设计
高级用户管理模块、客户信息管理模块以及商品信息管理模块与这个模块的设计思想和实现思想基本相同,唯一的不同点是其他模块在设计中功能有些并没有营业员管理模块的功能全,且其他的模块对应后台数据库表中的字段有所不同。
因此在此就不在赘述,只以营业员管理模块为代表介绍这个模块的设计思想。
4.4.1模块过程化描述
营业员管理模块主要实现了对后台营业员表中的增删改查功能。
该模块的实现首先需要在开发环境中建立一个与后台数据库中表所对应的类,然后在这个类中定义相关的增加、删除、修改和查询函数。
然后再在资源文件中建立相应的对话框以完成上面的功能,而每个对话框对应的类中可以调用营业员表的类中已经封装好的增删改查函数以便在每个对话框中完成相应的操作。
4.4.2功能模块函数的定义
(1)查找函数
intCShopAssistant:
:
HaveName(CStringcNumber)
查找函数只含有一个参数,即营业员的工号。
该函数的主要功能是根据营业员的工号查找表中相匹配的字段,由于工号是表中的主键,因此查询到的记录也是唯一的。
(2)插入记录函数
voidCShopAssistant:
:
sql_insert()
插入记录函数不含有任何参数,其主要功能是执行INSERT语句,从而实现将记录插入到表中的功能。
(3)修改记录函数
voidCShopAssistant:
:
sql_update(CStringcNumber)
修改记录函数含有一个参数,即营业员的工号。
该函数与插入记录函数类似,同样是使系统执行SQL语句,实现修改表中记录的功能。
(4)删除记录函数
voidCShopAssistant:
:
sql_delete(CStringcNumber)
删除记录函数也只含有营业员工号这一个参数,它的主要功能是使系统执行DELETE语句,以实现对表中记录的删除功能。
(5)读取数据表中字段函数
voidCShopAssistant:
:
GetData(CStringcNumber)
读取字段函数同上面的函数一样也只含有一个营业员工号这一参数,它的主要功能是根据营业员工号这一属性查找表中相匹配的记录,然后获取这条记录中的所有数据。
4.5查询结算模块设计
4.5.1模块过程化描述
该模块主要分为两部分内容,即顾客消费的结算与查询功能、营业员销售记录查询与奖金结算功能,这里分开设计这两部分内容。
(1)顾客消费结算与查询功能
这一部分主要实现了顾客单次消费的结算功能,在输入相应的消费品数量后,系统可以输入计算出此次的消费总额,同时在后台的数据库中对顾客累计的销售商品数量做更新,以便在每次查询该顾客的消费记录时可以看到即时的信息。
(2)营业员销售记录查询与奖金结算功能
这一部分主要为高级管理员提供了一个可以查询每位营业员销售记录的功能,并根据查询的销售记录计算该营业员的奖金。
4.5.2功能模块函数定义
(1)顾客消费记录表类与营业员销售记录表类中定义的函数
由于在这两个类中定义的函数与营业员管理模块中定义的函数大同小异,在此就不在赘述。
它们的主要功能主要是在对营业员或顾客进行增删改操作时也在这两张表中进行同样的操作。
(2)消费结算对话框类中定义的函数
在这个对话框类中定义的函数主要是确定按钮的触发事件响应函数。
该函数主要实现了两个功能,即根据对话框内编辑框中的输入内容计算此次消费的金额,并在后台的表中更新该顾客消费记录中消费累计每种商品的数量。
(3)营业员销售记录对话框类中定义的函数
在这个对话框中定义的函数主要是奖金计算按钮的触发事件。
该函数实现了根据对话框中在编辑框内输入的查询条件查询后台表中营业员的销售记录,并根据特定的计算方法计算其奖金,将计算结果返回表中。
第五章编码和单元测试
5.1连接数据库模块的实现
5.1.1模块初始化
这些连接数据库的函数都封装在了程序中的ADOConn类中,函数在.h文件中定义,而实现部分在.cpp中。
值得说明的是再.h文件中还定义了两个指针:
//添加一个指向Connection对象的指针:
_ConnectionPtrm_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtrm_pRecordset;
这两个指针的作用是为后面的ADO方法连接数据库实现函数做初始化工作。
5.1.2模块功能函数的实现
(1)初始化连接数据库函数
该函数是连接数据库中的关键函数,在每次进行数据库操作时都要用到这个函数去实现与数据库的连接。
函数中首先要初始化OLE/COM库环境:
:
:
CoInitialize(NULL);
这是由于ADO库是一组COM动态库,这意味应用程序在调用ADO前,必须初始化OLE/COM库环境,才能使用该方法进行连接。
其次,我们用头文件中建立的Connection对象指针创建一个Connection对象作为连接的接口,即_ConnectionPtr接口:
m_pConnection.CreateInstance("ADODB.Connection");
它返回一个记录集或一个空指针。
然后我们就可以用这个接口来写连接字符串,实现与数据库的连接:
_bstr_tstrConnect="Provider=SQLOLEDB;Server=127.0.0.1;Database=mystudentsys;uid=sa;pwd=sa;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
我们在程序中使用了try-catch语句来捕捉异常,这里的异常是指连接数据库失败,提示相应的错误信息:
try
{
……
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
}
(2)执行查询函数
执行查询函数的主体同样是用try-catch语句,它用来检测程序是否出错。
函数首先用条件语句判断是否连接上数据库,若没有连接则调用OnInitADOConn()函数重新连接数据库。
然后用头文件中的指向Recordset对象指针创建记录集对象,并调用语句取得表中的数据:
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
最后若程序没有捕捉到连接错误则返回记录集实现查询:
returnm_pRecordset;
(3)执行SQL语句函数
执行SQL语句函数首先用条件语句判断是否连接上数据库,其次用在头文件中Connection对象调用Execute方法,即Execute(_bstr_tCommandText,VARIANT*RecordsAffected,longOptions)其中CommandText是命令字串,通常是SQL命令;参数RecordsAffected是操作完成后所影响的行数,参数Options表示CommandText的类型:
adCmdText-文本命令;adCmdTable-表名
adCmdProc-存储过程;
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
然后返回真值:
returntrue;
(4)关闭连接函数
关闭连接函数在系统执行完对数据库操作时被调用,通过断开与数据库的连接以保证数据库的安全。
该函数用头文件中定义的指向Recordset对象指针执行关闭记录集和连接的功能:
m_pRecordset->Close();
m_pConnection->Close();
然后释放环境内存:
:
:
CoUninitialize();
5.2系统登录模块的实现
5.2.1模块初始化
该模块目的在于为使用本系统的用户提供登陆系统,用户需输入用户名和密码进入系统。
登陆界面设置登录权限,用来区分系统登录员及系统用户,他们各自拥有的使用权限不同。
登陆界面设置了两个文本编辑框,一个用户输入用户名,另一个输入密码。
界面上设置了两个按钮,一个为登录按钮,单击时可以登录系统,另一个为退出按钮,单击时退出系统。
用户登录界面如图2.1所示。
图2.1系统登录对话框
5.2.2功能模块函数的实现
该模块中的函数主要是登录按钮的触发事件响应函数。
函数首先实例化了用户表(Users)类的一个对象,其次调用用户表类中的GetData函数获取Users表中的数据:
CUsersuser;
user.GetData(m_UserName);
usname=m_UserName;
然后将用户输入的密码与表中的数据进行匹配,用条件语句判断信息正确与否若与表中用户名对应的密码相同则允许进入系统,若不同则出现提示框,提示用户信息不正确:
if(user.UserPwd!
=m_Pwd)
{
MessageBox("用户信息不正确,无法登录!
","错误信息",MB_OK|MB_ICONHAND);
……
return;
}
CDialog:
:
OnOK();
在登录时设计了登录权限,对于不同的登录者系统会根据登录进来的用户名自动判断其权限,对于没有权限的功能会提示未授予其功能的信息:
if(curUser.UserType=="普通用户")
{//普通用户不能管理用户信息
MessageBox("对不起,您没有改权限!
","错误信息",MB_OK|MB_ICONHAND);
return;
}
5.2.3单元测试
(1)错误输入登录信息的测试用例
测试用例如表5.2.3
(1)所示,运行结果如图5.2.3
(1)所示。
表5.2.3
(1)错误输入登录信息的测试用例
测试项目
登录对话框
预置条件
登陆有权限的用户操作该系统
输入
用户名:
Admins;密码:
111111
执行步骤
输入上述信息后单击登录按钮
预期输出
系统提示输入信息错误
实际输出
系统提示输入信息错误
(2)多次错误输入信息的测试用例
为了避免系统的冗余,在程序中设定了输入信息的次数,即count。
若count大于三次,则会直接退出系统。
测试用例如表5.2.3
(2)所示,运行结果如图5.2.3
(2)所示
表5.2.3
(2)多次错误输入信息的测试用例
测试项目
登录对话框
预置条件
登陆有权限的用户操作该系统
输入
连续输入三次错误信息:
用户名:
Admins;密码:
111111
执行步骤
输入上述信息后单击登录按钮
预期输出
系统每次提示输入信息错误,在第三次输入错误信息后退出系统
实际输出
系统每次提示输入信息错误,在第三次输入错误信息后退出系统
5.3营业员管理模块的实现
5.3.1模块初始化
(1)营业员表(ShopAssistantinfo)对应类的初始化
该模块主要实现了对营业员的增删改查功能,实现的方法是通过SQL语句对后台表中的数据进行相应的操作。
初始化功能在类的头文件中定义了与后台表中字段对应的变量,类型均为Cstring,同样在头文件中也需要定义其相应的操作函数,函数的参数在上一章详细设计中已经做了详细的描述,在此就不在进行阐述。
(2)添加营业员记录对话框的初始化
设计一个添加营业员记录对话框用来作为添加信息的接口,在对话框中设定了一些文本编辑框,高级管理员可以通过这些编辑框输入插入营业员的信息。
该对话框如图5.3.1
(1)所示。
图5.3.1
(1)添加营业员信息对话框
同样在头文件中定义控件的成员变量,这些成员变量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 课程设计 报告