当前位置:文档之家› 超市会员管理系统详细代码

超市会员管理系统详细代码

数据库设计1 系统数据库分析数据库设计是建立数据库及其应用系统的技术,是系统开发和建设中的核心技术。

具体说,数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效的存储数据,满足各种用户的应用需求(信息要求和处理要求)。

数据库结构设计的好坏直接对应用系统的效率以及实现的效果产生影响。

根据超市会员管理系统功能设计的需要,数据库结构设计如下所示:(1). 用户登录信息数据表(Login):(用户账号,密码,登录身份);(2). 会员基本信息数据表(Member):(用户账号,用户姓名,身份证号,联系方式,联系地址);(3). 职员基本信息数据表(Employee):(职员号,职员姓名,职员职位);(4). 会员积分信息数据表(Score):(会员账号,会员积分,会员等级,会员折扣);2 数据库概念结构设计根据上节的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系,为以后的逻辑结构设计打下基础,这些实体包括各种具体信息,通过相互之间的作用形成数据的流动。

各种实体具体的描述E-R图如下。

1. 用户登录信息实体图主要描述了登录用户的基本情况,包括了用户的用户账号,密码,登录身份。

如图3-11所示,用户登录信息实体E-R图。

图3-12 用户登录实体的E-R图2. 会员基本信息实体图主要描述会员的基本情况,包括了会员基本信息的用户账号,用户姓名,身份证号,联系方式,联系地址,得出如图3-12所示会员基本信息实体E-R图。

图3-13 会员基本信息实体的E-R图3. 职员基本信息实体图主要描述新生的基本情况,包括了职员基本信息的职员号,职员姓名,职员职位,得出如图3-13所示职员基本信息实体E-R图。

图3-14 职员基本信息实体的E-R图4. 会员积分信息实体图主要描述会员积分的基本情况,包括了会员积分基本信息的会员账号,会员积分,会员等级,会员折扣,得出如图3-14所示会员积分信息实体E-R图。

图3-15 会员积分信息实体的E-R图实体之间的关系E-R图主要描述实体间的关系。

图3-16 各实体之间的关系3.系统数据库的设计根据需求分析与概念结构设计,建立数据库系统支持的数据模型,即数据库的逻辑结构。

本系统利用Microsoft Access 2003创建了名为SuperMarket的数据库。

本系统主要建立了以下四张表:表3.1 用户登录数据表表3.2 会员基本信息数据表表3.3 职员基本信息数据表表3.4 会员积分信息数据表4. 表之间的关系表之间存在的关系如下:1.在会员基本信息表(Member)中添加信息的同时,把信息添加到用户登录信息表(Login)中,同时将信息添加到积分信息表(Score)中。

2.在会员基本信息表(Member)中删除会员信息的同时,把用户登录信息表(Login)和用户积分信息(Score)中该会员信息删除。

3.在职员基本信息表(Member)中添加信息的同时,将志愿的基本信息添加到用户登录信息表(Login)中。

4.在职员基本信息表(Member)中删除职员信息的同时,把用户登录信息表(Login)中该职员信息删除。

详细设计与实现1. 系统首页图4-1 超市会员管理系统首页自定义工具栏按钮及鼠标提示信息的设计与实现:图4-2 主页面工具栏在对话框的OnInitDialog方法中常见工具栏窗口和图像列表窗口,关联图像列表,设置工具栏按钮文本,启动工具栏的EnableToolTip方法激活提示功能。

鼠标提示信息的实现,处理TTN_NEEDTEXT消息的响应函数OnToolTipText(),通过函数的参数获得工具栏按钮的ID,从而根据ID获取提示信息文本。

1.添加消息映射(最好写在AFX_MSG_MAP宏外,否则可能出现编译错误)ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW,0,0xFFFF,OnToolTip Text)ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTip Text)2.添加事件声明(最好写在AFX_MSG宏外,否则可能出现编译错误)afx_msg BOOL OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult);2 登录页面系统运行后,首先展现给用户的是用户登录界面,用户登录成功后进入到主页面,用户登录界面如下图所示:图4-3 用户登录界面用户登录有三种身份,管理员、普通职员、会员。

管理员登录成功后,可以对系统各模块进行操作;普通职员登录成功后,除对职员的添加、删除外,均可实现操作;会员,则只能对自己的一些基本信息进行操作。

