基于JAVA的聊天(ICQ)系统的设计于实现

一、绪论

ICQ是英文"I seek you "的简称,中文意思是我找你。ICQ最大的功能就是即时信息交流,只要记得对方的号码,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就可以随时交流。ICQ源于以色列特拉维夫的Mirabils公司。该公司成立于1996年7月,也就是在这个时候,互联网上最出名,下载使用人数最多的免费软件ICQ诞生了。可能是其不断增加的用户和广阔的前景以及广泛的应用前景和巨大的市场潜力,Mirabils的ICQ最终被美国在线AOL收购。由于ICQ的成功,推动了ICQ的本土化,就中文的ICQ而言,现在已经越来越多,比如著名的深圳腾迅公司推出的OICQ(现在由于版权问题,已改名为QQ2001),还有由TOM.COM推出的Tomq等,这些软件技术都很好,而且简单易用,成为中国网民最喜欢的通信软件。

但是这些公司都只提供软件的客户端程序免费下载,而不提供其服务器程序,因此对于未与互联网连接的私有网络,这些软件就用不上了。当然网上也有免费的类似ICQ的服务器提供下载,但是好多都不提供源程序,即使有,其说明也很简单,我很想知道它是怎么回事,所以我就试着做了。

二、设计

1.为什么选择JAVA?


Java是Sun Microsystem公司的James Gosling开发的编程语言。它以C++为基础,但是却是一个全新的软件开发语言。Java是一个简单,面象对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言-------这是 Sun给Java的定义。

Sun公司的口号就是"网络就是计算机",Java能使所有东西从桌面计算平稳的转变为基于网络的计算,它是专门为此而建立的,并显然是为了完成这个任务而来的。使用Java,我们可以相对轻松的一天编写一个有条理的网络程序。今天,Java的网络功能正在飞跃发展,不断有新的特性增加到这个有价值的基础上,JavaSoft实验室正在不断努力使Java更加完善。

2.数据库设计


系统可以采用任何一种流行的,Java支持的数据库,本系统采用了Microsoft公司的SQL Server2000作为后台数据库。通过对现在流行的一些Icq的参考,建立数据库,名为javaicq,数据库共建立两个表,一个是用户的基本信息,包括呢称,Jicq号码等。一个是用户的好友表,包括用户自己的号码和好友的号码。

(1)用户的基本信息表(表名icq)

序号 字段名 含义 数据类型 NULL

1 Icqno 用户的号码 int No

2 Nickname 用户的呢称 Char No

3 Password 用户的密码 Char No

4 Status 用户在线否 Bit No

5 Ip 用户的IP地址 Char Yes

6 Info 用户的资料 Varchar Yes

7 Pic 用户的头像号 Int Yes

8 Sex 用户性别 Char Yes

9 Email 用户的email Char Yes

10 Place 用户的籍贯 Char yes

其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择)

(2)用户的好友表(表名friend)

序号 字段名 含义 数据类型 NULL

1 Icqno 用户的号码 Int No

2 Friend 好友的号码 Int No

3.系统模式及程序(具体程序参看源程序)


系统采用客户/服务器摸式(如图)

服务器程序代码如下:(部分)

