This commit is contained in:
awin-x 2024-12-03 01:13:21 +08:00
parent 48129856f3
commit f33c16a3fa
200 changed files with 4510 additions and 0 deletions

3
.gitignore vendored
View File

@ -103,3 +103,6 @@ fabric.properties
# Android studio 3.1+ serialized cache file # Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser .idea/caches/build_file_checksums.ser
/out/
/实验指导资料/
/打包上传/

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,16 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="homework02:war exploded">
<output-path>$PROJECT_DIR$/out/artifacts/homework02_war_exploded</output-path>
<root id="root">
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="homework02" />
</element>
<element id="directory" name="lib">
<element id="file-copy" path="$PROJECT_DIR$/lib/mysql-connector.jar" />
</element>
</element>
<element id="javaee-facet-resources" facet="homework02/web/Web" />
</root>
</artifact>
</component>

View File

@ -0,0 +1,20 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="learn1:war exploded">
<output-path>$PROJECT_DIR$/out/artifacts/learn1_war_exploded</output-path>
<root id="root">
<element id="javaee-facet-resources" facet="learn1/web/Web" />
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="learn1" />
</element>
<element id="directory" name="lib">
<element id="file-copy" path="$PROJECT_DIR$/lib/sqlite-jdbc-3.47.0.0.jar" />
<element id="library" level="project" name="mysql-connector" />
<element id="library" level="project" name="commons-dbcp2-2.9.0" />
<element id="library" level="project" name="commons-logging-1.3.4" />
<element id="library" level="project" name="commons-pool2-2.9.0" />
</element>
</element>
</root>
</artifact>
</component>

View File

@ -0,0 +1,13 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="test02:war exploded">
<output-path>$PROJECT_DIR$/out/artifacts/test02_war_exploded</output-path>
<root id="root">
<element id="javaee-facet-resources" facet="test02/web/Web" />
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="test02" />
</element>
</element>
</root>
</artifact>
</component>

View File

@ -0,0 +1,17 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="test03:war exploded">
<output-path>$PROJECT_DIR$/out/artifacts/test03_war_exploded</output-path>
<root id="root">
<element id="javaee-facet-resources" facet="test03/web/Web" />
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="test03" />
</element>
<element id="directory" name="lib">
<element id="library" level="project" name="mysql-connector" />
<element id="library" level="project" name="sqlite-jdbc-3.47.0.0" />
</element>
</element>
</root>
</artifact>
</component>

View File

@ -0,0 +1,20 @@
<component name="ArtifactManager">
<artifact type="exploded-war" name="test04:war exploded">
<output-path>$PROJECT_DIR$/out/artifacts/test04_war_exploded</output-path>
<root id="root">
<element id="javaee-facet-resources" facet="test04/web/Web" />
<element id="directory" name="WEB-INF">
<element id="directory" name="classes">
<element id="module-output" name="test04" />
</element>
<element id="directory" name="lib">
<element id="library" level="project" name="sqlite-jdbc-3.47.0.0" />
<element id="file-copy" path="$PROJECT_DIR$/lib/sqlite-jdbc-3.47.0.0.jar" />
<element id="file-copy" path="$PROJECT_DIR$/lib/commons-dbcp2-2.9.0.jar" />
<element id="file-copy" path="$PROJECT_DIR$/lib/commons-logging-1.3.4.jar" />
<element id="file-copy" path="$PROJECT_DIR$/lib/commons-pool2-2.9.0.jar" />
</element>
</element>
</root>
</artifact>
</component>

8
.idea/compiler.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
</annotationProcessing>
</component>
</project>

28
.idea/dataSources.xml Normal file
View File

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="317" uuid="804ccf64-bacb-42eb-b09d-b140ef8554f8">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<remarks>317</remarks>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://10.19.38.253:3306</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="db_student.db" uuid="13372887-38a4-4cb1-88a7-cb74208ae924">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/../../database/学习/java测试数据库/db_student.db</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

8
.idea/encodings.xml Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" defaultCharsetForPropertiesFiles="GBK">
<file url="file://$PROJECT_DIR$/learn1/web/js/course-edit.js" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/learn1/web/js/index.js" charset="UTF-8" />
<file url="PROJECT" charset="GBK" />
</component>
</project>

View File

@ -0,0 +1,9 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AutoCloseableResource" enabled="true" level="WARNING" enabled_by_default="true">
<option name="METHOD_MATCHER_CONFIG" value="java.util.Formatter,format,java.io.Writer,append,com.google.common.base.Preconditions,checkNotNull,org.hibernate.Session,close,java.io.PrintWriter,printf,java.io.PrintStream,printf,java.sql.Connection,prepareStatement,java.lang.ClassLoader,getResourceAsStream,org.apache.commons.dbcp2.BasicDataSourceFactory,createDataSource" />
</inspection_tool>
<inspection_tool class="ThrowablePrintStackTrace" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="commons-dbcp2-2.9.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/commons-dbcp2-2.9.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="commons-logging-1.3.4">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/commons-logging-1.3.4.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="commons-pool2-2.9.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/commons-pool2-2.9.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="lombok">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/lombok.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="mysql-connector">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/mysql-connector.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="sqlite-jdbc-3.47.0.0">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/sqlite-jdbc-3.47.0.0.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

6
.idea/misc.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

13
.idea/modules.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/homework02/homework02.iml" filepath="$PROJECT_DIR$/homework02/homework02.iml" />
<module fileurl="file://$PROJECT_DIR$/learn1/learn1.iml" filepath="$PROJECT_DIR$/learn1/learn1.iml" />
<module fileurl="file://$PROJECT_DIR$/test02/test02.iml" filepath="$PROJECT_DIR$/test02/test02.iml" />
<module fileurl="file://$PROJECT_DIR$/test03/test03.iml" filepath="$PROJECT_DIR$/test03/test03.iml" />
<module fileurl="file://$PROJECT_DIR$/test04/test04.iml" filepath="$PROJECT_DIR$/test04/test04.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/web实验.iml" filepath="$PROJECT_DIR$/.idea/web实验.iml" />
</modules>
</component>
</project>

7
.idea/sqldialects.xml Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/test03/src/login/UserDB.java" dialect="GenericSQL" />
<file url="PROJECT" dialect="MySQL" />
</component>
</project>

