项目实训——实验平台(一)

目录

获取实验老师任教的实验课

ExMsgMapper.xml:

ExMsgMapper:

IExMsgService:

ExMsgServiceImpl:

controller文件:

ExMsgForm.vue:

 上传实验要求文件

健壮性

文件表示方式


实验平台主要完成实验教师发布任务,学生提交作业、教师批改作业、学生查看成绩这四个部分

获取实验老师任教的实验课

首先要获取实验老师任教的实验课,实验老师有一个或两个,因此写sql语句时需要使用模糊匹配

ExMsgMapper.xml:

jeecg中mapper的模糊查询不能用like,而是使用like CONCAT('%','需要查询字段','%')

<select id="getCourse" resultType="org.jeecg.modules.demo.ExtApply.entity.ExtApply">
        select *
        from ext_apply
        where testteacher like CONCAT('%',#{tid},'%')
    </select>

ExMsgMapper:

List<ExtApply> getCourse(@Param("tid") String tid);

IExMsgService:

List<ExtApply> getCourse(String tid);

ExMsgServiceImpl:

@Override
    public List<ExtApply> getCourse(String tid) {

        return this.baseMapper.getCourse(tid);
    }

controller文件:

首先获取处理用户sysUser,再获取其账号

@RequestMapping(value = "/getCourse",method = RequestMethod.GET)
	 public Result<?> allList(@RequestParam(name="tid",defaultValue = "1")String tid){
		 SysUser sysUser = iFlowThirdService.getLoginUser();
		 tid = sysUser.getUsername();
		 System.out.println(tid);
		 List<ExtApply> allList = exMsgService.getCourse(tid);
		 return Result.ok(allList);
	 }

ExMsgForm.vue:

前端不需要向后端传送任何参数,用getAction()获取数值:

getCourse(){
            getAction("/ExMsg/exMsg/getCourse",{tid:""}).then(res=>{
                if(res.success){
                    this.resultList = res.result;
                    console.log(this.resultList);
                }else{
                    this.$message.error("发送失败")
                }
            })
        },

获取到后端传来的result将其传入自定义的resultList中

v-for属性将教师所授课程展示出来

<a-col :span="24">
            <a-form-model-item label="实验课程信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="courseord">
              <a-select  placeholder="请选择" >
                <a-select-option v-for="(item,index) in resultList" :value="item.id" v-on:click="result1(item)" >{{"课程编号:"+item.courseid+" 课序号:"+item.courseord+" 课程姓名:"+item.coursename+" 班级:"+item.classes}}</a-select-option>
              </a-select>
            </a-form-model-item>
          </a-col>

选择后用v-on:click = "result1(item)",将选择的信息传入model中,便于后续添加,通过add方法插入到数据库中

result1(itemN){
            this.model.extid = itemN.extid;
            this.model.exname = itemN.exname;
            this.model.courseid = itemN.courseid;
            this.model.courseord = itemN.courseord;
            this.model.coursename = itemN.coursename;
            this.model.courseclass = itemN.classes;
        },

结果:

 上传实验要求文件

使用JUpload组件,原框架此组件无法正常上传文件,需自己配置

可以使用minio文件上传,也可使用阿里云SSO文件上传,经过两种方式的使用对比还是阿里云SSO较为方便

具体配置:(5条消息) 项目实训——Jeecg文件上传配置及使用_小飞侠彼得潘101的博客-CSDN博客

配置完成后,可以上传文件并且获取到文件地址(String类型,无法直接跳转,需要后续修改为链接

健壮性

同一班级、同一课程的同一任务不可重复编辑发布

所以首先得在数据库中查询是否有此班级、课程、同一任务的数据

<select id="getThisTask" resultType="org.jeecg.modules.demo.ExMsg.entity.ExMsg">
        select *
        from ex_msg
        where courseid = #{courseid} and courseord = #{courseord} and extimes = #{extimes}
    </select>
 List<ExMsg> getThisTask(@Param("courseid") String id,@Param("courseord") String courseord,@Param("extimes") String extimes);
List<ExMsg> getThisTask(String courseid,String courseord,String extimes);
@Override
    public List<ExMsg> getThisTask(String courseid, String courseord, String extimes) {
        return this.baseMapper.getThisTask(courseid,courseord,extimes);
    }

修改controller中的add方法:

/**
	 *   添加
	 *
	 * @param exMsg
	 * @return
	 */
	@AutoLog(value = "实验任务数据-添加")
	@ApiOperation(value="实验任务数据-添加", notes="实验任务数据-添加")
	@PostMapping(value = "/add")
	public Result<String> add(@RequestBody ExMsg exMsg) {
		List<ExMsg> list = exMsgService.getThisTask(exMsg.getCourseid(),exMsg.getCourseord(),exMsg.getExtimes());

		if(list.size() == 0){
			//若数据库中没有此条数据
			exMsgService.save(exMsg);
			return Result.OK("添加成功!");
		}else{
			//若同一课程同一班级已经发布过此任务,则提示用户
			return Result.error("此班级已经发送过此课程的此任务,请重新选择!");
		}

	}

结果:

文件表示方式

因为OSS上传文件只能获取文件地址,不是链接形式,因此查看较为困难。所以要将文件地址String格式变为链接

使用插槽slot,将“实验要求文件”由String转为链接形式

首先定义"实验要求文件"这一列,调用前面定义的插槽部件:

ExMsgList.vue:

// 表头
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
            {
                title:'是否发布',
                align:"center",
                dataIndex: 'isvisiable',
                width:"100px"
            },
            {
                title:'课程编号',
                align:"center",
                dataIndex: 'courseid',
                width:"100px"
            },
          {
            title:'课程序号',
            align:"center",
            dataIndex: 'courseord',
              width:"100px"
          },
          {
            title:'课程名称',
            align:"center",
            dataIndex: 'coursename',
              width:"100px"
          },
            {
                title:'课程班级',
                align:"center",
                dataIndex: 'courseclass',
                width:"100px"
            },
          {
            title:'实验名称',
            align:"center",
            dataIndex: 'experimentname',
              width:"100px"
          },
          {
            title:'实验次数',
            align:"center",
            dataIndex: 'extimes',
              width:"100px"
          },
            {
                title:'截止日期',
                align:"center",
                dataIndex: 'deadline',
                width:"100px"
            },
          {
            title:'实验要求文件',
            align:"center",
            dataIndex: 'filecontentString',
              width:"200px",
             scopedSlots: {customRender: 'fileUrl'}
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],

 前面定义的插槽部件:

​
<span slot="fileUrl" slot-scope="fileUrl">
          <a :href="fileUrl" v-text="getFileName(fileUrl)"></a>
        </span>

​

此时"实验要求文件"中的文件地址已经变为链接形式可以跳转,但是文件名过长,所以调用getFileName()方法将文件名从url地址中摘取出来:

getFileName(path){
            if(path.lastIndexOf("\\")>=0){
                let reg=new RegExp("\\\\","g");
                path = path.replace(reg,"/");
            }
            return path.substring(path.lastIndexOf("/")+1);
        },

此时展示的界面为:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个实际问题的解决方案或者开展一项有价值的项目。 首先,毕业设计的选择通常由学生根据个人兴趣、专业方向以及实际需求来确定。学生需要在导师的指导下明确研究目标、问题陈述,确立研究的范围和深度。毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用各种研究方法,如实验、调查、案例分析等,以获取必要的数据和信息。通过这些活动,学生能够培养扎实的专业技能,提升解决实际问题的实际能力。 第三,毕业设计的撰写是整个过程的重要组成部分。学生需要将研究过程、方法、结果以及结论等详细记录在毕业论文中,以展示其研究的全貌和成果。同时,撰写毕业设计还有助于提高学生的学术写作水平,培养清晰、逻辑的表达能力。 最后,毕业设计的评价通常由导师和相关专业人士进行。评价标准包括研究的创新性、实用性、方法的科学性以及论文的质量等方面。学生在毕业设计中获得的成绩也将直接影响其最终的学业成绩和学位授予。 总的来说,毕业设计是高等教育中的一项重要环节,通过此过程,学生不仅能够巩固所学知识,还能培养独立思考和解决问题的能力,为将来的职业发展奠定坚实的基础。
### 回答1: 电影推荐系统是一种基于用户兴趣和行为数据的算法系统,它利用机器学习和数据挖掘等技术,分析用户的历史观影记录、评分和偏好,为用户推荐最适合他们的电影。 在Python项目实训中,我们可以使用Python编程语言和相关的库和工具,去构建一个电影推荐系统。首先,我们需要收集和整理电影数据集,包括电影的名称、分类、导演、演员、评分等信息。我们可以通过一些公开的电影数据库或者API来获取这些数据。 接下来,我们可以使用Python中的机器学习库(如scikit-learn)或深度学习库(如Tensorflow)来构建一个协同过滤推荐模型。协同过滤是一种常用的方法,它基于用户的行为数据,比如用户的历史观影记录和评分,来计算用户的电影相似性,并且根据其他用户的评分和观影记录,为用户生成个性化的电影推荐。 通过对电影数据进行特征工程和处理,我们可以使用Python的数据处理库(如pandas)来处理和清洗数据。然后,我们可以使用Python的数据可视化库(如matplotlib和seaborn)来对电影数据进行可视化分析,从而更好地理解数据的分布和规律。 最后,我们可以使用Python的Web开发框架(如Django)来构建一个用户交互界面,用户可以输入自己的偏好和历史观影记录,系统将根据这些信息提供个性化的电影推荐结果。 通过Python项目实训,我们可以学习和实践推荐系统的建模和算法。同时,我们也可以学习和应用Python在数据处理、可视化和Web开发等方面的能力,这对于我们日后的职业发展非常有帮助。 ### 回答2: 电影推荐系统是一种利用机器学习和数据分析技术来为用户提供个性化电影推荐的应用程序。Python项目实训中,我们可以通过以下步骤来开发电影推荐系统。 首先,我们需要收集和准备电影数据集。可以从公开数据集或者电影数据库中获取电影信息,如电影名称、类型、导演、演员和用户评分等。将这些数据导入到Python环境中进行分析和处理。 接下来,我们可以使用机器学习技术来建立推荐算法模型。常见的推荐算法包括协同过滤、基于内容的推荐和深度学习等。可以使用Python库如scikit-learn或者Keras来实现这些算法。 在建立推荐模型之后,我们可以利用该模型为用户生成个性化推荐列表。根据用户的历史行为和偏好,系统可以分析相似用户或者相似电影,并推荐用户可能喜欢的电影。可以使用Python的pandas和numpy库来对数据进行处理和计算。 最后,我们还可以通过用户反馈和评价对推荐系统进行评估和优化。根据用户的反馈,可以调整推荐算法的参数或者引入其他技术来提高推荐的准确性和用户满意度。 总结来说,Python项目实训中的电影推荐系统主要包括数据收集、数据处理、推荐算法建模和用户反馈评估等步骤。通过Python的机器学习和数据分析技术,可以开发出一个个性化、准确度高的电影推荐系统。 ### 回答3: 电影推荐系统是基于Python语言进行开发的一个项目实训项目。该系统的主要目的是根据用户的喜好和观影记录,推荐符合用户口味的电影。 在实现该系统时,首先需要收集电影的相关数据。可以使用爬虫技术从互联网上获取电影的信息,比如电影的名称、导演、演员、类型、时长、评分等。获取到的数据可以存储在数据库中,以便后续使用。 接下来,需要设计一个算法来进行电影的推荐。常用的算法有基于内容的推荐算法和协同过滤推荐算法。基于内容的推荐算法是根据电影的特征,比如类型、导演、演员等,来推荐类似的电影给用户。而协同过滤推荐算法是根据用户的观影历史和其他用户的行为数据,找出相似的用户,并将相似用户喜欢的电影推荐给当前用户。 在系统实现过程中,还可以考虑引入机器学习的算法,比如深度学习和自然语言处理等技术,来提升推荐的准确性和个性化程度。 最后,在界面设计方面,可以使用Python的GUI库,比如Tkinter或PyQt等,来实现一个友好的用户界面,使用户能够方便地输入自己的喜好和查看系统推荐的电影。 该项目的实施可以考虑以下步骤:需求分析、数据库设计、数据采集、算法选择与实现、界面设计与实现、系统测试与调试等。 通过这个项目实训,可以提高学生的Python编程能力,了解数据获取和处理的方法,熟悉算法的选择和实现,掌握界面设计和用户交互的技术,培养系统分析和设计的能力,进一步提升学生的综合实践能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值