2020软件工程第四次作业

博客信息 沈阳航空航天大学计算机学院2020软件工程作业
作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10685
课程目标 熟悉一个“高质量”软件的开发过程
作业目标 结对编程练习

一、题目要求


我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:

(1)能够自动生成四则运算练习题

(2)可以定制题目数量

(3)用户可以选择运算符

(4)用户设置最大数(如十以内、百以内等)

(5)用户选择是否有括号、是否有小数

(6)用户选择输出方式(如输出到文件、打印机等)

(7)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

二、角色分配


驾驶员王欣

主要任务:

(1)能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至GitHub代码托管系统中

(2)能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结,并且上传和队友工作时的照片

领航员王欢

主要任务:

(1)能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试

(2)利用上次结对编程作业的代码检查表对驾驶员的本次工作进行评价,并同时填写PSP 0.1工作记录表

(3)能够对本次工作完成500字以上的总结

三、代码展示


四则运算代码

四、功能模块


1、图形化界面设计

左侧利用文本框展示选择直接打印的结果,右侧两个输入框选择题目个数和题目最大值,单选框实现运算符、是否有小数以及输出方式的选择。

lb = Label(root)
lb.pack()
text = Text(root,x=0,y=0, width=40, height=100)
text.pack(anchor=W)

Lab1=Label(root,text='题目个数').place(x=300,y=20)
default_value = StringVar()
default_value.set('1')
inp1 = Entry(root,textvariable = default_value)
inp1.place(x=400, y=20, width=100, height=20)

Lab2=Label(root,text='题目最大值').place(x=300,y=80)
default_value1 = StringVar()
default_value1.set('10')
inp2 = Entry(root,textvariable=default_value1)
inp2.place(x=400, y=80, width=100, height=20)

Lab3=Label(root,text='运算类型').place(x=300,y=150)
var=tk.IntVar()

checkadd=tk.Radiobutton(root,text="+",variable=var, value=0,
                 ).place(x=400,y=150)

checksub=tk.Radiobutton(root,text="-",variable=var, value=1,
                 ).place(x=450,y=150)

checkmul=tk.Radiobutton(root,text="*",variable=var, value=2,
                 ).place(x=500,y=150)

checkdiv=tk.Radiobutton(root,text="/",variable=var, value=3,
                ).place(x=550,y=150)

checkmix=tk.Radiobutton(root,text="mix",variable=var, value=4,
                ).place(x=400,y=180)

Lab3=Label(root,text='小数').place(x=300,y=210)
var1 = tk.IntVar()
checkis=tk.Radiobutton(root,text="Y",variable=var1, value=1,
                ).place(x=400,y=210)
checkno=tk.Radiobutton(root,text="N",variable=var1, value=0,
                ).place(x=450,y=210)

Lab4=Label(root,text='输出方式').place(x=300,y=270)
var2 = tk.IntVar()
checkis=tk.Radiobutton(root,text="直接打印",variable=var2, value=0,
                ).place(x=400,y=270)
checkno=tk.Radiobutton(root,text="写入文件",variable=var2, value=1,
                ).place(x=500,y=270)

btn1 = Button(root, text='确定', command=Mysel)
btn1.place(x=400, y=400, width=50, height=20)


2、加法运算

生成两个随机数,将生成的随机数和加号组成一个加法表达式存在字符串中,根据选择进行相应的输出;减法、乘法、除法运算同理。

def add(i):
if flag==0:
    a=random.randint(0,n)
    b=random.randint(0,n)
else:
    a=random.uniform(0,n)
    a=round(a,2)
    b=random.uniform(0,n)
    b=round(b,2)
global s
s="("+str(i+1)+") "+str(a)+" + "+str(b)+" = "+"(  )"
s1=round(a+b,2)
if flag1==0:
   s=s+'\n'
   text.insert(INSERT, s)
else:
    f=open("四则运算.txt","a+")
    f.write(s)
    f.write("\n")
    f.close()
return a+b


3、混合运算

