基于Springboot和Freemark实现的毕业设计选题系统

基于Springboot和Freemark实现的毕业设计选题系统 摘 要 伴随着我国高校招生发展趋势的不断扩大,各大高校教学方式的难题和工作量不断增加

本文包含相关资料包-----> 点击直达获取<-------

基于Springboot和Freemark实现的毕业设计选题系统

摘 要

伴随着我国高校招生发展趋势的不断扩大,各大高校教学方式的难题和工作量不断增加。传统的管理方式需要耗费大量的资源去处理。所以高校学生论文选题时容易导致出错,出现效率低,质量低,学生对已选择的题目难以进行更改等问题。其次,管理员无法实时有效的对学生、题目、和已选择的题目进行修改编辑;难以实时获取到一个统一的学生论文选择的情况。综上,学院需要拥有一个基于 WEB 的毕业论文选题系统去提高工作效率,减轻工作 负荷的,提高学生选题灵活性。此系统由教师管理员和学生两部分构成,主要包括:选题题目、管理学生的课题、学生查询课题、学生选择课题等模块。设计该系统需要用到Eclipse以及存储数据的MySQL。论文主要介绍了系统的相关技术,对其技术分析,并给出了系统的概要设计、数据库设计和详细的设计,实现完成的系统在运行中没有问题。

关键词 :学生选课;MVC;MySQL

第1章 概述

近十年以来,在科学技术不断进步,网络信息技术的繁荣,尤其是互联网的普遍应用,在根本上解决的信息传输的难题。构建了一个组织良好的信息结构框架,使用户能够访问媒体文档的信息。在任何网络终端以简单统一的方式进行TS。

跟紧Internet的脚步,我国各个高校也开始运用,为了加快现代信息化的进程,各个高校基本都在校园建立了自己的校园网络。为我们现代化的网络教育提供了必备的物质基础。在当下信息爆炸式发展的时代,选择毕业生的原始方法,即手工原始提交的方法,由之凸显出很多缺点和不足,如时间消耗大、工作效率低,而计算机科学与技术系却可以通过Internet来实现网上选题的功能。该网上选题系统,与传统纯手工相比,具有很大的优点。比如:检索迅速,查询快捷,时间消耗量减少,存储更多等优点。

所以,这个系统将计划在网页上对学生的选题进行操作。具体的思路是设计与开发毕业了论文选题系统,并且在网页上注册自己的学号以及相关信息,以自己的学号为信息进行选题,帮助应届生更好更快的完成论文的选题工作。

本文主要从系统分析,系统设计,系统实现和测试几个方面对该系统进行阐述。系统分析包括可行性分析和需求分析。系统设计从总体和详细对系统进行主要分析。在第三章中实现了对该设计的功能实现,实现各个模块的主要功能之后,对系统进行了非常严谨的测试。

本章主要阐述了学生毕业论文选题系统的研究背景和意义,简要介绍了国内外选题系统的研究现状、开发该系统所使用的工具和技术,并且简明介绍了毕业论文选题系统的研究目标和内容,以及这个系统的开发和应用。这篇论文的范围。

1.1 课题研究背景与意义

选题决定了研究的内容、广度和深度,选题是首要条件,选题好坏与否直接决定这个论文是否有存在的价值。这个系统的设计目的是为了针对当前论文选题系统中所存在的问题而进行相应的技术研究与开发。为了满足师生间的交流,让两个主体间更快速的交流,所以开发该系统。在使用毕业论文选题系统来优化了选题工作之后,和传统的纯手工方式比较,更具有很多的优点。例如:工作效率的提升,使用方法的便捷,安全性良好等。这些都是网络技术为教育带来的便捷,不仅可以方便学校对教学事务的管理,也提高了教育信息的流通和效率[2]。

就以我校为例,一般老师指导10个同学,然后老师给出毕业的论文题目,由我校决定毕业生的选题时间,学生通过登录自己的学号和密码,进入该系统进行选题。选题看学生的网络状况和反应速度,基本选题是很公平的。若是没有在第一时间选取自己心仪的导师和论文题目,就只能和老师协商让管理员后台处理,若是导师不同意,只能选择剩下的课题进行论文设计。为了实现公平公正,这个系统对所有同学同时开放的。这个系统之中老师只有被选择的权利,最大权限为管理员,主要实现的学生选题。

1.2 国内外研究现状