import java.io.*;
 import java.net.*;
 import java.sql.*;
 import java.util.Vector;
 class ServerThread extends Thread{//继承线程
 private Socket socket;//定义套接口
 private BufferedReader in;//定义输入流
 private PrintWriter out;//定义输出流
 int no;//定义申请的jicq号码
 public ServerThread(Socket s) throws IOException {//线程构造函数
   socket=s;//取得传递参数
  in=new BufferedReader(new InputStreamReader(socket.getInputStream()));//创建输入流
  out=new PrintWriter(new BufferedWriter(new    OutputStreamWriter(socket.getOutputStream())),true);//创建输出流
   start();//启动线程
   }

 public void run(){//线程监听函数
 try{ while(true){
                    String str=in.readLine();//取得输入字符串
                    if(str.equals("end"))break;//如果是结束就关闭连接
       else if(str.equals("login")) {//如果是登录
          try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
         Connection c=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
         String sql="select nickname,password from icq where icqno=?";
           //准备从数据库选择呢称和密码
  PreparedStatement prepare=c.prepareCall(sql);//设定数据库查寻条件
          String icqno=in.readLine();
                int g=Integer.parseInt(icqno);//取得输入的jicq号码
                 System.out.println(icqno);
                 String passwd=in.readLine().trim();//取得输入的密码
                 System.out.println(passwd);
                 prepare.clearParameters();
                 prepare.setInt(1,g);//设定参数
                 ResultSet r=prepare.executeQuery();//执行数据库查寻
                 if(r.next()){//以下比较输入的号码于密码是否相同
                     String pass=r.getString("password").trim();
                     System.out.println(pass);
                     if(passwd.regionMatches(0,pass,0,pass.length()))
{ out.println("ok");
//如果相同就告诉客户ok
//并且更新数据库用户为在线
//以及注册用户的ip 地址
                      //*************register ipaddress
                      String setip="update icq set ip=? where icqno=?";
                      PreparedStatement prest=c.prepareCall(setip);
                      prest.clearParameters();
                      prest.setString(1,socket.getInetAddress().getHostAddress());
                      prest.setInt(2,g);
                      int set=prest.executeUpdate();
                      System.out.println(set);
                      //*************ipaddress
                      //set status online
                      String status="update icq set status=1 where icqno=?";
                      PreparedStatement prest2=c.prepareCall(status);
                       prest2.clearParameters();
                       prest2.setInt(1,g);
                       int set2=prest2.executeUpdate();
                      System.out.println(set2);
                      //set online
}
//否者告诉客户失败
                      else out.println("false");r.close();c.close();}
                 else{ out.println("false");
                 System.out.println("false");
                r.close();
                c.close();}
                }catch (Exception e){e.printStackTrace();}
                socket.close();
                }//end login
             //登录结束
  //以下为处理客户的新建请求
else  if(str.equals("new")){
   try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库
        Connection c2=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
String newsql="insert into icq(nickname,password,email,info,place,pic) values(?,?,?,?,?,?)";
//准备接受用户的呢称,密码,email,个人资料,籍贯,头像等信息
       PreparedStatement prepare2=c2.prepareCall(newsql);
       String nickname=in.readLine().trim();
       String password=in.readLine().trim();
       String email=in.readLine().trim();
       String info=in.readLine().trim();
       String place=in.readLine().trim();
       int picindex=Integer.parseInt(in.readLine());
       prepare2.clearParameters();
       prepare2.setString(1,nickname);
       prepare2.setString(2,password);
       prepare2.setString(3,email);
       prepare2.setString(4,info);
       prepare2.setString(5,place);
       prepare2.setInt(6,picindex);
       int r3=prepare2.executeUpdate();//执行数据库添加
String sql2="select icqno from icq where nickname=?";
//以下告诉客户其注册的号码
       PreparedStatement prepare3=c2.prepareCall(sql2);
        prepare3.clearParameters();
       prepare3.setString(1,nickname);
       ResultSet r2=prepare3.executeQuery();
     while(r2.next()){
      //out.println(r2.getInt(1));
      no=r2.getInt(1);
      System.out.println(no);
     }
      out.println(no);
      out.println("ok");
c2.close();
//完毕
     }catch (Exception e){e.printStackTrace();out.println("false");}
     socket.close();
   }//end new
 //新建用户结束
 //以下处理用户查找好友
 else if(str.equals("find")){
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c3=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
  //以下连接数据库,并且返回其他用户的呢称,性别,籍贯,个人资料等信息
     String find="select nickname,sex,place,ip,email,info from icq";
    Statement st=c3.createStatement();
    ResultSet result=st.executeQuery(find);
     while(result.next()){
     out.println(result.getString("nickname"));
     out.println(result.getString("sex"));
     out.println(result.getString("place"));
     out.println(result.getString("ip"));
      out.println(result.getString("email"));
       out.println(result.getString("info"));
     }//while end
     out.println("over");
     GET ICQNO
     int d,x;
boolean y;
//以下返回用户的jicq号码,头像号,及是否在线
     ResultSet iset=st.executeQuery("select icqno,pic,status from icq");
     while(iset.next()){
     d=iset.getInt("icqno");
     out.println(d);
     x=iset.getInt("pic");//pic info
     out.println(x);
     y=iset.getBoolean("status");
      if (y){out.println("1");}
           else {out.println("0");}
      //System.out.println(d);
     }
    // end send jicqno
     iset.close();
     /icqno end
      c3.close();result.close();
 }catch (Exception e){e.printStackTrace();System.out.println("false");}
 //socket.close();
 }//end find
 //查找好友结束
 //以下处理用户登录时读取其好友资料
 else if(str.equals("friend")){
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c4=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
 //以下连接好友表,返回用户的好友名单
     String friend="select friend from friend where icqno=?";
     PreparedStatement prepare4=c4.prepareCall(friend);
        prepare4.clearParameters();
         int icqno=Integer.parseInt(in.readLine());
         System.out.println(icqno);
         prepare4.setInt(1,icqno);
       ResultSet r4=prepare4.executeQuery();
       Vector friendno=new Vector();//该矢量保存好友号码
        while(r4.next()){
      friendno.add(new Integer(r4.getInt(1)));
     }
 //read friend info
 //以下告诉客户其好友的呢称,号码,ip地址,状态,头像,个人资料等信息
    out.println(friendno.size());
          for(int i=0;i<friendno.size();i++){
         String friendinfo="select nickname,icqno,ip,status,pic,email,info from icq where  icqno=?";
      PreparedStatement prepare5=c4.prepareCall(friendinfo);
      prepare5.clearParameters();
       prepare5.setObject(1,friendno.get(i));
      ResultSet r5=prepare5.executeQuery();
      boolean status;
         while(r5.next()){
       out.println(r5.getString("nickname"));
           out.println(r5.getInt("icqno"));
           out.println(r5.getString("ip"));
         status=r5.getBoolean("status");
         if (status)out.println("1");
           else {out.println("0");}
        out.println(r5.getInt("pic"));
        out.println(r5.getString("email"));
        out.println(r5.getString("info"));
     } //while
     r5.close();
}//for
//发送完毕
     out.println("over");
     System.out.println("over");
      c4.close();r4.close();
 }catch (Exception e){e.printStackTrace();System.out.println("false");}
 //socket.close();
 }//end friend
 //读取好友信息完毕
 //以下处理用户添加好友
 else if(str.equals("addfriend")){
 System.out.println("add");
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c6=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
 //连接数据库,根据接受的用户号码及好友号码向好友表添加记录
        int friendicqno=Integer.parseInt(in.readLine());
          System.out.println(friendicqno);
         int myicqno=Integer.parseInt(in.readLine());
            System.out.println(myicqno);
            String addfriend="insert into friend values(?,?)";
             PreparedStatement prepare6=c6.prepareCall(addfriend);
      prepare6.clearParameters();
       prepare6.setInt(1,myicqno);
       prepare6.setInt(2,friendicqno);
       int  r6=0;
      r6=prepare6.executeUpdate();
      if(r6==1) System.out.println("ok  addfrien");
      else  System.out.println("false addfriend");

   }catch (Exception e){e.printStackTrace();System.out.println("false");}

  //socket.close();
  System.out.println("over addfriend");
  }//end addfriend
  //用户添加好友结束
  //add new friend who add me
  //以下处理其他用户如果加我,我就加他
  else if(str.equals("addnewfriend")){
  System.out.println("add");
    try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c6=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
    //连接数据库,根据接受的用户号码及好友号码向好友表添加记录
        int friendicqno=Integer.parseInt(in.readLine());
          System.out.println(friendicqno);
         int myicqno=Integer.parseInt(in.readLine());
            System.out.println(myicqno);
            String addfriend="insert into friend values(?,?)";
             PreparedStatement prepare6=c6.prepareCall(addfriend);
      prepare6.clearParameters();
       prepare6.setInt(1,myicqno);
       prepare6.setInt(2,friendicqno);
       int  r6=0;
      r6=prepare6.executeUpdate();
      if(r6==1) System.out.println("ok  addfrien");
      else  System.out.println("false addfriend");

    String friendinfo="select nickname,icqno,ip,status,pic,email,info from icq where icqno=?";
   //如果成功,就向用户传递好友的基本信息,比如呢称等
      PreparedStatement prepare5=c6.prepareCall(friendinfo);
      prepare5.clearParameters();
       prepare5.setInt(1,friendicqno);
      ResultSet r5=prepare5.executeQuery();
      boolean status;
         while(r5.next()){
         System.out.println("dsf");
       out.println(r5.getString("nickname"));
           out.println(r5.getInt("icqno"));
           out.println(r5.getString("ip"));
         status=r5.getBoolean("status");
         if (status)out.println("1");
           else {out.println("0");}
        out.println(r5.getInt("pic"));
        out.println(r5.getString("email"));
        out.println(r5.getString("info"));
     } //while
       out.println("over");
     r5.close();
     c6.close();
    }catch (Exception e){e.printStackTrace();System.out.println("false");}
  System.out.println("over addnewfriend");
   }//end addfriend
       //结束处理其他用户如果加我,我就加他
     //delete friend
  //以下执行用户删除好友
    else if(str.equals("delfriend")){
 System.out.println("del");
 try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c7=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
   //连接数据库,根据接受的用户号码及好友号码向好友表删除记录
        int friendicqno=Integer.parseInt(in.readLine());
          System.out.println(friendicqno);
         int myicqno=Integer.parseInt(in.readLine());
            System.out.println(myicqno);
            String addfriend="delete from friend where icqno=? and friend=?";
             PreparedStatement prepare7=c7.prepareCall(addfriend);
      prepare7.clearParameters();
       prepare7.setInt(1,myicqno);
       prepare7.setInt(2,friendicqno);
       int  r7=0;
      r7=prepare7.executeUpdate();
      if(r7==1) System.out.println("ok  delfrien");//成功
      else  System.out.println("false delfriend");//失败
   }catch (Exception e){e.printStackTrace();System.out.println("del false");}
   }//end delete friend
   //执行用户删除好友结束
  //以下处理用户退出程序
  else if(str.equals("logout")){
  try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c8=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
  //连接数据库,根据接受的用户号码,将其状态字段设为0,及ip地址设为空
         int myicqno=Integer.parseInt(in.readLine());
            System.out.println(myicqno);
             String status="update icq set status=0 , ip=' ' where icqno=?";
                      PreparedStatement prest8=c8.prepareCall(status);
                       prest8.clearParameters();
                       prest8.setInt(1,myicqno);
                   int r8=prest8.executeUpdate();
                     if(r8==1) System.out.println("ok  logout");
      else  System.out.println("false logout");
  }catch (Exception e){e.printStackTrace();System.out.println("logout false");}
  }//logout end
  //处理用户退出程序结束
  //get who add me as friend
  //以下处理那些人加了我为好友,以便上线通知他们
  else if(str.equals("getwhoaddme")){
  System.out.println("getwhoaddme");
   try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection c9=DriverManager.getConnection("jdbc:odbc:javaicq"," "," ");
   //连接数据库,根据我的号码,从好友表中选择谁加了我
        int myicqno=Integer.parseInt(in.readLine());
            System.out.println(myicqno);
            String getwhoaddme="select icqno from friend where friend=?";
             PreparedStatement prepare6=c9.prepareCall(getwhoaddme);
      prepare6.clearParameters();
       prepare6.setInt(1,myicqno);
      ResultSet r6=prepare6.executeQuery();
    Vector who=new Vector();
        while(r6.next()){
      who.add(new Integer(r6.getInt(1)));
   }//end while
 //然后告诉这些好友的ip地址,然后发给用户以便告诉其他客户我上线了
    for(int i=0;i<who.size();i++){
     String whoinfo="select ip from icq where icqno=? and status=1";
      PreparedStatement prepare=c9.prepareCall(whoinfo);
      prepare.clearParameters();
       prepare.setObject(1,who.get(i));
      ResultSet r=prepare.executeQuery();
       while(r.next()){
         out.println(r.getString("ip"));
            } //while
           r.close();
         }//for
     out.println("over");
     System.out.println("over");
      c9.close();r6.close();
  }catch (Exception e){e.printStackTrace();System.out.println("false");}
  }//end get who add me as friend
 //处理上线结束
   System.out.println("Echo ing :"+str);
    }  System.out.println("Close...");
      }catch(IOException e){}//捕或异常
      finally {try{socket.close();}
                     catch(IOException e){}
    }
  }
}
  public class Server{//主服务器类
  public static void main(String args[])throws IOException{
  ServerSocket s=new ServerSocket(8080);//在8080端口创建套接口
 System.out.println("Server start.."+s);
  try{
     while(true){Socket socket=s.accept();//无限监听客户的请求
                      System.out.println("Connectino accept:"+socket);
                  try{new ServerThread(socket);//创建新线程
                  }catch(IOException e){socket.close();}
                }
      }finally{s.close();}//捕或异常
    }
  }//服务器程序结束

