基于Java+SQL Server2000实现(界面)学生选课管理系统【100010025】

news2024/12/26 22:38:43

学生选课管理系统

二、需求描述

本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所选课程总数不能超过3门;对教师提供的服务有登录、修改登录密码和登录成绩;对管理员提供的服务有登录开设学生和教师帐号、删除学生和教师帐号的服务。

三、系统总体设计

1.系统架构设计

(1)架构:单机

(2)运行软件环境: windows XP SP3 、jdk1.6

(3)开发环境:

硬件平台:

CPU:P41.8GHz

内存:256MB以上

软件平台:windows XP SP3 、jdk1.6

操作系统:WindowsXP

数据库:SQL Server 2000、SQLServer SP4补丁

开发工具:Eclipse 3.3

分辨率:1024*768

2.功能模块设计

在这里插入图片描述

各模块功能:

  • 登录界面:登录界面是有帐号,密码两个JTextField,管理员帐号一字母A开头,教师帐号一字母T开头,学生帐号以字母S开头,登录帐号或密码输入错误会弹出相应的提示对话框。
  • 学生信息管理模块:管理员用于添加和删除学生信息的模块。
  • 教师信息管理模块:管理员用于添加和删除教师信息的模块。
  • 教师密码修改模块和学生密码修改模块:管理员添加的用户帐号的初始密码与用户的帐号相同,用户通过密码修改模块可以自己需改密码。
  • 教师录入成绩模块:教师可以浏览选修自己课程的学生的信息并且录入该学生的成绩。
  • 学生选择选修课模块:该模块通过表格的形式将所有课程列出来,学生可以根据个人兴趣选择不同的课程,每个学生选择的课程数目不能超过3门,而且不能重复选课,否则会弹出对话框,提示用户查看已经选择了的课程。
  • 学生查询成绩模块:通过表格的形式将该学生选择了的课程列出来,如果教师有录入成绩,则可以看到自己的课程成绩。

3.数据库设计 (概要设计…)

(1)E-R图

在这里插入图片描述

(2)关系模式

学生(学生学号,学生姓名,教师性别,教师生日,所在班级)

教师(教师编号,教师姓名,教师性别,教师生日,教师职称,所在院系)

课程(课程号,课程名,学分,选课人数)

选课(课程号,学生学号,成绩)

授课(课程号,教师编号,上课地点)

(3)数据库管理系统:Microsoft SQL Server 2000

(4)数据库命名

StudentManager

(5)数据库表

Logon(登录帐号密码)

主要用来保存用户登录信息

字段名数据类型长度是否为空是否主键
UserIDchar10不为空主键
Passwordrcharr10

StudentTable1(学生信息表)

主要用来保存学生信息。

字段名数据类型长度主键否是否为空描述
StudentIDChar10主键不为空学生学号
StudentNameChar10不为空学生姓名
StudentSexChar2不为空学生性别
StudentBirthdayDatetime8学生生日
Classchar16所在班级

TeacherTable1(教师信息表)

用来储存教师的基本信息

字段名数据类型长度主键否是否为空描述
TeacherIDChar10主键不为空教师编号
TeacherNameChar10不为空教师姓名
TeacherSexChar2不为空教师性别
TeacherBirthdayDatetime8教师生日
Postchar10教师职称
Departmentchar20所在院系

CourseTable(课程信息表)

字段名数据类型长度主键否是否为空描述
CourseIDChar16主键不为空课程编号
CourseNameChar16不为空课程名
PointChar8不为空学分
StuNumberDatetime4不为空选课人数

ScoreTable(学生成绩表)

用于存储学生成绩

字段名数据类型长度是否为空是否主键
CourseIDchar16不为空主键
StudentIDchar10不为空主键
Scoreint4

TeachTable(j教师授课表)

字段名数据类型长度是否为空是否主键
CourseIDchar16不为空主键
TeacherIDchar10不为空主键
Locationint10
(8)数据库账户及权限 (截图)

学生账户表

在这里插入图片描述

教师账户表

在这里插入图片描述

用户登录表:

在这里插入图片描述

(9)数据库存储过程:

AllCourse:
create proc AllCourse
as
begin
    select x.CourseID,x.CourseName,x.Point ,y.TeacherName,y.Post,z.Location,x.StuNumber
    from Course x,TeacherTable1 y,TeachTable z
    where x.CourseID=z.CourseID and y.TeacherID=z.TeacherID
end
DeleteLogon :
create proc DeleteLogon(@id char(10))
as
begin 
    delete from Logon
    where UserID=@id
end
DeleteStudent:
create proc DeleteStudent(@id char(10))
as
begin
   delete from StudentTable1
   where StudentID=@id
end

DeleteTeacher :
create proc DeleteTeacher(@id char(10))
as
begin
   delete from TeacherTable1
   where TeacherID=@id
end

InsertLogon :
create proc InsertLogon(@id char(10))
as
begin 
    insert into Logon
    values(@id,@id)
end

InsertStudent :
create proc InsertStudent(@userid char(10),@username char(10),@sex char(2),@birth datetime,@class char(10))
as
begin
insert into StudentTable1 values(@userid ,@username,@sex,@birth,@class)
end
return

InsertTeacher:
create proc InsertTeacher(@userid char(10),@username char(10),@sex char(2),@birth datetime,@post char(10),@department char(10))
as
begin
insert into TeacherTable1 values(@userid ,@username,@sex,@birth,@post,@department)
end
return

IsExistsStu :
create proc IsExistsStu(@id char(10))
as
begin 
    select * from StudentTable1
    where StudentID=@id
end

IsExistsTea:
create proc IsExistsTea(@id char(10))
as
begin 
    select * from Teachertable1
    where TeacherID=@id
end

ProcAllStu :
create proc ProcAllStu
as
begin
select * from StudentTable1
end

ProcAllTea 
create proc ProcAllTea
as
begin
select * from TeacherTable1
end

ProcLogon:
create proc ProcLogon(@userid char(16),@password char(10))
as
begin
    select * 
    from Logon 
    where UserID=@userid and Password=@password
end
return

ProcModify:
create proc ProcModify(@id char(10),@password char(16))
as
begin
   update Logon 
   set Password=@password
   where UserID=@id
end

ProcStudent :
create proc ProcStudent(@id char(10))
as
begin
   select * from StudentTable1
   where StudentID=@id