目前,我国教育产业化逐步推进,高校的规模也在不断地壮大,那么如何合理的运用教学的资源,加强教学管理工作,是每个高校都探讨的问题。随着教学的网络化发展,在学生上课,学生学籍管理等方面都采取了网上管理,但在高校毕业这个重要的环节中,都采用的是传统的网络方式,或是纯手工,毕业论文选题这个极其重要的环节并没有纳入管理系统当中。近几年,随着教育事业的改革推进,高校办学质量以及规模的提升,如何节省毕业设计的时间以及提高毕业设计的教学质量是各大院校的工作重点。

目前,毕业设计双向选择和毕业设计交流已成为碧水中学教育改革与发展的重要组成部分。石山英国诺丁汉大学开发的管理系统实现了在线毕业设计的双向选择。在国内,取得了良好的效果。

1.3 开发工具与技术介绍

1.3.1 spring boot框架介绍

系统的后端架构基于Spring Boot 开发。Spring-boot是一组框架,它用于初始化搭建以及开发过程的框架集合,并且缩短了spring开发配置流程。Spring是一个分层的模块化架构,里面包含了很多组件,核心组件是Core、Context 和 Beans这三个组件。从而使得开发的人员不再特别需要定义样板化的设置。此系统采用 Spring Boot 2.0

1.3.2 MySQL简介

该数据库使用的是MySQL,MySQL被视为一种标准化的语言,被用来访问数据库或用于存储数据,也是Oracle下的一个优秀的数据库管理系统。MySQL是一个关系型数据库管理系统。MySQL具有支持常用SQL语句规范、可移植性强、运行效率高、网络支持丰富、调试管理和优化简单、可处理数千万数据等优点。它已被大多数互联网公司采用,并衍生出相关的优秀技术。本系统采用MySQL5.5.56。

1.3.3 jdk1.8运行环境

后端运行系统的开发,则采用基于 JAVA 的运行环境的后端系统。因为 JAVA 作为互联网开发语言的常青树,经过十几年的发展,经过几代的技术革命,已经 具有良好的生态系统,稳定的运行环境,优异的性能表现。此系统采用 JDK 1.8

1.3.4 系统支撑环境

  • 系统开发环境 :Windows7,采用JAVA语言进行编写,jdk1.8的运行环境

  • 系统运行环境 :系统数据库为Mysql5.5.56,采用eclipse软件运行

1.4 课题主要研究内容

在经过仔细研究相关文献后以及相关杰出优秀论文后,我对课题的研究内容作了以下总结:

  • 系统分析 :首先是技术可行性,要求设计人员必须要有雄厚的计算机功底。其次是经济可行性,对经济的要求不高,只要有一台电脑就可以,不必因为经济担心。最后是运营,同样需要计算机人员负责后期的运营和维护。设计系统前还要了解用户的需求,只有真正意识到人们的需求才能根据需求来设计功能

  • 系统设计 :经过前期的充足的准备到了系统设计阶段,主要是功能方面设计,因为此系统主要是针对老师和同学们,所以此系统包括老师和学生登录、老师设计题目、学生查询、选择题目等功能。其次是页面设计,要简单明了

  • 系统测试 :最后对系统进行系统测试,包括各个功能模块以及数据库的运行,能否满足实际需求

第2章 系统分析

系统分析解决的就是“系统做什么”的问题。如果想要有个好的开端,那么系统分析必须正确无误。本章重点介绍了学生毕业论文选题系统系统分析的以下两方面。

2.1 系统可行性分析

2.1.1 技术可行性

作为高校毕业生的一个毕业设计选题系统,首先必须提供录入题目的功能。 题目须与之对应现有的方向,如“毕业论文选题系统”这一题目可以选“Python”、 “Java”这两个方向进行完成。如此的设计必须将教师与方向进行相关联,显然 方向与教师的关系为多对多关系,如“Java”这一方向的教师可以为梁新健和黄 可坤教师,或梁新建教师所关联的方向可以为“Java”“Python”。综上,题目、方向、教师的关系为相互多对多。系统提供两个角色,管理员与学生,管理员负责对题目、方向、教师等信息编辑、管理学生、查看学生信息和选题情况、查看已选择的题目等信息。学生的主要负责选题,在系统允许的情况下删除已选的题目进行重新选择。学生的选题应具有学生的基本信息如学号班级姓名,在进行选题时题目加方向为唯一选择,如学生 A 选择“毕业论文选题系统”题目+“Java”方向时该题目无法被下一学生进行选择。学生在确认选择题目和方向的过程中会根据该方向的教师选择指导老师。最后确认选择,生成已选择题目数据。该数据中含有学生 的姓名,学号,班级,系别或学院,题目,方向,指导老师。而且可以在系统允许的情况下允许重新选择。该系统很好的使得学生进行毕业论文选题,拥有公平、方便、快捷等特性,是极大的提升了管理人员的管理的效率。

