电影院的选座问题的思考
1.需求分析
后台管理:提供电影院的名字,地址,票价,座位的排布(含空座位),上映时间(含多个)等
前台选座管理:用户可以选择不通的时间,不同的座位,多个座位,选中且放弃的情况,然后支付,出现二维码
2.思考(先提供已经完成的部分,支付部分尚未完成)
就两个页面,一个是表单提交(管理页面),一个是选座页面,后面还有支付页面尚未完成。
部分分解:
1.座位排列的渲染。算法:后台 row*col ,在选座页面的是通过两层for 循环,循环 table 里面的 tr 和td 将所有座位完成。
我这里采用的是ejs 的模版渲染。当然可以用js 拼字符串的,循环table的
2.空座位的处理,也就是某个角落没有座位。需要提出来,单独处理。后台,需要配置好数据,和前端的代码一起配合处理页面。
思路:循环table 里的td,求出td的所在的row 和col,然后 拼成字符串 **排**列,比对从后台传来的字符串,这个字符串也是循环后台配置空的数组得来的。两个字符串如果相等的话,那么将这个座位置空(追加class)。
3.已经定过座位的位置。同样是通过的循环td,比对后台传来的 数组中的数据,如果相等则追加class。如图
这里的做法和上面的一样,我目前还没找到好的方法,这样的做法是比较不妥的。最好的做法应该在循环tabel 的时候,就应该处理这些数据,而不应该先做出表格,再处理表格。
(col 不加1)
3.选座位,考虑到选多个座位,然后取消某些座位的情况。处理如下
细节做法:压入数组,和删除数组的某个元素。 这里的添加一个数组的remove的方法。 (col 不加1 )
4.选座位后,座位和别人冲突的处理
前端处理大部分难点就是上面的部分。下面是后台处理的部分:
后台处理:
后台处理就是存取数据库的部分。我后台用的是 nodejs + express + mongodb。
nodejs 生成电影院数据的接口如下:
nodejs 处理选座位的接口如下:
惭愧:因为后端接口是自己写,前端渲染数据也是自己写的,知识有所欠缺,所以代码就是很糟糕的说,欢迎喷啊,各位有啥好的想法和做法,也可以和我交流。