end

SelectCourse :
create proc SelectCourse(@id char(10),@courseid char(16))
as
begin
    insert into ScoreTable
    values(@courseid,@id,null)
end

SelectedCourse: 
create proc SelectedCourse(@id char(10))
as
begin
    select * from ScoreTable
    where @id=StudentID
end

SelectedCourseNum:
create proc SelectedCourseNum(@id char(10))
as
begin
    select COUNT(*)
    from Scoretable
    where StudentID=@id
end

SelectedDetail :
create proc SelectedDetail(@id char(10))
as
begin
    select x.CourseID,x.CourseName,x.Point ,y.TeacherName,y.Post,z.Location,s.Score
    from Course x,TeacherTable1 y,TeachTable z,ScoreTable s
    where @id=s.StudentID and x.CourseID=z.CourseID and z.TeacherID=y.TeacherID
          and x.CourseID=s.CourseID
end

4.系统界面设计

(1)窗体功能描述

登录界面Logon.java

在这里插入图片描述

管理员以帐号Admin密码123登录成功进入管理员的信息管理界面,通过点击“学生信息管理”和“教师信息管理”进入不同的管理界面,学生信息管理界面如下:

在这里插入图片描述

教师信息管理界面如下:
在这里插入图片描述

以学生帐号(如:帐号:S001001,密码:S001001)登陆成功后进入如下界面,首先显示的 是学生的基本信息:
在这里插入图片描述

点击“课程列表”按钮进入如下界面
在这里插入图片描述

根据自己的跟人兴趣选择课程,选择的课程数目不能超过3门否则弹出对话框如下:
在这里插入图片描述

点击“确定”跳转到已选课程列表。

在主界面点击“已选课程”按钮也可以进入下面的界面查看已经选择的课程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w78aLjz4-1670814067086)(img/Aspose.Words.69aa86dd-1dc5-47a3-a4ac-eafd6a2834fd.012.png)]

以教师帐号(如:帐号:T01001,密码:T01001)登陆成功后进入如下界面,首先显示的 是教师的基本信息,

在这里插入图片描述

点击“录入成绩”可以通过表格来录入学生的成绩,界面如下图所示:

在这里插入图片描述

(2)页面/窗体关系结构图

在这里插入图片描述

四、系统实现技术小结

为了方便管理,将数据库的封装分成两部分,数据库资源配置文件和封装数据库操作的类SqlManager.java:

  • 数据库资源配置文件sysConfig.properties:
#Sepecify the system type: window or unix
system-type=windows

#specify the database's type
database-type=sqlserver

