高级数据库技术课程设计报告

上传人:xu****iu 文档编号:133840611 上传时间:2022-08-11 格式:DOC 页数:20 大小:300.50KB
收藏 版权申诉 举报 下载
高级数据库技术课程设计报告_第1页
第1页 / 共20页
高级数据库技术课程设计报告_第2页
第2页 / 共20页
高级数据库技术课程设计报告_第3页
第3页 / 共20页
资源描述:

《高级数据库技术课程设计报告》由会员分享,可在线阅读,更多相关《高级数据库技术课程设计报告(20页珍藏版)》请在装配图网上搜索。

1、目录1. 设计目的和任务12.开发环境12.1硬件环境12.2软件环境13.设计题目13.1题目名称13.2题目详细描述13.3功能要求24.相关技术及知识点34.1 SqlConnection对象34.2 SqlCommand对象34.3 SqlDataAdapter对象44.4 DataTable对象44.5 DataSet对象55.设计与实现65.1登录界面65.2教师管理界面75.3管理员管理界面125.4学生考试界面146.总结187.参考资料191. 设计目的和任务 综合运用ADO.NET 相关知识,设计一个具有实用价值的学生考试管理系统。 (1)巩固和加深对本课程基本知识的理解和

2、掌握; (2)掌握C#编程和ADO.NET程序调试的基本技能; (3)掌握设计ADO.NET应用软件的基本思路和方法; (4)提高运用ADO.NET解决实际问题的能力; (5)培养撰写设计报告的能力。 2.开发环境2.1硬件环境笔记本电脑硬件概要CPU 英特尔 Genuine Intel(R) CPU T2130 1.86GHz主板Wistron - 英特尔 945PM (Calistoga-PM) + ICH7-M/U内存金士顿 2G DDR2-SDRAM 666 MHz 显卡nVIDIA GeForce Go 7200 (G72)主硬盘希捷 120GB 声卡英特尔 82801GB ICH7

3、 - High Definition Audio B0网卡英特尔 PRO/Wireless 3945ABG Network Connection (HP - RoW)2.2软件环境Microsoft Windows XP操作系统;Microsoft SQL Server 2005;Microsoft Visual Studio 2005;3.设计题目3.1题目名称学生考试管理系统3.2题目详细描述1、登录界面 2、新用户注册 3、教师管理界面 4、管理员管理界面 5、学生在线考试 3.3功能要求登录界面 功能: 1) 用户对应相应的权限进行登录,分教员、学生、管理员。登录后根据选择的权限进入相

4、应的界面; 2) 输入用户名框非空,密码框非空,权限选择判断; 3) 新学员用户注册。注册后需管理员激活才能登录。教师管理界面 功能(按菜单项说明): 1) 试题管理,子菜单如下: 增加试题; 查询试题:按科目查询试题; 试题列表:按难度查询试题列表,并可增加、修改试题。 2) 考试管理,子菜单如下: 生成试卷; 试卷管理:查看试卷信息、激活/取消试卷。 3) 成绩管理,按试卷名查寻成绩。要算出平均分。管理员管理界面功能(按菜单项说明): 1) 用户管理,子菜单如下: 新建用户:新建学员用户,新建教员用户。 查询及修改学员。 用户信息列表,包括查询以及教员学员信息 2) 题库管理,管理试题库

5、学生在线考试 1) 维护个人信息 对个人信息进行查询, 修改2)在线答题。功能:可以选择已激活试卷答题。 在线评分。 保存考试成绩可供教师查询。4.相关技术及知识点ADO.NET提供了多种对象模型,比较典型的以下有五种,它们全部归类System.Data.SqlClient名称空间下。4.1 SqlConnection对象ADO.NET使用SqlConnection对象与SQL Server进行连接。连接字符串的常用形式有两种:1.使用Windows集成安全身份认证, 例如:string connectionString =IntegratedSecurity=SSPI;Database=My

6、School.mdf;Server=localhost;2.在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。 例如:string connectionString = server=localhost; uid=sa; pwd=123; database=MySchool.mdf;然后通过连接字符串直接创建SqlConnection对象,如SqlConnection conn = new SqlConnection(connectionString);4.2 SqlCommand对象 在ADO.NET中,有两种操作数据库的方式:1.无连接的方式;2.保持连接的方式。不论哪种都可

7、以通过SqlCommand对象提供的方法传递对数据库操作的命令,并返回命令执行结果。在保持连接的方式下操作数据库的一般步骤为:1.创建SqlConnection的实例;2.创建SqlCommand的实例;3.打开连接;4.执行命令;5.关闭连接。SqlCommand对象提供了多种完成对数据库操作的方法。常用有:1.ExecuteNonQuery该方法执行SQL语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。2.ExecuteReaderExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。3.ExecuteScaler()该方法用于执行SELECT查询,

