3.4 信息系统的数据处理
本节的三个任务“用户登录功能设计”“图书查询功能设计”“图书预约功能设计”呈现了信息系统不同模块之间的数据传递和处理的过程。
(1)用户登录(/login)模块将用户相关数据(用户编号、用户名)传递给其他模块(系统的其他模块);
(2)用户查询自己借阅的图书时(/showBorrow),可以根据登录时传递来的数据进行查询(不需要再输入用户的个人信息);
(3)用户在预约图书时,可能先查询图书数据,然后根据登录时的用户数据和图书数据进行预约。
用户预约图书时,将用户数据和用户选中的图书数据插入到数据库的借阅表中。 其过程如下图所示。
/show/login图书数据用户数据用户数据+图书数据 本节的三个任务分别对应了上述的三个过程。
任务一活动1“设计用户登录流程”分析了用户登录的过程,要求学生能够根据规定的用户信息验证步骤,完成相应的登录流程图设计。在学习过程中,教师可以让学生根据自己的理解来设定登录流程,然后再转换为相应的流程图,帮助学生理解登录模块的算法。
任务一活动2“编写用户登录判断程序”是根据活动1设计的流程图,完成代码的实现。任务一活动2的要点是帮助学生建构起算法、流程图和代码之间的对应关系,教师可以通过三者之间的同框对比来达成目标。后续内容的学习也可以继续借鉴这一方法。下图为图书登录功能的算法、流程图和代码之间的对应关系图。
11.获取用户信息2.判断用户名在数据库中是否存在,是studentNumber=request.POST.get('txtStudentNumber') password=request.POST.get('txtPassword')cursor.execute(u“”“Select * FROM [student] ……list=cursor.fetchall() if list :if row[1]==password :request.session['userID']=studentNumberrequest.session['userName']=row[2]return HttpResponseRedirect(\else :warn= u\密码错!\else :warn = u\用户不存在!请重试\1223转入第3步,否转入第6步;3.进一步判断该用户的密码是否与数据库中的密码匹配,是转入第4步,否转入第5步;4.保存用户名、用户编号信息,跳转到“/show”;转入第7步;5.给出提示信息“密码错误”,转入第7步;6.给出提示,“无此用户”,转入第7步7.结束634554677return 任务二活动1“根据用户登录信息自动查询借阅信息”(/showBorrow)是系统根据用户登录时传递的“用户编号/学号”数据来查询该用户当前借阅的图书。学生一是要理解信息系统从登录到查询图书借阅信息的过程;二是要掌握用session在页面之间传递数据的方法,包括session的定义(在/login页面)和调用(在/showBorrow页面);三是要掌握根据条件在数据库中进行数据查询的方法(select语句)。
任务二活动2“根据输入数据查询图书”(/show)是信息系统根据用户输入的关键词查询库存的可借阅图书。这里要对比分析信息系统根据用户输入关键词进行图书查询与任务二活动1中信息系统根据登录页面所传递数据进行图书查询,分析两种情况下的信息系统内部数据处理上的区别和联系。学生要掌握用request.POST.get('txtBookName')获取表单数据的用法。
任务三活动1“预约图书并更新可借阅图书数量”主要呈现的是信息系统自动化进行多个相互关联的数据处理任务,包括(1)更新图书数据库中的库存数据;(2)向借阅表插入图书数据。这里要重点理解预约图书不仅仅是将自己选择的图书放到借阅表中,还需要同步修改图书数据库中的库存数据,否则,会造成信息系统与实际情况不符的状况。
任务三活动2“撤销预约功能设计”是本节的一个难点。“撤销预约功能”可以在“图书借阅查询”功能的基础上实现。可参考“预约图书”模块,在现有的“图书借阅查询”模块中图书列表部分增加checkbox,增加一个“还书”或“取消预约”按钮,然后在view.py的“/showBorrow”程序中编写还书的代码。
需要注意的是,图书预约和取消预约功能实现的方法比较多,也可以请学生重新设计信息系统操作流程,比如,用两表联合查询的方式,那么在预约时就不用更新图书表中的数据,而是用“可借阅图书数量=图书表中库存数量-借阅表中图书数量求和数”;在取消预约时,只需要将相应的已预约图书数量设置为0即可。由此,程序设计部分可以得到简化,但是数据库查询语句会相对复杂。更为一般的方式,实质上类似于购物车的机制,在数据库中设置一个图书预约表来临时存放预约的图书。对于学有余力的学生,可以基于图书预约表实现更为复杂的功能,如用预约表作为记录学生阅读偏好的标记,然后进行定向的推送图书等。
本节相关任务代码量较大,可能会造成学生理解上的困难,所以,教师必须要尽可能对代码进行结构化,特别需要在学生理解算法和流程图的基础上,建立起代码和算法、流程图的映射关系,能够读懂程序,能够根据信息系统设计要求修改部分代码。