2.1.2 经济可行性

作为大学生开发此系统的确需要考虑经济能否允许,经济的可行性主要是对资源配置的角度衡量该系统的价值。首先,在现有的基础上开发本系统的成本很低,经济投入较少。其次,从该项目的成本和效益上看。在低投入之后,可以解除师生之间的选题麻烦。可谓是低成本,高收入。所以,该系统经济具有可行性。

2.1.3 操作可行性

操作可行性主要从面向对象,方法,内容进行分析。该系统的面向对象主要是师生,操作方法比较简便,内容主要是在网页上进行选课,退课等操作。可以说该系统操作难度较低,因而具有操作可行性。

2.2 系统需求分析

2.2.1 系统功能性需求

该毕业论文选题系统的主要功能有:

  • 选择题目

  • 查看已经选择的题目

  • 删除已经选择的题目

  • 编辑学生的基本信息

管理员的主要功能有:

  • 设置系统信息(如是否开启学生注册功能)

  • 查看编辑教师信息

  • 查看编辑方向信息

  • 查看编辑题目信息

  • 查看编辑学生信息

  • 查看删除已选择题目

2.2.2 数据库需求分析

数据库的需求分析可以从数据流程图中详细的体现出来。表示的是该系统的顶层数据流图。

第3章 系统设计

系统的处理流程:用户登录,进入主界面,点击选择不同的模块,执行各项不同的功能[4]。系统分析通常包括系统的总体设计和系统的详细设计。

3.1 数据库设计

3.1.1 数据库表关系图

系统的数据库一共有 12 张表分别为:

  • tb_item :题目表

  • tb_member :学生表

  • tb_item_category :题目方向表(作为学生的唯一选择)

  • tb_order :已选择信息表(将已选择的题目信息与学生信息相关联)

  • tb_teacher :教师表

  • tb_teacher_category :教师方向表

  • tb_department :系别或学院表

  • tb_admin :管理员表

  • tb_group :团队表(不启用)

  • tb_system :系统信息表

题目、分类和教师间的关系如图:

教师(tb_teacher)与方向(tb_category)的关系为多对多,需要建立教师方向表(tb_teacher_category)来维持多对多的关系。题目(tb_item)与方向(tb_category)的关系为多对多,需要建立题目方向表 (tb_item_category)来维持多对多的关系。学生已选择题目信息表关系如图:

3.1.2 系统操作流程图

  • 管理员操作 :登录 → 添加方向 → 添加教师 → 选择教师对应的方向 → 添加教师完成 → 添加题目 → 选择题目对应方向 → 添加题目完成

  • 学生操作 :使用学号、姓名等信息注册 → 登录 → 选择题目与方向 → 选择该方向下的教师 → 选择题目完成 → 查看选择信息

在选题过程中,学生选择指导老师的过程中,由于每个老师所指导人数的不同,则需要对指导老师下学生数量进行控制当同学选择教师后会返回给服务器数据,然后在数据库进行查询如果老师的学生容量超过了设定值,则需要重新选择,若是教师的学生数量没有超过设定值,那么该学生选择成功,相应教师的学生数量增加一位。限制的方法如下图。

3.2 系统详细设计

3.2.1 界面设计

界面设计是对系统的整体布局以及主要内容模块的分类设计。图3.4位该设计的界面设计图。界面左侧为该系统的功能栏和logo,用户可在右上方选择切换用户,所有内容均在界面的中心位置体现。而且若是管理员或学生查询信息量大时,可能会影响系统的美观,所以在界面设计上又做了一个条目分类的界面,方便用户查看信息。

经过界面设计后,详细的实际界面图。

3.2.2 模块设计

