艳辉考试平台

SSM艳辉考试平台

前言:之前做了一个ssm问卷系统https://blog.youkuaiyun.com/sinat_15153911/article/details/76463976,也是题目的录入,做题,生成报告。没有多选的。现在,考试系统实现了单选和多选,学生们成绩的查询,成绩报告等。

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

添加一个学生,添加一个试卷,添加一个题目
学生登录以准考证为帐号,初始密码为123456
学生登录系统后,修改密码,开始作答,查询成绩

该系统的后台页面采用layui,前台页面用boostrap。

Map<String, String[]> keyMap = new HashMap<String, String[]>();
        keyMap = request.getParameterMap();
        Iterator<Entry<String,String[]>> it2 = keyMap.entrySet().iterator();
        int totalScore=0;
        int singleScore=0;
        int moreScore=0;
        Exam exam = new Exam();
        while (it2.hasNext()) {
            Entry<String, String[]> entry = it2.next();  
            String keyStr=entry.getKey();
            String values[]=entry.getValue();
            String key;
            String value="";
            if(keyStr.equals("paperId")){
                exam.setPaperId(Integer.parseInt(values[0]));
                continue;
            }
            if(keyStr.split("-")[1].equals("r")){  // 单选
                key=keyStr.split("-")[2];
                value=values[0];
                singleScore+=this.calScore(key, value, "1");
            }else{  // 多选
                key=keyStr.split("-")[2];
                for(String s:values){
                    value+=s+",";
                }
                value=value.substring(0,value.length()-1);
                moreScore+=this.calScore(key, value, "2");
            }
        }
        totalScore=singleScore+moreScore;

这里用了map,就说说map的存储原理,就是源代码怎么写,面试经常问到。
HashMap实际上是数组和链表的结合体。

public V put(K key, V value) {
    // HashMap允许存放null键和null值。
    // 当key为null时,调用putForNullKey方法,将value放置在数组第一个位置。  
    if (key == null)
        return putForNullKey(value);
    // 根据key的keyCode重新计算hash值。
    int hash = hash(key.hashCode());
    // 搜索指定hash值在对应table中的索引。
    int i = indexFor(hash, table.length);
    // 如果 i 索引处的 Entry 不为 null,通过循环不断遍历 e 元素的下一个元素。
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }
    // 如果i索引处的Entry为null,表明此处还没有Entry。
    modCount++;
    // 将key、value添加到i索引处。
    addEntry(hash, key, value, i);
    return null;
}

往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置

public V get(Object key) {
    if (key == null)
        return getForNullKey();
    int hash = hash(key.hashCode());
    for (Entry<K,V> e = table[indexFor(hash, table.length)];
        e != null;
        e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k)))  
            return e.value;
    }
    return null;
}

从HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。

HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,
也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

注意:需要本文源代码可加QQ490647751 回复关键字‘开通vip-艳辉考试平台’。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值