全部论文与代码下载:https://download.csdn.net/download/aszhangwendi/88880818

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GenAI助力DevOps,塑造软件工程的未来

自 2022 年以来&#xff0c;GenAI 无疑已成为一种普遍的技术趋势。在本文中&#xff0c;我们将探索 DevOps 中令人兴奋的 GenAI 领域&#xff0c;讨论其潜在优势、局限性、新兴趋势和最佳实践&#xff0c;深入了解 AI 支持的 DevOps 前沿世界&#xff0c;并探索这一强大组合如何…

Redis的主从搭建

1.准备两台机器&#xff0c;安装好redis 2.修改从服务器的redis配置 slaveof <masterip> <masterport>两个参数 masterip 主的ip 主的端口号 masterport 3. 启动redis 1.先启动主机redis 2.再启用从机redis 主机redis日志打印 从机redis 日志打印

水经微图Web版1.6.0发布

让每一个人都有自己的地图&#xff01; 水经微图&#xff08;简称“微图”&#xff09;新版已上线&#xff0c;在该版本中主要新增了点线面图层分组样式设置、图层排序并按序绘制、KML支持矢量符号的存储、KML支持态势标绘要素存储和新增历史地图文本样式等。 现在&#xff0…

Tomcat相关基础以及安装运行

目录 一、web概念 二、常见的web服务器 三、Tomcat 安装 下载&#xff1a; 安装&#xff1a; 四、Tomcat 目录结构 五、Tomcat 启动停止 一、web概念 软件架构&#xff1a; B/S&#xff1a; 浏览器/服务器端 ‐‐‐‐‐‐‐‐‐‐‐‐> 京东&#xff0c;网易&#xff0c…