#specify some parameters
DBhost=localhost
DBport=1433
DBname=StudentManager
DBuser=sa
DBpassword=
  • 封装数据库操作的类**:SqlManager.java**

    import java.sql.*;
    import java.util.*;
    import javax.swing.JOptionPane;
    public class SqlManager {
    	private static SqlManager p=null;
    	private PropertyResourceBundle bundle;
    	private static String jdbcDriver=null;
    	private static String split=null;
    	private String DBType=null;
    	private String DBhost="localhost";
    	private String DBname="";
    	private String DBport="";
    	private String DBuser="";
    	private String DBpassword="";
    	private Connection Sqlconn=null;
    	private Statement Sqlstmt=null;
    	private String strCon=null;
    	private SqlManager(){
    		try{
    			bundle=new PropertyResourceBundle(SqlManager.class.
    					getResourceAsStream("/sysConfig.properties"));	
    			this.DBhost=getString("DBhost");
    			this.DBname=getString("DBname");
    			this.DBport=getString("DBport");
    			this.DBuser=getString("DBuser");
    			this.DBpassword=getString("DBpassword");			
    			String system_type=getString("system-type");
    			if(system_type!=null){
    				if(system_type!=null){
    					if(system_type.toLowerCase().equals("widows"))
    						split=";";
    					else if(system_type.toLowerCase().equals("unix"))
    						split=":";
    				}
    				String database_type=getString("database-type");
    				this.DBType=database_type;
    				if(database_type!=null){
    					if(database_type.toLowerCase().equals("mysql")){
    						jdbcDriver="com.mysql.jdbc.Driver";
    						strCon="jdbc:mysql://"+DBhost+":"+DBport+"/"+DBname;
    					}
    					else if(database_type.toLowerCase().equals("oracle")){
    						jdbcDriver="oracle.jdbc.driver.OracleDriver";
    						strCon="jdbc:oracle:thin:@"+DBhost+":"+DBport+":"+DBname;
    					}
    					else if(database_type.toLowerCase().equals("sqlserver")){
    						jdbcDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
    						strCon="jdbc:microsoft:sqlserver://"+DBhost+":"+DBport+";DatabaseName="+DBname;
    					}
    				}
    			}	
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    	public static SqlManager createInstance(){
    		if(p==null)
    		{
    			p=new SqlManager();
    			p.initDB();
    		}
    		return p;
    	}
    	private String getString(String s)
    	{
    		return this.bundle.getString(s);
    	}
    	public void initDB(){
    		System.out.println(strCon);
    		System.out.println(jdbcDriver);
    		try{
    			Class.forName(jdbcDriver);
    		}catch(Exception ex){
    			System.err.println("Can't Find Database Driver.");
    		}
    	}
    	public void connectDB(){
    		try{
    			System.out.println("SqlManager:Connecting to database...");
    			Sqlconn=DriverManager.getConnection(strCon,DBuser,DBpassword);
    			Sqlstmt=Sqlconn.createStatement();
    		}catch(SQLException ex){
    			System.err.println("connectDB"+ex.getMessage());
    		}
    		System.out.println("SqlManager:Connect to database successful.");
    	}
    	public void closeDB(){
    		try{
    			System.out.println("SqlManager:Close connection to database...");
    			Sqlstmt.close();
    			Sqlconn.close();
    		}catch(SQLException ex){
    			System.err.println("closeDB:"+ex.getMessage());
    		}
    		System.out.println("Sqlmanager:Close connection successful.");
    	}
    	public int executeUpdate(String sql){
    		int ret=0;
    		try{
    			ret=Sqlstmt.executeUpdate(sql);
    		}catch(SQLException ex)
    		{
    			System.out.println("executeUpdate:"+ex.getMessage());
    		}
    		return ret;
    	}
    	public ResultSet executeQuery(String sql){
    		ResultSet rs=null;
    		try{
    			rs=Sqlstmt.executeQuery(sql);
    		}catch(SQLException ex){
    			System.err.println("executeQuery:"+ex.getMessage());
    		}
    		return rs;
    	}
    	public static void main(String args[]){
    		SqlManager.createInstance().connectDB();
    		SqlManager.createInstance().closeDB();
    	}
    }
    

五、课程设计体会

该系统主要实现了学生选课的功能,这个系统是我独立完成,从需求分析,界面的搭建,到数据库的连接,表格,存储过程和存储过程等的建立,在这段时间的摸索中,我确实学到了很多东西,特别是对以前不太了解的Java Swing组件有了更深刻的了解。比如JTable,对于它的用法我在网上找了很多资料,JTable的建立有各种不同的方法,可以使用DefaultTableModel类来实现,如DefaultTableModel dtm=new DefaultTableModel(new Object [] {“”,“课程编号”,“课程名称”,“学分”,“任课教师”,“教师职称”,“上课地点”,“以选人数”},0));然后再table.setModel(dtm); 或者继承AbstractTableModel类,还有对于如何在JTable中添加Swing组件,原本我是直接新建一个JcheckBox对象直接添加到表格的 单元格里,结果发现只能显示出一串字符串,上网查找后才知道,要用DefaultCellEditor来添加Swing组件,再设置setCellRenderer(new MyTableRenderer()) 这是一个实现了TableCellRenderer接口的JCheckBox。TableCellRenderer可以看做是Swing组件的呈现器,这样Table就会把内容显示绘制交给JCheckBox了。对于数据库,我尽量将对数据库的操作放在存储过程中,这样的抽象和封装使得源程序代码更加容易理解,而且在web应用系统中也可以避免发生不安全的状况,我想这是一个号的程序员应当要养成的习惯,在这次的课程设计中,层次化,模块化,抽象化也是我学到的一个重要的经验,参考一些资料后发现模块化能使程序设计更加简单,设计代码时目标更加明确,效率更高,以前虽然也知道这些道理,但自己真正实施起来却感到无从下手,比如前面的数据库操作和数据库资源配置文件,就是我从书中看来的,这样做的好处是,在程序中操作数据库的时候避免了使用很多try和catch语句,是代码更加简洁,更容易理解,此外需要连接不同的数据库时只要修改数据库的资源配置文件sysConfig.properties就可以了。原本我是想用jsp 做一个web应用程序的,因为对于学生选课系统做成单版的确实没什么实用性,但是我对jsp还不太熟悉,所以这次先做个单机版的,以后我会尝试用jsp来做这个系统。

六、系统主要源程序清单

AdmPanel.java:

public class AdmPanel extends JPanel implements ActionListener,ItemListener,MouseListener
{
	JButton b1,b2,b3,b4,b5,b6;
	JPanel p1,p2,pCenter;
	CardLayout card=null;
	JTextField t1=new JTextField(10),
               t2=new JTextField(10),
               t3=new JTextField(10),
               tt1=new JTextField(10),
               tt2=new JTextField(10),
               tt3=new JTextField(10);
	ButtonGroup sex1=new ButtonGroup(),
	            sex2=new ButtonGroup();
	JRadioButton radio1=new JRadioButton("男",true),
	             radio2=new JRadioButton("女");
	JRadioButton r1=new JRadioButton("男",true),
                 r2=new JRadioButton("女");
	JComboBox year,month,date,yy,mm,dd,post;
	JTable table1,table2;
	Vector vectorColName1=new Vector(),
	       vectorColName2=new Vector();
	Vector vector1=new Vector(),
	       vector2=new Vector();
	DefaultTableModel model1=new DefaultTableModel(vectorColName1,0){
		public boolean isCellEditable(int row, int column)
        {
            return false;
        }
	};
	DefaultTableModel model2=new DefaultTableModel(vectorColName2,0){
		 public boolean isCellEditable(int row, int column)
         {
             return false;
         }
	};
	AdmPanel()
	{
		setLayout(new BorderLayout());
		t1=new JTextField(10);
		t2=new JTextField(10);
		t3=new JTextField(10);
		tt1=new JTextField(10);
		tt2=new JTextField(10);
		tt3=new JTextField(10);
		sex1.add(radio1);
		sex1.add(radio2);
		sex2.add(r1);
		sex2.add(r2);
		year=new JComboBox();
		month=new JComboBox();
		date=new JComboBox();
		yy=new JComboBox();
		mm=new JComboBox();
		dd=new JComboBox();
		post=new JComboBox();
		post.addItem("助教");
		post.addItem("讲师");
		post.addItem("副教授");
		post.addItem("教授");
		for(int i=1980;i<1995;i++)
			year.addItem(i);
		for(int i=1;i<=12;i++)
			month.addItem(i);
		for(int i=1;i<=31;i++)
			date.addItem(i);
		for(int i=1950;i<1995;i++)
			yy.addItem(i);
		for(int i=1;i<=12;i++)
			mm.addItem(i);
		for(int i=1;i<=31;i++)
			dd.addItem(i);
		year.addItemListener(this);
		month.addItemListener(this);
		yy.addItemListener(this);
		mm.addItemListener(this);
		post.addItemListener(this);
		b1=new JButton("学生信息管理");
		b2=new JButton("教师信息管理");
		b3=new JButton("输入");
		b4=new JButton("删除");
		b5=new JButton("输入");
		b6=new JButton("删除");
		b1.addActionListener(this);
		b2.addActionListener(this);
		b3.addActionListener(this);
		b4.addActionListener(this);
		b5.addActionListener(this);
		b6.addActionListener(this);
		JPanel p0=new JPanel();
		p0.add(b1);
		p0.add(b2);
		pCenter=new JPanel();
		card=new CardLayout();
		pCenter.setLayout(card);
		p1=createStuPanel();
		p2=createTeaPanel();
		pCenter.add("学生信息管理",p1);
		pCenter.add("教师信息管理",p2);
		add(p0,BorderLayout.NORTH);
		add(pCenter,BorderLayout.CENTER);
	}
	private JPanel createStuPanel()
	{
		JPanel p=new JPanel();
		JScrollPane p1;
		JPanel p2=new JPanel();
		p.setLayout(new GridLayout(2,1));
		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
		DBm.connectDB();
		String sql="exec ProcAllStu";
		ResultSet rs=DBm.executeQuery(sql);
		vectorColName1.addElement("学号");   
		vectorColName1.addElement("姓名");   
		vectorColName1.addElement("性别");   
		vectorColName1.addElement("生日");   
		vectorColName1.addElement("班级");
		model1.setDataVector(vector1,vectorColName1);
		table1=new JTable(model1);
		table1.addMouseListener(this);
		p1=new JScrollPane(table1);	
		p.add(p1);
		try{
			while(rs.next()){   
		          Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
		          rec_vector.addElement(rs.getString(1));   
		          rec_vector.addElement(rs.getString(2));   
		          rec_vector.addElement(rs.getString(3));   
		          rec_vector.addElement(rs.getString(4));   
		          rec_vector.addElement(rs.getString(5));   
		          vector1.addElement(rec_vector);//向量rec_vector加入向量vect中   
		                          }   
			rs.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
		DBm.closeDB();	
		//构造p2
		Box base=Box.createHorizontalBox(),
		    boxleft=Box.createVerticalBox(),
		    boxright=Box.createVerticalBox();
		JPanel pp1=new JPanel(),
		       pp2=new JPanel(),
		       pp3=new JPanel(),
		       pp4=new JPanel(),
		       pp5=new JPanel(),
		       pp6=new JPanel(),
		       psex=new JPanel(),
		       pbirth=new JPanel();
		psex.add(radio1);
		psex.add(radio2);
		pbirth.add(year);
		pbirth.add(month);
		pbirth.add(date);
		pp1.add(new JLabel("学生编号:"));
		pp1.add(t1);
		pp2.add(new JLabel("学生姓名:"));
		pp2.add(t2);
		pp3.add(new JLabel("学生性别:"));
		pp3.add(psex);
		pp4.add(new JLabel("学生生日:"));
		pp4.add(pbirth);
		pp5.add(new JLabel("所在班级:"));
		pp5.add(t3);
		pp6.add(b3);
		pp6.add(b4);
		boxleft.add(Box.createVerticalStrut(30));
	    boxleft.add(pp1);
	    boxleft.add(Box.createVerticalStrut(20));
	    boxleft.add(pp2);
	    boxleft.add(Box.createVerticalStrut(20));
	    boxleft.add(pp3);
	    boxright.add(Box.createVerticalStrut(20));
	    boxright.add(pp4);
	    boxright.add(Box.createVerticalStrut(20));
	    boxright.add(pp5);
	    boxright.add(Box.createVerticalStrut(20));
	    boxright.add(pp6);
		base.add(boxleft);
		base.add(Box.createHorizontalStrut(80));
		base.add(boxright);
		p2.add(base);
		p.add(p2);
		return p;
	}
	private JPanel createTeaPanel()
	{
		JPanel p=new JPanel();
		JScrollPane p1;
		JPanel p2=new JPanel();
		p.setLayout(new GridLayout(2,1));		
		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
		DBm.connectDB();
		String sql="exec  ProcAllTea";
		ResultSet rs=DBm.executeQuery(sql);
		vectorColName2.addElement("教师编号");   
		vectorColName2.addElement("教师姓名");   
		vectorColName2.addElement("教师性别");   
		vectorColName2.addElement("生日");   
		vectorColName2.addElement("职称");
		vectorColName2.addElement("所在院系");
		model2.setDataVector(vector2,vectorColName2);
		table2=new JTable(model2);
		table2.addMouseListener(this);
		p1=new JScrollPane(table2);	
		p.add(p1);
		try{
			while(rs.next()){   
		          Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
		          rec_vector.addElement(rs.getString(1));   
		          rec_vector.addElement(rs.getString(2));   
		          rec_vector.addElement(rs.getString(3));   
		          rec_vector.addElement(rs.getString(4));   
		          rec_vector.addElement(rs.getString(5)); 
		          rec_vector.addElement(rs.getString(6)); 
		          vector2.addElement(rec_vector);//向量rec_vector加入向量vect中   
		    }   
		          //tm.fireTableStructureChanged();//更新表格,显示向量vect的内容  
			rs.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
		DBm.closeDB();		
		//构造p2
		Box base=Box.createHorizontalBox(),
	    boxleft=Box.createVerticalBox(),
	    boxright=Box.createVerticalBox();
	    JPanel pp1=new JPanel(),
	           pp2=new JPanel(),
	           pp3=new JPanel(),
	           pp4=new JPanel(),
	           pp5=new JPanel(),
	           pp6=new JPanel(),
	           pp7=new JPanel(),
	           psex=new JPanel(),
	           pbirth=new JPanel();
	    psex.add(r1);
	    psex.add(r2);
	    pbirth.add(yy);
	    pbirth.add(mm);
	    pbirth.add(dd);
	    pp1.add(new JLabel("教职工号:"));
	    pp1.add(tt1);
	    pp2.add(new JLabel("教师姓名:"));
	    pp2.add(tt2);
	    pp3.add(new JLabel("教师性别:"));
	    pp3.add(psex);
	    pp4.add(new JLabel("教师生日:"));
	    pp4.add(pbirth);
	    pp5.add(new JLabel("教师职称:"));
	    pp5.add(post);
	    pp6.add(new JLabel("所在院系:"));
	    pp6.add(tt3);
	    pp7.add(b5);
	    pp7.add(b6);
	    boxleft.add(Box.createVerticalStrut(40));
	    boxleft.add(pp1);
	    boxleft.add(Box.createVerticalStrut(20));
	    boxleft.add(pp2);
	    boxleft.add(Box.createVerticalStrut(20));
	    boxleft.add(pp3);
	    boxright.add(Box.createVerticalStrut(30));
	    boxright.add(pp4);
	    boxright.add(Box.createVerticalStrut(10));
	    boxright.add(pp5);
	    boxright.add(Box.createVerticalStrut(10));
	    boxright.add(pp6); 
	    boxright.add(pp7);
	    base.add(boxleft);
	    base.add(Box.createHorizontalStrut(80));
	    base.add(boxright);
		p2.add(base);
		p.add(p2);
		return p;
	}
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==b1)
		{
			card.show(pCenter, "学生信息管理");
		}
		else if(e.getSource()==b2)
		{
			card.show(pCenter, "教师信息管理");
		}
		if(e.getSource()==b3)
		{			
			String userid=t1.getText(),
			       username=t2.getText(),
			       classs=t3.getText();
			String sex="男";
			if(radio2.isSelected())
			{
				sex="女";
			}
			String birth=String.valueOf((Integer)year.getSelectedItem())+"-"
			               +String.valueOf((Integer)month.getSelectedItem())
			               +"-"+String.valueOf((Integer)date.getSelectedItem());	
			String sql="exec InsertStudent'"+userid+"','"+username+"','"+sex+"','"+birth+"','"+classs+"'";
			String s="exec IsExistsStu'"+userid+"'";
			String inserlog="exec InsertLogon'"+userid+"'";
			System.out.println(sql);
			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
			DBm.connectDB();
	        
			
			ResultSet rset=DBm.executeQuery(s);
			System.out.println(s);
			
			try{
				if (rset.next())
				{
					JOptionPane.showMessageDialog(this,"学生信息插入失败,该学生ID号已存在",
							"警告",JOptionPane.WARNING_MESSAGE);
					rset.close();
				}
				else{ 
					ResultSet rs=DBm.executeQuery(sql);
					
					if(rs.next())
					{
						JOptionPane.showMessageDialog(this,"学生信息插入成功",
								"成功",JOptionPane.WARNING_MESSAGE);
						DBm.connectDB();
						DBm.executeUpdate(inserlog);
						t1.setText("S");
						t2.setText(null);
						t3.setText(null);
						radio1.setSelected(true);
						//this.post.setSelectedIndex(0);
						year.setSelectedIndex(0);
						month.setSelectedIndex(0);
						date.setSelectedIndex(0);
						//sql="select * from Inserted";
						//ResultSet rs=DBm.executeQuery(sql);
						Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
				        rec_vector.addElement(rs.getString(1));   
				        rec_vector.addElement(rs.getString(2));   
				        rec_vector.addElement(rs.getString(3));   
				        rec_vector.addElement(rs.getString(4));   
				        rec_vector.addElement(rs.getString(5));   
				        vector1.addElement(rec_vector);//向量rec_vector加入向量vect中       
				        model1.fireTableStructureChanged();//更新表格,显示向量vect的内容   
				        rs.close();    
					}
					else{
						JOptionPane.showMessageDialog(this,"学生信息插入失败",
								"警告",JOptionPane.WARNING_MESSAGE);
						rs.close();
					}
				}
			}catch(SQLException ex){
				ex.printStackTrace();
			}
			DBm.closeDB();
		}
		if(e.getSource()==b4)
		{
			//同步删除数据库中的数据
			int selectrow = 0;
	        selectrow =table1.getSelectedRow();
			String id =table1.getValueAt(selectrow,0).toString();
			String sql="exec DeleteStudent'"+id+"'";
			String deletelog="exec DeleteLogon'"+id+"'";
			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
			DBm.connectDB();
			if(DBm.executeUpdate(sql)==1)
			{
				JOptionPane.showMessageDialog(this,"学生信息已删除",
						"删除成功",JOptionPane.INFORMATION_MESSAGE);
				DBm.connectDB();
				DBm.executeUpdate(deletelog);
				model1.removeRow(selectrow); 
				t1.setText("S");
				t2.setText(null);
				t3.setText(null);
				radio1.setSelected(true);
				year.setSelectedIndex(0);
				month.setSelectedIndex(0);
				date.setSelectedIndex(0);				
			}
			DBm.closeDB();
		}
		if(e.getSource()==b5)
		{
			String userid=tt1.getText(),
			       username=tt2.getText(),
			       depart=tt3.getText(),
			       post=(String)this.post.getSelectedItem();
			String sex="男";
			if(r2.isSelected())
			{
				sex="女";
			}
			String birth=String.valueOf((Integer)yy.getSelectedItem())+"-"+String.valueOf((Integer)mm.getSelectedItem())
                          +"-"+String.valueOf((Integer)dd.getSelectedItem());	
			String sql="exec InsertTeacher'"+userid+"','"+username+"','"+sex+"','"+birth+"','"+post+"','"+depart+"'";
			String s="exec IsExistsTea'"+userid+"'";
			String insertlog="exec InsertLogon'"+userid+"'";
			System.out.println(sql);
			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
			DBm.connectDB();
			ResultSet rset=DBm.executeQuery(s);
			System.out.println(s);
			try{
				if (rset.next())
				{
					JOptionPane.showMessageDialog(this,"教师信息插入失败,该教师ID号已存在",
							"警告",JOptionPane.WARNING_MESSAGE);
					rset.close();
				}
				else{ 
					ResultSet rs=DBm.executeQuery(sql);
					if(rs.next())
					{
						JOptionPane.showMessageDialog(this,"教师信息插入成功",
								"成功",JOptionPane.WARNING_MESSAGE);
						DBm.connectDB();
						DBm.executeUpdate(insertlog);
						tt1.setText("T");
						tt2.setText(null);
						tt3.setText(null);
						r1.setSelected(true);
						this.post.setSelectedIndex(0);
						yy.setSelectedIndex(0);
						mm.setSelectedIndex(0);
						dd.setSelectedItem(0);

						Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
				        rec_vector.addElement(rs.getString(1));   
				        rec_vector.addElement(rs.getString(2));   
				        rec_vector.addElement(rs.getString(3));   
				        rec_vector.addElement(rs.getString(4));   
				        rec_vector.addElement(rs.getString(5)); 
				        rec_vector.addElement(rs.getString(6)); 
				        vector2.addElement(rec_vector);//向量rec_vector加入向量vect中       
				        model2.fireTableStructureChanged();//更新表格,显示向量vect的内容   
				        rs.close(); 					          
					}
					else{
						JOptionPane.showMessageDialog(this,"教师信息插入失败",
								"警告",JOptionPane.WARNING_MESSAGE);
						rs.close();
					}
				}
			}catch(SQLException ex){
				ex.printStackTrace();
			}
			DBm.closeDB();
		}
		if(e.getSource()==b6)
		{
			//同步删除数据库中的数据
			int selectrow = 0;
	        selectrow =table2.getSelectedRow();
			String id =table2.getValueAt(selectrow,0).toString();
			String sql="exec DeleteTeacher'"+id+"'";
			String deletelog="exec DeleteLogon'"+id+"'";
			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
			DBm.connectDB();
						if(DBm.executeUpdate(sql)==1)
			{
				JOptionPane.showMessageDialog(this,"教师信息信息已删除",
						"删除成功",JOptionPane.INFORMATION_MESSAGE);
				DBm.connectDB();
				DBm.executeUpdate(deletelog);
				model2.removeRow(selectrow); 
				tt1.setText("T");
				tt2.setText(null);
				tt3.setText(null);
				r1.setSelected(true);
				yy.setSelectedIndex(0);
				mm.setSelectedIndex(0);
				dd.setSelectedIndex(0);
			}
			DBm.closeDB();
		}
	}
	public void mousePressed(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	public void mouseMoved(MouseEvent e){}
	public void mouseDraged(MouseEvent e){}
	public void mouseClicked(MouseEvent e)
	{
		if(e.getSource()==table1)
		{
			int selectrow = 0;
	        selectrow =table1.getSelectedRow();
			String id =table1.getValueAt(selectrow,0).toString();
			String name=table1.getValueAt(selectrow,1).toString();
			String sex=table1.getValueAt(selectrow,2).toString();
			String birth=table1.getValueAt(selectrow,3).toString().substring(0,10);
			String classs=table1.getValueAt(selectrow,4).toString();
			t1.setText(id);
			t2.setText(name);
			t3.setText(classs);
			if(sex.trim().equals("男"))
				radio1.setSelected(true);
			else if(sex.equals("女"))
				radio2.setSelected(true);
			int y=Integer.parseInt(birth.substring(0, 4));
			int m=Integer.parseInt(birth.substring(5, 7));
			int d=Integer.parseInt(birth.substring(8));
			year.setSelectedIndex(y-1980);
			month.setSelectedIndex(m-1);
			date.setSelectedIndex(d-1);
		}
		else if(e.getSource()==table2)
		{
			int selectrow = 0;
	        selectrow =table2.getSelectedRow();
			String id =table2.getValueAt(selectrow,0).toString();
			String name=table2.getValueAt(selectrow,1).toString();
			String sex=table2.getValueAt(selectrow,2).toString();
			String birth=table2.getValueAt(selectrow,3).toString().substring(0,10);
			String position=table2.getValueAt(selectrow,4).toString();
			String depart=table2.getValueAt(selectrow,5).toString();
			tt1.setText(id);
			tt2.setText(name);
			tt3.setText(depart);
			if(sex.trim().equals("男"))
				r1.setSelected(true);
			else if(sex.equals("女"))
				r2.setSelected(true);
			int y=Integer.parseInt(birth.substring(0, 4));
			int m=Integer.parseInt(birth.substring(5, 7));
			int d=Integer.parseInt(birth.substring(8));
			yy.setSelectedIndex(y-1950);
			mm.setSelectedIndex(m-1);
			dd.setSelectedIndex(d-1);
			if(position.equals("助教"))
				post.setSelectedIndex(0);
			else if(position.equals("讲师"))
				post.setSelectedIndex(1);
			else if(position.equals("副教授"))
				post.setSelectedIndex(2);
			else if(position.equals("教授"))
				post.setSelectedIndex(3);
		}
	}
	public void itemStateChanged(ItemEvent e)
	{//主要实现生日日期的选择(略)
    } 

CourseList.java:

public class CourseList extends JPanel implements ActionListener
{
	int count=0;//可供选择的课程数
	MyTable table1;
	JTable table2;
	TableColumnModel tcm;
	JButton button;
	CourseList()
	{
		setLayout(new BorderLayout());
		button=new JButton("确定");
		button.addActionListener(this);
		JPanel p=new JPanel();
		p.add(button);
		table1=new MyTable();
		JTable table2=initTable(table1);
		JScrollPane sp=new JScrollPane(table2);
		add(sp,BorderLayout.CENTER);
		add(p,BorderLayout.SOUTH);
	}
	private JTable initTable(JTable table) {   
        DefaultTableModel dtm = new DefaultTableModel(   
            new Object [] {"","课程编号","课程名称","学分","任课教师","教师职称","上课地点","以选人数"},0);   
        SqlManager DBm=SqlManager.createInstance();
        DBm.connectDB();
        String sql="exec AllCourse";//所有选修课,如果选课人数没有达到5时设置MyTable.b=true;
        ResultSet rs=DBm.executeQuery(sql);
        try{
        	while(rs.next())
            {
        		dtm.addRow(new Object[] {new Boolean(false),rs.getString(1),rs.getString(2),
        				rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7)});
        		count++;
            }
        	rs.close();
        }catch(SQLException e){
        	e.printStackTrace();
        }
        DBm.closeDB();
        table.setModel(dtm);   
        TableColumnModel tcm = table.getColumnModel();   
        tcm.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));   
        tcm.getColumn(0).setCellRenderer(new MyTableRenderer());
        tcm.getColumn(0).setPreferredWidth(20);   
        tcm.getColumn(0).setWidth(20);   
        tcm.getColumn(0).setMaxWidth(20);   
        return table;   
	}
	
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==button)
		{
			if(selectcourse()>0)
			{
				JOptionPane.showMessageDialog(this,"选课成功\n点击\"确定\"查看以选课程",
						"选课成功",JOptionPane.INFORMATION_MESSAGE);
				ChooseList.updateTable();
				StuPanel.card.show(StuPanel.pCenter, "已选课程");
			}
		}
	}
	public int selectcourse()
	{
		int selectedCount=ChooseList.getSelectedCount();
		int a=xianzhi();
		int c=0;
		String[] courseID=new String[selectedCount];
		if(selectedCount==3)
		{
			JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了3门\n点击\"确定\"查看以选课程",
					"警告",JOptionPane.WARNING_MESSAGE);
			ChooseList.updateTable();
			StuPanel.card.show(StuPanel.pCenter, "已选课程");
			return c ;
		}
		else{
			if(a+selectedCount>3)
			{
				JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了"+selectedCount+"门\n点击\"确定\"查看以选课程",
						"警告",JOptionPane.WARNING_MESSAGE);
				ChooseList.updateTable();
				StuPanel.card.show(StuPanel.pCenter, "已选课程");
				return c;
			}
			else
			{//不能选重复了
				String sql="exec SelectedCourse'"+Logon.userid+"'";
				//System.out.println(sql+"不能选重复了");
				SqlManager DBm=SqlManager.createInstance();
				DBm.connectDB();
				ResultSet rs=DBm.executeQuery(sql);
				try{
					int i=0;
					while(rs.next()){
						courseID[i]=rs.getString(1).trim();
						System.out.println(courseID[i]+"changdu");
					}
					rs.close();
				}catch(SQLException e){
					e.printStackTrace();
					return c;
				}
				DBm.closeDB();
				for(int i=0;i<count;i++)
				{
					for(int j=0;j<selectedCount;j++)
					{
						if(table1.getValueAt(i,0).toString().equals("true"))
						{
							//System.out.println(table1.getValueAt(i,1).toString().trim()+"选课不能重复,点击");
							//System.out.println(courseID[j]);
							if(table1.getValueAt(i,1).toString().trim().equals(courseID[j])){
								JOptionPane.showMessageDialog(this,"选课不能重复,\n点击\"确定\"查看已选课程",
										"警告",JOptionPane.WARNING_MESSAGE);
								ChooseList.updateTable();
								StuPanel.card.show(StuPanel.pCenter, "已选课程");
								return c;
						    }
						}
					}	
				}
				for(int i=0;i<count;i++)
				{
					if(table1.getValueAt(i,0).toString().equals("true"))
					{
						String courseid=table1.getValueAt(i,1).toString();
						sql="exec SelectCourse'"+Logon.userid+"','"+courseid+"'";
						DBm.connectDB();
						c=DBm.executeUpdate(sql);
						DBm.closeDB();
						System.out.println("c1="+c);
					}System.out.println("c2="+c);
				}
				if(c==0)
				{
					JOptionPane.showMessageDialog(this,"请选择选修课",
							"警告",JOptionPane.WARNING_MESSAGE);
				}
				return c;
			}
		}
	}
	public int xianzhi()
	{
		int a=0;
		for(int i=0;i<count;i++)
		{
			if(table1.getValueAt(i,0).toString().equals("true"))
				a++;
		}
		return a;
	}
}
class MyTable extends JTable
{
	static boolean b=true;	
	public   boolean   isCellEditable(int   rowIndex,   int   columnIndex){
		if (columnIndex>0)return false;   
		else return true;
	}	
}
class MyTableRenderer extends JCheckBox implements TableCellRenderer 
{
    public Component getTableCellRendererComponent( JTable table,   
            Object value,   
            boolean isSelected,   
            boolean hasFocus,   
            int row,   
            int column ) {   
        Boolean b = (Boolean) value;   
        this.setSelected(b.booleanValue());   
        return this;   
    }   
} 

