2011自编数据库指导书_第1页
2011自编数据库指导书_第2页
2011自编数据库指导书_第3页
2011自编数据库指导书_第4页
2011自编数据库指导书_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

PAGE湖南科技大学计算机科学与工程学院数据库课程设计指导书(09级计算机、网络、信息安全专业用)彭理编2011年11月前言市场调查表明,数据库应用开发以及与数据库应用开发相关的其他应用占据整个计算机应用的70%以上,掌握数据库应用开发技术成为计算机专业大学生必备掌握的技术之一,这其中如何选择后台数据库管理系统和前台数据库应用开发工具显得尤为重要。目前市面上流行的后台数据库管理系统有:适合大型企业的Oracle,适合中小型企业的MSSQLSERVER,以及开源的MySQL。考虑到数据库管理系统的易操作性以及我院实验室的实际情况,宜采用MSSQLSERVER作为同学们课程设计的后台数据库管理系统。至于前台数据库应用开发工具的选择就要复杂得多。从早些年流行的PB、Delphi,到近几年流行的VB、VC、Java,以及广泛流行于互联网上的.NET、J2EE技术,可供选择的开发工具比比皆是,让开发者眼花缭乱。考虑到.NET、J2EE技术采用的是典型的B/S计算模式,是大四后续课程涉及到的开发技术,目前不适合于作为《数据库系统》这门课程的实践教学开发环境。经典的数据库应用开发是典型的C/S计算模式,即应用数据库前端开发工具编写客户端程序,通过客户端程序来连接和访问后台数据库。从市场占有率来看,VB作为数据库前端开发工具,以其入门容易、操作灵活简便的优势,目前市场占有率较高。Java技术作为前台数据库应用开发工具,以其与平台无关性,目前也得到数据库应用开发者越来越多的青睐。但同学们没有学习过VB和Java的编程技术,只学习过C/C++,因此,用C++作为前台数据库开发的工具也是一种不错的选择。虽然VB能够很好地完成业务逻辑比较简单的MIS系统开发,然而当开发的系统规模较大,开发的代码必须被不同平台共用,或者编写数据库实用程序时,选择VC作为开发工具更加适宜。在对数据库支持、使用的灵活性及执行效率方面,VC是最全面和最强大的。VC全面支持ODBC、ADO、DAO、OLEDB和RDO等技术。只要熟练掌握,很容易看到VC是一种不可或缺的数据库应用开发工具。本课程设计指导书是应学院要求编写的,编写过程中得到了学院领导的支持、系部同事的帮助,特别感谢王志喜老师的大力支持,文中的课程设计题目主要是王老师提供的。由于编写时间仓促,本课程设计指导书中的不当之处,欢迎老师、同学们提出意见。编者2011-11-27目录第一部分课程设计的目的、内容及安排………….…………1第二部分VC++6.0访问SQLSERVER数据库技术……………3ADO访问数据库的相关知识……….……32.1.1VC++6.0集成开发环境及MFC编程简介……………32.1.2VC++中连接数据库的常用方法………..……………32.1.3ADO方法………..…3ADO访问数据库的例子……….…………72.2.1数据库及数据库表的建立…………….……………72.2.2查询数据——使用SELECT…………102.2.3插入数据——使用INSERT…………152.2.4更新数据——使用UPDATE…………182.2.5删除数据——使用DELETE…………212.2.6多表联接查询……………..………24第三部分课程设计题目………………..………28题目1学生信息管理系统………………..………………28题目2教学管理系统………….…………32题目3人事管理系统……….……………36题目4考勤管理系统……….……………40题目5工资管理系统………………….…44题目6员工培训管理系统………..………48题目7企业内部行文管理系统……...……52题目8医院管理系统…………….………56附录课程设计报告封面…………….…………….………60第一部分课程设计的目的、内容及安排一、课程设计目的数据库课程设计是计算机专业集中实践教学环节之一,是学习完《数据库系统概论》课程后进行的一次全面的综合练习。其目的在于加深对数据库基础理论和基本知识的理解,掌握使用VB、C++、Java、Delphi、PowerBuilder等数据库前端开发工具,提高同学们运用数据库技术解决实际问题的能力。二、课程设计内容及要求用C++、VB等或其它前端开发工具制作一个小型管理信息系统。所设计的小型管理信息系统应包含查询、插入、删除、修改、统计、用户权限管理等基本功能,界面采用菜单的形式。根据课程设计2周时间的安排,同学们宜选择适当大小的设计课题,并根据题目的基本需求,给出概念模型与逻辑模型,编写程序和写出详细的设计说明书。开发工具可选用VB、Delphi、VC、Powerbuilder、Java等,考虑到Foxpro、Access等并不是真正意义上的数据库管理系统,所以本课程设计要求不能使用Foxpro、Access作为开发工具。数据库管理系统推荐使用SQLSERVER,也可以使用MySQL或Oracle。三、课程设计安排1、课程设计时间:学习完《数据库系统概论》课程后2周。2、课程设计地点:逸夫楼四楼专业实验室。详细安排另附表。3、分组和选题:三人一组,从给定的参考题目中任选一题,也可选择其它难度和工作量相当或更高的类似题目。学习委员将本班分组及选题情况交指导老师。四、课程设计的考查1、考查时间:课程设计开始后第2周星期四和星期五。2、评分标准:由指导教师根据学生课程设计过程中的学习态度、完成任务的情况和课程设计报告的质量等综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。3、考查内容:包括程序测试和课程设计报告两部分。五、相关要求首先,要求同学们先仔细阅读本指导书的第一部分和第二部分的内容。然后根据下面要求完成本课程设计的任务。1.程序要求:(1)要求程序能够正确运行。(2)要求能解释所用开发工具的数据库编程机制。(3)要求能够采用所学数据库基础知识,根据需求分析设计正确的E-R模型,关系模式集合,按照规范化设计理论进行数据库设计。(4)要求能够说明数据的流程和变换,能够解释全部程序。(5)要求能提供源程序清单(可以使用磁介质、U盘或纸介质)。(6)对超出题目要求者,可以适当提高计分。2.课程设计报告要求(1)要求提交课程设计报告,没有设计报告者,不计成绩。(2)课程设计报告要求字迹清晰、版面整齐,篇幅至少8页,纸张使用A4,也可使用同样大小的作业本。封面上要求有课程设计名称、班级、学号和姓名等必要信息,必须装订整齐。(3)报告应书写设计内容、设计方法、实现方法、算法说明、心得体会等内容,绝对不能写成源程序清单。(4)除了源程序清单和一些必须打印的图表以外,实习报告一律手写,否则不计成绩。

