项目实训第四周第二篇


题库前端与后端交互


1.获取题目信息

代码如下:

       //从后端数据库获得所有问题信息,保存到list
    private ArrayList<QuestionItem> getData() {
        String res = HttpClient.findQuestionsBycid(c_id);
        JSONArray jsonArray = JSONArray.parseArray(res);
        ArrayList<QuestionItem> interList = new ArrayList<>();
        for (int i=0; i < jsonArray.size(); i++)    {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            BigInteger qid = jsonObject.getBigInteger("qid");
            String stem = jsonObject.getString("stem");
            float score = jsonObject.getFloat("score");
            String res2 = HttpClient.findOptionsByoqid(String.valueOf(qid));
            JSONArray jsonArray2 = JSONArray.parseArray(res2);
            ArrayList<OptionItem> interList2 = new ArrayList<>();
            for (int j=0; j < jsonArray2.size(); j++)    {
                JSONObject jsonObject2 = jsonArray2.getJSONObject(j);
                String o_num = jsonObject2.getString("o_num");
                String o_content = jsonObject2.getString("o_content");
                Boolean o_answer = jsonObject2.getBoolean("o_answer");
                int o_id = jsonObject2.getInteger("o_id");
                interList2.add(new OptionItem(o_num,o_content,o_answer,o_id));
            }
            interList.add(new QuestionItem(stem,String.valueOf(qid),interList2,String.valueOf(score)));
        }
        return interList;
    }
        new Thread(() -> {
            list = getData();
            questionItemProvider = new QuestionItemProvider(getPageData(page), getFractionAbility());
            getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
                listContainer.setItemProvider(questionItemProvider);
            });
        }).start();
    public static String findQuestionsBycid(String c_id){
        String url = "http://t40g792468.qicp.vip/question/findQuestionsBycid?c_id="+c_id;
        return doGet(url);
    }

    public static String findOptionsByoqid(String o_q_id){
        String url = "http://t40g792468.qicp.vip/question/findOptionsByoqid?o_q_id="+o_q_id;
        return doGet(url);
    }

2.删除题目

代码如下:

        delete_btn.setClickedListener(lis->{
            new Thread(() -> {
                int len = (Math.min(list.size(),page*14) - (page-1)*14);
                int count = 0;
                for (int i = 0; i< len ; i++ ){
                    Checkbox cb = (Checkbox) listContainer.getComponentAt(i).findComponentById(ResourceTable.Id_item_name);
                    if (cb.isChecked()){
                        String q_id = list.get((page-1)*14 + (i-count)).getId();
                        HttpClient.removeOptions(q_id);
                        HttpClient.removeQuestion(q_id);
                        count++;
                    }
                }
                list=getData();
                questionItemProvider = new QuestionItemProvider(getPageData(page), getFractionAbility());
                getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
                    listContainer.setItemProvider(questionItemProvider);
                });
            }).start();
    public static String removeOptions(String o_q_id){
        String url = "http://t40g792468.qicp.vip/question/removeOptions?o_q_id="+o_q_id;
        return doGet(url);
    }

    public static String removeQuestion(String q_id){
        String url = "http://t40g792468.qicp.vip/question/removeQuestion?q_id="+q_id;
        return doGet(url);
    }

3.添加/更新题目

