201771010110-孔维滢 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告

实验三 软件工程结对项目

项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE/
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/12521474.html
我的课程学习目标 学习软件工程中结对编程(Pair programming)
这个作业在哪些方面帮助我实现学习目标 软件开发流程中的结对编程的方法内容
结对方学号-姓名 王志成-2017710101
结对方本次博客作业链接
本项目Github的仓库链接地址 https://github.com/Wei-Ron/epidemic-user-message

任务一 阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念。

任务二 两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价

  • 组员博客链接

  • 组员GitHub项目仓库链接

  • 博客评论

  • 对方代码运行

  • 结对仓库日志数据

任务三 采用两人结对编程方式,结合我校师生疫情每日上报系统使用体验,设计开发一款符合我校疫情防控工作需求的信息系统。

  • 实现功能如下:
    • 该系统分为用户和管理员两部分

    • 数据库如下:

    • 登录界面:

    • 信息填写界面

    • 管理员界面

    • 全部查询功能

    • 分类查询功能

      • 按学号查询

      • 按时间查询

      • 查询患病人员及生成柱状图

     - 信息更新

     - 信息删除

  • 关键代码如下
public Logup()
	{
		try{
			Class.forName("com.mysql.cj.jdbc.Driver");
		}
		catch(ClassNotFoundException e){}
		try{
			con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8","root","123456");
			sql = con.createStatement();
		}
		catch(SQLException ee){}
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand()=="退出")
		{
			System.exit(0);
		}else if(e.getActionCommand()=="登录")
		{
			if(!jtf.getText().isEmpty() && !jpf.getText().isEmpty())
			{
				//:当点击登录按钮时,首先与数据库建立连接
				//:如果选中管理员登录
				if(jrb1.isSelected())
				{
					try {
						queryman();
					} catch (SQLException e1) {
						//:TODO Auto-generated catch block
						e1.printStackTrace();
					}
					//:首先判断是否存在该用户,即是否得到了密码
					if(pwd ==null)
					{
                         this.clear();
					}else
					{
						//:调用登录方法
						this.manlogin();
					}
				}else if(jrb2.isSelected()) //:用户登录系统
				{
 				try {
					queryuse();
				} catch (SQLException e1) {
					//:TODO Auto-generated catch block
					e1.printStackTrace();
				}
					//:首先判断是否存在该用户,即是否得到了密码
					if(pwd ==null)
					{
                         this.clear();
					}else
					{
						//:调用登录方法
						this.uselogin();
					}
				}
			}else if(jtf.getText().isEmpty())
			{
				JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
			    this.clear();
			}else if(jpf.getText().isEmpty())	
			{
				JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
			    this.clear();
			}
		}else if(e.getActionCommand()=="重置")
		{
			this.clear();
		}			
	}	
		//:清空文本框和密码框
	public	void clear()
		{
			jtf.setText("");
			jpf.setText("");
		}
	//:用户登录判断方法
	public void uselogin()
	    {
			if(pwd.equals(jpf.getText()))
			{
				JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
				this.clear();
				//:关闭当前界面
				dispose();
				//:创建一个新界面
				Uselog usel = new Uselog();
				usel.setVisible(true);	
				usel.addWindowListener(new WindowAdapter(){
				public void windowClosing(WindowEvent e){
						System.exit(0);
							}
							});
				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else if(jtf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else if(jpf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else
				{
					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
				    //:清空输入框
					this.clear();
				}
			}
	public void queryuse() throws SQLException{
		con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8","root","123456");
		ResultSet rs = sql.executeQuery("SELECT* FROM list_1 WHERE name='用户'");	
		if (rs.next()) {
			userword = rs.getString(3);
			pwd = rs.getString(4);
			System.out.println("成功获取到密码和用户名from数据库");
			System.out.println(userword + "\t" + pwd + "\t");
			//:调用登录方法
		}else
		{
			JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
		}
	}
			//:管理员登录判断方法
			public void manlogin()
			{
				if(pwd.equals(jpf.getText()))
				{
					 JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
					 this.clear();	
					//:关闭当前界面
					 dispose();
					 //:创建一个新界面,适用于管理员来管理用户
					 UseManagement useM = new UseManagement();
					useM.setVisible(true);
						
					useM.addWindowListener(new WindowAdapter(){
						public void windowClosing(WindowEvent e){
							System.exit(0);
						}
							});	 					
				}else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else if(jtf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else if(jpf.getText().isEmpty())
				{
					JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
				}else
				{
					JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
				    //:清空输入框
					this.clear();
				}
			}
			public void queryman() throws SQLException{
				con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8","root","123456");
				ResultSet rs = sql.executeQuery("SELECT* FROM list_1 WHERE  name='管理员'");	
				if (rs.next()) {
					//:将管理员的用户名和密码取出
					userword = rs.getString(3);
					pwd = rs.getString(4);
					System.out.println("成功获取到密码和用户名from数据库");
					System.out.println(userword + "\t" + pwd + "\t");
					//:调用登录方法
				}else
				{
					JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
				    
				}
			}
}
public class query extends JPanel implements ActionListener{ 
	Connection con; //与特定数据库的连接(会话)。
	  Statement sql; //用于执行静态 SQL 语句并返回它所生成结果的对象。
	  JButton b1,b2;//定义两个按钮
	  Object[] columns={"编号","姓名","学院","是否确诊患病","是否在武汉","是否在湖北","近期是否到达武汉","近期是否到达湖北",
"是否与武汉人员接触","是否与湖北人员接触","时间"};//字段
	   Object[][] data=new Object[200][11];
	   JTable table;
	   JScrollPane sc;
	query (){
		try{		//:错误处理机制
		    Class.forName("com.mysql.cj.jdbc.Driver");	//:通过 Class.forName为数据库管理系统加载一个JDBC驱动程序。
		    }
		   catch(ClassNotFoundException e){}		//:如果加载驱动失败 控制台抛出异常
		    try{									//:如果加载驱动成功, 调用驱动连接特定数据库
		     con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8","root","12");
		     sql=con.createStatement();      //:调取con成员方法获取Statement对象
		    }
		    catch(SQLException ee){}//:异常处理块
		   setLayout(new BorderLayout());//:布局为边框布局
		   JPanel p1=new JPanel();//:定义一个面板的对象为p1

		   table = new JTable(data, columns);
			table.setPreferredScrollableViewportSize(new Dimension(400, 300));
             sc = new JScrollPane(table) {
            	 public Dimension getPreferredSize() {
    			     return new Dimension(1300, 400);//:括号内参数,可以根据需要更改
    			   }
            };
	        p1.add(sc);
	        add(p1,"Center");
	        setSize(350,300);
	           setBackground(Color.pink);
		   b1=new JButton("查询全部");  
		   b2=new JButton("清空");
		   //:给两个按钮添加监视器
		   b1.addActionListener(this);
		   b2.addActionListener(this);
		   //:将两个按钮添加到面板p1
		   p1.add(b1);
		   p1.add(b2);   
}
@Override
public void actionPerformed(ActionEvent e) {
	if(e.getSource()==b1){
		try{insert();}
		catch(SQLException ee){}
	}
	 else if(e.getSource()==b2){
		 ((DefaultTableModel) table.getModel()).getDataVector().clear();   //:清除表格数据
		 ((DefaultTableModel) table.getModel()).fireTableDataChanged();//:通知模型更新
		 table.updateUI();	
	 }
}
public void insert() throws SQLException{
  int i,j;
  con=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/useruseUnicode=true&
characterEncoding=utf8","root","12");
  ResultSet rs = sql.executeQuery("SELECT*  FROM message" );
  i=0;
  j=0;
          while(rs.next()){
          	data[i][j++]=rs.getString("id");
              data[i][j++]=rs.getString("name");
              data[i][j++]=rs.getString("college");
              data[i][j++]=rs.getString("hot_message");
              data[i][j++]=rs.getString("where_wuhan");
              data[i][j++]=rs.getString("where_hubei");
              data[i][j++]=rs.getString("come_wuhan");
              data[i][j++]=rs.getString("come_hubei");
              data[i][j++]=rs.getString("touch_wuhan");
              data[i][j++]=rs.getString("touch_wuhan");
              data[i][j]=rs.getString("time");
              i++;
              j=0;  
	}
	   con.close();	
 }
}
  • 小组讨论

    • 我们主要分工负责系统中用户和管理员两部分内容

PSP 内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 20 30
*Estimate 预计开发时长,规划大致工作步骤 15 20
Development 开发 400 500
*Analysis 需求分析 (包括学习新技术) 60 90
*Design Spec 生成设计文档 30 30
*Design Review 设计复审 (和同学审核设计文档) 10 15
*Coding Standard 代码规范 (为目前的开发制定合适的规范) 5 5
*Design 具体设计 100 120
*Coding 具体编码 400 500
*Code Review 代码复审 60 30
*Test 测试(自我测试,修改代码,提交修改 60 120
*Reporting 报告 50 60
*Test Report 测试报告 60 70
*Size Measurement 计算工作量 5 5
*Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 30 30

总结

这次实验,我们基本上完成了一个疫情管理系统。该系统主要分为用户和管理员两个模块,用户可以对每天的个人疫情信息进行填写,并且查询自己所填报的信息,而管理员可以对所有的信息进行查询、修改、删除、更新。但是对于提醒填报的通知功能我们没有实现.但是,对于这次的工作,我还是觉得两个人协作会有更有效、更好的效果,而且和我合作的同学能力比我强,我也学习到了很多。

猜你喜欢

转载自www.cnblogs.com/Weiron/p/12588171.html
今日推荐