学生管理系统--课程设计项目(Java+SQL server)

news2024/11/27 6:23:47

本科参与项目文档合集: 点击跳转~

学生管理系统

Student Management System


学校:山东科技大学
指导老师:杨 * * 教授
学号:2019032****
学生姓名:安**
专业班级:计算机19-1


                                   山东科技大学 二〇二〇年七月

项目文档目录

    • 学生管理系统
      • 1. 总体设计与要求
      • 2. 开发环境及开发工具
      • 3. 详细设计与实现
      • 4. 测试数据
      • 5. 总结
      • 6.参考文献
      • 惊喜

1. 总体设计与要求

项目要求
1.1要求
 设计并编程实现一款学生个人简历管理小系统。该系统包括如下功能:
1.1.1个人简历内容应至少包括
 学生学号、姓名、性别、出生日期、个人爱好、简历等项目。
实现方式:用Microsoft SQL Server Management Studio 18建立本地数据库并新建一个包含学生学号、姓名、性别、出生日期、个人爱好、简历等各种信息的表格;最后与JAVA程序建立连接,并对数据库进行操作,进而实现程序功能。
1.1.2具有学生个人信息的录入、编辑和保存功能
 实现方式:首先创建友好用户窗口管理员登录界面,添加标签面板并加入登录标签,管理员登陆成功后交互窗口到COMM Frame界面,在COMM Frame窗口中加入菜单项组件,分别为:信息总览、修改信息、添加信息、查找信息这四个部分并加入到菜单中,将菜单放入菜单条里。对四个菜单项分别用监视器监视,获取事件源后发生对应的事件响应。
1.1.3可以通过文本框输入学生学号,查询并展示该生的个人简介
实现方式:在点击查找信息这个菜单项后,事件源获取、事件发生;此时数据库已连接(在管理员登陆界面时连接),通过获得JTextField对象中的内容与数据库进行逐条比对,利用事件发生:若比对成功(即有对应的学号或其他特性信息)则发生事件输出显示信息,若比对失败则弹出文本框提示:无此信息。
项目总体设计
 项目文件分为10个部分:首先有两个窗口:管理员登录窗口以及实现其他功能的总窗口;其次就是查找类、插入类、浏览类、修改类这四个项目核心类,最后这四个核心实现类又一一对应这四个函数:查找、插入、浏览(查看)、修改,共10个部分在同一个package中,故对于访问权限问题没有过于重视,大部分都为友好类或者友好方法,具体实现方式下文有具体解释,故在此不在详述。
项目显示
在这里插入图片描述

具体实现结构图
在这里插入图片描述

2. 开发环境及开发工具

2.1 开发环境
 Java Development Kit (JDK)
 Java Runtime Environment(JRE)
 Java version “1.8.0_251”
 Java™ SE Runtime Environment (build 1.8.0_251-b08)
 Java HotSpot™ 64-Bit Server VM (build 25.251-b08, mixed mode)
2.2 开发工具
 Eclipse
 Microsoft SQL Server Management Studio 18
 SQL Server 2019 配置管理器

3. 详细设计与实现

本地数据库的构建
 在SQL Server 2019数据库上实现数据操作。使用纯面向对象的java语言作为开发语言在sql server 2019新建一个名为Student的数据库,在下面新建一个名为stu的表,然后新建一个名为login的表 存贮账号 密码:
在这里插入图片描述

显示其中stu图表的内容为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1管理员登录窗口实现
3.1.1简述
 创建一个管理员登录界面,加入标签面板加载组件,加入文本框,设置布局格式实现:一行标签一行文本输入框,包括管理员登录界面组件,创建按钮,加入事件监视器,通过与数据库建立连接,比对用户的数据库账户和密码与文本框中输入的是否相同并触发对应事件(即显示账户登录成功并打开总窗口或提示账户名或密码错误)。
在这里插入图片描述

3.1.2 核心代码解释

