结队编程思路及感悟(python、tkinter、mysql、腾讯云短信等)

该结对编程项目由王博和陈秋远合作完成

一、项目需求

1、用户注册功能。用户提供手机号码,点击注册将收到一个注册码,用户可使用该注册码完成注册;

2、用户完成注册后,界面提示设置密码,用户输入两次密码匹配后设置密码成功。密码6-10位,必须含大小写字母和数字;

3、密码设置成功后,跳转到选择界面,界面显示小学、初中和高中三个选项,用户点击其中之一后,提示用户输入需要生成的题目数量;

4、用户输入题目数量后,生成一张试卷(同一张卷子不能有相同题目),界面显示第一题的题干和四个选项,用户选择四个选项中的一个后提交,界面显示第二题,...,直至最后一题;

5、最后一题提交后,界面显示分数,分数根据答对的百分比计算;

6、用户在分数界面可选择退出或继续做题;

7、小初高数学题目要求见个人项目。

二、用户注册

通过腾讯云申请可以获得签名,发送短信模块代码如下:

import random
def creatCode():
code=random.randint(10000,99999)
return code
def sendCode(num=""):                                 #传递进来一个参数手机号,随机产生六位数验证码并返回
    appid = 140014****
    appkey = "bc26d172cdfc85f8468587bbc879****"
    phone_numbers = [num]  # 手机号可以添加多个多个
    template_id = 2010**


    ssender = SmsSingleSender(appid, appkey)
    params = [code]  # 发送验证码为5位
    try:
        result = ssender.send_with_param(86, phone_numbers[0],
                                         template_id, params)
    except HTTPError as e:
        print(e)
    except Exception as e:
        print(e)

    print(result)

发送验证码之后,手机收到验证码,输入正确的验证码,则进入输入密码界面,否则,提示验证码错误。相关代码如下:

def Registe():          #注册页面
    global code
    code=creatCode()                                           #调用函数得到产生的验证码
    def codeEqual():  # 输入的验证码是否正确
        if str(e3.get())==str(code):
            return 1
        else:
            return 0
        if codeEqual():
            top1 = Tk()
            top1.title("请设置您的密码")
            top1.geometry('400x300+800+450')
            Label(top1, text="请输入密码:").place(relx=0.2, rely=0.2)
            pwd1 = StringVar()
            pwd2 = StringVar()
            E1 = Entry(top1, textvariable=pwd1)
            E1.place(relx=0.3, rely=0.2)
            Label(top1, text="请确认密码:").place(relx=0.2, rely=0.35)
            E2 = Entry(top1, textvariable=pwd2)
            E2.place(relx=0.3, rely=0.35)

            Register = tkinter.Button(top1, text="注册", width=5, height=2, command=lambda: save(photoNum.get(), E1.get()))
            Register.place(relx=0.6, rely=0.6)
            top1.mainloop()
        else:
            codeError()

三、密码要求

密码是否符合要求主要包括三个方面:

  第一、必须包括大小写字母和数字

  第二、两次输入密码是否相同

  第三、密码6-10位

相关代码如下:

def pwdequal():
if E1.get()==E2.get():
return 1
else:
return 0
def pwdright(a):
lena=len(a)
num1=0
num2=0
num3=0
if lena>=6 and lena <=10:
for i in range(lena):
if a[i] >= 'a' and a[i] <= 'z':
num1 = 1
elif a[i] >= 'A' and a[i] <= 'Z':
num2 = 1
elif int(a[i]) >= 0 and int(a[i]) <= 9:
num3 = 1
if num1 == 1 and num2 == 1 and num3 == 1:
return 1
else:
return 0
else:
pwdUnrightLen()
return 0
 

四、数据库(Mysql)部分

数据库主要包括三个方面的用途