Logon.java

class Logon extends JPanel 
{
	JTextField t1;
	JPasswordField t2;
	JButton button1,button2;
	static String info[];
	static String userid,password;
	Logon()
	{
		JLabel label=new JLabel("登陆");
		label.setFont(new Font("TimesRoman",Font.BOLD,24));
		t1=new JTextField(20);
		t2=new JPasswordField(20);
		button1=new JButton("登陆");
		button2=new JButton("取消");
		JPanel p1,p2,p3,p4;
		Box box=Box.createVerticalBox();
		p1=new JPanel();//p1.setBackground(Color.PINK);
		p2=new JPanel();
		p3=new JPanel();
		p4=new JPanel();
		p1.add(label);
		p2.add(new Label("用户名:"));
		p2.add(t1);
		p3.add(new Label("口    令:"));
		p3.add(t2);
		p4.add(button1);
		p4.add(button2);	
		box.add(p1);
		box.add(p2);
		box.add(p3);
		box.add(p4);
		add(box);
	}
	public char logon() throws SQLException
	{
		String tuserid=t1.getText();
		String tpassword=new String(t2.getPassword());
		String sql1=null,sql2=null;
		ResultSet rs=null;
		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
		DBm.connectDB();
		sql1="exec ProcLogon'"+tuserid+"','"+tpassword+"'";
		rs=DBm.executeQuery(sql1);
		
		if(rs.next())//如果存储过程有结果返回,则将用户信息读入并保存
		{
			System.out.println(rs.getString(1)+"如果存储过程有结果返回,则将用户信息读入并保存");
			userid=rs.getString(1);
			password=rs.getString(2);
			if(userid.startsWith("T"))
			{
				TeaInfo.saveTea(userid);
				
			}
			else if(userid.startsWith("S"))
			{
				StuInfo.saveStu(userid);
			}
			else if(userid.startsWith("A"))
			{
				sql2=sql1;
				DBm.connectDB();
				rs=DBm.executeQuery(sql2);
			}
			rs.close();
			DBm.closeDB();
			return userid.substring(0, 1).toCharArray()[0];
		}
		else{
			userid=null;
			password=null;
			JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新填写",
					"警告",JOptionPane.WARNING_MESSAGE);
			rs.close();
			DBm.closeDB();
			return '0';
		}
	}
	private static void dispResultSet(ResultSet rs) throws SQLException
	{
		ResultSetMetaData rsmd=rs.getMetaData();
		int numCols=rsmd.getColumnCount();
		info=new String[numCols];
		while(rs.next())
		{
			for(int i=1;i<=numCols;i++)
			{				
				info[i-1]=rs.getString(i);
				if(i>1)System.out.print(",");
				System.out.print(rs.getString(i));
			}
			System.out.println("");
		}
	}
	public void reset()
	{
		t1.setText(null);
		t2.setText(null);
		t1.requestFocusInWindow();
	}
}

