VC++开发实例 张荣梅 2007年2月.

Slides:



Advertisements
Similar presentations
模块五 动态网页技术 任务五 查询记录 任务一 表单设计制作 任务二 简单动态的 ASP 页面制作任务三 页面与数据库的集成任务四 添加记录 任务六 电商系统融入网站.
Advertisements

第五章 通用网关接口 CGI 简介 Htm l Html + CGI Html + asp 网页可以处理动态的信息.
第十章 Java 数据库编程. 内容提要 数据库有关概念; 介绍 JDBC 的结构; 重点介绍 JDBC 访问几种数据库的基本过程;
我有一份考工的理论题库,是 Excel 文件。我在想如果转换到 Word 文件中再排版,再印刷,一是浪费时间,既要做成 Word 卷, 测试完还要手工批卷;二是浪费纸张( 4 — 5 个班级近 200 多人使 用),我在想能不能做成上机试卷,在计算机上测试,多方便, 谁能帮我这个忙吗? 我有一份考工的理论题库,是.
Web数据库技术 Web技术与数据库技术相结合 冯天宇.
第13章 数据库的基本应用 Visual Basic 程序设计教程.
十一 ASP对数据库的访问.
第7章利用ADO.NET 进行数据访问.
第8章 数据库编程 Visual C++ 6.0为用户提供了ODBC、DAO及OLE DB三种数据库方式。这三种
切实增强实验室安全意识 提高实验室安全管理水平
C#程序设计案例教程 第3章 程 序 结 构.
第8章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL查询基础
过程性保存文本格式的实现 计算概论小课题 王元康.
MVC Servlet与MVC设计模式.
第7章 数据库基础知识 SQL常用命令使用方法 (1) 数据记录筛选: sql="select * from 数据表
文科计算机小公共课规划教材 Access 程序设计.
计算机高级程序设计 第五章.
维护表 上机.
MIS课程设计.
第15章 Java数据库连接(JDBC) 15.1 创建数据源 15.2 JDBC-ODBC桥接器 15.3 顺序查询
《计算机网络技术》 asp.net 程序设计 文本类控件 笪静.
第 11 章 資料庫應用與 ADO物件 製作.
資料庫程式設計 VB資料庫設計簡介 週次:4 建國科技大學 資管系 饒瑞佶.
Visual C# 2010 程式設計經典 第15章 ADO .NET與資料工具.
第5章 图形和文本输出.
彰化縣政府補助辦理網頁設計資料庫應用班 ASP與資料庫介紹 建國技術學院資管系 饒瑞佶.
崑山科技大學資訊管理系 伺服網頁程式設計 系統開發細部流程 教師:游峰碩.
電子商務網站建制技術與實習(II) 助教:江宜政 吳昇洋.
2018/11/23 面向对象与多线程综合实验-数据库操作 教师:段鹏飞.
Visual C++ Windows Programming
課程名稱:資料庫系統 授課老師:李春雄 博士
班級:博、碩子一甲 授課老師:鐘國家 助教:陳國政
VB如何存取資料庫 ? 資料庫 資料儲存 資料庫引擎 資料庫引擎 Jet 讀取、寫入與修改 資料控制項 資料庫存取物件(ADO) 使用者介面.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
5 数据库管理与保护 数据库运行的最小逻辑工作单位是事务,所有对数据库的操作,都以事务作为一个整体来执行或撤销。
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
高等視窗程式設計 GUI的使用(Dialog Base) 游子宜.
讲课人:王璞 浙江工商职业技术学院.
5.1.1 使用 ExecuteReader()操作数据库
课程设计 归纳总结 4 知识目标 1 讲授新课 2 任务操作 3 布置作业 5.
第 13 章 深入Recordset物件 製作.
ASP.net 企业级应用开发 信息工程系:罗明刚.
使用ADO.NET访问数据 数据库连接 C#程序设计课程组.
第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
第9章数据库应用 9.1数据库和ODBC操作 9.2MFC ODBC应用编程 9.3ADO数据库编程 9.4数据库相关的ActiveX控件
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
Visual C++ Windows Programming
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
資料庫程式設計 VB資料庫設計簡介 週次:3 建國科技大學 資管系 饒瑞佶.
P2P聊天工具.
Animation(動畫) 靜宜大學資工系 蔡奇偉 副教授
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
Ch11 資料庫範例_與Swing結合 物件導向系統實務.
《面向对象程序设计与Visual C++6.0教程》
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
VB与数据库 数据库连接与查询.
功能表的建立 製作.
第二章 Java语法基础.
第10章媒体控制接口 10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
硬幣遊戲解題詳解 王豐緒 銘傳大學資訊工程學系.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
判斷(選擇性敘述) if if else else if 條件運算子.
本课内容 接下来的几节课,我们要利用C语言开发一些游戏 本节课开发一个俄罗斯方块游戏 游戏规则.
第二章 Java基本语法 讲师:复凡.
数据库应用技术 天津电大 翟迎建.
Presentation transcript:

