java 2018/11/10--2018/11/21 总结

本文深入探讨Java泛型的应用,包括泛型方法、泛型类的使用及内部类、匿名类的概念。同时,解析单例模式、工厂模式、观察者模式等设计模式的实现原理与应用场景,以及接口回调的机制。

1、泛型

        在定义类或方法的时候没有明确数据类型,而是使用<字母>来标记

        注:泛型只能是引用化类型,不能是基本类型

        举例:若想对一数组进行输出,这数组可以是:整型数组、浮点型、字符串数组。那么最好选择泛型...

        public class Jenerics {

       //泛型方法

       public static <E> void printArray(E[] inputArray) {

             //输出数组

             for(E element:inputArray) {

                    System.out.printf("%s",element);

             }

             System.out.println();

       }

       

       public static void main(String[] args) {

             

             //创建不同类型数组

             Integer[] intArray= {1,2,3,4,5};

             Double[] doubleArray= {1.1,2.1,3.1,4.1,5.1};

             String[] s= {"1","2","3","4","5"};

             

             System.out.println("Int型:");

             printArray(intArray);

             

             System.out.println("Double型:");

             printArray(doubleArray);

             System.out.println("String型:");

             printArray(s);

       }

}

 

        泛型类:

            public class Jenerics<E>{

       E value;

       

       public void add(E value) {

             this.value=value;

       }

       

       public E get() {

             return value;

       }

       

       public static void main(String[] args) {

             

             Jenerics<Integer> intValue=new Jenerics<Integer>();

             Jenerics<String> s=new Jenerics<String>();

             

             intValue.add(10);

             System.out.println("整型数值为:"+intValue.get());

             

             s.add("泛型类");

             System.out.println("字符串为:"+s.get());

       }

}

        

注:当获得这个类的实例的时候需要明确泛型的具体类型,无具体类型默认为Object

    如:上例中改为:

            

 

        是正确的

        若改为:

 

                    错误为Cannot make a static reference to the non-static type E

            说明在创建实例的时候就要明确类型而不能是泛型

2、电商例子中学到的

        ArrayList的使用,需要专门使用一个模块进行讲述

3、外部类与内部类、匿名类

    什么是外部类?什么是内部类?什么时候会用到

    定义在类中的类叫内部类,内部类的外面一层就是外部类

    

     内部类可以由匿名内部类,局部内部类,非静态内部类,静态内部类

 

     //外部类   

     public class Outer {

       

       //实例、成员

        static int n;

       

       //类、模板

       static int y;

       

       //内部类(内聚-封装)

       public static class Inner {

             void foo() {

                    n++;//此处的n应该定义为静态

             }

       }

}

            public class Demo {

       public static void main(String[] args) {

             //外部类对象

             Outer o=new Outer();

             

             //要使用内部类,内部类要加上限定符public

             //是实例化内部类

             //Inner加上static就可以不用o.

             Inner i=new Inner();

       }

}

我一直困惑的匿名内部类

    当前有用到的是监听器。

    匿名内部类只能使用一次,用来简化代码

    只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

为什么要用到内部类?

    内部类不会理会外部类继承了某个实现,它会独立继承一个实现

    内部类可以有更好的封装,除了该外围类,其他类都不能访问

4、设计模式(初学)

    单例模式(Singleton):只有唯一一个实例。作用: 用来解决一个全局使用的类频繁的创建和销毁,从而节约系统资源,一个对象处理一个连接,这个连接比较短    

    初始化方式:

        a)类加载

        b)延时加载

        c)内部类

        特点:

            1)构造方法私有化

            2)提供一个公开的静态方法(类方法)

            //单例模式

public class Singleton {

       

       //类加载时初始化,不一定要static,但本例子需要

       //static Singleton instance=new Singleton();

       

       static Singleton instance;

       

       //构造方法私有

       private Singleton(){

             

       }

       

       //未加static是错误的,因为构造方法写成私有的,无法被类意外的函数调用,只能通过getInstance函数,加上static可以用类名调用改方法。

       //延时加载需要synchronized同步方法,相当于别人还未执行完该方法,其他人不可用,但是性能会差

       public synchronized static Singleton getInstance() {

             //延时创建

             if(instance==null) {

                    instance=new Singleton();

             }

             return instance;

       }

       

       public static void main(String[] args) {

             System.out.println(Singleton.getInstance());

             System.out.println(Singleton.getInstance());

       }

}

        

        //内部类初始化

            public class Single {

       private Single() {

             

       }

       

       //类方法

       public static Single getInstance() {

             return Holder.instance;

       }

       

       //内部类

       static class Holder{

             static Single instance=new Single();

       }

}

       

    工厂模式(office):把具体的产品封装起来,不允许外界调用,只能通过特定的方法调用

        例如:office的例子,可以把文件如何创建的方法封装起来,外界通过特定方式调用,这里只传工厂方法,其他的类就没上传

    public class Factory {

       /**

        * 静态工厂方法

        *

        * @param type

        * @return

        */

       public static Doc create(Type type) {

             Doc doc = null;

             switch (type) {

             case WORD:

                    doc = new Word();

                    break;

             case EXCEL:

                    doc = new Excel();

                    break;

             case PPT:

                    doc = new Ppt();

             }

             return doc;

       }

       public static Doc create(Type type, String title) {

//           Doc doc = create(type);

//           doc.setTitle(title);

             

             Doc doc = null;

             switch (type) {

             case WORD:

                    doc = new Word(title);

                    break;

             case EXCEL:

                    doc = new Excel(title);

                    break;

             case PPT:

                    doc = new Ppt(title);

             }

             return doc;

       }

}

     构造器/构建者/Builder

        当想要创建多个初始化参数时,可以使用Builder

        对象创建的过程完成任意多个数的初始化参数,使用内部类间接完成对象的创建,一般将外部类的构造方法保护起来,即设置为私有

        public class User {

       // 将构造方法保护起来

       private User() {

       }

       String name;

       String e_mail;

       String phone;

       // 使用类名可以进行调用

       public static class Builder {

             static String name;

             static String e_mail;

             static String phone;

             public Builder() {

             }

             public static String getName() {

                    return name;

             }

             public Builder setName(String name) {

                    Builder.name = name;

                    return this;

             }

             public static String getE_mail() {

                    return e_mail;

             }

             public Builder setE_mail(String e_mail) {

                    Builder.e_mail = e_mail;

                    return this;

             }

             public static String getPhone() {

                    return phone;

             }

             public Builder setPhone(String phone) {

                    Builder.phone = phone;

                    return this;

             }

             public User builder() {

                    User user = new User();

                    return user;

             }

       }

       public static void main(String[] args) {

             User u = new User.Builder().setName("xx").setE_mail("g").builder();

             System.out.println(String.format("姓名:%s\n邮件:%s",Builder.getName(),Builder.getE_mail()));

       }

}

    观察者模式(Observe)

            当对象间存在一对多的关系时,则使用观察者模式。比如当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式,符合面向对象的设计,功能不重点突出,突出架构,成员变量越少越好。

        例子:被观察者更新了消息,那么观察者一方也要做出相应的变化

        /**

 * 观察者,看不到和数据直接相关的

 *

 * @author thinkpad_ljj

 *

 */