♻️ 资源

在这里插入图片描述

大小: 1.48MB
➡️ 资源下载:https://download.csdn.net/download/s1t16/87248105

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二季5:配置视频捕获(step3:VI部分)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 前言 本文将详细介绍博文第二季3&#xff1a;sample_venc.c的整体分析提及的“配置视频捕获”。 该部分主要涉及以下步骤&#xff1a; 5、配置MIPI6、初始化ISP7、运行ISP线程8、配置开启VI 设备捕…

Mybatis 参数处理器注入配置解析流程

参数处理器的作用 Mybatis作为一个ORM框架&#xff0c; 其最原始的本质就是JDBC&#xff0c;对于JDBC的使用步骤中有2步和参数处理器有关&#xff0c; 就是给预处理器PreparedStatement 设置参数以及通过结果集获取字段值。 这两个步骤在Mybatis中已经成为框架底层逻辑流程&am…

【K8S系列】第十一讲:包管理神器-Helm

目录 序言 1.背景介绍 1.1 k8s 简单介绍 1.2 k8s部署挑战 2.Helm 2.1 Helm介绍 2.1 使用优势&#xff1a; 3.Helm模块 3.1 Helm 3.1.1 安装Helm 3.2 Chart 3.2.1 Chart 基本介绍 3.2.2 Chart目录结构 3.3 Repoistory 3.4 Config 3.5 Release 4.投票 序言 当…

