精华内容
下载资源
问答
  • 2022-03-19 19:37:04

    工具eclipse

    主要操作登陆,增删查改

    编写实体类

    public class Student {
        private int id;
        private String sId;//学号
        private String name;
        private String password;
        private int classId;//班级号
        private String sex;
        private String mobile;
        private String qq;
        private InputStream photo;//头像
        //get set
    }

    Dao

    介于业务逻辑层和数据库之间,进行数据的访问和操作。

    util包

    DbUtil(下面dao需要用到)

    private String dbUrl= "jdbc:mysql://localhost:3306/student_manager?useUnicode=true&characterEncoding=utf8";
        private String jdbcName="com.mysql.jdbc.Driver";
        private String dbUser="用户名";
        private String dbPassword="密码";
        private Connection connection = null;
        public Connection getConnection() {
            try {
                Class.forName(jdbcName);
                connection=DriverManager.getConnection(dbUrl, dbUser, dbPassword);
                System.out.println("数据库连接成功!!");
            } catch(Exception e) {
                System.out.println("数据库连接失败!!!");
                e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因。
            }
            return connection;
        }
        public void closeCon() {
            if(connection !=null) {
                try {
                    connection.close();
                    System.out.println("数据库连接已经关闭!!!");
                }catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
        
        public static void main(String[] args) {
            DbUtil dbUtil = new DbUtil();
            dbUtil.getConnection();
        }

    CpachaUtil(下面验证码需要用到)

    package com.util;
    ​
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    ​
    /**
     * 验证码生成器
     */
    public class CpachaUtil {
        
        /**
         * 验证码来源
         */
        final private char[] code = {
            '2', '3', '4', '5', '6', '7', '8', '9',
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
            'k', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 
            'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
            'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R',
            'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
        };
        /**
         * 字体
         */
        final private String[] fontNames = new String[]{
                "黑体", "宋体", "Courier", "Arial", 
                "Verdana", "Times", "Tahoma", "Georgia"};
        /**
         * 字体样式
         */
        final private int[] fontStyles = new int[]{
                Font.BOLD, Font.ITALIC|Font.BOLD
        };
        
        /**
         * 验证码长度
         * 默认4个字符
         */
        private int vcodeLen = 4;
        /**
         * 验证码图片字体大小
         * 默认17
         */
        private int fontsize = 21;
        /**
         * 验证码图片宽度
         */
        private int width = (fontsize+1)*vcodeLen+10;
        /**
         * 验证码图片高度
         */
        private int height = fontsize+12;
        /**
         * 干扰线条数
         * 默认3条
         */
        private int disturbline = 3;
        
        
        public CpachaUtil(){}
        
        /**
         * 指定验证码长度
         * @param vcodeLen 验证码长度
         */
        public CpachaUtil(int vcodeLen) {
            this.vcodeLen = vcodeLen;
            this.width = (fontsize+1)*vcodeLen+10;
        }
        
        /**
         * 生成验证码图片
         * @param vcode 要画的验证码
         * @param drawline 是否画干扰线
         * @return
         */
        public BufferedImage generatorVCodeImage(String vcode, boolean drawline){
            //创建验证码图片
            BufferedImage vcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics g = vcodeImage.getGraphics();
            //填充背景色
            g.setColor(new Color(246, 240, 250));
            g.fillRect(0, 0, width, height);
            if(drawline){
                drawDisturbLine(g);
            }
            //用于生成伪随机数
            Random ran = new Random();
            //在图片上画验证码
            for(int i = 0;i < vcode.length();i++){
                //设置字体
                g.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize));
                //随机生成颜色
                g.setColor(getRandomColor());
                //画验证码
                g.drawString(vcode.charAt(i)+"", i*fontsize+10, fontsize+5);
            }
            //释放此图形的上下文以及它使用的所有系统资源
            g.dispose();
            
            return vcodeImage;
        }
        /**
         * 获得旋转字体的验证码图片
         * @param vcode
         * @param drawline 是否画干扰线
         * @return
         */
        public BufferedImage generatorRotateVCodeImage(String vcode, boolean drawline){
            //创建验证码图片
            BufferedImage rotateVcodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = rotateVcodeImage.createGraphics();
            //填充背景色
            g2d.setColor(new Color(246, 240, 250));
            g2d.fillRect(0, 0, width, height);
            if(drawline){
                drawDisturbLine(g2d);
            }
            //在图片上画验证码
            for(int i = 0;i < vcode.length();i++){
                BufferedImage rotateImage = getRotateImage(vcode.charAt(i));
                g2d.drawImage(rotateImage, null, (int) (this.height * 0.7) * i, 0);
            }
            g2d.dispose();
            return rotateVcodeImage;
        }
        /**
         * 生成验证码
         * @return 验证码
         */
        public String generatorVCode(){
            int len = code.length;
            Random ran = new Random();
            StringBuffer sb = new StringBuffer();
            for(int i = 0;i < vcodeLen;i++){
                int index = ran.nextInt(len);
                sb.append(code[index]);
            }
            return sb.toString();
        }
        /**
         * 为验证码图片画一些干扰线
         * @param g 
         */
        private void drawDisturbLine(Graphics g){
            Random ran = new Random();
            for(int i = 0;i < disturbline;i++){
                int x1 = ran.nextInt(width);
                int y1 = ran.nextInt(height);
                int x2 = ran.nextInt(width);
                int y2 = ran.nextInt(height);
                g.setColor(getRandomColor());
                //画干扰线
                g.drawLine(x1, y1, x2, y2);
            }
        }
        /**
         * 获取一张旋转的图片
         * @param c 要画的字符
         * @return
         */
        private BufferedImage getRotateImage(char c){
            BufferedImage rotateImage = new BufferedImage(height, height, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2d = rotateImage.createGraphics();
            //设置透明度为0
            g2d.setColor(new Color(255, 255, 255, 0));
            g2d.fillRect(0, 0, height, height);
            Random ran = new Random();
            g2d.setFont(new Font(fontNames[ran.nextInt(fontNames.length)], fontStyles[ran.nextInt(fontStyles.length)], fontsize));
            g2d.setColor(getRandomColor());
            double theta = getTheta();
            //旋转图片
            g2d.rotate(theta, height/2, height/2);
            g2d.drawString(Character.toString(c), (height-fontsize)/2, fontsize+5);
            g2d.dispose();
            
            return rotateImage;
        }
        /**
         * @return 返回一个随机颜色
         */
        private Color getRandomColor(){
            Random ran = new Random();
            return new Color(ran.nextInt(220), ran.nextInt(220), ran.nextInt(220)); 
        }
        /**
         * @return 角度
         */
        private double getTheta(){
            return ((int) (Math.random()*1000) % 2 == 0 ? -1 : 1)*Math.random();
        }
    ​
        /**
         * @return 验证码字符个数
         */
        public int getVcodeLen() {
            return vcodeLen;
        }
        /**
         * 设置验证码字符个数
         * @param vcodeLen
         */
        public void setVcodeLen(int vcodeLen) {
            this.width = (fontsize+3)*vcodeLen+10;
            this.vcodeLen = vcodeLen;
        }
        /**
         * @return 字体大小
         */
        public int getFontsize() {
            return fontsize;
        }
        /**
         * 设置字体大小
         * @param fontsize
         */
        public void setFontsize(int fontsize) {
            this.width = (fontsize+3)*vcodeLen+10;
            this.height = fontsize+15;
            this.fontsize = fontsize;
        }
        /**
         * @return 图片宽度
         */
        public int getWidth() {
            return width;
        }
        /**
         * 设置图片宽度
         * @param width
         */
        public void setWidth(int width) {
            this.width = width;
        }
        /**
         * @return 图片高度
         */
        public int getHeight() {
            return height;
        }
        /**
         * 设置图片高度
         * @param height 
         */
        public void setHeight(int height) {
            this.height = height;
        }
        /**
         * @return 干扰线条数
         */
        public int getDisturbline() {
            return disturbline;
        }
        /**
         * 设置干扰线条数
         * @param disturbline
         */
        public void setDisturbline(int disturbline) {
            this.disturbline = disturbline;
        }
        
    }

    基础dao

    package com.dao;
    ​
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    ​
    import com.util.DbUtil;
    /**
     * 
     * @author love yourself
     *  基础dao封装基本操作
     */
    public class BaseDao {
        private DbUtil dbUtil = new DbUtil();
        
        /**
         * 关闭数据库连接,释放资源
         */
        public void closeCon() {
            dbUtil.closeCon();//DbUtil里面已经写好方法了
        }
        /**
         * 基础查询,多条查询
         */
        //java.sql.ResultSet接口表示一个数据库查询的结果集
        public ResultSet query(String sql) {
            
            try {
                //Statement是将完整的需要执行的SQL语句通过执行平台传输过去
                PreparedStatement prepareStatement =dbUtil.getConnection().prepareStatement(sql);
                return prepareStatement.executeQuery();//executeQuery方法被用来执行 SELECT 语句
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();//输出错误信息
            }
            
            return null;
        }
        /**
         * 改变数据库内容操作
         */
        public boolean update(String sql) {
            try {
                return dbUtil.getConnection().prepareStatement(sql).executeUpdate() > 0;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return false;
        }
        
        /**
         * 获取数据库连接
         */
        public Connection getConnection(){
            return dbUtil.getConnection();
        }
    }

    StudentDao

    package com.dao;
    ​
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    ​
    import com.entity.Student;
    import com.entity.Page;
    import com.util.StringUtil;
    ​
    ​
    //这里要继承我们之前写基础类
    public class StudentDao extends BaseDao {
        /**
         * 添加一个学生
         */
        public boolean addStudent(Student student) {
            String sql="insert into student values(null,'"+student.getsId()+"','"+student.getName()+"'";
            sql += ",'" + student.getPassword() + "'," + student.getClassId();
            sql += ",'" + student.getSex() + "','" + student.getMobile() + "'";
            sql += ",'" + student.getQq() + "',null)";
            return update(sql);
        }
        
        /**
         * 删除一个学生
         */
        public boolean deleteStudent(String id) {
            String sql="delete form student where id in("+id+")";
            return update(sql);
        }
        /**
         * 更改密码
         */
        public boolean editPassword(Student student,String newPassword) {
            String sql = "update student set password = '"+newPassword+"' where id = " + student.getId();
            return update(sql);
        }
        /**
         * 头像
         */
        public boolean setStudentPhoto(Student student) {
            String sql = "update student set photo = ? where id = ?";
            Connection connection = getConnection();
            try {
                PreparedStatement prepareStatement = connection.prepareStatement(sql);
                prepareStatement.setBinaryStream(1, student.getPhoto());
                prepareStatement.setInt(2, student.getId());
                return prepareStatement.executeUpdate() > 0;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return update(sql);
        }
        /**
         * 学生对象
         */
        public Student getStudent(int id){
            String sql = "select * from student where id = " + id;
            Student student = null;
            ResultSet resultSet = query(sql);
            try {
                if(resultSet.next()){
                    student = new Student();
                    student.setId(resultSet.getInt("id"));
                    student.setClassId(resultSet.getInt("class_id"));
                    student.setMobile(resultSet.getString("mobile"));
                    student.setName(resultSet.getString("name"));
                    student.setPassword(resultSet.getString("password"));
                    student.setPhoto(resultSet.getBinaryStream("photo"));
                    student.setQq(resultSet.getString("qq"));
                    student.setSex(resultSet.getString("sex"));
                    student.setsId(resultSet.getString("sid"));
                    return student;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return student;
        }
        /**
         * 学生列表
         */
        public List<Student> getStudentList(Student student,Page page){
            List<Student> ret = new ArrayList<Student>();
            String sql = "select * from student ";
            if(!StringUtil.isEmpty(student.getName())){
                sql += "and name like '%" + student.getName() + "%'";
            }
            if(student.getClassId() != 0){
                sql += " and class_id = " + student.getClassId();
            }
            if(student.getId() != 0){
                sql += " and id = " + student.getId();
            }
            sql += " limit " + page.getStart() + "," + page.getPageSize();
            ResultSet resultSet = query(sql.replaceFirst("and", "where"));
            try {
                while(resultSet.next()){
                    Student s = new Student();
                    s.setId(resultSet.getInt("id"));
                    s.setClassId(resultSet.getInt("class_id"));
                    s.setMobile(resultSet.getString("mobile"));
                    s.setName(resultSet.getString("name"));
                    s.setPassword(resultSet.getString("password"));
                    s.setPhoto(resultSet.getBinaryStream("photo"));
                    s.setQq(resultSet.getString("qq"));
                    s.setSex(resultSet.getString("sex"));
                    s.setsId(resultSet.getString("sid"));
                    ret.add(s);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return ret;
        }
        /**
         * 学生数量
         */
        public int getStudentListTotal(Student student){
            int total = 0;
            String sql = "select count(*)as total from student ";
            if(!StringUtil.isEmpty(student.getName())){
                sql += "and name like '%" + student.getName() + "%'";
            }
            if(student.getClassId() != 0){
                sql += " and class_id = " + student.getClassId();
            }
            if(student.getId() != 0){
                sql += " and id = " + student.getId();
            }
            ResultSet resultSet = query(sql.replaceFirst("and", "where"));
            try {
                while(resultSet.next()){
                    total = resultSet.getInt("total");
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return total;
        }
        /**
         * 登录
         */
        public Student login(String name ,String password){
            String sql = "select * from student where name = '" + name + "' and password = '" + password + "'";
            ResultSet resultSet = query(sql);
            try {
                if(resultSet.next()){
                    Student student = new Student();
                    student.setId(resultSet.getInt("id"));
                    student.setName(resultSet.getString("name"));
                    student.setPassword(resultSet.getString("password"));
                    student.setClassId(resultSet.getInt("class_id"));
                    student.setMobile(resultSet.getString("mobile"));
                    student.setPhoto(resultSet.getBinaryStream("photo"));
                    student.setQq(resultSet.getString("qq"));
                    student.setSex(resultSet.getString("sex"));
                    student.setsId(resultSet.getString("sid"));
                    return student;
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
    }

    servlet

    LoginServlet

    package com.servlet;
    ​
    import java.io.IOException;
    ​
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    ​
    import com.dao.StudentDao;
    import com.entity.Student;
    import com.util.StringUtil;
    ​
    /**
     * 登录
     * @author love yourself
     *
     */
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = -5870852067427524781L;
        
        /**
         * Get
         */
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException{
            doPost(request, response);
        }
        /**
         * Post
         */
        public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
            String mehod=request.getParameter("method");//选择的角色
            if("logout".equals(mehod)) {
                logout(request,response);
                return;
            }
            
            String vcode=request.getParameter("vcode");//验证码
            String name=request.getParameter("account");//账户
            String password=request.getParameter("password");
            int type=Integer.parseInt(request.getParameter("type"));//账户类型 整型数据Integer转换为基本数据类型int
            String loginCache=request.getSession().getAttribute("loginCache").toString();//Session缓存
            //判断验证码为空
            if(StringUtil.isEmpty(vcode)) {
                response.getWriter().write("vcodeError");
                return;
            }
            //判断验证码大写的是否相等
            if(!vcode.toUpperCase().equals(loginCache.toUpperCase())){
                response.getWriter().write("vcodeError");
                return;
            }
            //验证码通过,判断用户名密码
            String loginStatus="loginFaild";//登陆状态(用户类型)
            switch(type) {
            //这里还有 1 2是管理员和老师后面再写
            case 2:{
                StudentDao studentDao=new StudentDao();
                Student student=studentDao.login(name, password);
                studentDao.closeCon();//关闭数据库连接释放资源
                if(student == null) {
                    response.getWriter().write("loginError");
                    return;
                }
                HttpSession session=request.getSession();
                session.setAttribute("user",student);
                session.setAttribute("userType", type);
                loginStatus="loginSuccess";
                break;
            }
            default:
                break;
            }
            response.getWriter().write(loginStatus);    
            }
        
        /**
         * 退出
         */
        private void logout(HttpServletRequest request,HttpServletResponse response) throws IOException{
            request.getSession().removeAttribute("user");
            request.getSession().removeAttribute("userType");
            response.sendRedirect("index.jsp");//返回到主界面也就是登陆界面
            }
    }

    验证码servlet

    package com.servlet;
    ​
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    ​
    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    ​
    import com.util.CpachaUtil;
    /**
     * 
     *验证码servlet
     */
    public class CpachaServlet extends HttpServlet {
    ​
        /**
         * 
         */
        private static final long serialVersionUID = 4919529414762301338L;
        public void doGet(HttpServletRequest request,HttpServletResponse reponse) throws IOException{
            doPost(request, reponse);
        }
        public void doPost(HttpServletRequest request,HttpServletResponse reponse) throws IOException{
            String method = request.getParameter("method");
            if("loginCapcha".equals(method)){
                generateLoginCpacha(request, reponse);
                return;
            }
            reponse.getWriter().write("error method");
        }
        private void generateLoginCpacha(HttpServletRequest request,HttpServletResponse reponse) throws IOException{
            CpachaUtil cpachaUtil = new CpachaUtil();
            String generatorVCode = cpachaUtil.generatorVCode();
            request.getSession().setAttribute("loginCapcha", generatorVCode);
            BufferedImage generatorRotateVCodeImage = cpachaUtil.generatorRotateVCodeImage(generatorVCode, true);
            ImageIO.write(generatorRotateVCodeImage, "gif", reponse.getOutputStream());
        }
    }

    SystemServlet

    package com.servlet;
    ​
    import java.io.IOException;
    ​
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    ​
    ​
    import com.dao.StudentDao;
    import com.entity.Student;
     
    //记着要写继承类 不然报错 java.lang.ClassCastException: com.servlet.SystemServlet cannot be cast to javax.servlet.Servlet
    public class SystemServlet extends HttpServlet {
    private static final long serialVersionUID = -7258264317769166483L;
        
        public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException{
            doPost(request, response);
        }
        public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException{
            String method = request.getParameter("method");
            if("toPersonalView".equals(method)){
                personalView(request,response);
                return;
            }else if("EditPasswod".equals(method)){
                editPassword(request,response);
                return;
            }
            try {
                request.getRequestDispatcher("view/system.jsp").forward(request, response);
            } catch (ServletException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    界面

    登录 login.jsp

    <script type="text/javascript">
        $(function(){
            //点击图片切换验证码
            $("#vcodeImg").click(function(){
                this.src="CpachaServlet?method=loginCapcha&t="+new Date().getTime();
            });
            
            //登录
            $("#submitBtn").click(function(){
                var data = $("#form").serialize();
                $.ajax({
                    type: "post",
                    url: "LoginServlet?method=Login",
                    data: data, 
                    dataType: "text", //返回数据类型
                    success: function(msg){
                        if("vcodeError" == msg){
                            $.messager.alert("消息提醒", "验证码错误!", "warning");
                            $("#vcodeImg").click();//切换验证码
                            $("input[name='vcode']").val("");//清空验证码输入框
                        } else if("loginError" == msg){
                            $.messager.alert("消息提醒", "用户名或密码错误!", "warning");
                            $("#vcodeImg").click();//切换验证码
                            e
                        } else if("loginSuccess" == msg){
                            window.location.href = "SystemServlet?method=toAdminView";
                        } else{
                            alert(msg);
                        } 
                    }
                    
                });
            });
            
            //设置复选框
            $(".skin-minimal input").iCheck({
                radioClass: 'iradio-blue',
                increaseArea: '25%'
            });
        })
    </script>
    <title>登录|学生信息管理系统</title>
    <meta name="keywords" content="学生信息管理系统">
    </head>
    <body>
    <div class="header" style="padding: 0;">
        <h2 style="color: white; width: 400px; height: 60px; line-height: 60px; margin: 0 auto; padding: 0;">学生信息管理系统</h2>
    </div>
    <div class="loginWraper">
      <div id="loginform" class="loginBox">
        <form id="form" class="form form-horizontal" method="post">
          <div class="row cl">
            <label class="form-label col-3"><i class="Hui-iconfont">&#xe60d;</i></label>
            <div class="formControls col-8">
              <input id="" name="account" type="text" placeholder="账户" class="input-text size-L">
            </div>
          </div>
          <div class="row cl">
            <label class="form-label col-3"><i class="Hui-iconfont">&#xe60e;</i></label>
            <div class="formControls col-8">
              <input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
            </div>
          </div>
          <div class="row cl">
            <div class="formControls col-8 col-offset-3">
              <input class="input-text size-L" name="vcode" type="text" placeholder="请输入验证码" style="width: 200px;">
              <img title="点击图片切换验证码" id="vcodeImg" src="CpachaServlet?method=loginCapcha"></div>
          </div>
          
          <div class="mt-20 skin-minimal" style="text-align: center;">
            <div class="radio-box">
                <input type="radio" id="radio-2" name="type" checked value="2" />
                <label for="radio-1">学生</label>
            </div>
            <div class="radio-box">
                <input type="radio" id="radio-3" name="type" value="3" />
                <label for="radio-2">老师</label>
            </div>
            <div class="radio-box">
                <input type="radio" id="radio-1" name="type" value="1" />
                <label for="radio-3">管理员</label>
            </div>
        </div>
          
          <div class="row">
            <div class="formControls col-8 col-offset-3">
              <input id="submitBtn" type="button" class="btn btn-success radius size-L" value="&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;">
            </div>
          </div>
        </form>
      </div>
    </div>
    更多相关内容
  • 可视化学生信息管理系统,实现学生信息的增减删改,并能显示头像等多种信息。笔者想做一个可视化的窗体来管理学生信息系统,由于要连接数据库,我说使用的数据库为SQLSERVER。开始是一个登录页面,用于判别你是学生...
  • HTML+JS+CSS实现学生信息管理系统效果页面增删改查翻页代码难点难点1难点2难点3难点4结语 效果 话不多说,直接看效果,本次代码较为复杂,希望大家可以耐心阅读,不懂的可以评论或者邮箱联系我(1079349989@qq.com)...
  • 1、主程序模块主要功能:程序的入口主要文件:main.c2、菜单模块主要功能:完成菜单的显示和调用相应功能函数主要文件:menu.h menu.c3、学生模块主要功能:完成学生结构定义,添加学生,删除学生,修改学生,查找...
  • 学生信息管理系统----登录实现

    千次阅读 2020-06-05 18:30:40
    登录功能 创建Servlet   在名为servlet的package下创建一个名为LoginServlet的类。 public class LoginServlet extends HttpServlet{ private static final long serialVersionUID = -5870852067427524781L; ...

    登录功能

    创建Servlet
      在名为servletpackage下创建一个名为LoginServlet的类。

    public class LoginServlet extends HttpServlet{
    	private static final long serialVersionUID = -5870852067427524781L;
    	public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{
    		doPost(req,res);
    	}
    	public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{	
    		res.getWriter().write("hello");
    	}
    

    web.xml配置
      建立了Servlet之后,我们需要建立Servlet到访问路径上的配置,在web.xml中添加以下代码。

       <servlet>
      	<description>登录验证</description>
      	<servlet-name>LoginServlet</servlet-name>
      	<servlet-class>com.ischoolbar.programmer.servlet.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>LoginServlet</servlet-name>
      	<url-pattern>/LoginServlet</url-pattern>
      </servlet-mapping>
    

      在doPost方法中我们给请求一个回应。
      运行程序,F12打开调试窗口,点击xhr,再在窗口中点击登录,我们可以看见服务器给的回应信息hello,浏览器已经接受到了。

    在这里插入图片描述

      在上面的基础上做修改,loginServlet中的代码如下所示。

    public class LoginServlet extends HttpServlet{
    	private static final long serialVersionUID = -5870852067427524781L;
    	public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{
    		doPost(req,res);
    	}
    	public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{
    		String vcode = req.getParameter("vcode");
    		String loginCpacha = req.getSession().getAttribute("loginCapcha").toString();
    		if(StringUtil.isEmpty(vcode)){
    			res.getWriter().write("vcodeError");
    			return;
    		}
    		if(!vcode.toUpperCase().equals(loginCpacha.toUpperCase())){
    	res.getWriter().write("vcodeError");
    			return;
    		}	
    	}
    

      这里我们是通过login.jsp的登录按钮来实现验证码的验证的。String vcode = req.getParameter("vcode");是用于获取form表单中验证码输入框中输入的数据,从下面的html代码中可以看见这个input标签name是定义为vcode的。

    <div class="row cl">
        <div class="formControls col-8 col-offset-3">
             <input class="input-text size-L" name="vcode" type="text" placeholder="请输入验证码" style="width: 200px;">
             <img title="点击图片切换验证码" id="vcodeImg" src="CpachaServlet?method=loginCapcha">
        </div>
    </div>
    

      String loginCpacha = req.getSession().getAttribute("loginCapcha").toString();是一句是用于获取session中所生成的验证码的代码,是用于与用户输入进行匹配。
      那么这个是通过什么方式来保存到session中的呢?

      我们可以看见在CpachaServlet这个Servlet中有这样一句代码:req.getSession().setAttribute("loginCapcha", generatorVCode);

      request.getSession().setAttribute()可以通过sessionID得到自己的session,将参数存储在session中,即使重定向客户端也没事,这个值可以在多个页面上使用。
      正是因为生成验证码时,将验证码存入到了Session中,所以我们在后面是可以直接获取到并拿出来用的。

    数据库的连接

      数据库也会在很多的地方使用,所以要建立一个专门管理数据库的工具包DBUtil,以便于提高代码的复用率。

    public class DBUtil {
    	private String dbUrl = "jdbc:mysql://localhost:3306/db_student_manager_web?useUnicode=true&characterEncoding=utf8";
    	private String dbUser = "root";
    	private String dbPassword = "root";
    	private String jdbcName = "com.mysql.jdbc.Driver";
    	private Connection connection = null;
    	// 获取数据库连接
    	public Connection getConnection(){
    		try {
    			Class.forName(jdbcName);
    			connection = DriverManager.getConnection(dbUrl,dbUser,dbPassword);
    			System.out.println("数据库连接成功!");
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			System.out.println("数据库连接失败!");
    			e.printStackTrace();
    		}
    		return connection;
    	}
    	// 关闭数据库连接	
    	public void closeCon(){
    		if(connection != null){
    			try {
    				connection.close();
    				System.out.println("数据库连接关闭!");
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    }
    

      封装数据库基本操作

    public class BaseDao {
    	private DBUtil dbUtil = new DBUtil();
    	// 关闭数据库,释放资源	
    	public void closeCon(){
    		dbUtil.closeCon();
    	}
    	// 基础查询,多条查询	
    	public ResultSet query(String sql){
    		try {
    			PreparedStatement prepareStatement = dbUtil.getConnection().prepareStatement(sql);
    			return prepareStatement.executeQuery();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;	
    	}
    }
    

      做好上面的准备之后,我们就需要对应着数据表来建立model,一张数据表对应着一个model。为了实现对管理员的登录,我们先创建Admin.java,对应的数据表中也包含四个字段,分别是idnamepasswordstatus

    public class Admin {
    	private int id;
    	private String name;
    	private String password;
    	private int status = 1;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public int getStatus() {
    		return status;
    	}
    	public void setStatus(int status) {
    		this.status = status;
    	}
    }
    

      接下来,就可以实现关于管理员数据库操作的封装了,我们实现的是登录功能,就需要读取数据库的信息再与前端的数据进行匹配。
      在这里我们做的是先创建了一个Admin的对象,将前端传来的数据作为查询条件拼接在sql语句中,经过查询就返回了一个结果集对象,我们对结果集中的数据获取到并且根据Adminset方法将这些属性值获取到,最终返回给Servlet

    public class AdminDao extends BaseDao {
    	public Admin login(String name,String password){
    		String sql = "select * from s_admin where name = '"+ name +"'and password = '" + password +"'";
    		ResultSet resultSet = query(sql);
    		try {
    			if(resultSet.next()){
    				Admin admin = new Admin();
    				admin.setId(resultSet.getInt("id"));
    				admin.setName(resultSet.getString("name"));
    				admin.setPassword(resultSet.getString("password"));
    				admin.setStatus(resultSet.getInt("status"));
    				return admin;
    			}
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    }
    

      因为servlet是处理处理业务逻辑的层,所以我们在这一层获取到了前端的数据以及从数据库中获取的数据。
      我们先来看看前端关于填写用户名等信息的表单是如何定义的,这里只贴出来了相关的代码:

    <input id="" name="account" type="text" placeholder="账户" class="input-text size-L">
    <input id="" name="password" type="password" placeholder="密码" class="input-text size-L">
    <input class="input-text size-L" name="vcode" type="text" placeholder="请输入验证码" style="width: 200px;">
    <div class="radio-box">
    	<input type="radio" id="radio-2" name="type" checked value="2" />
    	<label for="radio-1">学生</label>
    </div>
    <div class="radio-box">
    	<input type="radio" id="radio-3" name="type" value="3" />
    	<label for="radio-2">老师</label>
    </div>
    <div class="radio-box">
    	<input type="radio" id="radio-1" name="type" value="1" />
    	<label for="radio-3">管理员</label>
    </div>
    

      上面我们需要的是name属性,因为通过name的值我们可以获取到文本框中输入的值,将获得的值传入到Dao进行查询,如果没有查询到就返回一个信息“LoginError”给浏览器,否则就登录成功。
      因为登录成功后需要一直用这个用户的身份进行操作,所以就要将这个用户的用户类型,账户存在Session中。

    public class LoginServlet extends HttpServlet{
    	private static final long serialVersionUID = -5870852067427524781L;
    	public void doGet(HttpServletRequest req,HttpServletResponse res) throws IOException{
    		doPost(req,res);
    	}	
    	public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException{
    		String vcode = req.getParameter("vcode");
    		String name = req.getParameter("account");
    		String password = req.getParameter("password");
    		int type = Integer.parseInt(req.getParameter("type"));
    		String loginCpacha = req.getSession().getAttribute("loginCapcha").toString();
    		if(StringUtil.isEmpty(vcode)){
    			res.getWriter().write("vcodeError");
    			return;
    		}
    		if(!vcode.toUpperCase().equals(loginCpacha.toUpperCase())){
    			res.getWriter().write("vcodeError");
    			return;
    		}
    		// 验证码验证通过,对比用户名密码是否争取
    		switch(type){
    			case 1:{
    				AdminDao adminDao = new AdminDao();
    				Admin admin = adminDao.login(name, password);
    				adminDao.closeCon();
    				if(admin == null){
    					res.getWriter().write("LoginError");
    					return;
    				}
    				HttpSession session = req.getSession();
    				session.setAttribute("user", admin);
    				session.setAttribute("userType", type);
    				res.getWriter().write("admin");
    				break;
    			}
    			default:
    				break;
    		}	
    		// 说明用户名密码正确	
    	}
    }
    

      res.getWriter().write("admin");:这句代码是便于登录之后,实现将要跳转到什么页面的功能。
      我们看一下jsp中的代码:

    success: function(msg){
    	if("vcodeError" == msg){
    		....
    	} else if("loginError" == msg){
    		....
    	} else if("admin" == msg){
    		window.location.href = "SystemServlet?method=toAdminView";
    	} else if("student" == msg){
    		window.location.href = "SystemServlet?method=toStudentView";
    	} else if("teacher" == msg){
    		window.location.href = "SystemServlet?method=toTeacherView";
    	}
    }
    

      所以当我们匹配登录信息之后,可以给浏览器一条消息,那么浏览器就可以根据这个消息跳转到管理员登录成功之后应该去的页面。

    展开全文
  • 程序的主函数主要实现的是对不同身份登入系统的权限进行选择。是在主函数里调用admin()teacher1()student1()三个函数作为不同入口加以实现。 而又在这三个入口接入后,提醒用户输入账号,如果账号是不存在 则...
  • “用户登陆窗体”作为我们整个进入学生信息系统入口,它起着至关重要的作用,它的成与败直接关系到能否对整个系统能否有操作权   步骤一、判断用户名是否为空? If Trim(txtuserName.Text = "") Then '用户名不...
  • 毕业设计基于SpringBoot学生信息系统项目源码,代码有注释,也可自己二次开发,毕业设计、期末大作业必备。 使用说明 在application-dev.yml文件配置文件的保存路径、预览文件依赖的启动路径和数据库访问路径及...
  • 学生信息管理系统 使用语言:python3.8 所用技术:SQLite3,PySide2,xlrd,xlwt 使用Java开发中的MVC思想,代码虽有冗余,但更容易维护 数据库持久化 使用SQLite3创建学生信息管理系统所需数据表的数据库:student_...

    学生信息管理系统

    使用语言:python3.8
    所用技术:SQLite3,PySide2,xlrd,xlwt
    使用Java开发中的MVC思想,代码虽有冗余,但更容易维护

    数据库持久化

    1. 使用SQLite3创建学生信息管理系统所需数据表的数据库:student_system数据库
    2. 创建学生表,对项目中的学生信息进行存储
    -- 学生表
    create table student_system.student(
        id integer primary key autoincrement, -- 学号 int类型、主键、自增
        name text not null ,                  -- 学生姓名 name str类型、非空
        age integer default 0,             -- 学生年龄 age int类型、默认为0
        gender text default '男',           -- 学生性别 gender str类型、默认为男
        cls text not null                   -- 学生所属班级  cls str类型、非空
    );
    

    因为项目有登录的需求,所以创建一张管理员表

    -- 管理员表
    create table student_system.admin(
        username text not null,     -- 账号
        password text not null      -- 密码
    );
    
    1. 项目不需要添加管理员,管理员账号、密码的添加由管理人员代码添加

    包介绍

    DAO包

    负责将
    1.python字典对象映射为SQLite3中表的各个字段信息
    2.将SQLite3中保存的数据映射为python字典对象

    StudentMapper.py实现功能介绍

    大致功能:

    • add_student(Student:student)-> None:将传入的student字典对象添加到student表中
    • delete_student(int:student.id)-> None: 根据学生的id删除学生信息
    • select_one_student(int:student.id) -> student: 根据学生的id,查找学生信息,并将查找到的学生信息封装为Student对象
    • select_all_student() -> list(Student):将student所有数据封装为Student类型的列表
    • select_special_student(str:sql_special) -> list(Student):对student表进行特殊查询,根据传入的sql_special(where的条件)
    • update_student(Student:student)-> None: student.id做为判断条件,将对象中的信息更新到student表中

    StudentMapper.py功能介绍

    • login(username,password): -> True|False: 对管理员输入的账号和密码进行校验

    entry包

    因为项目很小,管理就只是登录功能实现的时候用到了,所以不单独定义对象。
    进定义学生的实体类`Student`
    

    student.py介绍

    对数据库中student表中的字段进行映射
    `__init(self, id, name, age, gende, cls)`:初始化对象,将学生的基本信息封装为对象
    `get_message()->str`:将student对象中各个变量拼接并返回
    

    sqlite

    此文件夹中存放的是SQLite数据库,存放的是学生信息持久化所需的数据

    view

    存放的是用QT设计师制作的UI界面

    main.py

    程序的主入口,调用其他包的功能,实现整个项目

    controller层介绍

    StudentController.py

    def add_controller_student(name, age, gender, cls):
        """
        TODO 将传入的学生的基本信息进行校验 然后封装成对象,
            调用DAO.StudentMapper中的add_student(Student:student)方法
            id 无需关心,数据库设置的是主键、自增
        :param name: 学生姓名
        :param age: 年龄
        :param gender: 性别
        :param cls: 班级
        :return: 返回受影响数"""
    
    def delete_controller_student(id):
        """
        TODO 根据传入的id删除学生的信息
        :param id: 学号
        :return: 受影响数
        """
    
    def select_one_controller_student(id):
        """
        TODO 根据传入的id查找学生的信息
        :param id: 学号
        :return: Student
        """
    
    def select_all_controller_student():
        """
        TODO 查找所有的学生信息
        :return: list(Student)
        """
    
    def select_special_controller_student(sql):
        """
        TODO 特殊查询,判断各个变量是否为空,然后将变量名和值拼接成SQL语句(str)
            然后调用DAO层的方法
            例如: f'id={student.id} and name={student.name}'
        :param sql : 要特殊查询的语句
        :return: 查询到的list(Student)类型的列表
        """
    
    def update_controller_student(student):
        """
        TODO 根据学生id修改学生的信息,id必须要有
        :param student: 要修改的信息
        :return: 受影响数
        """
    
    def add_list_controller_student(file_path):
        """
        TODO 从Excel表中导入学生信息
        :param file_path : 要读取的Excel文件的路径
        :return: True|False  是否导入成功
        """
    
    def export_controller_student(file_path, student_list):
        """
        TODO 将学生的信息导出到Excel
        :param file_path: 要导出文件路径
        :param student_list: 要导出的学生对象
        :return: True|False 是否导出成功
        """
    
    def writeInstance(sheet):
        """
        TODO 写入表头和实例
        :param sheet:
        :return: True|False 是否写入成功
        """
    

    AdminController.py

    def login_controller(username, password):
        """
        TODO 管理员登录的控制层 (要做简单的校验--校验是否为空)
        :param username: 账号
        :param password: 密码
        :return: True|False 是否登录成功
        """
    ```http://www.biyezuopin.vip
    
    ### main.py对项目整合
    ```python
    """
        项目的主入口
    """
    from controller.StudentController import *
    from controller.AdminController import *
    
    from PySide2.QtWidgets import QApplication, QWidget, QPlainTextEdit, QLineEdit, QMessageBox, QTableWidget, \
        QTableWidgetItem, QFileDialog
    from PySide2.QtUiTools import QUiLoader
    from PySide2.QtCore import QFile, Qt
    from PySide2.QtGui import QIcon
    
    
    class views:
        pass
    
    class Login(QWidget):
        def __init__(self):
            # 动态加载ui文件
            qtmp = QFile('view/login.ui')
            qtmp.open(QFile.ReadOnly)
            qtmp.close()
            self.ui = QUiLoader().load(qtmp)
            # 设置程序的图标
            app_icon = QIcon('view/logo.ico')
            self.ui.setWindowIcon(app_icon)
            self.ui.username.setFocus()
            # 添加按钮的点击事件
            self.ui.login.clicked.connect(self.login_view)
        def login_view(self):
            """
            登录事件
            :return:
            """
            username = self.ui.username.text()
            password = self.ui.password.text()
            if username == '' and password == '':
                QMessageBox.critical(self.ui, '错误', '请先输入账号和密码')
            else:
                if login_controller(username=username, password=password) is False:
                    # 登录失败
                    QMessageBox.critical(self.ui, '错误', '账号或密码错误')
                else:
                    # 将密码框中的中的内容清空
                    self.ui.password.setText('')
                    QMessageBox.information(self.ui, '成功', '登录成功')
                    views.login.ui.hide()
                    views.Main.ui.show()
    class Min:
        def __init__(self):
            qtmp = QFile('view/main.ui')
            qtmp.open(QFile.ReadOnly)
            qtmp.close()
            self.ui = QUiLoader().load(qtmp)
            # 设置程序的图标
            app_icon = QIcon('view/logo.ico')
            self.ui.setWindowIcon(app_icon)
            # 查询所有的学生信息并显示
            self.student_list = select_all_controller_student()
            # 将表格中的数据清空,并显示student_list数据
            self.show_list()
            # 为删除按钮添加点击事件
            self.ui.delete_btn.clicked.connect(self.delete_selected)
            # 为查询按钮添加点击事件
            self.ui.find_student.clicked.connect(self.find_student)
            # 为退出按钮添加事件
            self.ui.exit.clicked.connect(self.exit_win)
            # 为导入按钮添加点击事件
            self.ui.btn_in.clicked.connect(self.fileDialog)
            # 为导出按钮添加点击事件
            self.ui.btn_out.clicked.connect(self.export)
        # 导出
        def export(self):
            # print(self.student_list)
            if not self.student_list:
                QMessageBox.warning(self.ui, '警告', '导出数据为空')
                return
            filepath = QFileDialog.getExistingDirectory(self.ui, '请选择到导出的目录')
            if export_controller_student(filepath, self.student_list) is True:
                QMessageBox.information(self.ui, '成功', '导出成功')
        # 导入
        def fileDialog(self):
            filepath = QFileDialog.getOpenFileName(self.ui, "选择要导入的文件", filter="XLS 工作表 (*.xls)")
            if filepath == '' or filepath[0] == '':
                QMessageBox.critical(self.ui, '错误', '未选择文件')
            else:
                if add_list_controller_student(filepath[0]) is False:
                    QMessageBox.critical(self.ui, '错误', '导入数据失败')
                else:
                    QMessageBox.information(self.ui, '成功', '导入数据成功')
                    # 成功的话 重新刷新
                    self.student_list = select_all_controller_student()
                    self.show_list()
    
    
        def exit_win(self):
            views.Main.ui.close()
            views.login.ui.show()
        def find_student(self):
            # 获取到输入框的内容
            input_id = self.ui.input_num.text()
            input_name = self.ui.input_name.text()
            input_age = self.ui.input_age.text()
            input_gender = self.ui.input_gender.currentText()
            input_cls = self.ui.input_cls.text()
            if input_id != '':
                # 当id输入后,精确查询
                student = select_one_controller_student(int(input_id))
                if student is None:
                    QMessageBox.warning(self.ui, '警告', '查无此人')
                else:
                    self.student_list = []
                    self.student_list.append(student)
                    self.show_list()
            else:
                # 进行模糊查询
                sql = ''
                if input_name != '':
                    sql += f"name = '{input_name}' and "
                if input_gender != '':
                    sql += f"gender = '{input_gender}' and "
                if input_age != '':
                    sql += f"age = {int(input_age)} and "
                if input_cls != '':
                    sql += f"cls = '{input_cls}' and "
                if len(sql) == 0:
                    QMessageBox.warning(self.ui, '警告', '未输入查询内容')
                    # 未输入任何内容,则为刷新
                    self.student_list = select_all_controller_student()
                    self.show_list()
                sql = sql[:-5]
                self.student_list = select_special_controller_student(sql)
                if self.student_list is None:
                    QMessageBox.warning(self.ui, '警告', '查无此人')
                self.show_list()
        # 删除选中
        def delete_selected(self):
            ids = self.getSelected()
            if ids[len(ids)-1] == '':
                ids.remove('')
            for delete_id in ids:
                if delete_controller_student(int(delete_id)) != 1:
                    QMessageBox.critical(self.ui, '错误', '删除失败')
                    return
            # 刷新表格
            self.student_list = select_all_controller_student()
            self.show_list()
    
        def getSelected(self):
            select_all = self.ui.table.selectedIndexes()
            rows = []
            for select in select_all:
                # 获取选中的行
                rows.append(select.row())
            # 去重
            rows = list(set(rows))
            select_id_list = []
            for row in rows:
                select_id = self.ui.table.item(row, 0).text()
                select_id_list.append(select_id)
            return select_id_list
        def cfgItemChanged(self, row, column):
            # 获取更改内容
            try:
                stu_id = self.ui.table.item(row, 0).text()  # 首列为配置名称
                update_name = self.ui.table.item(row, 1).text()
                update_age = self.ui.table.item(row, 2).text()
                update_gender = self.ui.table.item(row, 3).text()
                update_cls = self.ui.table.item(row, 4).text()
                # print(stu_id,update_name,update_age,update_gender,update_cls)
                # 添加 业务
                if stu_id == '':
                    if add_controller_student(name=update_name, age=int(update_age), gender=update_gender, cls=update_cls) != 1:
                        # 添加失败
                        QMessageBox.critical(self.ui, '错误', '添加失败')
                    else:
                        # 添加成功
                        self.student_list = select_all_controller_student()
                        self.show_list()
                else:
                    # 封装成对象
                    student = Student(id=stu_id, name=update_name, gender=update_gender, age=update_age, cls=update_cls)
                    # 修改业务的实现
                    if update_controller_student(student) != 1:
                        # 修改失败
                        QMessageBox.critical(self.ui, '错误', '修改失败')
            except:
                pass
        def show_list(self):
            # 将列表清空
            self.ui.table.clearContents()
            self.ui.table.setRowCount(0)
            # self.ui.QTableWidget.
            for index, student in enumerate(self.student_list):
                stu_id = QTableWidgetItem()
                stu_name = QTableWidgetItem()
                stu_age = QTableWidgetItem()
                stu_gender = QTableWidgetItem()
                stu_cls = QTableWidgetItem()
                stu_id.setText(str(student.id))
                stu_id.setFlags(Qt.ItemIsEnabled)
                stu_id.setTextAlignment(Qt.AlignCenter)
                stu_name.setText(str(student.name))
                stu_name.setTextAlignment(Qt.AlignCenter)
                stu_age.setText(str(student.age))
                stu_age.setTextAlignment(Qt.AlignCenter)
                stu_gender.setText(str(student.gender))
                stu_gender.setTextAlignment(Qt.AlignCenter)
                stu_cls.setText(str(student.cls))
                stu_cls.setTextAlignment(Qt.AlignCenter)
                self.ui.table.insertRow(index)
                self.ui.table.setItem(index, 0, stu_id)
                self.ui.table.setItem(index, 1, stu_name)
                self.ui.table.setItem(index, 2, stu_age)
                self.ui.table.setItem(index, 3, stu_gender)
                self.ui.table.setItem(index, 4, stu_cls)
            # 为表格添加修改事件
            # 插入一行空列表,用于添加学生信息
            # print(len(student_list)+1)
            self.ui.table.insertRow(len(self.student_list))
            # 设置第一列不能修改
            item = QTableWidgetItem('')
            item.setFlags(Qt.ItemIsEnabled)  # 参数名字段不允许修改
            self.ui.table.setItem(len(self.student_list), 0, item)
            self.ui.table.cellChanged.connect(self.cfgItemChanged)
    
    if __name__ == '__main__':
        app = QApplication([])
        views.login = Login()
        views.Main = Min()
        # views.Main.ui.show()
        views.login.ui.show()
        app.exec_()
    
    展开全文
  • 学生信息管理系统之用户登录:用户登录流程

    万次阅读 热门讨论 2018-05-03 19:18:16
    第一步:获取本计算机用户名 Private Sub Form_Load()重点内容 Dim sBuffer As String '缓冲器 Dim lSize As Long sBuffer = Space$( 255 ) '缓冲器容量255Byte,...第七步:登录成功

    这里写图片描述

    第一步:获取本计算机用户名

    Private Sub Form_Load()重点内容
        Dim sBuffer As String   '缓冲器
        Dim lSize As Long
    
        sBuffer = Space$(255)   '缓冲器容量255Byte,sBuffer为255个空格字符串
        lSize = Len(sBuffer)     'sBuffer串的长度
        Call GetUserName(sBuffer, lSize)     '读取用户名到sBuffer中
    
        If lSize > 0 Then
            txtUserName.Text = ""
        Else

    第二步:判断文本框

    Private Sub cmdOK_Click()
        Dim txtSQL As String
        Dim mrc As ADODB.Recordset
        Dim MsgText As String
    
        UserName = ""
        If Trim(txtUserName.Text = "") Then
            MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
            txtUserName.SetFocus
        Else
            txtSQL = "select*from user_Info where user_ID='" & txtUserName.Text & "'"
            Set mrc = ExecuteSQL(txtSQL, MsgText)

    第三步:ExecuteSQL函数执行

    Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset
    'execute SQL and return recordset
        Dim cnn As ADODB.Connection
        Dim rst As ADODB.Recordset
        Dim sTokens() As String
    
        On Error GoTo ExecuteSQL_Error
    
        sTokens = Split(SQL)
        Set cnn = New ADODB.Connection
        cnn.Open ConnectString

    第四步:打开ConnectString,连接数据库

    Public Function ConnectString() As String       '以文件DSN标记,访问ODBC数据源
    ConnectString = "FileDSN=student.dsn;UID=sa;PWD=123456"      '连接文件dsn
    End Function

    第五步:判断增删改查

    If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
            cnn.Execute SQL
            MsgString = sTokens(0) & " query successful"
    
        Else
            Set rst = New ADODB.Recordset
            rst.Open Trim$(SQL), cnn, adOpenKeyset, adLockOptimistic
            Set ExecuteSQL = rst
            MsgString = "查询到" & rst.RecordCount & "条记录"
        End If
    
    ExecuteSQL_Exit:
        Set rst = Nothing
        Set cnn = Nothing
        Exit Function

    第六步:数据库查询后的判断

    If mrc.EOF Then
                MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告"
                txtUserName.SetFocus
            Else
                If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then
                    OK = True
                    mrc.Close
                    Me.Hide
                    UserName = Trim(txtUserName.Text)
                Else
                    MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"
                    txtPassword.SetFocus
                    txtPassword.Text = ""
                End If

    第七步:登录成功

    展开全文
  • 学生信息管理系统错误总结

    千次阅读 2021-03-16 11:42:07
    调试学生系统的一些错误,现在来总结一下。首先想反思一下,在调试学生系统的时候,拖了很长时间,现在才调试完,这一点是很不好的。并且在以后的学习中,会严格控制自己来改掉这个不好的习惯。多看培养计划。好了...
  • C 学生信息管理系统

    2012-02-28 16:00:07
    C语音简单的学生信息管理系统,能够简单的对学生的信息进行修改和查询
  • 界面美观,功能齐全,下载即可使用,用户名和密码是admin主入口是newpanel.java
  • 版本 面向对象版本的学生信息管理系统 第一版: import os # 面向对象的方式分析学生管理管理系统 # 1. 添加学生的功能 # 2. 修改学生的功能 # 3. 删除学生的功能 # 4. 查询学生的功能 # 定义类 # 1. 学生管理...
  • 本项目是一个学生信息管理系统,这个项目是用Python语言实现的,也实现了图形化界面的显示,同时也实现了管理员端,学生端两个登陆入口,同时底层使用的是Redis做的数据持久化。 This project is a student ...
  • C语言实现-学生信息管理系统

    千次阅读 2021-01-18 18:00:04
    通过C语言实现一个学生信息管理系统,要求如下: (1)用户采用自己账号和密码登录系统; (2)学生信息和账号密码通过文件的形式存储; (3)学生的信息有增删查改功能; (4)特别的,在增删查改后的学生信息可以...
  • 学生信息管理系统(C++实现)

    万次阅读 多人点赞 2018-10-13 10:42:17
    上个月程序设计作业做了一个学生信息管理系统,效果如下图   附上源代码。 //由于不熟悉文件读写,有些地方的代码有点奇怪。但是功能是可以实现的。 //虽然是用C++,但主要还是用了面向过程 /* ·File name...
  • Java小项目-----学生信息管理系统

    千次阅读 2019-07-12 14:21:37
    学生信息管理系统,包含了对学生,班级,院系,课程,成绩,用户,的录入,与管理。 下面请看具体的: 第一个界面:运行之后就出现这个界面,可注册一个用户,注册完之后可以登录使用。     ...
  • 使用python实现学生信息管理系统

    千次阅读 2021-03-17 11:21:25
    本文实例为大家分享了python实现学生信息管理系统的具体代码,供大家参考,具体内容如下学生管理系统的开发步骤:1、显示学生管理系统的功能菜单2、接收用户输入的功能选项3、判断用户输入的功能选项,并完成相关的...
  • 学生信息管理系统

    2011-10-15 15:52:50
    一个学生信息管理系统,包含其中的文件以及代码,基于sql数据库。
  • c++实现学生信息管理系统

    千次阅读 2020-06-01 19:10:36
    学生信息管理系统,要求完成以下基本任务: 1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散...
  • 学生信息管理系统(结构化程序)(C语言)

    千次阅读 多人点赞 2019-04-12 21:52:04
    学生信息管理系统(结构化程序)(C语言) 一、实验目的 明确结构化程序设计的基本结构。 2.通过对问题的分析,设计合理的结构化程序解决问题 二、实验内容 对学生信息管理系统,要求完成以下基本任务: 1.改写...
  • 学生成绩管理系统是各类程序设计课程的一个常见课程设计项目,包括了学生成绩信息的增删改查和排序功能。虽然学生成绩管理系统互联网上随处可见,但是大多数代码命名不规范、随意性大,而且代码质量较为糟糕,尤其是...
  • java实现简单学生信息管理系统

    万次阅读 多人点赞 2018-11-10 14:53:08
    ** ## java实现简单学生信息管理系统(6步) ** 1、首先定义一个学生信息主体类 package project; public class Stu_class { String name; String stu_id; String sex; String phone_num; int age; public ...
  • Java实现学生信息管理系统

    万次阅读 多人点赞 2021-03-28 11:12:43
    学生信息管理系统,要求完成以下基本任务: 1.有良好程序风格(文档注释,函数注释,语句注释)。 2.将功能补充完全(基于文件处理,完成刷新和保存功能)。 3.将学生信息改为更好的数据组织,而非离散形式...
  • 基于Springboot的学生信息管理系统

    千次阅读 2021-01-24 18:31:45
    采用Springboot+Vue.js开发的学生管理系统
  • Python、数据库、学生信息管理系统
  • 简单学生信息管理系统实现 使用win form与sql Server 可进行简单参考
  • 基于Shell脚本编写学生信息管理系统

    千次阅读 2021-08-27 20:13:47
    基于Shell脚本编写学生信息管理系统 学生信息管理系统背景系统组成项目执行运行结果总结 背景 学生信息是学校管理中非常重要的数据资源。传统的人工管理方式既耗时耗力,不便于管理,又不易于规范化,存在着数据丢失...
  • 学生信息管理系统(最终版)

    千次阅读 2020-12-05 14:06:18
    学生信息管理系统.doc》由会员分享,可免费在线阅读全文,更多与《学生信息管理系统(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、口等关系正确。)所设计的C程序较好的可读性和可靠性...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,963
精华内容 4,785
关键字:

学生信息管理系统登录入口