学生管理系统Element UI版

birthday datetime DEFAULT NULL COMMENT ‘生日’,

gender char(1) DEFAULT NULL COMMENT ‘性别’,

c_id varchar(32) DEFAULT NULL,

PRIMARY KEY (s_id),

KEY c_id (c_id),

CONSTRAINT tb_student_ibfk_1 FOREIGN KEY (c_id) REFERENCES tb_class (c_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into tb_student(s_id,sname,age,birthday,gender,c_id) values (‘s001’,‘赵三’,19,‘2001-01-17 00:00:00’,‘1’,‘c001’),(‘s002’,‘刘悦11’,60,‘1998-10-08 00:00:00’,‘0’,‘c002’),(‘s003’,‘孙五’,18,‘2002-03-15 00:00:00’,‘1’,‘c001’),(‘s004’,‘李三’,19,‘2001-04-14 00:00:00’,‘0’,‘c002’),(‘s005’,‘梁桐’,35,‘2001-02-02 00:00:00’,‘1’,‘c002’),(‘s006’,‘刘悦22’,60,‘2022-02-07 00:00:00’,‘0’,‘c002’),(‘s21’,‘小红’,20,‘2022-03-20 00:00:00’,‘0’,‘c002’);




### tb\_user:



DROP TABLE IF EXISTS tb_user;

CREATE TABLE tb_user (

u_id varchar(32) NOT NULL COMMENT ‘用户编号’,

user_name varchar(50) DEFAULT NULL COMMENT ‘用户名’,

password varchar(32) DEFAULT NULL COMMENT ‘密码’,

gender bit(1) DEFAULT NULL COMMENT ‘性别,1表示男,0表示女’,

PRIMARY KEY (u_id),

UNIQUE KEY user_name (user_name)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into tb_user(u_id,user_name,password,gender) values (‘1’,‘jack’,‘1234’,‘’),(‘10’,‘jack5’,‘1234’,‘’),(‘2’,‘rose’,‘1234’,‘\0’),(‘3’,‘张三’,‘1234’,‘’),(‘4’,‘tom’,‘1234’,‘’),(‘5’,‘jack2’,‘1234’,‘’),(‘6’,‘jack1’,‘1234’,‘’),(‘7’,‘jack3’,‘1234’,‘’),(‘8’,‘jack4’,‘1234’,‘’),(‘cd0d2523b5024589af142787de8a7b2a’,‘jack6’,‘1234’,‘’);




后端

--



链接:https://pan.baidu.com/s/1FAb2WUSUwpRuwIB9Spy3oQ   

提取码:1234



关键代码

----



### ClassesController:



package com.czxy.controller;

import com.czxy.domain.Classes;

import com.czxy.service.ClassesService;

import com.czxy.vo.BaseResult;

import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

import java.util.List;

/**

  • @Author 刘嘉俊

  • @Date 2022/2/21

*/

@RestController

@RequestMapping(“/classes”)

@CrossOrigin

public class ClassesController {

@Resource

private ClassesService classesService;



@GetMapping

public BaseResult<List<Classes>> list(){

    List<Classes> list = classesService.selectAll();

    return BaseResult.ok("查询成功",list);

}



@PostMapping

public BaseResult add(@RequestBody Classes classes){

    boolean result = classesService.add(classes);



    if(result){

        return BaseResult.ok("添加成功");

    }



    return BaseResult.error("添加失败");

}



@GetMapping("/{cid}")

public BaseResult<Classes> selectById(@PathVariable("cid") String cid){

    Classes classes = classesService.selectById(cid);



    return BaseResult.ok("查询详情成功",classes);

}



@PutMapping

public BaseResult update(@RequestBody Classes classes){

    try {

        boolean result = classesService.update(classes);



        if(result){

            return BaseResult.ok("查询成功");

        }

        return BaseResult.error("更新失败");

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}



@DeleteMapping("/{classesId}")

public BaseResult delete(@PathVariable("classesId") String classesId){

    boolean result = classesService.deleteById(classesId);



    if(result){

        return BaseResult.ok("删除成功");

    }

    return BaseResult.error("删除失败");

}

}




### StudentController:



package com.czxy.controller;

import com.czxy.domain.Student;

import com.czxy.service.StudentService;

import com.czxy.vo.BaseResult;

import com.czxy.vo.StudentVo;

import com.github.pagehelper.PageInfo;

import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

import java.util.List;

/**

  • @Author 刘嘉俊

  • @Date 2022/2/21

*/

@RestController

@RequestMapping(“/student”)

@CrossOrigin

public class StudentController {

@Resource

private StudentService studentService;



@PostMapping("/condition/{pageSize}/{pageNum}")

public BaseResult condition(

        @PathVariable("pageSize") Integer pageSize,

        @PathVariable("pageNum") Integer pageNum,

        @RequestBody StudentVo studentVo) {



    // 查询

    PageInfo<Student> pageInfo = studentService.condition(pageSize,pageNum,studentVo);



    // 返回结果

    return BaseResult.ok("查询成功", pageInfo);

}



@GetMapping("/{sid}")

public BaseResult selectById(@PathVariable("sid") String sid){

    Student student = studentService.selectById(sid);



    return BaseResult.ok("查询成功",student);

}



@PutMapping

public BaseResult update(@RequestBody Student student){

    System.out.println(student);

    try {

        boolean result = studentService.update(student);

        if(result){

            return BaseResult.ok("更新成功");

        }else{

            return BaseResult.error("更新失败");

        }

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}



@DeleteMapping("/{sid}")

public BaseResult delete(@PathVariable("sid")String sid){

    System.out.println("sid" + sid);

    try {

        boolean result = studentService.delete(sid);

        if(result){

            return BaseResult.ok("删除成功");

        }

        return BaseResult.error("删除失败");

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}



@PostMapping

public BaseResult addStudent(@RequestBody Student student){

    try {

        boolean result = studentService.addStudent(student);

        if(result){

            return BaseResult.ok("添加成功");

        }

        return BaseResult.error("添加失败");

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}



@PostMapping("/save")

public BaseResult save(@RequestBody Student student){

    try {

        boolean result = studentService.saveOrUpdate(student);

        if(result){

            return BaseResult.ok("编辑 | 添加 成功");

        }else{

            return BaseResult.error("编辑 | 添加 失败");

        }

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}



@PostMapping("/batchDelete")

public BaseResult deleteIds(@RequestBody List<String> ids){

    try {

        studentService.deleteIds(ids);



        return BaseResult.ok("删除成功");

    } catch (Exception e) {

        e.printStackTrace();

        return BaseResult.error(e.getMessage());

    }

}

}




### UserController:



package com.czxy.controller;

import com.czxy.domain.User;

import com.czxy.service.UserService;

import com.czxy.vo.BaseResult;

import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**

  • @Author 刘嘉俊

  • @Date 2022/3/16

*/

@RestController

@RequestMapping(“/user”)

@CrossOrigin

public class UserController {

@Resource

private UserService userService;



@PostMapping("/login")

public BaseResult login(@RequestBody User user){

    User loginUser = userService.login(user);



    if(loginUser != null){

        return BaseResult.ok("登录成功",loginUser);

    }else{

        return BaseResult.error("用户名或密码不匹配");

    }

}



@PostMapping("/check")

public BaseResult check(@RequestBody User user){

    User findUser = userService.findByUsername(user.getUsername());



    if(findUser == null){

        return BaseResult.ok("用户名可用");

    }else{

        return BaseResult.error("用户名已存在");

    }

}

}




查询所有前端

======



显示页面

----



 创建页面



![](https://img-blog.csdnimg.cn/33c3da09b2104330a7e982af7dce1ae8.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_8,color_FFFFFF,t_70,g_se,x_16)



 配置路由



const routes = [

{

path: '/studentList',

name: '学生列表',

component: () => import('../views/StudentList.vue')

}

]




访问路径



> [http://localhost:8080/studentList]( )



ajax操作

------



{{studentPage}}



整合element ui

------------



<!-- 表单start -->

<el-form :inline="true" :model="studentVo" size="mini" >

  <el-form-item label="班级">

    <el-select v-model="studentVo.cid" placeholder="请选择班级" clearable>

      <el-option label="Java12班" value="c001"></el-option>

      <el-option label="Java56班" value="c003"></el-option>

    </el-select>

  </el-form-item>

  <el-form-item label="姓名">

    <el-input v-model="studentVo.sname" placeholder="请输入姓名" clearable></el-input>

  </el-form-item>

  <el-form-item label="年龄">

    <el-col :span="11">

      <el-input v-model="studentVo.startAge" placeholder="请输入开始年龄" clearable></el-input>

    </el-col>

    <el-col class="line" :span="2">-</el-col>

    <el-col :span="11">

      <el-input v-model="studentVo.endAge" placeholder="请输入结束年龄" clearable></el-input>

    </el-col>

  </el-form-item>

  <el-form-item>

    <el-button type="primary" @click="condition(1)">查询</el-button>

  </el-form-item>

</el-form>

<!-- 表单end -->

<!-- 表格start -->

<el-table

  :data="studentPage.list"

  @selection-change="handleSelectionChange"

  style="width: 100%">

  <el-table-column

    type="selection"

    width="55">

  </el-table-column>

  <el-table-column

    prop="sid"

    label="编号"

    width="180">

  </el-table-column>

  <el-table-column

    prop="sname"

    label="姓名"

    width="180">

  </el-table-column>

  <el-table-column

    prop="cid"

    label="班级"

    width="180">

  </el-table-column>

  <el-table-column

    prop="age"

    label="年龄"

    width="180">

  </el-table-column>

  <el-table-column

    prop="birthday"

    label="生日"

    width="180">

  </el-table-column>

  <el-table-column

    prop="gender"

    label="性别"

    width="180">

    <template slot-scope="scope">

      {{scope.row.gender == 1 ? "男" : "女"}}

    </template>

  </el-table-column>

  <el-table-column label="操作">

    <template slot-scope="scope">

      <el-button size="mini">编辑</el-button>

      <el-button size="mini" type="danger">删除</el-button>

    </template>

  </el-table-column>

</el-table>

<!-- 表格end -->

<!-- 分页条start -->

<el-pagination

  @size-change="handleSizeChange"

  @current-change="handleCurrentChange"

  :current-page="studentPage.pageNum"

  :page-sizes="[1, 2, 3, 5, 10]"

  :page-size="studentPage.pageSize"

  layout="total, sizes, prev, pager, next, jumper"

  :total="studentPage.total">

</el-pagination>

<!-- 分页条end -->



导航(嵌套路由)

========



*   步骤1:创建页面

    

    *   创建登录页面(模板页面)

        

    *   编写首页Home(上中下布局),编写导航(首页、班级管理/班级列表、学生管理/学生列表)

        

    *   创建页面:ClassesList.vue

        

*   步骤2:配置路由

    

*   步骤3:编写布局容器和导航

    



![](https://img-blog.csdnimg.cn/e250bfa1f7ff4d60ae31c95cf515857d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_20,color_FFFFFF,t_70,g_se,x_16)



步骤1:创建页面



*   创建登录页面(模板页面)

    

*   编写首页Home(上中下布局),编写导航(首页、班级管理/班级列表、学生管理/学生列表)

    

*   创建页面:ClassesList.vue

    



![](https://img-blog.csdnimg.cn/f8dd690323374713bc7c78fd44e827f3.png)



 步骤2:配置路由



const routes = [

{

path: '/',

redirect: '/home'    //重定向

},

{

path: '/login',

name: '登录',

component: () => import('../views/Login.vue')

},

{

path: '/home',

name: '首页',

component: () => import('../views/Home.vue'),

children: [

  {

    path: '/studentList',

    name: '学生列表',

    component: () => import('../views/StudentList.vue')

  },

  {

    path: '/classesList',

    name: '班级列表',

    component: () => import('../views/ClassesList.vue')

  }

]

},

]




步骤3:编写布局容器和导航



*   修改main.js,配置css加载顺序(配置重置样式)

    



![](https://img-blog.csdnimg.cn/03b98249a1b748a3bcdd611d8f07b43f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_14,color_FFFFFF,t_70,g_se,x_16)



*   修改App.vue,配置样式,上下自动填充



 ![](https://img-blog.csdnimg.cn/ab5b7c9f1047469d89dfdd496cdce396.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_13,color_FFFFFF,t_70,g_se,x_16)



编写Home页面,完成导航和二级路由显示



<el-header class="home-header">

  <!-- 导航start -->

  <el-menu

    :default-active="$route.path"

    router

    class="el-menu-demo"

    mode="horizontal"

    background-color="#545c64"

    text-color="#fff"

    active-text-color="#ffd04b">

    <el-menu-item index="/home">首页</el-menu-item>

    <el-submenu index="/classes">

      <template slot="title">班级管理</template>

      <el-menu-item index="/classesList">班级列表</el-menu-item>

    </el-submenu>

    <el-submenu index="/student">

      <template slot="title">学生管理</template>

      <el-menu-item index="/studentList">学生列表</el-menu-item>

    </el-submenu>

  </el-menu>

  <!-- 导航end -->

</el-header>

<el-main>

  <!-- 二级路由 -->

  <router-view></router-view>

</el-main>

<el-footer>学生管理系统Element UI 版</el-footer>



编辑学生(弹出框)

=========



分析

--



*   页面布局:

    

    *   添加一个“添加”按钮,点击可以显示弹出层

        

    *   拷贝添加的弹出框Dialog,且要求表单(班级列表、id、名称、年龄、生日、性别)

        

*   提供student变量,用于表单数据的绑定

    

*   ajax操作

    

    *   查询班级列表

        

    *   添加按钮绑定事件,进行ajax提交(成功:刷新列表关闭弹出框,失败:错误提示,但不关闭弹出框)

        



页面布局

----



页面布局:



添加一个“添加”按钮,点击可以显示弹出层



![](https://img-blog.csdnimg.cn/dbfe34e7223241c8a870b1b8d0acfac3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_20,color_FFFFFF,t_70,g_se,x_16)



拷贝添加的弹出框Dialog,且要求表单(班级列表、id、名称、年龄、生日、性别)



<el-dialog title="添加学生" :visible.sync="addStudentDialogVisible">

  <el-form :model="student" label-width="80px">

    <el-form-item label="班级列表" >

      <el-select v-model="student.cid" placeholder="请选择班级">

        <el-option label="区域一" value="shanghai"></el-option>

      </el-select>

    </el-form-item>

    <el-form-item label="id" >

      <el-input v-model="student.sid"></el-input>

    </el-form-item>

    <el-form-item label="名称" >

      <el-input v-model="student.sname"></el-input>

    </el-form-item>

    <el-form-item label="生日" >

      <el-date-picker type="date" placeholder="选择生日" v-model="student.birthday" style="width: 100%;"></el-date-picker>

    </el-form-item>

    <el-form-item label="年龄" >

      <el-input v-model="student.age"></el-input>

    </el-form-item>

    <el-form-item label="性别" >

      <el-radio-group v-model="student.gender">

        <el-radio label="1">男</el-radio>

        <el-radio label="0">女</el-radio>

      </el-radio-group>

    </el-form-item>

  </el-form>

  <div slot="footer" class="dialog-footer">

    <el-button @click="addStudentDialogVisible = false">取 消</el-button>

    <el-button type="primary" @click="addStudentDialogVisible = false">确 定</el-button>

  </div>

</el-dialog>

<!-- 添加的弹出框end -->



提供student变量,用于表单数据的绑定



![](https://img-blog.csdnimg.cn/0e54d6c6f35b40548a5e728d1818fdb0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_20,color_FFFFFF,t_70,g_se,x_16)



添加:ajax操作

---------



查询班级列表



![](https://img-blog.csdnimg.cn/e5ae6b3710eb42a18a0746ef1c97da70.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_20,color_FFFFFF,t_70,g_se,x_16)



添加按钮绑定事件,进行ajax提交(成功:刷新列表关闭弹出框,失败:错误提示,但不关闭弹出框)



![](https://img-blog.csdnimg.cn/6530509a6f1340c3ae11ce856ac10470.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Zm254S25ZCM5a2m44CC,size_20,color_FFFFFF,t_70,g_se,x_16)



<!-- 表单start -->

<el-form :inline="true" :model="studentVo" size="mini" >

  <el-form-item label="班级">

    <el-select v-model="studentVo.cid" placeholder="请选择班级" clearable>

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

    </el-select>

  </el-form-item>

  <el-form-item label="姓名">

    <el-input v-model="studentVo.sname" placeholder="请输入姓名" clearable></el-input>

  </el-form-item>

  <el-form-item label="年龄">

    <el-col :span="11">

      <el-input v-model="studentVo.startAge" placeholder="请输入开始年龄" clearable></el-input>

    </el-col>

    <el-col class="line" :span="2">-</el-col>

    <el-col :span="11">

      <el-input v-model="studentVo.endAge" placeholder="请输入结束年龄" clearable></el-input>

    </el-col>

  </el-form-item>

  <el-form-item>

    <el-button type="primary" @click="condition(1)">查询</el-button>

  </el-form-item>

</el-form>

<!-- 表单end -->

<el-button type="primary" @click="openAddDialog" >添加</el-button>

<!-- 添加的弹出框start -->

<el-dialog title="添加学生" :visible.sync="addStudentDialogVisible">

  <el-form :model="student" label-width="80px">

    <el-form-item label="班级列表" >

      <el-select v-model="student.cid" placeholder="请选择班级">

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

      </el-select>

    </el-form-item>

    <el-form-item label="id" >

      <el-input v-model="student.sid"></el-input>

    </el-form-item>

    <el-form-item label="名称" >

      <el-input v-model="student.sname"></el-input>

    </el-form-item>

    <el-form-item label="生日" >

      <el-date-picker type="date" placeholder="选择生日" v-model="student.birthday" style="width: 100%;"></el-date-picker>

    </el-form-item>

    <el-form-item label="年龄" >

      <el-input v-model="student.age"></el-input>

    </el-form-item>

    <el-form-item label="性别" >

      <el-radio-group v-model="student.gender">

        <el-radio label="1">男</el-radio>

        <el-radio label="0">女</el-radio>

      </el-radio-group>

    </el-form-item>

  </el-form>

  <div slot="footer" class="dialog-footer">

    <el-button @click="addStudentDialogVisible = false">取 消</el-button>

    <el-button type="primary" @click="addStudent">确 定</el-button>

  </div>

</el-dialog>

<!-- 添加的弹出框end -->

<!-- 表格start -->

<el-table

  :data="studentPage.list"

  @selection-change="handleSelectionChange"

  style="width: 100%">

  <el-table-column

    type="selection"

    width="55">

  </el-table-column>

  <el-table-column

    prop="sid"

    label="编号"

    width="180">

  </el-table-column>

  <el-table-column

    prop="sname"

    label="姓名"

    width="180">

  </el-table-column>

  <el-table-column

    prop="cid"

    label="班级"

    width="180">

  </el-table-column>

  <el-table-column

    prop="age"

    label="年龄"

    width="180">

  </el-table-column>

  <el-table-column

    prop="birthday"

    label="生日"

    width="180">

  </el-table-column>

  <el-table-column

    prop="gender"

    label="性别"

    width="180">

    <template slot-scope="scope">

      {{scope.row.gender == 1 ? "男" : "女"}}

    </template>

  </el-table-column>

  <el-table-column label="操作">

    <template slot-scope="scope">

      <el-button size="mini">编辑</el-button>

      <el-button size="mini" type="danger">删除</el-button>

    </template>

  </el-table-column>

</el-table>

<!-- 表格end -->

<!-- 分页条start -->

<el-pagination

  @size-change="handleSizeChange"

  @current-change="handleCurrentChange"

  :current-page="studentPage.pageNum"

  :page-sizes="[1, 2, 3, 5, 10]"

  :page-size="studentPage.pageSize"

  layout="total, sizes, prev, pager, next, jumper"

  :total="studentPage.total">

</el-pagination>

<!-- 分页条end -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值