Windows及Linux系统查找某个端口和文件被占用

概述 开发中很常见的问题&#xff0c;每次遇到这个问题&#xff0c;都是去Google搜索&#xff0c;不一定能搜到满意的答案&#xff0c;有点耗时&#xff0c;故记录一下&#xff0c;得到本文。 端口被占用&#xff0c;导致IDEA启动应用失败。又或者某个文件被某个未知的应用使…

c#入门-抽象类

抽象类 有些类存在的意义就是为了让别的类继承。自己本身不应该具有实例。例如 class 单位 {public int 生命; } class 建筑 : 单位 {public int 护甲; } class 英雄 : 单位 {public int 护盾; } class 小兵 : 单位 {public int 经验; }可以使用abstract把他声明为抽象类。 抽…

Linux查找find命令全面剖析

Linux查找find命令全面剖析 1. 文件查找 在文件系统上查找符合条件的文件 1.1 简述 locate 命令 非实时查找(数据库查找) 依赖于事先构建的索引&#xff0c;索引的构建是在系统较为空闲时自动进行(周期性任务) 手动更新数据库(updatedb)&#xff0c;索引构建过程需要遍历整…

【物理应用】基于Matlab模拟13自由度摩托车模型

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Python使用Selenium WebDriver的入门介绍及安装教程

