%\document{article}
\documentclass[UTF8]{ctexart}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{float}
\title{银行模拟}
\author{朱河勤   PB16030899}
\pagestyle{fancy}

%\chead{银行模拟}
\lfoot{朱河勤   PB16030899}
\rfoot{2017/10/21}
\begin{document}
\maketitle
\tableofcontents
\section{需求分析}
\paragraph{1}
创建银行排队窗口，还可以增加vip通道，可通过队列来实现，队列可以用链表封装得到
\paragraph{2}
每个客户可以存款，取款，如果银行钱不够，让客户处于等待状态，直到银行的钱足够
\paragraph{3}
如果排队的队伍过长，在最后的可以选择较短的队伍
\paragraph{4}
把所有事件打印出来
\section{概要设计}
\subsection{链表}
ADT linkList\{\\
\paragraph{数据对象}：D=\{$a_i| a_i , i =0,1 2,\dots,n$\}\\
\paragraph{数据关系}：R1 = \{$<a_{i-1},a_i> | a_{i-1},a_i in D ,i = 2,3,\dots,n$\}\\
\paragraph{基本操作}：
\subparagraph{s = linkList()}创建一个链表s
\subparagraph{s.append(x)} 向lst尾部增加节点x
\subparagraph{x = s[i]}将x引用链表第i个 节点
\subparagraph{del s[i]}删除链表第i个 节点
\subparagraph{s[i] = x}将链表第i个 节点赋值x
\subparagraph{s.insert(i,x)}将链表第i个 节点前插入x
\subsection{双端队列}
ADT linkList\{\\
\paragraph{数据对象}：D=\{$a_i| a_i , i =0,1 2,\dots,n$\}\\
\paragraph{数据关系}：R1 = \{$a_i,<a_{i-1}> | a_{i-1},a_i in D ,i = 2,3,\dots,n$\}\\
\paragraph{基本操作}：
\subparagraph{s = queue()}创建一个队列s
\subparagraph{s.append(x)} 向lst尾部增加节点x
\subparagraph{x = s[i]}将x引用第i个 节点
\subparagraph{s.pop()}右边第一个元素出队
\subparagraph{s.popleft()}左边第一个元素出队
\subparagraph{s.appendleft()}左边第一个元素进队
\}
\section{详细设计}
\subsection{用户类型}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{client.png}
\end{figure}
\subsection{窗口类型}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{window.png}
\end{figure}
\subsection{银行类型}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{bank.png}
\end{figure}
\subsection{显示信息的函数代码}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{display.png}
\end{figure}
\section{调试分析}
\paragraph{1}
整体上，定义了window，client，bank类型， 主要的操作在bank类中的方法实现
\paragraph{2}
为了标识每个用户，我给每个用户设置了一个英文名（可以有重复）。我在网上搜索了最常用的100个英文名，然后赋值到python交互模式，以字符串保存，然后用正则表达式匹配英文名
\paragraph{3}
在输出信息上，我通过清屏来更新信息。为了对齐更加美观，为另存了一个字典来保存每个客户统一长度的名字
\section{用户手册}
本程序需要在安装了python下的环境运行，可以在python的ide中使用文件运行，也可以通过命令行运行python bankSimaulate.py\\
下面为程序运行界面
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{demonstrate.png}
\end{figure}
\section{测试结果}
\subsection{输入10000，100，20，50，2}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{result.png}
\end{figure}
\subsection{输入1000，50，30，80，4}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{result2.png}
\end{figure}
\subsection{输入50000，60，40，300，6}
\begin{figure}[H]
  \centering
  \includegraphics[width=1\textwidth]{result3.png}
\end{figure}
\section{附录}
源文件
bankSimulate.py
\end{document}