目录1. 前言 (1)1.1 系统说明 (1)1.2文档说明 (1)1.3系统分析的主要任务 (1)2. 需求分析 (1)2.1 系统需求分析 (1)2.2功能需求分析 (2)2.3数据描述 (2)2.4数据库描述 (2)2.5数据采集 (2)3. 概要设计 (3)3.1基本设计概念和处理过程 (3)3.2.系统数据流图 (3)3.3. 系统层次模块图 (4)3.3.1.结构框图 (5)3.3.2.程序流图 (6)3.3.3.模块功能分析及外部设计 (7)3.4.模块设计 (8)4. 详细设计 (9)4.1. 数据库的逻辑设计 (9)4.2. 主要模块内部设计 (10)4.2.1.客户管理模块设计 (11)4.2.1.1.模块算法 (12)4.2.1.2.流程图 (13)5.实现与调试分析 (14)5.1.实现环境 (15)5.2.语言选择 (16)5.3.调试分析 (16)6.测试分析 (17)6.1.测试用例 (17)6.2.测试结果 (18)6.3.性能分析 (18)7.用户手册 (19)总结 (20)参考文献 (20)附录源程序文件名清单:1.前言1.1 系统说明本系统是为服装销售总店开发的销售管理和客户管理系统。
主要提供给服装店总店使用以完成对服装店的销售、库存、财务和客户的管理控制。
通过本系统可以对相关信息载体进行录入、修改、删除、查找、统计、确认等操作,集成了服装销售行业的前台零售、零售退货、价格管理、促销管理、会员管理、库存管理、收款付款等各个业务流程,把服装销售行业的销售、库存、财务等业务实现一体化。
1.2文档说明系统分析报告。
1.3系统分析的主要任务此报告是系统分析报告。
主要是为了让服装店总店对各分店的客户,销售进行一个管理,以及相关信息的录入、修改、和删除等,对系统的逻辑模型包括概念模型、编码模型、功能模型进行分析设计。
2. 需求分析2.1系统需求分析该系统主要分为二部分:客户管理、销售管理。
该系统为了方便大家操作在各模版都做的非常人性化,方便管理员操作,各部分的增加,删除,修改等模块的操作非常方便。
2.2 功能需求分析一个小型的服装连锁店管理系统之总店系统—实现客户管理和销售管理,需完成以下工作:(1)添加客户信息,包括客户的姓名、性别、年龄,编号等的增加/删除/修改/查询;(2)添加服装销售信息,包括各种衣物的销量、库存,财务进行修改/查询;2.3 数据描述2.3.1.静态数据及其数据字典涉及到的静态数据及其数据字典如下:2.3.2 动态数据输入数据:菜单命令、查询条件、统计条件、记录等。
输出数据:查询结果、统计结果、生成报表等。
内部数据:操作所产生的中间数据。
2.5数据库描述本软件采用关系型数据库。
2.6数据采集通过键盘、鼠标向软件系统输入数据。
3 概要设计本软件将辅助管理人员完成服装公司对客户、销售等基本信息的管理,可以进行查询、删除、修改、增加等操作,提高公司对客户、销售的管理效率。
在分析阶段,我们已经提出了系统的结构、顶层数据流图和数据字典。
本节我们将对系统的硬件环境作简要介绍,并对待开发系统作概要设计。
3.1 总体设计3.1.1处理流程(1)系统启动,进入服装店系统。
(2)初始化系统,导入数据库。
(3)进入消息循环状态,通过事件驱动激活各模块,执行各任务。
(4)一任务执行完毕后重新进入消息循环状态。
(5)通过判定条件退出系统。
3.1.2系统总体结构和模块设计通过以上分析,我们进一步设计出了产成品管理系统的总体结构模块图(见图3)图4 系统模块结构图各模块功能分配如下:(1) 系统控制功能:初始化模块(M1)、关闭系统模块(M2)、系统功能模块(M3)。
(2) 客户信息管理功能:客户信息显示模块(M4.2)、客户信息管理模块(M4.3)。
(3) 服装销售管理功能:服装销售显示模块(M5.2)、服装销售管理模块(M5.3)。
(4) 身份验证功能:身份验证模块(M6)。
(6) 帮助功能:帮助模块(M7)。
3.2接口设计3.2.1外部接口(1) 用户界面采用图形用户界面(GUI),包含菜单、按钮、对话框等元素。
(2) 软件接口软件运行于MS-DOS3.3以上和UCDOS平台上。
(3) 硬件接口运行于IBM PC386及兼容机以上。
3.2.2内部接口(1) 初始化模块(M1):系统初始时由操作系统调用,之后进入消息循环状态。
(2) 关闭系统模块(M2):由系统功能模块调用,之后退出系统。
(3) 系统功能模块(M3):接受各事件驱动消息,启动入库数据维护模块、入库数据归档模块等模块。
(4) 客户信息模块(M4):由相应事件驱动消息激活,完成客户信息显示、客户信息管理,如查找、删除、添加等功能,之后进入消息循环状态。
(5) 服装销售管理模块(M5):由相应事件驱动消息激活,完成服装销售情况显示、服装销售管理,如价格修改,库存衣服打折处理等功能,之后进入消息循环状态。
(6) 身份验证模块(M6):由初始化模块调用,完成身份验证功能。
(7) 帮助模块(M7):由相应事件驱动消息激活,完成帮助功能,之后进入消息循环状态。
3.3数据结构设计3.3.1逻辑结构设计在综合了各方面的因素后,我们设计出了系统所用到的数据库的数据字典如下。
3.3.2物理结构设计数据库中各表的文件物理结构采用顺序的记录文件。
3.4 运行设计3.4.1 运行模块的命名模块命名为Mx.y,x相同则为同一功能的模块。
3.4.2 运行模块控制(1) 操作系统启动M1。
(2) M1启动M6。
(3) M6启动M3。
(4) 进入消息驱动状态,M3通过事件驱动启动相应的功能模块,包括M5和M7。
(5) 在消息驱动状态下,M3通过事件驱动启动M2,退出系统。
3.运行模块时间响应各模块运行时间控制在1至2秒内。
3.5 出错处理设计1.系统应具有相当健壮性,避免或降低由系统错误所造成的数据库损坏。
2.对关键性操作,如删除等提供警告和确认机制。
3.6 安全设计系统提供严格的身份验证机制。
3.7维护设计系统严格按照设计规范进行设计,并保持各阶段文档的完整性,为以后对软件的维护打好基础。
4 详细设计在以上工作的基础上,我们对有输出要求的全部数据进行属性分析、存储分析、关联分析、查询统计分析、数据分类与处理功能分析,进一步研究了整个系统的人—机接口,提出了系统细化后的数据流图和系统的层次方框图。
见图5、图6。
4.1程序设计说明4.1.1模块描述(1)系统详细功能模块如图7。
(2)模块设计如下:详细功能模块设计如下:图7(3)功能分配:1)系统控制功能:初始化模块(M1)、关闭系统模块(M2)、系统功能模块(M3)。
2)客户信息显示功能: 分店信息显示模块(M4.2)显示客户信息。
3)客户信息删除功能: 分店信息删除模块(M4.3)删除某个客户信息。
4)客户信息查找功能: 分店信息查找模块(M4.4)查找某个客户信息。
5)客户信息修改功能: 分店信息修改模块(M4.5)修改某个客户信息。
6)客户信息增加功能: 分店信息增加模块(M4.6)增加某个客户信息。
7)服装销售信息显示功能: 人员信息显示模块(M5.2)显示服装销售信息。
8)服装库存信息删除功能: 人员信息删除模块(M5.3)显示库存量信息。
9)服装盈利信息查找功能: 人员信息查找模块(M5.4)显示服装盈利信息。
10)服装打折信息修改功能: 人员信息修改模块(M5.5)修改服装价格信息。
11)服装退货信息增加功能: 人员信息增加模块(M5.6)对客户提供退货功能。
12)身份验证功能:身份验证模块(M8)。
13)帮助功能:帮助模块(M9)。
4.2 主要模块内部设计4.2.1 模块1设计模块1的设计主要是实现客户信息的基本管理功能,包括对客户的基本信息的查询,修改,删除,添加,通过对每个功能模块化设计,方便实现用户对客户的管理!4.2.1.1模块算法* 对客户的基本信息的添加LRESULT CALLBACK insert(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message){case WM_INITDIALOG: return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDCANCEL){ EndDialog(hDlg, LOWORD(wParam));return TRUE; }if (LOWORD(wParam) == IDOK)GetDlgItemText(hDlg,IDC_EDIT1,cloth.cusID,10);GetDlgItemText(hDlg,IDC_EDIT2,cloth.cusname,10);GetDlgItemText(hDlg,IDC_EDIT3,cloth.cussex,128);GetDlgItemText(hDlg,IDC_EDIT4,cloth.cusage,128);Try{_ConnectionPtr pConn("ADODB.Connection");//打开数据库连接pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\\Users\\Administrator\\Desktop\\clothshop.mdb;PersistSecurity Info=False","","",adConnectUnspecified);_RecordsetPtr pRs("ADODB.Recordset");//pRs->Open("select*Fromcloth",_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);//访问记录集中数据pRs->MoveFirst();//移到相应一条记录pRs->AddNew();pRs->PutCollect(_variant_t("客户ID"),_variant_t(cloth.cusID));//添加pRs->PutCollect(_variant_t("客户姓名"),_variant_t(cloth.cusname));pRs->PutCollect(_variant_t("客户性别"),_variant_t(cloth.cussex));pRs->PutCollect(_variant_t("客户年龄"),_variant_t(cloth.cusage));pRs->Update();MessageBox(0,TEXT("插入成功"),NULL,MB_OK);pRs->Close();//关闭记录集pConn->Close();//关闭数据库连接 }catch(_com_error &e){ MessageBox(0,"数据库出错"," ",MB_OK); }} break; }return FALSE;}对客户的信息的查询LRESULT CALLBACK xianshiDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ switch (message){ case WM_INITDIALOG: return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){ EndDialog(hDlg, LOWORD(wParam)); return TRUE; }if (LOWORD(wParam) == IDC_VIEW){ _variant_t a; char *p,p1[5]; CoInitialize(NULL);//初始化对象try{ _ConnectionPtr pConn("ADODB.Connection");//打开数据库连接pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Administrator\\Desktop\\clothshop.mdb;Persist Security Info=False","","",adConnectUnspecified);_RecordsetPtrpRs("ADODB.Recordset");pRs->Open("select * From cloth",_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);//访问记录集中数据 while(!pRs->EndOfFile){ a=pRs->GetCollect("客户ID");p=_com_util::ConvertBSTRToString((_bstr_t)a); strcpy(p1,p);SetDlgItemText(hDlg,IDC_EDIT1,p1);a=pRs->GetCollect("客户姓名");p=_com_util::ConvertBSTRToString((_bstr_t)a); strcpy(p1,p);SetDlgItemText(hDlg,IDC_EDIT2,p1);a=pRs->GetCollect("客户性别");p=_com_util::ConvertBSTRToString((_bstr_t)a); strcpy(p1,p);SetDlgItemText(hDlg,IDC_EDIT3,p1);a=pRs->GetCollect("客户年龄");p=_com_util::ConvertBSTRToString((_bstr_t)a); strcpy(p1,p);SetDlgItemText(hDlg,IDC_EDIT4,p1);MessageBox(hDlg,"下一条"," ",MB_OK);pRs->MoveNext(); }pRs->Close();//关闭记录集pConn->Close();//关闭数据库连接 }catch(_com_error &e){ MessageBox(0,"数据库出错"," ",MB_OK); }}break;}return FALSE;}对客户的信息的修改LRESULT CALLBACK change(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) //修改客户信息{ switch (message){ case WM_INITDIALOG: return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDCANCEL){ EndDialog(hDlg, LOWORD(wParam)); return TRUE; } if (LOWORD(wParam) == IDOK&&b){ GetDlgItemText(hDlg,IDC_EDIT1,cloth.cusID,10);GetDlgItemText(hDlg,IDC_EDIT2,cloth.cusname,10);GetDlgItemText(hDlg,IDC_EDIT3,cloth.cussex,128);GetDlgItemText(hDlg,IDC_EDIT4,cloth.cusage,128);try{ if(b){char*sql="select* From cloth where ID=",SQL[256];///////////////////sprintf(SQL,"%s%d",sql,ID);////////////////////////////_ConnectionPtr pConn("ADODB.Connection");//打开数据库连接pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Administrator\\Desktop\\clothshop.mdb;Persist Security Info=False","","",adConnectUnspecified);_RecordsetPtr pRs("ADODB.Recordset");//pRs->Open(SQL,_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);pRs->PutCollect(_variant_t("客户ID"),_variant_t(cloth.cusID));pRs->PutCollect(_variant_t("客户姓名"),_variant_t(cloth.cusname));pRs->PutCollect(_variant_t("客户性别"),_variant_t(cloth.cussex));pRs->PutCollect(_variant_t("客户年龄"),_variant_t(cloth.cusage));pRs->Update();MessageBox(0,TEXT("修改成功"),NULL,MB_OK);pRs->Close();//关闭记录集pConn->Close();//关闭数据库连接}else{ MessageBox(0,TEXT("信息错误! 请重新核对!"),TEXT("核对ID"),MB_OK); } }catch(_com_error &e){ MessageBox(0,"数据库出错"," ",MB_OK); }} break; }return FALSE;}对客户的信息的删除LRESULT CALLBACK basicDialog(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ char outerID[10];switch (message){ case WM_INITDIALOG: return TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){ EndDialog(hDlg, LOWORD(wParam)); return TRUE; }if(LOWORD(wParam) == IDC_BUTTON1){ GetDlgItemText(hDlg,IDC_EDIT1,outerID,10);ID=atoi(outerID);//转换成INT型b=CheckID(ID);DialogBox(0, (LPCTSTR)IDD_DIALOG4, hDlg, (DLGPROC)check);}if(LOWORD(wParam) == IDC_BUTTON4){ GetDlgItemText(hDlg,IDC_EDIT1,outerID,10);ID=atoi(outerID);//转换成INT型b=CheckID(ID);if(b){ DialogBox(0, (LPCTSTR)IDD_DIALOG5, hDlg, (DLGPROC)change); }else{ MessageBox(0,TEXT("信息错误! 请重新核对!"),TEXT("核对ID"),MB_OK); }}if(LOWORD(wParam) == IDC_BUTTON3){ DialogBox(0, (LPCTSTR)IDD_DIALOG6, hDlg, (DLGPROC)insert); } if(LOWORD(wParam) == IDC_BUTTON2){ GetDlgItemText(hDlg,IDC_EDIT1,outerID,10);ID=atoi(outerID);//转换成INT型b=CheckID(ID);if (b){try{char *sql="select * From cloth where ID=",SQL[256];sprintf(SQL,"%s%d",sql,ID)_ConnectionPtrpConn("ADODB.Connection");//打开数据库连接pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Users\\Administrator\\Desktop\\clothshop.mdb;Persist Security Info=False","","",adConnectUnspecified);_RecordsetPtr pRs("ADODB.Recordset");//pRs->Open(SQL,_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmd Text);//访问记录集中数据pRs->Delete(adAffectCurrent);MessageBox(0,TEXT("删除成功"),NULL,MB_OK);pRs->Close();//关闭记录集 pConn->Close();//关闭数据库连接}catch(_com_error &e){MessageBox(0,"数据库出错"," ",MB_OK); }}else{MessageBox(0,"无记录"," ",MB_OK); }}}return FALSE;}4.2.1.2流程图修改,插入,查询客户基本信息:删除客户基本信息:5.实现与调试分析5.1 实现环境以Microsoft VC++6.0为平台编写代码,用 Microsoft Access编写数据库!5.2 语言选择计算机高级编译语言:C++5.3 调试分析运行时出现错误提示:通过调试:发现单步运行时直接跳出“客户ID”这一段,说明错误在数据库的客户ID上:发现“客户编号”错误,应该改为“客户ID”!从新编译后通过,程序运行正确!6测试分析6.1测试用例ID 客户ID 客户姓名客户性别客户年龄24 1001 张加发男2025 1002 李斯男3426 1003 王麻子女2427 1004 李珊女566.2测试结果运行结果:1.客户显示功能2.客户管理功能6.2性能分析本系统可进行较简单的一些客户管理,销售管理,运行时占用较小的系统空间,并且程序的运行速度很快,程序本身不会占用太大的物理存储空间,成本相对比较低,应用范围不广,适合中小型的分店使用实现客户和销售的管理!7用户手册本程序简单易用,直接启动本程序,按照提示输入需要管理的客户人员,保存后可以进行修改,查询,删除,添加等功能!8总结开发此系统,需要经过需求分析,列出任务书,然后按照需求编写实现代码,这个过程要一步步的走好,因为现在的专业知识联系到平时的学习情况来说,编写这样一个中小型系统有一定难度,但是通过自学,上网查询,请教别人等手段最终简陋地编出来客户管理系统,还是有很多不够完善的地方,以后会逐步加强对这方面的练习!参考文献[1] 陈宏刚. 软件开发的科学与艺术,电子工业出版社,2004[2] 陈明. 实用软件工程基础,清华大学出版社,2003[3] 殷人昆.实用软件工程,清华大学出版社,2003[4] 林锐.软件工程思想 ,2004。