VC++开发实例 张荣梅 2007年2月

软件开发 软件开发概述 软件产品产生过程 软件产品团队的组成 预备知识——VC++编程概述 开发实例 课程设计及其答辩

软件开发概述 软件项目的开发方法(软件工程中的软件开发模型) 软件产品的开发方法 传统软件开发与现代软件开发 现代软件开发对人才的要求 软件分为两类:软件产品和软件项目. 软件产品指的是不局限于特定领域的\可被广大用户直接使用的软件系统,如微软的Windows,Office等等.这类系统的特点是技术含量高,开发时要考虑到各种不同的用户需求. 软件项目指的是针对特定领域提供优化业务流程的软件系统,如我们常说的管理信息系统和电子商务系统.这类软件的特点是领域知识所占的比重较大,相对技术性而言,工程性更强. 软件项目的开发方法(软件工程中的软件开发模型) 软件产品的开发方法 传统软件开发与现代软件开发 现代软件开发对人才的要求 软件开发人员具备的能力

软件开发的周期 根据软件工程的思想,软件开发的周期可以划分为六个阶段: (1) 规划阶段 确定开发的总目标,给出计划开发的软件系统的功能、性能、可靠性以及接口等方面的设想。 (2) 需求分析阶段 认真细致地了解用户对数据的加工要求,确定系统的功能与边界。本阶段的最终结果,提供一个可作为设计基础的系统说明书,包括对软硬件环境的要求和一整套完善的数据流程图。 (3) 设计阶段 把需求分析阶段所确定的功能细化,主要工作是概念设计阶段、逻辑设计阶段、物理设计阶段,然后,对每个阶段内部设计详细的流程。 (4) 程序编制阶段 以一种或几种特定的程序设计语言表达上一阶段确定的各模块控制流程。程序编制时应遵循结构化程序设计方法。 (5) 调试阶段 对已编好的程序进行单元调试(分调),整体调试(联调)和系统测试(验收)。 (6) 运行和维护阶段 这是整个设计周期最长的阶段,其工作重点是收集和记录系统实际运行的数据。在运行中,必须保持数据库的完整性,必须有效的处理数据故障和进行数据库恢复。同时解决开发过程的遗留问题,改正错误进行功能完善。

软件产品的产生过程 新产品项目的提议 市场分析预测 技术可行性分析 制定产品研发实施步骤(功能规范/总体计划/总体进度表) 高层论证和审批 项目确立和执行 产品开发(概念设计/逻辑设计/物理设计/开发计划/编码/测试/文档整理)

传统软件开发与现代软件开发 软件开发包括计划、设计、实施、测试以及市场运作。 传统软件开发即作坊式的软件生产。开发工作主要依赖于开发人员的个人素质与程序设计技巧。特点是,缺少与程序有关的文档,软件开发的实际成本和进度与预计的相差太远。没有团队,项目管理松散,程序的可重用的成都差。可维护性差。生产率低,跟不上应用需求的增长速度。 现代软件开发强调采用分工与协作,重视项目管理和软件质量,采用工程化的方法进行文档的控制与代码的管理。

现代软件开发对人才的要求 扎实的基础 创新、独立的工作能力 主人翁精神(Ownership)和团队精神(Teamwork) 沟通与协调能力 成就感强,有激情 自觉地干好工作 锲而不舍,从错误中学习

产品的团队 互相沟通 沟通 软件开发 项目管理 软件测试 产品管理 后勤管理 用户培训 开发经理 项目经理 测试经理 产品经理 后勤经理 用户培训经理 沟通 产品团队的组成 高级的产品管理团队的组成