[技巧]Arcgis之图斑四至点批量计算

前言 上一篇介绍了arcgis之图斑四至范围计算&#xff0c;这里介绍的图斑四至点的计算及获取&#xff0c;两者之间还是有差异的。 [技巧]Arcgis之图斑四至范围计算 这里说的四至点指的是图斑最东、最西、最南、最北的四个地理位置点坐标&#xff0c;如下图&#xff1a; 四至点…

Web组态可视化编辑器 快速绘制组态

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现Web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转变…

禅道:提bug、管理case 7.0

一、禅道的介绍 &#xff08;1&#xff09;定义禅道是一个项目管理工具&#xff0c;也是一个bug管理工具&#xff0c;还是一个用例管理工具。 &#xff08;2&#xff09;作用&#xff1a;为了解决众多企业在管理中出现混乱&#xff0c;无序的现象&#xff0c;开发出来 &…

Java智慧云HIS医院信息化系统源码 更具灵活性、扩展性

目录 什么是云HIS 趋势与转变 HIS上云后有哪些好处 解决方案 云HIS组成 1、门诊挂号 2、住院管理 3、电子病历 4、药物管理 5、统计报表 6、综合维护 7、运营运维 什么是云HIS 云HIS是一种基于云计算技术的医院信息管理系统。云HIS可以帮助医院管理各类医院信息&a…