第二部分VC++6.0访问SQLSERVER数据库技术在之前的课程学习中,同学们已经有了C++面向对象程序设计的知识基础,在此,主要介绍采用VC++6.0与SQLServer2000数据库相结合开发数据库应用程序的相关知识。希望通过两个星期的课程设计,采用同学们较为熟悉的语言,大家能够掌握好数据库开发的基本技术。这一部分主要涉及两个方面的内容:使用ADO访问数据库的相关知识通过5个例子介绍开发数据库应用程序的关键技术,包括数据查询、插入、更新和删除ADO访问数据库的相关知识2.1.1VC++6.0集成开发环境及MFC编程简介VC++6.0是Microsoft公司开发的基于C/C++的、面向对象程序设计的集成开发工具。对于大型应用程序的开发,不管是从开发效率上还是从代码的可重用性、可扩充性、可维护性和可靠性方面看,C++语言都显示出强大的优越性。在VC++6.0集成开发环境中,可以通过两种方式来编写Win32应用程序,一种方式是基于WindowsAPI的C编程方式,另一种是基于MFC的C++编程方式。一般来说,对中大型系统开发而言,通常使用后者来编写应用程序,这样可以提高工作效率,降低开发成本。MFC封装了WindowsAPI,是一个面向对象的C++类库,包含大约200个类,其中一些可以直接被用户调用,另一些则主要作为用户定义的基类。因此,基于MFC的应用程序可以用少量的代码即可完成一些非常复杂的工作。MFC比较庞大和复杂,在此,主要简要介绍如何基于MFC进行数据库应用程序的开发。2.1.2VC++中连接数据库的常用方法VC++提供的访问数据库的技术有很多种,如ODBC(OpenDataBaseConnectivity)、OLEDB(ObjectLinkandEmbeddingDatabase)、DAO(DataAccessObject)、ADO(ActiveXDataObject)等。我们常用的有两种:通过ODBC连接和通过ADO连接。采用ODBC方式要求先创建ODBC数据源,应用程序通过数据源与数据库连接;并且在创建应用程序时,只能是基于单文档或多文档,而无法直接创建基于对话框的应用程序。采用ADO方式无需创建数据源,应用程序可通过ADO直接与数据库连接;ADO方式可以创建基于对话框的应用程序。2.1.3AADO是微软推出的最新的数据库访问技术,是建立在OLEDB上的高层数据库访问技术。使用ADO访问数据库,主要是使用ADO的各种对象进行访问,它简单易用、速度快、内存支出少,其最大好处是在因特网上访问数据库的高效性。由于其功能强大,在开发数据库应用系统中使用最多。在这部分主要介绍ADO有关知识。在VC中使用ADO,开发基本流程如下:引入ADO库文件,初始化OLE/COM库环境用Connection对象连接数据库利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Record对象取得结果记录集进行查询、处理。使用完毕后关闭连接释放对象。1、使用ADO连接数据库,需要做一些准备。(1)在头文件中引入ADO库文件(一般放在StdAfx.h中)。#import"c:\programfiles\commonfiles\system\ado\msado15.dll"no_namespacerename("EOF"adoEOF")这行语句声明在工程中使用ADO,但不使用ADO的名字空间,并且为了避免冲突,将ADO的EOF(文件结束)改名为adoEOF。(2)由于ADO库是一组COM动态库,程序在调用ADO前必须初始化COM环境(一般在应用程序主类的InitInstance成员函数里面初始化)。相应代码如下:BOOLCSearchDataApp::InitInstance(){ AfxEnableControlContainer();CoInitialize(NULL); //初始化COM库……}2、常用的ADO的对象Connection、Command和Recordset是ADO中常用的三个对象。在使用数据库时,首先会打开数据库,然后再对数据库中的某个数据表进行操作。Connection对象用来与数据库建立连接、执行查询以及进行事务处理,它管理应用程序和数据库之间的通信。Command可以执行数据库操作命令,被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。Recordset对象表示来自基本表或命令执行结果的记录集,它可以在结果集中添加、删除、修改和移动记录。在使用Connection、Recordset和Command之前,要创建它们的实例,比如:_ConnectionPtrm_pConnection;m_pConnection.CreateInstance(_uuidof(Connection));_RecordsetPtrm_pRecordset;m_pRecordset.CreateInstance(_uuidof(Recordset));3、打开数据与关闭数据连接声明一个Connection对象实例后,就可以使用这个对象实例来连接数据库了。比如连接SqlServer的数据库student:m_pConnection->Open(“driver={SQLServer};Server=20101019-1026;Database=Stu_course;UID=sa;PWD=123”,””,””,adModeUnknown);其中“driver={SQLServer};Server=20101019-1026;Database=Stu_course;UID=sa;PWD=123”是连接字符串,分别表示OLEDB供应者,服务器名,数据库名,用户名和密码。如果使用windows身份验证方式登录,则用户名和密码为空;如果是使用windows和SQLServer混合验证,则UID=;PWD=要写入相应的用户名和密码。以上连接语句也可写成下面的形式:StrConn=“driver={SQLServer};Server=20101019-1026;Database=Stu_course;UID=sa;PWD=123”;m_pConnection->Open(StrConn,””,””,adModeUnknown);关闭数据库连接:m_pConnection->Close();在上面连接数据库的语句中,StrConn是包含连接信息的字符串,无论连接什么数据库,用下面的方法能很方便地获得它的值:(1)在任意一个Dialog资源中单击鼠标右键,在弹出的快捷菜单中选择“InsertActiveXControl”,在弹出的对话框中选中“MicrosoftADODataControl6.0”,单击确定,将Adodc添加到Dialog资源中。图2.1插入ActiveX对话框(2)在刚插入的Adodc控件上单击鼠标右键,在弹出的快捷菜单上选择“ADODC属性AdodcObject”,弹出Adodc属性对话框。选择“General”选项卡,在该选项卡上可以通过三种方式连接数据库,其中常用的是后两项:通过ODBC和连接字符串连接数据库。在此,我们选择后者,如图2.2所示:图2.2MicrosoftADODataControlProperties对话框(3)单击“生成”按钮,弹出“数据链接属性”对话框。根据要连接的数据库情况,选择适当的提供者,在此,选择“MicrosoftOLEDBProviderForSQLSERVER”来连接SQLSERVER数据库。单击下一步进入“连接”属性页,在“选择或输入数据库名称”文本框中,填入要连接的SQLSERVER服务器名,在“输入登录服务器的信息”区域选择登录的验证模式,最后选择要连接到的数据库。如图2.3所示。图2.3连接选项卡(4)关闭“数据连接属性”对话框,需要的字符串便显示在“UseConnectionString”文本框中,如图2.4所示。图2.4自动生成的连接字符串4、如何执行SQL命令并取得结果记录集SQL命令的执行可以采用多种形式。(1)利用Connection对象的Execute方法执行SQL命令m_pConnection->Execute(CommandText,RecordsAffected,Options);其中:参数CommandText是命令字串,通常是SQL命令。

