Vue项目:学生管理系统

  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

查询学生

====

步骤1:设置导航

步骤2:添加路由

步骤3:创建页面

  • 步骤:

    • 步骤1:准备2个变量(pageInfo、studentVo)

    • 步骤2:编写查询condition函数,接收参数num

    • 步骤3:页面加载成功时,查询第一页

    • 步骤4:遍历结果


<template>

    <div>

        班级: <select v-model = "studentVo.cid">

            <option value="" disabled>--请选择--</option>

            <option :value="classes.cid" v-for = "(classes,index) in classesList" :key = "index">{{classes.cname}}</option>

        </select>

        姓名:<input type="text" v-model = "studentVo.studentName">

        年龄:<input type="text" v-model = "studentVo.startAge">——<input type="text" v-model = "studentVo.endAge">

        <input type="button" value = "查询" @click = "conditionStudent()">

        <table border="1">

            <tr>

                <td>ID</td>

                <td>班级</td>

                <td>姓名</td>

                <td>年龄</td>

                <td>生日</td>

                <td>性别</td>

                <td>操作</td>

            </tr>

            <tr v-for = "(student,index) in pageInfo.list" :key="index">

                <td>{{student.sid}}</td>

                <td>{{student.classes == null ? student.cname : student.classes.cname}}</td>

                <td>{{student.sname}}</td>

                <td>{{student.age}}</td>

                <td>{{student.birthday}}</td>

                <td>{{student.gender == 1 ? '男' : '女'}}</td>

                <td>

                    <router-link :to="{path:'/studentEdit',query:{sid : student.sid}}">修改</router-link>

                    <router-link to="" @click.native.prevent = "deleteStudent(student.sid)">删除</router-link>

                </td>

            </tr>

        </table>



        <!-- 分页 start -->

        当前第 {{pageInfo.pageNum}}页,共{{pageInfo.pages}}页, 总计数{{pageInfo.total}}条,

        每页 <select v-model = "pageInfo.pageSize" @change = "conditionStudent(1)">

            <option value="1">1</option>

            <option value="2">2</option>

            <option value="3">3</option>

            <option value="5">5</option>

            <option value="10">10</option>

        </select>条



        <a href="" v-if = "!pageInfo.isFirstPage" @click.prevent = "conditionStudent(1)">首页</a>

        <a href="" v-if = "pageInfo.hasPreviousPage" @click.prevent = "conditionStudent(pageInfo.pageNum - 1)">上一页</a>

        <a href="" v-for = "(num,index) in pageInfo.pages" @click.prevent = "conditionStudent(num)" :key="index">{{num}}</a>

        <a href="" v-if = "pageInfo.hasNextPage" @click.prevent = "conditionStudent(pageInfo.pageNum - 1)">下一页</a>

        <a href="" v-if = "!pageInfo.isLastPage" @click.prevent = "conditionStudent(pageInfo.pages)">尾页</a>

        跳转到 <input v-model = "pageInfo.pageNum" placeholder="enter跳转" @keyup.enter = "conditionStudent()"> 页

        <!-- 分页 end -->

    </div>

</template>



<script>

import axios from 'axios'



export default {

    data() {

        return {

            classesList:[],

            studentVo: {

                cid:''

            },

            pageInfo:{

                pageNum:1,

                pageSize:2

            }

        }

    },

    methods:{

        async selectClasses(){

            let { data: baseResult } = await axios.get("http://localhost:8888/classes");  

            this.classesList = baseResult.data

        },



        async conditionStudent(num){

            if(num){

                this.pageInfo.pageNum = num

            }

            var url = `http://localhost:8888/student/condition/${this.pageInfo.pageSize}/${this.pageInfo.pageNum}`;

            let {data: baseResult} = await axios.post(url,this.studentVo);

            this.pageInfo = baseResult.data

        },

    },

    mounted(){

        //查询所有班级

        this.selectClasses();

        //查询所有学生

        this.conditionStudent();

    }

}