try{
			Connection con;
			Statement sql;
			ResultSet rs;
			String url;
	url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
		con=DriverManager.getConnection(url,"ast",****);	//与用户名ast的数据库建立连接
			System.out.println("数据库连接成功!!");
			sql=con.createStatement();							//通过connection数据库链接对象 创建一个statement对象数据库操作对象
			rs=sql.executeQuery("select * from login where name ='"+name+"' and pwd='"+pwd+"'");
			//executeQuery()方法来下达select指令以查询数据库
			//把数据库响应的查询结果存放在rs中供我们使用
			int q=0;
			while(rs.next()){
				q++;
			}if(q>0){
				JOptionPane.showMessageDialog(this, "登陆成功!","消息对话框",JOptionPane.WARNING_MESSAGE);	//消息提示框1
				this.dispose();		//释放当前子窗口
				new CommFrame();	//创建另一个事件窗口
			}else
				JOptionPane.showMessageDialog(this, "账号或者密码错误!","消息对话框",JOptionPane.WARNING_MESSAGE);//消息提示框2
		}
		catch(SQLException exp){
			System.out.println(exp);
		}

管理员登录窗口试运行截图
在这里插入图片描述

3.2项目总集合窗口实现
3.2.1简述
 创建一个友好用户界面,包含一个菜单条,内含四个菜单项:信息总览、修改信息、添加信息、查找信息;并为每个菜单项增加事件监听,点击对应的菜单项即会触发相应的事件。并在首页面显示所有学生信息,创建一个按钮,增加监听功能,点击时触发更新数据库并显示在此页面事件。
在这里插入图片描述

3.2.2核心实现代码解释

JPanel pCenter; pCenter=new JPanel();
		pCenter.add("scanItem", scan);
		pCenter.add("updateItem",update);
		pCenter.add("insertItem",insert);
		pCenter.add("searchItem",search);
		//声明创建面板并向面板中添加各个功能的实现窗口。
在此程序中,对四个菜单项分别用监视器监视,获取事件源后发生对应的事件响应,此窗口为综合主窗口,点击对应的菜单项后会发生事件响应,通过if(e.getSource()==scanItem)
			card.show(pCenter, "scanItem");
		//判断事件源并选择执行。来实现。
此窗口包含显示学生信息这一项事件,点击更新信息按钮后,(此时与数据库建立连接中),从数据库获取信息并显示。

3.3浏览所有学生信息:Scan_stu类
3.3.1简述
 此类所实现的窗口镶嵌在项目总集合窗口中,用JScrollPane scrollPane = new JScrollPane(table);//JScrollPane滚动窗格,并将table加入此窗格中;向滚动窗格中加入滑动条,在窗口中加入更新按钮,为按钮增加事件监听,点击后操作窗口调用Query()之中的方法显示数据库最新信息。
在这里插入图片描述

3.3.2核心实现代码解释

Scan_stu(){
		setLayout(new FlowLayout());
		setBackground(Color.green);
		query=new Query();//声明创建Query函数对象。
		query.setTableName("stu");//初始化setTableName
		a=query.getRecord();//获取表格的表头内容
		b=query.getField();//获取表格的数据内容
		update_table=newDefaultTableModel(a,b);//DefaultTableModel 返回Object的一个列类。
		table=new JTable(update_table);
		button=new JButton("更新信息");//新增按钮,初始化名称。
		button.addActionListener(this);//为此按钮增加监听器
		JScrollPane scrollPane = new JScrollPane(table);//在可滑动面板中加入表格table
		scrollPane.setBounds(0,0,550,380);//设置滚动窗格面板格式大小
		table.setPreferredSize(new Dimension(scrollPane.getWidth()-50,scrollPane.getHeight()*2));//使表格出现滑动条
		add(scrollPane);//将滚动窗格面板加到主窗口中。
		add(button);//将按钮加到窗口中。
	}public void actionPerformed(ActionEvent e){
		a=null;b=null;
		query=new Query();//调用Query()类方法对数据库进行修改更新。
		query.setTableName("stu");
		a=query.getRecord();
		b=query.getField();
		update_table.setDataVector(a, b); // 设置模型中的元素,它会自动显示在列表中。
	}//实现数据库调用,输出数据库的最新状态。