8、得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。4.3 SqlDataAdapter对象 SqlDataAdapter对象通过无连接的方式完成数据库和本地DataSet之间的交互。使用这种方式操作数据库的一般步骤为:1.创建SqlConnection的实例;2.创建SqlDataAdapter的实例,需要的话,根据select语句生成其他SQL语句;3.创建DataSet的实例;4.使用Fill方法将数据库中的表填充到DataSet的表中;5.利用DataGridView或者其他控件对象编辑或显示数据;6.需要的话,使用Update方法更新数据库。S

9、qlDataAdapter对象通过SelectCommand、InsertCommand、UpdateCommand和DeleteCommand属性为后台数据库提供对应的操作命令,并传递需要的参数。一般情况下,只需要提供SELECT语句和连接字符串创建SqlDataAdapter对象,然后利用SqlCommandBuilder对象生成InsertCommand、UpdateCommand和DeleteCommand属性。4.4 DataTable对象 ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更

10、新数据源。DataTable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。可以直接将数据从数据库填充到DataTable对象中,也可以将DataTable对象添加到现有的DataSet对象中。在断开连接的方式下,DataSet对象提供了和关系数据库一样的关系数据模型,代码中可以直接访问DataSet对象中的DataTable对象,也可以添加、删除DataTable对象。1. 创建DataTable对象可以通过以下两种方式创建DataTable对象:1) 通过DataTable类的构造函数创建DataTable对象,例如:DataTable table = new Data

11、Table();2) 通过DataSet的Tables对象的Add方法创建DataTable对象,例如:DataSet dataset = new DataSet();DataTable table = dataset.Tables.Add(MyTableName);2. 在DataTable对象中添加列在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column属性中的Add方法。添加后的每一列都是一个DataColumn对象。3. 设置DataTable对象的主键关系数据库中的表一般都有一个主键,用来惟一标识表中的每一行记录。通过DataTable对象的Prim

12、aryKey属性可以设置Datatable的主键。主键可以是一个或者多个DataColumn对象组成的数组。例如:DataColumn key = new DataColumn1;/dt是一个DataTable对象key0 = dt.Columns0;dt.PrimaryKey = key;4. 在DataTable对象中创建行DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对象添加到表中5. 将SQL Server数据库中的表填充到Da

13、taTable中除了可以直接创建DataTable对象的行列信息外,也可以通过DateAdapter对象的Fill方法将SQL Server数据库中的表填充到DataTable对象中。4.5 DataSet对象1. 创建DataSet对象使用创建的DataSet对象可以完成各种数据操作,利用向导生成的数据库数据源是一个强类型的DataSet以及一对或多对强类型的DataTable和TableAdapter的组合。类型化的DataSet是一个生成的类,是从.NET Framework的一般DataSet类衍生来的,但提供了已定义的架构以及特定于该架构的属性和方法。同时,对于DataSet中的每个

14、表,还生成了特定于该DataSet的附加衍生类,而且每个类都为相关的表提供了特定的架构、属性和方法。当然,也可以直接创建一般的DataSet对象,例如:DataSet myDataset = new DataSet();2. 填充DataSet对象创建DataSet后,就可以使用SqlDataAdapter对象把数据导入到DataSet对象中,比如通过Fill方法将数据填充到DataSet中的某个表中。5.设计与实现(包括每个设计点的文字描述,图表,关键代码) (该说明在最终报告里面要删除!)5.1登录界面在登录界面(图5-1)用户对应相应的权限选择用户类型进行登录,分教员、学生、管理员。登录