</script>



<style>



</style>

添加学生

====

步骤1:设置导航

步骤2:添加路由

步骤3:创建页面

步骤:

  • 创建数据 班级数组 和 学生对象

  • 班级数据跟select绑定 table绑定学生对象

  • 发送post请求添加学生


<template>

  <div>

    <table border="1">

      <tr>

        <td>ID</td>

        <td>

          <input type="text" v-model = "student.sid">

        </td>

      </tr>

      <tr>

        <td>班级</td>

        <td>

          <select v-model = "student.cid">

            <option value="">--请选择--</option>

            <option :value="classes.cid" v-for = "(classes,index) in classesList" :key="index">{{classes.cname}}</option>

          </select>

        </td>

      </tr>

      <tr>

        <td>姓名</td>

        <td>

          <input type="text" v-model = "student.sname">

        </td>

      </tr>

      <tr>

        <td>年龄</td>

        <td> 

          <input type="text" v-model = "student.age">

        </td>

      </tr>

      <tr>

        <td>生日</td>

        <td>

          <input type="date" v-model = "student.birthday">

        </td>

      </tr>

      <tr>

        <td>性别</td>

        <td>

          <input type="radio" v-model = "student.gender" value = "1"> 男

          <input type="radio" v-model = "student.gender" value = "0"> 女

        </td>

      </tr>

      <tr>

        <td colspan="2">

          <input type="button" value = "添加学生" @click = "addStudent()">

        </td>

      </tr>

    </table>

  </div>

</template>



<script>

import axios from 'axios'



export default {

  data() {

    return {

      classesList:[],

      student:{}

    }

  },

  methods:{

      async selectClasses(){

        let {data:baseResult} = await axios.get(`http://localhost:8888/classes`);

        this.classesList = baseResult.data

      },

      async addStudent(){

        var url = "http://localhost:8888/student";

        let { data: baseResult } = await axios.post(url,this.student);

        if(baseResult.code == 20000){

            this.$router.push('/studentList')

        }else{

          alert(baseResult.message)

        }

      }

  },

  mounted(){

    //查询所有班级

    this.classesList = this.selectClasses();

  }

}

</script>



<style>



</style>

修改学生

====

步骤1:设置导航

步骤2:添加路由

步骤3:创建页面

步骤:

  • 先获得路由传参传过来的参数 存储到data数据区域 cid

  • 根据cid查询到学生 存储到student table对student进行数据双向关联

  • 修改学生信息 发送ajax请求


<template>

    <div>

        <table border = "1">

            <tr>

                <td>编号</td>

                <td>

                    {{ classes.cid }}

                </td>

            </tr>

            <tr>

                <td>班级名称</td>

                <td>

                    <input type="text" v-model = "classes.cname">

                </td>

            </tr>

            <tr>

                <td>班级描述</td>

                <td>

                    <textarea name="" id="" cols="30" rows="10" v-model = "classes.desc"></textarea>

                </td>

            </tr>

            <tr>

                <td colspan="2">

                    <input type="text" value = "修改" @click = "editClasses()">

                </td>

            </tr>

        </table>

    </div>

</template>



<script>

import axios from 'axios';

export default {

    data() {

        return {

            classes:{},

            cid:'',

        };

    },

    methods:{

        async selectClassesById(){

            let url = `http://localhost:8888/classes/${this.cid}`;

            let { data: baseResult } = await axios.get(url);

            this.classes = baseResult.data

        },



        async editClasses(){

            var url = `http://localhost:8888/classes`;

            let { data: baseResult } = await axios.put(url,this.classes);

            if(baseResult.code == 20000){

                this.$router.push("/classesList");

            }else{

                alert(baseResult.message);

            }

        }

    },

    mounted(){

        //获得cid

        this.cid = this.$route.params.cid;

        //根据id查询班级信息

        this.selectClassesById();

    }

}