代码如下:

        add_btn.setClickedListener(lis->{
            TextField stem_input = (TextField)
                    getFractionAbility().findComponentById(ResourceTable.Id_stem_input);
            String stem = stem_input.getText();
            if (stem.equals("")||stem.equals(null)){
                showTips("题干未输入");
                return;
            }
            Text score_input = (Text)
                    getFractionAbility().findComponentById(ResourceTable.Id_score_select_text);
            String score = score_input.getText();
            //保存已输入的选项内容到当前optionItemProvider的链表
            int len = optionItemProvider.getList().size();
            if (len==0){
                showTips("请设置选项");
                return;
            }
            for (int i = 0; i< len ; i++ ){
                TextField tf = (TextField) OpListContainer.getComponentAt(i).findComponentById(ResourceTable.Id_choice_input);
                if (tf.getText().equals("")||tf.getText().equals(null)){
                    showTips("选项"+(char)(i+65)+"未输入内容");
                    return;
                }
                optionItemProvider.getList().get(i).setStem(tf.getText());
            }
            boolean flag = true;
            for (int i = 0; i< len ; i++ ){
                if(optionItemProvider.getList().get(i).isAnswer())
                    flag=false;
            }
            if (flag){
                showTips("未设置正确答案");
                return;
            }
            if (editing_key == -1){
                //添加新题目
                new Thread(() -> {
                    HttpClient.insertQuestion(stem,score,c_id);
                    String q_id = HttpClient.getqid();
                    for (int i = 0; i< len ; i++ ){
                        boolean answer = optionItemProvider.getList().get(i).isAnswer();
                        String num = optionItemProvider.getList().get(i).getSign();
                        String content = optionItemProvider.getList().get(i).getStem();
                        HttpClient.insertOption(answer,num,content,q_id);
                    }
                    list = getData();
                    questionItemProvider = new QuestionItemProvider(getPageData(page), getFractionAbility());
                    getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
                        listContainer.setItemProvider(questionItemProvider);
                    });
                }).start();
            }else{
                //修改旧题目
                new Thread(() -> {
                    String q_id = list.get(editing_key).getId();
                    HttpClient.updateQuestionsBycid(stem,score,q_id);
                    HttpClient.removeOptions(q_id);
                    for (int i = 0; i< len ; i++ ){
                        boolean answer = optionItemProvider.getList().get(i).isAnswer();
                        String num = optionItemProvider.getList().get(i).getSign();
                        String content = optionItemProvider.getList().get(i).getStem();
                        HttpClient.insertOption(answer,num,content,q_id);
                    }
                    list = getData();
                    questionItemProvider = new QuestionItemProvider(getPageData(page), getFractionAbility());
                    getFractionAbility().getUITaskDispatcher().asyncDispatch(() -> {//获取UI 主线
                        listContainer.setItemProvider(questionItemProvider);
                    });
                }).start();
            }
            removeFocus();
            close_add_question_frame();
        });
    public static String insertQuestion(String q_stem,String q_score,String c_id){
        String url = "http://t40g792468.qicp.vip/question/insertQuestion?q_stem="+q_stem+"&q_score="+q_score+"&c_id="+c_id;
        return doGet(url);
    }
    public static String insertOption(boolean o_answer,String o_num, String o_content,String o_q_id){
        String url = "http://t40g792468.qicp.vip/question/insertOption?o_answer="+o_answer+"&o_num="+o_num+"&o_content="+o_content+"&o_q_id="+o_q_id;
        return doGet(url);
    }
    public static String updateQuestionsBycid(String q_stem,String q_score,String q_id){
        String url = "http://t40g792468.qicp.vip/question/updateQuestionsBycid?q_stem="+q_stem+"&q_score="+q_score+"&q_id="+q_id;
        return doGet(url);
    }
    public static String insertOption(boolean o_answer,String o_num, String o_content,String o_q_id){
        String url = "http://t40g792468.qicp.vip/question/insertOption?o_answer="+o_answer+"&o_num="+o_num+"&o_content="+o_content+"&o_q_id="+o_q_id;
        return doGet(url);
    }

4.后端实现