团队角色与主要目标 团队角色 主 要 目 标 产品管理 确定产品的远景,获取并确定用户的需求,开发并维护商业安全,满足用户的需求 项目管理 主 要 目 标 产品管理 确定产品的远景,获取并确定用户的需求,开发并维护商业安全,满足用户的需求 项目管理 制定开发功能规范,在团队内进行沟通和协商,维持产品进度并报告产品状态,保证能够尽快尽好地在产品约束条件下发布产品 软件开发 开发出满足设计和规范和用户要求的产品 软件测试 开发测试策略和计划,保证在解决了所有已知物体后再发布产品 用户培训 保证使用文档要全部很清楚地写出来,提高用户使用产品的技能,保证大多数用户都能够充分利用产品的功能 后勤管理 保证产品能够平稳地发展

产品管理团队的主要组成 产品的管理部门,管理部门的负责人即为产品总经理,同时包括产品计划、市场分析与研究、产品推销、市场、公共关系的负责人。 产品团队承担的角色(1)了解用户的想法;(2)确定项目的发展前景 产品总经理 产品计划 市场分析与研究 市场 产品推销 公共关系

项目管理团队 任务是控制决策的各种因素,以保证在合适的时间推出合适的产品,同时负责创建功能规定文档,并将它作为如何实施产品或服务的一种决策工具,以及日常协调工作。 操纵产品的开发过程 管理产品的细节 促进团队内部交流和商议 保证产品的开发进度 控制全局,并做出一些折中决定 项目团队管理 项目协调 产品按时发布 产品结构设计 项目管理团队所承担的角色

软件开发团队 任务负责代码的设计和程序的实现。角色是具体说明物理设计功能 估计完成每一个功能所需要的时间和人力 建立数据库 编码实现功能 配置并准备产品 开发管理 用户界面 数据库 系统服务 软件开发团队所承担的角色

软件测试团队 站在使用者和攻击者的角度,通过不断地使用刚开发出的软件产品,尽量多地找出产品中存在的问题。 角色是尽量找出所有的Bug 写出测试规范和测试计划 测试管理 强力测试 一致性测试 集成测试 配置测试 软件测试团队所承担的角色

参考书 软件开发的科学与艺术 陈宏刚等 电子工业出版社 (微软公司)

预备知识 对话框及其控件 ADO技术 ODBC技术 软件工程开发系统的步骤

教职工信息管理系统 ADO数据库应用系统 概述-----系统开发的背景与意义 功能需求分析 系统概要设计 数据库设计 系统详细设计与实现 系统测试 结论

概述 随着计算机及网络技术的飞速发展,Internet应用在全球范围内日益普及,当今社会正快速向信息化社会前进,信息系统的作用也越来越大。 学校教职工管理是学校管理中需要经常处理的一项工作,手工记录与查询相关信息既浪费时间又浪费人力和物力。采用计算机对教职工管理工作进行管理,可提高教职工管理的统一管理,实现高校教职工管理工作的系统化、规范化和自动化。因此,制作一个教职工管理管理系统有十分重要的意义。 本系统采用ADO技术,用VC++设计开发一个MIS系统

功能需求分析 本系统是为了解决学校管理中有关教职工信息和工资的管理,在教职工信息管理系统开发时应该满足以下几个方面的需求: 1. 教职工的基本信息管理,对教职工的信息进行录入,删除、修改以及对教职工信息的查询,应能根据不同的查询条件对教职工的信息进行查询操作。 2. 教职工的工资信息管理,对教职工工资信息进行录入,删除,修改以及对教职工工资信息的查询,应能根据不同的查询条件对教职工工资信息进行查询操 3. 用户权限管理。用户权限的设置,有授权的用户才可以查询、对有关信息进行录入,删除和修改。

系统概要设计 教职工信息管理系统 教职工基本信息管理 教职工工资管理 用户权限管理 教职工信息管理系统功能图 1. 教职工基本信息管理:包括添加、删除和查询。查询信息:用户可以选择不同的查询条件来对数据库进行操作,如可以按所在部门来查询每个学院有多少名教职工工,按职称来查询有多少教授,助教等,按编号可唯一查询一名教职工的基本信息。 2. 教职工工资信息管理:包括添加、删除和查询。查询信息:用户可以选择不同的查询条件来对数据库进行操作,如可以按姓名、编号、基本工资查询一名教职工工资信息。 3. 为用户设置功能权限,只有admin授权的用户才可以对有关信息进行入录,删除和查询操作,普通用户是没有权限来为本系统受权的。

