超市会员管理系统详细代码教学提纲
超市会员管理系统详
细代码
数据库设计
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,OnToolTipText)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA,0,0xFFFF,OnToolTipText)
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,adLockO ptimistic,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");