工作电压范围宽的国产音频限幅器D2761用于蓝牙音箱,输出噪声最大仅-90dBV

近年来随着相关技术的不断提升&#xff0c;音箱也逐渐从传统的音箱向智能音箱、无线音箱升级。同时在消费升级的背景下&#xff0c;智能音箱成为人们提升生活品质的方式之一。智能音箱是智能化和语音交互技术的产物&#xff0c;具有点歌、购物、控制智能家居设备等功能&#xf…

MyBatis 学习(六)之动态 SQL

目录 1 动态 SQL 介绍 2 if 标签 3 where 标签 4 set 标签 5 trim 标签 6 choose、when、otherwise 标签 7 foreach 标签 8 bind 标签 1 动态 SQL 介绍 动态 SQL 是 MyBatis 强大特性之一&#xff0c;极大的简化我们拼装 SQL 的操作。MyBatis 的动态 SQL 是基于 OGNL 的…

【ArcPy】简化ArcGISPro默认Python环境体量

参考文献 安装 ArcPy—ArcGIS Pro | 文档

利用IP地址识别风险用户:保护网络安全的重要手段

随着互联网的发展和普及&#xff0c;网络安全问题日益突出&#xff0c;各种网络诈骗、恶意攻击等风险不断涌现&#xff0c;给个人和企业的财产安全和信息安全带来了严重威胁。在这样的背景下&#xff0c;利用IP地址识别风险用户成为了保护网络安全的重要手段之一。IP数据云探讨…