Selenium WebDriver 入门一、什么是Selenium WebDriver二、安装Selenium WebDriver2.1 安装selenium类库2.2 安装浏览器驱动2.3 配置环境变量三、编写第一个Selenium脚本一、什么是Selenium WebDriver WebDriver 以本地化方式驱动浏览器&#xff0c;就像用户在本地或使用 Sele…

[附源码]Nodejs计算机毕业设计基于Java网上玩具商店Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

R语言基于协方差的SEM结构方程模型中的拟合指数

在实践中&#xff0c; 因子负载较低&#xff08;或测量质量较差&#xff09;的模型的拟合指数要好于因子负载较高的模型。 最近我们被客户要求撰写关于SEM的研究报告&#xff0c;包括一些图形和统计输出。例如&#xff0c;如果两个模型具有相同的错误指定级别&#xff0c;并且…

漫游Linux块IO

前言 在计算机的世界里&#xff0c;我们可以将业务进行抽象简化为两种场景——计算密集型和IO密集型。这两种场景下的表现&#xff0c;决定这一个计算机系统的能力。数据库作为一个典型的基础软件&#xff0c;它的所有业务逻辑同样可以抽象为这两种场景的混合。因此&#xff0…

云原生时代数据库运维体系演进

作者&#xff1a;vivo 互联网服务器团队- Deng Song 本文根据邓松老师在“2022 vivo开发者大会"现场演讲内容整理而成。 数据库运维面临着大规模数据库实例难以有效运维、数据库难以做好资源弹性伸缩以及个人隐私数据安全难以保障这三个方面的挑战。对此&#xff0c;vivo给…