数据库设计 workermanage.mdb 职工信息: 用于记录教职工的基本情况 职工工资信息: 用于记录教职工工资的基本情况 系统用户信息: 用于该系统管理员admin为用户授权的信息

职工信息表workerinfo 字段名称 字段类型 字段大小 索引 必须填写 职工姓名 文本 10 无 是 职工编号 16 职工性别 2 所在部门 20 职工年龄 文本 (整型) 工作时间 文本 时间 12 职务 职称 简历 200

职工工资信息表 字段名称 字段类型 字段大小 索引 必须填写 职工编号 文本 16 无 是 职工姓名 10 基本工资 浮点 其他工资 月收入

系统用户信息表 用Access创建数据库 .mdb,以及3张表 字段名称 字段类型 字段大小 索引 必须填写 用户名 文本 16 无 是 密码 18 用Access创建数据库 .mdb,以及3张表

系统详细设计与实现 界面设计 登录界面 代码实现 主界面 职工基本信息录入界面 职工基本信息查询界面 职工工资录入界面 职工工资查询界面 用户管理界面 代码实现

登录界面与主界面

职工基本信息操作界面

工资操作界面

用户管理界面

ADO环境的设置与数据库的连接 ADO环境的设置 在StdAfx.h文件中,加入如下语句: #import “msado15.dll” no_namespace rename(“EOF”,“adoEOF”) 注意:将msado.dll复制到当前文件夹下 数据库的连接 在项目的App程序类中,加入成员变量 public: _ConnectionPtr m_pConnection;

