项目代码地址 / WEB应用地址 / 合作伙伴iFurySt博文链接


需求分析

本次程序是基于原有的控制台四则运算器的基础上,改成WEB的形式,同时还增加了一些新的功能。同时因为交互方式的改变,代码也需要作出相应的调整。

程序设计

相比之前的程序,这次的版本多出了一些功能:

  • 多语言界面
  • 答题计时
  • 错题记录
  • 支持小数计算
  • 难度分级
  • 拒绝非法输入

在合作分工上,我负责的是数据处理的功能模块,iFurySt负责WEB界面交互的部分。

我的工作就是接收页面传来的用户输入参数并处理数据,并提供接口以供iFurySt对数据进行访问,以及数据库的存取操作。

Flask框架将功能模块和视图界面分离开,这样对功能代码进行维护的时候,并不会影响到视图界面的代码。

以下是整个应用的树形目录结构

pair_work
├── data
│ └── calc.db
├── func.py
├── README.md
├── static
│ └── timer.js
├── templates
│ ├── error_question.html
│ ├── layout.html
│ ├── index.html
│ ├── question_paper.html
│ └── result.html
└── views.py
3 directories, 10 files

data目录下是数据库文件

func.py是功能模块的代码

static目录下是用于计时功能的js代码

templates目录下是页面的html文件

views.py是视图模块的代码

代码展示

根据分工,在新增的功能中,我负责错题记录,支持小数计算,难度分级这几个功能

  • 难度分级:

根据不同的难度分级构造题目:

简单 - 整数二元四则运算

中等 - 整数多元四则运算

困难 - 整数与分数(或小数)的混合多元四则运算

if level==1:
mul = 1
else:
mul = random.randint(2,3)
float_fraction = random.choice([True,False])
for i in range(mul+1):
int_temp = random.randint(1,10)
if level==3:
a = random.randint(1,9)
b = random.randint(a+1,10)
if float_fraction:
float_temp = Fraction(a,b)
else:
fa = str(random.randint(1,9))
fb = str(random.randint(0,9))
fc = str(random.randint(0,9))
float_temp = eval(fa+'.'+fb+fc)
digit_temp = random.choice([int_temp,float_temp])
else:
digit_temp = int_temp
digit.append(digit_temp)
if i!=0:
sign.append(random.choice(sign_list))
sign_order = list(range(1,mul+1))
random.shuffle(sign_order)
ques = ques_builder(digit, sign, sign_order)
key = ques_key(digit,sign,sign_order)
  • 数据库存取操作:

根据传入的参数,对不同表不同数据进行存取操作

def db_operate(op,pkg):
con = sqlite3.connect('./data/calc.db')
if op==1:
con.execute('delete from question')
for i in pkg:
sql = "insert into question (id,question,real_answer) values ('%s','%s','%s')" % (i['id'],i['question'],i['real_answer'])
con.execute(sql)
if op==2:
sql = 'select id,question,real_answer from question'
result = con.execute(sql)
for row in result:
i = dict(id=row[0],question=row[1],real_answer=row[2])
pkg.append(i)
return pkg
if op==3:
for i in pkg:
sql = "insert into error (question,real_answer,user_answer) values ('%s','%s','%s')" % (i['question'],i['real_answer'],i['user_answer'])
con.execute(sql)
if op==4:
sql = 'select question,real_answer,user_answer from error'
result = con.execute(sql)
for row in result:
i = dict(question=row[0],real_answer=row[1],user_answer=row[2])
pkg.append(i)
return pkg
con.commit()
con.close()
  • 错题记录:

error_record()由compare()答案比较函数调用,将比对后结果错误的题目记录存入数据库

error_reader()由flask框架代码调用,读取错题记录

def error_record(pkg):
error_list = []
for i in pkg:
if not i['flag']:
error = dict(question=i['question'],real_answer=i['real_answer'],user_answer=i['user_answer'])
error_list.append(error)
num = len(error_list)
error_list_old = db_operate(4,[])
error_list.extend(error_list_old)
db_operate(3,error_list)
return num def error_reader():
error_list = db_operate(4,[])
return error_list

程序运行







PSP

小结感受

第一次合作编程,体验很不错。和iFurySt一起合作非常开心