public class App {

       

       public static void main(String[] args) {

             

             Ui ui = new Ui();

             

             Data data2 = new Data();

             

             Data data = new Data();

             

             //添加观察者

             data.addObserver(ui);

             //data.addObserver(o);

             data2.addObserver(ui);

             

             //状态改变

             data.setF(36);

             data.setF(39);

             

       }

       

}

        import java.util.Observable;

/**

 * 被观测的主题

 *

 * @author thinkpad_ljj

 *

 */

public class Data extends Observable{

       

       //改变的数据

       double f;

       

       public void setF(double f) {

             this.f = f;

             

             //设置状态为已改变,必须写的

             setChanged();

             

             //通知观察者,不带参数则被观察者自己查看

             //notifyObservers();

             

             //带参数,观察者都会看到

             notifyObservers(f);

       }

       

       //返回更新的数据

       public double getF() {

             return f;

       }

       

}

        import java.util.Observable;

import java.util.Observer;

/**

 * 打印输出变化

 *

 * @author thinkpad_ljj

 *

 */

public class Ui implements Observer {

       double n;

       

       public void display() {

             System.out.println("更新:" + n);

       }

       //Observable是被观测者的,指明被观察的是哪个

       @Override

       public void update(Observable o, Object arg) {

             

             n = (double) arg;

             

             display();

       }

}

结果:

5、接口回掉

        回调是双向的调用模式

        接口回调:可以把实现某一接口的类创建的对象的引用赋值给该接口声明的接口变量,那么接口变量就可调用被类实现的接口方法

        选择JAVA课本中的例子进行说明

        public class Example {

       public static void main(String[] args) {

             ShowMessage sm;//声明接口变量

             sm = new TV();//接口变量中存放对象的引用

             sm.显示商标("长城");//接口回调

             sm = new PC();//接口变量中存放对象的引用

             sm.显示商标("联想");//接口回调

       }

}

interface ShowMessage{

       void 显示商标(String s);

}

class TV implements ShowMessage{

       @Override

       public void 显示商标(String s) {

             System.out.println(s);

       }

}

class PC implements ShowMessage{

       @Override

       public void 显示商标(String s) {

             System.out.println(s);

       }

       

}

 

 