124
.idea/uiDesigner.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

6
.idea/vcs.xml Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

11
.idea/webContexts.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebContextManager">
<option name="state">
<map>
<entry key="file://$PROJECT_DIR$/homework2/web/index.jsp" value="file://$PROJECT_DIR$/homework2/web" />
<entry key="file://$PROJECT_DIR$/test04/web/course/course.jsp" value="file://$PROJECT_DIR$/test04/web/course" />
</map>
</option>
</component>
</project>

16
.idea/web实验.iml Normal file
View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/lib" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/实验指导资料" />
<excludeFolder url="file://$MODULE_DIR$/打包上传" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Tomcat 10.1.31" level="application_server_libraries" />
<orderEntry type="library" name="mysql-connector" level="project" />
<orderEntry type="library" name="sqlite-jdbc-3.47.0.0" level="project" />
</component>
</module>

26
homework02/homework02.iml Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$/web" relative="/" />
</webroots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="commons-dbcp2-2.9.0" level="project" />
<orderEntry type="library" name="commons-logging-1.3.4" level="project" />
<orderEntry type="library" name="commons-pool2-2.9.0" level="project" />
</component>
</module>

View File

@ -0,0 +1,39 @@
package login;
public class User {
private int id;
private String name;
private String password;
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
@Override
public String toString() {
return "id:" + id +
", name=" + name +
", password=" + password;
}
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;
}
}

View File

