项目编号:BS-QD-002

主要需求:

  • 学生信息录入、修改、删除、查询
  • 宿舍管理评分
  • 学生早起率、懒床率
  • 学生宿舍打扫频率
  • 学生晚归情况
  • 楼层管理

考虑到实用性,该系统需要拆分为两大子系统,一个是学生端系统,一个是后台管理端系统。学生端系统主要提供给学生使用,负责一些宿舍记录及个人信息记录的基本操作;后台管理模块则是主要负责对所有学生信息的整理,提供宿舍管理、楼层管理、数据查看等权限,提供给宿舍管理员使用的。

学生登陆

学生系统拥有以下功能:

  • 创建账户
  • 分配宿舍
  • 填写个人信息
  • 修改个人信息
  • 起床打卡(用于统计懒床率)
  • 归宿登记(用于统计晚归情况)
  • 打扫记录(用于统计宿舍打扫频率)
  • 查看宿日常数据

管理员登陆

管理系统拥有以下功能:

  • 楼层管理
  • 宿舍评价
  • 宿舍信息管理
  • 学生信息查看
  • 保洁人员管理
  • 统计学生早起率
  • 统计学生宿舍打扫频率
  • 统计学生晚归

超级管理员在享有上述管理员同等权限的同时额外拥有如下功能:

  • 创建管理员
  • 创建宿舍楼
  • 为宿舍楼分配管理员
  • 为宿舍楼分配保洁人员

前端:

  • Vue 作为基础框架
  • vue-router 控制路由(hash 模式)
  • vuex 状态管理
  • axios 接入数据
  • Vue-element-admin 作为基础框架

后台(Nodejs):

  • Koa 作为基础框架
  • koa-router —— 服务端路由控制
  • koa-static —— 读取静态文件
  • koa-jwt —— JWT 登录校验
  • koa-body —— http body 数据处理
  • koa-compress —— Gzip 压缩
  • koa-cors —— CORS 解决跨域问题
  • sequelize —— ORM

数据库:

  • MySQL

数据库设计一览:

下面展示一下系统的部分功能:

仪表盘概揽:选择不同的宿舍楼查看相关信息

管理员管理:

宿舍楼管理

楼层管理

宿舍信息

宿舍入住学生信息

查看学生起床记录

查看学生归宿信息

查看学生宿舍打扫信息

查看个人信息

学生注册

注册后登陆系统

入住宿舍

起床打卡

归宿记录

打扫记录

后端工程:

前端工程

部门核心代码:

