软件工程-实验报告
院
系:
计算机科学学院
专
业:
计算机科学与技术
年
级:
3 2013 级
课程名称:
软件工程
组
员:
司少武
( 201321091135 )
兰少雄
( 201321091136 )
张宇
( 201321091133 )
纳洪泽( 201321091132 )
指导教师:
刘卫平
2015 5 年
1 12 2 月
26
日
聊天室
1 前言
1.1 即时消息系统的研究现状
即时消息系统[1](Instant Messenger,IM)是一种在后 PC 时代兴起的,以 Internet 网络为基础的,允许交互双方即时地传送文字、语音、视频等信息,能够跟踪网络用户在线状态的网络应用软件。即时消息系统产生有着深刻的社会原因:人们都有渴望社交,获得社会尊重、实现自我的需求,这正是即时消息软件风行的原动力,而物质文明的日益发达所带来副作用,又使得人们习惯与周围的人保持距离,以致人们更愿意对陌生人敞开心扉,在网络中可以跨越年龄、身份、行业、地域的限制,达到人与人、人与信息之间的零距离交流。从这点上讲,即时消息系统的出现改变了人们的沟通方式和交友文化,大大拓展了个人生活交流的空间。
2 1.2 本工程的主要内容
随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持, 而聊天室是人们最常见, 最直接的网上交流的方式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台,也是网络与现实最贴近的实用型网站。本文所介绍的网络聊天系统是基于开放的 JAVA 应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求, 且具有脱离数据库技术方法, 易于维护和更新的特点。
2 2
需求分析
本系统所要实现的主要功能是当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立 Socket 连接,再用对象输出流包装 Socket 的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会收到客户端用 Socket 传输过来的聊天信息对象,然后将其强制转换为 Chat 对象,并将本次用户的聊天信息对象添加到聊天对象集 Message 中,以供所有聊天用户访问。
接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是 3 秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为 3 秒最佳,因为每个用户都不可能在 3 秒内连续发送信息。
当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化地显示在聊天信息界面上。
2.1
业务需求
1. 与聊天室成员一起聊天。
2. 可以与聊天室成员私聊。
3. 可以改变聊天内容风格。
4. 用户注册(含头像)、登录。
5. 服务器监控聊天内容。
6. 服务器过滤非法内容。
7. 服务器发送通知。
8. 服务器踢人。
9. 保存服务器日志。
10.保存用户聊天信息。
2.2
系统功能模块
2.2.1
服务器端
1.处理用户注册
2.处理用户登录
3.处理用户发送信息
4.处理用户得到信息
5.处理用户退出 2.2.2
客户端
1.用户注册界面及结果
2.用户登录界面及结果
3.用户发送信息界面及结果
4.用户得到信息界面及结果
5.用户退出界面及结果 2.3
性能需求
运行环境:Windows All
必要环境:JDK 1.5 以上
硬件环境:CPU 400MHz 以上,内存 64MB 以上
3 3 数据结构
3.1 数据结构
此系统数据库中储存信息采用字符指针储存,将用户的信息用字符的形式进行处理并储存。
3.2 逻辑结构
逻辑结构:
用户向服务器发送请求,服务器获取对方 IP,若获取成功,用户向其发送消息,服务器将其处理并将其记录,然后将消息发给另一用户。其 E—R 图如下所示:
2
将 E-R 图转化为关系模型,建立关系模型为:
消息(内容,时间); 记录信息(内容,储存信息); 服务器(服务器 IP);
3
消息 发送 服务器 记录 记录信息 内容 时间 内容 储存信息 图 1.E-R 图 服务器 IP
3.3 功能模块划分
3.3.1 结构框图
3.3.2 程序流图 (1)
整个系统流程图如下:
聊天系统 发送消息 接受消息 服务器获取 IP 服务器发送消息 保存信息 时钟 图 2.结构图
3.3.3 模块功能分析及外部设计 模块功能分析:
(1)发送消息:用户选择好友,如果好友在线,服务器便获取其 IP 地址,用户打开消息盒编辑需要发送的消息,然后发送,服务器接受此消息,并处理记录到记录表中,然后将其发送给好友。
(2)接收消息:好友发送的信息通过服务器处理并发送到本用户,如果设置为接收消息,则系统提示并可以打开查看此消息,否则服务器不将此消息发送到本用户。
(3)消息记录查询:用户向服务器发送查询请求,服务器作出响应并将最近消息记录发送到此用户。
外部设计:
交互设计是面向最终用户的设计,是软件的外部设计,交互设计要求在研究软件技术问题的同时对人加以研究。用户是什么样的人?用户怎样与新的计算机系统进行交互?用户怎样解释系统产生的信息?用户对系统有哪些期望?这些问题仅仅是需要在用户交互设计时必须询问和回答的问题。
用户发送的消息或请求 结束 服务器接收信息 查询请求? 向用请求户发送消息 保存信息 向目标用户发送消息 是 否 图 3.系统程序流程图
作为点对点的聊天系统,作为服务使用者得用户和提供服务的聊天系统有着互动和交换信息的过程,用户有请求,系统就必须有应答,需要双方参与。
(1)当用户选择好友向其发送消息时,点击好友,向服务器发送请求,如果好友在线,服务器自动获取好友 IP 并建立双方的连接,进行聊天。否则应该提示好友不在,不能聊天或发送离线信息。
(2)用户查询聊天信息时,向服务器发送查询请求,服务器作出响应并将相应记录发送到此用户界面。
通过对产品的界面和行为进行交互设计,让产品和它的使用者之间建立一种有机关系,从而可以有效的达到使用者的目标,而好的交互设计会使系统和使用者之间更好的交互,达到“愉悦地合作”,这是交互设计的最终目的。
4 详细设计
4.1 类定义
ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。
Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。
Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。
ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的 Connection.java 亲密合作。
Windowclose 为 ChatRoom.java 的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。
Clock.java 为客户端程序的一个小程序,实现的一个石英钟功能。
4.2 主要模块内部设计
此点对点聊天系统主要包括以下模块:(1)发送消息;(2)接收消息;(3)查询消息记录。每个模块的主要执行功能函数及算法如下。
1 4.2.1 模块 1 1 设计
4.2.1.1 模块算法 模块一:发送消息:
发送消息函数:send messages(char *p,InetAdrress);
发送消息后自动执行储存函数:memory messages(InetAdrress,char *p); 4.2.1.2 流程图
4.2.2 模块 2 2 设计
4.2.2.1 模块算法
模块二:接收消息:
接收消息消息函数: *receive messages(InetAdrress,char *p);
接 收 消 息 后 自 动 执 行 储 存 消 息 函 数 :
memory messages(InetAdrress,char *p); 4.2.2.2 流程图:
用户输入要发送的信息 是否在线? 获取 IP 发送消息 保存记录 结束 是 否 图 4.发送消息流程图
4.2.3 模块 3 3 设计
4.2.3.1 模块算法 模块三:消息记录查询:
执行发送请求函数:*check notes(InetAdrress,char *p);
删除记录函数:delete notes(InetAdrress);
自动执行接收消息函数:*receive messages(InetAdrress,char *p);
4.2.3.2
流程图:
好友发送的消息 是否接收 打开消息 保存消息记 结束 图 5.接收消息流程图 是 否
5 5
测试分析 与截图
在实现本系统的同时每设计一个模块,就实现模块测试,使其能实现该函数需要实现的功能,此阶段为白盒测试。此阶段将此模块作为单独的一个实体来测试,而且比较容易实际检验模块正确性的测试方案,保证每个模块单元的正确运行,来确定编码和详细设计的错误。
然后集成测试。集成测试阶段,先将单元测试成功的模块放在一起形成一个子系统来测试,以解决模块间的协调和通信问题。然后将子系统测试通过的模块放在一起形成一个完整的系统测试,检验功能,来发现需求报告中的错误。
5 5 .1 测试用例
为了检验此系统的正确性,设计了以下的一些测试用例:
(1)登录注册
(2)发送和接收消息 A:你好 B:你好
(3)保存聊天记录
用户发送的查询请求 是否存在记录 服务器向其发送记录 读取记录 结束 是 否 图 6.查询记录流程
(4)保存聊天记录
(5)保存服务器日志
(6)服务器踢人 不同的测试数据发现程序错误的能力差别很大,为了提高测试效率低测试成本,应该选择高效的测试用例,数据尽量少,做到尽可能完备的测试就可以了。
5 5 .2 测试结果
5.2.1 登录界面
5.2.2 注册界面
5.2.3 服务器
5.2.4 聊天室聊天 对所有人,私人聊天,系统提示信息。
5.2.5 聊天记录保存
5.2.6 服务器日志保存
5.2.7 服务器踢人
5.2.8 时钟
6
结束语
Java面向对象程序设计是一门应用广泛并且实用性极强的高级程序设计语言。通过本次课程设计,我们对面向对象的基本思想有了进一步的理解,对项目的各个阶段的任务也有了一定的了解。设计开始阶段必须明确设计的目的与需求分析,总体设计要全面分析聊天室系统的架构。通过这次设计,使我们认识到体系的架构是最重要的,只有准确的系统设计、很好的定义各个模块及模块之间的关系,才能在编码阶段更轻松的的实现。
通过这次课程设计,对我们的逻辑思维能力是一个很大的锻炼,它不仅加强
了我们的系统思考问题的能力,而且还改变了我们以前不好的编程习惯,虽然花费了不少的时间,但是我们学到了丰富的知识。
另外,此次课程设计也提高了我们的团对合作精神,让我们明白不是不能一个人能单独完成,而是要集思广益,结合更多的人的创意思维。让我们大家深刻的体会到理论与实际相结合的重要性与微妙之处。对于不同的想法我们都会集中讨论并对好的意见加以借鉴,在这个讨论的过程中,还更正了不少我们各自自身对于某个知识点的误区。
这次程序设计也是一个毅力的考验过程。有时候往往只是一个小小的错误,却要花出几小时甚至是一两天的时间才可能发现它。所以在这个过程不能过于急躁,要很有耐心将程序反复调试。
App server.java
import java.io.*; import java.net.*; import java.util.*; public class AppServer extends Thread {
private ServerSocket serverSocket;
private ServerFrame sFrame;
private static Vector userOnline = new Vector(1, 1);
private static Vector v = new Vector(1, 1);
public AppServer() {
sFrame = new ServerFrame();
try {
serverSocket = new ServerSocket(1001);
// 获取服务器的主机名和 IP 地址
InetAddress address = InetAddress.getLocalHost();
sFrame.txtServerName.setText(address.getHostName());
sFrame.txtIP.setText(address.getHostAddress());
sFrame.txtPort.setText("1001");
} catch (IOException e) {
fail(e, "不能启动服务!");
}
sFrame.txtStatus.setText("已启动...");
this.start(); // 启动线程
}
public static void fail(Exception e, String str) {
System.out.println(str + " 。" + e);
}
public void run() {
try {
while (true) {
Socket client = serverSocket.accept();
new Connection(sFrame, client, userOnline, v);
System.out.println("userLength:"+userLength);
}
} catch (IOException e) {
fail(e, "不能监听!");
}
}
public static void main(String args[]) {
new AppServer();
} } Login.java
import*; public class Login extends JFrame implements ActionListener {
private static final long serialVersionUID
= -8965773902056088264L;
private JPanel pnlLogin;
private JButton btnLogin, btnRegister, btnExit;
private JLabel lblServer, lblUserName, lblPassword, lblLogo;
private JTextField txtUserName, txtServer;
private JPasswordField pwdPassword;
private String strServerIp;
private Dimension scrnsize;
private Toolkit toolkit = Toolkit. getDefaultToolkit ();
public Login() {
super r("登录[HappyChat]聊天室");
pnlLogin = new JPanel();
this.getContentPane().add(pnlLogin);
lblServer = new JLabel("服务器(S):");
lblUserName = new JLabel("用户名(U):");
lblPassword = new JLabel("口
令(P):");
txtServer = new JTextField(20);
txtServer.setText("127.0.0.1");
txtUserName = new JTextField(20);
pwdPassword = new JPasswordField(20);
btnLogin = new JButton("登录(L)");
btnLogin.setToolTipText("登录到服务器");
btnLogin.setMnemonic("L");
btnRegister = new JButton("注册(R)");
btnRegister.setToolTipText("注册新用户");
btnRegister.setMnemonic("R");
btnExit = new JButton("退出(X)");
btnExit.setToolTipText("退出系统");
btnExit.setMnemonic("X");
pnlLogin.setLayout( null);
pnlLogin.setBackground( new Color(52, 130, 203));
lblServer.setBounds(50, 100, 100, 30);
txtServer.setBounds(150, 100, 120, 25);
lblUserName.setBounds(50, 130, 100, 30);
txtUserName.setBounds(150, 130, 120, 25);
lblPassword.setBounds(50, 160, 100, 30);
pwdPassword.setBounds(150, 160, 120, 25);
btnLogin.setBounds(50, 200, 80, 25);
btnRegister.setBounds(130, 200, 80, 25);
btnExit.setBounds(210, 200, 80, 25);
Font fontstr = new Font("宋体", Font. PLAIN , 12);
lblServer.setFont(fontstr);
txtServer.setFont(fontstr);
lblUserName.setFont(fontstr);
txtUserName.setFont(fontstr);
lblPassword.setFont(fontstr);
pwdPassword.setFont(fontstr);
btnLogin.setFont(fontstr);
btnRegister.setFont(fontstr);
btnExit.setFont(fontstr);
lblUserName.setForeground(Color. BLACK );
lblPassword.setForeground(Color. BLACK );
btnLogin.setBackground(Color. ORANGE );
btnRegister.setBackground(Color. ORANGE );
btnExit.setBackground(Color. ORANGE );
pnlLogin.add(lblServer);
pnlLogin.add(txtServer);
pnlLogin.add(lblUserName);
pnlLogin.add(txtUserName);
pnlLogin.add(lblPassword);
pnlLogin.add(pwdPassword);
pnlLogin.add(btnLogin);
pnlLogin.add(btnRegister);
pnlLogin.add(btnExit);
Icon logo1 = new ImageIcon("images\\loginlogo.jpg");
lblLogo = new JLabel(logo1);
lblLogo.setBounds(0, 0, 340, 66);
pnlLogin.add(lblLogo);
setResizable( false);
setSize(340, 260);
setVisible( true);
scrnsize = toolkit.getScreenSize();
setLocation(scrnsize.width / 2 - this.getWidth() / 2, scrnsize.height
/ 2 - this.getHeight() / 2);
Image img = toolkit.getImage("images\\appico.jpg");
setIconImage(img);
btnLogin.addActionListener( this);
btnRegister.addActionListener( this);
btnExit.addActionListener( this);
@SuppressWarnings({ "deprecation", "static-access" })
public void actionPerformed(ActionEvent ae) {
Object source = ae.getSource();
if (source.equals(btnLogin)) {
if (txtUserName.getText().equals("")
|| pwdPassword.getText().equals("")) {
JOptionPane op1 = new JOptionPane();
op1. showMessageDialog ( null, "用户名或密码不能为空");
} else {
strServerIp = txtServer.getText();
login();
}
}
if (source.equals(btnRegister)) {
strServerIp = txtServer.getText();
this.dispose();
new Register(strServerIp);
}
if (source == btnExit) {
System. exit (0);
}
}
@SuppressWarnings("deprecation")
public v v oid login() {
Customer data = new Customer();
data.custName = txtUserName.getText();
data.custPassword = pwdPassword.getText();
try {
Socket toServer;
toServer = new Socket(strServerIp, 1001);
ObjectOutputStream streamToServer = new ObjectOutputStream(toServer
.getOutputStream());
streamToServer.writeObject((Customer) data);
BufferedReader fromServer = new BufferedReader(
new InputStreamReader(toServer.getInputStream()));
String status = fromServer.readLine();
if (status.equals("登录成功")) {
new ChatRoom((String) data.custName, strServerIp);
this.dispose();
streamToServer.close();
fromServer.close();
toServer.close();
} else {
JOptionPane. showMessageDialog ( null, status);
streamToServer.close();
fromServer.close();
toServer.close();
}
} catch (ConnectException e1) {
JOptionPane. showMessageDialog ( null, "未能建立到指定服务器的连接!");
} catch (InvalidClassException e2) {
JOptionPane. showMessageDialog ( null, "类错误!");
} catch (NotSerializableException e3) {
JOptionPane. showMessageDialog ( null, "对象未序列化!");
} catch (IOException e4) {
JOptionPane. showMessageDialog ( null, "不能写入到指定服务器!");
}
}
public static void main(String args[]) {
new Login();
} }
Register.java
import *; public class Register extends JFrame
implements ActionListener {
private JComboBox comboBox;
private static final long serialVersionUID = 9019746127517522180L;
JPanel
pnlRegister;
JLabel
lblUserName,lblGender,lblAge;
JLabel
lblPassword,lblConfirmPass,lblEmail,logoPosition;
JTextField
txtUserName,txtAge,txtEmail;
JPasswordField
pwdUserPassword,pwdConfirmPass;
JRadioButton
rbtnMale,rbtnFemale;
ButtonGroup
btngGender;
JButton
btnOk,btnCancel,btnClear;
String
strServerIp;
final JLabel headLabel = new JLabel();
Dimension scrnsize;
Toolkit toolkit=Toolkit.getDefaultToolkit();
public Register(String ip)
{
super("[HappyChat]聊天室注册窗口");
strServerIp=ip;
pnlRegister=new JPanel();
this.getContentPane().add(pnlRegister);
lblUserName=new JLabel("用 户 名:");
lblGender=new JLabel("性
别:");
lblAge=new JLabel("年
龄:");
lblPassword=new JLabel("口
令:");
lblConfirmPass=new JLabel("确认口令:");
lblEmail=new JLabel("电子邮件:");
txtUserName=new JTextField(30);
txtEmail=new JTextField(30);
txtAge=new JTextField(10);
pwdUserPassword=new JPasswordField(30);
pwdConfirmPass=new JPasswordField(30);
rbtnMale=new JRadioButton("男",true);
rbtnFemale=new JRadioButton("女");
btngGender=new ButtonGroup();
btnOk=new JButton("确定(O)");
btnOk.setMnemonic("O");
btnOk.setToolTipText("保存注册信息");
btnCancel=new JButton("返回(B)");
btnCancel.setMnemonic("B");
btnCancel.setToolTipText("返回登录窗口");
btnClear=new JButton("清空(L)");
btnClear.setMnemonic("L");
btnClear.setToolTipText("清空注册信息");
pnlRegister.setLayout(null);
pnlRegister.setBackground(new Color(52,130,203));
lblUserName.setBounds(30,80,100,30);
txtUserName.setBounds(110,85,120,20);
lblPassword.setBounds(30,141,100,30);
pwdUserPassword.setBounds(110,146,120,20);
lblConfirmPass.setBounds(30,166,100,30);
pwdConfirmPass.setBounds(110,171,120,20);
lblGender.setBounds(30,191,100,30);
rbtnMale.setBounds(110,196,60,20);
rbtnFemale.setBounds(190,196,60,20);
lblAge.setBounds(30,216,100,30);
txtAge.setBounds(110,221,120,20);
lblEmail.setBounds(30,241,100,30);
txtEmail.setBounds(110,246,120,20);
btnOk.setBounds(246,166,80,25);
btnCancel.setBounds(246,201,80,25);
btnClear.setBounds(246,241,80,25);
Font fontstr=new Font("宋体",Font.PLAIN,12);
lblUserName.setFont(fontstr);
lblGender.setFont(fontstr);
lblPassword.setFont(fontstr);
lblConfirmPass.setFont(fontstr);
lblAge.setFont(fontstr);
lblEmail.setFont(fontstr);
rbtnMale.setFont(fontstr);
rbtnFemale.setFont(fontstr);
txtUserName.setFont(fontstr);
txtEmail.setFont(fontstr);
btnOk.setFont(fontstr);
btnCancel.setFont(fontstr);
btnClear.setFont(fontstr);
lblUserName.setForeground(Color.BLACK);
lblGender.setForeground(Color.BLACK);
lblPassword.setForeground(Color.BLACK);
lblAge.setForeground(Color.BLACK);
lblConfirmPass .setForeground(Color.BLACK);
lblEmail.setForeground(Color.BLACK);
rbtnMale.setForeground(Color.BLACK);
rbtnFemale.setForeground(Color.BLACK);
rbtnMale.setBackground(Color.white);
rbtnFemale.setBackground(Color.white);
btnOk.setBackground(Color.ORANGE);
btnCancel.setBackground(Color.ORANGE);
btnClear.setBackground(Color.ORANGE);
rbtnMale.setOpaque(false);
rbtnFemale.setOpaque(false);
pnlRegister.add(lblUserName);
pnlRegister.add(lblGender);
pnlRegister.add(lblPassword);
pnlRegister.add(lblConfirmPass);
pnlRegister.add(lblEmail);
pnlRegister.add(lblAge);
pnlRegister.add(txtAge);
pnlRegister.add(txtUserName);
pnlRegister.add(txtEmail);
pnlRegister.add(pwdUserPassword);
pnlRegister.add(pwdConfirmPass);
pnlRegister.add(btnOk);
pnlRegister.add(btnCancel);
pnlRegister.add(btnClear);
pnlRegister.add(rbtnMale);
pnlRegister.add(rbtnFemale);
btngGender.add(rbtnMale);
btngGender.add(rbtnFemale);
Icon logo = new ImageIcon("images\\registerlogo.jpg");
logoPosition = new JLabel(logo);
logoPosition.setBounds(0, 0, 360,78);
pnlRegister.add(logoPosition);
this.setSize(360,313);
this.setVisible(true);
this.setResizable(false);
scrnsize=toolkit.getScreenSize();
this.setLocation(scrnsize.width/2-this.getWidth()/2,
scrnsize.height/2-this.getHeight()/2);
Image img=toolkit.getImage("images\\appico.jpg");
this.setIconImage(img);
btnOk
.addActionListener(this);
btnCancel.addActionListener(this);
btnClear
.addActionListener(this);
final JLabel label = new JLabel();
label.setText("头
像:");
label.setBounds(30, 120, 60, 15);
pnlRegister.add(label);
comboBox = new JComboBox();
comboBox.setAutoscrolls(true);
comboBox.setModel(new DefaultComboBoxModel(new String[] {"1", "2", "3"}));
comboBox.setBounds(110, 116, 47, 23);
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
Icon logo = new ImageIcon("face\\"+comboBox.getSelectedItem().toString()+".jpg");
headLabel.setIcon(logo);
}
});
pnlRegister.add(comboBox);
headLabel.setHorizontalAlignment(SwingConstants.CENTER);
//.setIcon(SwingResourceManager.getIcon(Register.class, "face/1.jpg"));
headLabel.setIcon(new ImageIcon("face//1.JPG"));
headLabel.setBounds(247, 88, 74, 72);
pnlRegister.add(headLabel);
}
public void actionPerformed(ActionEvent ae)
{
Object source=new Object();
source=ae.getSource();
if (source.equals(btnOk))
{
register();
}
if (source.equals(btnCancel))
{
new Login();
this.dispose();
}
if (source.equals(btnClear))
{
txtUserName.setText("");
pwdUserPassword.setText("");
pwdConfirmPass.setText("");
txtAge.setText("");
txtEmail.setText("");
}
}
@SuppressWarnings({ "deprecation", "static-access" })
public void register()
{
Register_Customer data=new Register_Customer();
data.custName
= txtUserName.getText();
data.custPassword = pwdUserPassword.getText();
data.age
= txtAge.getText();
data.sex
= rbtnMale.isSelected()?"男":"女";
data.email
= txtEmail.getText();
//chenmin
data.head
= comboBox.getSelectedItem().toString();
if(data.custName.length()==0)
{
JOptionPane.showMessageDialog(null,"用户名不能为空");
return;
}
if(data.custPassword.length()==0)
{
JOptionPane.showMessageDialog(null,"密码不能为空");
return;
}
if(!data.custPassword.equals(pwdConfirmPass.getText()))
{
JOptionPane.showMessageDialog(null,"密码两次输入不一致,请重新输入");
return;
}
if(data.age.length()==0)
{
JOptionPane.showMessageDialog(null,"年龄不能为空");
return;
}
int age=Integer.parseInt(txtAge.getText());
if (age<=0||age>100){
JOptionPane.showMessageDialog(null,"年龄输入不合法");
return;
}
int Found_flag=0;
for (int i=0;i<data.email.length();i++)
{
if(data.email.charAt(i)=="@")
{
Found_flag++;
}
}
if(Found_flag!=1)
{
JOptionPane.showMessageDialog(null,"电子邮箱格式不正确,请重新输入");
return;
}
try
{
Socket toServer;
toServer = new Socket(strServerIp,1001);
ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream());
streamToServer.writeObject((Register_Customer)data);
BufferedReader fromServer=new BufferedReader(new InputStreamReader(toServer.getInputStream()));
String status=fromServer.readLine();
JOptionPane op=new JOptionPane();
op.showMessageDialog(null,status);
if(status.equals(data.custName+"注册成功"))
{
txtUserName.setText("");
pwdUserPassword.setText("");
pwdConfirmPass.setText("");
txtAge.setText("");
txtEmail.setText("");
}
streamToServer.close();
fromServer.close();
}
catch(InvalidClassException e1)
{
JOptionPane.showMessageDialog(null,"类错误!");
}
catch(NotSerializableException e2)
{
JOptionPane.showMessageDialog(null,"对象未序列化!");
}
catch(IOException e3)
{
JOptionPane.showMessageDialog(null," 不 能 写 入 到 指 定 服 务器!");
}
}
public static void main(String args[])
{
new Register("127.0.0.1");
}
}
ChatRoom.java
public ChatRoom(String name, String ip) {
// Dialog d = new FontDialog();
strServerIp = ip;
strLoginName = name;
frmChat
= new JFrame("聊天室" + "[用户:" + name + "]");
pnlChat = new JPanel();
frmChat .setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE );
frmChat .getContentPane().add(pnlChat);
Font fntDisp1 = new Font("宋体", Font. PLAIN , 12);
String list[] = { "所有人" };
btnCls = new JButton("清屏(C)");
btnExit = new JButton("退出(X)");
btnSend = new JButton("发送(N)");
btnSave = new JButton("保存(S)");
btnTimer = new JButton("时钟(T)");
lblUserList = new JLabel("【在线用户列表】");
lblUserMessage = new JLabel("【聊天信息】");
lblSendMessage = new JLabel("聊天内容:");
lblChatUser = new JLabel("你对:");
lblUserTotal = new JLabel("在线人数:");
lblCount = new JLabel("0");
lstUserList = new java.awt.List();
txtMessage = new JTextField(170);
cmbUser = new JComboBox(list);
// chenmin
cmbUser.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent arg0) {
freshHead();
}
});
chPrivateChat = new JCheckBox("私聊");
taUserMessage = new TextArea("", 300, 200,
TextArea. SCROLLBARS_VERTICAL_ONLY );// 只能向下滚动
// taUserMessage.setText("aaaaaa 汉字 aaaa");
taUserMessage.setForeground( new Color(0, 0, 0));
taUserMessage.setEditable( false); // 不可写入
Clock.java
public class Clock extends JFrame implements ActionListener
{
private static final long serialVersionUID
= 6790815213225162093L;
Timer timer;
int x,y,old_X,old_Y, r,x0,y0,w,h,ang;
int sdo,mdo,hdo,old_M,old_H;
TimeZone tz =TimeZone. getTimeZone ("JST");
final double RAD=Math. PI /180.0;
@SuppressWarnings("deprecation") p p ublic Clock()
{
super("[HappyChat]时钟");
setSize(300,300);
setBackground( new Color(0,0,192));
setResizable( false);
Dimension scr=Toolkit. getDefaultToolkit ().getScreenSize();
Dimension fra= this.getSize();
if(fra.width>scr.width)
{
fra.width=scr.width;
}
if(fra.height>scr.height)
{
fra.height=scr.height;
}
this.setLocation((scr.width-fra.width)/2,(scr.height-fra.height)/2);
show();
int delay = 1000;
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
repaint();
}
};
new Timer(delay, taskPerformer).start();
}
public void actionPerformed(ActionEvent e)
{
timer.restart();
}
public void paint( Graphics g )
{
Insets insets = getInsets();
int L0 = (insets.left)/2, T0 = (insets.top)/2;
int hh,mm,ss;
String st;
h=getSize().height;
g.setColor(Color. white );
g.drawOval(L0+30,T0+30,h-60,h-60);
g.drawOval(L0+32,T0+32,h-64,h-64);
r=h/2-30;
x0=30+r-5+L0;
y0=30+r-5-T0;
ang=60;
for ( int i=1; i<=12; i++)
{
x=( int)((r+10)*Math. cos (RAD*ang)+x0);
y=( int)((r+10)*Math. sin (RAD*ang)+y0);
g.drawString(""+i,x,h-y);
ang-=30;
}
x0=30+r+L0; y0=30+r+T0;
Calendar now=Calendar. getInstance ();
hh=now.get(Calendar. HOUR_OF_DAY );
mm=now.get(Calendar. MINUTE );
ss=now.get(Calendar. SECOND );
g.setColor(Color. pink );
g.fillRect(L0,T0,60,28);
g.setColor(Color. blue );
if (hh < 10) st="0"+hh;
else st=""+hh;
if (mm < 10) st=st+":0"+mm; else st=st+":"+mm;
if (ss < 10) st=st+":0"+ss; else st=st+":"+ss;
g.drawString(st,L0,T0+25);
sdo=90-ss*6;
mdo=90-mm*6;
hdo=90-hh*30-mm/2;
if (old_X > 0)
{
g.setColor(getBackground());
g.drawLine(x0,y0,old_X,(h-old_Y));
} else
{
old_M=mdo;
old_H=hdo;
}
g.setColor(Color. yellow );
x=( int)((r-8)*Math. cos (RAD*sdo)+x0);
y=( int)((r-8)*Math. sin (RAD*sdo)+y0)-2*T0;
g.drawLine(x0,y0,x,(h-y));
old_X=x;
old_Y=y;
if (mdo != old_M)
{
line(g,old_M,( int)(r*0.7),getBackground());
old_M=mdo;
}
if (hdo != old_H)
{
line(g,old_H,( int)(r*0.5),getBackground());
old_H=hdo;
}
line(g,mdo,( int)(r*0.7),Color. green );
line(g,hdo,( int)(r*0.5),Color. red );
}
public void line(Graphics g, int t, int n, Color c)
{
int [] xp = new int[4];
int [] yp = new int[4];
xp[0]=x0;
yp[0]=y0;
xp[1]=
( int)((n-10)*Math. cos (RAD*(t-4))+x0);
yp[1]=h-( int)((n-10)*Math. sin (RAD*(t-4))+y0);
xp[2]=
( int)( n
*Math. cos (RAD* t
)+x0);
yp[2]=h-( int)( n
*Math. sin (RAD* t
)+y0);
xp[3]=
( int)((n-10)*Math. cos (RAD*(t+4))+x0);
yp[3]=h-( int)((n-10)*Math. sin (RAD*(t+4))+y0);
g.setColor(c);
g.fillPolygon(xp,yp,4);
}
public static void main(String args[])
{
new Clock();
}}
- 范文大全
- 职场知识
- 精美散文
- 名著
- 讲坛
- 诗歌
- 礼仪知识
-
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案
超星尔雅学习通《对话大国工匠致敬劳动模范》题库附答案 1、历史只会眷顾坚定者、奋进者、搏击者,而不会
【入党申请书】 日期:2021-05-12
-
对于政治生态考核整改工作方案
本文系作者原创投稿,仅供学习参考,请勿照搬照抄! 关于政治生态考核整改工作的方案 为做好推进风清气正
【经济工作】 日期:2020-06-05
-
大学生学习2024年两会精神心得感悟
大学生学习2024年两会精神心得感悟过去一年,是全面贯彻二十大精神的开局之年,中国共产党带领全国各族人民,付出艰辛努力,换来重大成
【心得体会】 日期:2024-03-07
-
中国传统故事英文版 中国古代故事英文版
历史学科蕴含着许多丰富的、生动的、有趣的素材,每一个历史事件、历史人物都有相关的、动人的历史小故事,都能给人以启迪。你对中国古代的故事了解多少呢?下面是小编为您...
【调查报告】 日期:2019-05-22
-
基尔霍夫定律验证实验报告
基尔霍夫定律的验证的实验报告本文关键词:基尔,定律,霍夫,验证,实验基尔霍夫定律的验证的实验报告本文
【思想宣传】 日期:2021-03-08
-
中小学党建工作实施意见
中小学党建设工作实施意见中小学校担负着培养德智体美全面发展的社会主义建设者和接班人的重要使命。加强中
【爱国演讲】 日期:2020-09-22
-
地藏经诵读仪规(完整版)
地藏经诵读仪规(完整版) 恭请文: 恭请大慈大悲大愿地藏王菩萨、护法诸天菩萨慈悲加持护念弟子***能
【个人简历】 日期:2021-03-31
-
小学党建工作制度
小学党建工作制度33篇 党建工作责任制度 1 党支部年初制定全年党建工作计划,将目标任务分解到有关部
【思想学习】 日期:2021-02-10
-
青年学生学习全国人大十四届二次会议心得感想16篇
青年学生学习全国人大十四届二次会议心得感想16篇报告中提到政府在经济调控、消费政策、基础设施和制造业投资、房地产调控以及地方债务
【心得体会】 日期:2024-03-07
-
材料力学考题
材料力学考题本文关键词:材料力学,考题材料力学考题本文简介:材料力学1、简易起重设备中,AC杆由两根
【入党申请书】 日期:2021-03-06
-
执行信息公开网
执行信息公开网 执行信息公开网 执行信息公开网: zhi*ing (点击下图可直接进行访问) 全国
【职场知识】 日期:2020-07-03
-
大学教师毕业设计指导记录4篇
大学教师毕业设计指导记录4篇 毕业设计是指工、农、林科高等学校和中等专业学校学生毕业前夕总结性的独立作业。是实践性教学最后一
【职场知识】 日期:2022-05-11
-
年国家开放大学电大电子商务单选题题库
单选: 1、EDI是指A、电子商务B、电子数据交换C、电子交易 D、移动数据交换 答案: B 2、电
【职场知识】 日期:2020-06-05
-
“以学生为中心”的教学原则
以学生为中心的教学原则教师在开展以学生为中心的教学实践中,必须谨记学习目标不再是知识的获得,能力要比知识更重要。以下是蒲公英阅读网
【职场知识】 日期:2023-01-05
-
有机磷酸酯类中毒及其解救(实验报告范文)
有机磷酸酯类中毒及其解救XXX、XXX一、实验目的1 观察有机磷酸酯类农药敌百虫中毒时的症状。 2
【职场知识】 日期:2020-08-30
-
组工干部学习谈治国理政第三卷《共建创新包容开放型世界经济》心得体会
组工干部学习谈治国理政第三卷《共建创新包容的开放型世界经济》心得体会 《习近平谈治国理政》第三卷第七
【职场知识】 日期:2020-09-22
-
心理健康黑板报_心理健康黑板报图片
虽然工作上难免压力,但是只要正视压力,一切就不会太辛苦。下面就随小编看看心理健康黑板报内容,希望喜欢哦。 心理健康黑板报图片欣赏 心理健康黑板报图片1 心理健...
【职场知识】 日期:2020-02-26
-
2021教育基础知识试题(附答案)
2021教育基础知识精选试题(附答案) 1、主张恢复西方传统教育核心价值,反对“进步教育
【职场知识】 日期:2021-03-17
-
男一分钟仰卧起坐标准表
表表11--13 男生一分钟仰卧起坐、引体向上单项评分表(单位:次) 等级 单项 得分 三年级 四年
【职场知识】 日期:2021-05-08
-
发展党员工作部门联审征求意见表
发展党员工作部门联审征求意见表发展对象姓 名 性别 出生年月 身份证号 现工作单位及职务 家庭住址
【职场知识】 日期:2020-09-22
-
唐代诗人李昂个人信息
唐代诗人李昂个人信息 导读:我根据大家的需要整理了一份关于《唐代诗人李昂个人信息》的内容,具体内容:
【古典文学】 日期:2020-11-07
-
[关于中秋的朗诵诗词] 关于爱国的朗诵诗词
中秋,热闹的街头树起了灯彩,舞起了火龙。你知道多少关于中秋的朗诵诗词?下面小编为你整理了几篇关于中秋的朗诵诗词,希望对你有帮助。 关于中秋的朗诵诗词一 中秋佳节...
【古典文学】 日期:2019-06-06
-
叠加原理实验报告
一、实验目的1、通过实验来验证线性电路中的叠加原理以及其适用范围。 2、学习直流仪器仪表的测试方法。
【古典文学】 日期:2020-11-12
-
输血查对制度
输血查对制度依据卫生部《临床输血技术规范》的要求,制订抽血交叉配备查对制度、取血查对制度、输血查对制
【古典文学】 日期:2020-09-24
-
大气唯美黑板报【国庆节大气黑板报】
日本在投降的那一天,再也没有昔日的嚣张,我们中国的屈辱得到洗刷。下面就随小编看看国庆节大气黑板报内容,希望喜欢哦。 国庆节大气黑板报图片欣赏 国庆节大气黑板报...
【古典文学】 日期:2019-05-05
-
【二人旅游英语情景对话】 二人英语对话2分钟旅游
随着国内外旅游业市场的不断扩大,旅游英语人才成为社会的紧缺人才。小编精心收集了二人旅游英语情景对话,供大家欣赏学习! 二人旅游英语情景对话1 A:Itsmyfirsttimeto...
【古典文学】 日期:2020-02-29
-
怎样认识世界处于百年未有之大变局
怎样认识世界处于百年未有之大变局 首先,“大变局”是对国际格局发生巨大变迁的
【古典文学】 日期:2020-10-28
-
2021公安专业知识考试练习题(附答案)
2021公安专业知识考试练习题(附答案) 1 甲地公安机关接到群众举报,在当天举行的大型娱乐活动中,
【古典文学】 日期:2021-01-29
-
乳糖检测方法
附录A(规范性附录) 乳糖的测定A 1原理牛乳或乳粉样液经沉淀剂澄清后,样液中的乳糖在苯酚、氢氧化钠
【古典文学】 日期:2020-12-08
-
[合作与成功的故事]团队合作成功的案例
学会合作,合作是一种深刻后的美丽,因为一滴水只有融入大海,才能够激起美丽的浪花。关于合作你了解吗?以下是小编分享的合作与成功的故事,一起来和小编看看吧。 合作与成...
【古典文学】 日期:2020-02-27
-
时尚女装店面装修效果图|韩式女装店面装修
在服装店的设计之中,我们要将多变、创新、品牌自身的定位与发展趋势相结合,用一种可持续的设计方式呈现出来,以便更加适应不断更新的展示主体。下面小编就为大家解开时尚女装店...
【中国文学】 日期:2019-05-16
-
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)
2021年超星尔雅学习通《辩论与修养》章节测试试题(共183题附答案)1、辩论的目的不是单纯获得某种
【中国文学】 日期:2021-05-12
-
天地人格最佳搭配起名技巧|天地人格的五行怎么算
天地有阴有阳,物体刚柔表里,而数字则有一个诱导力,那么你知道怎么计算天地人格来取名吗?今天小编为你整理了天地人格最佳搭配起名技巧,一起来看看用天地人格取名的方法有哪些...
【中国文学】 日期:2019-06-06
-
信息技术重要性
信息技术的重要性 信息技术与课程整合将带来课程内容的革新,信息技术的高速发展,要求传统的课程必须适应
【中国文学】 日期:2021-02-11
-
2022年当前世界下中国面临国际形势论文范本
和平与发展仍然是当今时代的主题。谋和平、求合作、促发展是各国人民的共同愿望。为了大家学习方便,下面是小编为大家整理的当前世界下中国面临的国际形势论文范文内容,以供参...
【中国文学】 日期:2022-03-31
-
【世界上最大的半岛】阿拉伯半岛
你知道世界上最大的半岛是什么吗?下面由小编来介绍一下。 阿拉伯半岛的简介 阿拉伯半岛(阿拉伯文:)位于亚洲,是世界上最大的半岛。沙特阿拉伯、也门、阿曼、阿拉伯联合...
【中国文学】 日期:2019-05-24
-
古代人物漫画女生唯美图片欣赏 漫画人物图片女孩唯美
中国漫画始于清末民初,而平面设计虽然其名称是在改革开放以后确立的,但设计活动却自古就有,二者的相互影响是本文的主要讨论范围。小编整理了唯美古代女生人物漫画,欢迎阅读!...
【中国文学】 日期:2020-03-19
-
雪天安全行车注意事项_雪天安全行车提示语
维护城市交通秩序,争做河源文明市民。你们想看看雪天安全行车提示语有哪些吗?以下是小编推荐雪天安全行车提示语给大家,欢迎大家阅读! 安全行车温馨提示语【经典篇】 1...
【中国文学】 日期:2020-03-15
-
2021年5月时事政治热点(国内+国际)
2021年年5月时事政治热点(国内+国际)国内部分 1 55月月66日,由商务部和海南省人民政府共同
【中国文学】 日期:2021-06-10
-
关于通过努力获得成功的故事:靠自己努力成功的例子
努力,是成功的一半。人生道路上难免会遇到挫折,但我们不应后退,应向理想之路奋勇前进。关于名人努力成功的故事你了解吗?以下是小编分享的关于通过努力获得成功的故事,一起...
【中国文学】 日期:2020-03-03
-
改革开放大事记简表(改革开放新时期1978-2012年)
改革开放大事记简表 (1978-2012年) 时间1978年12月18日至22日地点北京事件党的十一
【外国名著】 日期:2021-06-17
-
山东省生产经营单位安全生产主体责任规定(303号令)
山东省生产经营单位安全生产主体责任规定(2013年2月2日山东省人民政府令第260号公布根据2016
【外国名著】 日期:2020-10-22
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【外国名著】 日期:2019-05-27
-
材料力学金属扭转实验报告
材料力学金属扭转实验报告 【实验目的】 1、验证扭转变形公式,测定低碳钢的切变模量G。;测定低碳钢和
【外国名著】 日期:2020-11-27
-
长豆角家常做法怎么做好吃营养 炒豆角的家常做法
豆角在我们日常生活中是很常见的食材,可能我们只知道它含有优质蛋白和维生素,其实它还有其他的营养价值。它也是可以和很多食材做搭配的。下面小编为大家整理了长豆角的做法...
【外国名著】 日期:2020-02-26
-
(新版)就业知识竞赛题库及答案解析
(新版)就业知识竞赛题库(全真题库) 一、单选题1 (单选):在职业生涯规划工具中,组织在展开员工职
【外国名著】 日期:2021-07-21
-
植物装饰画黑白图片欣赏|荷花装饰画黑白图片
装饰画是一种装饰性艺术,是装饰性和创造性相结合的艺术设计形式。小编整理了植物装饰画黑白,欢迎阅读! 植物装饰画黑白图片展示 植物装饰画黑白图片1 植物装饰画黑白...
【外国名著】 日期:2019-05-31
-
坚定不移全面从严管党治警研讨发言稿
坚定不移全面从严管党治警研讨发言稿政治建警、从严治警是党在新时代的建警治警方针。一年前的全国公安工作
【外国名著】 日期:2020-09-18
-
白烛葵的花语:白烛葵的不死幻想症
白烛葵,花名,花语为“不感兴趣”。现又指《知音漫客》上连载漫画《极度分裂》里主要角色之一。下面小编为你整理了白烛葵的花语。欢迎阅读。 白烛葵的花语:不感兴趣 ...
【外国名著】 日期:2019-05-11
-
把脉人力资源管理的风向标 什么是风向标
把脉人力资源管理的风向标 外部经营环境的巨大变化,不可避免地给身处其中的企业及其经营管理带来新的、深刻的变化和挑战:市场需求在明显萎缩;而买方市场中,客户要求
【外国名著】 日期:2019-09-04
-
梧桐花的花语|梧桐花的功效与作用
梧桐花为梧桐科植物梧桐的花,植物形态详梧桐子条。今天小编为你整理了梧桐花的花语,欢迎阅读。 梧桐花的花语是:情窦初开 在春季里晚开的花朵,有着恬淡的气息。 ...
【寓言童话】 日期:2020-03-03
-
西部计划笔试题库(99题含答案)
西部计划笔试题库(99题含答案) 1 第十三届全国人大三次会议表决通过了《中华人民共和国民法典》,自
【寓言童话】 日期:2021-06-16
-
大学生音乐欣赏论文 大学音乐鉴赏论文3000
今天小编就为你介绍关于大学生音乐欣赏论文,下面是!小编给你搜集了相关资料!希望可以能帮助到大家。 大学生音乐欣赏论文—第一篇 音乐是生活不可缺少的一部分,学会欣...
【寓言童话】 日期:2020-03-12
-
年学生资助诚信教育主题活动方案
各二级学院(部): 为深入贯彻落实习近平总书记关于教育的重要论述,落实立德树人根本任务,增强当代大学
【寓言童话】 日期:2020-06-21
-
油管、套管规格尺寸对照表
API油管规格及尺寸 公称尺寸(in) 不加厚外径(mm) 不加厚内径(mm) 加厚外径(mm) 加
【寓言童话】 日期:2020-08-31
-
主题教育调查研究工作方案2篇
主题教育调查研究工作方案1根据省、市、县开展“不忘初心、牢记使命”主题教育工
【寓言童话】 日期:2021-03-19
-
惊悚鬼故事50字 令人惊悚的故事
这些惊悚故事在短短的篇幅和时间之内让您感受到故事里传达出来的恐怖感,令你感到害怕。下面就是小编给大家整理的令人惊悚的故事,希望对你有用! 令人惊悚的故事篇1:学校...
【寓言童话】 日期:2019-05-13
-
【古代男生漫画图片大全】男生漫画头像
漫画和动画组成了动漫产业的两大支柱。然而,与动画相比,漫画在业界和学界皆相对冷清。小编整理了古代男生漫画,欢迎阅读! 古代男生漫画图片展示 古代男生漫画图片1 ...
【寓言童话】 日期:2019-05-27
-
读《李光耀观天下》有感_李光耀观天下txt在线读
务实与真诚 ——读《李光耀观天下》有感 原创:雁过留声ly 购于北大,在出差的飞机和高铁上读完,这本《李光耀观天下》给予我很多启示。严格地说,这本书没有详
【寓言童话】 日期:2019-05-05
-
北京最好吃的自助餐厅 北京高档自助餐排名
自助餐简直就是拯救大胃王的最佳饮食!没有之一!世界上没有什么事情是吃一顿自助餐解决不了的,如果有,那就吃两顿!下面小编给大家推荐北京几家好吃的自助餐。 北京最好吃的...
【寓言童话】 日期:2020-02-25
-
学生高考动员演讲稿
学生高考动员演讲稿3篇高考动员演讲稿11 老师们、同学们: 大家下午好!漫漫高考长征路已经进入尾声了
【百家讲坛】 日期:2021-09-22
-
企业安全演讲稿2021
最新企业安全的演讲稿5篇 演讲稿是作为在特定的情境中供口语表达使用的文稿。在充满活力,日益开放的今天
【百家讲坛】 日期:2021-09-22
-
XX镇扶贫项目实施专项整治工作总结_1
XX镇扶贫项目实施专项整治工作总结 为深入贯彻精准扶贫精准脱贫基本方略,认真落实党中央、国务院,省委
【百家讲坛】 日期:2021-09-22
-
对乡镇领导班子干部成员批评意见例文
对乡镇领导班子干部成员的批评看法范文 一、对党委书记XXX同志的批评看法〔3条〕 1、与干部交流偏少
【百家讲坛】 日期:2021-09-22
-
群英乡扶贫资金项目芬坡村祖埇村生产道路硬化工程绩效自评报告
群英乡扶贫资金项目((芬坡村祖埇村生产道路硬化工程))绩效自评报告 一、基本情况(一)群英乡扶贫资金
【百家讲坛】 日期:2021-09-22
-
党委书记警示教育大会上讲话2021汇编
党委书记在警示教育大会上的讲话55篇汇编 党委书记在警示教育大会上的讲话(一) 同志们: 根据省州委
【百家讲坛】 日期:2021-09-22
-
对于2021年召开巡视整改专题民主生活会对照检查材料
关于12021年召开巡视整改专题民主生活会对照检查材料 按照中央巡视组要求和省、市、区委统一部署,区
【百家讲坛】 日期:2021-08-14
-
消防安全知识培训试题.doc
消防安全知识培训试题姓名: 部门班组: 成绩: 一:填空题,每空4分,共44分。 1、灭火剂是通过隔
【百家讲坛】 日期:2021-08-14
-
涉疫重点人员“五包一”居家隔离医学观察工作流程
涉疫重点人员“五包一”居家隔离医学观察工作流程 目前,全球疫情仍处于大流行状
【百家讲坛】 日期:2021-08-14
-
疫情防控致全体师生员工及家长一封信
疫情防控致全体师生员工及家长的一封信 各位师生员工及全体家长朋友: 暑假已至,近期我省部分地方发现确
【百家讲坛】 日期:2021-08-14