1、No.25 课程设计说明书 超市管理系统 1课程设计的目的 我国超市出现在20世纪90年代初期,现在已经成为我国零售业的一种重要形态,为国民经济的发展发挥了重要的作用。随着超市的高速发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售的发展,这样就迫切地需要引入新的管理技术。 超市形态具有种种优点,但在目前状况下,它仍存在零售业企业所共有的落后的一面,如:不能有效地管理每种商品,收款结算速度慢,容易出现营业差错,不宜进行商品调价,盘点效率低等,而且在超市日常管理中,商品的进、销、存等决策以经验为主,缺乏实时分析功能,管理人员对及时传递资料的要求始终得不到满足
2、随着超市形态的高速发展,其经营管理也变得愈加复杂,日常所需要处理的数据量也逐渐增大,商业运转的中间环节也越来越多,原始的人工管理已无法应对这复杂的市场。为此,依靠现代化的计算机信息处理技术来管理超市,从而节省了大量的人力、物力,改善了员工的工作条件,减轻了劳动强度,并且能够快速反映出商品的进、销、存等状况和各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。1985年著名教授高登.戴维斯给了管理信息系统一个较完整的定义:“它是一个利用计算机硬件和软件,分析、计划、控制和决策模型,手工操作以及数据库的人-机系统。它能提供信息,能支持企业或组织的运行、管理和决策[1
3、]。 2设计方案及论证 2.1可行性分析 2.1.1调查分析 系统的初步调查是系统设计规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。 正式开发管理信息系统之前进行调研是非常必要的,其必要性主要表现在以下几个方面。 (1)明确用户的要求,以便根据调查结果进行可行性分析,确认系统的开发是否可行。 (2)提出新系统的人员并不都是系统研究人员,有些人对功能和处理数据的方法没明确的认识。他们只是根据自已业务工作的需要提出了要求,系统开发人员要对此进行详细的调查和分析,确认用户的要求可以通过现有的计算技术来
4、实现,保证开发的管理信息系统的功能与用户提出的要求相吻合。 (3)超市管理系统的现行系统可能是手工系统,也可能是使用计算机的系统,无论是何情况,都要详细地调查现行系统中信息处理的具体情况,系统内部功能结构,以便设计一个合理的、好的新系统逻辑模型,为新系统的设计工作打好基础,保证整个系统开发的质量。 通过对整个超市系统目前主要管理业务的了解,主要工作是由管理员负责完成的。首先管理员手工录入目前所有产品或配件信息,并负责对其进行管理和维护;建立详尽的客户信息,并对进出货进行登记,便于随时查询销售状况,以及利润状况。 总之,必需对现行系统进行详细调查,明确用户需求,保证开发的新系统的功能与用户
5、的要求相吻合,避免耗费大量的人力、物力、财力。 2.1.2系统分析 (1)系统必要性分析 随着销售数据规模的日益庞大,商品数目也在呈指数级的增长,这样就造成了: ①产品库存量大,工作人员为产品进出库登记时的工作负荷重、效率低。 ②进出货过程中,时常会出现错误,增加了业务成本。 ③对进出货数据进行查询时,需要手工翻阅大量的票据,大大降低了查询效率,而查询的结果不尽人意。 以上缺点直接或间接地降低了工作效率,最终影响了商品进出库的管理。 (2)系统需求性分析 本软件对超市的采购、销售、仓库、资金、帐务等实际运作流程均实现了动态的计算管理,使得超市经营者能够迅速的掌控公司的实际运
6、作状况、合理做出公司的战略决策。软件提供的商品入库流水帐、商品销售流水帐、商品台帐、会计帐及各种报表在提高公司工作效率、减少人为的差错、最大限度堵塞漏洞的基础上很好的减轻了采购、销售、仓库、财务等环节工作人员的劳动强度,全面体现了现代企业管理理论所倡导的工作高效、环境轻松的氛围。 由于本系统设计针对该超市的具体情况,因此用户需求的目的是通过该企业的需求调查,从中总结出企业对管理信息系统的需求,然后根据这些需求设计出系统的方案。 需求收集和分析是数据库设计的第一阶段。需求分析定义了软件产品的各种用户需求如功能、性能等,需求分析是否透彻、完整、正确是软件项目成败的关键。这一阶段收集到的基础数
7、据是下一步设计概念结构的基础。 从数据库设计的角度考虑,需求分析阶段的目标是:对现实世界要处理的对象(组织、部门、企业等)进行详细调查,在了解原系统的概况,确定新系统功能的过程中,收集支持系统目标的基础数据及其处理,最重要的就是建立用户数据模型。无论是采取哪种开发策略,都需要访问用户、记录需求,并根据这些需求建立数据模型的原型,这样的模型标识了需要在数据库中存储的内容和它们的结构及相互关系。进行数据建模要求既要有一定的行业知识,又要精通建模的方法和技巧[2]。 开发建立一套数据库应用系统——超市管理系统,用于管理商品的录入、运转、查询以及进库、出库等信息。系统为C/S结构。另外,一个
8、界面友好、操作方便的超市管理系统能够更好地解决商品繁琐的统计工作。 2.1.3系统总体设计 系统的功能结构是根据需求分析的结果来设计的,根据系统详细分析,超市管理系统共分为四个模块,分别为:信息管理、日常操作、信息查询、系统管理。 系统功能模块图如图1所示。 图1 功能模块图 2.2数据库设计 2.2.1实体E-R图 这一设计阶段是在需求分析的基础上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑结构设计打下基础。 E-R图为实体-联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。 将现实世界的实体,属性和联系转化为抽象
9、的概括的概念模型。 构成E-R图的基本要素是实体型、属性和联系。 超市基本信息的实体-属性图,如图2所示。 图2超市基本信息实体-属性图 总实体图,如图3所示。 图3 总实体图 2.2.2数据库逻辑设计 将关系模型转换成具体DBMS支持的实际关系数据模型,如下面的几个表格所示。(每个表格表示在数据库中的一个表) 商品分类表包括编号、名称、备注字段,如表1所示。 表1 商品分类表 列名 数据类型 是否为空 字段宽度 默认值 说明 编号 int 否 10 主键 名称 Varchar(50) 否 50 备注 char
10、 10 管理员基本信息表包括姓名、权限、身份证号、密码等字段,如表2所示。 表2 管理员基本信息表 列名 数据类型 是否为空 字段宽度 默认值 说明 姓名 int 否 10 权限 Varchar(50) 否 50 身份证号 char 否 10 0.00 主键 密码 char 否 10 123 联系方式 char 否 10 地址 char 否 20 供货商基本信息表包括编号、名称、单位性质、联系人、联系方式,如表3所示。 表3 供货商基本信息表 列名 数据类型
11、是否为空 字段宽度 默认值 说明 编号 int 否 10 主键 名称 char 否 20 单位性质 char 否 20 联系人 char 否 20 联系方式 char 否 20 说明原因 进货统计表包括开票日期、经办人、供货商编号等字段,如表4所示。 表4进货单统计表 列名 数据类型 是否为空 字段宽度 默认值 说明 开票日期 日期型 否 10 经办人 char 否 10 供应商编号 char 否 10 备注 char 否 10
12、 说明原因 商品库存数量统计表包括条形码、进货价、零售价、会员价等字段,如表5所示。 表5商品库存数量统计表 列名 数据类型 是否为空 字段宽度 默认值 说明 条形码 int 否 20 主键 进货价 货币型 否 10 0.00 零售价 货币型 否 10 0.00 会员价 货币型 否 10 0.00 业务提成 货币型 否 10 0.00 说明原因 库存 int 10 在上面的实体以及实体之间的关系的基础上,形成数据库中的表格和各个表格之间的关系,即关系模型。设计关系模型并对其进
13、行优化: 确定数据依赖,给出关系模式中的主码,明确其依赖关系。对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。对照数据依赖的理论对各个关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖,确定各个关系模式分别所属的范式类型。按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适,对某些模式检查是否有合并或分解的需要。对关系模式进行必要的分解,提高数据操作效率和存储空间的利用率。 2.2.3数据库物理设计 (1)数据库设计视图 设计相应的数据库,并录入相关的数据,如图4所示。 图4数据库设计图 (2)数据库表之间关联图 为各个表之
14、间建立相应的关联,如图5所示。 图5 数据库表之间关联图 2.2.4连接数据库 #define Provider "Provider=SQLOLEDB.1;IntegratedSecurity=SSPI; Persist Security Info=False;Initial Catalog=Catering" void ADOConn::OnInitADOConn() { HRESULT hr; ::CoInitialize(NULL); try { hr = m_pCon.CreateInstance("ADODB.Con
15、nection"); if (SUCCEEDED(hr)) { m_pCon->ConnectionTimeout = 3; // m_pCon->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Catering.mdb","","",adMo deUnknown); m_pCon->Open(_bstr_t(Provider),"", "", adModeUnknown); } else AfxMessageBox("创建连接对象失败!"); }
16、 catch ( _com_error exp) { AfxMessageBox("数据库未连接"); AfxMessageBox(exp.Description()); } } 2.3详细设计 本系统分四大模块:信息管理模块、日常操作模块、信息查询模块、系统管理等模块。可以实现商品信息管理,系统信息管理,商品进货操作,商品出货操作,进货记录查询,出库信息查询,库存记录查询,修改密码等功能。 2.3.1系统界面设计 (1)功能模块设计 ①信息管理模块 超市基本信息界面设计 创建窗口对象,命名ID为IDD_CHAOSHI_B_DIALOG,在合适的位置
17、添加五个文本框,四个编辑框,一个下拉列表框和两个命令按钮,按照自己所需相应的依次为每一个控件修改ID和caption属性,其设计如图6所示。 图6超市基本信息界面设计 ②日常操作模块 进货开单界面设计 创建窗口对象,命名ID为IDD_KANDAN_C_DIALOG,在合适的位置添加五个文本框,五个编辑框,,按照自己所需相应的依次为每一个控件修改ID和caption属性,其设计如图7所示。 图7进货开单界面设计 ③信息查询模块 出库开单界面设计 创建窗口对象,命名ID为IDD_CHUKU_E_DIALOG,在合适的位置添加五个文本框,五个编辑框
18、按照自己所需相应的依次为每一个控件修改ID和caption属性,其设计如图8所示。 图8出库开单界面设计 ④系统管理模块 密码修改界面设计 创建窗口对象,命名ID为IDD_PWD_A_DIALOG,在合适的位置添加三个文本框,三个编辑框,两个命令按钮,按照自己所需相应的依次为每一个控件修改ID和caption属性,其设计如图9所示。 图9出库开单界面设计 (2)菜单设计 添加菜单,并添加菜单项系统设置、基本资料、进货管理、销售管理、库存管理等子菜单项,如图10所示。 图10菜单设计 2.4部分程序代码 // DlgDanganBase.cpp : imp
19、lementation file // #include "stdafx.h" #include "ncshop.h" #include "DlgDanganBase.h" #include "ADOConn.h" #include "DlgAll.h" #include "MyChiToLetter.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CDlgDanganBase dialog CDlgDang
20、anBase::CDlgDanganBase(CWnd* pParent /*=NULL*/) : CDialog(CDlgDanganBase::IDD, pParent) { //{{AFX_DATA_INIT(CDlgDanganBase) m_str1 = _T(""); m_str2 = _T(""); m_str3 = _T(""); m_str4 = _T(""); m_str5 = _T(""); m_str6 = _T(""); m_str7 = _T(""); m_str8 = _T(""); m_dbl10 = 0.0;
21、m_dbl9 = 0.0; m_dbl11 = 0.0; m_dbl12 = 0.0; m_dbl13 = 0.0; m_dbl14 = 0.0; m_dbl15 = 0.0; m_str16 = _T(""); //}}AFX_DATA_INIT } void CDlgDanganBase::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgDanganBase) DDX_Control(pDX, IDC_LIST
22、1, m_listMain); DDX_Control(pDX, IDC_BUTTON1, m_Btn5); DDX_Control(pDX, IDMODIFY, m_Btn2); DDX_Control(pDX, IDDEL2, m_Btn3); DDX_Control(pDX, IDC_BTNFIND, m_Btn4); DDX_Control(pDX, IDADD2, m_Btn1); DDX_Text(pDX, IDC_EDIT1, m_str1); DDV_MaxChars(pDX, m_str1, 255); DDX_Text(pDX, IDC_ED
23、IT2, m_str2); DDV_MaxChars(pDX, m_str2, 50); DDX_Text(pDX, IDC_EDIT3, m_str3); DDV_MaxChars(pDX, m_str3, 50); DDX_Text(pDX, IDC_EDIT4, m_str4); DDV_MaxChars(pDX, m_str4, 50); DDX_Text(pDX, IDC_EDIT5, m_str5); DDV_MaxChars(pDX, m_str5, 50); DDX_Text(pDX, IDC_EDIT6, m_str6); DDV_MaxC
24、hars(pDX, m_str6, 50); DDX_Text(pDX, IDC_EDIT7, m_str7); DDV_MaxChars(pDX, m_str7, 50); DDX_Text(pDX, IDC_EDIT8, m_str8); DDV_MaxChars(pDX, m_str8, 5); DDX_Text(pDX, IDC_EDIT10, m_dbl10); DDX_Text(pDX, IDC_EDIT9, m_dbl9); DDX_Text(pDX, IDC_EDIT11, m_dbl11); DDX_Text(pDX, IDC_EDIT12,
25、m_dbl12); DDX_Text(pDX, IDC_EDIT13, m_dbl13); DDX_Text(pDX, IDC_EDIT14, m_dbl14); DDX_Text(pDX, IDC_EDIT15, m_dbl15); DDX_Text(pDX, IDC_EDIT16, m_str16); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDlgDanganBase, CDialog) //{{AFX_MSG_MAP(CDlgDanganBase) ON_BN_CLICKED(IDC_BTNFIND, OnBtn
26、find) ON_NOTIFY(NM_CLICK, IDC_LIST1, OnClickList1) ON_BN_CLICKED(IDADD2, OnAdd2) ON_BN_CLICKED(IDMODIFY, OnModify) ON_BN_CLICKED(IDDEL2, OnDel2) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_EN_KILLFOCUS(IDC_EDIT6, OnKillfocusEdit6) ON_EN_CHANGE(IDC_EDIT6, OnChangeEdit6) ON_EN_UPDATE(IDC_
27、EDIT6, OnUpdateEdit6) ON_EN_CHANGE(IDC_EDIT11, OnChangeEdit11) ON_EN_KILLFOCUS(IDC_EDIT11, OnKillfocusEdit11) ON_EN_UPDATE(IDC_EDIT11, OnUpdateEdit11) //}}AFX_MSG_MAP END_MESSAGE_MAP() // CDlgDanganBase message handlers void CDlgDanganBase::OnBtnfind() { // TODO: Add your control noti
28、fication handler code here UpdateData(TRUE); CADOConn adoMain; CString strSql; strSql="SELECT 商品档案基本信息表.*, 商品库存数量统计表.进货价, 商品库存数量统计表.零售价,"; strSql=strSql+"商品库存数量统计表.会员价, 商品库存数量统计表.业务提成, " ; strSql=strSql+"商品库存数量统计表.库存 FROM 商品档案基本信息表 INNER JOIN 商品库存数量统计表 ON "; strSql=strSql+"商品档案基本信息表.条
29、形码 = 商品库存数量统计表.条形码 where 商品档案基本信息表.条形码='"; strSql=strSql+m_str16+"' or 商品档案基本信息表.商品编码='"; strSql=strSql+m_str16+"' or 商品档案基本信息表.助记码='"; strSql=strSql+m_str16+"' or 商品档案基本信息表.拼音码='"; strSql=strSql+m_str16+"'"; adoMain.Open(strSql); adoMain.FillList(&m_listMain,15); adoMain.ExitConnect()
30、 m_listMain.SetItemState(0, LVIS_SELECTED, LVIS_SELECTED); m_str1=""; m_str2=""; m_str3=""; m_str4=""; m_str5=""; m_str6=""; m_str7=""; m_str8=""; m_dbl9=0; m_dbl10=0; m_dbl11=0; m_dbl12=0; m_dbl13=0; m_dbl14=0; m_dbl15=0; UpdateData(FALSE); } BOOL CDlgDangan
31、Base::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CADOConn adoMain; CString strSql; strSql="SELECT 商品档案基本信息表.*, 商品库存数量统计表.进货价, 商品库存数量统计表.零售价,"; strSql=strSql+"商品库存数量统计表.会员价, 商品库存数量统计表.业务提成, " ; strSql=strSql+"商品库存数量统计表.库存 FROM 商品档案基本信息表 INNER J
32、OIN 商品库存数量统计表 ON "; strSql=strSql+"商品档案基本信息表.条形码 = 商品库存数量统计表.条形码"; adoMain.Open(strSql); adoMain.InitList(&m_listMain,15); adoMain.FillList(&m_listMain,2); m_Btn1.SetXIcon(IDI_ICONBUTTON); m_Btn2.SetXIcon(IDI_ICONBUTTON); m_Btn3.SetXIcon(IDI_ICONBUTTON); m_Btn4.SetXIcon(IDI_ICONFI
33、ND); m_Btn5.SetXIcon(IDI_ICONALL); GetDlgItem(IDC_STATIC2)->SetFont(&ftHeader,TRUE); adoMain.ExitConnect(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDlgDanganBase::OnClickList1(NMHDR* p
34、NMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here POSITION pos; int i; pos=m_listMain.GetFirstSelectedItemPosition(); i=m_listMain.GetNextSelectedItem(pos); if (i>=0) { m_str1=m_listMain.GetItemText(i,0); m_str2=m_listMain.GetItemText(i,1);
35、m_str3=m_listMain.GetItemText(i,2); m_str4=m_listMain.GetItemText(i,3); m_str5=m_listMain.GetItemText(i,4); m_str6=m_listMain.GetItemText(i,5); m_str7=m_listMain.GetItemText(i,6); m_str8=m_listMain.GetItemText(i,7); m_dbl9=atof(m_listMain.GetItemText(i,8)); m_dbl10=atof(m_listMa
36、in.GetItemText(i,9)); m_dbl11=atof(m_listMain.GetItemText(i,10)); m_dbl12=atof(m_listMain.GetItemText(i,11)); m_dbl13=atof(m_listMain.GetItemText(i,12)); m_dbl14=atof(m_listMain.GetItemText(i,13)); m_dbl15=atof(m_listMain.GetItemText(i,14)); UpdateData(FALSE); } *pResult = 0;
37、} 3运行结果与分析 3.1 系统登录界面 系统用户登录模块主要用于完成对登录系统的用户的验证,只有合法的用户才可以进入系统欢迎界面,如图11所示,控件信息如表6所示。 图11 登陆界面 登录窗体是用户进入系统的钥匙,只有合法的登录才是有效的登录。 表6对话框控件及属性 添加的控件 ID号 标题 其他属性 编辑框(编号) IDC_EDIT1 —— 默认 编辑框(密码) IDC_EDIT2 —— 默认 文本框(编号) IDC_STATIC —— 默认 文本框(密码
38、 IDC_STATIC —— 默认 按钮(确定) IDOK —— 默认 按钮(取消) IDCANCEL —— 默认 确定按钮相应代码: void CDlgLogo::OnOK() { // TODO: Add extra validation here UpdateData(TRUE); CString strSql; CADOConn adoMain; CFileOperate fileMain; CString strPath; CMyTime time1; CFile file1; strSql="select * fr
39、om 管理员基本信息表 where 编号='"; strSql=strSql+m_str1+"' and 密码='"; strSql=strSql+m_str2+"'"; time1.SetNow(); strfileName=time1.GetSimpleString(); strPath=fileMain.GetAppPath()+"\\data\\LOG\\"+strfileName+".txt"; file1.Open(strPath,CFile::modeWrite|CFile::shareDenyNone|CFile::modeCreate,NULL);
40、 file1.SeekToEnd(); strPath="\r\n "+time1.GetAllString(FALSE)+" "+m_str1+" 开始登陆 "; file1.Write(strPath,strPath.GetLength()); file1.Close(); adoMain.Open(strSql); if(!adoMain.adoEOF()) { strName=adoMain.GetValueString(1,0); strNo=m_str1; CDialog::OnOK(); } else
41、MessageBox("密码或编号错误!","提示",MB_OK+MB_ICONWARNING); adoMain.ExitConnect(); } 3.2系统主界面 输入有效的用户名密码就可进入系统的主界面,如图12所示。 图12系统主界面 3.3超市基本信息界面 可显示超市的信息如名称、性质、联系方式、地址、备注,如图13所示,控件信息如表7所示。 图13 菜式信息界面 表7 对话框控件及属性 添加的控件 ID号 标题 其他属性 列表框(性质) IDC_COMBO1 —— 默认 编辑框(名称) IDC_EDIT1 —— 默认 编
42、辑框(联系方式) IDC_EDIT2 —— 默认 编辑框(地址) IDC_EDIT3 —— 默认 编辑框(备注) IDC_EDIT4 —— 默认 按钮(确定) IDOK —— 默认 按钮(取消) IDCANCEL —— 默认 确定按钮相应代码: void CDlgChaoShiBase::OnOK() { // TODO: Add extra validation here CADOConn adoMain; CString strSql; CString str; UpdateData(TRUE); if(m_str
43、1=="") { MessageBox("超市名字不能为空!","提示",MB_OK|MB_ICONWARNING); GetDlgItem(IDC_EDIT1)->SetFocus(); return; } str.Format("%d",m_int); strSql="update 超市基本信息表 set 名称='"; strSql=strSql+m_str1+"',性质="; strSql=strSql+str+",联系方式='"; strSql=strSql+m_str2+"',地址='"; strSql=strSql+m_str3+
44、"',备注='"; strSql=strSql+m_str4+"' where 编号=1"; adoMain.ExecuteSQL(strSql); adoMain.ExitConnect(); CDialog::OnOK(); } 3.4商品分类报表界面 可导出、打印商品的信息如编号、名称、备注。如图14所示 图14进货信息界面 3.5进货开单界面 可进行开单操作,填写相应的信息就可使用结算、保存的操作。如图15所示。 图15进货开单界面 3.6商品库存统计表界面 可导出、打印商品的信息如分类编号、条形码、名称、规格等。如图16所示。 图
45、16商品库存统计表界面 3.7过少报警商品统计表界面 可导出、打印商品的信息如分类编号、条形码、拼音码、名称等。如图17所示。 图17过少报警商品统计表界面 系统测试是从整个系统出发,考查设计是否合理。任何一个人在设计时都不可能把所有问题考虑周到,总是或多或少地发生差错。但对系统而言,就不能有差错,所以测试是非常重要的。可以说测试就是“寻找错误”,特别是寻找不经常出现的错误,尽量把系统中隐藏着的错误消灭在调试期间。此外还要对系统的容错能力、操作错误等进行测试。总之,通过测试要达到这样一个目的:寻找问题,纠正错误,提高系统技术能力,使系统早日投入运行[3]。
46、 4设计体会 尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的。相信本管理系统是一套超市在日常管理中必不可少的管理软件,通过开发这个系统,我掌握了系统的设计过程,了解了的基本知识巩固了我对Visual C++ 6.0的学习,但在这次课程设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法,以及与同学们之间相互帮助的精神。 5参考文献 [1] 安忠,基于VC++的管理信息系统 [M].北京:中国铁道出版社.2007,01:10-51. [2] 陈禹,信息系统分析与设计[M].北京:电子工业出版社.2003,06:105-122 [3] 杨芙清、梅宏、李克勤. Visual C++信息管理程序设计技术[J],电子学报,2004,11:52-97 沈 阳 大 学