内容概要:本文深入剖析了HTTPS中SSL/TLS握手的全流程,系统讲解了HTTPS的诞生背景及其相较于HTTP在安全性上的优势,重点阐述了SSL/TLS握手各阶段的技术细节,包括ClientHello、ServerHello、证书交换、密钥交换及加密通信建立等环节。文章结合加密基础概念(对称加密、非对称加密、哈希算法)和数字证书机制,解释了数据加密、身份验证与完整性保护的实现原理,并通过Wireshark抓包实例帮助读者直观理解握手过程中的数据交互。同时,归纳了常见握手失败问题及其解决方案,最后对SSL/TLS未来发展趋势进行了展望,涵盖抗量子加密算法和高效协议优化方向。; 适合人群:具备基本网络和安全知识的开发人员、运维工程师、网络安全爱好者,以及希望深入理解HTTPS底层机制的技术从业者;尤其适合1-3年经验、正在向中高级岗位发展的技术人员。; 使用场景及目标:①掌握HTTPS工作原理及SSL/TLS握手全过程,理解加密通信建立机制;②能够分析和排查HTTPS连接中的证书、加密套件、版本兼容等问题;③通过抓包实践提升对网络安全协议的实际分析能力;④为后续学习TLS 1.3、零RTT、前向保密等高级主题打下坚实基础; 阅读建议:此资源理论与实践结合紧密,建议在学习过程中同步使用Wireshark等工具进行抓包实验,对照文档中的握手阶段逐一验证各消息内容,加深对加密协商、证书验证和密钥生成过程的理解。同时关注最新TLS版本的发展趋势,拓展安全视野。
ava实现Web学生选课管理系统 一、系统介绍 1.软件环境 2.系统功能 3.数据库 二、系统展示 1.登录页面 2.学生-主页面 3.学生-查看个人信息 4.学生-选择课程 5.学生-查看已选课程 6.教师-主页面 7.教师-查看个人信息 8.教师-评分 9.教师-查看任课信息 10.管理员-主页面 11.管理员-管理员功能-查看个人信息 12.管理员-管理员功能-添加新的管理员 13.管理员-学生功能-添加学生 14.管理员-学生功能-获取所有学生 15.管理员-课程功能-添加课程 16.管理员-课程功能-查询课程 17.管理员-教师功能-添加教师 18.管理员-教师功能-获取所有教师 三、部分代码 AdminDaoImpl.java CourseDaoImpl.java StudentCourseTeacherDaoImpl.java StudentDaoImpl.java TeacherCourseDaoImpl.javab TeacherDaoImpl.java addAdmin.jsp addCourse.jsp addStudent.jsp addTeacher.jsp 四、其他 1.其他系统实现 JavaWeb系统系列实现 JavaSwing系统系列实现 2.获取源码 3.备注 4.鸡汤 一、系统介绍 1.软件环境 Java:jdk1.8 Mysql:8.0.13 Tomcat:8.5.23 2.系统功能 学生 1.查看个人信息 2.选课 3.查看已选课程 教师 1.查看个人信息 2.评分 3.查看任课课程 管理员 1.管理员功能 (1).查看个人信息 (2).添加新的管理员 2.学生功能 (1).添加学生 (2).获取所有学生 3.课程功能 (1).添加课程 (2).查询课程 4.教师功能 (1).添加教师 (2)获取所有教师 3.数据库 /* Navicat Premium Data Transfer Source Server : MySQL Source Server Type : MySQL Source Server Version : 80013 Source Host : localhost:3306 Source Schema : jsp_servlet_selectcourse Target Server Type : MySQL Target Server Version : 80013 File Encoding : 65001 Date: 23/06/2021 20:46:30 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_admin -- ---------------------------- DROP TABLE IF EXISTS `t_admin`; CREATE TABLE `t_admin` ( `userid` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(3) NULL DEFAULT NULL, `score` decimal(5, 1) NULL DEFAULT NULL, `introduction` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `enterdate` date NULL DEFAULT NULL, PRIMARY KEY (`userid`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_admin -- ---------------------------- INSERT INTO `t_admin` VALUES ('admin', '管理员', 'admin', 21, 100.0, ' ', '2018-06-12'); INSERT INTO `t_admin` VALUES ('admin1', '水坚石青', 'admin1', 25, 99.0, '', '2021-06-22'); -- ---------------------------- -- Table structure for t_class -- ---------------------------- DROP TABLE IF EXISTS `t_class`; CREATE TABLE `t_class` ( `classno` int(4) NOT NULL AUTO_INCREMENT, `cname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `cteacher` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `classroom` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`classno`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1531 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_class -- ---------------------------- INSERT INTO `t_class` VALUES (1520, '软工', '赵丽', '综阶1'); INSERT INTO `t_class` VALUES (1521, '软工', '齐兴斌', '综阶2'); INSERT INTO `t_class` VALUES (1522, '软工', '张志斌', '综阶3'); INSERT INTO `t_class` VALUES (1523, '软工', '郭小英', '综阶5'); INSERT INTO `t_class` VALUES (1524, '软工', '郭新峰', '综阶6'); INSERT INTO `t_class` VALUES (1525, '软工', '王若慧', '综阶7'); INSERT INTO `t_class` VALUES (1526, '软工', '贾春华', '综阶8'); INSERT INTO `t_class` VALUES (1527, '软工', '朱云雷', '综阶9'); INSERT INTO `t_class` VALUES (1528, '软工', '李雪梅', '综阶10'); INSERT INTO `t_class` VALUES (1529, '软工', '张举 ', '综阶11'); INSERT INTO `t_class` VALUES (1530, '软工', '米晓萍', '综阶12'); INSERT INTO `t_class` VALUES (1531, '软工', '张建英', '综阶13'); -- ---------------------------- -- Table structure for t_course -- ---------------------------- DROP TABLE IF EXISTS `t_course`; CREATE TABLE `t_course` ( `cno` int(4) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `credit` int(1) NULL DEFAULT NULL, `periodstart` date NULL DEFAULT NULL, `periodend` date NULL DEFAULT NULL, PRIMARY KEY (`cno`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1009 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_course -- ---------------------------- INSERT INTO `t_course` VALUES (1001, '数据库', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1002, '数据结构', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1003, 'j2ee', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1004, '计算机网络', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1005, '计算机组成原理', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1007, '编译原理', 4, '2018-02-01', '2018-08-08'); INSERT INTO `t_course` VALUES (1008, 'C语言', 4, '2018-02-01', '2018-02-01'); INSERT INTO `t_course` VALUES (1009, 'c++', 4, '2018-01-02', '2018-05-28'); INSERT INTO `t_course` VALUES (1010, '1', 1, '2021-06-22', '2021-06-22'); -- ---------------------------- -- Table structure for t_sc -- ---------------------------- DROP TABLE IF EXISTS `t_sc`; CREATE TABLE `t_sc` ( `sno` int(10) NOT NULL, `cno` int(4) NOT NULL, `tno` int(4) NOT NULL, `score` decimal(5, 2) NULL DEFAULT NULL, PRIMARY KEY (`sno`, `cno`, `tno`) USING BTREE, INDEX `t_sc_ibfk_2`(`cno`) USING BTREE, INDEX `t_sc_ibfk_3`(`tno`) USING BTREE, CONSTRAINT `t_sc_ibfk_1` FOREIGN KEY (`sno`) REFERENCES `t_student` (`sno`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `t_sc_ibfk_2` FOREIGN KEY (`cno`) REFERENCES `t_course` (`cno`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `t_sc_ibfk_3` FOREIGN KEY (`tno`) REFERENCES `t_teacher` (`tno`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_sc -- ---------------------------- INSERT INTO `t_sc` VALUES (2015001, 1002, 1001, 100.00); INSERT INTO `t_sc` VALUES (2015001, 1004, 1001, 99.00); INSERT INTO `t_sc` VALUES (2015001, 1004, 1006, NULL); INSERT INTO `t_sc` VALUES (2015001, 1005, 1002, NULL); INSERT INTO `t_sc` VALUES (2015001, 1007, 1004, NULL); INSERT INTO `t_sc` VALUES (2015001, 1008, 1002, NULL); INSERT INTO `t_sc` VALUES (2015001, 1008, 1004, NULL); INSERT INTO `t_sc` VALUES (2015001, 1008, 1005, NULL); -- ---------------------------- -- Table structure for t_student -- ---------------------------- DROP TABLE IF EXISTS `t_student`; CREATE TABLE `t_student` ( `sno` int(9) NOT NULL AUTO_INCREMENT, `password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `sname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `phone` bigint(11) NULL DEFAULT NULL, `sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `birthday` date NULL DEFAULT NULL, `classno` int(4) NULL DEFAULT NULL, `remark` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`sno`) USING BTREE, INDEX `t_student_ibfk_1`(`classno`) USING BTREE, CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`classno`) REFERENCES `t_class` (`classno`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE = InnoDB AUTO_INCREMENT = 2015570 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_student -- ---------------------------- INSERT INTO `t_student` VALUES (2015001, '123456', '李四', 15788888888, '女', '2021-06-22', 1525, '优秀'); INSERT INTO `t_student` VALUES (2015002, '123456', '王茹', 15788888888, '女', '2018-05-28', 1520, '良好'); INSERT INTO `t_student` VALUES (2015003, '123456', '张三', 15788888888, '女', '2018-05-28', 1520, '良好'); INSERT INTO `t_student` VALUES (2015004, '123456', '王五', 15788888888, '女', '2018-05-28', 1520, '优秀'); INSERT INTO `t_student` VALUES (2015005, '123456', '李浩', 15788888888, '女', '2018-05-28', 1520, '合格'); INSERT INTO `t_student` VALUES (2015006, '123456', '黄县', 15788888888, '女', '2018-05-28', 1520, '良好'); INSERT INTO `t_student` VALUES (2015007, '123456', '钱一', 15788888888, '女', '2018-05-28', 1520, '优秀'); INSERT INTO `t_student` VALUES (2015009, '123456', '赵括', 15788888888, '女', '2018-05-28', 1520, '优秀'); INSERT INTO `t_student` VALUES (2015010, '123456', '赵括', 15788888888, '女', '2018-05-28', 1520, '优秀'); -- ---------------------------- -- Table structure for t_tc -- ---------------------------- DROP TABLE IF EXISTS `t_tc`; CREATE TABLE `t_tc` ( `cno` int(4) NOT NULL, `tno` int(4) NOT NULL, PRIMARY KEY (`cno`, `tno`) USING BTREE, INDEX `t_tc_ibfk_2`(`tno`) USING BTREE, CONSTRAINT `t_tc_ibfk_1` FOREIGN KEY (`cno`) REFERENCES `t_course` (`cno`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `t_tc_ibfk_2` FOREIGN KEY (`tno`) REFERENCES `t_teacher` (`tno`) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_tc -- ---------------------------- INSERT INTO `t_tc` VALUES (1001, 1001); INSERT INTO `t_tc` VALUES (1002, 1001); INSERT INTO `t_tc` VALUES (1004, 1001); INSERT INTO `t_tc` VALUES (1009, 1001); INSERT INTO `t_tc` VALUES (1005, 1002); INSERT INTO `t_tc` VALUES (1008, 1002); INSERT INTO `t_tc` VALUES (1002, 1003); INSERT INTO `t_tc` VALUES (1004, 1003); INSERT INTO `t_tc` VALUES (1007, 1004); INSERT INTO `t_tc` VALUES (1008, 1004); INSERT INTO `t_tc` VALUES (1008, 1005); INSERT INTO `t_tc` VALUES (1004, 1006); -- ---------------------------- -- Table structure for t_teacher -- ---------------------------- DROP TABLE IF EXISTS `t_teacher`; CREATE TABLE `t_teacher` ( `tno` int(4) NOT NULL AUTO_INCREMENT, `tname` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `phone` bigint(11) NULL DEFAULT NULL, `hiredate` date NULL DEFAULT NULL, `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`tno`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1006 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_teacher -- ---------------------------- INSERT INTO `t_teacher` VALUES (1001, '张志斌', '123456', 15788888888, '2017-07-20', '张老师是一个超级幽默的老师,教学认真,态度友好,有自己独有的教学方法,深得学生喜爱'); INSERT INTO `t_teacher` VALUES (1002, '白茹意', '123456', 15766666666, '2018-03-06', '白老师工作认真负责,不推卸责任'); INSERT INTO `t_teacher` VALUES (1003, '郭新峰', '123456', 15733333333, '2018-05-14', '<span style=\"font-family:Arial Black;\"><span style=\"color:#E53333;\"><span style=\"color:#E53333;\">郭老师很认真负责</span></span></span>'); INSERT INTO `t_teacher` VALUES (1004, '赵丽', '123456', 15722222222, '2018-04-03', NULL); INSERT INTO `t_teacher` VALUES (1005, '齐兴斌', '123456', 15711111111, '2004-05-28', NULL); INSERT INTO `t_teacher` VALUES (1006, '尹少平', '123456', 15777777777, '2014-06-11', NULL); SET FOREIGN_KEY_CHECKS = 1; AI写代码 sql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 二、系统展示 1.登录页面 2.学生-主页面 3.学生-查看个人信息 4.学生-选择课程 5.学生-查看已选课程 6.教师-主页面 7.教师-查看个人信息 8.教师-评分 9.教师-查看任课信息 10.管理员-主页面 11.管理员-管理员功能-查看个人信息 12.管理员-管理员功能-添加新的管理员 13.管理员-学生功能-添加学生 14.管理员-学生功能-获取所有学生 15.管理员-课程功能-添加课程 16.管理员-课程功能-查询课程 17.管理员-教师功能-添加教师 18.管理员-教师功能-获取所有教师 三、部分代码 AdminDaoImpl.java package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.util.Date; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.bluehonour.sscs.dao.AdminDao; import com.bluehonour.sscs.entity.Admin; import com.bluehonour.sscs.util.DBUtils; public class AdminDaoImpl implements AdminDao{ @Override public Admin find(String userId, String password) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Admin admin = null; try { //建立连接 connection = DBUtils.getConnection(); //向数据库发送sql命令并得到结果 String sql = "select * from t_admin where userid = ? and password = ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, userId); preparedStatement.setString(2, password); rs = preparedStatement.executeQuery(); //处理返回结果 if(rs.next()) { //取出结果集当前行各个字段的值 String userName = rs.getString("username"); int age = rs.getInt("age"); double score = rs.getDouble("score"); Date enterDate = rs.getDate("enterdate"); String introduction = rs.getString("introduction"); //封装成对象 admin = new Admin(userId, userName, password, age, score, enterDate, introduction); } } catch (SQLException e) { e.printStackTrace(); } finally { //关闭数据库资源 DBUtils.closeAll(rs, preparedStatement, connection); } return admin; } @Override public int save(Admin admin) { String sql = "insert into t_admin values(?,?,?,?,?,?,?)"; Object[] params = {admin.getUserId(),admin.getUserName(),admin.getPassword(),admin.getAge(), admin.getScore(),admin.getIntroduction(),admin.getEnterDate()}; return DBUtils.executeUpdate(sql, params); } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 CourseDaoImpl.java package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bluehonour.sscs.dao.CourseDao; import com.bluehonour.sscs.entity.Course; import com.bluehonour.sscs.util.DBUtils; public class CourseDaoImpl implements CourseDao{ @Override public int save(Course course) { String sql = "insert into t_course (name,credit,periodstart,periodend) values(?,?,?,?) "; Object[] params = {course.getName(), course.getCredit(), course.getPeriodstart(), course.getPeriodend()}; return DBUtils.executeUpdate(sql, params); } @Override public List<Course> findAll() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Course> list = new ArrayList<Course>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_course order by cno"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行各个字段的值 int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); Date periodstart = rs.getDate("periodstart"); Date periodend = rs.getDate("periodend"); // 封装成对象 Course course = new Course(cno,name, credit, periodstart, periodend); list.add(course); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 StudentCourseTeacherDaoImpl.java package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bluehonour.sscs.dao.StudentCourseTeacherDao; import com.bluehonour.sscs.entity.Course; import com.bluehonour.sscs.entity.StudentCourse; import com.bluehonour.sscs.entity.Teacher; import com.bluehonour.sscs.util.DBUtils; public class StudentCourseTeacherDaoImpl implements StudentCourseTeacherDao { @Override public int save(int sno, int cno, int tno) { String sql = "insert into t_sc(sno,cno,tno) values(?,?,?)"; Object[] params = {sno,cno,tno}; return DBUtils.executeUpdate(sql, params); } @Override public List<Course> findSelectedCourse(int sno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Course> list = new ArrayList<Course>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_course c" + " join t_sc sc" + " on (c.cno = sc.cno)" + " join t_teacher t" + " on (sc.tno = t.tno)" + " where sno = " + sno; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行课程各个字段的值 int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); Date periodstart = rs.getDate("periodstart"); Date periodend = rs.getDate("periodend"); // 封装成课程对象 Course course = new Course(cno,name, credit, periodstart, periodend); //取出结果集中教师各个字段的值 int tno = rs.getInt("tno"); String tname = rs.getString("tname"); String password = rs.getString("password"); long phone = rs.getLong("phone"); Date hiredate = rs.getDate("hiredate"); String remark = rs.getString("remark"); //封装成教师对象 Teacher teacher = new Teacher(tno,tname, password, phone, hiredate, remark); //将教师加入课程 course.setTeacher(teacher); list.add(course); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } @Override public List<Course> findSelectableCourse(int sno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Course> list = new ArrayList<Course>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "SELECT c.*, t.* FROM t_tc a " + "LEFT JOIN t_course c " + "ON a.cno = c.cno " + "LEFT JOIN t_teacher t " + "ON a.tno = t.tno " + "WHERE (a.cno, a.tno) NOT IN " + "( SELECT cno,tno " + "FROM t_sc " + "WHERE sno = " + sno +") "; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行课程各个字段的值 int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); Date periodstart = rs.getDate("periodstart"); Date periodend = rs.getDate("periodend"); // 封装成课程对象 Course course = new Course(cno,name, credit, periodstart, periodend); //取出结果集中教师各个字段的值 int tno = rs.getInt("tno"); String tname = rs.getString("tname"); String password = rs.getString("password"); long phone = rs.getLong("phone"); Date hiredate = rs.getDate("hiredate"); String remark = rs.getString("remark"); //封装成教师对象 Teacher teacher = new Teacher(tno,tname, password, phone, hiredate, remark); //将教师加入课程 course.setTeacher(teacher); list.add(course); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } @Override public int removeStudentDistributedCourse(int sno, int cno, int tno) { String sql = "delete from t_sc where sno = ? and cno = ? and tno = ?"; Object[] params = {sno,cno,tno}; return DBUtils.executeUpdate(sql, params); } @Override public List<StudentCourse> getSelectedStudentAndCourse(int tno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<StudentCourse> list = new ArrayList<StudentCourse>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "SELECT" + " s.sno," + " s.sname," + " s.classno," + " clazz.cname," + " c.cno," + " c. NAME," + " c.credit," + " sc.score" + " FROM" + " t_student s" + " LEFT JOIN t_class clazz ON clazz.classno = s.classno" + " LEFT JOIN t_sc sc ON sc.sno = s.sno" + " LEFT JOIN t_course c ON c.cno = sc.cno" + " WHERE" + " sc.tno = " + tno + " ORDER BY" + " c.cno," + " s.sno"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); int sno = rs.getInt("sno"); int classno = rs.getInt("classno"); String sname = rs.getString("sname"); String cname = rs.getString("cname"); double score = rs.getDouble("score"); //封装成教师对象 StudentCourse sc = new StudentCourse(sno, sname, classno, cname, cno, name, credit, score); list.add(sc); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } @Override public int courseRemark(int sno, int cno, int tno, double score) { String sql = "update t_sc set score = ? where sno = ? and cno = ? and tno = ?"; Object[] params = {score,sno,cno,tno}; return DBUtils.executeUpdate(sql, params); } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 StudentDaoImpl.java package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bluehonour.sscs.dao.StudentDao; import com.bluehonour.sscs.entity.ClassInfo; import com.bluehonour.sscs.entity.CriteriaStudent; import com.bluehonour.sscs.entity.Student; import com.bluehonour.sscs.util.DBUtils; public class StudentDaoImpl implements StudentDao { @Override public int save(Student stu) { String sql = "insert into t_student(password,sname,phone,sex,birthday,classno,remark) values(?,?,?,?,?,?,?)"; Object[] params = { stu.getPassword(), stu.getSname(), stu.getPhone(), stu.getSex(), stu.getBirthday(), stu.getClassno(), stu.getRemark() }; return DBUtils.executeUpdate(sql, params); } @Override public List<Student> findAll() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Student student = null; List<Student> stuList = new ArrayList<Student>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_student"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行各个字段的值 int sno = rs.getInt("sno"); String password = rs.getString("password"); String sname = rs.getString("sname"); long phone = rs.getLong("phone"); String sex = rs.getString("sex"); Date birthday = rs.getDate("birthday"); int classno = rs.getInt("classno"); String remark = rs.getString("remark"); // 封装成对象 student = new Student(sno,password, sname, phone, sex, birthday, classno, remark); stuList.add(student); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return stuList; } @Override public int del(int sno) { String sql = "delete from t_student where sno = ?"; Object[] params = {sno }; return DBUtils.executeUpdate(sql, params); } @Override public Student findById(int sno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Student student = null; try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_student where sno = " + sno; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 if (rs.next()) { // 取出结果集当前行各个字段的值 String password = rs.getString("password"); String sname = rs.getString("sname"); long phone = rs.getLong("phone"); String sex = rs.getString("sex"); Date birthday = rs.getDate("birthday"); int classno = rs.getInt("classno"); String remark = rs.getString("remark"); // 封装成对象 student = new Student(sno,password, sname, phone, sex, birthday, classno, remark); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return student; } @Override public int update(Student stu) { String sql = "update t_student set sname=?,password=?,phone=?,birthday=?,sex=?,classno=?,remark=? where sno=?"; Object[] params = { stu.getSname(),stu.getPassword(),stu.getPhone(),stu.getBirthday(),stu.getSex(),stu.getClassno(), stu.getRemark(),stu.getSno() }; return DBUtils.executeUpdate(sql, params); } @Override public Student find(String sno, String password) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Student student = null; try { //建立连接 connection = DBUtils.getConnection(); //向数据库发送sql命令并得到结果 String sql = "select * from t_student where sno = ? and password = ?"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, sno); preparedStatement.setString(2, password); rs = preparedStatement.executeQuery(); //处理返回结果 if(rs.next()) { //取出结果集当前行各个字段的值 String sname = rs.getString("sname"); long phone = rs.getLong("phone"); String sex = rs.getString("sex"); Date birthday = rs.getDate("birthday"); int classno = rs.getInt("classno"); String remark = rs.getString("remark"); //封装成对象 student = new Student(Integer.parseInt(sno), password, sname, phone, sex, birthday, classno, remark); } } catch (SQLException e) { e.printStackTrace(); } finally { //关闭数据库资源 DBUtils.closeAll(rs, preparedStatement, connection); } return student; } @Override public List<ClassInfo> getClassInfo() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; ClassInfo clazz = null; List<ClassInfo> list = new ArrayList<ClassInfo>(); try { //建立连接 connection = DBUtils.getConnection(); //向数据库发送sql命令并得到结果 String sql = "select * from t_class"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); //处理返回结果 while(rs.next()) { //取出结果集当前行各个字段的值 int classno = rs.getInt("classno"); String cname = rs.getString("cname"); String cteacher = rs.getString("cteacher"); String classroom = rs.getString("classroom"); //封装成对象 clazz = new ClassInfo(classno, cname, cteacher, classroom); list.add(clazz); } } catch (SQLException e) { e.printStackTrace(); } finally { //关闭数据库资源 DBUtils.closeAll(rs, preparedStatement, connection); } return list; } @Override public List<Student> getForListWithCriteriaStudent(CriteriaStudent student) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Student> stuList = new ArrayList<Student>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 StringBuffer sql = new StringBuffer(); sql.append("select * from t_student"); if(!student.getSno().equals("")) { sql.append(" and sno like '%"+ student.getSno() +"%'"); } if(!student.getSname().equals("")) { sql.append(" and sname like '%"+ student.getSname() +"%'"); } if(!student.getSex().equals("")) { sql.append(" and sex ='"+ student.getSex() +"'"); } if(!student.getClassno().equals("")) { sql.append(" and classno like '%"+ student.getClassno() +"%'"); } if(!student.getRemark().equals("")) { sql.append(" and remark='"+ student.getRemark() +"'"); } String SQL = sql.toString(); SQL = SQL.replaceFirst("and", "where"); System.out.println(SQL); preparedStatement = connection.prepareStatement(SQL); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行各个字段的值 int sno = rs.getInt("sno"); String password = rs.getString("password"); String sname = rs.getString("sname"); long phone = rs.getLong("phone"); String sex = rs.getString("sex"); Date birthday = rs.getDate("birthday"); int classno = rs.getInt("classno"); String remark = rs.getString("remark"); // 封装成对象 Student stu = new Student(sno,password, sname, phone, sex, birthday, classno, remark); stuList.add(stu); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return stuList; } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 TeacherCourseDaoImpl.javab package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bluehonour.sscs.dao.TeacherCourseDao; import com.bluehonour.sscs.entity.Course; import com.bluehonour.sscs.entity.Teacher; import com.bluehonour.sscs.util.DBUtils; public class TeacherCourseDaoImpl implements TeacherCourseDao { @Override public int save(int cno, int tno) { String sql = "insert into t_tc values(?,?)"; Object[] params = {cno,tno}; return DBUtils.executeUpdate(sql, params); } @Override public int delete(int cno, int tno) { String sql = "delete from t_tc where cno = ? and tno = ?"; Object[] params = {cno,tno}; return DBUtils.executeUpdate(sql, params); } @Override public List<Course> findAll() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Course> list = new ArrayList<Course>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_course c" + " join t_tc tc" + " on (c.cno = tc.cno)" + " join t_teacher t" + " on (tc.tno = t.tno)" + " order by c.cno"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行课程各个字段的值 int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); Date periodstart = rs.getDate("periodstart"); Date periodend = rs.getDate("periodend"); // 封装成课程对象 Course course = new Course(cno,name, credit, periodstart, periodend); //取出结果集中教师各个字段的值 int tno = rs.getInt("tno"); String tname = rs.getString("tname"); String password = rs.getString("password"); long phone = rs.getLong("phone"); Date hiredate = rs.getDate("hiredate"); String remark = rs.getString("remark"); //封装成教师对象 Teacher teacher = new Teacher(tno,tname, password, phone, hiredate, remark); //将教师加入课程 course.setTeacher(teacher); list.add(course); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 TeacherDaoImpl.java package com.bluehonour.sscs.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.bluehonour.sscs.dao.TeacherDao; import com.bluehonour.sscs.entity.Course; import com.bluehonour.sscs.entity.Student; import com.bluehonour.sscs.entity.Teacher; import com.bluehonour.sscs.util.DBUtils; public class TeacherDaoImpl implements TeacherDao { @Override public int save(Teacher teacher) { String sql = "insert into t_teacher(tname,password,phone,hiredate,remark) values(?,?,?,?,?) "; Object[] params = {teacher.getTname(),teacher.getPassword(),teacher.getPhone(),teacher.getHiredate(),teacher.getRemark()}; return DBUtils.executeUpdate(sql, params); } @Override public List<Teacher> findAll() { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; List<Teacher> list = new ArrayList<Teacher>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_teacher order by tno"; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行各个字段的值 int tno = rs.getInt("tno"); String tname = rs.getString("tname"); String password = rs.getString("password"); long phone = rs.getLong("phone"); Date hiredate = rs.getDate("hiredate"); String remark = rs.getString("remark"); // 封装成对象 Teacher teacher = new Teacher(tno,tname, password, phone, hiredate, remark); list.add(teacher); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } @Override public int delete(int tno) { String sql = "delete from t_teacher where tno = ?"; Object[] params = {tno }; return DBUtils.executeUpdate(sql, params); } @Override public Teacher findById(int tno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Teacher teacher = null; try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select * from t_teacher where tno = " + tno; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 if (rs.next()) { // 取出结果集当前行各个字段的值 String tname = rs.getString("tname"); String password = rs.getString("password"); long phone = rs.getLong("phone"); Date hiredate = rs.getDate("hiredate"); String remark = rs.getString("remark"); // 封装成对象 teacher = new Teacher(tno, tname, password, phone, hiredate, remark); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return teacher; } @Override public int update(Teacher teacher) { String sql = "update t_teacher set tname=?,password=?,phone=?,hiredate=?,remark=? where tno=?"; Object[] params = {teacher.getTname(),teacher.getPassword(),teacher.getPhone(),teacher.getHiredate(),teacher.getRemark(),teacher.getTno()}; return DBUtils.executeUpdate(sql, params); } @Override public List<Course> getAssumeCourse(int tno) { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; Course course = null; List<Course> list = new ArrayList<>(); try { // 建立连接 connection = DBUtils.getConnection(); // 向数据库发送sql命令并得到结果 String sql = "select c.* from t_tc tc " + "LEFT JOIN t_teacher t on t.tno = tc.tno " + "LEFT JOIN t_course c on c.cno = tc.cno " + "where tc.tno = " + tno ; preparedStatement = connection.prepareStatement(sql); rs = preparedStatement.executeQuery(); // 处理返回结果 while (rs.next()) { // 取出结果集当前行各个字段的值 int cno = rs.getInt("cno"); String name = rs.getString("name"); int credit = rs.getInt("credit"); Date periodstart = rs.getDate("periodstart"); Date periodend = rs.getDate("periodend"); // 封装成对象 course = new Course(cno,name, credit, periodstart, periodend); list.add(course); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtils.closeAll(rs, preparedStatement, connection); } return list; } } AI写代码 java 运行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 addAdmin.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>增加管理员</title> <link rel="stylesheet" type="text/css" href="<c:url value='/css/add.css'/>"> <script type="text/javascript" src="${pageContext.request.contextPath }/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/kindeditor/kindeditor-all.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/kindeditor/lang/zh_CN.js"></script> <script> KindEditor.ready(function(K) { filterMode: false,//是否开启过滤模式 window.editor = K.create('#introduction-id'); }); </script> </head> <body> <div class="nav"> <%-- ${error } <div><img src="${pageContext.request.contextPath }/images/register_admin.jpg"></div> --%> <% if(request.getAttribute("error") != null){ %> <div><img src="${pageContext.request.contextPath }/images/add_admin_error.jpg"></div> <% } else{ %> <div><img src="${pageContext.request.contextPath }/images/register_admin.jpg"></div> <% } %> <div class="nav1"> <form action="${pageContext.request.contextPath }/addAdmin.do" method="post"> <p> <label for="userId">管理员账号:</label> <input type="text" name="userId" id="userId""><span>请输入4-10位用户名</span> </p> <p> <label for="userName">真实姓名:</label> <input type="text" name="userName" id="userName" value=""><span>请输入您的真实姓名</span> </p> <p> <label for="passWord">密码:</label> <input type="password" name="passWord" id="passWord" value="" size="20px"><span>密码为6-16位</span> </p> <p> <label for="rePassWord">确认密码:</label> <input type="password" name="rePassWord" id="rePassWord" value="" size="20px"><span>请再次输入密码</span> </p> <p> <label for="age">年龄:</label> <input type="text" name="age" id="age" value=""><span>请输入年龄</span> </p> <p> <label for="score">成绩:</label> <input type="text" name="score" id="score" value=""><span>请输入成绩</span> </p> <p> <label for="enterDate">入职时间:</label> <input type="text" name="enterDate" id="enterDate" value="" onfocus="WdatePicker({highLineWeekDay:true,isShowToday:true,isShowWeek:true})"><span>请输入入职时间</span> </p> <p> <label for="introduction">简介:</label> <textarea class="no" name="introduction" id="introduction-id" style=" width: 700px; height: 200px; visibility: hidden; display: block;"> </textarea> </p> <button class="sub"> <img src="${pageContext.request.contextPath }/images/button.gif"> </button> </form> </div> </div> <script> window.onload = function(e) { var form = document.querySelector('form'); var userId = document.querySelector('#userId'); var userName = document.querySelector('#userName'); var passWord = document.querySelector('#passWord'); var rePassWord = document.querySelector('#rePassWord'); var age = document.querySelector('#age'); var score = document.querySelector('#score'); var enterDate = document.querySelector('#enterDate'); var span = document.querySelectorAll('span'); //onsubmit事件 form.onsubmit = function(e) { var userId = checkUserId(); if (!userId) { return false; } var username = checkUserName(); if (!username) { return false; } var password = checkPassWord(); if (!password) { return false; } var rePassWord = checkRePassWord(); if (!rePassWord) { return false; } var age = checkAge(); if (!age) { return false; } var score = checkScore(); if (!score) { return false; } var enterDate = checkEnterDate(); if (!enterDate) { return false; } return true; }; //onblur失去焦点事件 userId.onblur = function(e) { checkUserId(); }; userName.onblur = function(e) { checkUserName(); }; passWord.onblur = function(e) { checkPassWord(); }; rePassWord.onblur = function(e) { checkRePassWord(); }; age.onblur = function(e) { checkAge(); }; score.onblur = function(e) { checkScore(); }; enterDate.onblur = function(e) { checkEnterDate(); }; //---------------------------------函数封装------------------------------------------------------------- //管理员账户(3-10位) function checkUserId(e) { if (userId.value.length == 0) { span[0].innerText = '账户不能为空'; span[0].className = 'danger'; return false; } var pattern = /^[A-Za-z0-9]{3,10}$/; if (!pattern.test(userId.value)) { span[0].innerText = '账户格式错误,请重新输入'; span[0].className = 'danger'; return false; } span[0].innerText = '管理员账户输入正确'; span[0].className = 'success'; return true; } //真实姓名(2-4位汉字) function checkUserName(e) { if (userName.value.length == 0) { span[1].innerText = '真实姓名不能为空'; span[1].className = 'danger'; return false; } var pattern = /^[\u4e00-\u9fa5]{2,4}$/; if (!pattern.test(userName.value)) { span[1].innerText = '真实姓名格式错误,请重新输入'; span[1].className = 'danger'; return false; } span[1].innerText = '真实姓名输入正确'; span[1].className = 'success'; return true; } //登录密码(6-16位) function checkPassWord(e) { if (passWord.value.length == 0) { span[2].innerText = '密码不能为空'; span[2].className = 'danger'; return false; } var pattern = /^[A-Za-z0-9]{6,16}$/; if (!pattern.test(passWord.value)) { span[2].innerText = '密码不符合格式,请重新输入'; span[2].className = 'danger'; return false; } span[2].innerText = '密码输入正确'; span[2].className = 'success'; return true; } //重复登录密码 function checkRePassWord(e) { if (rePassWord.value.length == 0) { span[3].innerText = '重复密码不能为空'; span[3].className = 'danger'; return false; } if (rePassWord.value != passWord.value) { span[3].innerText = '两次输入的密码不一致,请重新输入'; span[3].className = 'danger'; return false; } span[3].innerText = '两次密码一致'; span[3].className = 'success'; return true; } //年龄(1-3位) function checkAge(e) { if (age.value.length == 0) { span[4].innerText = '年龄不能为空'; span[4].className = 'danger'; return false; } var pattern = /^[1-9]{1,3}$/; if (!pattern.test(age.value)) { span[4].innerText = '年龄格式错误,请重新输入'; span[4].className = 'danger'; return false; } span[4].innerText = '年龄输入正确'; span[4].className = 'success'; return true; } //成绩 function checkScore(e) { if (score.value.length == 0) { span[5].innerText = '成绩不能为空'; span[5].className = 'danger'; return false; } /* var pattern = /^[0-9]+\.?[0-9]*$/; */ var pattern = /^[0-9]+\.?[0-9]*$/; if (!pattern.test(score.value)) { span[5].innerText = '成绩格式错误,请重新输入'; span[5].className = 'danger'; return false; } span[5].innerText = '成绩输入正确'; span[5].className = 'success'; return true; } //入职时间(格式xxxx-xx-xx) function checkEnterDate(e) { if (enterDate.value.length == 0) { span[6].innerText = '入职时间不能为空'; span[6].className = 'danger'; return false; } var pattern = /^[0-9]{4}\-?[0-9]{1,2}\-?[0-9]{1,2}$/; if (!pattern.test(enterDate.value)) { span[6].innerText = '时间格式:xxxx-xx-xx'; span[6].className = 'danger'; return false; } span[6].innerText = '时间格式正确'; span[6].className = 'success'; return true; } } </script> </body> </html> AI写代码 html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 addCourse.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加学生</title> <link rel="stylesheet" type="text/css" href="<c:url value='/css/add.css'/>"> <script type="text/javascript" src="${pageContext.request.contextPath }/My97DatePicker/WdatePicker.js"></script> </head> <body> <div class="nav"> <% if(request.getAttribute("error") != null){ %> <div><img src="${pageContext.request.contextPath }/images/add_course_error.jpg"></div> <% } else{ %> <div><img src="${pageContext.request.contextPath }/images/register_course.jpg"></div> <% } %> <div class="nav1"> <form action="${pageContext.request.contextPath }/addCourse.do" method="post"> <p> <label for="name">课程名称:</label> <input type="text" id="name" name="name" value=""> </p> <p> <label for="name">学分:</label> <input type="text" id="credit" name="credit" value=""> </p> <p> <label for="periodStart">开课日期:</label> <input type="text" id="periodStart" name="periodStart" value="" onfocus="WdatePicker({highLineWeekDay:true,isShowToday:true,isShowWeek:true})"> </p> <p> <label for="periodEnd">结课日期:</label> <input type="text" id="periodEnd" name="periodEnd" value="" onfocus="WdatePicker({highLineWeekDay:true,isShowToday:true,isShowWeek:true})"> </p> <div align="center"> <input type="submit" value="保存" /> </div> <div align="center"> ${error } </div> </form> </div> </div> </body> </html> AI写代码 html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 addStudent.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加学生</title> <link rel="stylesheet" type="text/css" href="<c:url value='/css/add.css'/>"> <script language="javascript" type="text/javascript" src="${pageContext.request.contextPath }/scripts/student.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/My97DatePicker/WdatePicker.js"></script> </head> <body> <div class="nav"> <% if(request.getAttribute("error") != null){ %> <div><img src="${pageContext.request.contextPath }/images/add_admin_error.jpg"></div> <% } else{ %> <div><img src="${pageContext.request.contextPath }/images/register_student.jpg"></div> <% } %> <div class="nav1"> <form action="${pageContext.request.contextPath }/addStudent.do" method="post"> <p> <label for="name">学生姓名:</label> <input type="text" id="name" name="name" value=""><span>请输入学生姓名</span> </p> <p> <label for="password">密码:</label> <input type="text" id="password" name="password" value=""><span>密码为6-16位</span> </p> <p> <label for="classno">班级:</label> <select name="classno" id="classno"> <option>--请选择班级--</option> <c:forEach items="${classList }" var="clazz"> <option>--${clazz.classno}班--</option> </c:forEach> </select> <span style="margin-left: 100px">请输入班级</span> </p> <p> <label>性别:</label> <input type="radio" name="sex" value="男" checked="checked" >男 <input type="radio" name="sex" value="女">女 </p> <p> <label for="tel">关联手机号:</label> <input type="text" id="tel" name="tel" value=""><span>请输入手机号</span> </p> <p> <label for="birthday">出生年月日:</label> <input type="text" id="birthday" name="birthday" value="" onfocus="WdatePicker({highLineWeekDay:true,isShowToday:true,isShowWeek:true})"><span>请输入出生年月日</span> </p> <p> <label for="remark">评论:</label> <select name="remark" id="remark"> <option>--请选择--</option> <option>优秀</option> <option>良好</option> <option>合格</option> <option>差劲</option> </select> <span style="margin-left: 100px">请对该学生进行评论</span> </p> <button class="sub"> <img src="${pageContext.request.contextPath }/images/submit.jpg"> </button> <div align="center"> ${error } </div> </form> </div> </div> </body> </html> AI写代码 html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 addTeacher.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head lang="en"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>添加教师</title> <link rel="stylesheet" type="text/css" href="<c:url value='/css/add.css'/>"> <script language="javascript" type="text/javascript" src="${pageContext.request.contextPath }/scripts/teacher.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/My97DatePicker/WdatePicker.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/kindeditor/kindeditor-all.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath }/kindeditor/lang/zh_CN.js"></script> <script> KindEditor.ready(function(K) { filterMode: false,//是否开启过滤模式 window.editor = K.create('#remark-id'); }); </script> </head> <body> <div class="nav"> <% if (request.getAttribute("error") != null) { %> <div><img src="${pageContext.request.contextPath }/images/add_teacher_error.jpg"></div> <% } else { %> <div><img src="${pageContext.request.contextPath }/images/register_teacher.jpg"></div> <% } %> <div class="nav1"> <form action="${pageContext.request.contextPath }/addTeacher.do" method="post"> <p> <label for="name">教师姓名:</label> <input type="text" id="name" name="name" value=""><span>请输入教师姓名</span> </p> <p> <label for="password">教师密码:</label> <input type="text" id="password" name="password" value=""><span>密码为6-16位</span> </p> <p> <label for="tel">联系方式:</label> <input type="text" id="tel" name="tel" value=""><span>请输入手机号</span> </p> <p> <label for="hiredate">入职时间:</label> <input type="text" id="hiredate" name="hiredate" value="" onfocus="WdatePicker({highLineWeekDay:true,isShowToday:true,isShowWeek:true})"><span>请输入入职时间</span> </p> <p> <label for="remark">评论:</label> <textarea class="no" name="remark" id="remark-id" style="width: 700px; height: 200px; visibility: hidden; display: block;"> </textarea> </p> <button class="sub"> <img src="${pageContext.request.contextPath }/images/submit.jpg"> </button> <div align="center">${error }</div> </form> </div> </div> </body> </html> AI写代码 html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 四、其他 ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.youkuaiyun.com/helongqiang/article/details/118162212进行一个总结
07-21
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值