数据库的连接 在项目的程序类的初始化例程函数中 ,添加连接数据库的代码: BOOL CMyApp::InitInstance() { 。。。。。。 ::CoInitialize(NULL); try {m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象 m_pConnection->Open ("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=workermanage.mdb","","",adModeUnknown); ///连接数据库 } catch(_com_error e) {AfxMessageBox("数据库连接失败,确认数据库workermanage.mdb是否在当前路径下!"); return FALSE; }

登陆界面的详细设计 IDD_LOGIN CLOGIN 工作流程: 用户输入用户名和密码,单击“确定”按钮, 在密码数据库中查找是否有这样的用户,如有则打开主界面,否则,重新输入用户名和密码。 控件类型 ID 属性 变量或函数 Picture IDC_STATIC Icon IDI_ICON1 Edit Box IDC_EDIT_ PASSWORD 选中Password CString m_password USERNAME CString m_username Button IDC_QUEDING 确定 OnQueding() IDCANCEL 取消

登录界面的代码实现 void CLOGIN:: OnQueding() {UpdateData(true); if(m_password==""||m_username=="") MessageBox("用户名和密码不能为空,请输入完整!"); else { CString sql="select * from usermanage where name='"+m_username+“ ' and password='"+m_password+"'"; _RecordsetPtr m_pRecordset; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql, _variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true), adOpenStatic,adLockOptimistic,adCmdText); } CString m_password CString m_username

试一试,修改程序,使用户登录时,有三次输入密码的机会 catch (_com_error e) { CATCH_ERROR; return; } if(!m_pRecordset->adoEOF) { CMyDlg dlg; //主界面 dlg.DoModal (); else MessageBox("用户名或密码不对,请重新登录!"); m_password=""; m_username=""; m_name.SetFocus (); UpdateData(false); CDialog::OnOK(); 试一试,修改程序,使用户登录时,有三次输入密码的机会

有三次输入密码的机会 void CLOGIN:: OnQueding() { UpdateData(true); CString sql="select * from usermanage where name='"+m_username+"' and password='"+m_password+"'"; _RecordsetPtr m_pRecordset; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); } catch (_com_error e) CATCH_ERROR; return; }

if(!m_pRecordset->adoEOF) //如果存在这样的用户 { EndDialog(IDOK); //结束登录对话框 CMyDlg dlg; //模式打开主对话框 dlg.DoModal (); } else { m_iLogOnCount++; //登录次数加1,成员变量 if(m_iLogOnCount>=3) //如果超过3次,则结束对话框,程序结束 { MessageBox("对不起!你不是该系统的用户,请与管理员联系!"); this->EndDialog(0); MessageBox("用户名或密码不对,请重新登录!"); m_password=""; m_username=""; m_name.SetFocus (); UpdateData(false); return;} CDialog::OnOK();

登陆界面的启动 Pulic: _C_ConnectionPtr m_pConnection; MFC创建的应用程序框架 BOOL CMyApp::InitInstance() { 。。。。。。 HRESULT hr; try {hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象 if(SUCCEEDED(hr)) hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =workermanage.mdb","","",adModeUnknown);///连接数据库 } } catch(_com_error e) AfxMessageBox("数据库连接失败,确认数据库workermanage.mdb是否在当前路径下!"); return FALSE; CLOGIN dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) {。。。。。。} else if (nResponse == IDCANCEL) Pulic: _C_ConnectionPtr m_pConnection; MFC创建的应用程序框架 默认的是主界面CMuDlg,为了在程序启动后首先出现登陆界面,需要修改原来的代码为 CLOGIN

主界面的详细设计 IDD_MY_DIALOG 控件类型 ID 属性 函数 Button IDC_BUTTON_INFOMATION 职工信息入录 OnButtonInfomation() IDC_BUTTON_IN_S 职工信息查询 OnButtonInS() IDC_BUTTON_WAGE 职工工资入录 OnButtonWage() IDC_BUTTON_WA_S 职工工资查询 OnButtonWaS() IDC_BUTTON_UESR 用户管理 OnButtonUesr() 工作流程:在主界面中,选择某一按钮,弹出相应的操作界面。

主界面的代码实现 void CMyDlg::OnPaint() //显示背景图片 { CPaintDC dc(this); 背景图片为一事先用PHOTSHOP制作好的位图。首先将该图片插入到项目中,然后在对话框的OnPaint()中,用代码将其显示。也可在对话框中插入图片框来显示。 void CMyDlg::OnPaint() //显示背景图片 { CPaintDC dc(this); CRect rect; GetClientRect(rect); CBitmap * bitmap=new CBitmap; bitmap->LoadBitmap (IDB_BITMAP1); CDC * m_dc=new CDC; m_dc->CreateCompatibleDC (&dc); m_dc->SelectObject (bitmap); dc.BitBlt(0,0,rect.right,rect.bottom,m_dc,0,0,SRCCOPY); delete m_dc; delete bitmap; }

void CMyDlg::OnButtonInfomation() //基本信息操作 { CINFOMATION dlg; dlg.DoModal (); } void CMyDlg::OnButtonWage() CWAGE dlg; void CMyDlg::OnButtonInS() //查询 CinfoSearch dlg; void CMyDlg::OnButtonWaS() CwageSearch dlg;

void CMyDlg::OnButtonUesr() //用户管理 { CLOGIN *passwordDlg=(CLOGIN*)(AfxGetApp()->m_pMainWnd); if(passwordDlg->m_username =="admin") CUSER dlg; dlg.DoModal (); } else MessageBox("你没有权限进行该操作,请以管理员身份登陆此系统","警告", MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2);

职工基本信息界面设计 IDD_INFORMATION 控件类型 ID 属性 变量或函数 EDIT Box IDC_EDIT_ID CString m_id IDC_EDIT_NAME CString m_name IDC_EDIT_AGE CString (int) m_age IDC_EDIT_DEPARTMENT CString m_dep IDC_EDIT_TITLE CString m_title IDC_EDIT_WORKDATE CString m_workdate IDC_EDIT_HISTORY CString m_history Combo Box IDC_COMBO_PROF DATA 助教 讲师 CComboBox m_grade IDC_COMBO_SEX DATA 男 女 CComboBox m_sex Button IDC_BUTTON_ADD 增加 OnButtonAdd() IDC_BUTTON_BROWE 信息浏览 OnButtonBrowse() IDOK 取消 单击“增加”按钮,会将输入的信息添加到相应的数据库表中;单击“浏览”按钮,弹出浏览窗口。

基本信息界面的代码实现 void CINFOMATION::OnButtonAdd() { CString sex,grade,sql; UpdateData (true); m_sex.GetWindowText (sex); m_grade.GetWindowText (grade); if(m_id==""|| m_dep ==""|| m_workdate ==""|| m_title ==""||m_name==""||m_history==""||m_age=="") MessageBox("参数不能为空,请输入完整!"); sql="select * from workerinfo where id='"+m_id+"'"; _RecordsetPtr m_pRecordset; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql, _variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true), adOpenStatic,adLockOptimistic,adCmdText); } catch (_com_error e) { CATCH_ERROR; return; 基本信息界面的代码实现

也可采用命令指针实现 if(!m_pRecordset->adoEOF) { MessageBox("所添加的记录已经存在!"); } else { _RecordsetPtr m_pRecordset; sql="insert into workerinfo values ('"+m_id+"','"+m_name+"','"+sex+"','"+m_age+"','"+m_title+"','"+m_workdate+"','"+m_dep+"','"+grade+"','"+m_history+"')"; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql, _variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); } catch (_com_error e) { CATCH_ERROR; MessageBox("添加成功"); m_work==""; m_time=="";m_segment=="";m_name=="";m_history=="";m_age==""; UpdateData (false); 如果m_age是整型的,则sql应采用Format()函数来写 Sql.Format(“ %s %s %s %d ”,m_id,m_name,sex,m_age, ) 也可采用命令指针实现

浏览界面的详细设计与实现 IDD_INFORSEARCH 控件类型 ID 属性 变量或函数 ListCONTROL IDC_LIST_INFORS CListCtrl m_listis EDIT Box IDC_EDIT_TYPE CString m_edittype IDC_EDIT_NUMBER int m_number Combo Box IDC_COMBO_TYPE DATA 姓名性别年龄职称 所在部门 CComboBox m_combotype Button IDC_BUTTON_S 查询 OnButtonS() IDC_BUTTON_DEL 删除 OnButtonDel() IDOK 退出

对话框初始化 BOOL CinfoSearch::OnInitDialog() { CDialog::OnInitDialog(); //初始化列表控件 CString strListHead[9]; int width[9]; strListHead[0]="职工编号"; strListHead[1]="姓名"; strListHead[2]="性别"; strListHead[3]="年龄"; strListHead[4]="所在部门"; strListHead[5]="工作时间"; strListHead[6]="职务"; strListHead[7]="职称"; strListHead[8]="简历"; width[0]=80; width[1]=60; width[2]=60; width[3]=100; width[4]=100; width[5]=80; width[6]=80; width[7]=100; width[8]=100; m_listis.SetExtendedStyle (LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); for (int i=0;i<9;i++) m_listis.InsertColumn (i,strListHead[i],LVCFMT_CENTER,width[i]); } m_combotype.SetCurSel (1); //初始化数据信息 InitListData();

void CinfoSearch::InitListData() { _RecordsetPtr m_pRecordset; CString sql="select * from workerinfo"; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); } catch (_com_error e) { CATCH_ERROR;

m_listis.DeleteAllItems (); CString strText; _variant_t var; int nItem=0; try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); while (!m_pRecordset->adoEOF) var=m_pRecordset->GetCollect("id"); if(var.vt !=VT_NULL) strText=(LPCSTR)_bstr_t(var); m_listis.InsertItem (nItem,strText); 。。。。。。。

nItem++; m_pRecordset->MoveNext(); } catch (_com_error e) { CATCH_ERROR; return;

查询 void CinfoSearch::OnButtonS() { CString combotype,edittype,sql; int Item; m_combotype.GetWindowText(combotype); if (combotype=="姓名") m_edittype.GetWindowText (edittype); sql="select * from workerinfo where name='"+edittype+"'"; } if(combotype=="年龄") m_edittype.GetWindowText(edittype); sql="select * from workerinfo where age='"+edittype+"'"; if(combotype=="性别") sql="select * from workerinfo where sex='"+edittype+"'"; if(combotype=="所在部门") sql="select * from workerinfo where segment='"+edittype+"'"; if(combotype=="职称") sql="select * from workerinfo where grade='"+edittype+"'";

if(edittype=="") { MessageBox("请输入要查询的参数!"); } else m_listis.DeleteAllItems (); _RecordsetPtr m_pRecordset; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); catch (_com_error e) CATCH_ERROR; CString strText; _variant_t var; int nItem=0;

try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); while (!m_pRecordset->adoEOF) var=m_pRecordset->GetCollect("id"); if(var.vt !=VT_NULL) strText=(LPCSTR)_bstr_t(var); m_listis.InsertItem (nItem,strText); var=m_pRecordset->GetCollect("name"); m_listis.SetItemText (nItem,1,strText); var=m_pRecordset->GetCollect("sex"); m_listis.SetItemText (nItem,2,strText); 。。。。。。 nItem++; m_pRecordset->MoveNext(); } } }