15、后根据选择的权限进入相应的界面。输入用户名框非空,密码框非空,权限选择判断;登录界面还有新用户注册,同样是选择不同用户类型进行注册。注册后需管理员激活才能登录。还有一个就是找回密码,用户通过输入用户名和姓名等信息找回密码。 图5-1登录界面代码: if (ValidateInput() / 验证输入成功 string message = ; / 验证输入的密码 if (loginBll.ValidateUser(txtLoginId.Text.Trim(), txtLoginPwd.Text, cboLoginType.Text, ref message) / 记录登录用户名和登录类型 Use

16、rHelper.loginId = txtLoginId.Text; UserHelper.loginType = cboLoginType.Text; if (cboLoginType.Text = 教师) / 创建教员主窗体对象 TeacherForm teacherForm = new TeacherForm(); / 显示窗体 teacherForm.Show(); else if (cboLoginType.Text = 学生) StudentForm studentForm = new StudentForm(); studentForm.Show(); else AdminFor

17、m adminForm = new AdminForm(); adminForm.Show(); / 登录窗体隐藏 this.Visible = false; 5.2教师管理界面在教师管理界面(图5-2)中有以下菜单和按钮:*选择题目(图5-3):右键选择题目加入到新建的试卷中;*成绩管理(图5-4)选择不同的试卷进行查询,读取数据到DataSet,然后用DataSet中数据计算该试卷的平均分;也可以直接修改DataSet中表的数据,然后保存。增加试题:先输入好题目,然后提交,将数据插入数据库中;还有一些其它的功能,查询试题:按科目查询试题;试题管理:按难度查询试题列表,并可增加、修改试题。试

18、题列表,按难度查询试题列表,并可增加、修改试题然后保存,将数据保存到数据库; 图5-2 图5-3 图5-4教师管理界面代码:/ 点击时,打开新增试题窗体 private void tsmiAddQuestion_Click(object sender, EventArgs e) / 创建窗体对象 AddQuestionForm addQuestionForm = new AddQuestionForm(); / 设置 MDI 主窗体 addQuestionForm.MdiParent = this; / 显示窗体 addQuestionForm.Show(); / 点击菜单中的“帮助”-”关于

19、”,以模式窗口显示 About 窗体 private void tsmiAbout_Click(object sender, EventArgs e) AboutForm aboutForm = new AboutForm(); aboutForm.MdiParent = this; aboutForm.Show(); / 以模式窗口显示 / 窗体加载事件处理 private void TeacherForm_Load(object sender, EventArgs e) / 设置状态栏标签显示的文字 lblTeacher.Text = string.Format(教员0登录了!, User

20、Helper.loginId); private void TeacherForm_FormClosed(object sender, FormClosedEventArgs e) Application.Exit(); private void btnSearchQuestion_Click(object sender, EventArgs e) CheckTitles CT = new CheckTitles(); CT.Show(); private void btnQuestionList_Click(object sender, EventArgs e) / 创建窗体对象 TestL

21、ist tForm = new TestList(); / 设置 MDI 主窗体 tForm.MdiParent = this; / 显示窗体 tForm.Show(); 选择题目代码: /选择题目窗口 private void TestList_Load(object sender, EventArgs e) dataSet=getDataSetBll.GetAllQuestion(ref dataAdapter); dataSet2 = getDataSetBll.GetSelectedQuestion(ref dataAdapter2, ExamId); dgvTest.DataSour

22、ce =dataSet.TablesQuestion; txtExamName.Text = CreateTestForm.ExamName; ExamId = CreateTestForm.ExamId; /刷新 private void button1_Click_1(object sender, EventArgs e) dataSet.TablesQuestion.Clear(); dgvTest.DataSource = getDataSetBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter);

23、 /将选中的题目加入试卷中 private void tsmAddQuestion_Click(object sender, EventArgs e) string message=; int sum = dgvTest.SelectedCells.Count; for (int i = 0; i sum;i+) string QuestionId = dgvTest.SelectedCellsi.Value.ToString(); message = createTestBll.AddQuestion(ExamId, QuestionId, ref ExamSum); txtExamSum.

24、Text = ExamSum.ToString(); MessageBox.Show(message); /将选中的题目从试卷中删除 private void tsmDeleteQuestion_Click(object sender, EventArgs e) string message=; int sum = dgvTest.SelectedCells.Count; for (int i = 0; i sum; i+) string QuestionId = dgvTest.SelectedCellsi.Value.ToString(); message = createTestBll.

25、DeleteQuestion(ExamId, QuestionId, ref ExamSum); txtExamSum.Text = ExamSum.ToString(); MessageBox.Show(message); /已选择题目列表 private void btn_Click(object sender, EventArgs e) dataSet2.TablesQuestion.Clear(); dataSet2 = getDataSetBll.GetSelectedQuestion(ref dataAdapter2,ExamId); dgvSelectedQuestion.Dat

26、aSource = dataSet2.TablesQuestion; private void button3_Click(object sender, EventArgs e) this.Close(); 成绩管理代码:/成绩管理的窗口 private void TestGradeManageForm_Load(object sender, EventArgs e) ExamId = cboExamId.Text.ToString(); dataSet = getDataSetBll.GetScore(ref dataAdapter,ExamId); /加载examId foreach (D

27、ataRow row in dataSet.TablesScore.Rows) foreach(string item in cboExamId.Items) if (item.ToString().Equals(rowexamId.ToString() goto con; cboExamId.Items.Add(rowexamId.ToString(); con: ; dgvScore.DataSource = dataSet.TablesScore; private void btnSearch_Click(object sender, EventArgs e) /查询成绩 ExamId

28、= cboExamId.Text.ToString(); dataSet.TablesScore.Clear(); dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId); dgvScore.DataSource = dataSet.TablesScore; int sum = 0,i=0,avgScore=0; foreach (DataRow row in dataSet.TablesScore.Rows) sum += int.Parse(rowscorevalue.ToString(); i+; if(i!=0) avgSco

29、re = sum / i; txtAvgScore.Text = avgScore.ToString(); /刷新 private void btnRefresh_Click(object sender, EventArgs e) dataSet.TablesScore.Clear(); dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId); /保存 private void btnSave_Click(object sender, EventArgs e) DialogResult result = MessageBox.Show

30、(确定); if (result = DialogResult.OK) SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter); dataAdapter.Update(dataSet, Score); 5.3管理员管理界面管理员管理界面(图5-5):通过选择不同的菜单和按钮进入不同的界面,用户管理,其中有新建用户(新学员用户,新建教员用户)。 查询及修改学员(图5-6):用DataSet读取数据到DataGridView。 用户信息列表,包括查询以及教员学员信息。 题库管理,管理试题库 。 图5-5 图5-6学员信息界面代码

31、:/学员窗口 private void TestList_Load(object sender, EventArgs e) dataSet=StudentListBll.GetAllQuestion(ref dataAdapter); dgvTest.DataSource = dataSet.TablesStudent; /刷新 private void button1_Click(object sender, EventArgs e) dataSet.TablesStudent.Clear(); dataAdapter.Fill(dataSet, Student); /保存 private

32、void button2_Click(object sender, EventArgs e) DialogResult result = MessageBox.Show(确定); if (result = DialogResult.OK) SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter); dataAdapter.Update(dataSet, Student); /按性别查询 private void cboDifficulty_SelectedIndexChanged(object sender, EventArg

33、s e) dataSet.TablesStudent.Clear(); dgvTest.DataSource = StudentListBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter); private void button3_Click(object sender, EventArgs e) this.Close(); 5.4学生考试界面学生在线考试界面(图5-8):通过选择不同的菜单和按钮进入不同的界面:在线答题界面(图5-9):可以选择已激活试卷答题。还有维护个人信息 :对个人信息进行查询,修

