进销存管理系统毕业设计范例.doc
《进销存管理系统毕业设计范例.doc》由会员分享,可在线阅读,更多相关《进销存管理系统毕业设计范例.doc(44页珍藏版)》请在咨信网上搜索。
进销存管理系统 学 院 专 业 班 级 学 号 姓 名 指导教师 教师职称 年 月 日 目录 进销存管理系统 目录 摘要 0 引言 1 系统需求分析 2 总体设计 1 项目规划 2 系统功能结构 3 设计目标 3 系统设计 1 开发及运行环境 2 数据库设计 4 功能模块设计 1 主窗口设计 2 系统登录管理 3 商品销售管理 4 商品入库管理 5 调货登记管理 6 权限设置管理 附录A 参考文献 附录B 数据表 摘要 【摘要】 随着国家的政治经济政策的优化改革,使得国内中小企业得以蓬勃发展。可是随着企业的发展,客户数量的的为断增多,财务工作繁杂化,库存产品零乱等一系列问题也接踵而至,给企业经营者运作带来了很大的困扰。信息技术的迅猛发展,科学经营管理观念的迅速传播,使中小企业经营者逐渐认识到转变企业经营管理理念,改善企业经营管理模式是企业适应时代的发展急需解决的问题。现代管理,应该建立在真实、有效的数据信息基础之上,应该是一种科学的、理性的管理体制,而这种管理与经营的联系与互助,又必须依赖于计算机的强大的数据统计功能,计算机管理系统便是实际的企业进销问题与计算机强大数据统计功能相结合的产物。管理系统解决的了商业企业商品的进、销、存、退、换、盘、损、残、调、借、赠等一系列操作流程中的数据信息的处理问题,提供一系列的数据分析,帮助经营者合理的调整各个经营运作环节的运作节奏,并对商品流转过程进行了全程跟踪管理、相应款项流通的全程记录管理和票据信息统计的管理。因此进销存管理系统的全面应用,规范业务流程、提高了企业的管理水平,提高资金流动的透明度,加快商品资金周转速度,进而全面提高了企业的经营水平、进而全面提升了企业的经济效益。 【关键词】进销存管理系统 0 引言 企业经营如逆水行舟不进则退。每一个努力发展的企业都明白,先进管理的重要作用,引进先进管理系统使企业经营变得规范、合理。进销存管理系统无论是在功能设计还是业务流程上都尽可能做到满足经营管理运作流程的需求,并且操作方便、功能强大,即使操作者对计算机知识一窍不通也能一用就会。它强化库存管理,规范业务流程,提高资金管理的透明度,加快商品资金周转,是企业经营管理中数据分析中必不可少的管理工具。 1 系统需求分析 根据市场的需求,要求系统具有以下功能: q 实现商品入库、入库退货操作。 q 实现商品销售、销售退货操作。 q 实现库存管理(调货、盘点)操作。 q 实现信息的查询、打印功能。 q 准确地进行账款记录、账款查询。 2 总体设计 2.1 项目规划 根据需求分析,设计系统框架。进销存管理系统由等8部分组成。设计各部分具体功能如下: q 基础信息模块 基础信息模块包括药品信息、员工信息、供应商信息和客户信息4部分。 q 销售模块 销售模块由销售登记、销售退货、销售查询、销售退货查询4部分。 q 入库模块 入库模块主要由入库登记、入库退货、入库查询、入库退货查询4组成。 q 调货模块 调货模块包含调货登记和调货查询两部分。 q 库存模块 库存模块由库存盘点、库存查询、仓库管理3部分组成。 q 结账模块 结账模块主要包括销售结账、销售退货结账、入库结账、入库退货结账。 q 财务模块 财务模块由日结、月结、供应商往来账、客户往来账4部分组成。 q 系统管理模块 系统管理模块由修改用户密码、修改用户权限、修改用户3部分组成。 2.2 系统功能结构 进销存管理系统的功能结构如图1所示。 图1 进销存管理系统功能架构图 3 设计目标 本系统是根据中小企业的实际需求而开发的,完全能够实现商品入库、销售管理,通过本系统可以达到以下目标: q 系统运行稳定,安全可靠。 q 界面设计美观,人机交互界面友好。 q 信息查询灵活、方便、快捷、准确,数据存储安全可靠。 q 强大的报表预览、打印功能。 q 信息安全保密。 3 系统设计 3.1 开发及运行环境 1.硬件要求 CPU:300MHz以上的处理器。 内存:128MB,推荐256MB。 硬盘:150MB以上剩余空间。 显示像素:最低800*600,最佳效果1024*768。 2.软件要求 操作系统:Windows2000/NT/XP/CE。 数据库:SQL Server2000。 3.2 数据库设计 1.数据库概要说明 本系统采用SQL Server 2000 数据库,系统数据库名为ypgl,中共包含46个表,其中作为临时表的有20个,作为数据存储表的有26个。 临时表:lsdhinfo0、lsdhinfo1、lsgys0、lsgys1、lskcquery0、lskcquery1、lskh0、lskh1、lsrkquery0、lsrkquery1、lsrkthinfo0、lsrkthinfo1、lsxsquery0、lsxsquery1、lsxsthinfo0、lsxsthinfo1、lsyg0、lsyg1、lsypinfo0、lsypinfo1。 数据存储表:tabbf、tabck、tabdhdj、tabdhph、tabgys、tabjsfs、tabkc、tabkcpddj、tabkcpdph、tabkh、tabpurview、tabpurviewctrl、tabrkdj、tabrkjz、tabrkph、tabrkthdj、tabrkthjz、tabrkthph、tabxsdj、tabxsjz、tabxsph、tabxsthdj、tabxsthjz、tabxsthph、tabyginfo、tabypinfo。 图2所示的即为本系统中数据库的数据表结构图,该数据表结构图包含系统所有数据表。可以清晰地反应数据库信息。 图2 数据库概要说明 2.主要数据表的结构 数据库中的数据表请参见附录B。 4 功能模块设计 4.1 主窗口设计 进销存管理系统主窗口由菜单、工具栏、客户区域和状态栏四部分组成,效果如图3所示。 图3 进销存管理系统主窗口 1.菜单设计 (1)在工具栏中单击按钮,或者从菜单中选择“View”/“Workspace”项,这时会弹出如图4所示的工作区窗口(Workspace窗口)。在工作区窗口中,能看到该程序所使用的资源,且每种资源都有一个资源符号,主窗体也使用了一个资源符号IDD_A1_DIALOG,这是VC缺省提供的。可以在这里添加或者删除各种资源。 图4 Workspace窗口 (2)在工作区窗口(Workspace窗口)右键单击“a1 resources”选项,在弹出菜单中选择“Insert...”选项,将弹出“Insert Resource”对话框。在该对话框中选择“Menu”选项,然后单击“New”按钮,将生成如图5所示的菜单资源。 图5 编辑菜单资源 (3)右键双击菜单资源编辑器的虚线空白框,在弹出的菜单中选择“Properties”选项,将弹出“Menu Item Properties”对话框,在“Menu Item Properties”对话框的“caption”(标题)编辑框中键入:“基础信息(&I)”(符号&可以使字母I有一个下划线,而且可以通过“Alt+I”访问该菜单项。此时关闭“Menu Item Properties”对话框,将在菜单编辑器中生成主菜单“基础信息”。双击“基础信息”菜单下的虚线空白框,在弹出的“Menu Item Properties”对话框中设计“药品信息(&M)”、“员工信息(&Y)”等菜单项。 (4)同上,可以设计其他主菜单及菜单项。最后得到如图6所示的菜单界面。 图6 菜单界面 2.工具栏设计 在应用程序中要经常使用工具栏,它是最常用的界面元素,对应着应用程序的最常用功能。主窗口共有9个工具栏按钮,分别是“销售登记”、“销售退货”、“销售结账”、“入库登记”、“入库退货”、“入库结账”、“调货登记”、“库存登记”、“退出”工具栏按钮。创建工具栏可使用MFC类库中的CToolBarCtrl类,该类用来生成工具条。本系统主窗体的工具栏将引用MSDN提供的类CStandardBar,该类派生自CToolBarCtrl。 操作步骤如下: (1)从基类CToolBarCtrl中派生需要的类CstandardBar。选择“Insert”/“New Class...”菜单项,在弹出来的“New Class”对话框中设置“Class Type”为“MFC Class”,在“Class Infomation”中的Name编辑框中键入“CstandardBar”,然后在“Base Class”下拉列表框中选择“CtoolBarCtrl”,最后单击“OK”按钮。 (2)需要9个按钮,每个按钮有相应的文本和图片。所以,需要添加如图7所示的图片资源,资源长为288像素,高为32像素,资源符号为:IDR_STANDARDBAR。 图7 图片资源 (3)添加字符串资源(String Table),如表1所示。 表1 字符串资源 资源符号 值 字符串资源 IDSTR_XSDJ 102 销售登记 IDSTR_XSTH 103 销售退货 IDSTR_XSJZ 104 销售结账 IDSTR_RKDJ 105 入库登记 IDSTR_RKTH 106 入库退货 IDSTR_RKJZ 107 入库结账 IDSTR_DHDJ 108 调货登记 IDSTR_KCPD 109 库存盘点 IDSTR_OUT 110 退出 (4)程序中引入资源,创建工具栏按钮。 创建工具栏按钮需要重写Create函数,该函数创建工具栏的步骤如下: ① 先创建工具栏窗口,然后为工具栏类添加图片资源。相关函数是: SetBitmapSize(CSize(32,32)); //设置单个位图的大小 VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR) != -1); //添加位图 m_nButtonCount是指按钮图片的个数,IDR_STANDARDBAR对应着相应的图片。 ② 创建相应数量的按钮,并为每个按钮分配相应图片资源和文本资源,设置相关属性。 m_pTBButtons = new TBBUTTON[m_nButtonCount]; //用来加入到工具栏里的按钮 …… m_pTBButtons[nIndex].iString = AddStrings(pString); m_pTBButtons[nIndex].fsState = TBSTATE_ENABLED; m_pTBButtons[nIndex].fsStyle = TBSTYLE_BUTTON; m_pTBButtons[nIndex].dwData = 0; m_pTBButtons[nIndex].iBitmap = nIndex; //控制按钮的相关图片 m_pTBButtons[nIndex].idCommand = nIndex + IDSTR_XSDJ; //用于命令消息传递 在步骤②中,要注意如下事项: ① AddStrings(pString)返回一个字符串的基于0的编号,该值用来连接字符串到按钮上,其中的字符串参数pString需要两个结束符来表示结尾,必须将字符串写成如下形式:pString= "Only one string to add\0";CString类不能提供这样的功能,因为不可能在CString中保存超过一个结束符的字符串。所以,将CString中的字符串取出,以char定义的字符串保存,再对该字符串添加一个结束符,做法如下: CString string; string.LoadString(nIndex + IDSTR_XSDJ); //装载字符串资源 …… //取得字符串的长度为了添加一个结束符,给长度加1 int nStringLength = string.GetLength() + 1; …… TCHAR * pString = string.GetBufferSetLength(nStringLength); //按增加后的长度返回字符串 pString[nStringLength] = 0; 函数GetBufferSetLength的过程分配了nStringLength+1长度的内存空间,并在加上结束符'\0'之后,复制原字符串到这个新的内存空间中,同时将原字符串的结束符也复制到新的位置,于是,该函数结束后,字符串pString已经有两个结束符了,最后一个语句略显多余或不足。但为了保证该字符串确实有两个结束符,不能省略这两个结束符。 pString[nStringLength] = 0; pString[nStringLength-1] = 0; ② fsState确定按钮的状态,fsStyle确定按钮的风格。若给fsStyle赋值TBSTYLE_SEP,则该按钮表现为一个间隔。dwData可以是用户自定义的数据,可以将一个指针或句柄传递给它,可以在某些消息响应函数中使用。iBitmap是表示基于0的图像列表的编号。 ③ idCommand为与按钮连接的命令标识,当这个按钮被按下时,这个值将被放到WM_COMMAND中发送到父窗体。如果fsStyle被设置为TBSTYLE_SEP,该值必须为0。 用Create函数创建工具栏的代码如下: BOOL CStandardBar::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); { BOOL bRet = CToolBarCtrl::Create(dwStyle, rect, pParentWnd, nID); //记录基类的返回值 m_nButtonCount = IDSTR_OUT - IDSTR_XSDJ + 1; SetBitmapSize(CSize(32,32)); //设置单个位图的大小 VERIFY(AddBitmap(m_nButtonCount,IDR_STANDARDBAR) != -1); //添加位图 m_pTBButtons = new TBBUTTON[m_nButtonCount]; //用来加入到工具栏里的按钮 for (int nIndex = 0; nIndex < m_nButtonCount; nIndex++) //循环设定按钮属性 { CString string; string.LoadString(nIndex + IDSTR_XSDJ); //装载字符串资源 //为每一个字符串再加一个'\0',用于向工具栏里加字符串 int nStringLength = string.GetLength() + 1; TCHAR * pString = string.GetBufferSetLength(nStringLength); pString[nStringLength] = 0; pString[nStringLength-1] = 0; VERIFY((m_pTBButtons[nIndex].iString = AddStrings(pString)) != -1); //返回字符串的编号 string.ReleaseBuffer(); m_pTBButtons[nIndex].fsState = TBSTATE_ENABLED; m_pTBButtons[nIndex].fsStyle = TBSTYLE_BUTTON; m_pTBButtons[nIndex].dwData = 0; m_pTBButtons[nIndex].iBitmap = nIndex; //控制按钮的相关图片 m_pTBButtons[nIndex].idCommand = nIndex + IDSTR_XSDJ; //用于命令消息传递 } m_pTBButtons[m_nButtonCount-1].idCommand=IDOK; //用来响应退出消息 TBBUTTON sepButton; //用于分隔的按钮 sepButton.idCommand = 0; sepButton.fsStyle = TBSTYLE_SEP; sepButton.fsState = TBSTATE_ENABLED; sepButton.iString = 0; sepButton.iBitmap = 0; sepButton.dwData = 0; for (nIndex = 0; nIndex < m_nButtonCount; nIndex++) { VERIFY(AddButtons(1,&m_pTBButtons[nIndex])); //循环添加按钮 if (!((nIndex +1) % 3)) { VERIFY(AddButtons(1,&sepButton)); //每3个按钮为一组,两组间有一个分隔按钮 } } return bRet; //返回CToolBarCtrl::Create的返回值 } (5)调用工具栏类。先在类CA1Dlg中实例化CStandardBar的对象。 CStandardBar m_StandardBar; 别忘了在这个文件里包含CStandardBar类声明所在的头文件。 #include "StandardBar.h" (6)增加消息WM_CREATE的响应函数,为CStandardBar对象创建相应窗口。 int CA1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; m_StandardBar.Create(WS_BORDER | WS_VISIBLE | WS_CHILD | TBSTYLE_WRAPABLE| CCS_TOP| CCS_ADJUSTABLE, CRect(0,0,0,0),this, IDR_STANDARDBAR1); m_StandardBar.AutoSize(); //重新计算控件的大小 return 0; } 工具栏到这里就创建成功了。 3.为菜单和工具栏添加消息处理函数 在此之前,定义了菜单和工具栏界面,单击他们并没有实质的内容,现在为他们添加消息处理函数。 (1)单击菜单和工具栏按钮的两种消息都是命令消息,所以,只要让他们传递相同的消息,就能执行相同的消息处理函数。从代码中可以看到对于工具栏的按钮来说,按钮的命令消息值与字符串资源符号的值相同,而且是顺序的,而对于相应的菜单项来说,消息值是随机的顺序值。为了将两者对应起来,要修改菜单项的资源符号,将其改为相应的按钮的字符串资源符号。例如:将销售登记菜单项的资源符号改为IDSTR_XSDJ,并给它定义消息响应函数:void CA1Dlg::OnXsdj()。这样,无论是单击“销售登记”菜单项,还是单击“销售登记”按钮都会执行这个函数。同理,完成其他的菜单项与按钮的对应。 (2)还有一个问题:别忘了,工具栏中有一个“退出”按钮。这个退出按钮与谁对应呢?当用户按下〈Enter〉键或〈Esc〉键时,对话框就会退出,这里触发的两个消息分别是IDOK和IDCANCEL。如果给“退出”按钮的命令消息值赋值为IDOK,那么单击该按钮时,对话框就会退出。代码如下: m_pTBButtons[m_nButtonCount-1].idCommand=IDOK; //用来响应退出消息 4.状态栏设计 为使应用程序操作界面更加友好,可以使用状态条显示程序当前程序的状态信息或提示信息。在VC中提供了CStatusBarCtrl类显示状态栏。在本程序中利用状态条显示操作者、日期、时间等信息。其实还有CStatusBar类可以显示状态栏,但是这个类只能用于主框架(CFrameWnd)上。 分析功能:显示操作员名字、公司名称及时间。其中,公司名称是常量字符串,可以将其加为字符串资源;操作员名字,是登录的用户名,将其放在应用程序类中,这样,就可以在程序的任何地方都可以访问了;时间,需要设置OnTimer时间来处理当时间改变时,刷新显示。 (1)解决创建状态栏的相关问题 ① 访问应用程序对象。 CA1App* app=( CA1App *)::AfxGetApp(); //app是应用程序对象指针,可以访问应用程序对象的成员变量,例如: MessageBox(app->m_sUserName); ② 访问资源字符串。 先在“Workspace”中的“Resource View”选项中建立字符串资源,定义符号IDS_COMPANY,对应资源为“明日腾龙科技有限责任公司()”。 在程序中使用如下代码: CString str; str.LoadString(IDS_COMPANY); str保存相应的字符串资源。 ③ 将访问时间转化为字符串。 CTime t=CTime::GetCurrentTime(); CString s=t.Format("%H:%M:%S"); s="当前系统时间:"+s; s会显示为“当前系统时间:20:09:25”形式的字符串。 ④ OnTimer消息响应函数。 为实现每隔1秒刷新一次状态栏的显示内容,可以使用WM_TIMER的消息响应函数OnTimer。要创建主窗体的OnTimer函数,首先在“Workspace”工作区“Class View”选项卡中右键单击“CA1Dlg”选项,在弹出菜单中选择“Add Windows Message Handle...”菜单项,将弹出“New Windows Message and event handles for class CAIDlg”对话框。在该对话框中,可以选择要进行处理的消息句柄,并为其添加消息响应函数。步骤是从左边的列表框中双击“WM_TIMER”,将其添加到右上边的列表框中,双击该列表框中的“WM_TIMER”项,可以看到VC++创建的函数OnTimer,可以设置这个函数每隔一定的时间响应一次。函数SetTimer来设置OnTimer的消息响应频率。 UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) ); 参数说明: nIDEvent:用来标识是哪一个Timer事件。 nElapse:设置该Timer事件每隔多长时间发生一次,单位:毫秒。 lpfnTimer:设置回调函数,用来响应事件的发生,相当于OnTimer函数。如果将其设为NULL,那么,WM_TIMER事件由窗口类来处理,即由OnTimer函数处理。 在本程序中,设定OnTimer函数1000毫秒响应一次。 SetTimer(12,1000,NULL); ⑤状态栏类CStatusBarCtrl的使用。 CRect rect; this->GetClientRect(&rect); int indicators[3]; indicators[0]=rect.Width()/2; indicators[1]=rect.Width()*3/4; indicators[2]=rect.Width(); m_StatusBarCtrl.SetParts(3,indicators); 以上代码用来初始化状态栏,函数SetParts用来设定该状态栏由几个面板组成,每个面板的宽度。实际上,该函数用整型数组作参数,数组元素的值代表面板的宽度。 函数SetText用来设定每个面板上显示的数据,代码如下: lBOOL SetText( LPCTSTR lpszText, int nPane, int nType ); 参数说明: lpszText:是该面板的字符串。 nPane:是面板编号(基于0)。 nType:是面板风格,该参数一般为0。 (2)创建状态栏。 创建状态栏的操作步骤如下: ①在CA1Dlg的声明中定义CStatusBarCtrl的对象:CStatusBarCtrl*m_StatusBarCtrl。 ②在CA1Dlg的初始化函数中初始化状态栏对象,代码如下: BOOL CA1Dlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); //Set big icon SetIcon(m_hIcon, FALSE); //Set small icon //取得系统时间 CTime t=CTime::GetCurrentTime(); CString s=t.Format("%H:%M:%S"); s="当前系统时间:"+s; //为状态栏创建窗体 CRect rect; this->GetClientRect(&rect); m_StatusBarCtrl.Create(WS_CHILD|WS_VISIBLE|CCS_BOTTOM, rect,this,ID_STATUS_BAR_CTRL); //设置状态栏的显示区间数,及相应宽度 int indicators[3]; indicators[0]=rect.Width()/2; indicators[1]=rect.Width()*3/4; indicators[2]=rect.Width(); m_StatusBarCtrl.SetParts(3,indicators); //显示各区间文本 str.LoadString(IDS_COMPANY); m_StatusBarCtrl.SetText(str,0,0); CA1App * app=( CA1App *)::AfxGetApp(); m_StatusBarCtrl.SetText("当前操作员:"+app->m_sUserName,1,0); m_StatusBarCtrl.SetText(s,2,0); //令CA1Dlg每一秒钟触发一次OnTimer事件,修改系统时间 this->SetTimer(12,1000,NULL); return TRUE; //return TRUE unless you set the focus to a control } ③处理WM_TIMER消息的消息响应函数OnTimer,代码如下: void CA1Dlg::OnTimer(UINT nIDEvent) { CTime t=CTime::GetCurrentTime(); CString s=t.Format("%H:%M:%S"); s="当前系统时间:"+s; this->m_StatusBarCtrl.SetText(s,2,0); CDialog::OnTimer(nIDEvent); } 5.客户区设计 一个优秀的商业管理系统,不但要有实用的功能,还要有漂亮友好的界面。在本例中,设置窗体背景只需加入一个Bitmap资源,运行效果如图3.3所示,其操作步骤如下: (1)在资源对话框上放一个Picture控件。 (2)然后加入一个需要的Bitmap资源,如果图片包含的颜色超过256种,那么它会提示该图片不能在资源编辑器里编辑,不用管它,除非真的想编辑它,加进来的图片的资源符号缺省为IDB_BITMAP1。 (3)设置Picture控件属性类型为Bitmap,图像为IDB_BITMAP1。 4.2 系统登录管理 1.实现目标 程序启动后,首先进入系统登录程序验证用户密码。系统登录程序主要实现如下功能。 q 输入密码的控件采用文本框。密码如果输入正确,取得用户权限并进入系统,否则,将提示错误,并返回密码输入框。 q 记录错误次数,录入密码错误3次将自动退出系统。 q 用户按下〈Enter〉键,控制焦点的移动。 系统登录程序运行结果如图8所示。 图8 系统登录窗口 2.设计步骤 (1)增加对话框资源,设计窗体资源符号为IDD_DIALOG_LOGIN。 (2)为该窗口连接相关的类,在资源对话框上右键单击,选择“ClassWizard...”选项,会弹出“Add a class”对话框,提示IDD_DIALOG_LOGIN是一个新的资源,需要为这个资源创建一个类,或为它连接一个现有类。在此,选择新建一个派生于CDialog的类来连接该资源,该类命名为CDlgLogin。 (3)向窗口中添加图片、编辑框、静态文本、按钮等资源,设置主要资源属性,如表2所示。 表2 相关资源设置 资源名称 资源符号 资源对应的变量 资源属性 Bitmap JIEMIAN 无 来自于文件jiemian.bmp Picture IDC_STATIC 无 类型Bitmap,图像JIEMIAN Button IDOK 无 缺省 Button IDCANCEL 无 缺省 Static Box IDC_STATIC 无 标题为:请输入用户名和密码: Static Box IDC_STATIC 无 标题为:用户名: Static Box IDC_STATIC 无 标题为:密码: Edit Box IDC_EDIT_NAME CEdit m_editUserName 取消Border,选上【Static edge” Edit Box IDC_EDIT_PASSWORD CEdit m_editPassWord 取消Border,选上【Static edge”和【PassWord” 3.程序相关代码 系统登录程序要在显示主窗体之前显示,系统登录程序代码如下: BOOL CMedApp::InitInstance() { ...... LRunSql::InitConnectPtr(); //初始化COM环境,进行数据库连接 CDlgLogin dlg; //创建登录窗口对象 if(dlg.DoModal()==IDOK) //显示登录窗口 { CA1Dlg *pdlg=new CA1Dlg; //创建主窗体对象 m_pMainWnd = pdlg; pdlg->DoModal(); //显示主窗体 delete pdlg; pdlg=NULL; } LRunSql::Close(); //断开数据库连接 return FALSE; } 当用户单击“确定”按钮时,进行密码判断和次数判断。处理“确定“按钮的消息响应函数如下: void CDlgLogOn::OnOK() { BOOL bLogOn=FALSE; CString sUserPassWord, sPurview,sUserName,sInputPassWord; LRunSql m_runsql; CString sql; _variant_t value; CString sError; //更新数据变量 this->m_editPassWord.GetWindowText(sInputPassWord); this->m_editUserName.GetWindowText(sUserName); CA1App* App=(CA1App *)AfxGetApp(); sql.Format( "select admi_password,admi_purview from tabpurview where admi_name='%s'", sUserName); if(m_runsql.CheckSQLResult(sql)) { value=m_runsql.m_recordset->GetCollect("admi_password"); if(value.vt!=VT_NULL) sUserPassWord=(char*)(_bstr_t)value; value=m_runsql.m_recordset->GetCollect("admi_purview"); if(value.vt!=VT_NULL) sPurview=(char*)(_bstr_t)value; if(sUserPassWord==CCrypt::Encrypt(sInputPassWord,123)) { App->m_sUserName=sUserName; App->m_sPurview=sPurview; bLogOn=TRUE; } else { sError="请重新输入密码。\n注意大小写!","密码错误"; this->m_editPassWord.SetFocus(); } } else { sError="请确认用户名大小写是否正确!","无此用户"; this->m_editUserName.SetFocus(); } if(bLogOn) EndDialog(IDOK); else { m_iLogOnCount++; if(m_iLogOnCount>=3) this->EndDialog(0); else MessageBox(sError); } } 进行焦点控制。定义控制焦点的函数,该函数定义了当用户单击〈Enter〉键时,焦点改变的顺序,当需要改变焦点时,调用此函数。 bool CDlgLogOn::SetTheFocus() { HWND hwnd=::GetFocus(); UINT id=::GetDlgCtrlID(hwnd); switch(id) { case IDC_EDIT_NAME: this->m_editPassWord.SetFocus(); ::PostMessage(m_editPassWord.GetSafeHwnd(),WM- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进销存 管理 系统 毕业设计 范例
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文