catch (_com_error e) { CATCH_ERROR; return; } Item=m_listis.GetItemCount (); m_number=Item; UpdateData(false); if(Item==0) MessageBox("所查找的记录不存在!");

删除 if(nItem!=-1) strDelid=m_listis.GetItemText(nItem,0); void CinfoSearch::OnButtonDel() { CString strDelid=_T(""),strSQL=""; int nItem=m_listis.GetNextItem(-1,LVNI_SELECTED); if(nItem!=-1) strDelid=m_listis.GetItemText(nItem,0); m_listis.DeleteItem(nItem); } strSQL="delete from workerinfo where id='"+strDelid+"' "; _RecordsetPtr m_pRecordset; try m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open ((_variant_t)strSQL,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); catch(_com_error e) CATCH_ERROR;

用户权限管理 只有系统管理员有 资格进行用户的添加与删除; 一般用户拒绝。 控件类型 ID 属性 函数 Edit Box IDC_EDIT_NAME CString m_name IDC_EDIT_CODE CString m_password IDC_EDIT_CODE1 CString m_password1 Button IDC_BUTTON_WA_S 添加 OnButtonAdd() IDC_BUTTON_UESR 删除 OnButtonDelr() 只有系统管理员有 资格进行用户的添加与删除; 一般用户拒绝。