毕业论文选题系统主要主体对象是学生和管理员,所以分为三个模块:系统登录模块、学生管理模块和管理员管理模块。

  • 系统登录模块 :第一次登录此系统时,需要注册个人信息,然后才能登录以选择主题。管理员在登录时,需要输入管理员账号方可登录

  • 学生管理 :学生可对个人信息进行管理,查看自己院系的老师的课题,对于课题进行选择

  • 管理员 :在该模块中管理员主要实现对学生和教师信息管理,可编辑论文选题的课题,查看和删除学生所选择的课题

3.2.3 数据库设计

数据库设计中分为概念模型设计和逻辑模型设计。

概念模型设计:

学生用户属性图 如图3.7所示。

系统E-R图也称为实体-联系图 ,它主要提供了表示实体类型、属性和联系的方法,用来描述概念关系模型的一种方式。用矩形框表示实体型,矩形框写明实体名称,椭圆图表示实体的属性,并用菱形框表示实体型之间的联系成因。如图3.8所示。

逻辑模型设计:

表3.1为学生信息表 。其中包含了学生的个人信息,包括名字,学号,系别,班级,密码,电话,邮箱等。学生表还可以看出是否已选题的状态,当状态的值为 0 时表 示未选题,为 1 是表示已选择了题目。学生的基本信息应在注册时就应填写完成,并在登录后提供学生修改基本信息的功能。

列名 数据类型 字段长度 是否主键 是否为空 备注
Id Int(32) int NO
Number Varchar(84) varchar YES 学号
Name Varchar(100) varchar YES 姓名
Department_id Int(100) int YES 系别id
Class Varchar(100) varchar YES 班级
Password Varchar(100) varchar YES 密码
Contact_phone Varchar(100) varchar YES 联系电话

题目表结构-- tb_item

列名 数据类型 字段类型 是否主键 是否为空 备注
Id Int(11) Int NO
Name Varchar(255) Varchar YES 名称
Type Int(11) Int YES 选取类型
State Int(11) Int YES
Create_time datetime Datetime YES 创建时间

题目方向表结构—tb_item_category

列名 数据类型 字段类型 是否主键 是否为空 备注
Id Int(11) int NO
Item_id Int(11) int YES 条目id
Category_id Int(11) int YES 分类id
state Int(11) int YES 状态:未选0/已选1

题目+方向作为学生的唯一选择,当学生选择该题目的某个方向后,在题目 方向表中相应行的 state 就会变为 1,表示已经被选取。

已选择信息表结构 —— tb_order

列名 数据类型 字段类型 是否主键 是否为空 备注
Id Int(11) int NO
Member_order_id Int(11) int NO 学生已选择题目信息id
Group_id Int(11) int YES 团队id
Type Int(11) int NO 类别:个人0/团队1
Create_time Datetime Datetime YES 生成时间

学生已选择题目信息表结构-- tb_member_order

列名 数据类型 字段类型 是否主键 是否为空 备注
Id Int(11) int NO
Member Int(11) int NO 成员id
Item_id Int(11) int NO 条目id
Category_id Int(11) int NO 分类id
Group_id Int(11) int YES 团队id
Tercher_id Int(11) int NO 教师id

教师表结构—tb_teacher

列名 数据类型 字段类型 是否主键 是否为空 备注
Id Int(11) Int NO
Name Varchar(64) Varchar YES
Capacity Int(11) Int YES 容量
Student_count Int(11) Int YES 学生数量
content Varchar(255) Varchar YES 备注

当教师的学生数量大于其容量时无法再对该教师进行选取。

系统信息表结构-tb_system

Jkey Jvalue Description
IS_OPEN_CHOOSE 0 是否开放选择条目1:关闭 0:开启
IS_OPEN_GROUP 1 是否开放团队功能1:关闭 0:开启
IS_OPEN_REGISTER 0 是否开放注册功能1:关闭 0:开启
MEMBER_MAX_COUNT 20 学生最大数量
MEMBER_ORDER_DELETE 0 是否开放用户删除订单1:关闭 0:开启

第4章 系统实现

经过几个月的研究与开发,学生毕业论文选题系统的基本功能已经基本实现,具体的运行效果如下图所示。

4.1 登录注册管理界面

用户登录 :学生进入该系统进行登录。系统将检查输入的用户名、密码和所选角色,以确定其身份是否正确[7]。图4.1为学生登录界面图。

注册界面 :在第一次登陆该系统时,学生需要按照信息填写自己的姓名,学号,系别,班级,邮箱,电话以及密码,之后方可登录。图4.2为学生注册界面图。

4.2 功能模块界面

