学生学习成绩管理系统

上传人:沈*** 文档编号:114341789 上传时间:2022-06-28 格式:DOC 页数:148 大小:266KB
返回 下载 相关 举报
学生学习成绩管理系统_第1页
第1页 / 共148页
学生学习成绩管理系统_第2页
第2页 / 共148页
学生学习成绩管理系统_第3页
第3页 / 共148页
亲,该文档总共148页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date学生学习成绩管理系统中南大学中南大学本科生课程设计报告书题 目学生学习成绩管理系统学生姓名学 院信息科学与工程学院专业班级C语言程序设计实践报告一、设计实践的目的、任务与要求本设计实践是 “C语言程序设计”课程学习的一个关键环节。它是根据教学计划的要求,在教师的指导下,对学生实施程序设计训练的必要过程,是对前期课堂学习内容的综合应用及其效果的检验和提高。其目的在于培养学生综合运用理论知识来分析和解决实际问题的能力、以及严谨的科学态度和良好的程序设计习惯。本次设计实践,要求设计者基于结构化程序设计思想和所用C语言开发环境与工具,并运用“软件工程”和“数据结构”中的有关概念和方法,针对具体设计题和要求,分析功能要求,划分功能模块,用链表结构设计功能模块函数,以菜单方式调用相应功能模块来实现信息和数据处理。本次设计时间为二周,要求独立完成,具体任务如下:1、学习、掌握采用结构化程序设计思想进行Turbo C(或Win TC,VC)环境下程序设计的方法;另外学习C语言简单图形语句以及简单图形界面设计(参见参考文献5、6)。2、采用C语言设计一个“学生学习成绩管理系统”,上机编程、调试并演示该管理系统中的各功能模块(具体内容见四)。3、设计完成后,每人必须按时提交与验收程序一致的、能按设计功能和性能要求运行的程序的清单,一份关于本次程序设计和使用介绍的纸质文档即程序设计、使用说明书及个人总结(实践心得、体会等)。二、任务“学生学习成绩管理系统”的基本功能说明“学生学习成绩管理系统”用于对学生学习成绩数据文件的新文件创建和老文件管理,并可以进行密码设置。具体要求实现的功能如下:1、输入添加记录:将每一个学生的学号、姓名和各科学习成绩作为一个记录进行输入或添加。要求经过密码验证后能建立一个新的数据文件或给已建立好的数据文件增加记录。2、显示、查询记录:能按学生姓名(或学号)显示、查询一个或多个学生的各门(或某门)功课的成绩和平均成绩。3、修改记录:可以对数据文件中的任意记录的数据进行修改,在修改前后对该记录的内容进行显示,并设确认提示。(要求设置密码,验证通过后方可进入修改环节)4、删除记录:可以删除数据文件中的任一记录,包括逻辑删除(具有恢复功能)和物理删除(不可恢复)。(说明:该功能也应设置为经过验证密码后才可实施删除)5、成绩排序:采用不同的排序方法对单科成绩和总(或平均)成绩进行排序,但不能改变原记录的顺序。6、统计功能:(A)计算各门课程全班总成绩及平均成绩;(B)统计各门课程得分为100、9099、8089、7079、6069和不及格学生的人数,以及与全班总人数的百分比。7、数据文件保存和上载功能:能按文件名保存已建立的或修改的整体记录数据,能按文件名上载/倒入保存在磁盘的整体记录数据。8、其他:该软件应具有系统名称、设计单位或个人等基本信息。三、此程序的功能存储学生的成绩信息,可以添加、显示、排序、查询、修改、删除、恢复、统计学生的信息,运行程序时,先输入专业班级,如果没有对应的文件,进入操作完成后,选择保存或退出系统并保存所做更改时,程序将创建一个和你输入的专业班级同名的文件存储你输入或改变的学生信息,如果有对应的文件,你进入操作时,程序将找到相关文件,读取文件里面的信息。如果是第一次进入,先设置密码,连续两次输入相同的密码,如果不是第一次进入,要输入原来设置的密码,进入后根据提示选择序号进行相关操作,操作过程中,如果输入错误信息,程序可以处理输入的一些错误信息,如果想中途保存,可以选择保存,再进行其它操,也可以最后退出程序时,选择退出系统并保存;如果并不想保存此前的操作,可以选择退出系统不保存。可以对存储被删除学生信息的文件进行删除操作,但要在没有调用删除和恢复函数之前,如果在调用删除和恢复函数之后操作,将提示“数据正在被使用,请下次启动程序时再清理,按任意键返回”。四、程序设计方案1、数据结构 采用链表存储学生的基本信息,包括学号、姓名、学生成绩2、整体设计思想 在main主函数中定义一个结构体指针变量head,对于添加、修改、删除这样的函数,有参数,它们的实参都为head,返回值也赋给head,对于排序函数有参数,实参也为head,但不对head直接处理,因为我们并不希望经过排序后就改变原有学生逻辑顺序,对于排序这样的函数所需的变量,由head提供学生信息,再创建另外一个链表,然后排序函数再对这个新链表处理,处理后不返回任何值 。head在各函数之间传递信息,每个函数运行后,都要保证head要么为NULL(没有学生成绩信息),要么为学生成绩的最新信息。在启动程序的时候把NULL赋给head,当head变量作为一个实参数传递给函数时,此时head为NULL,函数对head变量不做任何处理,而读取已经保存在文件里的已有学生信息进行处理,如果文件里也没有学生信息,则返回到主界面;如果文件里有学生信息,根据函数的功能对学生进行处理,再把函数返回的学生信息赋给head,此时head存有学生的最新信息,此时如果head做为实参传递给函数时,函数对head进行处理,而不关心原来已经存在文件里的学生信息。对于被删除的学生信息用全局变量delstu存储,基本思想和head一样。学生学习成绩管理 系统输入或添加记录显示查询和统计修改记录删除记录成绩排序恢复已删除记录保存退出系统并保存退出系统不保存清理被删除的 学生记 录重置密码 学生成绩管理系统示意图 readfile()insert ()main( ) create ( )check( )modify()delselect()show()recover()cleandelnum()savereplace()exit(0)recreate()index()checkmenu()readfile()modifymenu()index()readfile()index() del()recreate()sort()readfile()readdelnum()index()del() insert()readfile()readdelnum()savedelnum()index()del() 学生成绩管理系统程序结构示意图 3、具体函数实现 void mainmenu();用来显示程序的主菜单void checkmenu();用来显示查询和统计函数的子菜单void sortmenu();用来显示排序函数的子菜单void modifymenu();用来显示修改函数的子菜单struct student *readfile();从原有文件中读取学生信息,创建链表,输出链表头,如果没有学生信息,输出NULLstruct student *readdelnum(); 读出delnum文件所存储的被删除的学生信息,创建链表,输出链表头,如果没有被删除的学生信息,输出NULL void print(struct student *);输入链表,显示链表里的学生信息void printone(struct student *);输入链表,只显示链表头的信息void savedelnum(struct student *head)把被删除的学生信息保存到delnum文件中,并替换原文件void savereplace(struct student *);以写入的方式把链表head存储的信息保存在student文件里struct student *insert ();输入新的学生信息,并根据学号插入struct student *recreate(struct student *head);输入一个链表头head,重新创建一个新链表,如果输入的链表头head为NULL与a=1, (即delselect函数被调用过),则输出NULL;如果输入的链表头head为NULL与a=0,则输出readfile()返回的链表;如果输入的链表head不为NULL,则用head存储的学生信息重新创建一个新链表,输出新链表的表头。struct student *index(struct student *,long);参数为链表头head和学生学号,根据输入的学生学号,找到此学号并输出此学号的结构体指针变量,如果找不到或head等于NULL,输出NULL。struct student *del(struct student *,long);参数为链表头head和学生学号,根据输入的学生学号,找到此学号并删除此学生的信息,输出链表头head。 struct student *create (struct student *);输入一个链表头head,如果head为NULL与a=0,head= readfile(),然后输入学生的信息,把输入的学生信息根据学号插入到head链表;输出head void show(struct student *);输入一个链表头head,然后把参数传递给struct student *recreate(struct student *head);得到一个新链表,再把新链表传递给排序函数struct student *sort(struct student *);得到排序后的链表,然后用void print(struct student *)函数显示排序后的链表内容。 struct student *modify(struct student *);输入一个链表头head,如果head的输出等于NULL与a=1,输出NULL;如果head等于NULL与a=0 ,把readfile()的输出赋给head;把head和输入要修改的学号传递给函数struct student *index(struct student *,long); 如果index()的输出为NULL,输出head;如果index()的输出不为NULL,把index()输出链表头的信息赋给函数中的变量struct student *p;然后输入要修改的学生信息赋给变量p,调用printone()函数显示修改后的学生信息,在把p存储的修改后的学生信息赋给index()输出的链表头;最后输出head。struct student *delselect(struct student *);输入一个链表头head,如果head等于NULL与a=1,输出NULL;如果head等于NULL与a=0 ,把readfile()的输出赋给head;如果delstu=NULL与b=0,把readdelnum()的输出赋给delstu,把head和输入要删除的学号传递给函数struct student *index(struct student *,long);如果 index()的输出为NULL,则跳过del函数;如果index()的输出不为NULL,把index()输出链表头的信息赋给函数中的变量struct student *p,然后调用struct student *del(struct student *head,long num)函数删除该学号的信息,最后把p中的信息放到存储被删除学生的链表中; void check(struct student *head)输入一个链表头head,然后把参数传递给struct student *recreate(struct student *head);得到一个新链表,如果新链表为NULL,则退出函数;如果新链表不为NULL,用print()函数显示学生信息,然后选择序号进行查询或显示统计结果。struct student * recover(struct student *);输入一个链表头head,如果head等于NULL与a=0,把readfile()的输出赋给head,如果delstu=NULL与b=0,把readdelnum()的输出赋给delstu,把delstu和要恢复的学号传递给函数struct student *index(struct student *,long);如果 index()的输出为NULL,则跳过del函数;如果index()的输出不为NULL,把index()输出链表头的信息赋给函数中的变量struct student *p,然后调用struct student *del(struct student *head,long num)函数删除该学号的信息,最后把p中的信息放到存储学生信息的head链表中;void cleandelnum()从delnum文件中把被删除的学生彻底删除,此函数只有在delselect函数和recover函数在被调用之前使用,如果在delselect函数和recover函数在被调用之后使用,在主函数退出系统并不保存时,delnum文件中的信息已经被改变。 void code(); 采用文件保存输入的密码,第一次使用时先设置密码,不是第一次使用时,输入以前的密码五、程序调试过程 程序编好后,在进行测试的过程中,当输入多个学生信息进行测试时,发现在调用index函数后,再调用print函数显示时,将输出该学生以及后面的学生的信息,所以重新写了一个printone函数。对于recover函数,当head为NULL,如果进行恢复操作,返回意料之外的值,把原来的语句head1=head; while(head1-next!=NULL) head1=head1-next; head1-next=q; 改为:head1=head; if(head=NULL) head=q; else while(head1-next!=NULL) head1=head1-next; head1-next=q; 为了实现退出系统并不保存功能,把原来delselect函数和recover函数里的用来保存被删除和被恢复学生信息的函数save函数(直接对文件进行写入操作),改为定义一个全局变量delstu来保存此信息。当用一个学生信息进行测试时,发现如果调用delselect函数把这个学生信息删除,再进入别的函数,此时在别的函数里还能发现此学生的信息,保存时,此学生信息也被保存在student文件中,再用多个函数进行测试,发现如果调用delselect不把学生信息全部删除,程序运行结果跟意料的一样;如果全部删除,再进入别的函数后,则学生信息全部都不能删除,不进入别的函数,直接保存,则运行结果跟意料的一样。对这样的结果进行分析,发现是由于当head=NULL时,将从student文件中读取信息,并赋给head,由于此时文件中还有一个学生信息(由于此时删除操作还没有被保存),这个学生的信息被存到head中,最后保存时又把它保存在student文件中,所以定义了两个全局变量a和b,用来标记程序是否调用过delselect函数和recover函数,并把判断条件改为head=NULL&a=0来判断是否要从student文件中读取信息。六、测试结果 1.输入或添加记录2.显示、查询和统计3.修改记录4.删除记录5.成绩排序6.恢复已删除记录七、心得体会编程时要注意细节,比如说链表末尾的指针要为NULL,如果以写的方式打开一个文件,不做写入数据操作,原文件里的信息将被删除。对于函数要考虑输入参数的各种取值情况。调试时要有耐心,当输出和期望的不同时,仔细分析程序的运行过程,通过在原程序中加入一些辅助显示函数,找出出错的地方。提示:code()函数和 resetcode()函数独立运行时能正常使用,但加到这个程序时, code()函数能正常使用,resetcode()函数不能正常使用。源程序#includestdio.h#includeconio.h#includedos.h#includestring.h#include stdlib.h#define LEN sizeof(struct student)struct student long num; char name15; int math; int english; int computer; struct student *next; ;struct student *delstu=NULL;int a=0; int b=0; char chselect20,chdel20=d,password20=c;void mainmenu();struct student *create(struct student *);struct student *insert(struct student *,struct student *);void print(struct student *);struct student *readfile();struct student *index(struct student *,long);struct student *sort(struct student *);void sortmenu();struct student *recreate(struct student *);void show(struct student *);void modifymenu();struct student *modify(struct student *);void printone(struct student *);void savereplace(struct student *);struct student *del(struct student *,long);struct student *delselect(struct student *);void checkmenu();void check(struct student *);struct student *readdelnum();struct student * recover(struct student *);void savedelnum(struct student *);void cleandelnum();void code();void resetcode();main() int i; struct student *head=NULL; printf(nnnnnn请输入专业班级:); gets(chselect); strcat(chdel,chselect); strcat(password,chselect); system(cls); fflush(stdin); code(); while(1) mainmenu(); scanf(%d,&i); switch(i) case 1:system(cls);head=create(head);system(cls);print(head);puts(tt按任意键返回);getch();break; case 2:system(cls);check(head);break; case 3:system(cls);head=modify(head);break; case 4:system(cls);head=delselect(head);break; case 5:system(cls);show(head);break; case 6:system(cls);head=recover(head);getch();break; case 7:system(cls);cleandelnum();break; case 8:system(cls);fflush(stdin);resetcode();break; case 9:system(cls);if(head!=NULL|a=1) savereplace(head); if(delstu!=NULL|b=1) savedelnum(delstu); puts(nnnnnnnttt数据成功保存); getch();break; case 10:system(cls);puts(nnnnn); if(head!=NULL|a=1) savereplace(head); print(head); if(delstu!=NULL|b=1) savedelnum(delstu); puts(ttt数据成功保存); exit(0); case 11:system(cls);if(head!=NULL) puts(ttt更改的数据没有保存); exit(0); void mainmenu()/*主函数的菜单*/ system(cls); puts(nnn); puts(ttt欢迎使用学生学习成绩管理系统! ); puts(ttt 设计人:吕有仓); puts(ttt 学 号:0909080217); puts(ttt 请选择序号进行相关操作n); puts(ttt 1.输入或添加记录); puts(ttt 2.显示、查询和统计); puts(ttt 3.修改记录); puts(ttt 4.删除记录); puts(ttt 5.成绩排序); puts(ttt 6.恢复已删除记录); puts(ttt 7.清理被删除学生记录); puts(ttt 8.重置密码); puts(ttt 9.保存); puts(ttt 10.退出系统并保存所做更改); puts(ttt 11.退出系统不保存所做更改);struct student *create(struct student *head) /*输入学生信息并创建一个新链表 */ struct student *p1; char judge; if(head=NULL&a=0) head=readfile(); do p1=(struct student *)malloc(LEN); printf(请输入学生的学号:); fflush(stdin); scanf(%ld,&p1-num); printf(请输入学生的姓名:); fflush(stdin); scanf(%s,p1-name); printf(请输入学生的数学成绩:); fflush(stdin); scanf(%d,&p1-math); printf(请输入学生的英语成绩:); fflush(stdin); scanf(%d,&p1-english); printf(请输入学生的计算机成绩:); fflush(stdin); scanf(%d,&p1-computer); head=insert(head,p1); printf(是否继续添加,y或Y继续,否则退出!); fflush(stdin); scanf(%c,&judge); while(judge=y|judge=Y); return head;struct student *insert(struct student *head,struct student *pn) struct student *pc,*pa; pc=pa=head; if(head=NULL) head=pn; pn-next=NULL; return head; if(pn-numnum) pn-next=head; head=pn; return head; while(pc-next!=NULL&pn-numpc-num) pa=pc; pc=pc-next; if(pn-numpc-num) pc-next=pn; pn-next=NULL; else pn-next=pc; pa-next=pn; return head; void print(struct student *head)/*显示链表里的所有信息*/ struct student *p; float sum,average; p=head; printf(学号tt姓名tt数学t英语t计算机t总分t平均分n); while(p!=NULL) sum=p-math+p-english+p-computer; average=sum/3; printf(%-16ld%-16s%-8d%-8d%-8d%-8.1f%-8.1fn,p-num,p-name,p-math,p-english,p-computer,sum,average); p=p-next; void printone(struct student *head)/*仅显示链表头的信息*/ struct student *p; float sum,average; p=head; sum=p-math+p-english+p-computer; average=sum/3; printf(学号tt姓名tt数学t英语t计算机t总分t平均分n); printf(%-16ld%-16s%-8d%-8d%-8d%-8.1f%-8.1fn,p-num,p-name,p-math,p-english,p-computer,sum,average);void savereplace(struct student *head) /*把被改动后的学生信息保存到student文件中,并替换原文件*/ FILE *fp; struct student *p; fp=fopen(chselect,wb); p=head; while(p!=NULL) fwrite(p,LEN,1,fp); p=p-next; fclose(fp);void savedelnum(struct student *head)/*把被删除的学生信息保存到delnum文件中,并替换原文件*/ FILE *fp; struct student *p; fp=fopen(chdel,wb); p=head; while(p!=NULL) fwrite(p,LEN,1,fp); p=p-next; fclose(fp);struct student *readfile()/*读出student文件中学生的信息,创建一个链表*/ FILE *fp; struct student *head,*p,*q; if(fp=fopen(chselect,rb)=NULL) return NULL; head=NULL; q=(struct student *)malloc(LEN); while(fread(q,LEN,1,fp)=1) q-next=NULL; if(head=NULL) head=q; p=head; else p-next=q; p=p-next; q=(struct student *)malloc(LEN); free(q); fclose(fp); return(head);struct student *readdelnum()/*读出delnum文件中的学生的信息,创建一个链表*/ FILE *fp; struct student *head,*p,*q; if(fp=fopen(chdel,rb)=NULL) return NULL; head=NULL; q=(struct student *)malloc(LEN); while(fread(q,LEN,1,fp)=1) q-next=NULL; if(head=NULL) head=q; p=head; else p-next=q; p=p-next; q=(struct student *)malloc(LEN); free(q); fclose(fp); return(head);struct student *index(struct student *head,long num)/*输入学生学号,找到学生在链表中的位置*/ struct student *p1,*p2; if(head=NULL) printf(没有学生信息,请返回建立学生信息);return head; else p1=head; while(num!=p1-num&p1-next!=NULL) p2=p1;p1=p1-next; if(num=p1-num) return(p1); else printf(此学号不存在,请按任意键返回);return NULL; void sortmenu() system(cls); puts(nnnnn); puts(ttt 请选择序号进行相关操作n); puts(ttt 1.按学生数学成绩查看); puts(ttt 2.按学生英语成绩查看); puts(ttt 3.按学生计算机成绩查看); puts(ttt 4.按学生总成绩查看);struct student *recreate(struct student *head)/*输入一个链表,重新创建一个链表,用来查询和排序,不改变原来链表的逻辑位置信息*/ struct student *stu,*p,*q,*head1,*q1; stu=readfile(); if(head=NULL&a=1) return head; if(head=NULL&a=0) return stu; if(head!=NULL) p=head; head1=NULL; q=(struct student *)malloc(LEN); while(p!=NULL) q-next=NULL; q-num=p-num; strcpy(q-name,p-name); q-math=p-math; q-english=p-english; q-computer=p-computer; if(head1=NULL) head1=q; q1=head1; else q1-next=q; q1=q1-next; p=p-next; q=(struct student *)malloc(LEN); free(q); return head1; void show(struct student *head)/*显示排序后的学生信息*/ struct student *head1; char judge; head1=recreate(head); if(head1=NULL) puts(nnnnn); puts(没有学生信息,按任意键返回); getch(); else print(head1); puts(请按任意键进入查询); getch(); do head1=sort(head1); system(cls); print(head1); puts(是否继续查询,y或Y继续,否则退出); fflush(stdin); scanf(%c,&judge); while(judge=y|judge=Y); struct student *sort(struct student *head)/*实现按学号、成绩排序的函数*/ struct student *p,*x,*y,*f=NULL; struct student *temp; int k; temp=(struct student *)malloc(LEN); /*注意理解:我们增加一个节点,放在第一个节点的前面,主要是为了便于比较。因为第一个节点没有前驱,我们不能交换地址。*/ temp-next=head; /*让head指向temp节点,排序完成后,我们再把temp节点释放掉*/ head=temp; if(head-next = NULL) return head; do sortmenu(); scanf(%d,&k); while(k!=1&k!=2&k!=3&k!=4&k!=5); switch(k) case 1: while (f != head-next-next) for (p=temp=head; temp-next-next != f; temp= temp-next) if(temp-next-math temp-next-next-math) x=temp-next; y=x-next; temp-next=y; x-next=y-next; y-next=x; p=temp-next-next; f = temp-next; break; case 2: while (f != head-next-next) for (p=temp=head; temp-next-next != f; temp= temp-next) if(temp-next-english temp-next-next-english) x=temp-next; y=x-next; temp-next=y; x-next=y-next; y-next=x; p=temp-next-next; f = temp-next; break; case 3: while (f != head-next-next) for (p=temp=head; temp-next-next != f; temp= temp-next) if(temp-next-computer temp-next-next-computer) x=temp-next; y=x-next; temp-next=y; x-next=y-next; y-next=x; p=temp-next-next; f = temp-next; break; case 4: while (f != head-next-next) for (p=temp=head; temp-next-next != f; temp= temp-next) if(temp-next-math+temp-next-english+temp-next-computer temp-next-next-math+temp-next-next-english+temp-next-next-computer) x=temp-next; y=x-next; temp-next=y; x-next=y-next; y-next=x; p=temp-next-next; f = temp-next; break; temp = head; /*把temp的指向头结点*/ head = head-next; /*让head指向排序后的第一个节点*/ free(temp); /*释放temp*/ temp = NULL; /*temp置为NULL,保证不产生野指针,即地址不确定的指针变量*/ return head; void modifymenu()/*修改函数的菜单*/ system(cls); puts(nnnnn); puts(ttt 请选择序号进行相关操作n); puts(ttt 1.修改学生学号); puts(ttt 2.修改学生姓名); puts(ttt 3.修改学生数学成绩); puts(ttt 4.修改学生英语成绩); puts(ttt 5.修改学生计算机成绩);struct student * modify(struct student *head)/*输入学号后,找出学生信息,并修改*/ struct student *stu,*p,*q; long num; int k; char judge; q=readfile(); if(q=NULL&head=NULL)|(head=NULL&a=1) puts(nnnntt没有学生信息,按任意键返回); getch(); return NULL; if(head=NULL&a=0) head=q; do print(head); puts(nnnnn); printf(请输入要修改的学生学号:); scanf(%ld,&num); stu=index(head,num); if(stu=NULL) getch();return head; system(cls); puts(nnnnn); printone(stu); p=(struct student *)malloc(LEN); p-num=stu-num; strcpy(p-name,stu-name); p-math=stu-math; p-english=stu-english; p-computer=stu-computer; printf(按任意键进入修改); getch(); do modifymenu(); fflush(stdin); scanf(%d,&k); system(cls); switch(k) case 1:puts(nnnn); printf(请输入学生学号); fflush(stdin); scanf(%ld,&p-num); break; case 2:puts(nnnn); printf(请输入学生的姓名:); fflush(stdin); scanf(%s,p-name); break; case 3:puts(nnnn); printf(请输入学生的数学成绩:); fflush(stdin); scanf(%d,&p-math); break; case 4:puts(nnnn); printf(请输入学生的英语成绩:); fflush(stdin); scanf(%d,&p-english); break; case 5:puts(nnnn); printf(请输入学生的计算机成绩:); fflush(stdin); scanf(%d,&p-computer);
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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