添加用户 void CUSER::OnButtonAdd() { CString sql; UpdateData (true); if(m_name==""||m_password=="") { MessageBox("参数不能为空,请输入完整!"); return; } if(m_password.Compare(m_password1)!=0) { MessageBox(“两次输入的密码不一致,请重新输入!“,”错误”,MB_OK|MB_ICONSTOP); else _CommandPtr m_pCommand; try m_pCommand.CreateInstance("ADODB.Command"); _variant_t vNULL; vNULL.vt=VT_ERROR; vNULL.scode=DISP_E_PARAMNOTFOUND; m_pCommand->ActiveConnection=m_pConnection; m_pCommand->CommandText ="insert into usermanage VALUES(m_name,m_password')"; m_pCommand->Execute(&vNULL,&vNULL,adCmdText); } catch (_com_error e) CATCH_ERROR; MessageBox("添加成功"); }} 添加用户

删除用户 如数据库中存在该用户,确定删除,否则报告错误 void CUSER::OnBtnDel() { CString sql; UpdateData (true); if(m_name=="") MessageBox("参数不能为空,请输入完整!"); else { _RecordsetPtr m_pRecordset; CString strSQL1="select* from usermanage where name='"+m_name+"' "; CString strSQL="delete from usermanage where name='"+m_name+"' "; try { m_pRecordset.CreateInstance("ADODB.Recordset"); m_pRecordset->Open((_variant_t)strSQL1,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); if(!m_pRecordset->adoEOF) { if(MessageBox("你确定要删除此用户吗?","警告",MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2)==IDYES) m_pRecordset->Open((_variant_t)strSQL,_variant_t((IDispatch*)(((CMyApp*)AfxGetApp())->m_pConnection),true),adOpenStatic,adLockOptimistic,adCmdText); } { return; } } else { MessageBox("用户名不存在!"); return; } catch(_com_error e) { CATCH_ERROR; MessageBox("删除成功!"); 删除用户 如数据库中存在该用户,确定删除,否则报告错误

使用命令对象删除 _CommandPtr m_pCommand; try { m_pCommand.CreateInstance("ADODB.Command"); _variant_t vNULL; vNULL.vt=VT_ERROR; vNULL.scode=DISP_E_PARAMNOTFOUND; m_pCommand->ActiveConnection=m_pConnection; m_pCommand->CommandText=strSQL; m_pCommand->Execute(&vNULL,&vNULL,adCmdText); } catch(_com_error e) //处理异常 AfxMessageBox(e.ErrorMessage() );

系统测试 编译运行 测试数据库的连接 测试错误输入

结论 完成了一个MIS的设计开发 系统的优点 存在的问题 进一步的工作

计算器 数据库系统 ODBC数据库 ADO数据库 多媒体播放器 文件的读与写 网络聊天室