📝 业余无线电台操作能力验证模拟考试

本系统提供A、B、C类模拟考试,随机抽题,自动计时。
支持网页在线作答与批量生成Word试卷。
题库采用:业余无线电台操作技术能力验证题库(2025年版)附件:20250809124154_2851

请选择试卷类别


00:00
已答
0
标记
0

系统说明

  • 本站模拟考试功能无需注册登录、无需支付任何费用、不记录考试数据,刷新页面后当前页面数据会直接重置。
  • 祝您备考顺利,早日取得业余无线电操作能力验证证书。
  • 在线刷题 : 进入刷题系统

考核标准

  • 根据《业余无线电管理办法》(工业和信息化部令第 67号)等要求,各类别业余无线电台操作技术能力验证考核标准如下:
  • A 类验证试卷共 40 题,其中单选题 32 题,多选题8 题,答题时间 40 分钟,答对 30 题为合格;
  • B 类验证试卷共 60 题,其中单选题 45 题,多选题 15 题,答题时间 60 分钟,答对 45 题为合格;
  • C 类验证试题共 90 题,其中单选题 70 题,多选题 20 题,答题时间 90 分钟,答对 70 题为合格。
  • 作答多选题时,必须与标准答案完全一致,选项不得多选或少选,否则不得分。

考试安排

📥 批量生成试卷(Word版)

1.按所选类别可生成多套试卷(A类40题、B类60题、C类90题),随机抽题,打包为ZIP文件下载,每套一个Word文档
2.试题含作答区,答案附最后一页,图片自动嵌入(word文件必须在编辑模式下打开预览,否则图片可能无法正常显示)。

📝 练习模式

随机不重复出题,提交后显示答案,可回顾上一题。

`; const blob = new Blob([html], {type: 'application/msword'}); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = title + '.doc'; a.click(); URL.revokeObjectURL(url); } // ==================== 批量生成并打包下载 ==================== async function batchDownload() { const type = $('#batch-category').value; const sets = parseInt($('#batch-count').value, 10); if (!sets || sets < 1) { showAlertModal('请输入有效的套数'); return; } if (sets > 50) { showAlertModal('一次性最多生成50套,请减小套数'); return; } const config = EXAMS[type]; const singleCount = config.single; const multiCount = config.multi; const totalPerSet = singleCount + multiCount; try { const response = await fetch(config.file); if (!response.ok) throw new Error('网络错误'); const data = await response.json(); const singlePool = data.filter(q => q.type === 'single'); const multiPool = data.filter(q => q.type === 'multi'); if (singlePool.length < singleCount) { showAlertModal(`题库中单选题仅有${singlePool.length}道,无法生成完整的${type}类试卷(需要${singleCount}道)`); return; } if (multiPool.length < multiCount) { showAlertModal(`题库中多选题仅有${multiPool.length}道,无法生成完整的${type}类试卷(需要${multiCount}道)`); return; } const zip = new JSZip(); for (let s = 1; s <= sets; s++) { let singles = pick(singlePool, singleCount); let multis = pick(multiPool, multiCount); singles = singles.map(q => { const newQ = {...q}; const keys = Object.keys(newQ.options).sort(); newQ.shuffledKeys = shuffle(keys); return newQ; }); multis = multis.map(q => { const newQ = {...q}; const keys = Object.keys(newQ.options).sort(); newQ.shuffledKeys = shuffle(keys); return newQ; }); singles = shuffle(singles); multis = shuffle(multis); const questions = [...singles, ...multis]; const fileTitle = `${type}类试卷 ${totalPerSet}题第${s}套`; let html = `${fileTitle}`; html += ``; html += `

${fileTitle}

`; questions.forEach((q, idx) => { html += `
`; html += `
${idx+1}. ${q.question} (${q.type === 'single' ? '单选' : '多选'})
`; html += `
请作答__________
`; if (q.image) { html += `题目附图`; } html += `
`; q.shuffledKeys.forEach((key, i) => { const letter = String.fromCharCode(65 + i); html += `
${letter}. ${q.options[key]}
`; }); html += `
`; html += `
`; }); html += `
`; html += `

${fileTitle}答案