参数RecordsAffected:可选,是操作完成后所影响的行数,

参数Options:可选,表示CommandText中内容的类型,Options可以取如下值之一:

adCmdText:表明CommandText是文本命令

adCmdTable:表明CommandText是一个表名

adCmdProc:表明CommandText是一个存储过程

adCmdUnknown:未知例如:///将所有记录old字段的值加一m_pRecordset=m_pConnection->Execute(“UPDATEusersSETold=old+1",&RecordsAffected,adCmdText);Execute执行完后返回一个指向记录集的指针。(2)直接用Recordset对象进行查询取得记录集例如

m_pRecordset->Open("SELECT*FROMstudent",

_variant_t((IDispatch*)m_pConnection,true),//获取数据库的Idispatch指针

adOpenDynamic,//动态光标。所有数据库的操作都会立即在各用户记录集上反映出来。

adLockOptimistic,//乐观锁定方式。只有在你调用Update方法时才锁定记录。在此之前仍然可以做数据的更新、插入、删除等动作

adCmdText);//adCmdText:表明CommandText是文本命令(3)利用Command对象来执行SQL命令Command对象在进行存储过程的调用中能真正体现它的作用。ADO访问数据库的例子ADO在VC++中有不同的使用方法,比如,编写代码使用ADO库的三个智能指针(_ConnectionPtr、_RecordsetPtr、_CommandPtr)对数据库进行操作(很多参考书都有介绍)等;另外一种简单的方法是直接使用ADO控件。为了使大家能快速掌握VC环境下通过ADO技术访问数据库的关键技术,下面通过5个例子,分别介绍如何通过ADO控件来连接SQLSERVER数据库,对数据库中数据进行查询、添加、更新、删除以及多表联接查询的方法。掌握了对数据增删改查的基本方法,也就掌握了开发数据库应用系统关键内容。2.2.1数据库及数据库表的建立本节将要介绍的例子,用到了以下3个数据表。表结构如下:表1学生基本情况表student字段名字段类型字段含义说明s_novarchar(8)学号s_namevarchar(8)学生姓名s_sexvarchar(4)性别s_ageint(4)年龄s_deptvarchar(20)专业s_addressvarchar(50)住址表2课程表course字段名字段类型字段含义说明c_novarchar(8)课程号c_namevarchar(20)课程名称c_hourint(4)课时c_scorenumeric(2,1)学分表3选修课程情况表score字段名字段类型字段含义说明c_novarchar(8)课程号s_novarchar(8)学号scoreInt(4)成绩创建student表的SQL脚本student.sql如下:--使用Stu_course数据库useStu_Coursegocreatetablestudent(s_novarchar(8)primarykey,s_namevarchar(8)notnull,s_sexvarchar(4),s_ageint,s_deptvarchar(20),s_addressvarchar(50));--添加数据到student表中INSERTINTOstudentVALUES(‘1’,'李平','男',22,'计算机应用技术','湖南')INSERTINTOstudentVALUES(‘2’,'王丫','女',19,'信息安全','广西')INSERTINTOstudentVALUES(‘3’,'钟信','男',21,'网络工程','重庆')INSERTINTOstudentVALUES(‘4’,'木林','女',20,'信息安全','北京')INSERTINTOstudentVALUES(‘5’,'李文','男',20,'计算机应用技术','上海')INSERTINTOstudentVALUES(‘6’,'丽思','女',18,'网络工程','大连')创建course表的SQL脚本course.sql如下:--建立course表createtablecourse(c_novarchar(8)primarykey,c_namevarchar(20)notnull,c_hourint,c_scorenumeric(2,1));--添加数据到course表中INSERTINTOcourseVALUES('1','数据结构',56,2.5)INSERTINTOcourseVALUES('2','大学英语',32,2)INSERTINTOcourseVALUES('3','高等数学',56,5)INSERTINTOcourseVALUES('4','数据库系统',48,2.5)创建score表的SQL脚本score.sql如下:--建立score表createtablescore(c_novarchar(8),s_novarchar(8),scoreint,primarykey(c_no,s_no),foreignkey(c_no)referencescourse(c_no),foreignkey(s_no)referencesstudent(s_no));--添加数据到score表中INSERTINTOscoreVALUES('1','1',80)INSERTINTOscoreVALUES('1','2',89)INSERTINTOscoreVALUES('1','4',90)INSERTINTOscoreVALUES('2','1',85)Stu_course数据库的创建步骤如下:通过ServiceManger启动MSSQLServer2000。打开企业管理器工具,连接到启动的数据库服务器。在“数据库”菜单上单击鼠标右键,选择“新建数据库”菜单新建一个数据库Stu_course,如图2.5所示。图2.5选择新建数据库菜单打开查询分析器,分别执行脚本文件student.sql、course.sql和score.sql来创建3个表,如图2.6所示。图2.6执行student.sql脚本2.2.2.查询数据——使用SELECT数据查询一般是指根据给定的条件在数据库中检索满足要求的数据。在不同的实际应用中,查询条件和要求会有很大的差别。下面的例子从创建VC工程开始,详细介绍如何利用ADO控件连接数据库,实现一个能按属性值查询数据的基本对话框界面的过程。【例1】创建一个能按照给定的字段值查询数据的MFC程序。程序功能是,可以选择指定范围内的表,然后选择表中任意一个字段,根据给出的该字段的值,在表中查询满足要求的数据。操作步骤如下:(1)创建VC应用程序打开VC++6.0,新建工程。选择MFCAppWizard(exe),工程名为SearchData。在弹出的窗口中选择“基本对话框”,以后的步骤没有需要修改的地方,可以直接点击“完成。”这样一个基于基本对话框的工程就创建好了。按照前面讲的方法,添加import语句、初始化COM环境。(2)在控制面板中添加ADO控件和DataGrid控件。通过ADO控件来连接SQLServer数据库,一般需要两个控件:ADO控件和DataGrid控件。在默认情况下,VC++6.0的控制面板中并没有这两个控件,可按下面的方法添加它们:在VC++6.0的菜单中,选择“Project”|“AddToProject”|“ComponentandControls”命令,在打开的“ComponentsandControlsGallery”对话框中,选中RegisteredActiveXControls文件夹,将“MicrosoftADODataControl,version6.0(OLEDB)”项和“MicrosoftDataGridControl,Version6.0(OLEDB)”分别添加进来即可。单击“Insert”按钮,会把ADO控件的类文件导入到当前工程之中。此时VC++6.0的控件面板上就多了两个浅绿色的控件。ADO控件ADO控件DataGrid控件图2.7VC++6.0控件面板(添加控件后)(3)界面设计在工作区左边的树型结构中,选择ResourceView,展开Dialog节点,双击IDD_SEARCHDATA_DIALOG,打开该对话框,在该对话框上添加DataGrid控件、ADO控件、Edit控件和Button控件各一个,Combo控件2个,Static控件3个。对各个控件进行适当调整,结果如图2.8所示。图2.8主对话框设计界面(4)设置DataGrid控件的属性。DataGrid控件用于显示数据,需将数据源属性(DataSource属性)的值设置为ADO控件的ID属性值IDC_ADODC1。方法是:右击DataGrid控件,选择“Properties”,在弹出的属性对话框中选择“All”选项卡,然后在该选项中将“DataSource”项的值设置为IDC_ADODC1,其中IDCADODC1为ADO控件的ID属性值。此外,还将“Caption”属性设置为“查询结果”,如图2.9所示。图2.9设置DataGrid控件的属性(5)连接数据库。主要是对ADO控件的相关属性进行设置。可按以下几个步骤进行:①在主对话框上右击ADO控件,在弹出的菜单中选择“Properties”命令,会弹出如前面图2.2所示的对话框,按照图2.3中讲过的方法设置好数据库的连接信息,包括服务器名,登录服务器的验证方式(根据自己的服务器设置),要访问的数据库(选择Stu_Course)。测试连接成功后,点击确定。②回到刚才的属性对话框,选择“Authentication”选项卡,输入与在“连接”选项卡设置的相同的用户名和密码,如图2.10所示。注意,如果在“连接”选项卡中设置的“用户/密码”方式登录,则必须在该选项卡重新设置同样的用户名和密码。图2.10设置的用户名和密码③选择“RecordSource”选项卡,在“CommandType”下拉列表框中选择“adCmdText”项,表示要通过在下面的“CommandText”文本框中输入语句“SELECT*FROMstudent”来查询数据,如图2.11所示。图2.11将CommandType设置为adComText至此,DataGrid控件与ADO控件联系起来,在DataGrid里将显示student表里的内容。如果将CommandType设置为adCmdTable则需要在TableorStoredProcedureName下拉框中选择表名,如student,表示将查询该表中的数据。为了让ADO控件在运行时不可见,可在“常规”选项卡,去掉“Visible”复选框中的勾。(6)对ADO、Combo、Edit控件建立关联变量。以Combo1控件为例,创建关联变量的过程是:在界面右键单击,选择“ClassWizard”(建立类向导),打开“MFCClassWizard”对话框。在此对话框上选择“MemberVariables”选项卡,然后在“ControlIDs”列表框中选择“IDC_COMBO1”项,接着单击右上角“AddVariable”选项卡,弹出图2.12所示对话框。在此框中设置变量的名称、变量的类别(Category)。图2.12设置combo1控件的关联变量用同样的方法对其他控件创建关联变量,添加变量完成后的类向导如图2.13所示。图2.13控件及其关联变量(7)为Button1控件建立关联成员函数。方法是:选择“View”|“ClassWizard”命令,打开“MFCClassWizard”对话框。选择“MessagesMaps”选项卡,然后在“ObjectIDs”列表框中选择“IDC_BUTTON1”项,在“Messages”列表框中选择“BN_CLICKED”项,如图2.14所示。最后单击右上角的“AddFunction”按钮,在弹出的对话框中设置成员函数的名称OnButton1,并单击“OK”按钮。该函数与Button1按钮关联,在程序运行时,单击此按钮实际上就是执行此成员函数。图2.14创建Button1控件的关联函数在图2.14中,单击“EditCode”按钮,编辑函数OnButton1的代码,结果如下:voidCSearchDataDlg::OnButton1(){ //TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE); CStringtmpStr,strSQL="SELECT*FROM";m_combo1_TableName.GetWindowText(tmpStr);strSQL+=tmpStr+"WHERE";m_combo2_FieldName.GetWindowText(tmpStr);strSQL+=tmpStr+"="; strSQL+="'"+m_Edit1_FieldValue+"'";m_Adodc1.SetRecordSource(strSQL); m_Adodc1.Refresh(); UpdateData(FALSE); }(8)再用类似的方法对Combo1控件建立名为OnKillfocusCombo1的关联函数。代码如下:voidCSearchDataDlg::OnKillfocusCombo1(){ //TODO:Addyourcontrolnotificationhandlercodehere CStringtableName; m_combo1_TableName.GetWindowText(tableName); m_combo2_FieldName.ResetContent(); if(tableName=="student") { m_combo2_FieldName.AddString("s_no");m_combo2_FieldName.AddString("s_name");m_combo2_FieldName.AddString("s_sex"); } else { m_combo2_FieldName.AddString("c_no");m_combo2_FieldName.AddString("c_name");} }(9)打开SearchDataDlg.cpp文件,在CSearchDataDlg::OnInitDialog()函数中添加下列语句: //TODO:Addextrainitializationhere m_combo1_TableName.SetWindowText("student"); m_combo2_FieldName.SetWindowText("s_name"); m_combo1_TableName.AddString("student"); m_combo1_TableName.AddString("course"); m_combo2_FieldName.AddString("s_no");m_combo2_FieldName.AddString("s_name");m_combo2_FieldName.AddString("s_sex");这些语句用于初始化Combo1和Combo2控件。(10)经过上述操作以后运行此工程,结果如图2.15所示。在该界面中,可以按单个字段值对表student和表course进行查询。图2.15工程SearchData的运行界面2.2.3插入数据——插入数据是通过执行INSERT语句来实现的。以下介绍如何在VC代码中执行INSERT语句,以完成数据插入操作。【例2】创建一个MFC程序,使其具有插入数据的功能。程序的功能为:通过VC主对话框实现向表student表插入数据的功能。此程序创建步骤如下:(1)创建一个MFC程序,工程名为InsertData。按前面介绍的方法,在主对话框上添加DataGrid控件和ADO控件,并进行相应的属性设置,它们用于显示当前数据表中的数据。然后,分别添加6个Edit控件,连同ADO控件一起,分别为它们创建关联变量,结果如图2.16所示。图2.16创建的关联变量(2)为Button1按钮创建关联成员函数OnButton1(),并对其编辑代码,结果如下:voidCInsertDataDlg::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); _ConnectionPtrm_pConnection;::CoInitialize(NULL); //在ADO操作中建议语句中要常用try…catch()来捕获错误信息 //因为它有时会经常出现一些想不到的错误 try{m_pConnection.CreateInstance("ADODB.Connection"); _bstr_t strConn="Provider=SQLOLEDB;Server=20101019-1026;DATABASE=Stu_Course;UID=sa;PWD=;"; m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库"); } catch(_com_errore) { ::CoUninitialize();AfxMessageBox(e.ErrorMessage()); return; } //以下插入数据 _variant_tra; _bstr_tstrAdd="INSERTINTOstudentVALUES(‘"; strAdd=strAdd+m_s_no+"’,'"; strAdd=strAdd+m_s_name+"','"; strAdd=strAdd+m_s_sex+"',"; strAdd=strAdd+m_s_age+",'"; strAdd=strAdd+m_s_dept+"','"; strAdd=strAdd+m_s_address+"')";m_pConnection->Execute(strAdd,&ra,adCmdText);m_pConnection->Close();//以下显示当前数据 m_adodc1.SetRecordSource("SELECT*FROMstudent"); m_adodc1.Refresh(); UpdateData(FALSE);}(3)经过上述步骤,已经完成代码编写任务。然后运行该工程,在文本框中输入相应的值,然后单击“插入”按钮即可将数据插入到数据表student中,如图2.17所示。图2.17工程InsertData的运行界面2.2.4更新数据——更新数据是通过执行UPDATE语句来实现。与例2一样,在VC中执行UPDATE语句也可以通过调用ADO对象的Open方法来实现。【例3】创建一个MFC程序,使其具有更新数据的功能。为了节省篇幅,在工程InsertData(例2)的基础上来创建这样的MFC程序。方法是:将InsertData目录复制一份,并将复制后的目录名改为InsertData2,然后双击此目录下的InertData.dsw文件,打开文件InsertData。按照下列步骤进行补充:(1)打开“MFCClassWizard”对话框,为DataGrid控件添加成员函数OnDblclickDatagrid()并在该函数中添加代码,结果如下:voidCInsertDataDlg::OnDblClickDatagrid1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE);intColNum=2;CStringcolVal;CColumnscols;//要包含头文件"Columns.h"CColumncol;//要包含头文件"Column.h"VARIANTv_ColNum,v_Value;cols=m_datagrid1.GetColumns();//调用GetColumns返回CDataGrid对应的CColumns对象v_ColNum.vt=VT_I2;//读取学号v_ColNum.iVal=0;//设置列编号col=cols.GetItem(v_ColNum);//根据列编号返回CColumn对象v_Value=col.GetValue();//读取列值m_s_no=v_Value.bstrVal;//读取姓名 v_ColNum.iVal=1;col=cols.GetItem(v_ColNum);v_Value=col.GetValue();m_s_name=v_Value.bstrVal;//读取性别 v_ColNum.iVal=2;col=cols.GetItem(v_ColNum);v_Value=col.GetValue();m_s_sex=v_Value.bstrVal;//读取年龄 v_ColNum.iVal=3;col=cols.GetItem(v_ColNum);v_Value=col.GetValue();m_s_age=v_Value.bstrVal;//读取专业 v_ColNum.iVal=4;col=cols.GetItem(v_ColNum);v_Value=col.GetValue();m_s_dept=v_Value.bstrVal;//读取住址 v_ColNum.iVal=5;col=cols.GetItem(v_ColNum);v_Value=col.GetValue();m_s_address=v_Value.bstrVal; UpdateData(FALSE);}该函数的作用是,每次双击DataGrid控件中编辑单元时就会执行该函数,结果是将DataGrid控件的当前行中的所有字段值依次复制到界面下方的六个文本框中。代码中用到了m_datagrid1,因此还要按照前面的方法,为DataGrid控件创建一个关联变量m_datagrid1,否则运行时会提示找不到变量。(2)将Button1控件的Caption属性改为“更新”,然后修改对应的成员函数的代码,结果如下:voidCInsertDataDlg::OnButton1(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); _ConnectionPtrm_pConnection;::CoInitialize(NULL); try {m_pConnection.CreateInstance("ADODB.Connection"); _bstr_tstrConn="Provider=SQLOLEDB;Server=20101019-1026;DATABASE=Stu_Course;UID=sa;PWD=;"; m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库"); } catch(_com_errore) { ::CoUninitialize();AfxMessageBox(e.ErrorMessage()); return; } //以下插入数据 _variant_tra; _bstr_tstrAdd="UPDATEstudentSETs_name='"; strAdd=strAdd+m_s_name+"',s_sex='"; strAdd=strAdd+m_s_sex+"',s_age="; strAdd=strAdd+m_s_age+",s_dept='"; strAdd=strAdd+m_s_dept+"',s_address='"; strAdd=strAdd+m_s_address+"'"; strAdd=strAdd+"WHEREs_no="+m_s_no;//AfxMessageBox(strAdd); return;m_pConnection->Execute(strAdd,&ra,adCmdText);m_pConnection->Close();//以下显示当前数据 m_adodc1.SetRecordSource("SELECT*FROMstudent"); m_adodc1.Refresh(); AfxMessageBox("成功更新数据!"); UpdateData(FALSE);}(3)经过上述代码更改以后,该工程已经具有了数据更新功能了。图2.18是该工程运行并修改数据时的一个界面。图2.18修改后工程InsertData的运行界面(数据更新)2.2.5删除数据——使用DELETE对于数据的删除,这里也介绍如何通过调用ADO对象的Open方法来执行DELETE语句而实现删除功能。【例4】创建一个MFC程序,使其具有删除数据的功能。本程序是在例3介绍的工程的基础上来完成。步骤如下:(1)复制在例3中形成的目录InsertData2,并将复制后的目录改名为InsertData3。(2)双击目录InsertData3下的文件InsertData.dsw,打开此工程。一次删除6个Edit控件的关联变量。方法是:选择“View”|“ClassWizard”命令,打开“MFCClassWizard”对话框。在此对话框上选择“MemberVariables”选项卡,然后在“ControlIDs”列表框中选择“IDC_EDIT1”项,接着单击右上角的“DeleteVariable”按钮,这样就删除了EDIT1控件的关联变量m_s_no。用同样的方法删除其他控件Edit类型控件的关联变量,并单击确定退出“MFCClassWizard”对话框。(3)将主对话框上所有的Edit控件以及Static控件全部删除,然后添加一个Button控件(其ID属性值为IDC_BUTTON2),接着更改两个Button控件的Caption属性值。修改界面如图2.19所示。图2.19修改后工程InsertData的设计界面(数据删除)(4)更改OnDblClickDatagrid()函数的代码://功能:当双击DataGrid控件时,当前记录被删除。voidCInsertDataDlg::OnDblClickDatagrid1(){ //TODO:AddyourcontrolnotificationhandlercodehereCColumnscols;//要包含头文件"Columns.h"CColumncol;//要包含头文件"Column.h"VARIANTv_ColNum,v_Value;cols=m_datagrid1.GetColumns();//调用GetColumns返回CDataGrid对应的CColumns对象v_ColNum.vt=VT_I2;//读取学号v_ColNum.iVal=0;//设置列编号col=cols.GetItem(v_ColNum);//根据列编号返回CColumn对象v_Value=col.GetValue();//读取列值CStringtmp=v_Value.bstrVal;//intcurRow=atoi(tmp); CStringtmp2="确认要删除编号为"+tmp+"的记录吗?"; if(MessageBox(tmp2,_T("数据删除提示"),MB_YESNO|MB_ICONSTOP)!=IDYES)return;UpdateData(TRUE); _ConnectionPtrm_pConnection;::CoInitialize(NULL); try {m_pConnection.CreateInstance("ADODB.Connection"); _bstr_tstrConn="Provider=SQLOLEDB;Server=20101019-1026;DATABASE=Stu_Course;UID=sa;PWD=;"; m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库"); } catch(_com_errore) { ::CoUninitialize();AfxMessageBox(e.ErrorMessage()); return; } //以下删除当前数据 _variant_tra; _bstr_tstrAdd="DELETEFROMstudentWHEREs_no="+tmp; m_pConnection->Execute(strAdd,&ra,adCmdText);m_pConnection->Close();//以下显示当前数据 m_adodc1.SetRecordSource("SELECT*FROMstudent"); m_adodc1.Refresh(); UpdateData(FALSE);}(5)更改OnButton1()函数的代码,结果如下:voidCinsertDataDlg::OnButton1(){ OnDblClickDatagrid1();}该函数直接调用OnDblClickDatagrid1()来删除当前记录。(6)为新添加的Button控件(ID为IDC_BUTTON2)创建关联函数OnButton2(),该函数的作用是删除表中所有的数据。代码如下:voidCInsertDataDlg::OnButton2(){ //TODO:Addyourcontrolnotificationhandlercodehere if(MessageBox(_T("确认要删除所有数据吗?"),_T("数据删除提示"),MB_YESNO|MB_ICONSTOP)!=IDYES)return; UpdateData(TRUE); _ConnectionPtrm_pConnection;::CoInitialize(NULL); try {m_pConnection.CreateInstance("ADODB.Connection"); _bstr_tstrConn="Provider=SQLOLEDB;Server=20101019-1026;DATABASE=Stu_Course;UID=sa;PWD=;"; m_pConnection->Open(strConn,"","",adModeUnknown); //if(m_pConnection->State==adStateOpen)MessageBox("成功连接数据库"); } catch(_com_errore) { ::CoUninitialize();AfxMessageBox(e.ErrorMessage()); return; } //以下删除所有数据 _variant_tra; _bstr_tstrAdd="DELETEFROMstudent"; m_pConnection->Execute(strAdd,&ra,adCmdText);m_pConnection->Close();//以下显示当前数据 m_adodc1.SetRecordSource("SELECT*FROMstudent"); m_adodc1.Refresh(); UpdateData(FALSE);}(7)运行结果:图2.20删除数据 该程序提供了三种删除数据的方法,一种是双击DataGrid控件,可以删除当前数据记录;第二种单击“删除当前记录”按钮,可以删除当前被选中的数据记录;第三种是单击“删除所有记录”按钮,可以删除当前表中所有的数据记录。2.2.6多表联接查询在数据查询中,经常涉及到提取两个或多个表的数据,这就需要使用表的连接来实现若干个表数据的联合查询。在前面增删改查的4个例子的基础上,下面再举一个多表查询的例子。【例5】使用ADO与DATAGRID设计一个能实现多表联合条件查询的界面。功能:能根据用户输入的字段值,从Stu_Course数据库的student表、course表和score表中查找出学生姓名,选修的课程名,该课程的学分和所得成绩。为了方便查询,可先在数据库中创建视图Stu_view,该视图的作用是从3个表中查找出所需字段。--创建视图Stu_view的SQL语句如下createviewStu_view(s_name,c_name,c_score,score)asSELECTstudent.s_name,course.c_name,course.c_score,score.scoreFROMstudent,score,coursewherestudent.s_no=score.s_noandscore.c_no=course.c_no例5的实现步骤如下:(1)设计主界面。创建一个MFC对话框(Dialogbased)应用程序(MFCAppWizard[exe])。工程名为SearchData2。打开SearchData2工程,选择ResourceView,打开Dialog文件夹,双击IDD_SEACHDATA_DIALOG。打开对话框窗体,删除掉窗体上自动生成的控件并添加ADO,DATAGRID,RADIOBUTTON,EDITBOX,BUTTON控件,完成对话框界面的设计。如图2.21所示。图2.21SeachData2主界面设计(2)引入ADO库文件,初始化OLE/COM库环境(3)按照前面讲述的方法设置DataGrid控件的属性。将数据源属性(DataSource属性)的值设置为ADO控件的ID属性值IDC_ADODC1。(4)在对话框中ADO控件上点击右键,按照前面讲述的方法,设置ADO控件的相关属性,使其连接上Stu_Course数据库。(5)继续在ADO属性设置对话框中选择“RecordSource”选项卡,在“CommandType”下拉列表框中选择“adCmdText”项,表示要通过在下面的“CommandText”文本框中输入语句“SELECT*FROMStu_view”来查询数据,如图2.22所示。图2.22将CommandType设置为adComText(6)右键点击“按姓名查询”下面的EDITBOX控件,选择Properties选项,修改ID名为IDC_EDIT_NAME,同样修改“按课程名查询”下EDITBOX的ID为IDC_EDIT_COURSE。按照前面讲述的方法设置ADO和EDITBOX的关联变量。结果如图2.23所示。图2.23控件关联变量设置完成(7)设置RADIOBUTTON控件与BUTTON控件关联函数。分别如上文所示从Properties里修改各控件ID名为:IDC_RADIO_NAME,IDC_RADIO_COURSE,IDC_BUTTON_QUERY。双击控件点确定即可建立控件的关联函数,如图2.24所示。图2.24建立RADIOBUTTON控件的关联变量(8)设置CSeachDataDlg类的成员变量m_SelectYes,我们将根据m_selectyes的取值来选择条件进行查询。选择工程区的FileView,打开SeachData2Dlg.h文件。在CseachData2Dlg类的public属性下输入intm_SelectYes,并打开SeachData2Dlg.cpp文件,在CseachData2Dlg类的构造函数里初始化m_SelectYes=0。(9)双击名为“按姓名查询”的RADIOBUTTON控件进入其关联函数,输入代码:m_SelectYes=1;。双击名为“按课程名查询”的RADIOBUTTON控件进入其关联函数,输入代码:m_SelectYes=2;。双击名为“执行查询”的BUTTON控件进入其关联函数OnButtonQuery()输入代码: UpdateData(TRUE); //讲EDITBOX里的值赋予其关联变量中 if(m_SelectYes==1){ //当m_SelectYes等于1时,按姓名查询 CStringstr="select*fromStu_viewwheres_name='"+m_name+"'"; m_adodc1.SetRecordSource(str); m_adodc1.Refresh(); UpdateData(FALSE); } elseif(m_SelectYes==2){ //当m_SelectYes等于2时,按课程查询 CStringstr="select*fromStu_viewwherec_name='"+m_course+"'"; m_adodc1.SetRecordSource(str); m_adodc1.Refresh(); UpdateData(FALSE); }(10)至此工程设计完成,按F7编译,CTRL+F5执行程序,运行结果如图2.25所示。图2.25按姓名查询名字为李平的学生选课信息本例使用视图简化了操作,若不定义视图,通过在程序中直接使用SQL语句执行联接查询同样也可实现该程序,同学们可以自己一试。