redis之事务分析

写在前面 本文一起看下redis提供的事务功能。 1&#xff1a;事务的ACID A(Atomic)原子性&#xff0c;C&#xff08;Consitency&#xff09;一致性&#xff0c;I&#xff08;Isolation&#xff09;隔离性&#xff0c;D&#xff08;Durability&#xff09;持久性&#xff0c;其…

kubernetes学习之路--BadPods(Part1)

摘要&#xff1a;对Pod配置进行实战学习&#xff0c;以BadPods项目为例学习危险配置。 目录 一.BadPods介绍及使用 二.BadPods配置学习 2.1 less1--Everything allowed 基本操作学习 2.2 less1--Everything allowed 渗透学习 一.BadPods介绍及使用 项目地址&#xff1a;h…

西门子KTP1200触摸屏右上角出现黄色感叹号_报警指示器的组态与应用

西门子KTP1200触摸屏右上角出现黄色感叹号_报警指示器的组态与应用 设备运行时产生报警时通常会在画面右上角有个指示器在闪烁提示报警产生。 本次和大家分享报警指示器的组态和具体使用方法。 报警指示器的组态。 报警指示器使用警告三角来表示报警处于未决状态或要求确认。如…

数字验证学习笔记——SystemVerilog芯片验证15 ——随机约束和分布

一、随机和约束 1.1 随机 定向测试能找到你认为可能存在的缺陷&#xff0c;而随机测试可以找到你没有想到的缺陷。随机测试相对于定向测试可以减少相当多的代码量&#xff0c;而产生的激励较定向测试也更多样。 1.2 约束 我们想要的随机自由是一种合法的随机&#xff0c;需…

JAVA毕业设计——基于Springboot+vue的房屋租赁系统(源代码+数据库)

github代码地址 https://github.com/ynwynw/houserent2-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于Springboot的房屋租赁系统(源代码数据库) 一、系统介绍 本项目分为管理员、经纪人、维修员、普通用户四种角色 管理员角色包含以下功能&#…

C++——AVL树

目录 AVL 树 Insert 控制平衡因子 AVL树的旋转 AVL树验证 AVL树的性能 错误排查技巧 AVL 树 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下。因此&…

统计学 | 描述统计

一.导论 统计学是通过收集&#xff0c;整理&#xff0c;分析&#xff0c;描述数据等手段&#xff0c;以达到推断所测对象的本质&#xff0c;甚至预测对象未来的一门综合性科学。其目的是探索数据的内在数量规律性&#xff0c;以达到对客观事物的科学认识 统计的本业是消化数据…

pikachu靶场-4 SQL注入漏洞

SQL注入漏洞 在OWASP发布的TOP 10 中&#xff0c;注入漏洞一直是危害排名第一的漏洞&#xff0c;其中主要指的是SQL Inject漏洞。 一个严重的SQL注入漏洞&#xff0c;可能会直接导致一家公司破产&#xff01; 数据库输入漏洞&#xff0c;主要是开发人员在构建代码时&#xf…