结对编程1---基于Flask的四则运算题目生成器的更多相关文章

  1. 结对编程1--基于GUI的四则运算题目生成器

    最终项目详细代码(coding地址)/李志强的博客/我的详细代码/方言的博客 一.需求分析 1.实现之前项目的功能,如:除了整数之外,还要支持真分数的四则运算,真分数的运算,并且要求能处理用户的输入, ...

  2. 结对编程——paperOne基于java的四则运算 功能改进

    项目成员:张金生     张政 由于新的需求,原本使用JSP的实现方式目前改为Java实现,即去除了B/S端. 需求分析: 1.四则运算要满足整数运算.分数运算两种: 2.运算题目随机,并且可以打印题 ...

  3. 20165325 2017-2018-2 《Java程序设计》结对编程_第二周:四则运算

    20165325 2017-2018-2 <Java程序设计>结对编程_第二周:四则运算 一.码云链接 FAO项目的码云链接; 1.Git提交日志已经实现一个功能/一个bug修复的注释说明 ...

  4. 结对编程1 —— 基于GUI和Swing的四则运算题目生成器

    合作伙伴 201421123102 王艳秋 201421123106 陈 雄 代码地址 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI( ...

  5. 结对编程(四则运算题目生成器core第七组)对接心得

    在这篇博客博主想记录一下此次结队编程作业中与ui组对接的心得.在这里我也想表达一下对涂涵越同学的敬佩,他遇到困难时孜孜不倦求解的毅力着实让我佩服,我们在dll的生成上遇到了很大的困难,要不是他的坚持我 ...

  6. 20165325 2017-2018-2 《Java程序设计》结对编程_第一周:四则运算

    一.码云链接 项目名称FAO 码云链接 二.需求分析 实现一个命令行程序: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确 ...

  7. 结对作业:基于GUI实现四则运算

    1)Coding.Net项目地址:https://git.coding.net/day_light/GUIszysLL.git 2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的 ...

  8. 结对项目:四则运算题目生成器(C)

    一.Github项目地址:https://github.com/Spartaright/myapp(合作人:梁天龙.赖佑铭) 二.PSP表格(如下图) 1.项目地址 PSP表格 PSP2.1 Pers ...

  9. 结对编程——paperOne基于java web的简易四则运算出题网站

    项目成员:张金生     张政 需求分析: 1.要进行四则运算: 2.运算题目随机: 3.进行对错判断: 4.整数运算. 程序概要: 1.用JSP实现: 2.用户可选择题目数量: 3.答题页用表格列出 ...

随机推荐

  1. 如何在MySQL中设置外键约束以及外键的作用

    1.外键的作用,主要有两个:     一个是让数据库自己通过外键来保证数据的完整性和一致性     一个就是能够增加ER图的可读性 2.外键的配置 1)先创建一个主表,代码如下: #创建表studen ...

  2. 利用Spring的ApplicationEvent执行自定义方法

    在Spring中已经定义了五个标准事件,分别介绍如下: 1)ContextRefreshedEvent:当ApplicationContext初始化或者刷新时触发该事件. 2)ContextClose ...

  3. Java初学者:深度辨析"=="与equals的区别

    Java初学者:深度辨析"=="与equals()方法的区别 1.基本数据类型当中,"=="比较的是两个变量的值 int a=5; int b=4; 3 int ...

  4. 《Java从入门到放弃》入门篇:springMVC数据传递

    springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...

  5. 分辨率验证工具 - 【Firesizer】的使用升级-Firefox-29.0

    今天打算使用Firesizer,但是在Firefox浏览器的右下角找不到Firesizer了. 在官网搜了搜(https://addons.mozilla.org/en-US/firefox/addo ...

  6. PACS发展历史

    最先推动 PACS发展的动力来自于传统的相机厂家.这是因为当数字化浪潮到来的时候,他们首先就意识到这对他们的产品是一个不可逆转的巨大的冲击.他们当然有着自己的优势:对各个厂家的设备连接能力有着最为清楚 ...

  7. log4j配置文件,用时导入jar包buildPAthena、

    log4j.rootLogger=debug,CONSOLE,file#log4j.rootLogger=ERROR,ROLLING_FILElog4j.logger.cn.smbms=debuglo ...

  8. 我读《通过Go来处理每分钟达百万的数据请求》

    我读<通过Go来处理每分钟达百万的数据请求> 原文 原文作者为Malwarebytes公司的首席架构师Marcio Castilho http://marcio.io/2015/07/ha ...

  9. Struts2传参碰到的奇怪问题

    在使用Struts2框架,前端页面提交参数为日期时,Action中获取类型直接是Date 出现的问题是,局域网中无法访问,外网可正常访问. 把Action中Date类型换成String类型都可正常访问 ...

  10. java静态内部类理解

    在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见. ...