学生成绩预测与分析可视化平台

一.创作思路

在平时办公中,我们往往需要对数据进行各种数据分析与图形可视化成图表,这些操作我们可以采用wps,word等等办公软件,于是我想自己尝试写一个线上的平台,专门实现上传文件,勾选相应的数据,采用Echarts生成图表,将Echars图表生成图表的全部步骤让用户自行选择生成图表,用户可以将生成的图表保存下来进行使用。目前开发中主要分析与预测学生数据为主,同时搭配上自主选择生成图表的工作台模块,以便后续的升级。

二.技术思路

1.技术路线:使用Vue3+pinia+router+Echarts+datav

2.功能模块:

1、 数据管理模块: 用于数据的收集、存储和管理,其中包括学生成绩数据、个人信息
等。
2、 成绩可视化模块: 能够根据用户需求,将成绩数据以柱状图、折线图、饼状图等形
式进行可视化展示。
3、 个性化分析模块: 根据用户的选择和参数设定,对成绩数据进行个性化分析。
4、 用户界面: 提供给用户的操作界面,包括数据输入、参数设置、图表展示等功能。

三.界面展示

1、登录注册页面:用户通过邮箱号和密码登录进入学生成绩可视化平台

1.1.实现思路:背景的动态粒子效果采用tsparticles,大家如果感兴趣的话,可以点击连接去官网查看。邮箱登录以及验证码方面,我主要是采用node里面的一个邮箱模块nodemailer,采用mysql存储用户信息,其实我感觉用mongdb可能更方便一些,但是当时没考虑这么多。

2.数据分析界面用户可以在操作台勾选数据,选择自己想要生成的图标,定制化设计图表,提供各种可视化图表,如折线图柱状图,饼状图等。

2.1.生成饼状图:用户可以点击鼠标左键,在平台上勾选相应的数据进行分析,用户可以自己定义图表的样式,布局,实时更改。然后图片中展示数据是采用mockjs随机生成。

2.2.勾选数据实现原理:使用xlsx模块将用户上传的文件数据解析出来存储在pinia,使用表格渲染到界面给每一个格子添加一个点击,移入,移出事件,方便用户勾选,主要数据代码如下

<template>
    <!-- 表格模板,使用 v-for 指令遍历 datatables.tables 中的数据 -->
    <table class="csv-table" ref="tablesbox">
        <tr v-for="(row, index) in datatables.tables" :key="index">
            <!-- 为每个单元格绑定点击和鼠标悬停事件,传递行列信息 -->
            <td v-for="(value, key) in row" :key="key" @click="draw" @mouseover="xuanran" :data-coloum="index"
                :data-row="key" :data-postion="index * 10 + key">{
  
  { value }}</td>
        </tr>
    </table>
</template>

<script setup>
import { ref, onMounted, watch, toRefs } from "vue";
import { useCounterStore } from "@/stores/counter"

// 使用 Pinia store
const datatables = useCounterStore()

// 将 store 中的属性转为 refs
const { Mouseselected, tables } = toRefs(datatables)

// 定义 ref 变量
let isMouseDown = false;
const tablesbox = ref()
let num = []

// 在组件挂载时添加事件监听器
onMounted(() => {
    document.addEventListener('mousedown', () => {
        isMouseDown = true;
        tablesbox.value.classList.add('cursor')
    });
    document.addEventListener('mouseup', () => {
        isMouseDown = false;
        tablesbox.value.classList.remove('cursor')
    });
})

// 定义起点和父节点坐标
let start = { x: 0, y: 0 }
let parent = { x: 0, y: 0 }

// 绘制选中的单元格
const draw = (e) => {
    guiling()  // 清除所有单元格的样式
    e.target.style.backgroundColor = 'rgb(180, 178, 178,0.7)';
    e.target.style.border = '2px dotted rgba(205, 208, 20)';
    start.y = e.target.getAttribute('data-coloum')
    start.x = e.target.getAttribute('data-row')
    datatables.dataprencet = [e.target.innerHTML]
}

// 渲染鼠标悬停时的效果
const xuanran = (e) => {
    if (isMouseDown) {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值