const { Building } = require("../model")module.exports = {getStudents: async function(buildingId) {const FloorController = require("./floor_controller")let users = []const building = await Building.findOne({ where: { id: buildingId } })const floors = await building.getFloors()for (let floor of floors) {const floorId = floor.idusers = [...users, ...(await FloorController.getStudents(floorId))]}return users},delBuilding: async function(id) {const { setStudentRoomNull } = require("./user_controller")const students = await this.getStudents(id)students.forEach(student => {setStudentRoomNull(student.id)})return await Building.destroy({ where: { id } })}
}
const _ = require("lodash")
const { User } = require("../model")module.exports = {async getEvaluatesInfo(evaluates) {const cpEvaluates = _.cloneDeep(evaluates)for (let evaluate of cpEvaluates) {const creator = await evaluate.getUser()evaluate.dataValues.userName = creator.name}return cpEvaluates}
}
const { Floor } = require("../model")module.exports = {getStudents: async function(floorId) {const { getStudentInfo } = require("./user_controller")let users = []const floor = await Floor.findOne({ where: { id: floorId } })const rooms = await floor.getRooms()for (let room of rooms) {const roomUsers = await room.getUsers()for (let user of roomUsers) {users.push(await getStudentInfo(user.id))}}return users}
}
module.exports = {UserController: require("./user_controller"),RoomController: require("./room_controller"),FloorController: require("./floor_controller"),BuildingController: require("./building_controller"),EvaluateController: require("./evaluate_controller"),RecordController: require("./record_controller")
}
const {User,GetupRecord,CleanRecord,BackRecord,Room,Floor,Building
} = require("../model")
const { Op } = require("sequelize")
const moment = require("moment")
const _ = require("lodash")const getupEarlyPoint = 8
const backEarlyPoint = 22module.exports = {// getup 相关async addGetupRecord(userId) {const user = await User.findOne({ where: { id: userId } })const todyRecord = await GetupRecord.findOne({where: {userId: user.id,roomId: user.roomId,createdAt: {[Op.gt]: moment().startOf("day").toDate(),[Op.lt]: moment().endOf("day").toDate()}}})if (todyRecord) {throw new Error("当天已经有记录,记录失败!")}return await GetupRecord.create({ userId: user.id, roomId: user.roomId })},async getUserGetupRecords(userId, days, pure = false) {days = parseInt(days)const user = await User.findOne({ where: { id: userId } })const roomId = user.roomIdconst room = await Room.findOne({ where: { id: roomId } })// 获取最近 days 天的记录const startTime = moment().subtract(days - 1 /* -1 代表查询天数包括今天 */, "days").startOf("day").toDate()const allRecords = []for (let i = 0; i < days; i++) {const todayStart = moment(startTime).add(i, "days").toDate()const todayEnd = moment(todayStart).endOf("day").toDate()let record = await GetupRecord.findOne({where: {userId,roomId,createdAt: {[Op.gt]: todayStart,[Op.lt]: todayEnd}},attributes: { exclude: ["updatedAt", "deletedAt"] }})if (record) {// 如果当天有记录就推入结果record = record.toJSON()record.time = moment(record.createdAt).format("HH:mm")} else if (!record && !pure) {// 如果获取的是全部数据且当前天无数据// 就建立一条空记录record = GetupRecord.build({id: "fake" + i,roomId,userId,createdAt: todayStart}).toJSON()record.time = null} else {continue}record.date = moment(record.createdAt).format("YYYY-MM-DD")record.userName = user.namerecord.roomNumber = room.numberallRecords.push(record)}return allRecords.reverse()},async getRoomGetupRecords(roomId, days, pure = false) {days = parseInt(days)const room = await Room.findOne({ where: { id: roomId } })const users = await room.getUsers()const records = {}for (let user of users) {records[user.name] = await this.getUserGetupRecords(user.id, days, pure)}return records},async getGetupRecordLineCharData(roomId) {const room = await Room.findOne({ where: { id: roomId } })const users = await room.getUsers()const data = { columns: ["周期"], rows: [] }const dataCount = 5 // 获取的记录条数const dataStep = 7 // 每条记录相隔的条数// 初始化记录值for (let i = 0; i < dataCount; i++) {data.rows.push({ 周期: `最近${(i + 1) * dataStep}天` })}// 遍历当前宿舍的用户for (let user of users) {data.columns.push(user.name)for (let i = 0; i < dataCount; i++) {const days = (i + 1) * dataStep// 获取某学生最近 days 天的早起记录const records = await this.getUserGetupRecords(user.id, days, true)let earlyTimes = 0records.forEach(record => {// 统计这些记录中有几天是早起的const timeHour = parseInt(moment(record.createdAt).format("HH"))if (timeHour < getupEarlyPoint) {earlyTimes++}})// 计算早起率const probability = (earlyTimes / days).toFixed(4)data.rows[i][user.name] = probability}}return data},async getGetupTableData({current,step,buildingId,floorId,roomId,userId,startTime,endTime}) {// 初始化时间startTime = startTime? moment(startTime).startOf("day").toDate(): moment(0).toDate()endTime = endTime? moment(endTime).endOf("day").toDate(): moment().endOf("day").toDate()console.log("endTime: ", endTime)// 开始分情况获取数据let resultif (userId) {result = await GetupRecord.findAndCountAll({where: {userId: userId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (roomId) {result = await GetupRecord.findAndCountAll({where: {roomId: roomId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (floorId) {result = await GetupRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { floorId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (buildingId) {result = await GetupRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { buildingId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else {result = await GetupRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})}const getStudentInfo = require("./user_controller").getStudentInfolet rows = []for (let record of result.rows) {record = record.toJSON()delete record.roomconst userInfo = await getStudentInfo(record.userId)record = Object.assign(userInfo, record)record.time = moment(record.createdAt).format("HH:mm")record.date = moment(record.createdAt).format("YYYY-MM-DD")if (parseInt(moment(record.createdAt).format("HH")) < getupEarlyPoint) {record.early = true} else {record.early = false}rows.push(record)}result.rows = rowsreturn result},// back 相关async addBackRecord(userId) {const user = await User.findOne({ where: { id: userId } })const todyRecord = await BackRecord.findOne({where: {userId: user.id,roomId: user.roomId,createdAt: {[Op.gt]: moment().startOf("day").toDate(),[Op.lt]: moment().endOf("day").toDate()}}})if (todyRecord) {throw new Error("当天已经有记录,记录失败!")}return await BackRecord.create({ userId: user.id, roomId: user.roomId })},async getUserBackRecords(userId, days, pure = false) {days = parseInt(days)const user = await User.findOne({ where: { id: userId } })const roomId = user.roomIdconst room = await Room.findOne({ where: { id: roomId } })// 获取最近 days 天的记录const startTime = moment().subtract(days - 1 /* -1 代表查询天数包括今天 */, "days").startOf("day").toDate()const allRecords = []for (let i = 0; i < days; i++) {const todayStart = moment(startTime).add(i, "days").toDate()const todayEnd = moment(todayStart).endOf("day").toDate()let record = await BackRecord.findOne({where: {userId,roomId,createdAt: {[Op.gt]: todayStart,[Op.lt]: todayEnd}},attributes: { exclude: ["updatedAt", "deletedAt"] }})if (record) {// 如果当天有记录就推入结果record = record.toJSON()record.time = moment(record.createdAt).format("HH:mm")} else if (!record && !pure) {// 如果获取的是全部数据且当前天无数据// 就建立一条空记录record = BackRecord.build({id: "fake" + i,roomId,userId,createdAt: todayStart}).toJSON()record.time = null} else {continue}record.date = moment(record.createdAt).format("YYYY-MM-DD")record.userName = user.namerecord.roomNumber = room.numberallRecords.push(record)}return allRecords.reverse()},async getRoomBackRecords(roomId, days, pure = false) {days = parseInt(days)const room = await Room.findOne({ where: { id: roomId } })const users = await room.getUsers()const records = {}for (let user of users) {records[user.name] = await this.getUserBackRecords(user.id, days, pure)}return records},async getBackRecordLineCharData(roomId) {const room = await Room.findOne({ where: { id: roomId } })const users = await room.getUsers()const data = { columns: ["周期"], rows: [] }const dataCount = 5 // 获取的记录条数const dataStep = 7 // 每条记录相隔的条数// 初始化记录值for (let i = 0; i < dataCount; i++) {data.rows.push({ 周期: `最近${(i + 1) * dataStep}天` })}// 遍历当前宿舍的用户for (let user of users) {data.columns.push(user.name)for (let i = 0; i < dataCount; i++) {const days = (i + 1) * dataStep// 获取某学生最近 days 天的归宿记录const records = await this.getUserBackRecords(user.id, days, true)let earlyTimes = 0records.forEach(record => {// 统计这些记录中有几天是早归的const timeHour = parseInt(moment(record.createdAt).format("HH"))if (timeHour < backEarlyPoint) {earlyTimes++}})// 计算早起率const probability = (earlyTimes / days).toFixed(4)data.rows[i][user.name] = probability}}return data},async getBackTableData({current,step,buildingId,floorId,roomId,userId,startTime,endTime}) {// 初始化时间startTime = startTime? moment(startTime).startOf("day").toDate(): moment(0).toDate()endTime = endTime? moment(endTime).endOf("day").toDate(): moment().endOf("day").toDate()// 开始分情况获取数据let resultif (userId) {result = await BackRecord.findAndCountAll({where: {userId: userId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (roomId) {result = await BackRecord.findAndCountAll({where: {roomId: roomId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (floorId) {result = await BackRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { floorId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (buildingId) {result = await BackRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { buildingId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else {result = await BackRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})}const getStudentInfo = require("./user_controller").getStudentInfolet rows = []for (let record of result.rows) {record = record.toJSON()delete record.roomconst userInfo = await getStudentInfo(record.userId)record = Object.assign(userInfo, record)record.time = moment(record.createdAt).format("HH:mm")record.date = moment(record.createdAt).format("YYYY-MM-DD")if (parseInt(moment(record.createdAt).format("HH")) < backEarlyPoint) {record.early = true} else {record.early = false}rows.push(record)}result.rows = rowsreturn result},// clean 相关async addCleanRecord(userId) {const user = await User.findOne({ where: { id: userId } })const todyRecord = await CleanRecord.findOne({where: {roomId: user.roomId,createdAt: {[Op.gt]: moment().startOf("day").toDate(),[Op.lt]: moment().endOf("day").toDate()}}})if (todyRecord) {throw new Error("当天已经有清扫记录,记录失败")}return await CleanRecord.create({userId: user.id,roomId: user.roomId})},async getUserCleanRecords(userId, days) {// 获取打扫记录不会自动补全每一天的信息days = parseInt(days)const user = await User.findOne({ where: { id: userId } })const roomId = user.roomIdconst room = await Room.findOne({ where: { id: roomId } })// 获取最近 days 天的记录const startTime = moment().subtract(days - 1 /* -1 代表查询天数包括今天 */, "days").startOf("day").toDate()const todayEnd = moment().endOf("day").toDate()const records = await CleanRecord.findAll({where: {userId,roomId,createdAt: {[Op.gt]: startTime,[Op.lt]: todayEnd}},attributes: { exclude: ["updatedAt", "deletedAt"] },order: [["createdAt", "DESC"]]})const allRecords = []records.forEach(record => {record = record.toJSON()record.time = moment(record.createdAt).format("HH:mm")record.date = moment(record.createdAt).format("YYYY-MM-DD")record.userName = user.namerecord.roomNumber = room.numberallRecords.push(record)})return allRecords},async getRoomCleanRecords(roomId, days) {const room = await Room.findOne({ where: { id: roomId } })const startTime = moment().subtract(days - 1 /* -1 代表查询天数包括今天 */, "days").startOf("day").toDate()const todayEnd = moment().endOf("day").toDate()const records = await room.getCleanRecords({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: todayEnd}},attributes: { exclude: ["updatedAt", "deletedAt"] },order: [["createdAt", "DESC"]]})const allRecords = []for (let record of records) {const user = await record.getUser()record = record.toJSON()record.date = moment(record.createdAt).format("YYYY-MM-DD")record.time = moment(record.createdAt).format("HH:mm")record.userName = user.namerecord.roomNumber = room.numberallRecords.push(record)}return allRecords},async getCleanTableData({current,step,buildingId,floorId,roomId,userId,startTime,endTime}) {// 初始化时间startTime = startTime? moment(startTime).startOf("day").toDate(): moment(0).toDate()endTime = endTime? moment(endTime).endOf("day").toDate(): moment().endOf("day").toDate()// 开始分情况获取数据let resultif (userId) {result = await CleanRecord.findAndCountAll({where: {userId: userId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (roomId) {result = await CleanRecord.findAndCountAll({where: {roomId: roomId,createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (floorId) {result = await CleanRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { floorId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else if (buildingId) {result = await CleanRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},include: [{model: Room,where: { buildingId }}],limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})} else {result = await CleanRecord.findAndCountAll({where: {createdAt: {[Op.gt]: startTime,[Op.lt]: endTime}},limit: step,offset: step * (current - 1),order: [["createdAt", "DESC"]]})}const getStudentInfo = require("./user_controller").getStudentInfolet rows = []for (let record of result.rows) {record = record.toJSON()delete record.roomconst userInfo = await getStudentInfo(record.userId)record = Object.assign(userInfo, record)record.time = moment(record.createdAt).format("HH:mm")record.date = moment(record.createdAt).format("YYYY-MM-DD")record.early = nullrows.push(record)}result.rows = rowsreturn result},// 通用async getUserProbability(type, userId) {const user = await User.findById(userId)const startTime = user.checkTimelet records = []let allRecords = []switch (type) {case "getup":allRecords = await user.getGetupRecords({where: {createdAt: { [Op.gt]: startTime }}})allRecords.forEach(record => {let hour = parseInt(moment(record.createdAt).format("HH"))if (hour < getupEarlyPoint) {records.push(record)}})breakcase "back":allRecords = await user.getBackRecords({where: {createdAt: { [Op.gt]: startTime }}})allRecords.forEach(record => {let hour = parseInt(moment(record.createdAt).format("HH"))if (hour < backEarlyPoint) {records.push(record)}})breakcase "clean":records = await user.getCleanRecords({where: {createdAt: { [Op.gt]: startTime }}})breakdefault:throw new Error("参数传入错误")}// 计算从入住到现在有几天了const days = Math.abs(moment(startTime).diff(moment(), "days"))return (records.length / (days + 1)).toFixed(4)}
}
const { User } = require("../model")
const _ = require("lodash")
const RecordController = require("./record_controller")module.exports = {/*** 获取学生用户的完整信息* @param {Number} userId*/async getStudentInfo(userId) {const student = await User.findOne({where: { id: userId },attributes: { exclude: ["password", "deletedAt"] }})const room = await student.getRoom()const floor = await room.getFloor()const building = await floor.getBuilding()const getupProb = await RecordController.getUserProbability("getup", userId)const backProb = await RecordController.getUserProbability("back", userId)const cleanProb = await RecordController.getUserProbability("clean", userId)const info = Object.assign(student.dataValues, {roomNumber: room.number,floorId: floor.id,floorLayer: floor.layer,buildingId: building.id,buildingName: building.name,getupProb,backProb,cleanProb})return info},/*** 获取学生用户们的完整信息* @param {Array} users*/async getStudentsInfo(users) {const cloneUsers = _.cloneDeep(users)for (let user of cloneUsers) {delete user.dataValues.passworddelete user.dataValues.deletedAtconst room = await user.getRoom()const floor = await room.getFloor()const building = await floor.getBuilding()Object.assign(user.dataValues, {roomNumber: room.number,floorId: floor.id,floorLayer: floor.layer,buildingId: building.id,buildingName: building.name})}return cloneUsers},async setStudentRoomNull(id) {const student = await User.findOne({ where: { id, role: "student" } })const result = await student.update({ roomId: null })return result}
}

