版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选文档 专业课程设计I基于JAVA的谈天室设计与实现一、课题内容和要求基于网络的文本交互软件的设计和实现,设计和实现一个简洁的基于网络的文本消息发送和接收软件。基本要求:该软件能实现文本消息发送和接收功能。提高要求(1):支持以多播方式发送文本消息,提高要求(2):性能稳定,界面友好。按课程设计报告的要求写出具体的设计和实现报告。二、设计思路分析谈天室是一项进行文本交互的软件,应用广泛,并且有用性强的一个格外典型的人机交互系统。在信息世界里,谈天工具的使用是格外频繁的,如MSN、QQ、校内通之类的谈天工具很多人都正在使用。此次设计的谈天室系统主要针对文本信息的传送和接收,不能像QQ一样进行图
2、片、音频、视频等文件的传输。虽然其功能简洁,但是在开发技术和过程中,能够充分学习和使用JAVA的技术,进一步培育了面对对象程序设计的思想,加深对面对对象程序设计四大特性的理解。人们日常生活中越来越多地使用谈天室这项应用来为自己的工作和学习服务。一个操作简洁,界面友好、运行稳定的谈天室对于小型局域网的用户可以起到很好的沟通作用。所谓谈天室就是一个可以让很多用户同时相互通信的网上园地,个人用户可以通过谈天室将自己融入整个主流社会中。依据目前使用谈天室的用户需求显示,用户对于谈天室主要有以下几点要求:(1)谈天功能:可以实时接收和发送信息,并能支持公聊和私聊的的方式,能够查看谈天记录,谈天过程中能对
3、字体、表情等进行设定等。(2)用户功能:可以随时注册和登录及注销,并能选择性加好友和删除好友以及查看对方的开放信息,还能看到对方的登录状态。(3)文件传输功能:用户可以共享资源,能发送及接收文件。(4)保密功能:用户可以设定自己的保密状态,使某些信息对于其他用户是不行见的。(5)系统稳定:客户端与服务端的连接稳定,不消灭或者少消灭连接不上的状况。三、概要设计 1、谈天室的简要功能介绍该简易谈天室是为很多宠爱谈天的用户开发设计的,和很多大型的网络谈天室相比该小谈天室功能比较简洁,但能实现基本的谈天功能,点对多、点对点谈天和基本的用户功能,登录、注销、查看在线用户等。(1) 用户设置:功能描述:用
4、户自定义自己的登录名,成功设置后,服务端能接收到新设置的用户名;(2) 登录功能:功能描述:在服务端开启的状况下,用户可以以自己自定义或者默认的登录名和登录地址端口登录到客户端,并能在服务器端显示登录状态;(3) 公聊:功能描述:用户在谈天室中可以选择与“全部人”谈天,谈天室中的其他在线用户可以正常接收并正确显示公聊消息。(4) 私聊:功能描述:用户可以选择与谈天室的在线用户列表中的其他用户谈天。双方的谈天记录对于谈天室的其他用户是不行见的。(5) 谈天心情:功能描述:用户在谈天的过程中可以选择相应的心情来表达自己的情感。(6) 系统消息:功能描述:服务端正常运行的过程中,在谈天室的每一个用户
5、都能接收服务器端发送的信息提示信息。 (7) 用户的状态.功能描述:每一个客户端用户都可以实时看到目前其他在线用户的状态。(8) 用户注销:功能描述:用户可以注销自己的账号,并重新登记登录名和地址。(9) 用户退出:功能描述:用户可以在正常状况下退出谈天室。(10) 服务端把握:功能描述:只有在服务端开启的状况下,用户才能登陆成功和谈天;用户设置的地址端口也必需与服务端的侦听端口全都,否则不能登录。2、模块描述本谈天室分为谈天室服务端和谈天室客户端,服务端与客户端之间通过套接口Socket(TCP)连接。在java中使用套接口相当简洁,Java API为处理套接口的通信供应了一个类.Socke
6、t.,使得编写网络应用程序相对简洁服务器接受多线程以满足多用户的恳求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接恳求,默认IP地址为:127.0.0.1默认端口为8888。(1) 谈天室服务端模块图:谈天室服务端端口服务启动服务发送系统消息停止服务退出服务器消息显示端口服务:输入要侦听的端口,默认为8888;启动服务:启动服务器,并开头在设置的端口中侦听,客户端用户可以登录并开头谈天;停止服务:关闭服务器,侦听结束。客户端用户不能再谈天;发送系统消息:服务器端给全部人或者个别用户发送消息。消息显示:可以显示全部用户的谈天记录,和上线、下线信息。
7、退出服务器:退出程序,并停止服务;(2)谈天室客户端模块图:谈天室客户端连接设置用户登录退出发 送接收谈天消 息用户注销用户设置用户设置:用户可以设置自己的用户名进行谈天;连接设置:用户可以设置自己的服务器的IP地址和端口号,默认的连接地址为:127.0.0.1:8888;用户登录:只能在谈天室服务端已开启的状况下,用户才能登录,用户登录之后才能开头谈天,登录后不能再修改用户设置和连接设置;用户注销:退出谈天,可以连续修改用户设置和连接设置;发送和接收谈天信息:用户可以给全部人或者个别用户发送信息,并能看到其他用户发送给自己或全部人的消息;退出:关闭全部谈天并退出客户端。(3) 流程图谈天室服
8、务器端口服务启动服务谈天室客户端登录连接设置谈天退出默认连接地址或用户名 设置侦听端口 默认端口:8888用户设置 设置用户名 设置IP地址和端口四、具体设计ActionListenerChatServer-port:public static in-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ ChatServer():public+init():public void +startService():public void+stopServic
9、e():public void +sendStopToAll():public void+sendMsgToAll(String):public void+ sendSystemMessage():public voidJFrameThreadServerListen- server: ServerSocket- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)ServerReceive-textare
10、a:JTextArea- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkList)1、谈天室服务器端设计:ServerListen- server: ServerSocket- userLinkList :UserLinkList- isStop: public Boolean+ServerListen(ServerSocket,JComboBox,JTextArea,JTextField,UserLinkLi
11、st)谈天室服务端主要包括7个文件,它们的功能如下:(1)ChatServer.java:包含名为ChatServer的public类,其主要功能为定义服务器端的界面,添加大事侦听与大事处理。调用ServerListen类来实现服务端用户上线与下线的侦听,调用ServerReceive类来实现服务器端的消息的收发。(2)ServerListen.java:该类实现服务端用户上线与下线的侦听。该类对用户上线下线的侦听是通过调用用户链表类(UserLinkList)来实现的,当用户上线与下线状况发生变化时,该类会对主类的界面进行相应的修改。(3)ServerReceive.java:该类是实现服务
12、器端的消息的收发的类。该类分别定义了向某用户及全部人发送消息的方法,发送的消息会显示在主界面类的界面上。(4)PortConf.java:该类继承自JDialog,是用户对服务器端侦听端口进行修改配置的类。(5)Node.java:用户链表的节点类,定义了链表中的用户。该类与前面所讲的链表节点Node类的功能相当。(6)UserLinkList.java:用户链表节点的具体实现类。该类通过构造函数构造用户链表,定义了添加用户,删除用户、返回用户数、依据用户名查找用户、依据索引查找用户这5个方法。(7)Help.java:服务端程序的挂念类。2、谈天室客户端设计:ActionListenerCh
13、atClient-port:public static in-serverSocket:ServerSocket-messageShow:JTextArea-userLinkList:UserLinkList-showStatus:JTextField+ ChatClient():public+init():public void +Connect():public void+DisConnect():public void +SendMessage():public voidJFrameThreadClientReceive- socket: Socket-output:ObjectOutp
14、utStream-input:ObjectInputStream +ClientReceive(Socket,ObjectOutputStream,ObjectInputStream,JComboBox,JTextArea,JTextField )谈天室客户端主要包括5个文件,它们的功能如下:(1)ChatClient.java:包含名为ChatClient的public类,其主要功能为定义客户端的界面,添加大事侦听与大事处理。该类定义了Connect()与DisConnect()方法实现与服务器的连接与断开连接。当登录到指定的服务器时,调用ClientReceive类实现消息收发,同时该类还
15、定义了SendMessage()方法来向其他用户发送带有表情的消息或者静静话。(2)ClientReceive.java:该类是实现服务器端与客户端消息收发的类。(3)ConnectConf.java:该类继承自JDialog,是用户对所要连接的服务器IP及侦听端口进行修改配置的类。(4)UserConf.java:该类继承自JDialog,是用户对连接到服务器所显示的用户名进行修改配置的类。(5)Help.java:客户端程序的挂念类。五、测试数据及其结果分析1、首先运行ChatServer工程文件,会消灭如下画面2、选择端口设置,可以设置您要侦听的端口号,不设置将默认端口号为8888;3、
16、选择启动服务,服务器开头在您刚才设置的端口中侦听;4、运行ChatClient工程文件,打开如下画面5、选择用户设置可以设置自己的登录名6、选择连接设置可以设置您的IP地址和端口号7、选择登录进入谈天室并可以开头跟全部人或者个别其他用户谈天,其中可以选择心情等;8、在服务端也可以选择给全部人或者个别用户发送消息;留意:客户端只有在服务端开启的状况下才能正常谈天。9、多人谈天的服务器端与客户端状况代码如下:package liaotian;/* * 用户链表 */public class UserLinkList Node root;Node pointer;int count;/* * 构造用
17、户链表 */public UserLinkList()root = new Node();root.next = null;pointer = null;count = 0;/* * 添加用户 */public void addUser(Node n)pointer = root;while(pointer.next != null)pointer = pointer.next;pointer.next = n;n.next = null;count+;/* * 删除用户 */public void delUser(Node n)pointer = root;while(pointer.nex
18、t != null)if(pointer.next = n)pointer.next = n.next;count -;break;pointer = pointer.next;/* * 返回用户数 */public int getCount()return count;/* * 依据用户名查找用户 */public Node findUser(String username)if(count = 0) return null;pointer = root;while(pointer.next != null)pointer = pointer.next;if(pointer.username
19、.equalsIgnoreCase(username)return pointer;return null;/* * 依据索引查找用户 */public Node findUser(int index)if(count = 0) return null;if(index 0) return null;pointer = root;int i = 0;while(i index + 1)if(pointer.next != null)pointer = pointer.next;elsereturn null;i+;return pointer;package liaotian;import j
20、ava.awt.*;import java.awt.event.*;import java.io.*;import .*;import javax.swing.*;/* * 谈天客户端的主框架类 */public class ChatClient extends JFrame implements ActionListener/* * */private static final long serialVersionUID = 1L;String ip = 127.0.0.1;/连接到服务端的ip地址int port = 8888;/连接到服务端的端口号String userName = 狂狂
21、;/用户名int type = 0;/0表示未连接,1表示已连接JComboBox combobox;/选择发送消息的接受者JTextArea messageShow;/客户端的信息显示JScrollPane messageScrollPane;/信息显示的滚动条JLabel express,sendToLabel,messageLabel ;JTextField clientMessage;/客户端消息的发送JCheckBox checkbox;/静静话JComboBox actionlist;/表情选择JButton clientMessageButton;/发送消息JTextField
22、showStatus;/显示用户连接状态Socket socket;ObjectOutputStream output;/网络套接字输出流ObjectInputStream input;/网络套接字输入流ClientReceive recvThread;/建立菜单栏JMenuBar jMenuBar = new JMenuBar();/建立菜单组JMenu operateMenu = new JMenu (操作(O);/建立菜单项JMenuItem loginItem = new JMenuItem (用户登录(I),new ImageIcon(face/98.gif);JMenuItem l
23、ogoffItem = new JMenuItem (用户注销(L),new ImageIcon(face/icon.gif);JMenuItem exitItem=new JMenuItem (退出(X),new ImageIcon(face/smile.gif);JMenu conMenu=new JMenu (设置(C);JMenuItem userItem=new JMenuItem (用户设置(U),new ImageIcon(face/messenger_big.gif);JMenuItem connectItem=new JMenuItem (连接设置(C),new ImageI
24、con(face/Uabrand.gif);JMenu helpMenu=new JMenu (挂念(H);JMenuItem helpItem=new JMenuItem (挂念(H),new ImageIcon(face/HelpCenter.gif);/建立工具栏JToolBar toolBar = new JToolBar();/建立工具栏中的按钮组件JButton loginButton;/用户登录JButton logoffButton;/用户注销JButton userButton;/用户信息的设置JButton connectButton;/连接设置JButton exitBu
25、tton;/退出按钮/框架的大小Dimension faceSize = new Dimension(400, 600);JPanel downPanel ;GridBagLayout girdBag;GridBagConstraints girdBagCon;public ChatClient()init();/初始化程序/添加框架的关闭大事处理this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.pack();/设置框架的大小this.setSize(faceSize);this.setVisible(true);setIconI
26、mage(getToolkit().getImage(face/love.gif);/设置运行时窗口的位置Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();this.setLocation( (int) (screenSize.width - faceSize.getWidth() / 2, (int) (screenSize.height - faceSize.getHeight() / 2);this.setResizable(false);this.setTitle(谈天室客户端); /设置标题/为操作菜
27、单栏设置热键VoperateMenu.setMnemonic(O);/为用户登录设置快捷键为ctrl+iloginItem.setMnemonic (I);loginItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_I,InputEvent.CTRL_MASK);/为用户注销快捷键为ctrl+llogoffItem.setMnemonic (L);logoffItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_L,InputEvent.CTRL_MASK);/为退出快捷
28、键为ctrl+xexitItem.setMnemonic (X);exitItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_X,InputEvent.CTRL_MASK);/为设置菜单栏设置热键CconMenu.setMnemonic(C);/为用户设置设置快捷键为ctrl+uuserItem.setMnemonic (U);userItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_U,InputEvent.CTRL_MASK);/为连接设置设置快捷键为ctrl+cc
29、onnectItem.setMnemonic (C);connectItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_C,InputEvent.CTRL_MASK);/为挂念菜单栏设置热键HhelpMenu.setMnemonic(H);/为挂念设置快捷键为ctrl+phelpItem.setMnemonic (H);helpItem.setAccelerator (KeyStroke.getKeyStroke (KeyEvent.VK_H,InputEvent.CTRL_MASK);/* * 程序初始化函数 */public v
30、oid init()Container contentPane = getContentPane();contentPane.setLayout(new BorderLayout();/添加菜单栏operateMenu.add (loginItem);operateMenu.add (logoffItem);operateMenu.addSeparator();operateMenu.add (exitItem);jMenuBar.add (operateMenu);conMenu.add (userItem);conMenu.addSeparator();conMenu.add (conne
31、ctItem);jMenuBar.add (conMenu);helpMenu.add (helpItem);jMenuBar.add (helpMenu);setJMenuBar (jMenuBar);/初始化按钮loginButton = new JButton(登录);logoffButton = new JButton(注销);userButton = new JButton(用户设置 );connectButton = new JButton(连接设置 );exitButton = new JButton(退出 );/当鼠标放上显示信息loginButton.setToolTipTe
32、xt(连接到指定的服务器);logoffButton.setToolTipText(与服务器断开连接);userButton.setToolTipText(设置用户信息);connectButton.setToolTipText(设置所要连接到的服务器信息);/将按钮添加到工具栏toolBar.add(userButton);toolBar.add(connectButton);toolBar.addSeparator();/添加分隔栏toolBar.add(loginButton);toolBar.add(logoffButton);toolBar.addSeparator();/添加分隔栏
33、toolBar.add(exitButton);contentPane.add(toolBar,BorderLayout.NORTH);checkbox = new JCheckBox(静静话);checkbox.setSelected(false);actionlist = new JComboBox();actionlist.addItem(微笑地);actionlist.addItem(兴奋地);actionlist.addItem(轻轻地);actionlist.addItem(生气地);actionlist.setSelectedIndex(0);/初始时loginButton.se
34、tEnabled(true);logoffButton.setEnabled(false);/为菜单栏添加大事监听loginItem.addActionListener(this);logoffItem.addActionListener(this);exitItem.addActionListener(this);userItem.addActionListener(this);connectItem.addActionListener(this);helpItem.addActionListener(this);/添加按钮的大事侦听loginButton.addActionListener
35、(this);logoffButton.addActionListener(this);userButton.addActionListener(this);connectButton.addActionListener(this);exitButton.addActionListener(this);combobox = new JComboBox();combobox.insertItemAt(全部人,0);combobox.setSelectedIndex(0);messageShow = new JTextArea();messageShow.setEditable(false);/添
36、加滚动条messageScrollPane = new JScrollPane(messageShow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);messageScrollPane.setPreferredSize(new Dimension(400,400);messageScrollPane.revalidate();clientMessage = new JTextField(23);clientMessage.setEnabled(false);clientM
37、essageButton = new JButton();clientMessageButton.setText(发送);/添加系统消息的大事侦听clientMessage.addActionListener(this);clientMessageButton.addActionListener(this);sendToLabel = new JLabel(发送至:);express = new JLabel( 表情: );messageLabel = new JLabel(发送消息:);downPanel = new JPanel();girdBag = new GridBagLayout(
38、);downPanel.setLayout(girdBag);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 0;girdBagCon.gridwidth = 5;girdBagCon.gridheight = 2;girdBagCon.ipadx = 5;girdBagCon.ipady = 5;JLabel none = new JLabel( );girdBag.setConstraints(none,girdBagCon);downPanel.add(none);girdBagC
39、on = new GridBagConstraints();girdBagCon.gridx = 0;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(sendToLabel,girdBagCon);downPanel.add(sendToLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx =1;girdBagCon.g
40、ridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;girdBag.setConstraints(combobox,girdBagCon);downPanel.add(combobox);girdBagCon = new GridBagConstraints();girdBagCon.gridx =2;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_END;girdBag.setConstraints(express,girdBagCon);dow
41、nPanel.add(express);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 3;girdBagCon.gridy = 2;girdBagCon.anchor = GridBagConstraints.LINE_START;/girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(actionlist,girdBagCon);downPanel.add(actio
42、nlist);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 2;girdBagCon.insets = new Insets(1,0,0,0);/girdBagCon.ipadx = 5;/girdBagCon.ipady = 5;girdBag.setConstraints(checkbox,girdBagCon);downPanel.add(checkbox);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;gi
43、rdBagCon.gridy = 3;girdBag.setConstraints(messageLabel,girdBagCon);downPanel.add(messageLabel);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 1;girdBagCon.gridy = 3;girdBagCon.gridwidth = 3;girdBagCon.gridheight = 1;girdBag.setConstraints(clientMessage,girdBagCon);downPanel.add(clientMessa
44、ge);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 4;girdBagCon.gridy = 3;girdBag.setConstraints(clientMessageButton,girdBagCon);downPanel.add(clientMessageButton);showStatus = new JTextField(35);showStatus.setEditable(false);girdBagCon = new GridBagConstraints();girdBagCon.gridx = 0;girdB
45、agCon.gridy = 5;girdBagCon.gridwidth = 5;girdBag.setConstraints(showStatus,girdBagCon);downPanel.add(showStatus);contentPane.add(messageScrollPane,BorderLayout.CENTER);contentPane.add(downPanel,BorderLayout.SOUTH);/关闭程序时的操作this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEve
46、nt e)if(type = 1)DisConnect();System.exit(0););/* * 大事处理 */public void actionPerformed(ActionEvent e) Object obj = e.getSource();if (obj = userItem | obj = userButton) /用户信息设置/调出用户信息设置对话框UserConf userConf = new UserConf(this,userName);userConf.setVisible(true);userName = userConf.userInputName;else
47、if (obj = connectItem | obj = connectButton) /连接服务端设置/调出连接设置对话框ConnectConf conConf = new ConnectConf(this,ip,port);conConf.setVisible(true);ip = conConf.userInputIp;port = conConf.userInputPort;else if (obj = loginItem | obj = loginButton) /登录Connect();else if (obj = logoffItem | obj = logoffButton)
48、 /注销DisConnect();showStatus.setText();else if (obj = clientMessage | obj = clientMessageButton) /发送消息SendMessage();clientMessage.setText();else if (obj = exitButton | obj = exitItem) /退出int j=JOptionPane.showConfirmDialog(this,真的要退出吗?,退出,JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);if (j = J
49、OptionPane.YES_OPTION)if(type = 1)DisConnect();System.exit(0);else if (obj = helpItem) /菜单栏中的挂念/调出挂念对话框Help helpDialog = new Help(this);helpDialog.setVisible(true);public void Connect()trysocket = new Socket(ip,port);catch (Exception e)JOptionPane.showConfirmDialog(this,不能连接到指定的服务器。n请确认连接设置是否正确。,提示,
50、JOptionPane.DEFAULT_OPTION,JOptionPane.WARNING_MESSAGE);return;tryoutput = new ObjectOutputStream(socket.getOutputStream();output.flush();input = new ObjectInputStream(socket.getInputStream() );output.writeObject(userName);output.flush();recvThread = new ClientReceive(socket,output,input,combobox,messageShow,showStatus);recvThread.start();loginButton.setEnabled(false);loginItem.setEnabled(false);userButton.setEnabled(false);user
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北斗系统标准协议书
- 私底下抱养协议书内容
- 采购优先协议书怎么写
- 2025版企业劳动合同范本下载参考
- 2025年短视频版权合作合同协议
- 2025年宠物肿瘤筛查行业创新技术趋势与早期诊断应用前景
- 2025总包商付款(分包)委托保证合同(试行)
- 2025年互联网信息服务提供合同协议
- 2025年跨境电商平台入驻代理行业服务费用分析报告
- 2025年低空经济「太空电梯」接驳站市场潜力与区域布局分析报告
- 绵竹市属国有企业招聘考试真题2024
- 药物制剂新技术研发与应用
- 2025年医院信息科计算机考试试题大全(附答案)
- 社会稳定风险评估采购项目方案投标文件(技术方案)
- 公安审讯技巧讲解
- 2025年长春市中考道德与法治试卷(含答案及解析)
- 医院制剂定价管理办法
- 水滴石穿班会课件
- 企业并购重组培训课件
- 压力性损伤的护理进展
- 《生成式人工智能》 课件 第4章 Transformer模型
评论
0/150
提交评论