第三部分课程设计题目题目1学生信息管理系统1系统需求分析学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生的信息,帮助学校和名师掌握学生的情况,这就是学生信息管理系统需要完成的功能。1.1系统功能分析本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统的主要功能有:学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。学生流动情况的输入,包括:转系、休学、复学、退学、毕业。奖惩情况的输入。学生个人情况查询和修改,包括流动情况和奖罚情况。1.2系统功能模块设计(划分)图1、学生信息管理系统功能模块图根据系统功能要求可以将系统分解成几个模块来分别设计应用程序界面,如图1所示。1.3与其它系统的关系学生信息管理系统是校园信息管理系统的一个组成部分。它为其它系统,如班级信息管理系统、教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数据。1.4数据流程图学生信息管理系统的数据流程如图2所示。图2、学生信息管理系统数据流程图2数据库设计2.1数据库需求分析根据上一节的数据流程图,可以列出以下记录学生信息所需的数据项和数据结构:学生:学号、姓名、性别、生日、籍罗、所在院系、所在班级。处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效。奖励记录:记录号、级别、奖励对象、记录时间、详细描述。学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述。所需的外部数据支持:班级:班级编号、班级名称、所属院系。院系:代码、名称。2.2数据库概念结构设计图3是本系统所需数据的E-R模型图。图3、学生管理系统的E-R图2.3数据库逻辑结构设计根据系统E-R图,需要设计4个数据表来存放学生的信息。为了系统的完整,系统中包括了应用程序设计中所需的2个外部数据表。为了优化数据表结构,部分字段采用代码形式,因此需要附加3个代码表。这9个数据表的结构如表1到表9所示。表1STUDENT学生个人信息表表2CHANGE学籍变更信息表表3REWARD奖励记录信息表表4PUNISHMENT处罚记录信息表表5DEPARTMENT院系信息表表6CLASS班级信息表表7CHANGE_CODE学籍变动代码表表8REWARD_LEVELS奖励等级代码表表9PUNISH_LEVELS处罚等级代码表2.4数据库的建立2.4.1数据库的建立(请设计者完成)2.4.2初始数据的输入数据表创建成功后,数据库中还没有实际的数据。为了保证外部键能使用,数据需要提前输入,如院系编号、班级编号、学籍变更代码和奖惩级别等等。学籍变更代码和奖惩级别的主关键字CODE从0开始用阿拉伯数字依次编号,便于程序设计时,采用单选按钮来选择。本系统中所用到的学籍变更和奖惩级别代码如表10至表12所示(请设计者完成这些数据表的逻辑结构)。(以下各部分请设计者完成)。3各功能模块的设计与实现3.1功能说明1、学生个人信息输入2、学籍变更情况的输入3、奖历情况的输入4、处罚情况的输入5、学生个人情况查询和修改3.2用户界面设计完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。由于本系统管理内容比较简单,且为校园管理信息系统的一部分,因此使用一个窗体不同的标签页来完成系统要求的5项功能。我们把学生信息管理系统的窗体分成____个主要部分,如图____所示。1、应用程序主窗体的创建2、学生个人信息输入界面3、学籍变更情况输入界面3、奖历情况输入界面4、处罚情况输入界面5、学生个人情况查询和修改界面3.3各功能模块的实现1、学生个人信息输入2、学籍变更情况输入3、奖历情况输入4、处罚情况输入5、学生个人情况查询和修改4系统实现5系统的编译和发行题目2教学管理系统每学期学校都要开设—定的课程,提供给学生根据自己的情况来选择。最后的选课结果不但需要给出学生的课表,也要把选课名单提供给任课教师进行期末成绩的评定。1系统需求分析1.1系统功能分析本系统主要有以下功能要求:课程设置,包括:增加、删除、查询和修改课程信息。课程时间和教室的安排,以及课程清单打印输出。学生选课和学生课表的打印输出。课程学生名单的打印输出和期末成绩输入。成绩查询、报表。1.2系统功能模块设计(划分)系统各功能模块的关系如图1所示。图1、教学管理信息系统功能模块图因为使用这套系统的人员不光是教务管理人员,还包括教师和学生。不同的身份对数据库的操作权限也不同。为了避免管理的混乱,需要针对不同的角色分别设计客户端应用程序,对同一个数据库进行合理的修改。1.3与其它系统的关系教学管理信息系统同样是校园信息管理系统的一个有机组成部分。需要从学生信息管理系统获取学生的个人信息,从教师信息管理系统获取任课教师的相关信息。同时,提供的成绩单为其他系统提供必要的参考。1.4数据流程图教学信息管理系统的数据流程如图2所示。图2、教学信息管理系统数据流程图2数据库设计2.1数据库需求分析根据我们前面的分析,教学信息管理系统需要以下数据项:课程:课程号、课程名称、讲课教师、学分、学时、上课时间、上课地点、简介、课程状态。选课结果:记录编号、选课人、所选课程。成绩单:记录编号、学生、课程、成绩。所需的外部数据支持:学生:学号、姓名、班级。教师:员工号、姓名、所在院系。2.2数据库概念结构设计图3是本系统所需数据的E-R模型图。图3、教学管理系统的E-R图2.3数据库逻辑结构设计根据上面的E-R图,需要3个基本信息表:教师信息、学生信息、课程信息。其中,教师信息和学生信息在实际系统中是从其它信息管理系统的数据表中直接读取。学生的选课信息需要用1个表来单独保存。由于每学期期末前都要进行选课,因此选课结束后要将这个表的内容及时保存到成绩单数据表中。使用本系统的不光是教务处的管理人员和教师,每个学生都需要登录到选课系统进行课程的选择。因此,需要对不同的登录人员进行密码认证和权限的限制,防止出现越权行为。用户名、密码和权限单独保存在1个数据表中。另外需要一个课程状态代码表,这7个数据表的结构如表1到表7所示(请设计者完成这7个数据表的逻辑结构)。2.4数据库的建立2.4.1数据库的建立(请设计者完成)2.4.2初始数据的输入在开发应用程序之前必须先输入部分基础的数据,包括部分教师的信息、用户名密码权限和课程状态代码。课程状态代码如表9所示。(以下各部分请设计者完成)。3各功能模块的设计与实现3.1功能说明本系统需要按照不同的用户分别创建3个工程:教师课程管理应用程序、教务课程调度应用程序和学生选课应用程序。(一)教师课程管理应用程序功能说明(二)学生选课应用程序功能说明(三)教务课程调度应用程序功能说明3.2用户界面设计完成数据库创建和功能说明以后,我们可以进行下一步工作,既设计用户界面。(一)教师课程管理应用程序用户界面设计我们把教师课程管理应用程序的窗体分成____个主要部分,如图____所示。(二)学生选课应用程序用户界面设计我们把学生选课应用程序的窗体分成____个主要部分,如图____所示。(三)教务课程调度应用程序用户界面设计我们把教务课程调度应用程序的窗体分成____个主要部分,如图____所示。3.3各功能模块的实现(一)教师课程管理应用程序各功能模块的实现(二)学生选课应用程序各功能模块的实现(三)教务课程调度应用程序各功能模块的实现4系统实现5系统的编译和发行

题目3人事管理系统企业人事管理系统主要用于员工个人资料的录入、职

温馨提示

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

评论

0/150

提交评论