@ -0,0 +1,36 @@
package login;
import java.sql.*;
import java.util.*;
public class UserDB {
private final static String DB_URL = "jdbc:mysql://10.19.38.253:3306/db_student";
private final static String DB_USER = "admin";
private final static String DB_PASSWORD = "1227496003131313xY";
public List<User> getAllUsers() throws ClassNotFoundException {
Class.forName("com.mysql.cj.jdbc.Driver");
List<User> userList = new ArrayList<>();
try (Connection connection = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT N_USER_ID, VC_LOGIN_NAME, VC_PASSWORD FROM t_user WHERE VC_LOGIN_NAME != 'admin';")) {
while (resultSet.next()) {
int id = resultSet.getInt("N_USER_ID");
String name = resultSet.getString("VC_LOGIN_NAME");
String password = resultSet.getString("VC_PASSWORD");
User user = new User(id, name, password);
userList.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}
public void ShowCommonUsers() throws ClassNotFoundException {
List<User> userList = getAllUsers();
for (User user : userList) {
System.out.println(user);
}
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
</web-app>

18
homework02/web/index.jsp Normal file
View File

@ -0,0 +1,18 @@
<%@ page import="login.UserDB" %><%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/17
Time: 下午9:26
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JDBC应用</title>
</head>
<body>
<% UserDB dbBean = new UserDB();
dbBean.ShowCommonUsers();
%>
</body>
</html>

30
learn1/learn1.iml Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/web/WEB-INF/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$/web" relative="/" />
</webroots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="lombok" level="project" />
<orderEntry type="library" name="mysql-connector" level="project" />
<orderEntry type="library" name="sqlite-jdbc-3.47.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Tomcat 10.1.31" level="application_server_libraries" />
<orderEntry type="library" name="commons-dbcp2-2.9.0" level="project" />
<orderEntry type="library" name="commons-logging-1.3.4" level="project" />
<orderEntry type="library" name="commons-pool2-2.9.0" level="project" />
</component>
</module>

View File

@ -0,0 +1,78 @@
package common;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.*;
import java.sql.*;
import java.util.Properties;
/**
* 这是一个数据库工具类创建了一个数据库连接池
* 需要在database.properties中配置数据库连接属性
* @author Awin-x
*/
public class DBTool {
static DataSource ds;
static{
Properties prop = new Properties();
try {
InputStream database_info = DBTool.class.getClassLoader().getResourceAsStream("database.properties");
if (database_info != null) {
prop.load(new InputStreamReader(database_info, "GBK"));
prop.list(System.out);
}else{
throw new FileNotFoundException("database.properties file does not exist in the classpath");
}
} catch (IOException e) {
System.out.println("数据库配置加载失败!");
throw new RuntimeException(e);
}
try {
ds = BasicDataSourceFactory.createDataSource(prop);
} catch (Exception e) {
System.out.println("数据库连接池初始化失败");
throw new RuntimeException(e);
}
}
public static Connection getConnection(){
try{
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
public static PreparedStatement getPreparedStatement(String sql) throws SQLException{
//noinspection SqlSourceToSinkFlow
return ds.getConnection().prepareStatement(sql);
}
public static void close(Connection conn, PreparedStatement ps, ResultSet rs){
try{
if(rs != null){
rs.close();
}
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
} catch (SQLException e) {
System.out.println("关闭失败");
e.printStackTrace();
}
}
public static void close(PreparedStatement ps, ResultSet rs){
close(null, ps, rs);
}
public static void close(PreparedStatement ps){
close(null, ps, null);
}
}

View File

@ -0,0 +1,35 @@
package course;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import login.UserInfo;
import java.io.IOException;
@WebServlet("/CourseAddAction")
public class CourseAddAction extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String path = req.getContextPath();
if (req.getSession().getAttribute("user") == null){
resp.sendRedirect(path+"/login/login.jsp");
return;
}
CourseInfo course = new CourseInfo();
String name = req.getParameter("name");
int type = Integer.parseInt(req.getParameter("type"));
float credit = Float.parseFloat(req.getParameter("credit"));
int grade = Integer.parseInt(req.getParameter("grade"));
int major = Integer.parseInt(req.getParameter("major"));
String detail = req.getParameter("detail");
course.setName(name);
course.setType(type);
course.setCredit(credit);
course.setGrade(grade);
course.setMajor(major);
course.setDetail(detail);
CourseDB.insertCourse(course);
resp.sendRedirect(path+"/course/course.jsp");
}
}

View File

@ -0,0 +1,108 @@
package course;
import common.DBTool;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
* 这是课程表t_course的DAO类提供了增删改查和列出方法
* @author Awin-x
*/
public class CourseDB {
public static ArrayList<CourseInfo> getAllCourses(){
ArrayList<CourseInfo> courseList = new ArrayList<>();
try{
PreparedStatement ps = DBTool.getPreparedStatement("select * from t_course");
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id = rs.getInt("N_COURSE_ID");
String name = rs.getString("VC_COURSE_NAME");
int type = rs.getInt("N_TYPE");
float credits = rs.getFloat("F_CREDIT");
int grade = rs.getInt("N_GRADE");
int major = rs.getInt("N_MAJOR");
String detail = rs.getString("VC_DETAIL");
courseList.add(new CourseInfo(id, name, type, credits, grade, major, detail));
}
DBTool.close(ps, rs);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return courseList;
}
public static CourseInfo getCourseInfo(int id){
CourseInfo courseInfo = null;
try{
PreparedStatement ps = DBTool.getPreparedStatement("select * from t_course WHERE N_COURSE_ID = ?");
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();
while(rs.next()){
String name = rs.getString("VC_COURSE_NAME");
int type = rs.getInt("N_TYPE");
float credits = rs.getFloat("F_CREDIT");
int grade = rs.getInt("N_GRADE");
int major = rs.getInt("N_MAJOR");
String detail = rs.getString("VC_DETAIL");
courseInfo = new CourseInfo(id, name, type, credits, grade, major, detail);
}
DBTool.close(ps, rs);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return courseInfo;
}
public static int editCourse(CourseInfo course){
int flag;
try{
PreparedStatement ps = DBTool.getPreparedStatement("UPDATE t_course SET VC_COURSE_NAME = ?,"+
" N_TYPE = ?, F_CREDIT = ?, N_GRADE = ?, N_MAJOR = ?, VC_DETAIL = ? WHERE N_COURSE_ID = ?");
ps.setString(1, course.getName());
ps.setInt(2, course.getType());
ps.setFloat(3, course.getCredit());
ps.setInt(4, course.getGrade());
ps.setInt(5, course.getMajor());
ps.setString(6, course.getDetail());
ps.setInt(7, course.getId());
flag = ps.executeUpdate();
DBTool.close(ps);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return flag;
}
public static void insertCourse(CourseInfo course){
try{
String sql = "INSERT INTO t_course (VC_COURSE_NAME, N_TYPE, F_CREDIT, N_GRADE, N_MAJOR, VC_DETAIL) VALUES(?, ?, ?, ?, ?, ?)";
PreparedStatement ps = DBTool.getPreparedStatement(sql);
ps.setString(1, course.getName());
ps.setInt(2, course.getType());
ps.setFloat(3, course.getCredit());
ps.setInt(4, course.getGrade());
ps.setInt(5, course.getMajor());
ps.setString(6, course.getDetail());
ps.executeUpdate();
DBTool.close(ps);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public static void deleteCourse(int id){
try{
String sql = "DELETE FROM t_course WHERE N_COURSE_ID = ?";
PreparedStatement ps = DBTool.getPreparedStatement(sql);
ps.setInt(1, id);
ps.executeUpdate();
DBTool.close(ps);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,23 @@
package course;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/CourseDeleteAction")
public class CourseDeleteAction extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getContextPath();
if (req.getSession().getAttribute("user") == null){
resp.sendRedirect(path+"/login/login.jsp");
return;
}
int id = Integer.parseInt(req.getParameter("id"));
CourseDB.deleteCourse(id);
resp.sendRedirect(path+"/course/course.jsp");
}
}

View File

@ -0,0 +1,40 @@
package course;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/CourseEditAction")
public class CourseEditAction extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getContextPath();
if (req.getSession().getAttribute("user") == null){
resp.setStatus(403);
return;
}
int id = Integer.parseInt(req.getParameter("id"));
CourseInfo course = CourseDB.getCourseInfo(id);
String name = req.getParameter("name");
int type = Integer.parseInt(req.getParameter("type"));
float credit = Float.parseFloat(req.getParameter("credit"));
int grade = Integer.parseInt(req.getParameter("grade"));
int major = Integer.parseInt(req.getParameter("major"));
String detail = req.getParameter("detail");
course.setName(name);
course.setType(type);
course.setCredit(credit);
course.setGrade(grade);
course.setMajor(major);
course.setDetail(detail);
if (CourseDB.editCourse(course)>=1){
resp.sendRedirect(path+"/course/course.jsp");
}else {
resp.sendRedirect(req.getContextPath()+"/course/course.jsp?flag='update-failed'");
}
}
}

View File

@ -0,0 +1,31 @@
package course;
import lombok.*;
@Getter
@Setter
@AllArgsConstructor
@ToString
@NoArgsConstructor
public class CourseInfo {
private int id;
private String name;
private int type;
private float credit;
private int grade;
private int major;
private String detail;
public String toJSON(){
String json="{";
json += "\"id\":"+id+",";
json += "\"name\":\""+name+"\",";
json += "\"type\":"+type+",";
json += "\"credit\":"+credit+",";
json += "\"grade\":"+grade+",";
json += "\"major\":"+major+",";
json += "\"detail\":\""+detail+"\"";
json += "}";
return json;
}
}

View File

@ -0,0 +1,31 @@
package course;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
@WebServlet("/CourseListAction")
public class CourseListAction extends HttpServlet {
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String path = req.getContextPath();
if (req.getSession().getAttribute("user") == null){
resp.setStatus(403);
return;
}
ArrayList<CourseInfo> course_list = CourseDB.getAllCourses();
StringBuilder json= new StringBuilder("[");
for (CourseInfo course : course_list) {
json.append(course.toJSON()).append(",");
}
resp.setContentType("application/json;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.print(json.substring(0, json.length()-1));
out.print("]");
}
}

View File

@ -0,0 +1,41 @@
#--------------------------------------------------------------------------------------------------
#DriverClassName=com.mysql.cj.jdbc.Driver
#url=jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true
#username=admin
#password=1227496003131313xY
#--------------------------------------------------------------------------------------------------
driverClassName=org.sqlite.JDBC
url=jdbc:sqlite:F:\\Work_Area\\desk\\database\\ѧϰ\\java²âÊÔÊý¾Ý¿â\\db_student.db
#--------------------------------------------------------------------------------------------------
defaultAutoCommit=true
defaultReadOnly=false
initialSize=10
maxActive=20
maxIdle=20
minIdle=5
maxWait=10000
testOnBorrow=true
testOnReturn=false
validationQuery=select 1
validationQueryTimeout=1
testWhileIdle=false
timeBetweenEvictionRunsMillis=1
numTestsPerEvictionRun=3
poolPreparedStatements=true
maxOpenPreparedStatements=3

View File

@ -0,0 +1,52 @@
package login;
import common.DBTool;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDB {
public static UserInfo GetUserInfo(int id) {
UserInfo u = new UserInfo();
ResultSet rs = null;
try{
String sql = "select * from t_user where N_USER_ID = ?";
PreparedStatement ps = DBTool.getPreparedStatement(sql);
ps.setInt(1, id);
rs = ps.executeQuery();
if(rs.next()) {
u.setId(rs.getInt("N_USER_ID"));
u.setName(rs.getString("VC_LOGIN_NAME"));
u.setPass(rs.getString("VC_PASSWORD"));
}else{
u = null;
}
DBTool.close(ps, rs);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return u;
}
public static UserInfo GetUserInfoByName(String username) {
UserInfo u = new UserInfo();
ResultSet rs = null;
try{
String sql = "select * from t_user where VC_LOGIN_NAME = ?";
PreparedStatement ps = DBTool.getPreparedStatement(sql);
ps.setString(1, username);
rs = ps.executeQuery();
if(rs.next()) {
u.setId(rs.getInt("N_USER_ID"));
u.setName(rs.getString("VC_LOGIN_NAME"));
u.setPass(rs.getString("VC_PASSWORD"));
}else{
u = null;
}
DBTool.close(ps, rs);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return u;
}
}

View File

@ -0,0 +1,16 @@
package login;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
public class UserInfo {
private int id;
private String name;
private String pass;
}

View File

@ -0,0 +1,36 @@
package login;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/UserLoginAction")
public class UserLoginAction extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
String path = req.getContextPath();
if (req.getSession().getAttribute("user") != null){
response.sendRedirect(path+"/home.jsp");
}
String username = req.getParameter("username");
String password = req.getParameter("password");
int flag;
UserInfo user = UserDB.GetUserInfoByName(username);
if(user == null) {
flag = 1;
}else if (user.getPass().equals(password)) {
flag=0;
req.getSession().setAttribute("user", user);
}else{
flag=2;
}
System.out.println(user);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.sendRedirect("error.jsp");
}
}

View File

@ -0,0 +1,22 @@
package login;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/UserLogoutAction")
public class UserLogoutAction extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
UserInfo user = (UserInfo)request.getSession().getAttribute("user");
if(user != null) {
request.getSession().removeAttribute("user");
}
String path = request.getContextPath();
response.sendRedirect(path+"/login/login.jsp");
}
}

View File

@ -0,0 +1,29 @@
package test;
import common.DBTool;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBTest {
public static void main(String[] args) {
String testSql = "select * from t_user";
try {
Class.forName("common.DBTool");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
try {
PreparedStatement ps = DBTool.getPreparedStatement(testSql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
</web-app>

View File

@ -0,0 +1,28 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/21
Time: 下午5:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>课程信息列表</title>
<link rel="stylesheet" href="../css/course.css">
</head>
<body>
<div class="container">
<table id="course-list">
</table>
<div class="course-editor"></div>
</div>
</body>
<script>
let path = "${pageContext.request.contextPath}";
</script>
<script src="${pageContext.request.contextPath}/js/jquery-3.7.1.min.js"></script>
<script src="${pageContext.request.contextPath}/js/course-edit.js"></script>
</html>

View File

@ -0,0 +1,87 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="container">
<form class="course-edit">
<input type="hidden" name="id" id="id-input" value="-1">
<table class="input-form">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span>代表必填</td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="name" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">性质</label></td>
<td>
<select name="type" id="type-input">
<option value="1">公共基础必修课</option>
<option value="2">公共选修课</option>
<option value="3">学科基础课</option>
<option value="4">专业必修课</option>
<option value="5">专业选修课</option>
<option value="6">集中性实践教学环节</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="credit-input">学分</label></td>
<td>
<input name="credit" type="number" id="credit-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="grade-input">年份</label></td>
<td>
<input name="grade" type="text" id="grade-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="major" value="1" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="major" value="2" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
<input name="major" value="3" type="radio" id="major-input-3">
<label for="major-input-3">大数据</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="detail-input">备注</label></td>
<td>
<textarea rows="5" name="detail" id="detail-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
<button onclick="closeEdit()">关闭编辑</button>
</td>
</tr>
</tfoot>
</table>
</form>
</div>

82
learn1/web/course/tmp Normal file
View File

@ -0,0 +1,82 @@
<form action="" method="post" class="course-edit">
<table class="input-form ">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span></td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="name" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">性质</label></td>
<td>
<select name="type" id="type-input">
<option value="1">公共基础必修课</option>
<option value="2">公共选修课</option>
<option value="3">学科基础课</option>
<option value="4">专业必修课</option>
<option value="5">专业选修课</option>
<option value="6">集中性实践教学环节</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="score-input">学分</label></td>
<td>
<input name="credit" type="number" id="score-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="year-input">年份</label></td>
<td>
<input name="grade" type="text" id="year-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="major" value="1" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="major" value="2" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
<input name="major" value="3" type="radio" id="major-input-3">
<label for="major-input-3">大数据</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="note-input">备注</label></td>
<td>
<textarea rows="5" name="detail" id="note-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
</td>
</tr>
</tfoot>
</table>
</form>

62
learn1/web/css/course.css Normal file
View File

@ -0,0 +1,62 @@
tr:nth-child(odd){
background:#F4F4F4;
}
.tr-head{
background-color: #2bf;
text-align: center;
}
table{
width:100%;
border-spacing: 0;
}
.td1 {
BACKGROUND-COLOR: #e6e6e6
}
.td_header {
BACKGROUND-COLOR: #e6e6e6; COLOR: #000000
}
.td_1 {
BACKGROUND-COLOR: #f8fbfb; COLOR: #000000
}
.td_2 {
BACKGROUND-COLOR: #deecec; COLOR: #000000
}
.td3 {
BACKGROUND-COLOR: #a3d1d2; COLOR: black
}
.underline {
BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4
}
.button {
border:1px solid black;
background-color:white;
cursor:hand;
}
.star {
COLOR: red
}
.tb_showall
{
background:#0078B7;
font-size: 18px;
font-weight: bold;
}
.container{
margin: auto;
width: 80%;
text-align: center;
align-items: center;
position: relative;
}
.input-form{
border: black solid 1px;
margin: auto;
td{
border: black solid 1px;
}
}

20
learn1/web/css/index.css Normal file
View File

@ -0,0 +1,20 @@
.nav-list{
position: absolute;
top: 0;
left: 0;
background-color: #2bf;
height: 95%;
width: 20%;
margin: 0;
padding: 5px;
}
.content{
position: absolute;
top: 0;
right: 0;
background-color: #eee;
height: 95%;
width: 80%;
margin: 0;
padding: 5px;
}

25
learn1/web/home.jsp Normal file
View File

@ -0,0 +1,25 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/12/3
Time: 上午12:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<div class="container">
<h1>学生信息管理系统</h1>
<%
if(session.getAttribute("user")==null){
out.println("<a href=\""+request.getContextPath()+"/login/login.jsp\">登录</a>");
}else{
out.println("<a href=\""+request.getContextPath()+"/UserLogoutAction\">注销</a>");
}
%>
</div>
</body>
</html>

24
learn1/web/index.jsp Normal file
View File

@ -0,0 +1,24 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/28
Time: 下午1:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生信息管理系统</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/index.css">
</head>
<body>
<div class="nav-list">
<ul>
<li><a href="${pageContext.request.contextPath}/home.jsp" target="content">欢迎页</a></li>
<li><a href="${pageContext.request.contextPath}/course/course.jsp" target="content">课程列表</a></li>
</ul>
</div>
<iframe src="${pageContext.request.contextPath}/home.jsp" class="content" name="content" height="100%" width="100%"></iframe>
</body>
<script src="${pageContext.request.contextPath}/js/index.js"></script>
</html>

View File

@ -0,0 +1,122 @@
const types = ['', '公共基础必修课', '公共选修课', '学科基础课', '专业必修课', '专业选修课', '集中性实践教学环节']
const majors = ['', '软件工程', '空间信息', '大数据'];
let courses;
function getCourses(){
$.ajax({
url: path+"/CourseListAction",
method: "GET",
success: (data, status, xhr)=>{
const course_list = document.getElementById('course-list');
console.log(xhr.status);
course_list.innerHTML = "<tr class=\"tr-head\"><td class=\"tr-head\" colspan=\"6\">课程信息列表</td></tr> <tr> <td>名称</td> <td>性质</td> <td>学分</td> <td>开设年级</td> <td>开设专业</td> </tr>"
courses = data;
for (let i in data){
const course_tr = document.createElement('tr');
course_tr.innerHTML="<td>"+ data[i].name +"</td>" +
"<td>"+types[data[i].type]+"</td>" +
"<td>"+ data[i].credit +"</td>" +
"<td>"+ data[i].grade + "</td>" +
"<td>"+ majors[data[i].major]+"</td>" +
"<td><a href=\"#\" onclick=\"editCourse("+ i + ")\" " +
">编辑</a> <a href=\""+path+"/CourseDeleteAction?id=" +
data[i].id+"\">删除</a></td>";
course_list.appendChild(course_tr);
}
const end_tr = document.createElement('tr');
end_tr.innerHTML="<td><a href=\"#\" onclick=\"addCourse()\">添加</a></td><td></td><td></td><td></td><td>" +
"<a href=\"#\" onclick=\"getCourses()\">刷新数据列表</a></td><td></td>";
course_list.appendChild(end_tr);
},
error: ()=>{
window.location=path+"/login/login.jsp";
}
});
}
$(document).ready(getCourses);
function editCourse(i){
$(".course-editor").load(path+"/course/course_edit.jsp", (response,status,xhr)=>{
if (stauts === 403){
window.location = path+"/login/login.jsp";
}
const form = document.querySelector('.course-edit');
form.action = path+"/CourseEditAction";
form.method = "POST";
const idInput = document.getElementById('id-input');
idInput.value = courses[i].id;
const nameInput = document.getElementById('name-input');
nameInput.value = courses[i].name;
const typeInput = document.getElementById('type-input');
typeInput.value = courses[i].type;
const creditInput = document.getElementById('credit-input');
creditInput.value = courses[i].credit;
const yearInput = document.getElementById('grade-input');
yearInput.value = courses[i].grade;
const majorInputs = form.querySelectorAll('input[name="major"]');
majorInputs.forEach((input) => {
if (parseInt(input.value) === courses[i].major) {
input.checked = true;
}
});
const noteInput = form.querySelector('#detail-input');
noteInput.value = courses[i].detail;
form.addEventListener('submit', function (e) {
e.preventDefault();
const gradeInput = document.getElementById('grade-input');
if (!/^20\d{2}$/.test(gradeInput.value)) {
alert('请输入合法的四位年份');
return;
}
const nameInput = document.getElementById('name-input');
console.log(nameInput.value.length)
console.log(nameInput.value)
if (nameInput.value.length < 5 || nameInput.value.length > 20){
alert('请输入5~20位字符');
return;
}
const detailInput = document.getElementById('detail-input');
if (detailInput.value.length > 200){
alert('备注超长');
return;
}
$(".course-edit").submit();
});
});
}
function addCourse(){
$(".course-editor").load(path+"/course/course_edit.jsp", ()=>{
const form = document.querySelector('.course-edit');
form.action = path+"/CourseAddAction";
form.addEventListener('submit', function (e) {
e.preventDefault();
const gradeInput = document.getElementById('grade-input');
if (!/^20\d{2}$/.test(gradeInput.value)) {
alert('请输入合法的四位年份');
return;
}
const nameInput = document.getElementById('name-input');
console.log(nameInput.value.length)
console.log(nameInput.value)
if (nameInput.value.length < 5 || nameInput.value.length > 20){
alert('请输入5~20位字符');
return;
}
const detailInput = document.getElementById('detail-input');
if (detailInput.value.length > 200){
alert('备注超长');
return;
}
$(".course-edit").submit();
});
});
}
function closeEdit(){
const editor = document.querySelector('.course-editor');
editor.innerHTML = "";
}

0
learn1/web/js/index.js Normal file
View File

2
learn1/web/js/jquery-3.7.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,39 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/12/1
Time: 下午11:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<div class="login-card">
<h1>登录</h1>
<form action="${pageContext.request.contextPath}/UserLoginAction" method="POST">
<label for="username-input">用户名</label>
<input type="text" name="username" id="username-input">
<label for="password-input">密码</label>
<input type="password" name="password" id="password-input">
<input type="submit" value="登录">
</form>
</div>
</body>
<script>
<%
String loginFlag=request.getParameter("loginflag");
String username=request.getParameter("username");
if(loginFlag==null){ //无登录失败标识,是正常访问登录页面
loginFlag="";
}
if(loginFlag.equals("1")){
out.println("alert('用户【"+username+"】不存在!')");
}else if(loginFlag.equals("2")){
out.println("alert('密码错误!')");
}
%>
</script>
</html>

BIN
lib/commons-dbcp2-2.9.0.jar Normal file

Binary file not shown.

Binary file not shown.

BIN
lib/commons-pool2-2.9.0.jar Normal file

Binary file not shown.

BIN
lib/lombok.jar Normal file

Binary file not shown.

BIN
lib/mysql-connector.jar Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
</web-app>

View File

@ -0,0 +1,18 @@
<%@ page import="login.UserDB" %><%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/17
Time: 下午9:26
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JDBC应用</title>
</head>
<body>
<% UserDB dbBean = new UserDB();
dbBean.ShowCommonUsers();
%>
</body>
</html>

View File

@ -0,0 +1,41 @@
#--------------------------------------------------------------------------------------------------
#DriverClassName=com.mysql.cj.jdbc.Driver
#url=jdbc:mysql://10.19.38.253:3306/chat?useUnicode=true&characterEncoding=utf-8&useSSL=true
#username=admin
#password=1227496003131313xY
#--------------------------------------------------------------------------------------------------
driverClassName=org.sqlite.JDBC
url=jdbc:sqlite:F:\\Work_Area\\desk\\database\\ѧϰ\\java²âÊÔÊý¾Ý¿â\\db_student.db
#--------------------------------------------------------------------------------------------------
defaultAutoCommit=true
defaultReadOnly=false
initialSize=10
maxActive=20
maxIdle=20
minIdle=5
maxWait=10000
testOnBorrow=true
testOnReturn=false
validationQuery=select 1
validationQueryTimeout=1
testWhileIdle=false
timeBetweenEvictionRunsMillis=1
numTestsPerEvictionRun=3
poolPreparedStatements=true
maxOpenPreparedStatements=3

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
</web-app>

View File

@ -0,0 +1,28 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/21
Time: 下午5:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>课程信息列表</title>
<link rel="stylesheet" href="../css/course.css">
</head>
<body>
<div class="container">
<table id="course-list">
</table>
<div class="course-editor"></div>
</div>
</body>
<script>
let path = "${pageContext.request.contextPath}";
</script>
<script src="${pageContext.request.contextPath}/js/jquery-3.7.1.min.js"></script>
<script src="${pageContext.request.contextPath}/js/course-edit.js"></script>
</html>

View File

@ -0,0 +1,87 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<div class="container">
<form class="course-edit">
<input type="hidden" name="id" id="id-input" value="-1">
<table class="input-form">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span>代表必填</td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="name" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">性质</label></td>
<td>
<select name="type" id="type-input">
<option value="1">公共基础必修课</option>
<option value="2">公共选修课</option>
<option value="3">学科基础课</option>
<option value="4">专业必修课</option>
<option value="5">专业选修课</option>
<option value="6">集中性实践教学环节</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="credit-input">学分</label></td>
<td>
<input name="credit" type="number" id="credit-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="grade-input">年份</label></td>
<td>
<input name="grade" type="text" id="grade-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="major" value="1" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="major" value="2" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
<input name="major" value="3" type="radio" id="major-input-3">
<label for="major-input-3">大数据</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="detail-input">备注</label></td>
<td>
<textarea rows="5" name="detail" id="detail-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
<button onclick="closeEdit()">关闭编辑</button>
</td>
</tr>
</tfoot>
</table>
</form>
</div>

View File

@ -0,0 +1,82 @@
<form action="" method="post" class="course-edit">
<table class="input-form ">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span></td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="name" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">性质</label></td>
<td>
<select name="type" id="type-input">
<option value="1">公共基础必修课</option>
<option value="2">公共选修课</option>
<option value="3">学科基础课</option>
<option value="4">专业必修课</option>
<option value="5">专业选修课</option>
<option value="6">集中性实践教学环节</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="score-input">学分</label></td>
<td>
<input name="credit" type="number" id="score-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="year-input">年份</label></td>
<td>
<input name="grade" type="text" id="year-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="major" value="1" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="major" value="2" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
<input name="major" value="3" type="radio" id="major-input-3">
<label for="major-input-3">大数据</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="note-input">备注</label></td>
<td>
<textarea rows="5" name="detail" id="note-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
</td>
</tr>
</tfoot>
</table>
</form>

View File

@ -0,0 +1,62 @@
tr:nth-child(odd){
background:#F4F4F4;
}
.tr-head{
background-color: #2bf;
text-align: center;
}
table{
width:100%;
border-spacing: 0;
}
.td1 {
BACKGROUND-COLOR: #e6e6e6
}
.td_header {
BACKGROUND-COLOR: #e6e6e6; COLOR: #000000
}
.td_1 {
BACKGROUND-COLOR: #f8fbfb; COLOR: #000000
}
.td_2 {
BACKGROUND-COLOR: #deecec; COLOR: #000000
}
.td3 {
BACKGROUND-COLOR: #a3d1d2; COLOR: black
}
.underline {
BORDER-BOTTOM: #c4c4c4 1pt solid; BORDER-LEFT: #c4c4c4; BORDER-RIGHT: #c4c4c4; BORDER-TOP: #c4c4c4
}
.button {
border:1px solid black;
background-color:white;
cursor:hand;
}
.star {
COLOR: red
}
.tb_showall
{
background:#0078B7;
font-size: 18px;
font-weight: bold;
}
.container{
margin: auto;
width: 80%;
text-align: center;
align-items: center;
position: relative;
}
.input-form{
border: black solid 1px;
margin: auto;
td{
border: black solid 1px;
}
}

View File

@ -0,0 +1,20 @@
.nav-list{
position: absolute;
top: 0;
left: 0;
background-color: #2bf;
height: 95%;
width: 20%;
margin: 0;
padding: 5px;
}
.content{
position: absolute;
top: 0;
right: 0;
background-color: #eee;
height: 95%;
width: 80%;
margin: 0;
padding: 5px;
}

View File

@ -0,0 +1,25 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/12/3
Time: 上午12:17
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<div class="container">
<h1>学生信息管理系统</h1>
<%
if(session.getAttribute("user")==null){
out.println("<a href=\""+request.getContextPath()+"/login/login.jsp\">登录</a>");
}else{
out.println("<a href=\""+request.getContextPath()+"/UserLogoutAction\">注销</a>");
}
%>
</div>
</body>
</html>

View File

@ -0,0 +1,24 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/11/28
Time: 下午1:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>学生信息管理系统</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/index.css">
</head>
<body>
<div class="nav-list">
<ul>
<li><a href="${pageContext.request.contextPath}/course/course.jsp" target="content">课程列表</a></li>
<li><a href="${pageContext.request.contextPath}/home.jsp" target="content">欢迎页</a></li>
</ul>
</div>
<iframe src="${pageContext.request.contextPath}/home.jsp" class="content" name="content" height="100%" width="100%"></iframe>
</body>
<script src="${pageContext.request.contextPath}/js/index.js"></script>
</html>

View File

@ -0,0 +1,122 @@
const types = ['', '公共基础必修课', '公共选修课', '学科基础课', '专业必修课', '专业选修课', '集中性实践教学环节']
const majors = ['', '软件工程', '空间信息', '大数据'];
let courses;
function getCourses(){
$.ajax({
url: path+"/CourseListAction",
method: "GET",
success: (data, status, xhr)=>{
const course_list = document.getElementById('course-list');
console.log(xhr.status);
course_list.innerHTML = "<tr class=\"tr-head\"><td class=\"tr-head\" colspan=\"6\">课程信息列表</td></tr> <tr> <td>名称</td> <td>性质</td> <td>学分</td> <td>开设年级</td> <td>开设专业</td> </tr>"
courses = data;
for (let i in data){
const course_tr = document.createElement('tr');
course_tr.innerHTML="<td>"+ data[i].name +"</td>" +
"<td>"+types[data[i].type]+"</td>" +
"<td>"+ data[i].credit +"</td>" +
"<td>"+ data[i].grade + "</td>" +
"<td>"+ majors[data[i].major]+"</td>" +
"<td><a href=\"#\" onclick=\"editCourse("+ i + ")\" " +
">编辑</a> <a href=\""+path+"/CourseDeleteAction?id=" +
data[i].id+"\">删除</a></td>";
course_list.appendChild(course_tr);
}
const end_tr = document.createElement('tr');
end_tr.innerHTML="<td><a href=\"#\" onclick=\"addCourse()\">添加</a></td><td></td><td></td><td></td><td>" +
"<a href=\"#\" onclick=\"getCourses()\">刷新数据列表</a></td><td></td>";
course_list.appendChild(end_tr);
},
error: ()=>{
window.location=path+"/login/login.jsp";
}
});
}
$(document).ready(getCourses);
function editCourse(i){
$(".course-editor").load(path+"/course/course_edit.jsp", (response,status,xhr)=>{
if (stauts === 403){
window.location = path+"/login/login.jsp";
}
const form = document.querySelector('.course-edit');
form.action = path+"/CourseEditAction";
form.method = "POST";
const idInput = document.getElementById('id-input');
idInput.value = courses[i].id;
const nameInput = document.getElementById('name-input');
nameInput.value = courses[i].name;
const typeInput = document.getElementById('type-input');
typeInput.value = courses[i].type;
const creditInput = document.getElementById('credit-input');
creditInput.value = courses[i].credit;
const yearInput = document.getElementById('grade-input');
yearInput.value = courses[i].grade;
const majorInputs = form.querySelectorAll('input[name="major"]');
majorInputs.forEach((input) => {
if (parseInt(input.value) === courses[i].major) {
input.checked = true;
}
});
const noteInput = form.querySelector('#detail-input');
noteInput.value = courses[i].detail;
form.addEventListener('submit', function (e) {
e.preventDefault();
const gradeInput = document.getElementById('grade-input');
if (!/^20\d{2}$/.test(gradeInput.value)) {
alert('请输入合法的四位年份');
return;
}
const nameInput = document.getElementById('name-input');
console.log(nameInput.value.length)
console.log(nameInput.value)
if (nameInput.value.length < 5 || nameInput.value.length > 20){
alert('请输入5~20位字符');
return;
}
const detailInput = document.getElementById('detail-input');
if (detailInput.value.length > 200){
alert('备注超长');
return;
}
$(".course-edit").submit();
});
});
}
function addCourse(){
$(".course-editor").load(path+"/course/course_edit.jsp", ()=>{
const form = document.querySelector('.course-edit');
form.action = path+"/CourseAddAction";
form.addEventListener('submit', function (e) {
e.preventDefault();
const gradeInput = document.getElementById('grade-input');
if (!/^20\d{2}$/.test(gradeInput.value)) {
alert('请输入合法的四位年份');
return;
}
const nameInput = document.getElementById('name-input');
console.log(nameInput.value.length)
console.log(nameInput.value)
if (nameInput.value.length < 5 || nameInput.value.length > 20){
alert('请输入5~20位字符');
return;
}
const detailInput = document.getElementById('detail-input');
if (detailInput.value.length > 200){
alert('备注超长');
return;
}
$(".course-edit").submit();
});
});
}
function closeEdit(){
const editor = document.querySelector('.course-editor');
editor.innerHTML = "";
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,39 @@
<%--
Created by IntelliJ IDEA.
User: 25589
Date: 2024/12/1
Time: 下午11:58
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<div class="login-card">
<h1>登录</h1>
<form action="${pageContext.request.contextPath}/UserLoginAction" method="POST">
<label for="username-input">用户名</label>
<input type="text" name="username" id="username-input">
<label for="password-input">密码</label>
<input type="password" name="password" id="password-input">
<input type="submit" value="登录">
</form>
</div>
</body>
<script>
<%
String loginFlag=request.getParameter("loginflag");
String username=request.getParameter("username");
if(loginFlag==null){ //无登录失败标识,是正常访问登录页面
loginFlag="";
}
if(loginFlag.equals("1")){
out.println("alert('用户【"+username+"】不存在!')");
}else if(loginFlag.equals("2")){
out.println("alert('密码错误!')");
}
%>
</script>
</html>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
</web-app>

View File

@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="zn-ch">
<head>
<meta charset="UTF-8">
<title>课程信息录入</title>
<link rel="stylesheet" href="../css/course.css">
</head>
<body>
<div class="container">
<form action="" method="post" class="course">
<table class="input-form ">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span></td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="cname" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">性质</label></td>
<td>
<select name="ctype" id="type-input">
<option value="专业必修课">专业必修课</option>
<option value="专业选修课">专业选修课</option>
<option value="通识必修课">通识必修课</option>
<option value="通识选修课">通识选修课</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="score-input">学分</label></td>
<td>
<input name="cscore" type="number" id="score-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="year-input">年份</label></td>
<td>
<input name="cyear" type="text" id="year-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="cmajor" value="软件工程" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="cmajor" value="空间信息" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="note-input">备注</label></td>
<td>
<textarea rows="5" name="cnote" id="note-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
</td>
</tr>
</tfoot>
</table>
</form>
</div>
</body>
<script>
const form = document.querySelector('.course');
form.addEventListener('submit', function (e) {
const cyearInput = document.getElementById('year-input');
if (!/^20\d{2}$/.test(cyearInput.value)) {
e.preventDefault();
alert('请输入合法的四位年份');
return;
}
const cnameInput = document.getElementById('name-input');
console.log(cnameInput.value.length)
console.log(cnameInput.value)
if (cnameInput.value.length < 5 || cnameInput.value.length > 20){
e.preventDefault();
alert('请输入5~20位字符');
return
}
const cnoteInput = document.getElementById('note-input');
if (cnameInput.value.length > 200){
e.preventDefault();
alert('备注超长');
}
alert('正常提交');
});
</script>
</html>

View File

@ -0,0 +1,54 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>课程信息列表</title>
<link rel="stylesheet" href="../css/course.css">
</head>
<body>
<div class="container">
<table>
<tr class="tr-head"><td class="tr-head" colspan="6">课程信息列表</td></tr>
<tr >
<td>名称</td>
<td>性质</td>
<td>学分</td>
<td>开设年级</td>
<td>开设专业</td>
</tr>
<tr>
<td>java</td>
<td>专业课必修</td>
<td>3</td>
<td>2015</td>
<td>软件工程</td>
<td><a href="./course_edit.html">编辑</a> <a href="#">删除</a></td>
</tr>
<tr>
<td>java</td>
<td>专业课必修</td>
<td>3</td>
<td>2015</td>
<td>软件工程</td>
<td><a href="./course_edit.html">编辑</a> <a href="#">删除</a></td>
</tr>
<tr>
<td>java</td>
<td>专业课必修</td>
<td>3</td>
<td>2015</td>
<td>软件工程</td>
<td><a href="./course_edit.html">编辑</a> <a href="#">删除</a></td>
</tr>
<tr>
<td><a href="#">添加</a></td>
<td> </td>
<td> </td>
<td> </td>
<td><a href="#">刷新数据列表</a></td>
<td> </td>
</tr>
</table>
</div>
</body>
</html>

View File

@ -0,0 +1,115 @@
<!DOCTYPE html>
<html lang="zn-ch">
<head>
<meta charset="UTF-8">
<title>课程信息录入</title>
<link rel="stylesheet" href="../css/course.css">
</head>
<body>
<div class="container">
<form action="" method="post" class="course">
<table class="input-form ">
<thead>
<tr>
<td class="td_header" colspan="3">课程信息录入,<span class="star">*</span></td>
</tr>
</thead>
<tr>
<td><label for="name-input">名称</label></td>
<td>
<input name="cname" type="text" id="name-input">
</td>
<td>
<span class="star">*</span>5~20位字符
</td>
</tr>
<tr>
<td><label for="type-input">名称</label></td>
<td>
<select name="ctype" id="type-input">
<option value="专业必修课">专业必修课</option>
<option value="专业选修课">专业选修课</option>
<option value="通识必修课">通识必修课</option>
<option value="通识选修课">通识选修课</option>
</select>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="score-input">学分</label></td>
<td>
<input name="cscore" type="number" id="score-input">
</td>
<td>
<span class="star">*</span>数值
</td>
</tr>
<tr>
<td><label for="year-input">年份</label></td>
<td>
<input name="cyear" type="text" id="year-input">
</td>
<td>
<span class="star">*</span>4位数年份
</td>
</tr>
<tr>
<td>开设专业</td>
<td>
<input name="cmajor" value="软件工程" type="radio" id="major-input-1">
<label for="major-input-1">软件工程</label>
<input name="cmajor" value="空间信息" type="radio" id="major-input-2">
<label for="major-input-2">空间信息</label>
</td>
<td>
<span class="star">*</span>
</td>
</tr>
<tr>
<td><label for="note-input">备注</label></td>
<td>
<textarea rows="5" name="cnote" id="note-input"></textarea>
</td>
<td>
200个字符以内
</td>
</tr>
<tfoot>
<tr>
<td colspan="3">
<input type="submit">
</td>
</tr>
</tfoot>
</table>
</form>
</div>
</body>
<script>
const form = document.querySelector('.course');
form.addEventListener('submit', function (e) {
const cyearInput = document.getElementById('year-input');
if (!/^\d{4}$/.test(cyearInput.value)) {
e.preventDefault();
alert('请输入合法的四位年份');
return;
}
const cnameInput = document.getElementById('type-input');
if (!(cnameInput.value.length > 5 && cnameInput.value < 20)){
e.preventDefault();
alert('请输入5~20位字符');
return
}
const cnoteInput = document.getElementById('note-input');
if (cnameInput.value.length > 200){
e.preventDefault();
alert('请输入5~20位字符');
}
});
</script>
</html>

Some files were not shown because too many files have changed in this diff Show More