</script>



<style>



</style>

删除学生

====

步骤1:设置导航

步骤2:添加方法

步骤:

  • 根据cid发送ajax删除学生

<template>

    <div>

        班级: <select v-model = "studentVo.cid">

            <option value="" disabled>--请选择--</option>

            <option :value="classes.cid" v-for = "(classes,index) in classesList" :key = "index">{{classes.cname}}</option>

        </select>

        姓名:<input type="text" v-model = "studentVo.studentName">

        年龄:<input type="text" v-model = "studentVo.startAge">——<input type="text" v-model = "studentVo.endAge">

        <input type="button" value = "查询" @click = "conditionStudent()">

        <table border="1">

            <tr>

                <td>ID</td>

                <td>班级</td>

                <td>姓名</td>

                <td>年龄</td>

                <td>生日</td>

                <td>性别</td>

                <td>操作</td>

            </tr>

            <tr v-for = "(student,index) in pageInfo.list" :key="index">

                <td>{{student.sid}}</td>

                <td>{{student.classes == null ? student.cname : student.classes.cname}}</td>

                <td>{{student.sname}}</td>

                <td>{{student.age}}</td>

                <td>{{student.birthday}}</td>

                <td>{{student.gender == 1 ? '男' : '女'}}</td>

                <td>

                    <router-link :to="{path:'/studentEdit',query:{sid : student.sid}}">修改</router-link>

                    <router-link to="" @click.native.prevent = "deleteStudent(student.sid)">删除</router-link>

                </td>

            </tr>

        </table>



        <!-- 分页 start -->

        当前第 {{pageInfo.pageNum}}页,共{{pageInfo.pages}}页, 总计数{{pageInfo.total}}条,

        每页 <select v-model = "pageInfo.pageSize" @change = "conditionStudent(1)">

            <option value="1">1</option>

            <option value="2">2</option>

            <option value="3">3</option>

            <option value="5">5</option>

            <option value="10">10</option>

        </select>条



        <a href="" v-if = "!pageInfo.isFirstPage" @click.prevent = "conditionStudent(1)">首页</a>

        <a href="" v-if = "pageInfo.hasPreviousPage" @click.prevent = "conditionStudent(pageInfo.pageNum - 1)">上一页</a>

        <a href="" v-for = "(num,index) in pageInfo.pages" @click.prevent = "conditionStudent(num)" :key="index">{{num}}</a>

        <a href="" v-if = "pageInfo.hasNextPage" @click.prevent = "conditionStudent(pageInfo.pageNum - 1)">下一页</a>

        <a href="" v-if = "!pageInfo.isLastPage" @click.prevent = "conditionStudent(pageInfo.pages)">尾页</a>

        跳转到 <input v-model = "pageInfo.pageNum" placeholder="enter跳转" @keyup.enter = "conditionStudent()"> 页

        <!-- 分页 end -->

    </div>

</template>



<script>

import axios from 'axios'