运行窗口测试
在这里插入图片描述

3.4 Scan_stu调用的Query查找函数
3.4.1简述
 本类是该项目很重要的一部分,属于核心代码,实现了与数据库建立连接,包含求表格内容的函数、求表格内容有多少行的函数方法、求字段名称的方法、求初始表名的方法、求字段个数的方法。即为操作数据库显示而编写的类。
3.4.2核心代码解释
在这里插入图片描述

查询结果的存储功能

while(rs.next()){//此处的rs为ResultSet的一个对象,用next()方法逐个读取数据。
				for(int k=1;k<=字段个数;k++){
					a[m][k-1]=rs.getString(k);
				}
				System.out.println();
				m++;
			}
//这样的ResultSet对象可以完成对数据库中表的修改,更新的方法是,把ResultSet的游标移动到你要更新的行,然后调用 updateXXX(),这个方法XXX的含义和getXXX()是相同的。
//updateXXX()方法有两个参数,第一个是要更新的列,可以是列名或者 序号。第二个是要更新的数据,这个数据类型要和XXX相同。每完成对一行的update要调用updateRow()完成对数据库的写入,而且是在 ResultSet的游标没有离开该修改行之前,否则修改将不会被提交。

3.4.3求表格内容有多少行的方法

sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);//同上文ResultSet对象可以完成对数据库中表的修改,更新。
			rs=sql.executeQuery("select * from "+tableName);
			rs.last();//获取匹配元素集合中最后一个元素。
			int rows=rs.getRow();//在此处获取表格内容的行数
			return rows;

3.4.4求字段名称的方法
在这里插入图片描述

int 字段个数=getZiDuan();//构造函数(求字段个数)
			b=new String[字段个数];
			int k=0;
			while(rs1.next()){
				b[k]=rs1.getString(4);// .getString()方法取数据库查出来的数据。    k++;}//以String 的形式获取此 ResultSet 对象的当前行中指定列的值。
			con.close();	}//关闭数据库连接并释放内存。	
		catch(SQLException e){
			System.out.println(e);
		}
		return b;
	}

3.4.5求字段个数
在这里插入图片描述

DatabaseMetaData metadata=con.getMetaData();//得到此对象实例
			ResultSet rs1=metadata.getColumns(null, null, tableName, null);//获取表字段信息
			字段个数=0;
			while(rs1.next())
				字段个数++;//计数,返回字段个数。
		}
		catch(SQLException e){
			System.out.println(e);
		}
		return 字段个数;

3.5修改学生信息的Update_stu函数
3.5.1简述
 构建一个Update_stu类public class Update_stu extends JPanel implements ActionListener//修改学生信息的Update_stu方法。在其中设置修改信息窗口的格式添加各种组件(按钮,文本框,标签),并用事件监视,获取文本框中的字符串,调用Query查找函数里的构造方法最终实现对数据库的更改。
3.5.2具体实现核心代码
在这里插入图片描述

	JTextField field[]=null;//文本框数组的声明与赋值
	String a[]=null;//此数组存放的是数据库表格中的“表头名称”。
	query.setTableName("stu");//找到名为“stu”的表格
	a=query.getField();//获取字段值的方法。
	field =new JTextField[n];//有几个值就建立几个文本输入框
