运用Visual Studio 设计单机数据库应用系统_第1页
运用Visual Studio 设计单机数据库应用系统_第2页
运用Visual Studio 设计单机数据库应用系统_第3页
运用Visual Studio 设计单机数据库应用系统_第4页
运用Visual Studio 设计单机数据库应用系统_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、运用Visual Studio 2008设计单机版数据库应用系统一、设计数据库1、对项目进行需求分析功能需求和数据库需求2、数据流图3、E-R图4、关系模式5、创建数据库6、创建表创建用户表Create Table User(UserID counter(1,1), UserName Varchar(20), Password Varchar(20)7、插入数据向表中插入一条记录Insert into User(UserName, Password) Values(Admin, 123456)二、搭建程序框架 通过创建一个有主窗口的应用程序,在主窗口中使用菜单。1、创建一个Win32空项目。2

2、、将项目属性设置为可以使用MFC。3、在项目中添加头文件StdAfx.h,内容为:#pragma once#include #include resource.h4、为项目添加资源脚本文件在“解决方案资源管理器”窗口中鼠标右键点击“资源文件”,在快捷菜单中选择“添加”-“新建项”,在打开的“添加新项”对话框中选择“资源文件(.rc)”,在文件名称文本中输入资源文件名,然后点击“添加”按钮,生成资源脚本文件和资源ID的头文件“resource.h”。5、新建应用程序类CDataApp选择“项目”菜单-“添加类”,在“添加类”对话框中选择“MFC类”,点击“添加”按钮,进入“MFC类向导”,在类名

3、文本框中输入CDataApp,基类选择CwinApp,向导建议生成“DataApp.h”的头文件和“DataApp.cpp”的程序文件,点击“完成”按钮完成类CDataApp类的创建。在“DataApp.h”头文件文件中将构造函数和析构函数的protected访问属性改变为public。并在类定义的外部使用该类定义一个变量:CDataApp mApp;6、新建一个框架窗口类CMainFrame,基类为CFrameWnd。向导生成MainFrame.h和MainFrame.cpp两个文件。将MainFrame.h文件中的构造函数和析构函数的protected访问属性改变为public。7、Dat

4、aApp.cpp的前部添加对MainFrame.h文件的包含语句:#include MainFrame.h在DataApp.cpp文件中对BOOL CDataApp:InitInstance()函数添加创建框架窗口的代码:CMainFrame *pMainFrame;pMainFrame = new CMainFrame();pMainFrame-Create(0,L数据库应用系统设计);this-m_pMainWnd = pMainFrame;pMainFrame-ShowWindow(this-m_nCmdShow);8、添加菜单资源。默认的菜单资源ID为IDR_MENU1。9、在CMai

5、nFrame中添加WM_CREATE消息处理函数:int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct)在函数中添加应用菜单代码:CMenu *m_Menu;m_Menu = new CMenu();m_Menu-LoadMenuW(IDR_MENU1);this-SetMenu( m_Menu );10、为菜单添加事件处理程序。在菜单设计界面中选择某一菜单项,鼠标右键单击该项,从弹出的快捷菜单中选择“添加事件处理程序”,在弹出的“事件处理程序向导”中的“类列表”中选择“CMainFrame”类,左边的“消息类型”选择“COMMAND”(默

6、认是该选择),向导会推荐一个处理函数名,如需要修改则可以修改函数名,不需要修改则直接点击“添加编辑”,则向导自动打开MainFrame.cpp文件中的相应事件处理函数。给“退出”菜单添加事件处理程序,并加入以下代码:AfxGetApp()-PostThreadMessageW(WM_QUIT,0,0);三、使用ADO打开数据库1、在stdAfx.h文件中插入:#import C:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF)即引用ADO动态链接库,使得在程序中可以使用ADO Active