太阳能供电井盖-物联网智能井盖监测系统-旭华智能

在这个日新月异的科技时代&#xff0c;城市的每一个角落都在悄然发生变化。而在这场城市升级的浪潮中&#xff0c;智能井盖以其前瞻性的科技应用和卓越的安全性能&#xff0c;正悄然崭露头角&#xff0c;变身马路上的智能“眼睛”&#xff0c;守护城市安全。 传统的井盖监测系统…

港大提出GraphEdit, 图数据编辑大模型!

论文链接&#xff1a;https://arxiv.org/abs/2402.15183 代码链接&#xff1a;https://github.com/HKUDS/GraphEdit 摘要 图结构学习&#xff08;Graph Structure Learning, GSL&#xff09;旨在通过生成新的图结构来捕捉图结构数据中节点之间的内在依赖性和交互关系。 图神…

SpringCloud微服务-Docker基本操作

Docker基本操作 文章目录 Docker基本操作1、镜像操作命令1.1、从DockerHub中拉取一个镜像并且查看1.2、镜像的导出和导入 2、容器相关命令2.1、创建运行一个Nginx容器2.2、进入容器&#xff0c;并且修改容器中的文件 3、数据卷3.1、操作数据卷命令3.2、案例实战-创建数据卷3.3、…

董兆祥出席工业废水资源化,开创变废为宝新途径演讲

演讲嘉宾&#xff1a;董兆祥 董事长 河北奥博水处理有限公司 演讲题目&#xff1a;工业废水资源化&#xff0c;开创变废为宝新途径 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&#xff0c;热…

Vue+SpringBoot打造校园超市管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 供应商模块2.2 超市商品模块2.3 超市账单模块 三、系统设计3.1 前端架构设计3.2 后端架构设计 四、系统实现五、核心代码5.1 查询商品5.2 删除商品5.3 查询供应商5.4 查询账单5.5 新增账单 六、免责说明 一、摘要 1.1 …

UI自动化-(web端下拉选择框弹出框滚动条操作-实操入门)

1、下拉选择框操作 在 UI 自动化中,操作下拉选择框可以通过以下步骤进行: 定位下拉选择框元素:通过适当的元素定位方法,找到下拉选择框的元素。打开下拉框:例如通过点击(.click)来操作下拉框元素打开下拉框。选择选项:可以通过以下几种方式选择下拉框中的选项:根据索…

iOS卡顿原因与优化

iOS卡顿原因与优化 1. 卡顿简介 卡顿&#xff1a; 指用户在使用过程中出现了一段时间的阻塞&#xff0c;使得用户在这一段时间内无法进行操作&#xff0c;屏幕上的内容也没有任何的变化。 卡顿作为App的重要性能指标&#xff0c;不仅影响着用户体验&#xff0c;更关系到用户留…

基于springboot+vue的社区养老服务平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…