1、当输入的验证码正确、密码符合要求的时候,将账号密码存入数据库。相关代码如下:

        def save(users, passwordss):  # 如果验证码正确,存入到数据库中
            if pwdequal()==1:
                if pwdright(str(E1.get()))==1:
                    # 打开数据库连接
                    db = pymysql.connect("localhost", "root", "w199803", "UserName")

                    # 使用 cursor() 方法创建一个游标对象 cursor
                    cursor = db.cursor()
                    # SQL 插入语句
                    sql = "insert into info(user,password) VALUES (\'%s\',\'%s\')" % (users, passwordss)
                    try:
                        # 执行sql语
                        cursor.execute(sql)
                        # 提交到数据库执行
                        db.commit()
                    except:
                        # 如果发生错误则回滚
                        db.rollback()

                    # 关闭数据库连接
                    db.close()
                    registeSuccess()
                else:
                    pwdUnright()
            else:
                pwdNotEqual()

2、登录的时候验证账号密码是否匹配

def fun(users,passwordss):
   import pymysql

   # 打开数据库连接
   db = pymysql.connect("localhost", "root", "w199803", "UserName")

   # 使用cursor()方法获取操作游标
   cursor = db.cursor()

   # SQL 查询语句
   sql = 'select * from info where user = "%s" and password = "%s";'%(users,passwordss)
   # 执行SQL语句
   cursor.execute(sql)
   # 获取所有记录列表
   a=cursor.fetchall()
   if a==():
      return 0
   else:
      return 1
   # 关闭数据库连接
   db.close()

3、注册时,要求当前注册的手机号不能存在数据库里

五、登录部分

账号密码正确,即登录成功,跳转到选择页面,相关代码如下:

def pwdrightt(u,p):
    if fun(u,p):
        select_difficulty()
        loginSuccess()
    else:
        errorUseOrPwd()

六、个人感悟

本次结队编程我主要负责发送验证码、手机注册、登录、跳转部分的工作。编程语言用的是python语言,图形化界面基于tkinter,用户信息(账号密码)基于mysql。本次结队编程采用的是“明确分工,双管齐下”的合作方式,我负责题库页面之前的所有工作,队友负责题库页面之后的所有工作,两个人在编程开始就已经商量好了基本的需求,因此项目管理起来会比较方便。但是其中难免会遇到一些问题,队友之间互相商量、相互帮助也解决了能想到的所有问题,在这个过程中学到了很多东西,并且知道了怎么样合作才能提升更高的效率。此次结队编程领会比较深的地方是在写代码之前一定要搞透所有需求!由于十一想出去玩,十一之前基本上就完成了大部分工作,在浪啊浪回来之后发现需求搞错了,又改了一天的代码。总之,这次结队编程算是比较满意的,在此感谢队友的辛苦付出。

PS:这里是博主的队友,负责选择难度及之后的内容。再次庆幸当时选择的是python语言,否则我的工作量要再高不少。最开始的分工算是很科学的,双方都没有意见,也没有增加不必要的工作量。这次编程学到了有关图形界面的不少东西,可惜功能虽然能实现,界面就和本人一样难以直视,还是靠队友美化的。和博主比起来我的部分内容较少(毕竟验证码是他解决的),不过我也帮他解决了很多问题,对他的BUG比对我的BUG还上心(毕竟都是无法回避的大问题)。十一之前把代码大部分做完让我也能放心的玩,博主也很好的完成了自己的部分没让我负担他的工作。总的来说这次结对编程双方都很满意,也都学到了很多,很感谢队友为了这个项目所做的劳动。评分时的评语和图就当是彩蛋好了

七、部分界面图

 

 

 

 

八、代码原则

美丽优于丑陋。

清楚优于含糊。

简单优于复杂。

复杂优于繁琐。

平坦优于曲折。

宽松优于密集。

重要的是可读性。

特殊的案例不足以特殊到破坏规则。

尽管实践可以打破真理。

错误却不可置之不理。

除非另有明确要求。

面对模棱两可,拒绝猜测。

总会有一个 —— 最好是只有一个 —— 显而易见的方式来明辨。

哪怕这种方式在开始的时候可能并不明显。

现在有比没有好。

尽管没有经常好于现在。

如果如何实现很难被解释清楚,那么这个想法就是一个坏想法。

如果如何实现可以被很好的解释,那么这是一个好想法。

全部评论

相关推荐

10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务