export default {

由于Vue是一个前端框架,无法直接访问数据库,因此需要与后端进行交互。在本文中,我们将使用Node.js和Express框架来实现后端,并使用MongoDB作为数据库。 前端部分 1. 创建Vue项目 首先,我们需要在本地安装Vue CLI。在命令行中输入以下命令: ``` npm install -g @vue/cli ``` 安装完成后,我们可以使用Vue CLI来创建一个新的Vue项目。在命令行中输入以下命令: ``` vue create student-management ``` 这将创建一个名为“student-management”的Vue项目。在安装过程中,您可以选择使用默认设置,也可以根据需要进行自定义。 2. 创建组件 接下来,我们需要创建几个Vue组件来实现学生管理系统的各个功能。我们将创建以下组件: * 学生列表:用于显示所有学生的信息。 * 添加学生:用于添加新的学生信息。 * 编辑学生:用于编辑现有学生的信息。 * 删除学生:用于删除学生信息。 我们可以使用Vue CLI来创建组件。在命令行中输入以下命令: ``` vue create components/StudentList ``` 这将在“components”文件夹中创建一个名为“StudentList”的Vue组件。 3. 编写代码 在创建了所需的组件之后,我们需要在这些组件中编写Vue代码来实现学生管理系统的各个功能。在这里,我们将提供一些示例代码,以供参考。 下面是一个简单的“StudentList”组件示例: ``` <template> <div> <h2>学生列表</h2> <table> <thead> <tr> <th>学号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="student in students" :key="student.id"> <td>{{ student.id }}</td> <td>{{ student.name }}</td> <td>{{ student.gender }}</td> <td>{{ student.age }}</td> <td> <button @click="editStudent(student)">编辑</button> <button @click="deleteStudent(student)">删除</button> </td> </tr> </tbody> </table> </div> </template> <script> export default { data() { return { students: [] } }, methods: { editStudent(student) { // 编辑学生信息 }, deleteStudent(student) { // 删除学生信息 } } } </script> ``` 在这个示例中,我们使用了Vue的“v-for”指令来遍历学生列表,并使用“@click”指令来处理编辑和删除学生信息的点击事件。 后端部分 1. 创建Node.js项目 首先,我们需要在本地安装Node.js。在命令行中输入以下命令: ``` sudo apt-get install nodejs ``` 安装完成后,我们可以使用npm来创建一个新的Node.js项目。在命令行中输入以下命令: ``` npm init ``` 这将创建一个名为“package.json”的文件,其中包含有关项目的信息和依赖项列表。 2. 安装依赖项 接下来,我们需要安装一些依赖项来实现学生管理系统的各个功能。在命令行中输入以下命令: ``` npm install express mongoose body-parser cors ``` 这将安装Express框架、Mongoose库、Body-parser中间件和CORS插件。 3. 编写代码 在安装了所需的依赖项之后,我们需要在Node.js项目中编写代码来实现学生管理系统的各个功能。在这里,我们将提供一些示例代码,以供参考。 下面是一个简单的Express应用程序示例: ``` const express = require('express') const mongoose = require('mongoose') const bodyParser = require('body-parser') const cors = require('cors') const app = express() // 连接到MongoDB数据库 mongoose.connect('mongodb://localhost/student-management', { useNewUrlParser: true, useUnifiedTopology: true }) // 定义学生模型 const Student = mongoose.model('Student', { id: String, name: String, gender: String, age: Number }) // 启用中间件 app.use(bodyParser.json()) app.use(cors()) // 获取所有学生信息 app.get('/students', async (req, res) => { const students = await Student.find() res.json(students) }) // 添加新学生信息 app.post('/students', async (req, res) => { const { id, name, gender, age } = req.body const student = new Student({ id, name, gender, age }) await student.save() res.json(student) }) // 编辑现有学生信息 app.put('/students/:id', async (req, res) => { const { id } = req.params const { name, gender, age } = req.body const student = await Student.findById(id) student.name = name student.gender = gender student.age = age await student.save() res.json(student) }) // 删除学生信息 app.delete('/students/:id', async (req, res) => { const { id } = req.params await Student.findByIdAndDelete(id) res.json({ message: '删除成功' }) }) // 启动服务器 app.listen(3000, () => { console.log('服务已启动') }) ``` 在这个示例中,我们使用了Express框架来定义了几个路由来实现获取、添加、编辑和删除学生信息的功能。我们还使用了Mongoose库来定义了一个“Student”模型来表示学生信息,并将其保存到MongoDB数据库中。最后,我们使用了Body-parser中间件来解析HTTP请求正文,并使用CORS插件来处理跨域请求。 总结 这就是我们如何使用Vue、Node.js、Express和MongoDB来创建一个简单的学生管理系统的全部过程。当然,这只是一个简单的示例,您可以根据需要进行修改和扩展,以满足您的实际需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值