7、X对象。在DataApp.cpp文件的前部定义连接指针(全局变量)。_ConnectionPtr m_pConnection;2、在主应用程序(DataApp.cpp文件)的InitInstance()函数中添加::CoInitialize(NULL);tryHRESULT hr;hr=m_pConnection.CreateInstance(_T(ADODB.Connection); if(SUCCEEDED(hr)/* hr=m_pConnection-Open(_T(Driver=SQL Server;Server=COMPUTER_FXPSQLEXPRESS; Database=Pro

8、jectChoice;UID=sa; PWD=123456), _T(),_T(),adModeUnknown);/连接SQL Server数据库*/hr=m_pConnection-Open(_T(Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb), _T(),_T(),adModeUnknown);/连接Access数据库,数据库文件在项目文件夹中catch(_com_error t)AfxMessageBox(t.Description();return false;首先初始化COM库,然后创建一个ADO连接对象,如果

9、对象实例创建成功再打开数据库。3、在主应用程序类的ExitInstance()函数中添加:if(m_pConnection) m_pConnection-Close(); m_pConnection=NULL; :CoUninitialize(); 结束应用程序时要关闭连接。4、创建数据库创建表:create table User(userid counter (1, 1) , UserName char(12), Password char(20)四、添加对话框操作数据1、添加登录对话框 在资源视图中鼠标右击资源,选择“添加资源”,打开添加资源向导对话框: 选择“新建”按钮,系统打开一个默认

10、对话框供设计。将“取消”按钮的caption属性设为“退出”。将system menu属性设为false。将caption属性设为用户登录。将其ID属性改为IDD_LOGIN。 在对话框中添加两个静态文本控件,caption属性设为用户名:和密 码:,添加两个文本编辑控件,其ID值分别设为IDC_NAME和IDC_PASSWORD。将密码文本框控件的Password属性设为true。设计界面如下图。 选择菜单“项目”-“添加类”,为该对话框添加类,类名设为CLogin。 为两个文本编辑控件。在对话框设计界面,鼠标右击文本编辑控件,在快捷菜单中选择“添加变量”,分别为IDC_NAME和IDC_P

11、ASSWORD两个控件添加值类型的CString类型m_Name和m_Password。 为“确定”按钮添加“事件处理程序”。在Login.h文件中添加:BOOL checked;_RecordsetPtr m_pRecordset;其中checked表示是否登录成功,pRecordset用来获取记录集内容。在Login.cpp文件开始部分添加:extern _ConnectionPtr m_pConnection;为“确定”按钮添加处理程序代码:void CLogin:OnBnClickedOk()UpdateData();if(m_Name.IsEmpty() | m_Password.I

12、sEmpty()MessageBox(_T(请输入完整信息登录系统!);return;_bstr_t sql = _T(select * from User where UserName=)+m_Name+_T( and Password=)+m_Password+_T();m_pRecordset.CreateInstance(ADODB.Recordset);m_pRecordset-Open(sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(m_pRecordset-adoEO

13、F)AfxMessageBox(_T(用户名和密码错误);m_Name=;m_Password=;UpdateData(false);else checked = true; CDialog:OnOK(); 为“退出”按钮添加事件处理程序:void CLogin:OnBnClickedCancel()checked = false;if(MessageBox(_T(确认是否退出程序),_T(系统提示),MB_YESNO|MB_ICONQUESTION)!=IDYES)return;CDialog:OnCancel(); 在主程序中应用登录对话框。 首先在DataApp.cpp的首部添加#inc

14、lude Login.h,然后在InitInstance()函数的打开主框架窗口代码前添加:CLogin m_LoginDlg;m_LoginDlg.DoModal();if(FALSE=m_LoginDlg.checked)return FALSE;2、录入数据对话框 在主框架窗口中通过菜单打开添加用户对话框。 为程序添加一个对话框,为其输入用户名和密码,其中密码输入两次。三个编辑控件的ID值分别为IDC_ADDUSER,IDC_PASS1,IDC_PASS2。并为该对话框添加类。分别为三个编辑控件添加对应变量为m_Name, m_pass1, m_pass2,均为CString类型的值变量

15、。设计界面如下: 首先为该类添加数据成员:_RecordsetPtr m_pRecordset;然后在AddUser.cpp文件的首部添加对外部变量的引用:extern _ConnectionPtr m_pConnection; 为“增加”按钮添加事件处理程序。void CAddUser:OnBnClickedOk()UpdateData();/检查输入信息是否完整if(m_Name.IsEmpty() | m_Pass1.IsEmpty() | m_Pass2.IsEmpty()MessageBox(_T(请输入完整信息登录系统!);return;/检查两次输入的密码是否一致if( m_Pa

16、ss1 != m_Pass2)MessageBox(_T(两次输入的密码不一致);return;/检查输入用户名是否已经使用_bstr_t sql = _T(select * from User where UserName=)+m_Name+_T();m_pRecordset.CreateInstance(ADODB.Recordset);m_pRecordset-Open(sql,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);if(!m_pRecordset-adoEOF)AfxMessa

17、geBox(_T(用户名已经存在);return;m_pRecordset-Close();sql = _T(insert into User(UserName,Password) values()+m_Name+_T(,)+m_Pass1+_T();m_pConnection-Execute(sql,NULL,adCmdText);AfxMessageBox(_T(用户添加成功);OnOK(); 为在主菜单中设置一个“增加用户”的项目。并为它添加对应的处理。 在MainFrame.cpp文件中的首部添加对AddUser.h头文件的包含。#include AddUser.h在“增加用户”菜单响

18、应部分加上代码:void CMainFrame:OnAdduser()CAddUser m_AddUser;m_AddUser.DoModal();3、查询数据 查询数据可以用List Control控件显示数据表信息。 新建一个对话框资源。caption属性设置为“用户信息查询”,ID设置为IDD_QUERY。删除“取消”按钮。将“确定”按钮的caption属性改为“返回”。向对话框添加List Control控件,设置控件ID为IDC_USERLIST,设置其View属性为Report。为该控件添加控件类别CListCtrl类型的变量m_List。界面效果如下: 为对话框添加相应类CQue

19、ryUser。系统自动生成QueryUser.h和QueryUser.cpp文件。 为该对话框类添加初始化对话框消息处理函数。添加过程为:首先选中对话框或者在类视图中选择对话框类,然后再属性页中鼠标点击“消息”,选择WM_INITDIALOG消息,为其添加消息处理函数。添加代码:m_List.SetExtendedStyle(m_List.GetExtendedStyle() |LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);m_List.InsertColumn(0,_T(编号),LVCFMT_CENTER,60);m_List.InsertColumn(1

20、,_T(用户名),LVCFMT_LEFT,100);m_List.InsertColumn(2,_T(密码),LVCFMT_LEFT,100);这些代码为m_List控件设置样式和添加三个列标题。 在QueryUser.cpp文件文件的首部添加:extern _ConnectionPtr m_pConnection;这样对话框就可以引用主程序模块DataApp.cpp中的全局变量,该变量为数据库连接对象,所有的数据库操作都需要用到。 为对话框类添加一个记录集成员:_RecordsetPtr m_pRecordset;该数据成员用于获取数据库中的数据。并在第步的初始化对话框事件代码中添加:m_p

21、Recordset.CreateInstance(_uuidof(Recordset);创建记录集对象。 为对话框类添加一个函数FreshList,用来将数据库中的用户表的信息显示到m_List控件中。打开添加函数对话框,设置函数的类型为void,无参数,函数名为FreshList。在函数中添加代码。void CQueryUser:FreshList(void)trym_pRecordset-Open(_T(select * from user),(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);int nI

22、tem;m_List.DeleteAllItems();while(!m_pRecordset-adoEOF)nItem = m_List.GetItemCount();CString str;str = (LPCTSTR)_bstr_t(m_pRecordset-GetCollect(UserID);m_List.InsertItem(nItem,str);str = (LPCTSTR)_bstr_t(m_pRecordset-GetCollect(UserName);m_List.SetItemText(nItem,1,str);str = (LPCTSTR)_bstr_t(m_pReco

23、rdset-GetCollect(Password);m_List.SetItemText(nItem,2,str);m_pRecordset-MoveNext();m_pRecordset-Close();catch(_com_error e)AfxMessageBox(_T(刷新失败); 在初始化对话框处理函数的尾部添加对FreshList函数的调用。这样,在打开查询对话框是就能看到用户信息。4、删除数据 删除数据只需要执行一条SQL语句,不需要单独建立对话框。在查询对话框中添加一个删除按钮,当点击该按钮时可以删除在列表控件中选中的数据。 对列表控件添加LVN_ITEMCHANGED事件处

24、理程序,每当用户通过鼠标改变列表控件中的选择时都会引发此事件,在该事件处理程序中获取用户选中的用户信息的user_ID值(在QueryUser.h文件中为CQueryUser类定义一个字符串成员,用来存放选择的用户ID)。CString m_UserID; 添加程序代码:POSITION pos = m_List.GetFirstSelectedItemPosition();if (pos = NULL)TRACE0(No items were selected!n);elseint nItem = m_List.GetNextSelectedItem(pos);TCHAR s50;m_Lis

25、t.GetItemText(nItem,0,s,50);m_UserID = s; 在查询对话框中添加命令按钮,并添加事件处理程序:void CQueryUser:OnBnClickedButtonDel()if(m_UserID=)MessageBox(L请选择一个要删除的命题!);return;if(MessageBox(L确实要删除该命题吗?,L请确认,MB_YESNO)=IDYES)CString sql = Ldelete from User where UserID=+m_UserID;m_pConnection-Execute(_bstr_t(sql),NULL,adCmdTex

26、t);FreshList();m_UserID = ;return;5、修改数据对话框 修改数据是对已有的数据进行改变,首先从数据库获取原有数据,将数据显示到对话框的相应控件中,然后将用户对控件中的数据进行修改,再将数据替换原来数据库中的数据。 设计用户信息修改对话框。为对话框添加对话框类CModify。为三个编辑框控件分别添加值类型CString变量m_Name, m_Pass1, m_Pass2。为CModify添加CString类型变量m_ID。 在查询对话框中添加“修改选中项”按钮,在QueryUser.cpp中添加对Modify.h的包含,对“修改选中项”按钮添加事件处理程序。添加以下代码:if(m_UserID=)MessageBox(L请选择一个要修改的命题!);return;CModify m_Modify;m_Modify.m_ID = m_UserID;POSITION pos = m_List.GetFirstSelectedItemPosition();int nItem = m_List.GetNextSelectedItem

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论