`; html += `
`; const singleAnswers = []; const multiAnswers = []; questions.forEach((q, idx) => { const displayAnswer = mapAnswerToDisplay(q.answer, q.shuffledKeys); if (q.type === 'single') { singleAnswers.push({ idx: idx+1, ans: displayAnswer }); } else { multiAnswers.push({ idx: idx+1, ans: displayAnswer }); } }); for (let i = 0; i < singleAnswers.length; i += 5) { const group = singleAnswers.slice(i, i+5); const start = group[0].idx; const end = group[group.length-1].idx; const answers = group.map(g => g.ans).join(' '); html += `
${start}${start === end ? '' : '-' + end}. ${answers}
`; } multiAnswers.forEach(item => { html += `
${item.idx}. ${item.ans}
`; }); html += `
`; zip.file(`${fileTitle}.doc`, html); } const content = await zip.generateAsync({ type: 'blob' }); const url = URL.createObjectURL(content); const a = document.createElement('a'); a.href = url; a.download = `${type}类模拟试卷_${sets}套.zip`; a.click(); URL.revokeObjectURL(url); } catch (err) { console.error(err); showErrorModal('加载题库失败或生成失败,请稍后重试'); } } // ==================== 开始新考试 ==================== function startNewExam() { state.hasStarted = true; document.body.classList.add('exam-started'); state.startTime = Date.now(); setStartButtonToExamInProgress(); $('#loading').classList.remove('hidden'); $('#intro').classList.add('hidden'); fetch(state.config.file) .then(response => { if (!response.ok) throw new Error('网络响应不正常'); return response.json(); }) .then(data => { $('#loading').classList.add('hidden'); let singleQs = pick(data.filter(q => q.type === 'single'), state.config.single); let multiQs = pick(data.filter(q => q.type === 'multi'), state.config.multi); singleQs = singleQs.map(q => { const newQ = {...q}; const keys = Object.keys(newQ.options).sort(); newQ.shuffledKeys = shuffle(keys); return newQ; }); multiQs = multiQs.map(q => { const newQ = {...q}; const keys = Object.keys(newQ.options).sort(); newQ.shuffledKeys = shuffle(keys); return newQ; }); const shuffledSingles = shuffle(singleQs); const shuffledMultis = shuffle(multiQs); state.questions = [...shuffledSingles, ...shuffledMultis]; renderPaper(); state.endsAt = Date.now() + state.config.minutes * 60 * 1000; startTimer(); $('#btn-submit').disabled = false; }) .catch(err => { console.error('加载题库失败:', err); $('#loading').classList.add('hidden'); $('#intro').classList.remove('hidden'); resetStartButton(); showErrorModal('加载题库失败,请检查网络连接或文件路径'); }); } // ==================== 无限刷题模块(独立于考试)==================== const practice = { bank: null, poolIndices: [], history: [], currentIdx: -1, type: null, config: null }; const practiceBanks = {}; function resetPractice() { practice.bank = null; practice.poolIndices = []; practice.history = []; practice.currentIdx = -1; practice.type = null; practice.config = null; $('#practice-area').style.display = 'none'; $('#practice-type-indicator').textContent = ''; } async function loadPracticeBank(type) { if (!type) throw new Error('请先选择试卷类别'); const config = EXAMS[type]; if (!config) throw new Error('无效的试卷类别'); if (!practiceBanks[type]) { const resp = await fetch(config.file); if (!resp.ok) throw new Error('题库加载失败'); practiceBanks[type] = await resp.json(); } practice.bank = practiceBanks[type]; practice.type = type; practice.config = config; practice.poolIndices = Array.from({ length: practice.bank.length }, (_, i) => i); practice.poolIndices = shuffle(practice.poolIndices); practice.history = []; practice.currentIdx = -1; } function popRandomFromPool() { if (practice.poolIndices.length === 0) return null; const idx = practice.poolIndices.pop(); const original = practice.bank[idx]; const qCopy = { ...original, options: { ...original.options } }; const keys = Object.keys(qCopy.options).sort(); qCopy.shuffledKeys = shuffle(keys); return qCopy; } function resetPracticePool() { practice.poolIndices = Array.from({ length: practice.bank.length }, (_, i) => i); practice.poolIndices = shuffle(practice.poolIndices); practice.history = []; practice.currentIdx = -1; $('#practice-status').textContent = '已进入新一轮刷题'; setTimeout(() => $('#practice-status').textContent = '', 2000); } function renderPracticeQuestion() { const container = $('#practice-question'); if (practice.currentIdx < 0 || practice.currentIdx >= practice.history.length) { container.innerHTML = '

暂无题目,请点击“下一题”开始

'; return; } const item = practice.history[practice.currentIdx]; const q = item.question; const shuffledKeys = q.shuffledKeys; const submitted = item.submitted; let html = `
`; const typeLabel = q.type === 'single' ? '【单选】' : '【多选】'; html += `
${practice.currentIdx+1}. ${q.question} ${typeLabel}
`; if (q.image) { html += `qimg`; } const optsHtml = shuffledKeys.map((key, i) => { const letter = String.fromCharCode(65 + i); const inputType = q.type === 'single' ? 'radio' : 'checkbox'; const checked = (item.userAnswers && item.userAnswers.has(key)) ? 'checked' : ''; let optClass = 'opt'; if (submitted) { if (q.answer.includes(key) && item.userAnswers.has(key)) { optClass += ' correct'; } else if (q.answer.includes(key) && !item.userAnswers.has(key)) { optClass += ' missed'; } else if (!q.answer.includes(key) && item.userAnswers.has(key)) { optClass += ' incorrect'; } } const disabled = submitted ? 'disabled' : ''; return ``; }).join(''); html += `
${optsHtml}
`; if (submitted) { html += `
${item.isCorrect ? '✓ 回答正确' : '✗ 回答错误'}
`; } html += `
`; container.innerHTML = html; updatePracticeButtons(); } function updatePracticeButtons() { const hasCurrent = practice.currentIdx >= 0 && practice.currentIdx < practice.history.length; const currentItem = hasCurrent ? practice.history[practice.currentIdx] : null; const submitted = currentItem ? currentItem.submitted : false; $('#practice-prev').disabled = practice.currentIdx <= 0; $('#practice-submit').disabled = !hasCurrent || submitted; $('#practice-next').disabled = !hasCurrent || !submitted; const totalDone = practice.history.length; const remaining = practice.poolIndices.length; $('#practice-counter').textContent = `第 ${totalDone} 题 / 剩余 ${remaining}`; } function submitPractice() { if (practice.currentIdx < 0 || practice.currentIdx >= practice.history.length) return; const item = practice.history[practice.currentIdx]; if (item.submitted) return; const q = item.question; const selected = new Set(); $$('#practice-q input[type=radio]:checked, #practice-q input[type=checkbox]:checked').forEach(inp => { selected.add(inp.value); }); const std = new Set(q.answer); const isCorrect = setsEqual(selected, std); item.userAnswers = selected; item.isCorrect = isCorrect; item.submitted = true; renderPracticeQuestion(); } function nextPractice() { if (practice.currentIdx >= 0 && practice.currentIdx < practice.history.length) { if (!practice.history[practice.currentIdx].submitted) { showAlertModal('请先提交本题答案'); return; } } if (practice.poolIndices.length === 0) { resetPracticePool(); } const newQ = popRandomFromPool(); if (!newQ) { showAlertModal('暂无更多题目'); return; } const newItem = { question: newQ, userAnswers: new Set(), isCorrect: false, submitted: false }; practice.history.push(newItem); practice.currentIdx = practice.history.length - 1; renderPracticeQuestion(); } function prevPractice() { if (practice.currentIdx > 0) { practice.currentIdx--; renderPracticeQuestion(); } } function resetPracticeSession() { if (!practice.bank) return; practice.poolIndices = Array.from({ length: practice.bank.length }, (_, i) => i); practice.poolIndices = shuffle(practice.poolIndices); practice.history = []; practice.currentIdx = -1; $('#practice-question').innerHTML = '

已重置,点击“下一题”开始

'; updatePracticeButtons(); $('#practice-status').textContent = '已重置'; } async function startPracticeForType(type) { try { // 禁用对应按钮避免重复点击(简单处理:全部禁用) const btns = ['#btn-practice-A', '#btn-practice-B', '#btn-practice-C']; btns.forEach(sel => $(sel).disabled = true); await loadPracticeBank(type); $('#practice-type-indicator').textContent = `当前题库:${type}类 共${practice.bank.length}题`; $('#practice-area').style.display = 'block'; resetPracticeSession(); nextPractice(); } catch (err) { console.error(err); showErrorModal('题库加载失败,请稍后重试'); } finally { const btns = ['#btn-practice-A', '#btn-practice-B', '#btn-practice-C']; btns.forEach(sel => $(sel).disabled = false); } } // 绑定刷题按钮事件 $('#btn-practice-A').addEventListener('click', () => startPracticeForType('A')); $('#btn-practice-B').addEventListener('click', () => startPracticeForType('B')); $('#btn-practice-C').addEventListener('click', () => startPracticeForType('C')); $('#practice-prev').addEventListener('click', prevPractice); $('#practice-next').addEventListener('click', nextPractice); $('#practice-submit').addEventListener('click', submitPractice); $('#practice-reset').addEventListener('click', () => { if (practice.bank) { resetPracticeSession(); } }); // 类别切换时清空刷题显示(避免混淆) const originalSelectExam = selectExam; selectExam = function(type) { originalSelectExam(type); resetPractice(); // 刷题区域隐藏 }; window.selectExam = selectExam; // ==================== 事件监听器 ==================== $('#chooseA').onclick = () => selectExam('A'); $('#chooseB').onclick = () => selectExam('B'); $('#chooseC').onclick = () => selectExam('C'); $('#btn-start').onclick = () => { if (!state.type) { showAlertModal('请选择试卷类型'); return; } if (state.hasStarted) { showConfirmModal("您确定要重新开始考试吗?当前考试进度将会丢失。", () => { resetExamState(); startNewExam(); }); } else { startNewExam(); } }; $('#btn-submit').onclick = () => { showConfirmModal('确定要交卷吗?交卷后将无法修改答案。', () => { autoSubmit(); }); }; $('#btn-reset').onclick = () => { showConfirmModal('确定要重置考试吗?当前进度将丢失。', () => { resetExamState(); state.hasStarted = false; if (state.type && state.config) { updateExamInfo(); } }); }; $('#btn-download').onclick = downloadCurrentPaper; $('#btn-batch-download').onclick = batchDownload; // 初始化 document.addEventListener('DOMContentLoaded', function() {});
联系QQ

952447352

QQ不常在线

如有问题请发邮件

联系邮箱

qlham@foxmail.com

感谢打赏本站

微信扫一扫

Image