学生通过注册,登录该系统后,可以根据在该系统中的课题所涉及的专业,课题的教师,以及自己专业是否可以匹配等做出对照,并且也可以查看到别人已经选择的论文课题,可以根据别人选择的课题做出相对应的选择。具体操作界面如下图4.3所示。

学生通过注册登录本系统,登录成功后可以查看个人信息,并进行编辑。在查看选择的页面中,可查看个人选择信息,包括课题的选择和教师信息。如图4.4所示。

管理员登录后。可查看教师信息

管理员登录本系统后,可以查看教师的课题,并对其进行编辑和删除。如下图4.6所示。

管理员登录本系统后,可以编辑学生的个人信息。如下图4.7所示。

4.5 项目代码

拦截器实现

java public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler != null) { List<Annotation> annotationList = new ArrayList<>(); if (handler.getClass().isAssignableFrom(HandlerMethod.class)) { Class clazz = ((HandlerMethod) handler).getMethod().getDeclaringClass(); Annotation[] classAnnotations = clazz.getAnnotations(); for (Annotation annotation : classAnnotations) { annotationList.add(annotation); } Annotation[] methodAnnotations = ((HandlerMethod) handler).getMethod().getAnnotations(); for (Annotation annotation : methodAnnotations) { annotationList.add(annotation); } for (int i = 0; i < annotationList.size(); i++) { boolean hasClear = false; Annotation annotation = annotationList.get(i); //获取Before注解 Before before = null; try { before = (Before) annotation; } catch (Exception e) { } if (before != null) { for (int j = i + 1; j < annotationList.size(); j++) { Annotation annotation1 = annotationList.get(j); Clear clear = null; try { clear = (Clear) annotation1; } catch (Exception e) { } if (clear != null) { hasClear = true; break; } } //在@Before注解后面如果有@Clear注解,该注解就无效 if (!hasClear) { Class<? extends TInterceptor> interceptorlll = before.value(); Object object = Class.forName(interceptorlll.getCanonicalName()).newInstance(); Class[] clazzs = new Class[]{HttpServletRequest.class, HttpServletResponse.class, Object.class}; Method method = object.getClass().getMethod("interceptor", clazzs); Object[] params = new Object[]{request, response, handler}; boolean result = (boolean) method.invoke(object, params); return result; } } } } } return true; } @Override public void postHandle (HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {} @Override public void afterCompletion (HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { if (handler != null) { List<Annotation> annotationList = new ArrayList<>(); if (handler.getClass().isAssignableFrom(HandlerMethod.class)) { Class clazz = ((HandlerMethod) handler).getMethod().getDeclaringClass(); Annotation[] classAnnotations = clazz.getAnnotations(); for (Annotation annotation : classAnnotations) { annotationList.add(annotation); } Annotation[] methodAnnotations = ((HandlerMethod) handler).getMethod().getAnnotations(); for (Annotation annotation : methodAnnotations) { annotationList.add(annotation); } for (int i = 0; i < annotationList.size(); i++) { boolean hasClear = false; Annotation annotation = annotationList.get(i); //获取After注解 After after = null; try { after = (After) annotation; } catch (Exception e1) { } if (after != null) { for (int j = i + 1; j < annotationList.size(); j++) { Annotation annotation1 = annotationList.get(j); Clear clear = null; try { clear = (Clear) annotation1; } catch (Exception e1) { } if (clear != null) { hasClear = true; break; } } //在@After注解后面如果有@Clear注解,该注解就无效 if (!hasClear) { Class<? extends TInterceptor> interceptorlll = after.value(); Object object = Class.forName(interceptorlll.getCanonicalName()).newInstance(); Class[] clazzs = new Class[]{HttpServletRequest.class, HttpServletResponse.class, Object.class}; Method method = object.getClass().getMethod("interceptor", clazzs); Object[] params = new Object[]{request, response, handler}; method.invoke(object, params); } } } } } }

MD5加密工具

java /** * MD5算法加密 */ public class Md5Util { // 全局数组 private static final String[] strDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; // 返回形式为数字跟字符 private static String byteToArrayString(byte bByte) { int iRet = bByte; if (iRet < 0) { iRet += 256; } int iD1 = iRet / 16; int iD2 = iRet % 16; return strDigits[iD1] + strDigits[iD2]; } // 转换字节数组16进制字串 private static String byteToString(byte[] bByte) { StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < bByte.length; i++) { sBuffer.append(byteToArrayString(bByte[i])); } return sBuffer.toString(); } public static String getMD5Code(String strObj) { try { MessageDigest md = MessageDigest.getInstance("MD5"); // md.digest() 该函数返回为存放哈希结果的byte数组 return byteToString(md.digest(strObj.getBytes())); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); return strObj; } } }

第5章 系统测试

在本次毕业设计中,我认为系统测试既是一个必不可少的环节,也是最为重要的环节。系统测试,不仅是对系统各项功能的检验,也是对于本人能力的最终测试。该章节主要是对本系统研究的目的,测试的要求、方法和结果进行了总结,检验系统是否存在漏洞和不足。

5.1 测试目的和要求

系统测试的目的是查看系统能否能够用正常运行,包括学生和管理员所包括的各项功能是否可以实现。在测试的过程中,应该对整个过程进行规划,对测试的顺序进行严格的把控。在测试时,应该边测试,边进行测试项目的记录,可在以后对系统完善的过程中起参照的作用。

5.2 测试方法

测试的方法分为黑盒测试和白盒测试。本系统采用黑盒测试。相对于白盒测试,黑盒测试更加能够体现该系统的测试结果。系统能否满足师生间的选题需求,利用黑盒测试可以查看是不是有不正确的功能。在哪些方面还存在什么不足,或者遗漏了什么功能。

5.3 测试结果

本次测试主要针对学生选择课题功能,管理员能否可以对教师以及学生的信息进行测试。测试结果为:学生可以正常登录系统,可以对个人信息进行增删改查等操作;学生可以进行自由选课,可查看自己教师的信息;管理员可以对教师以及学生的信息进行编辑,可以针对出现的问题进行修改。

可以说本次测试的过程中,各个功能模块都基本完成,但是这次结果存在一些问题。比如在选题过程中出现一种重复论文的选择。这是这次系统的不足之处,而且在系统中,不一样的学生之间可能会有数据冲突,这也是自己没有考虑到的问题。以后可以针对这些问题,进行逐步完善。

结论

最近几个月可以说是一个自我审查的过程,这个过程比较辛苦,也比较劳累,主要是对自己所学专业的实际操作,对自己所学知识的掌握程度。目前,这个系统各个功能运行良好,达到了我自己预期的目标。毕业论文选题系统对于我校学生毕业选题带来了很大的便利。

该系统的设计对象主体为两方面。一方面,学生可以自行在网上进行毕业论文的选择,另一方面教师管理员可以在线对课题进行修改。这两个主体之间的权限分明,从而实现了论文选题的功能。但是,该系统在实现过程中还存在很多的问题,比如在教师功能模块中没有完善,模糊了教师和管理员之间的权限。

通过本次的毕业设计,我终于意识到了掌握一些理论知识是远远不够的,必须将理论运用于实践,将二者巧妙的结合,才可以取得真正的进步。

参考文献

  • 基于MVC的学生管理信息系统的设计与实现(电子科技大学·宋羽韬)
  • 基于Spring的教育资源管理系统的研究与实现(华中科技大学·梁力)
  • 基于Epstar平台的学生论文管理系统(电子科技大学·全石峰)
  • 基于工作流技术的大学生毕业设计管理系统(大连理工大学·李五一)
  • 基于实训平台的教学管理系统的设计与实现(东北大学·李晓慧)
  • 高校毕业设计论文管理系统设计与实现(电子科技大学·侯凌霄)
  • 基于.NET的毕业设计选题系统的设计与实现(吉林大学·李瑞)
  • 临沂大学本科生毕业设计管理系统的设计与实现(山东大学·赵敏)
  • 基于J2EE的毕业设计指导系统的设计与实现(中南大学·陈丽平)
  • 高校科研管理系统的设计与实现(燕山大学·薄艳莉)
  • 成人教育毕业设计管理系统(吉林大学·张冠春)
  • 基于.Net高校毕业设计网上选题系统设计与实现(电子科技大学·晏成竹)
  • 基于.NET的毕业设计选题系统的设计与实现(吉林大学·李瑞)
  • 基于J2EE的毕业设计指导系统的设计与实现(中南大学·陈丽平)
  • 基于MVC的学生管理信息系统的设计与实现(电子科技大学·宋羽韬)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:毕设工厂 ,原文地址:https://bishedaima.com/yuanma/35496.html

相关推荐

发表回复

登录后才能评论