前端毕业设计项目:基于Vue+Nodejs实现宿舍管理系统相关推荐

  1. 基于Vue+Nodejs实现宿舍管理系统

    ​ 作者主页:编程指南针简介:Java领域优质创作者.CSDN博客专家 Java项目.简历模板.学习资料.面试题库.技术互助文末获取源码​ 项目编号:BS-QD-002 主要需求: 学生信息录入.修改 ...

  2. vue+elementui学生宿舍管理系统(报修,来访登记,水电费)java ssm项目介绍

    宿舍,是大学生在高校校园里一个重要的学习.生活.交往的空间环境,大学生大约有2/3的时间是在宿舍环境里渡过的.作为计算机应用的一部分,使用计算机对宿舍信息进行管理,具有着手工管理所无法比拟的优点.例如 ...

  3. 基于Vue的校园资源管理系统(前端代码)

    基于Vue的校园资源管理系统(前端代码) 作者:Jackshijin 项目背景 这是本人在毕业的时候选择的毕业设计方向,指导老师团队的课题有小程序.安卓开发.机器学习和嵌入式,而我选择了Web...因 ...

  4. 【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗

    文章目录 ⭐️ 赠书 - <前端工程化:基于Vue.js 3.0的设计与实践> ⭐️ 内容简介 ⭐️ 作者简介 ⭐️ 精彩书评 ⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - <前端工 ...

  5. 【计算机毕业文章】基于SSM的高校宿舍管理系统的设计与实现

    摘 要 近年来, 伴随着互联网产业的快速发展和大力推广,"数字化"."信息化"为关键字的校园建设已经成为了各大院校发展的共同课题.宿舍是在大学校园里面学习和生活 ...

  6. java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw

    java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw java毕业设计基于VUE的个人记账管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技 ...

  7. 基于Vue的电商管理系统 (1)

    正好这段时间在做一个电商管理系统的项目,借此总结一下.该项目主要是一个电商的后台管理系统,可实现管理用户账号,即登录.退出.用户管理.权限管理等,商品管理,即商品分类.分类参数.商品信息,订单信息等以 ...

  8. 基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调 ...

  9. Java毕设项目基于VUE的个人记账管理系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目基于VUE的个人记账管理系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilde ...

