diff --git "a/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" "b/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" index d7cfe73a1825d3e0ae27091f760b444d02fef17a..920ca7880c7f789574dbe140c5b1693adab1905f 100644 --- "a/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" +++ "b/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/README.md" @@ -1,34 +1,199 @@ # 16-银行叫号排队系统-内容项目-第三单元 队列、栈与树 ### 一、项目主题 +目前,大部分的银行的营业厅都使用了“排队叫号系统”来改善银行窗口排长队的现象,提高银行的服务效率。银行一般开设有多个营业窗口,每个营业窗口办理不同的业务。 + +客户去银行办业务时,需要根据办理业务从取号机上取号排队,排队回执单上不仅会显示排队号码,还会显示前面正在等待服务的人数等信息,如左图所示。然后,客户等待银行叫号系统按先来先办理的原则被安排到指定窗口办理业务,如右图所示。本项目将模拟实现银行取号排队和叫号的功能。 +![输入图片说明](T1.png) + ### 二、项目内容 #### 1.项目背景 +学生已经完成选择性必修1《数据与数据结构》第三章 字符串、队列和栈的学习,结合银行排队叫号系统“先进先出”的规则,以此项目推动学生对知识的掌握。 #### 2.项目设计依据 +银行取号排队和叫号过程具有先进先出的特点,可以使用队列结构,用入队(取号)、出队(叫号)来实现。由于办理不同业务类型的客户在排队时互不影响,因此,根据银行业务类型,可以使用多个队列来处理不同业务类型的排队叫号数据。学生在所学知识基础上,抽象数据特征,选择合理的数据结构组织数据,并能编程解决银行客户的排队问题,能根据新业务的需求改进算法解决新问题。 #### 3.项目概述 +本项目在前面学习的基础上,让学生通过对银行排队叫号系统的项目分析,抽象建模,设计算法,编程实现,实现对队列结构的掌握。 ### 三、项目指导 + +学生需要在理解、体验和分析的基础上,围绕下列问题进行思考: + +1.银行排队叫号系统遵循什么原则? + +2.如何表示、组织数据? + +3.如何实现相应的取号、叫号功能? + + **取号系统** 根据客户选择的业务类型生成排队信息。假设某银行营业厅提供个人业务/对公业务和外币业务这3种业务,并分别用编号A,B,C来表示,如下表所示。客户A6正在个人业务窗口办理业务,客户A7至A11正在依次排队等候,等新客户想办理个人业务,选择编号A后,该客户的排队号为A12,排在A11之后。 + +| 编号 | 业务类型 | +|----|------| +| A | 个人业务 | +| B | 对公业务 | +| C | 外币业务 | + + **叫号系统** 的作用是,当营业窗口空闲时,营业人员可以通过选择相对应的编号依次进行叫号。假设该营业厅共有3个营业窗口,分别用编号1,2,3表示,每个窗口只办理一种业务。如下表所示。客户A7至A12依次排队等候办理个人业务,当1号窗口空闲时,营业人员选择编号1后,客户A7将被叫号提醒到1号窗口办理业务。 + +| 编号 | 窗口编号 | 业务类型 | +|----|------|------| +| 1 | 1号窗口 | 个人业务 | +| 2 | 2号窗口 | 对公业务 | +| 3 | 3号窗口 | 外币业务 | + ### 四、项目实施流程 +1.问题提出 2.问题分析 3.问题解决 4.总结汇报 ### 五、项目实施环节安排 +本单元项目实施定位于学生已经学完选择性必修1《数据与数据结构》第三章的知识内容。通过本项目的实施,学生将对程序设计的各个环节、题目分析与算法设计、Python的基本控制结构以及不同的数据类型等内容在项目中进行综合应用。具体安排如下: #### 第一阶段:项目准备阶段 1. 确定项目主题 +根据项目内容,确定项目主题。 2. 项目需求分析与总体规划 +(1)明确项目实现的功能以及项目输入(即处理对象或原始数据)与输出(即处理结果)。 + +(2)确定项目在实施过程中可以分成几个阶段完成,明确每个阶段需要完成的任务。 + +| 阶段 | 内容 | +|----|-------| +| 第一 | 组织数据 | +| 第二 | 取号 | +| 第三 | 叫号 | -3. 分组、分工 +3. 分组、分工 +建议3~~4名学生为一组,确定一个组长作为项目负责人,统一协调组内成员各阶段的任务。项目在不同实施阶段每个组员都有不同的项目分工。 #### 第二阶段:项目的指导阶段 + 1. 抽象与建模 +(1)数据符号化处理 + +- 把参加排队的n个客户抽象成一组数据a1,a2,a3…aN,其中a1是队首元素,aN是队尾元素。 +- 用队列quea存储办理个人业务的客户排队号码,用头指针heada表示quea队首元素位置,用尾指针taila表示quea队尾元素的下一个位置; +- 用队列queb存储办理对公业务的客户排队号码,用头指针headb表示queb队首元素位置,用尾指针tailb表示queb队尾元素的下一个位置; +- 用队列quec存储办理外币业务的客户排队号码,用头指针headc表示quec队首元素位置,用尾指针tailc表示quec队尾元素的下一个位置; +- 用s存储输入的编号 + +(2)建立计算模型 + +- 取号。判断某业务队列是否已满,如不满,生成一个排队顺序号并插入到队列的队尾,将尾指针变量指向下一个位置,显示取号信息。 + +- 叫号。判断某业务队列是否为空,如不为空,则返回队列队首元素,并将头指针变量指向下一个位置。 + + 2. 设计算法 +第一步: 创建队列quea,queb和quec,初值均为0;设置heada,headb,headc,taila,tailb,tailc的值为0 + +第二步: 设计操作界面,用s存储输入的编号 + +第三步:当S=”A”时,判断队列quea是否已满,如不满,生成一个排队顺序号并插入到队尾,显示排队信息,taila加1 + +第四步: 当S=”B”时,判断队列queb是否已满,如不满,生成一个排队顺序号并插入到队尾,显示排队信息,tailb加1 + +第五步:当S=”C”时,判断队列quec是否已满,如不满,生成一个排队顺序号并插入到队尾,显示排队信息,tailc加1 + +第六步:当S=”1”时,判断队列quea是否为空,如为空,显示“无客户”;否则,队列quea队首元素出队,heada加1,显示叫号信息 + +第七步: 当S=”2”时,判断队列queb是否为空,如为空,显示“无客户”;否则,队列quea队首元素出队,headb加1,显示叫号信息 + +第八步:当S=”3”时,判断队列quec是否为空,如为空,显示“无客户”;否则,队列quea队首元素出队,headc加1,显示叫号信息 + +第九步: 当S=”4”时,程序退出 3. 项目程序实现 +``` +#第一阶段:组织数据,创建队列 +quea=[0 for i in range(500)] +queb=[0 for i in range(500)] +quec=[0 for i in range(500)] +heada=taila=0 +headb=tailb=0 +headc=tailc=0 +print("———————————————————————————————————————") +print("取号编号:") +print(" A—个人业务 B—对公业务 C—外币业务") +print("———————————————————————————————————————") +print("叫号编号:") +print(" 1—1号窗口 2—2号窗口 3—3号窗口") +print("———————————————————————————————————————") +print(" 4—退出系统") +print("———————————————————————————————————————") +s=input("您好,取号请按业务输入(A-D),叫号请按窗口号输入(1-4):") +#第二阶段:取号功能 +while s!="4": + if s=="A": + if taila<=1000: + quea[taila]=taila+1 + print("你的号码:A%d,办理业务:个人业务,你前面还有%d人等候"%(quea[taila],taila-heada)) + taila=taila+1 + elif s=="B": + if tailb<=1000: + queb[tailb]=tailb+1 + print("你的号码:B%d,办理业务:对公业务,你前面还有%d人等候"%(queb[tailb],tailb-headb)) + tailb=tailb+1 + elif s=="C": + if tailc<=1000: + quec[tailc]=tailc+1 + print("你的号码:C%d,办理业务:外币业务,你前面还有%d人等候"%(quec[tailc],tailc-headc)) + tailc=tailc+1 +#第三阶段:叫号功能 + elif s=="1": + if heada==taila: + print("暂无客户等待") + else: + print("请A%d号到1号窗口"%(quea[heada])) + heada=heada+1 + elif s=="2": + if headb==tailb: + print("暂无客户等待") + else: + print("请B%d号到2号窗口"%(queb[headb])) + headb=headb+1 + elif s=="3": + if headc==tailc: + print("暂无客户等待") + else: + print("请C%d号到3号窗口"%(quec[headc])) + headc=headc+1 + s=input("您好,取号请按业务输入:A-D,叫号请按窗口号输入:1-4") +``` + #### 第三阶段:项目汇报阶段 +课时分配:1课时。 + +1.学生制作项目汇报材料。 + +(1)展示与分享项目成果。 + +(2)对完成项目的感悟,总结项目的实施流程。 + +(3)回顾项目实施过程中存在的困难及解决途径。 + +2.教师组织学生对每个小组项目进行评价。 ### 六、项目汇报环节安排 +1.教学导入。 + +  鼓励学生作为小组项目发言人,自主准备汇报材料,介绍自己所在小组项目实施的过程、成果、意义及感悟,以期待得到同学的“认可”。引导学生以项目评价量化表为标准,客观给予评价。汇报的内容和形式自定,可以是文稿演示、成果报告、展板展示、项目实施手册展示和项目活动过程陈述等方式。教师对小组汇报的项目研究报告进行打分,并对评选出的最佳小组给予奖励。 + +  汇报过程对学生来说是一个非常重要的学习经历,也是对学生的总结反思、整理资料能力及写作能力的一次挑战。 + +2.分组汇报。 + +  每个项目研究小组派小组代表采用合适的方式汇报小组的项目经历与成果。 + +3.学生提问,教师点评,评价打分。 + +  根据“项目成果评价表”进行评价,并记录同学们提出的意见。 + +  每个小组可以根据同学们的评价进一步地修改项目中存在的问题,将自评、他评、师评和专家评价结合起来,借助信息技术更及时呈现评价结果。为了激励学生并检验各组的项目成果,教师合理评价并为“最佳”项目成果颁发奖项,以评价的形式引导学生梳理、总结项目成果。 + + **拓展提高:** +银行分普通客户和VIP用户,VIP用户具有优先权。假如这上述3种业务队列都有客户在排队等候,当VIP客户出现时,VIP客户将优先于普通用户办理业务。请修改上述程序,实现该功能 diff --git "a/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/T1.png" "b/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/T1.png" new file mode 100644 index 0000000000000000000000000000000000000000..24bfac74436829e2e8d5cb5c8f43d0644cd1fec9 Binary files /dev/null and "b/16-\351\223\266\350\241\214\345\217\253\345\217\267\346\216\222\351\230\237\347\263\273\347\273\237-\345\206\205\345\256\271\351\241\271\347\233\256-\347\254\254\344\270\211\345\215\225\345\205\203 \351\230\237\345\210\227\343\200\201\346\240\210\344\270\216\346\240\221/T1.png" differ