登录界面由函数void CLoginDlg::OnOK()实现处理,具体代码如下://实现该功能的SQL语句sql="select * from Login where DNO='"+Name+"' and DCode='"+ECode+"' and DUserSta='"+EStatus+"'";m_pRs->Open((_bstr_t)sql,theApp.conn.GetInterfacePtr(),adOpenKeyset,adLock Optimistic,adCmdText);//登录成功与否、登录次数判断if ( m_pRs->GetRecordCount()<=0 ){if ( m_LoginNum<=3 ) // 登录次数小于3次{MessageBox("用户名或密码、身份错误!","提示",64);}if ( m_LoginNum==3) // 3次登录不成功{MessageBox("用户登录3次不成功!即将关闭程序......","提示",64); CDialog::OnOK();// 向应用程序发送WM_QUIT消息,请求退出::PostQuitMessage(0);}}else{// 如果登录成功,则关闭数据库CDialog::OnOK();CCMarketDlg dlg;dlg.m_LoginSta=EStatus;dlg.DoModal();}3 会员信息模块(1) 会员基本信息查询会员基本信息查询如下图:图4-4 会员信息查询界面用户登录成功后,可以根据用户账号或身份证号查询会员的基本信息,还可以进行全表查询。

查询前,首先要选择及填写查询条件,若未填写,则出现系统提示。

查询条件填写正确后,点击查询即可会员详细信息。

查询和显示全部单击事件实现分别由函数void CMemberDlg::OnOK()和void CMemberDlg::OnBUTTONListAll()实现,具体代码如下:记录集打开同上。

在列表框中显示的实现:while (!m_pRs->adoEOF){CString temp;m_EList.InsertItem(1000,"");for(int i=0;i<3;i++){temp=(TCHAR*)(_bstr_t)m_pRs->GetFields()->GetItem((long)i)->Value;m_EList.SetItemText(row,i,temp);}m_pRs->MoveNext();row+=1;}4.3.2 会员密码修改此模块用于修改会员的登录密码。

图4-5 会员密码修改界面填入用户账号和旧密码后,系统检查数据库中是否有该记录,如果存在该记录,则可填写新密码进行修改;若不存在,则系统给出提示信息。

如下图:图4-6 会员密码修改提示信息界面该模块单击事件由函数void CECodeModifyDlg::OnOK()实现,具体代码如下:sql="Update Login set DCode='"+NewCode+"' where DNO='"+Name+"'";try{theApp.conn->Execute((_bstr_t)sql,NULL,adCmdText);}catch(_com_error &e){AfxMessageBox(e.Description());}AfxMessageBox("修改成功");4. 积分信息模块(1) 积分查询该功能实现界面如下:图4-7 积分查询界面输入会员账号后,点击确定按钮,系统首先检查账号是否存在,若存在则输出该会员积分信息;若不存在,输出提示信息。

实现原理如会员信息模块中的会员查询。

实现函数为:void CJQueryDlg::OnOK()。

在编辑框中的显示实现为:var = m_pRs->GetCollect("MScore");if(var.vt != VT_NULL)str1 = (LPCSTR)_bstr_t(var);GetDlgItem(IDC_EDIT_Jifen)->SetWindowText(str1);var = m_pRs->GetCollect("MGrade");if(var.vt !=VT_NULL)str2=(LPCSTR)_bstr_t(var);GetDlgItem(IDC_EDIT_Grade)->SetWindowText(str2);var = m_pRs->GetCollect("MDiscount");if(var.vt !=VT_NULL)str3=(LPCSTR)_bstr_t(var);GetDlgItem(IDC_EDIT_Discout)->SetWindowText(str3);(2) 积分兑换积分兑换功能的实现界面如下:图4-8 积分兑换功能实现界面用户输入账号和密码后,点击兑换按钮,该按钮的实现中,首先检查用户合法性。

若用户已兑换过积分,则提示及兑换;若积分不够兑换等级,则提示积分不够;若兑换成功后,则显示用户等级和优惠折扣。

该模块实现单击事件函数处理为:void CEXchangeDlg::OnOK(),具体实现如下://修改数据库中积分sql="Update Score set MGrade=1,MDiscount=0.1 where MNO='"+mzh+"'";try{theApp.conn->Execute((_bstr_t)sql,NULL,adCmdText);}catch(_com_error &e){AfxMessageBox(e.Description());}AfxMessageBox("兑换成功");(3) 消费加分该模块功能将会员的消费金额换为消费积分,如下图:图4-9 消费加分模块界面实现图输入用户账号和消费金额后,首先检查数据库中是否存在该记录,如果存在,则将该用户积分增加其消费金额数目,如不存在,系统弹出提示信息。

相关主题