最新文章

  1. 一次性搞定权限树遍历(通用解决方案)
  2. 服务器系统安装ip配置,配置Win2008系统DNS服务器及主机的IP地址的具体步骤
  3. TNS-12545: Connect failed because target host or object does not exist
  4. 导出Android手机应用apk
  5. statement的增删改查和动态的增删改查
  6. 学会这十九招就会成为股市高手
  7. 基于JAVA+SpringMVC+MYSQL的宠物管理系统
  8. http 二进制_图解 HTTP 的前世今生!
  9. ios 高德地图加载瓦片地图_OpenLayers加载谷歌地球离线瓦片地图
  10. jsp % % ! 区别
  11. BT种子文件以及磁力文件 解析
  12. Springboot整合junit单元测试
  13. nbu 7.5备份oracle,NBU7.5备份oracle
  14. pandas DataFrame 交集并集补集
  15. 不要因为错爱而寂寞一生
  16. 内存测试内存检测工具
  17. 超详细注释NLP Question answering竞赛(印度语和泰米尔语)
  18. SQL取日期为当前月份的第几周思路
  19. ps 画中间透明的边框图形
  20. CSS---padding详解

热门文章

  1. 三轴加速度计Triaxial accelerometer
  2. 看广告赚钱,×××好方法
  3. fuse接口用法说明
  4. Kinect开发遇到的问题
  5. 有利可图网_公布有利可图的辅助项目手册
  6. 妻子决定你未来的事业高度
  7. 这次,认真搞了个外包兼职搞钱群!
  8. 【matlab】高斯-均匀-指数-瑞利分布
  9. 焚风现象(差分模板题)
  10. 解决vtk中vtkStreamTracer例子无法显示流线的疑问