34、改 ;在线评分。保存考试成绩可供教师查询。 图5-8 图5-9学生在线考试界面代码: public partial class StudentForm : Form public StudentForm() InitializeComponent(); private void tsbOnlineAnswer_Click(object sender, EventArgs e) SelectExamForm sExamForm = new SelectExamForm(); sExamForm.MdiParent = this; sExamForm.Show(); private void ts

35、bOnlineAnswer_Click(object sender, EventArgs e) AnswerQuestionForm aQuestionForm = new AnswerQuestionForm(); aQuestionForm.MdiParent = this; aQuestionForm.Show(); 回答问题界面代码: /“答题卡”按钮 private void btnAnswerCard_Click(object sender, EventArgs e) AnswerCardForm answerCardForm=new AnswerCardForm(); answe

36、rCardForm.Show(); /窗体加载事件 private void AnswerQuestionForm_Load(object sender, EventArgs e) dataSet = getDataSetBll.ExamLoad(ref dataAdapter, ref ExamId); /将题目放入strExam中 foreach (DataRow row in dataSet.TablesQuestion.Rows) strExamj, 0 = rowQuestion.ToString(); strExamj, 1 = rowOptionA.ToString(); str

37、Examj, 2 = rowOptionB.ToString(); strExamj, 3 = rowOptionC.ToString(); strExamj, 4 = rowOptionD.ToString(); strExamj, 5 = rowAnswer.ToString(); j+; lblQuestion.Text += Convert.ToString(questionIndex + 1); DisplayQuestion(questionIndex); /显示题目及选项 public void DisplayQuestion(int i) txtQuestion.Text =

38、strExami,0; rdoA.Text = rdoA.Text+strExami,1; rdoB.Text = rdoB.Text+strExami,2; rdoC.Text = rdoC.Text+strExami,3; rdoD.Text = rdoD.Text+strExami,4; /“下一题”按钮事件,为studentAnswers数组赋值 private void btnNext_Click(object sender, EventArgs e) lblQuestion.Text = 问题; rdoA.Text = A.; rdoB.Text = B.; rdoC.Text =