for(int i=0;i<n;i++){//该for循环实现了显示修改信息窗口中的标签和文本框的设置。
	field[i]=new JTextField(10);
	if(a[i].equals("学号")==true)
		box1.add(new JLabel("* "+a[i]));
	else
		box1.add(new JLabel("  "+a[i]));//增加标签和文本框
		box1.add(Box.createVerticalStrut(12));//表头的垂直间距
		box2.add(field[i]);
		box2.add(Box.createVerticalStrut(8));//文本框的垂直间距
对数据库进行操作:
Update update=new Update();//调用update方法对数据库进行操作。
		update.setTableName("stu");
		update.setField(field);
		update.setA(a);
		update.Execute_Update(mark);
		JOptionPane.showMessageDialog(this, "更新成功!!","消息对话框",JOptionPane.WARNING_MESSAGE);

3.5.3事件处理描述
在这里插入图片描述

发生事件1:当填完数据后,点击“修改”按钮:判断标签数组的第一个项,若为‘学号’且文本框数组第一项为空,触发事件弹出消息提示框提示:“带*的文本框必须填写!!”。
发生事件2:填完数据后,点击“修改”按钮:触发事件弹出消息提示框显示:“请确保你的学号是正确的,否则会更新失败!!!如果学号错误请先删除再添加”。

窗口实现测试
在这里插入图片描述

3.6用于修改数据库的函数:Update
3.6.1简述
 Update类,通过先对数据库进行连接,获取数据库的数据,再通过事件监视,比对用户输入内容与数据库的内容,比对成功后触发事件,将用户输入的信息覆盖原数据库信息。
3.6.2具体实现以及核心代码
在这里插入图片描述

if(i!=mark)//即:当数据库中无学号与之对应的时候,执行下一条赋值语句。
SQL[i]="update "+tableName+" set "+a[i]+" ='"+field[i].getText().toString()+"' where "+a[mark]+" ='"+field[mark].getText().toString()+"'";//此条语句是赋值语句,将用户输入文本框中的内容取出来,赋值给SQL[i]数组。
	for(int i=0;i<field.length;i++)
				if(i!=mark&&field[i].getText().toString().equals("")==false)//即:当数据库中无学号与mark对应且文本框中的值不为空时执行此语句。
			sql.executeUpdate(SQL[i]);
			con.close();
			for(int i=0;i<field.length;i++)
			field[i].setText(null);//再次将文本框设为空,方便下一次使用。

3.7添加学生信息函数:Insert_Stu
3.7.1简述
 创建Insert_Stu类:public class Insert_stu extends JPanel implements ActionListener,类似与前文的Update_stu实现方式大致相同,在其中设置修改信息窗口的格式添加各种组件(按钮,文本框,标签),并用事件监视,获取文本框中的字符串,调用insert方法里的构造方法最终实现对数据库处理即新增数据库成员。
3.7.2核心代码及其实现
在这里插入图片描述

JTextField field[]=null;//文本框数组的声明与赋值
	String a[]=null;//此数组存放的是数据库表格中的“表头名称”。
	query.setTableName("stu");//找到名为“stu”的表格
	a=query.getField();//获取字段值的方法。
	field =new JTextField[n];//有几个值就建立几个文本输入框
for(int i=0;i<n;i++){//该for循环实现了显示修改信息窗口中的标签和文本框的设置。
	field[i]=new JTextField(10);
	if(a[i].equals("学号")==true) box1.add(new JLabel("* "+a[i]));
else box1.add(new JLabel("  "+a[i]));//增加标签和文本框
	 box1.add(Box.createVerticalStrut(12));//表头的垂直间距
	 box2.add(field[i]);
	  box2.add(Box.createVerticalStrut(8));//文本框的垂直间距
if(i==n){//当循环经历次数等于文本框个数时执行此语句。
		Insert insert=new Insert();//声明并创建Insert对象
		insert.setTableName("stu");
		insert.setField(field);
		insert.setA(a);
		insert.Execute_Insert(mark);
			}//调用Insert中的方法操作数据库,将数据插入到数据库中即更新数据库。

3.7.3事件处理描述
在这里插入图片描述

事件1:当field[i].getText().toString()的值有为空的时候,触发事件,弹出消息对话框显示:必须全部填写。
事件2:当i=n时,即处理完事件1后触发事件2:调用Insert中的方法操作数据库,将数据插入到数据库中即更新数据库。
窗口实现测试:
在这里插入图片描述

3.8添加学生信息函数:Insert
3.8.1简述
 类似Update方法函数;Insert类,通过先对数据库进行连接,获取数据库的数据,再通过事件监视,比对用户输入内容与数据库的内容,比对成功后触发事件,将用户输入的信息插入数据库中更新数据库信息。
3.8.2核心代码及其实现
在这里插入图片描述

url="jdbc:sqlserver://localhost:1433;DatabaseName=Student";
SQL="insert"+tableName+"("+a[mark]+")values('"+field[mark].getText().toString()+"')";//此条语句是赋值语句,将用户输入文本框中的内容取出来,赋值给SQL[i]数组。
		con=DriverManager.getConnection(url,"ast","123456");
//连接数据库,账户为ast,密码为123456;
		sql=con.createStatement();//通过connection数据库链接对象 创建一个statement对象数据库操作对象
		sql.execute(SQL);// 用于执行返回多个结果集、多个更新计数或二者组合的语句  con.close();
		update =new Update();//声明并创建update对象。
		update.setTableName(tableName);
		update.setField(field);
		update.setA(a);
		update.Execute_Update(mark);//以上为update调用自身方法操作数据库。JOptionPane.showMessageDialog(this, "添加成功!!!","消息对话框",JOptionPane.WARNING_MESSAGE);//触发事件:显示消息对话框‘添加成功‘,属于警告对话框。
			for(int i=0;i<field.length;i++)
				field[i].setText(null);;
		}//对文本框中的内容进行释放,便于下一次使用。

3.9查找学生信息的Search_stu函数
3.9.1简述
 类似于插入函数与更改函数,本修改函数也是先实现窗口,通过加载标签和文本框以及按钮等组件,输出时也要有一个窗口,在其中加入一个可滚动窗格,并加载滑动条组件,将表格放在窗格中,在调用Search函数,从数据库获取数据显示出来。
3.9.2核心代码解释及实现
在这里插入图片描述

field =new JTextField[n];//有几个标签就创建几个文本框,
		for(int i=0;i<n;i++){//有几个标签就执行几次循环。
			box[i]=Box.createHorizontalBox();
			field[i]=new JTextField(8);
		if(a[i].equals("学号")==true){//如果首项是学号这两个字
			box[i].add(new JLabel("  "+a[i]));//载入标签到窗口中
				box[i].add(Box.createHorizontalStrut(8));
				box[i].add(field[i]);//载入文本框到窗口中。

3.9.3事件处理描述
在这里插入图片描述

for(i=0;i<n;i++){
		if(field[i].getText().toString().equals("")==true)
			sum++;
	}//计数功能,为下文初始化sum。
	System.out.println(sum);
	if(sum==n)//即:程序窗口框中的文本框中无任何内容!
		JOptionPane.showMessageDialog(this, "你未输入任何内容,请重新输入!","消息对话框",JOptionPane.WARNING_MESSAGE);//触发事件:弹出消息对话框提示警告你未输入任何内容,请重新输入!
	else{
		Search search=new Search();
		search.setTableName("stu");
		search.setField(field);
		search.setA(a);
		search.Execute_Search();	
		object=null;b=null;
		query=new Query();
		query.setTableName("stu");
		object=search.getRecord();
		search_table.setDataVector(object, a);
	}//调用Search类中各个方法操作数据库,并显示内容。

窗口实现测试
在这里插入图片描述

3.10查找函数Search
3.10.1简述
 查找函数的构建与前面插入函数、浏览函数等都是相同的构建方法,都是先于数据库建立连接,获取其中的数据,与自身数据相比,从而根据具体要求实现查找、插入、更改等操作。
3.10.2核心代码实现及解释
在这里插入图片描述

for(int i=0;i<a.length;i++){//有几个标签就执行几次这个循环。
	if(field[i].getText().toString().equals("")==false){//当文本框为空的时候执行
	if(sum==0)
		SQL=SQL+a[i]+" = '"+field[i].getText().toString()+"'";//赋值语句,包含标签和文本框中的内容。
	else
SQL=SQL+" and "+a[i]+" = '"+field[i].getText().toString()+"'";
	sum++;
			}
 
while(rs.next()){
		for(int i=1;i<=a.length;i++){
			object[ncase][i-1]=rs.getString(i);
				}
				ncase++;
			}
			con.close();
	for(int i=0;i<field.length;i++)
field[i].setText(null);//将文本框中的内容设置为空,方便下次使用。
		}

在这里插入图片描述

4. 测试数据

4.1管理员登录窗口测试
在这里插入图片描述

4.2项目总窗口测试(设置显示为信息总览组件窗口)
在这里插入图片描述
在这里插入图片描述

4.3修改信息窗口测试
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.4添加信息窗口测试
带星花的项是必须要填的(学号),其余项允许为空。
在这里插入图片描述
在这里插入图片描述

4.5查找信息窗口测试
可以分类别查询 例如下图是按学号查询的,也可以按性别查询或者是按出生日期查询等等。
在这里插入图片描述

按学号查询
在这里插入图片描述

按性别查询
在这里插入图片描述

5. 总结

  这次课程设计我收获了很多,遇到了很多的困难,其中最让我印象深刻的就是对于本地数据库的构建:在未接触数据库操作的前提下,我没有被苦难困难吓倒,而是迎面直上;我先是查阅课本,在发现课本上是内置数据库和我计划要用的数据库不同,我直接改变方向:百度!光是下载组件就花了很长时间;然后自己又为SQL server配置环境变量,安装管理器以操作管理SQL server。这其中困难重重,所以我去实验室请教老师,获益匪浅,最后花了将近半天的时间处理好,在没有任何知识储备的条件下完成了数据库的搭建
  接下来就是连接数据库,我又回到课本,发现语句是通用的,几经周折,我终于完成了数据库的构建并成功连接!在探索的过程中我发现,遇到困难不能死板的去处理,要灵活,利用一切可利用资源来帮助自己。在向老师请教的过程中,我学会了一中很重要并且很实用效果很好的发现错误代码的方法:注释代码!一部分一部分的去运行测试,将出错代码的范围缩小,从而发现错误并进行修改。在课程设计的过程中,对于有些同学在数据库这方面有相关问题的,我都会热心的帮助他们,当然同时也巩固了自己的能力。而从他们的代码或者编码思想中我也能获益良多,互相促进,共同进步。
  有关项目设计部分来说的话:我将项目文件分为10个部分:首先有两个窗口:管理员登录窗口以及实现其他功能的总窗口;其次就是查找类、插入类、浏览类、修改类这四个项目核心类,最后这四个核心具体实现类又一一对应这四个函数:查找、插入、浏览(查看)、修改,共10个部分在同一个package中,故对于访问权限问题没有过于重视,大部分都为友好类或者友好方法,具体实现在上文已有详细说明,故此处不在赘述。
  总之,这次的JAVA课程设计题目对于我而言还是有一定难度的;包括代码的编写以及数据库的创建及连接。但我利用一切可利用资源,教材、网络、老师、同学,最终完成了课程设计项目,说实话 这是一个煎熬的过程,包括读代码、写代码以及上网搜相关知识,期间由于作息不规律导致上火、眼睛模糊,不过等最终程序运行的那一刻,一切都值得了。我获益良多!

6.参考文献

Java大学实用教程(第四版);编著:耿祥义、张跃平;出版社:电子工业出版社;出版日期:2005年3月第一版。CSDN各大上传者。

惊喜

既然你看到了这里,需要项目源码的话那就私我叭~
由于太多人私信根本回复不过来啦!,我已经将项目文档打包发到了这篇文章上,大家需要的可以自行下载!


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

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

相关文章

eNSP小实验--实现全网互通

目录 一、建立以下拓扑图&#xff0c;并实现全网互通 二、分析 1、接入层交换机SW4、SW5划分vlan 2、汇聚层交换机SW2,SW3配置ip作为vlan网关&#xff0c;与SW1直连 3、核心交换机SW1配置ip 与汇聚层交换机和R1直连 4、SW1,SW2,SW3,R1配置静态路由&#xff0c;使得vlan10,…

京东体育用品销售数据分析与可视化系统

京东体育用品销售数据分析与可视化系统 前言数据爬取模块1. 数据爬取2. 数据处理3. 数据存储 数据可视化模块1. 数据查看2. 店铺商品数量排行3. 整体好评率4. 不同品牌市场占比5. 品牌差评率排名6. 品牌价格排名7. 品牌评论数量分布 创新点 前言 在体育用品行业&#xff0c;了…

IDEA卡顿,进行性能优化设置(亲测有效)——情况一

需求场景 IDEA重新激活后&#xff0c;运行IDEA卡的非常卡顿&#xff0c;没有运行项目&#xff0c;CPU占比也非常高: 原因分析 可能的原因是&#xff0c;在IDEA的配置中&#xff0c;给他分配的空间比较小 解决方式 步骤一 选择顶部导航栏中的Help&#xff0c;然后点击Edi…

小项目:迷宫二

目录 引言一、题目描述二、解题思路三、代码实现四、测试 引言 这个迷宫项目是今天参加学校的一个比赛出的题目&#xff0c;从早上九点基本搞到了四五点才完成&#xff0c;其实写出来发现基本思路其实挺简单的&#xff0c;就是想不好想&#xff0c;真的要各种的尝试&#xff0…

【数据分析之Numpy】Numpy中复制函数numpy.repeat()与numpy.tile()的使用方法及区别

一、简介 numpy.repeat()与numpy.tile()都是Numpy库中的复制函数&#xff0c;用于将数组中的元素重复指定的次数。 numpy.repeat()函数接受三个参数&#xff1a;要重复的数组、重复的次数和重复的轴。 numpy.tile()函数接受两个参数&#xff1a;要重复的数组和重复的次数。 二…

C语言学习第二十六天(算法的时间复杂度和空间复杂度)

1、算法效率 衡量一个算法的好坏&#xff0c;是从时间和空间两个方面来衡量的&#xff0c;换句话说就是从时间复杂度和空间复杂度来衡量的 这里需要补充一点&#xff1a;时间复杂度是衡量一个算法的运行快慢&#xff0c;空间复杂度是主要衡量一个算法运行所需要的额外空间。 …

面试 Java 算法高频题五问五答第一期

面试 Java 算法高频题五问五答第一期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;括号生成: 数字 n 代表生成括号的对数&#xff0c;请你设计一个…

neuq-acm预备队训练week 10 P1129 [ZJOI2007] 矩阵游戏

题目描述 小 Q 是一个非常聪明的孩子&#xff0c;除了国际象棋&#xff0c;他还很喜欢玩一个电脑益智游戏――矩阵游戏。矩阵游戏在一个 nn 黑白方阵进行&#xff08;如同国际象棋一般&#xff0c;只是颜色是随意的&#xff09;。每次可以对该矩阵进行两种操作&#xff1a; 行…

STM32F103RCT6开发板M3单片机教程04--按键检测

原画图讲解 本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; 首先了硬件连接原理&#xff0c;STM32F103RCT6开发板是mini最小系统板&#xff0c;板子在没并有按键。需要自行用面包板搭建。 硬件连接&#xff1a; PC10 -> KEY1 &#xff08;MCU内部上拉…

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本&#xff08;Waterdrip Capital&#xff09;的投资总监——Elaine&#xff0c;作为VC创投课程第5期的嘉宾&#xff0c;在北京时间12月17日(周日)晚上21:00 PM-22:00 PM&#xff0c;届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

TCP/IP详解——DNS 流量分析

文章目录 1. DNS 流量分析1.1 DNS 基本概念1.2 DNS 系统特性1.3 DNS 效率问题1.4 域名的组成1.5 域名解析系统1.5.1 域名解析过程 1.6 DNS 记录种类1.7 DNS 的报文格式1.7.1 DNS 报文中的基础结构部分1.7.2 DNS 查询报文中的问题部分1.7.3 DNS 响应报文中的资源记录部分1.7.4 示…

Unity中URP下的菲涅尔效果实现(个性化修改)

文章目录 前言一、我们修正一下上篇文章中&#xff0c;可能遗留的Bug1、N向量 变为 单位向量2、使颜色范围在合理区间 二、实现菲涅尔效果强弱可自定义调节三、修改菲涅尔效果颜色1、在属性面板定义颜色属性2、在常量缓冲区申明该参数3、在片元着色器中&#xff0c;用颜色和菲涅…

数据结构 AVL树概念以及实现插入的功能(含Java代码实现)

为啥要有avl树 avl树是在二叉搜索树下的一种进阶形式,是为了防止二叉搜索树在极端情况下产生的链表化的场景,从而在二叉搜索树的基础上,加上了某些条件来阻止这种极端情况的产生,但不是保证完全平衡,而是放开了一定的条件,使得这种情况不那么难以满足.(条件:左右子树的高度差的…

【Vulnhub 靶场】【IA: Keyring (1.0.1)】【中等】【20210730】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/ia-keyring-101,718/ 靶场下载&#xff1a;https://download.vulnhub.com/ia/keyring-v1.01.ova 靶场难度&#xff1a;中等 发布日期&#xff1a;2021年07月30日 文件大小&#xff1a;1.1 GB 靶场作者&#xf…

Day63力扣打卡

打卡记录 寻找最近的回文数&#xff08;模拟&#xff09; 链接 class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y …

ArcMap自定义脚本工具箱迁移至ArcGIS pro

本文记录了将ArcMap10.7创建的自定义脚本工具箱&#xff08;.tbx&#xff09;迁移至ArcGIS pro的过程 ArcGIS Pro使用的是python版本与ArcMap不同&#xff0c;前者为python3&#xff0c;后者为python2。由于python3 和 python2 的部分语法不兼容&#xff0c;以及一些地理处理工…

性能测试之Artillery(示例及指标)

官方文档&#xff1a;https://www.artillery.io/docs/get-started/first-test PS:文档挺详细&#xff0c;教程比较全 示例 config:http:extendedMetrics: truetarget: http://127.0.0.1:8005phases:- duration: 10 # 持续时间arrivalRate: 10 # 每秒创建10个用户rampTo: 100 …

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

LV.13 D5 uboot概述及SD卡启动盘制作 学习笔记

一、uboot概述 1.1 开发板启动过程 开发板上电后首先运行SOC内部iROM中固化的代码(BL0)&#xff0c;这段代码先对基本的软硬件环境(时钟等...)进行初始化&#xff0c;然后再检测拨码开关位置获取启动方式&#xff0c;然后再将对应存储器中的uboot搬移到内存&#xff0c;然后跳…

目标跟踪 MOT数据集和可视化

目录 MOT15数据集格式简介 gt可视化 本人修改的GT可视化代码&#xff1a; MOT15数据集格式简介 以下内容转自&#xff1a;【目标跟踪】MOT数据集GroundTruth可视化-腾讯云开发者社区-腾讯云 MOT15数据集下载&#xff1a;https://pan.baidu.com/s/1foGrBXvsanW8BI4eybqfWg?…