DAO层:

    @Transactional
    @Modifying
	@Query(nativeQuery = true,value = "UPDATE  t_question  SET  q_stem = ?1,q_score = ?2  WHERE  q_id= ?3") //原生SQL方法
    public void updateQuestionsBycid( String q_stem, float q_score,BigInteger q_id);
	
	@Query(nativeQuery = true,value = "SELECT  distinct t_question.q_id,t_question.q_stem,t_question.q_score from t_question WHERE t_question.c_id=?1") //原生SQL方法
    public List<Object> findQuestionsBycid(int c_id);

    @Transactional
    @Modifying
    @Query(nativeQuery = true,value = "INSERT INTO t_question  (q_stem, q_score, c_id) VALUES (?1, ?2, ?3)") //原生SQL方法
    public int insertQuestion(String q_stem,float q_score,int c_id);
    
	@Query(nativeQuery = true,value = "SELECT  distinct t_option.o_num,t_option.o_content,t_option.o_answer,t_option.o_id from t_option WHERE t_option.o_q_id = ?1") //原生SQL方法
    public List<Object> findOptionsByoqid(int o_q_id);
	
	@Query(nativeQuery = true,value = "SELECT MAX(q_id) FROM t_question") //原生SQL方法
    public int getq_id();
	
	 @Transactional
	 @Modifying
	 @Query(nativeQuery = true,value = "DELETE FROM t_option WHERE o_id=?1") //原生SQL方法
	 public void removeOption(int o_id);
	 
	  @Transactional
	  @Modifying
	  @Query(nativeQuery = true,value = "INSERT INTO t_option  (o_answer,o_num,o_content,o_q_id) VALUES (?1, ?2, ?3,?4)") //原生SQL方法
	  public void insertOption(boolean o_answer,String o_num, String o_content,int o_q_id);
	  
	  @Transactional
	  @Modifying
	  @Query(nativeQuery = true,value = "DELETE FROM t_option WHERE o_q_id=?1") //原生SQL方法
	  public void removeOptions(int o_p_id);
	  
	  @Transactional
	  @Modifying
	  @Query(nativeQuery = true,value = "DELETE FROM t_question WHERE q_id=?1") //原生SQL方法
	  public void removeQuestion(int q_id);

Controller层:

    @RequestMapping("/findAll")
    @ResponseBody
    public Object findAll(){
    	ResultData result = new ResultData();
    	result.setData(questionDao.findAll());
        return result;

    }
    @RequestMapping("/findOne")
    @ResponseBody
    public Object findOne(Long id){
        return questionDao.findById(id);

    }

    @RequestMapping("/findQuestionsBycid")
    @ResponseBody
    public Object findQuestionsBycid(int c_id){
    	List<QuestionData> datas = new ArrayList<>();
		List<Object> result = questionDao.findQuestionsBycid(c_id);
		for (Object o : result) {
			Object[] rowArray = (Object[]) o;
			QuestionData d = new QuestionData((BigInteger)rowArray[0],(String) rowArray[1],(float)rowArray[2]);
			datas.add(d);
		}
		return datas;
    }
    
    @RequestMapping("/updateQuestionsBycid")
    @ResponseBody
    public Object updateQuestionsBycid(String q_stem,float q_score,BigInteger q_id){
    	questionDao.updateQuestionsBycid(q_stem, q_score,q_id);
        return "1";
    }
    
    @RequestMapping("/insertQuestion")
    @ResponseBody
    public Object  insertQuestion(String q_stem,float q_score,int c_id){
    	return questionDao.insertQuestion( q_stem,q_score,c_id );
    }

    @RequestMapping("/findOptionsByoqid")
    @ResponseBody
    public Object  findOptionsByoqid(int o_q_id){
    	List<OptionData> datas = new ArrayList<>();
		List<Object> result = questionDao.findOptionsByoqid( o_q_id );
		for (Object o : result) {
			Object[] rowArray = (Object[]) o;
			OptionData d = new OptionData((String)rowArray[0],(String) rowArray[1],(boolean)rowArray[2],(int)rowArray[3]);
			datas.add(d);
		}
		return datas;
    }
    
    @RequestMapping("/removeOption")
    @ResponseBody
    public Object  removeOption(int o_id){
    	questionDao.removeOption( o_id );
        return "1";
    }
    
    @RequestMapping("/insertOption")
    @ResponseBody
    public Object  insertOption(boolean o_answer,String o_num, String o_content,int o_q_id){
    	questionDao.insertOption(o_answer,o_num,o_content,o_q_id);
        return "1";
    }
    
    @RequestMapping("/getq_id")
    @ResponseBody
    public Object  getq_id(){
    	return questionDao.getq_id();
    }
    
    @RequestMapping("/removeOptions")
    @ResponseBody
    public Object  removeOptions(int o_q_id){
    	questionDao.removeOptions( o_q_id );
        return "1";
    }
    
    @RequestMapping("/removeQuestion")
    @ResponseBody
    public Object  removeQuestion(int q_id){
    	questionDao.removeQuestion( q_id );
        return "1";
    }

5.演示

请添加图片描述请添加图片描述请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值