39、 C.; rdoD.Text = D.; if (questionIndex j-1) MessageBox.Show(试题已答完,你可以点击按钮进行查看, 提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return; lblQuestion.Text += Convert.ToString(questionIndex + 1); DisplayQuestion(questionIndex); /记时器控件的Tick事件 private void tmrCostTime_Tick(object sender, EventArgs

40、e) int minute; int second; if (QuizHelper.remainSeconds 0) QuizHelper.remainSeconds-; minute = QuizHelper.remainSeconds / 60; second = QuizHelper.remainSeconds % 60; lblTimer.Text = string.Format(0:00:1:00, minute, second); else tmrCostTime.Stop(); MessageBox.Show(时间到了,该交卷了!,提示,MessageBoxButtons.OK,

41、MessageBoxIcon.Warning); QuizResultForm quizResultForm=new QuizResultForm(); quizResultForm.MdiParent=this.MdiParent; quizResultForm.Show(); this.Close(); /判断用户选择的答案 public string GetStudentAnswer() string answer = ; if (rdoA.Checked) answer = A; else if (rdoB.Checked) answer = B; else if (rdoC.Chec

42、ked) answer = C; else if (rdoD.Checked) answer = D; else MessageBox.Show(请选择一项答案); return answer; 6.总结这次实验开发的是一个小型的学生考试管理系统。由于第一次做这样的学生考试管理系统,所以做起来困难重重,很多东西需要我们去发掘,就算是借一本书看完它,我们还是会发现还有很多知识没有吃透,这需要我们不断的实践,不断地自学习,不断地发现问题去思考问题并且解决问题。本次课程设计主要的还是使用了这学期所学的ADO.NET知识和上学期学的SQL查询知识。本次程序开发主要是用了清明的三天假期时间,总体使用时间

43、为五天。本次课程设计有不少的收获,其中也有一些问题。本次课程设计中我是先画了一个流程图,画出要用到的每个界面,以及这些界面上要实现的功能,然后我是就开始写程序,设计中我遇到了各种各种各样的问题,我就使用联机帮助文档查找我要资料,基本上都可以解决的,还有一些找不到的我就到网络上去找,我是一边写程序一边查询各种各样的资料,慢慢的把课程设计做完了。经过不断地测试,不断地改进,其中还是发现了不少问题,第一次做这些工作,没有任何经验,甚至无从下手,从中也学到了一些代码的写法,为什么要这样写,通过和同学的讨论,找到一些书本上没有的方法,如使用三层结构时要读取数据,一般使用DataSet会比较好,读取数据后

44、放到DataSet中,然后返回DataSet,在表示层要读取或者写入数据时,直接在DataSet中进行,在最后再将数据保存到数据库中,这样在三层结构中不用传递太多的参数,一般只要传递一个DataSet就可以了,使代码更加的简单、思路更加的清晰,但是在实现登录和注册时,就不要用DataSet了。DataSet是线程安全的,也就是没有并发的可能性,所有的写操作必须是同步的,也就是所有的请求都会排好队逐个执行。但可以使用不同的dataset分别访问同一个数据库实现并发。还有怎样从数据库中将数据提取出来放到一个文本框或者标签内,这些东西是组成界面的东西,虽然小,但是可以体现整个软件的水平,其实并不需要

45、建多少数据库的表,写多少复杂的存储过程,是不是用了数据库函数,触发器等等,但是至少要弄明白这些东西如果操作,清晰思路才能将功能分清晰。比如,我在做读取数据库中题目时就遇到了问题,不能将题目读出来,我用各种语句去写,但是也不行,而且做起来很是麻烦,思路也不清晰,后来我把有些要做的数据处理直接在读取数据时,在SQL语句中实现了,这样不但代码简单了,而且思路也是清晰了。经过一段时间的学习与实践,学生考试管理系统基本上开发好了。该系统具备了:登录界面,新用户注册,教师管理界面,管理员管理界面,学生在线考试 。该学生考试管理系统使用三层结构进行开发的,三层结构的好处就是使程序员能更加清晰的开发程序,别人看时,也会比较容易的看懂。作为一个学生考试管理系统,本系统所提供的功能的确太少了一些,仅仅只实现了一些基本的功能,有很多地方还有待扩展和改良。人如果没有自信,没有目标,没有信心就不可能把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标,大学毕业出去即是面临找工作,从学习这个专业,到以后做这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们以后的工作需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想。7.参考资料 Glenn Johnson,ADO.NET 2.0 高级编程,清华大学出版社,2006年5月

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!