随机生成三个整数或者三个小数,随机生成两个运算符以及一对括号,组成一个算术表达式存在字符串中,根据选择相应的输出。

def mix(i):
op=['+','-','*','÷']
if flag==0:
    a=random.randint(0,n)
    b=random.randint(0,n)
    c=random.randint(0,n)
else:
    a=random.uniform(0,n)
    a=round(a,2)
    b=random.uniform(0,n)
    b=round(b,2)
    c = random.uniform(0, n)
    c = round(c, 2)
ch1=random.randint(0,1)
ch2=random.randint(1,2)
if ch1==ch2:
    s="(" + str(i + 1) + ") "+"( " +str(a)+str(op[random.randint(0,3)])+"( "+str(b)+str(op[random.randint(0,3)])+str(c)+" )"+" = " + "(  )"+"\n"
if ch1==0 and ch2==1:
    s="(" + str(i + 1) + ") "+"( "+str(a)+str(op[random.randint(0, 3)])+str(b)+" )"+str(op[random.randint(0, 3)])+str(c)+" = " + "(  )"+"\n"
if ch1==0 and ch2==2:
    s="(" + str(i + 1) + ") "+"( "+str(a)+str(op[random.randint(0, 3)])+str(b)+str(op[random.randint(0, 3)])+str(c)+" )"+" = " + "(  )"+"\n"
if ch1==1 and ch2==2:
    s="(" + str(i + 1) + ") "+str(a)+str(op[random.randint(0, 3)])+"( "+str(b)+str(op[random.randint(0, 3)])+str(c)+" )"+" = " + "(  )"+"\n"
if flag1==0:
    text.insert(INSERT, s)
if flag1==1:
    f=open("四则运算.txt","a+")
    f.write(s)
    f.close()
return

五、运行结果


1.加法运算

(1)数值范围在10以内

(2)选择加法算符

(3)生成5道题

(4)生成的题目直接打印

(5)有小数


2.乘法运算

(1)数值范围在50以内

(2)选择乘法算符

(3)生成20道题

(4)生成的题目写入文件

(5)无小数


3.混合运算

(1)数值范围在30以内

(2)选择混合

(3)生成10道题

(4)生成的题目直接打印

(5)有小数


六、队友评价


本次作业是真正意义上第一次和我的同伴进行结对编程。在这次作业中,我的同伴王欢担任领航员,我担任驾驶员,我们之间的合作非常顺利,可以说有效提高了编程的质量和效率。在这次代码编写的过程中,我的同伴王欢和我一起查找相关资料并整理好思路,这使得我能够较早地开始着手代码的编写。在代码初步编写完成后,王欢同学在第一时间将代码进行测试与检查,指出并帮我修正了一些小问题。

七、个人总结


在本次结对编程过程中,我扮演的是驾驶员的角色,虽然这是第一次真正意义上的结对编程,但我们完成的比较顺利。这次驾驶员的角色让我发现了自己在编程过程中不好的习惯,能够及时改正才是实现了本次结对作业的意义。经过上一次的结对合作之后,我对王欢同学的编程特点也有了初步认识,这也是此次能快速展开程序编写的关键之一。这是我和她第一次编写超过200行的python代码,因为我们都是python的初学者,但是在她和我一起查阅资料并实时讨论编程思路后,在她的密切关注中,我初步完成了程序的编写,虽然产生了一些小问题,这无可厚非;但是在我们一起合作编程的过程中,已经避免了一些逻辑上的问题,这多亏了王欢同学的认真对待与细心检查。
虽然程序设计还存在问题需要在使用的过程中进一步调试,图形化界面只是简单实现了基本的功能,并没有进一步优化,但是我们会在以后的学习实践中多多学习,进一步完善此项功能。总体来说,整个项目完成的比较顺利,这是我和领航员同学第二次合作,在结对编程期间我们互相交流,相互学习,增加了我们的能力,整体的合作也很愉快,希望以后可以继续合作。

八、结对照片




posted @ 2020-04-26 21:41  sw0623  阅读(236)  评论(0编辑  收藏  举报