




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉科技大学本科毕业设计题目毕业论文(设计)的远程网络化管理学院:专业:学号:学生姓名:指导教师:日期:二○一五年五月大学本科毕业设计绪论毕业论文的选题与管理工作是各个学校每年都会进行的工作。由于各个学校毕业生信息量庞大,课题形式丰富多彩,而目前大部分院校都仅依靠人工开展各项工作,处理起来诸多不便。同时由于信息的不公开化,学生不能及时了解选题情况及工作安排,老师也不能全面的了解学生论文的进展,这为毕业论文管理工作带来很大的困扰。随着科学技术的不断进步与提高[1],计算机技术的应用领域不断拓展,人们的生活越来越离不开计算机应用。作为计算机应用的一部分,使用计算机技术对学生的毕业设计工作进行管理,会大大的提高毕业设计(论文)管理的效率,方便各院校的科学、正规化管理教学工作。1.1课题研究的目标与意义为了减轻毕业设计导师的负担,实现毕业论文选题的公开透明化、高效便捷化,毕业论文管理系统就适时而生。同时考虑到当前手机移动设备的不断普及,故采用HTML5开发MobileWebApp[2]的形式开发该应用。下载该应用至手机后,学生与老师需注册账号信息,注册成功并登陆后,老师可以发表论文,学生可以查看论题并选题。本着服务学生、方便老师的原则,该系统除了实现基本的老师发题与学生选题功能外,各个指导老师还可以在系统内上传往届的优秀论文,方便学生查阅和参考。学生也可以通过此软件提交毕业设计的相关的开题报告、中期报告、论文等文档。在老师与学生的主页,将会由管理员采用消息推送的方式发布论文工作的相关通知与文件,用户可以定时查阅,以便了解论文工作的进展与要求。本应用紧密结合学生和老师的需求,老师和学生可以很方便在手机上完成毕业设计的相关工作。同时系统具有性能稳定、管理规范、操作高效、数据安全等特点,从而保证学院管理员对毕业论文工作进行科学、规范、有效的管理。1.2课题研究的知识背景在目前的软件开发中,尤其是应用系统的开发中,Java语言成为大部分开发人员的选择。因此开发本系统主要使用了HTML5、MobileWeb等技术,Java、JavaScript等开发语言,MySQL数据库,JqueryMobile、AJAX等框架进行开发,下面将逐一介绍.HTML5彻底颠覆了HTML4以呈现网页文本为主的功能定位,适应当前移动智能终端的强大功能,定位于提供一个功能完整、开放易用的网页应用平台技术[3]。基于HTML5开发的WebApp,完全可以不借助第三方插件就能实现丰富的交互操作以及多线程处理,使得WebApp能够完成复杂的操作任务[4]。相比于以往开发模式,基于HTML5的WebApp离线应用框架是更理想的移动应用方案,是系统的效率得到优化[5]。WebApp[6]实际上就是WebApplication,是指利用Web技术,配合Web浏览器,实现一个或多个任务的Web应用程序。通过Web浏览器,由Web技术实现出来的WebApp有别于传统的网站,它具有更丰富的交互体验。相对于原声应用(NativeApp)以及混合应用(HybridApp),WebApp具有下列优势。其一,WebApp是利用HTML、JavaScript、CSS等Web技术实现的应用程序,他能运行于多种平台之上,这恰恰是原生应用最大的缺点;其二,WebApp的技术实现成本低,它有效的解决了各个平台之间不同语言的学习成本问题。Java编程语言是一种面向对象的程序设计语言[7],它不仅简单,不依赖于机器的构造,而且具有可移植性,并且提供并发机制,性能特别高。此外,java语言能够最大限度利用网络,Java的小应用程序可在网络上传输而不受CPU和环境限制。java还可以为程序开发者提供丰富的类库[8],使用户可以很方便的建立自己的系统,用户也可以自己提出要使用的Java语言进行开发,可见,Java语言的发展已深入人心。AJAX全称为“AsynchronousJavaScriptandXML”(异步JavaScript和XML)
[9],是一种用于创建快速动态网页的网页开发技术,在无需重新加载整个网页的情况下,对网页的某个部分进行更新。它使用XHTML+CSS来标准化呈现;使用XML和XSLT进行数据交换及相关操作;使用XMLHttpRequest对象与Web服务器进行异步数据通信;
使用JavaScript操作Document
Object
Model进行动态显示及交互;
使用JavaScript绑定和处理所有数据。JavaScript脚本是Ajax技术中的另一个重要部分,JavaScript主要完成以下事情,创建XMLHttpRequest对象,通过XMLHttpRequest向服务器发送请求。创建回调函数,监视服务器响应状态,在服务器响应完成后,回调函数启动。回调函数通过DOM动态更新HTML页面。Navicat
for
MySQL是一套专为MySQL设计的强大数据库管理及开发工具。它可以用于任何3.21或以上的MySQL数据库服务器,并支持大部份MySQL最新版本的功能,包括触发器、存储过程、函数、事件、检索、权限管理等。NavicatforMySQL采用了图形用户界面(GUI),使信息的创建、组织、存取和共享方式更加简便和安全。用户可执行浏览数据库、建立和删除数据库、编辑数据、建立或执行SQLqueries、管理用户权限(安全设定)、将数据库备份或复原等操作。1.3论文安排和主要研究成果1.3.1内容安排论文共分六章。详细介绍了从需求分析到各个功能模块的设计与实现。简要介绍了本文的研究意义、开发知识背景、论文安排与主要研究成果以及本文的创新点。分三大节分别介绍了开发本应用所做的需求分析、系统主要功能模块设计及数据库设计,通过一系列功能关系图直观的展示了本应用给用户提供的功能。第3章详细介绍了用户注册与登录功能的实现。第4章全章分为四大节,分三个主要模块详细介绍教师部分的功能设计与实现。重点介绍教师发布选题及学生选题信息的确认的设计与实现。第5章全章分为四大节,也是分为三个主要模块,与教师部分功能相同的不再赘述,重点介绍了学生选题功能的设计与实现。第6章分四节介绍管理员部分用户管理、消息管理等功能的设计与实现。最后结束语部分是自己在毕业设计工作期间的一个总结,阐述了毕业设计工作的各个阶段所做工作、遇到的问题及解决的方法,最后指出设计中的未完成的设想与待改进的地方。1.3.2主要成果(1)实现了教师与学生的账号信息注册,教师、学生、管理员三种不同身份的用户登录本系统。(2)完成由教师发题到学生选题,最后教师确认学生选题信息这一整个流程的所有功能。这也是整个毕业设计的核心。(3)实现教师与学生查看论文详情,上传论文等文件,收藏优秀论文,教师根据答辩结果给学生的论文标示等级等功能。(4)实现教师、学生、管理员对个人信息的查看与修改,教师与学生个人收藏的论文的查看。(5)实现管理员对教师与学生的用户信息的管理,消息发布、消息管理等功能。1.4论文创新点本文的创新点主要体现在以下几个方面:第一,本文最大亮点就是采用比较新的HTML5移动应用技术开发了论文管理系统,实现移动互联。在方便教师与学生开展毕业论文工作的同时,利用HTML5强大的跨平台性大大降低了开发成本,丰富的标签体系也大大降低了应用开发的技术门槛。第二,采用一套样式代码实现在众多视口下自适配的缩放方式自适应布局方案,同时在本应用中实现了一个方法多次使用,降低了代码冗余和功能实现的复杂度。第三,在编码阶段,为了实现整个系统的功能按照面向对象方法学进行了类的设计,包括用InetAddress类来描述Internet地址类、URL类规范WWW资源网络定位地址的表示方法等[10]。第四,与以往后台管理员必须写成web电脑版不同,本文将后台管理员也写成手机版。管理员可以很方便的在手机上对用户等信息进行管理,不受地域与工具限制,使论文管理工作更加快捷高效。2需求分析与总体设计2.1需求和功能基本需求:实现毕业论文(设计)的远程网络化管理,移动互联,方便老师与学生在手机上就能完成毕业设计的各项工作。在做需求分析时,参考了许艳茹的《基于WEB的毕业论文管理系统》[11]。该系统应该分成教师、学生、管理员三个主要模块,以下是三个模块的基本功能:教师模块部分实现指导教师个人资料查询与修改,指导教师论文题目网上提交、查询,已确定学生及相关课题查询,待确定学生及相关课题查询,同意或拒绝学生选题,查看学生论文情况,上传优秀学生论文等;学生模块部分实现学生个人资料查询与修改,查询教师信息,查询教师发布的论题信息,学生选题,学生任务文档的提交,查看优秀毕业论文等功能。管理员模块部分实现教师与学生信息管理功能,毕业设计相关信息的发布与更新,管理员个人信息管理等功能[12]。2.2系统主要功能描述2.2.1系统的功能关系图1.教师与学生的“论文”功能设计如图2.1所示。图2.1教师与学生的”论文”功能2.教师与学生的“论题”功能设计如图2.2所示。图2.2教师与学生的”论题”功能3.教师与学生的“我”功能如图2.3所示。图2.3教师与学生”我”功能4.管理员模块功能如图2.4所示。图2.4管理员模块功能2.2.2系统主要模块的功能设计用户账号信息注册与登录管理员单独用一个登陆入口,账号由系统预设。学生和老师共用一个入口,需要先注册成功才能登陆。最开始是想预设学生学号和教师工号为各用户的登录名,密码统一预设,个人登陆后可以自行修改,后来考虑到该设想实施的可行性,就改成先注册再登陆。以后做好了投入应用后,可以采取最原始的预想,通过学院提供的毕业生信息与教师信息,预设登录账号与密码,方便管理。教师模块功能教师页面分为三个部分,主要实现“论文”、“论题”、“我”三个功能。“论文”功能中,教师可以查看本届毕业论文情况(信息定时更新),查询往届优秀论文题目及论文详情,同时还可以通过搜索功能查询自己想要的优秀论文。此外,老师还可以上传往届优秀论文,供学生查阅参考。如果看到自己欣赏的论文,还可以在查看论文详情后点击收藏。“论题”功能中,教师可以发布论文题目及论题简介等信息,查看学生选题情况,查看该学生信息,确认是否同意或者拒绝该学生选题请求。业务逻辑限制每位教师的选择学生人数不超过10人,每位教师最多可选择5名学生,或者退选到不足5人,此时其他学生可以继续选该老师。“我”功能中,用户可以查看个人信息,并对个人基本信息进行修改。用户也可以上传自己的图片,包括从相册选择照片和立即拍照上传,但目前只实现从相册上传,后面读研阶段将进一步优化该设计,实现拍照上传功能。此外本模块还可以查看自己收藏的优秀论文,方便查阅。在设置一栏中,用户可以设置账号自动登录,省去了再次输入账号等信息的麻烦。由于时间关系,目前这一功能还没有实现。学生模块功能学生页面继续采用老师模块的设计思想,整个页面分为“论文”、“论题”、“我”三个功能。“论文”功能首页,显示学生选题情况,学生可以查看自己的毕业论文情况,上传开题报告、中期报告等文档。考虑到部分同学在外实习,不能与导师面对面解决问题这种情况,学生便可以将自己遇到的问题以文档形式提交给导师,向导师请求帮助。学生也可以查询往届优秀论文题目及论文详情,同时还可以通过搜索功能查询自己想要的优秀论文,下载文档以供参考和查阅。“选题”功能中,系统将可选的导师与论题筛选出来,学生可以通过搜索功能找到与自己想要的论题,查看论题信息及相应的导师个人资料,进而申请论题,等待导师确认。当某个导师的论题选择人数超过10人时,系统将不再提供该导师的论题信息。每名学生一次只能选择一位导师,如果被该导师拒绝,则可以选择另一位导师。学生部分“我”功能与教师“我”功能一致,这里不再赘述。管理员模块功能管理员模块主要实现对教师、学生通知等信息的管理。除了可以查看教师信息外,管理员可以设置教师权限,决定教师是否是毕业设计导师。当教师离职时,管理员需要对教师信息进行清理。学生毕业后,相应的学生信息也要清理。信息的发布与管理部分,显示近期发布的信息,发布新信息,删除过期无用的信息。此外,管理员可以查看所有学生的论文完成情况以及论文详情,包括论文等级。管理员账号由系统预设,管理员登陆后可以自行修改。2.3数据表字段设计2.3.1用户表用户表(t_user)用于存储学生和老师个人基本信息,其中用identity来区分用户是老师还是学生。identity为1代表用户是老师,identity为0代表用户是学生。用户表的各个字段设计如下表2.1所示:表2.1用户表t_user的表结构设计字段名数据类型长度描述是否为空是否关键字useridint20用户编号NotnullPrimaryKeyidentitytinyint2身份标识Notnullpasswordvarchar50用户密码Notnullsafepasswordvarchar50安全密码nullusernamevarchar20用户名nullunamevarchar20真实姓名nullageint4年龄nullsextinyint2性别nullphotovarchar255个人照片nullschoolvarchar20所在学校nullmajorvarchar20所在专业nullgradevarchar20所在班级nullphonevarchar20联系方式nullemailvarchar50邮箱地址nullcoursevarchar50所学课程nullinfovarchar100个人简介null2.3.2管理员表管理员表(t_admin)用于存储管理员账号基本信息。系统预设一个管理员账号及密码,初次登陆使用预设密码,管理员登陆后可以修改密码等账号信息。管理员表的各个字段设计如下表2.2所示:表2.2管理员表t_user的表结构设计字段名数据类型长度描述是否为空是否关键字adminidint20编号NotnullPrimaryKeypasswordvarchar50登陆密码NotnullsafePasswordvarchar50安全密码nullusernamevarchar20用户名nullunamevarchar20真实姓名nullschoolvarchar20所在学校nullcollegevarchar20所在学院nullemailvarchar50邮箱地址null2.3.3论文表论文表(t_paper)用于存储论文的编号、论题、论题简介、论文内容、老师编号、学生编号等信息。论文表的各个字段设计如下表2.3所示:表2.3论文表t_paper的表结构设计字段名数据类型长度描述是否为空是否关键字paperidint20论文编号NotnullPrimaryKeyteacheridint20老师编号Notnullstuidint20学生编号Notnullmajorvarchar20专业名称nulltitlevarchar50论文标题nullrecommendvarchar100论题简介nullcontenttext0论文内容nulltermint4论文年度nullgradevarchar4论文等级nullpublishtimedatetime0发布时间nullcollectnumberint20收藏人数null2.3.4选题确认表选题确认表(t_paperconfirm)用于存储论文选题确认的编号、论题编号、老师编号、学生编号、选题确认状态及是否拒绝学生选题申请等信息。其中state表示选题确认状态,deny代表老师是否拒绝学生的选题申请。state为1代表此选题申请已被老师处理,对应的deny为1则代表老师已拒绝该学生的选题,deny为0代表老师同意该学生的选题申请,state为0代表该条选题信息老师还没有处理。state默认为0,deny默认为-1。论文选题表的各个字段设计如下表2.4所示:表2.4论文选题表t_paperconfirm的表结构设计字段名数据类型长度描述是否为空是否关键字confirmidint20确认编号NotnullPrimaryKeypaperidint20论题编号Notnullteacheridint20教师编号Notnullstuidint20学生编号Notnullstatetinyint2确认状态Notnulldenytinyint2是否拒绝Notnull2.3.5论文选题表论文选题表(t_paperselect)用于存储论文选题的编号、论题标号、老师编号、学生编号、选题状态等信息。其中state表示选题状态,默认为0。state为1代表此老师对应的论题已被其他学生申请,state为0代表论题还没有同学选择。论文选题表的各个字段设计如下表2.5所示:表2.5论文选题表t_paperselect的表结构设计字段名数据类型长度描述是否为空是否关键字selectidint20选题编号NotnullPrimaryKeypaperidint50论题编号Notnullteacheridint50教师编号Notnullstuidint20学生编号nulltitlevarchar20论题名称nullmajorvarchar20专业名称nullstatetinyint2选题状态Notnull2.3.6论文收藏表论文收藏表(t_paper)用于存储收藏的论文的编号及对应的用户编号,方便查看与管理用户收藏的论文。论文收藏表的各个字段设计如下表2.6所示:表2.6论文收藏表t_collect的表结构设计字段名数据类型长度描述是否为空是否关键字collectidint20收藏编号NotnullPrimaryKeypaperidint50论题编号Notnulluseridint20用户编号Notnull2.3.7文档附件表文档附件表(t_file)用于存储老师上传的优秀论文和学生上传的论文及与毕设相关的文档,如开题报告、实习报告、外文翻译等文档。主要字段包括文档的编号及对应的用户编号、文档标题、发布时间等信息。文档附件表的各个字段设计如下表2.7所示:表2.7文档附件表t_file的表结构设计字段名数据类型长度描述是否为空是否关键字fileidint20文档编号NotnullPrimaryKeypaperidint20论文编号Notnulluseridint20用户编号Notnulltitlevarchar50文档标题nullcontenttext0文档内容nullpublishtimedatetime0上传时间null2.3.8消息通知表消息通知表(t_notice)用于存储管理员发布的通知及上传的文档附件。主要字段包括通知的编号及对应的管理员编号、通知编号、通知标题、附件标题、发布时间等信息。消息通知表的各个字段设计如下表2.8所示:表2.8消息通知表t_notice的表结构设计字段名数据类型长度描述是否为空是否关键字noticeidint20通知编号NotnullPrimaryKeypaperidint20论文编号Notnulladminidint20管理员编号Notnulltitlevarchar50通知标题nullcontentvarchar200通知内容nullattachtext0附件名称nullpublishtimedatetime0上传时间null3用户注册登录功能设计与实现本模块功能主要包括教师和学生的用户账号注册、登录、找回密码等功能。在手机上成功安装本应用以后,用户打开本应用将会出现用户登录界面。3.1用户注册账号信息用户必须先注册才能登录,用户如果没有注册而直接登录的话,就会弹出提醒框,提醒用户必须先注册账号才能登录。在注册账号页面,用户须先选择登录身份为教师或者学生,否则注册不成功,系统会提示用户输入登录身份。在注册账号信息页面,用户需根据提示,在输入框内输入用户名与登录密码。为了防止用户手误,用户需再一次输入来确认密码。若两次密码输入不一致,则用户必须重新输入密码。程序通过JS代码将密码等信息提交至后台后,服务层通过引入加密算法MD5对密码进行加密,提高了系统安全性[13]。此外,用户还可以设置安全密码,方便用户忘记密码时找回密码。用户注册后,会将账号信息存入session对象中,下次使用可直接在后台获取[9],后台实现的具体代码见附录BaddUserName.do。3.2用户账号登录在用户登录页面,用户需先选择登录身份为教师或者学生,然后根据提示输入用户名和登录密码,系统会根据后台存储的用户账号信息核对教师输入的用户名与用户密码是否正确,当数据一致时,用户登录成功,进入用户主页,否则会提示用户登录信息错误,需要重新登录。若用户忘记登录密码,则点击登录页面下方“忘记密码?”,通过安全密码找回登录密码。后台实现的具体代码见附录Blogin.do。4教师模块功能设计与实现教师部分主要实现个人资料查询与修改,论题发布、学生选课申请处理、上传优秀论文模板等功能。4.1教师首页功能教师首页主要实现的功能就是显示管理员发布的与毕业论文有关的通知。页面头部信息显示当前页面的名称,方便教师辨识当前所在的页面。主体部分主要显示管理员发布的通知记录,仅显示通知标题及发布时间。这里在JS部分添加一个定时刷新页面的函数,每隔一分钟就刷新一次页面,获取最新的消息通知。点击通知名称后可以查看通知详情,教师还可以下载该通知及附件,便于查阅与参考。尾部信息部分采用按钮控件显示整个毕业管理系统的三个功能板块,分别是“论文”、“论题”、“我”三个模块。点击任意一个模块可以跳转到相应的功能模块。主要代码见附录shownoticeList.json。4.2教师“我”部分功能登录成功后,点击屏幕下方“我”模块,进入教师个人信息管理主页。教师“我”部分主要实现的功能是个人资料查看与修改,查看个人收藏及设置登录方式等功能。“我”部分功能依次分别是个人资料、我的收藏、设置三个部分。4.2.1个人资料部分的功能个人资料部分,教师可以查看自己的个人资料,包括头像、用户名、登录密码、真实姓名、所在院校、班级个人简介等信息。同时,教师可以直接在对应输入框内修改自己的个人信息,点击提交按钮后,系统将修改后的信息提交到后台数据库表中保存起来,用户再次查看时就会显示新的个人信息。教师点击头像图标,便可以上传自己的头像。目前只做到了从相册上传照片,后面有时间经进一步改进,如果相册里没有合适照片,教师可以拍照立即上传头像。主要代码见附录getAccount.json,updateAccount.json。4.2.2我的收藏部分的功能我的收藏部分,将会显示教师的个人收藏列表。收藏主要包括历届优秀论文和毕业论文要求等文档。收藏列表主要罗列出文件名、学生姓名、专业等信息,教师点击某一条收藏信息的文件名时,便可以查阅该文件详情。若文件过期或者不再需要时,教师可以点击列表最后的删除按钮,删除收藏夹里的过期文件,刷新网页后将不再显示该条信息。主要代码见附录showCollect.json4.2.3设置部分的功能在设置部分中,教师可以更换自己的头像信息,同上面的上传头像一样,可以从相册选出一张照片代替原来的头像。教师还可以设置登录方式为自动登录,下次打开应用时将不再需要输入用户名和密码等信息,直接账户自动登录。若不需要此功能,可直接将开关切换至自动登录关闭状态。在原本计划中,用户还可以根据自己喜好个性设置自己整个页面的主题,让自己的主页看起来更舒心、美观。由于时间紧迫及个人技术有限,目前还没有实现这一功能。4.3教师选题功能设计登录成功后,点击屏幕下方论题按键,进入教师选题模块。此模块主要实现教师发布论题、论题信息管理及学生选题信息的处理等操作。模块细化为四个主要功能,依次是发布论文选题,已发布论题查询与管理,已确定学生查询,待确定学生查询与选题信息处理。4.3.1论文选题发布功能点击发题进入发题页面后,将会弹出alert提示框提示教师先完善个人信息,方便学生查看教师信息。在发题页面输入框中依次填写论文题目、专业、年度、论题简介等信息,每个信息为必填项,若有某一项未填写,将会弹出提示框提醒教师填写完整内容。为了实现输入规范化,年度采用下拉框选择的形式,列举最近的几个年份,教师在下拉列表中选择所属年度。专业信息原本设计的是采用二级菜单形式,但由于目前技术不够成熟加之时间紧迫,暂时只实现教师直接输入的方式,后期将进一步改善。此外,受每名教师最多只能指导5位学生的限制,每位教师最多只能发布7条论题,超过7条论题信息后,论题发表不成功,系统将会提醒教师不能再发布论题。主要代码见附录addTitle.json。4.3.2已发布论题部分的功能点击选题模块主体部分的已发布论题链接,教师便可以查看自己已经发布的本届论题信息列表。信息显示依次是老师姓名、论题名称、论题所属的专业这些信息。在已发布论题的最后一栏,插入一个删除按钮,教师可以根据需要删除该论题,再重新发布其他论题。当所确定的学生不足5人时,教师可以删除多余论题。4.3.3已确定学生部分的功能点击选题模块主体部分的已确定学生链接,页面会跳转至已确定学生的信息列表。信息显示依次是学生姓名、所属专业、所选论题。点击学生的姓名,教师便可以查询该学生的详细个人信息,教师可以利用其中的电话号码或者邮箱地址联系该学生,方便毕业设计工作的开展。4.3.4待确定学生部分的功能点击选题模块主体部分的已确定学生链接,页面会跳转至待确定学生信息列表。信息主要显示学生姓名、所属专业、所申请的论文选题。点击学生姓名,页面将会跳转至学生个人详细资料页面,教师可通过查看学生的基本信息与个人简介,对该学生有一个基本的了解,从而确定是否同意该学生的选题申请。此外,在每条申请信息后面设置同意与拒绝两个按键。若老师同意该学生的选题申请,则点击同意按键,系统将通过后台操作将该学生及对应的选题信息插入论文表t_paper,并设置论文确认表t_paperconfirm中确认状态state为1,拒绝状态deny为0。若教师不同意该学生的选题申请,则点击拒绝,系统通过后台数据库操作将论文确认表t_paperconfirm中该学生的论文确认状态state为1,拒绝状态deny为1,并从选题表t_paperselect中删除该条选题信息。此时,该学生可以重新选择其他导师及对应的论题。这里由于要显示的信息比较多,故采用JqueryMobile里面的grid方法布局,整条信息看起来比较整齐。经过上述的同意与拒绝工作后,教师已完成学生选题的确认工作。教师可退回至已确定学生中查看新增的学生与选题信息。主要代码见附录toselectStu.json,acceptStu.json,denyStu.json。4.4教师论文功能设计点击教师页面下方论文按钮,进入教师论文模块页面。论文模块主要包含本届论文和优秀论文两个部分。在本届论文部分展示本届教师所指导的学生及其对应的论文,在优秀论文部分展示往届优秀毕业论文。4.4.1本届论文信息展示该部分主页显示的是本届论文情况列表。列表项依次为论题名、学生姓名及专业班级,其中论题名为一个链接。点击论题名,教师便可以查看该学生的论题完成情况,其中的论文内容content是以附件的形式存放在整个工程的paper文件夹中,此文件夹专用于存放学生和老师上传的文件附件。学生论文答辩完成后,教师需要给学生的论文标注等级。这里设计等级时,采用下拉框选择标签,分别是优秀、良好、合格和不合格四种等级,教师需根据答辩组和系里评审结果,给学生的论文标注相应的等级。主要代码见附录editGrade.json。4.4.2优秀论文信息展示同上面教师选题设计一样,点击优秀论文按钮进入优秀论文页面,可显示全部的优秀论文。教师可根据自己需要在查询框内输入论题名或者专业名称或者学生姓名等信息,点击查询后就可以显示与查询条件近似的匹配结果。此查询功能采用模糊查询方式,搜索精确性比较高。查询结果按论题名称、指导老师姓名、所属专业、论文等级等信息显示。点击论文名称,即可查看该论文详细信息。每条优秀论文信息列表最后都有一个收藏按钮,教师可以点击该按钮收藏此优秀论文。收藏的论文可以在“我”功能部分的个人收藏中查看。主要代码见附录findKey.json,addCollect.json。5学生模块功能设计与实现学生模块主要实现个人资料查询与修改,选课申请、上传论文及开题报告等功能。5.1学生首页功能同教师首页相同,学生首页功能主要就是显示管理员发布的与毕业论文有关的通知,这里不再赘述。5.2学生“我”部分功能同教师“我”部分一样,学生“我”部分主要实现的功能是个人资料查看与修改,查看个人收藏及设置登录方式等功能。这部分主要代码参见教师部分对应功能代码。5.2.1个人资料部分的功能个人资料部分,学生可以查看自己的个人资料。除了教师页面显示的姓名、性别等信息外,还增加了课程信息,为教师筛选学生的选课申请提供参考条件。学生可以直接在对应输入框内修改自己的个人信息,点击提交按钮后系统将信息保存至用户信息表t_user。学生点击头像图标,便可以从相册上传自己的头像。5.2.2我的收藏部分的功能我的收藏部分,将会显示学生的个人收藏列表。收藏主要包括历届优秀论文和毕业论文要求等文档。收藏列表主要罗列出文件名、教师姓名、专业等信息。点击某一条收藏信息的文件名时,便可以查阅该文件详情。若文件过期或者不再需要时,学生可以点击列表最后的删除按钮,删除收藏夹里的过期文件,刷新网页后将不再显示该条信息。5.2.3设置部分的功能在设置部分中,学生可以修改自己个人信息及更换自己的头像。同上面的上传头像一样,可以从相册选出一张照片代替原来的头像。学生还可以设置登录方式为自动登录,每次打开应用后自动登录。若不需要此功能,可直接将开关切换至自动登录关闭状态。5.3学生选题功能设计此模块主要实现学生网上论文选题功能。进入选题模块后,系统首先会弹出alert框,提示显示必须先完善个人信息才能选题。确认后页面上会显示全部可选的论题信息,依次为论题名、专业、教师姓名。学生可逐一查看选题信息,选出自己感兴趣的论题。若信息量太大,学生可通过上方的搜索功能,模糊查询出相近的课题信息。点击论题名,学生可以查看论文选题的详细信息。论题详细信息包括论题名、导师、专业、年度及论文详细介绍等信息。学生还可以点击教师姓名查看教师详细信息。学生可以通过对教师和论题的了解来确定自己想选的论题,并在相应的论文选题后面点击申请按钮,申请该课题。系统将会将学生编号存入论文选题表t_paperselect,并将对应记录的选题状态state改为1。同时将该学生对应的学生编号、教师标号、论文编号插入选题确认表t_paperconfirm中,等待教师确认选题申请。主要代码见附录applyTitle.json。5.4学生论文功能设计学生论文模块主要包含我的论文和优秀论文两个部分。在我的论文部分展示学生论文完成情况,在优秀论文部分展示往届优秀毕业论文。5.4.1我的论文信息展示我的论文部分主要显示学生自己的论文情况,包括论题、导师等信息。点击上传文件按钮,学生便可以将论文及其他文档以附件形式上传至项目的papers文件夹中。由于时间有限及技术掌握有限,暂时还没有实现附件上传功能,后面将进一步学习与完善。5.4.2优秀论文信息展示同教师论文页面设计相同,在论文模块头部信息最右侧加入查看优秀论文功能链接,点击按钮进入优秀论文页面,即可显示全部的优秀论文。学生可根据自己需要在查询框内输入论题名或者专业名称或者导师姓名等信息,采用模糊查询得到与查询条件近似的匹配结果。查询结果按论题名称、指导老师姓名、所属专业、论文等级等信息显示。点击论文名称,即可查看该论文详细信息。点击收藏按钮即可收藏此优秀论文。收藏的优秀论文可以在学生“我”功能部分的个人收藏中查看。6管理员模块功能设计与实现管理员模块功能主要包括管理员登录、学生和教师账号信息管理,消息管理、个人资料管理。6.1管理员登录设计在教师与学生的账号登录页面设计一个管理员登录入口,点击后进入管理员登录页面。与教师和学生登录不同,管理员不需要注册账号就能登录。在后台数据库预设一个管理员账号与明码登录密码,管理员凭此账号直接登录。为了确保账号安全,采用MD5算法对明码进行加密。为了获得此时数据库明码转换后的加密密码,我在JAVA代码中设置断点,通过单步调试模式获得加密后的密码,并将数据库中明码换成加密密码,提高了整个系统的安全性。若管理员忘记密码,可以通过点击登录页面下方忘记密码,根据安全密码找回自己的密码。管理员登录成功后,将会显示管理员部分四个管理功能,分别是教师信息管理、学生信息管理、消息管理、个人资料管理。6.2教师账号信息管理点击管理员首页的教师信息管理选项,进入教师信息页面。页面按教师姓名、专业的方式显示各个教师的信息记录,点击教师姓名便可查看教师详细信息。每条记录后面设置一个删除按键,通过AJAX方法[14]实现与后台交互。若有需要,管理员可删除该教师的记录。若人员信息太多,管理员可利用页面搜索功能查找出对应的教师记录。该搜索主要采用迷糊查询的方式,要求管理员根据提示输入相应的文字,系统根据输入的关键字在数据库中查找出相应的信息。具体代码见附录6.3学生账号信息管理点击管理员首页的学生信息管理选项,进入学生信息页面[11]。页面显示每条学生记录的学生姓名、专业、班级等信息。点击学生姓名便可查看学生个人基本资料,也可以通过后面删除按键删除该学生信息。学生毕业后,信息不删除,以免导致用户查询优秀论文时学生信息缺失。此外,管理员也可以通过搜索功能查找某个学生的信息。6.4消息信息管理此模块只要实现消息查询、删除及消息发布等功能。6.4.1消息查询与删除点击管理员页面消息管理选项,页面将会出现近期管理员发布的通知记录。每条记录仅显示通知标题及发布时间,点击链接后可以查阅详细信息。若消息已过期,管理员可在相应的标题后面删除该条通知。6.4.2消息发布在消息管理的头部信息右侧设置发布消息按键,点击进入消息发布页面。管理员根据各栏提示依次输入消息标题、内容、发布时间、发布人等信息。其中的发布内容可以是100字以内的文字,也可以上传文档附件。附件上传时,由于数据库无法处理文件的中文名称,故将文件上传的时间设为文件名,这样存数据库中储的文件名将是一组时间数字。通过表单的方式提交上传附件,点击提交按钮后,系统会将相关数据提交至消息管理表t_notice中。主要代码见附件BaddFile.do。6.5个人账号信息管理点击管理员首页的个人资料管理选项,进入管理员的个人信息页面。首次登陆时,通过在首页设置alert提醒框的形式提醒管理员完善个人信息。管理员个人资料页面详细显示该管理员的姓名、专业、手机号、邮箱等信息。显示信息时使用input标签,管理员可以直接在当前页面修改自己的个人信息,最后通过submit提交按键结合AJAX方法,将修改的数据传到后台updateAccount.do方法中,实现对数据库相关数据的修改,代码同教师修改个人信息。
结束语本文详细叙述了毕业论文管理系统的需求分析和各个模块的功能设计,重点介绍了教师与学生功能模块的设计与实现原理。系统采用B/S结构,利用MyEclipse移动开发工具创建HTML5移动webapp应用程序,再结合NavicatforMySQL建立数据库连接。前期开发阶段,由于对Java等开发语言的不熟悉,对MyEclipse开发工具的应用不熟练,导致开发进度很慢,个人信心也不是很足。后来在学长每个周末的辅导下,对开发流程逐渐熟悉,开发软件的应用慢慢熟练,自己的信心也渐长。中期开发工作中,遇到很多问题。由于前期数据库设计时表的设计不合理,导致在中期开发时一改再改,给编码工作带来很大的困扰。同时对论文管理系统中选题流程不是特别清楚,其中的业务逻辑设计概念比较模糊,无法做到与现实情况完美衔接。后来通过不断查阅相关书籍,网上搜索相关信息和请教学长或者有经验的同学,问题逐渐得到解决,进展较为顺利。后期主要是完成管理员功能部分、选题系统的页面调整及功能完善工作。总的来说,本应用程序设计的应用价值比较高,且便于维护,操作简单便捷。但由于个人知识水平有限与时间等因素限制,论文中还存在一些有待改进的部分。首先页面不太美观,其次该系统没有设计论文答辩这一环节,教师与学生在线答疑[15]这一功能也没有实现,有些操作还不够简便,文件的下载功能还不能实现等,我将在今后的学习中继续完善与改进。
参考文献蒋旭.学生成绩管理系统毕业设计.百度文库,发表/2012-04-22IsabelDelaTorre-Díez,MíriamAntón-Rodríguez,FranciscoJavierDíaz-Pernasetc.ComparisonofResponseTimesofaMobile-WebEHRsSystemUsingPHPandJSPLanguages.SpringerScience+BusinessMedia,2012,36(6):3945~3954XiaoMinZhu,DonghuaChen,YingChenetc.AresourseintegrationapproachforHTML5mobileapplications.InfTechnolManag,2013,14:169~181黄悦深.基于HTML5的移动WebApp开发[J].图书馆杂志,2014,7(33):72~77王非.富互联网应用中框架技术实现Web信息系统[J].计算机应用,2003,(1):1~6优视公司.HTML助力Web应用发展实践[J].信息技术与标准化,2012,11:14~15曹广鑫.Java企业级开发项目实践[M].北京:清华大学出版社,2004.1KiaMingPhua,SiuCheungHui,ChaiKiatYeo.Aweb-basedInternetJavaPhoneforreal-timevoice.WorldWideWeb2000,3(2000):193~203董伟专.ppt课件-AJAX./p-989236314.html,发表/2014-12-14殷兆麟,张永平,姜淑娟.Java网络高级编程[M].北京:清华大学出版社:北京大学出版社,2005.1~26许艳茹.基于WEB的毕业论文管理系统[J].才智,2015(3):142段春梅.基于JSP的毕业论文管理系统的设计与实现[J].福建电脑,2011,27(9):1~3梁国建.基于AJAX技术和HTML5的实验室管理系统的设计与实现[D].中山大学硕士学位论文,2012.6~12肖祯怀,许瀛文.基于HTML5的Web离线应用模型在学生信息管理系统中的应用.湖北广播电视大学学报,2014,34(7):159~160徐远棋,曾海.网上毕业论文管理系统的设计与实现[J].微型电脑应用,2013,29(10):44致谢在指导老师的指导与帮助下,经过了三个多月的努力,我的毕业设计终于完成了。这次毕业设计,多亏指导老师与多名同学的帮忙才得以完成,在此我深表谢意。首先,我要感谢的是指导老师杨波老师。感谢杨老师找陈天元学长带我们做项目,使我接触了Java等一系列开发语言,开启了本次毕业设计之旅。接着,我要感谢陈天元学长。感谢学长在百忙的工作中抽出时间辅导我们学习Java开发技术,并不厌其烦的指导我的毕业设计工作,为我讲解了基本的开发知识,并帮助我解决了不少技术难题。另外,我还要感谢谭襄恒同学在编码工作上给予我的极大的帮助。谢谢他忍受我在编程工作中遭遇的乱七八糟的问题,并耐心给予提示与帮助。最后,感谢项目组各位同学及计算机学院姜涛同学在毕业设计过程中给与我的帮助与支持。再次致谢!
附录A页面功能展示教师与学生登录、注册页面如下图所示:图1教师与学生登录页图2教师与学生账号注册
教师与学生页面功能设计图3用户首页图4用户个人主页图5用户个人资料图6用户个人收藏图7教师已发布论题图8待确定学生列表图9优秀论文列表图10优秀论文详情图11本届论文标注等级图12学生选题功能管理员页面功能设计图13管理员首页图14管理员删除学生信息
附录B重要程序代码1、用户注册@RequestMapping(value="/addUserName.do")@ResponseBody publicIntegeraddUsername(@RequestParamMap<String,Object>paraMap,HttpSessionsession){ Integerresult=-1; try{ result=anLoginService.addUsername(paraMap); }catch(Exceptionex){ System.out.println(ex.toString()); } if(result==1){ Stringusername=paraMap.get("username")==null?"":paraMap.get("username").toString(); Stringpassword=paraMap.get("password")==null?"":paraMap.get("password").toString(); Stringidentity=paraMap.get("identity")==null?"":paraMap.get("identity").toString(); session.setAttribute("username",username); session.setAttribute("password",password); session.setAttribute("identity",identity); } returnresult; }@Override publicIntegeraddUsername(Map<String,Object>paraMap){ Stringusername=paraMap.get("username")==null?"":paraMap.get("username").toString(); Stringpassword=paraMap.get("password")==null?"":paraMap.get("password").toString(); StringsafePassword=paraMap.get("safePassword")==null?"":paraMap.get("safePassword").toString(); Stringidentity=paraMap.get("identity")==null?"":paraMap.get("identity").toString(); if(username==""||password=="") return-1; password=ContextUtil.getMd5Pwd(password); Stringsql="insertintot_user(username,password,safePassword,identity)values(?,?,?,?)"; List<Object>listArgs=newArrayList<Object>(); listArgs.add(username); listArgs.add(password); listArgs.add(safePassword); listArgs.add(identity); Integerresult=-1; System.out.print("addUsername:"+sql); try{ result=genericJDBCDao.Insert(sql,listArgs.toArray()); System.out.print("USER_ID:"+result); }catch(Exceptionex){ System.out.print(ex.toString()); return-1; } returnresult; }用户登录@RequestMapping(value="/login.do") @ResponseBody publicMap<String,Object>login(@RequestParamMap<String,Object>paraMap,HttpSessionsession){ Map<String,Object>row=null; Stringusername=paraMap.get("username")==null?"":paraMap.get("username").toString(); Stringpassword=paraMap.get("password")==null?"":paraMap.get("password").toString(); //存储username到session中 ModelAndViewview=null; Stringidentity=""; Stringuserid=""; try{ session.setAttribute("username",username); session.setAttribute("password",password); row=anLoginService.checkLogin(paraMap); if(row!=null){ identity=row.get("identity")==null?"1":row.get("identity").toString().trim(); userid=row.get("userid")==null?"0":row.get("userid").toString().trim(); if(identity.equals("1")){ view=newModelAndView("/modules/index/teacherIndex.jsp"); } else{ view=newModelAndView("/modules/index/stuIndex.jsp"); } session.setAttribute("userid",userid); System.out.println("登录用户ID:"+userid); } elseSystem.out.println("用户名或密码错误"); }catch(Exceptionex){ System.out.println(ex.toString()); } returnrow; }@Override publicMap<String,Object>checkLogin(Map<String,Object>paraMap){ Stringusername=paraMap.get("username")==null?"":paraMap.get("username").toString(); Stringpassword=paraMap.get("password")==null?"":paraMap.get("password").toString(); password=ContextUtil.getMd5Pwd(password); Stringsql="selectuseridas\"userid\",identityas\"identity\"fromt_userwhereusername=?andpassword=?"; List<Object>listArgs=newArrayList<Object>(); listArgs.add(username); listArgs.add(password); System.out.println("checkLogin:"+sql); Map<String,Object>map=null; try{ map=genericJDBCDao.findMapBySQL(sql,listArgs.toArray()); System.out.println("result"+map.toString()); }catch(Exceptionex){ System.out.print(ex.toString()); } System.out.print(map); returnmap; }教师首页functionshownoticeList(){ varadminid=$("#adminid").val(); $.getJSON(appAndroidPath+"/admin/notice/showNoticeList.json",{"adminid":adminid},function(data){ $("#noticeList").empty(); varcontent3=""; $.each(data.hashMap['row'],function(idx,item){ vardiv='<ulid="noticeList"data-icon="plus"class="ui-grid-b">' +'<div><ahref="/admin/notice/noticePage.do?noticeid='+item.noticeid+'"class="ui-block-a"style="padding-left:20px;padding-top:20px;"' +'id="title"onclick="shownoticePage('+item.noticeid+')"><span>'+item.title+'</span></a></div>' +'<divclass="ui-block-b"style="padding-left:20px;padding-top:20px;"id="publishtime"><span>'+item.publishtime+'</span></div>' +'<div><ahref="#"class="ui-block-c"id="delnotice"style="padding-left:20px;padding-top:10px;"data-icon="delete"' +'onclick="delNotice('+item.noticeid+')"><span>删除</span></a></div>' +'</ul>' +'</div>'; content3=content3+div; }); $("#noticeList").append(content3); });}publicList<Map<String,Object>>showNoticeList(Map<String,Object>args,Pagepage){ Stringsql="SELECTDISTINCT*,DATE_FORMAT(publishtime,'%Y-%m-%d%H:%i')\"publishtime\"FROMt_noticeORDERBYpublishtimeDESC"; List<Map<String,Object>>rows=null; System.out.println("showNoticetList:"+sql); try{ rows=genericHBDao.findMapBySQL(sql); }catch(Exceptionex){ System.out.print(ex.toString()); } System.out.println(rows.toString()); returnrows; }教师个人信息查询与修改@RequestMapping(value="/getAccount.json") @ModelAttribute("hashMap") publicMap<String,Object>getAccount(@RequestParamMap<String,Object>paraMap){ Map<String,Object>row=null; try{ Stringuserid=""; userid=getAttribute("userid")==null?"":(String)getAttribute("userid"); paraMap.put("userid",userid); row=teaMeService.getAccount(paraMap); }catch(Exceptionex){ System.out.print(ex.toString()); } returnrow; }@Override publicMap<String,Object>getAccount(Map<String,Object>paraMap){ Map<String,Object>row=null; Stringuserid=paraMap.get("userid")==null?"":paraMap.get("userid").toString(); if(userid==null||userid=="") returnnull; Stringsql="select*fromt_userwhereuserid=?"; List<Object>listArgs=newArrayList<Object>(); listArgs.add(userid); System.out.print("getAccount:"+sql); try{ row=genericJDBCDao.findMapBySQL(sql,listArgs.toArray()); System.out.println(row.toString()); }catch(Exceptionex){ System.out.print(ex.toString()); returnnull; } returnrow; }@RequestMapping(value="/updateAccount.do") @ResponseBody publicIntegerupdateAccount(@RequestParamMap<String,Object>paraMap){ Integerresult=-1; System.out.println("username:"+paraMap.get("username").toString()); try{ Stringuserid=""; userid=getAttribute("userid")==null?"":(String)getAttribute("userid"); paraMap.put("userid",userid); result=teaMeService.updateAccount(paraMap); }catch(Exceptionex){ System.out.print(ex.toString()); } returnresult; }@Override publicIntegerupdateAccount(Map<String,Object>paraMap){ Stringuserid=paraMap.get("userid")==null?"":paraMap.get("userid").toString(); if(userid=="") return-1; List<Object>listArgs=newArrayList<Object>(); Stringphoto=paraMap.get("photo")==null?"":paraMap.get("photo").toString(); Stringusername=paraMap.get("username")==null?"":paraMap.get("username").toString(); Stringuname=paraMap.get("uname")==null?"":paraMap.get("uname").toString(); Stringage=paraMap.get("age")==null?"0":paraMap.get("age").toString(); Stringphone=paraMap.get("phone")==null?"":paraMap.get("phone").toString(); Stringemail=paraMap.get("email")==null?"":paraMap.get("email").toString(); Stringschool=paraMap.get("school")==null?"":paraMap.get("school").toString(); Stringmajor=paraMap.get("major")==null?"":paraMap.get("major").toString(); Stringinfo=paraMap.get("info")==null?"":paraMap.get("info").toString(); intsex=paraMap.get("sex")==null?1:Integer.parseInt(paraMap.get("sex").toString()); //这里性别修改是不成功的??????? listArgs.add(photo); listArgs.add(username); listArgs.add(uname); listArgs.add(age); listArgs.add(phone); listArgs.add(email); listArgs.add(school); listArgs.add(major); listArgs.add(info); listArgs.add(sex); listArgs.add(userid); System.out.println("updateAccount"+listArgs.toString()); Stringsql="updatet_usersetphoto=?,username=?,uname=?,age=?," +"phone=?,email=?,school=?,major=?,info=?,sex=?whereuserid=?"; System.out.println("updateAccount:"+sql); Integerresult=-1; try{ result=genericJDBCDao.execute(sql,listArgs.toArray()); System.out.println(result); }catch(Exceptionex){ System.out.print(ex.toString()); return-1; } returnresult; }5、教师个人收藏显示@RequestMapping(value="/showCollect.json") @ModelAttribute("hashMap") publicHashMap<String,List<Map<String,Object>>>showCollect(@RequestParamMap<String,Object>paraMap){ Pagep=this.page; List<Map<String,Object>>rows=teaMeService.showCollect(paraMap,p); HashMap<String,List<Map<String,Object>>>hm=newHashMap<String,List<Map<String,Object>>>(); hm.put("row",rows); returnhm; }@Override publicList<Map<String,Object>>showCollect(Map<String,Object>args,Pagepage){ Stringuserid=args.get("userid")==null?"":args.get("userid").toString(); Stringsql="SelectDISTINCTp.*,u.uname,u.userid,c.*Fromt_paperp,t_useru,t_collectc" +"wherec.userid='"+userid+"'andu.userid=c.useridandp.paperid=c.paperidorderbyc.paperiddesc"; List<Map<String,Object>>rows=null; System.out.println("showCollect:"+sql); try{ if(page==null){ rows=genericHBDao.findMapBySQL(sql); }else{ rows=genericHBDao.findMapBySQL(page,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 配电箱电工知识培训课件
- 年度盛典晚会流程
- 切水果课件美术
- 中小企业100倍利润增长系统
- 终端与业务专业之电信企业战略管理和营销效益评估
- 西安汽车职业大学《中国共产党建设理论与实践》2023-2024学年第一学期期末试卷
- 辽宁政法职业学院《生物统计学A》2023-2024学年第二学期期末试卷
- 图木舒克职业技术学院《票据法及案例研习》2023-2024学年第二学期期末试卷
- 2025年江西省上饶市名校初三中考5月最后一次适应性考试英语试题含答案
- 上海旅游高等专科学校《皮肤生理学》2023-2024学年第二学期期末试卷
- 2023年4月自考11746国际商务与国际营销试题及答案
- 供配电技术 课件 第4章-变配电系统的电气设备及选择
- 国内外先进安全生产管理经验(继续教育)课件
- 二模冲刺动员主题班会通用课件
- 大学国旗护卫班培训方案
- 胃肠术后吻合口瘘的观察与护理
- 医疗器械生产中的生产线布局与优化
- 医院年度经济运营分析报告
- 圆柱的认识说课演示稿
- 扣件式钢管模板支撑架验收表
- 交通天下:中国交通简史
评论
0/150
提交评论