算法与数据结构课程设计报告设计题目:航空售票系统专业:班级:学生:学号:指导教师:2013~2014学年第二学期一、需求分析1,该航空售票系统主要功能有录入、查询、订票、退票等功能,管理员还有可以查询订票信息的相关功能。本系统,根据不同的用户角色设置有不同权限,管理员可以查看本系统所有的信息,普通客户只有查询、订票、退票的全部或部分功能。航空售票系统主要是让普通客户可以登录该系统查询、订票、退票,方便乘客安排自己的行程。同时,使航空公司能够清楚的看到每条航线的信息,方便管理。2,该系统是利用C#语言来描述数据结构的单链表和单链队,并且将航空订票的信息保存在txt文件中。3,系统能够实现的功能和操作如下:3.1录入功能(管理员)系统管理员可以添加终点站、航班号、飞机型号、乘员定额、飞行日期的航行信息,并将该信息添加到单链表中,储存在txt文件中。3.2查询功能(管理员-用户)系统默认出发城市是荆州,用户可以通过输入将要到达的城市和日期,并根据用户提供的订票量(最多一次性限购5张票),来判断是否有符合用户行程的航班信息。如航空公司有符合用户需求的航班,则显示出来;若余票量过少或没有,则为用户办理预定机票手续;如是因为出发日期或航空公司没有开通用户需要达到城市的航线,则提醒用户重新输入。当系统管理员需要查看每个航线的信息时,为系统管理员特定提供的查询功能,可以通过终点站、飞行时间、航班号、飞机型号查询相关的信息。3.3订票功能(用户)乘客可以通过输入姓名和身份证号,将已经查询到的航班信息导入到文本框中,如果余票量过少或没有,为用户办理机票预定。3.4退票功能(用户-管理员)乘客可以将根据订票的姓名和航班号退票。同时,可以通过提供管理员权限,为等待预定的第一位用户预订。若第一位用户的订票量不满足退票的数量,就为后面乘客办理,直到满足为至。若所有的都不满足,则保留机票,不为预定用户办理订票。3,5订票信息(管理员)管理员可以查看已订票乘客所有的订票信息,同时也可以查看所有等待订票的乘客信息。3.6航班信息(管理员)管理员可以查看终点站、航班号、飞机型号、飞机日期、乘员定额、余票量。4,本系统对不同的用户角色有权限设置。管理员的用户名或密码是系统内设置的无法更改或注册,乘客可以通过姓名和身份证号码注册登录。(注:身份证号即为密码)二、概要分析6录入功能订票信息查询功能航班信息数据管理模块终点站航班号飞行日期飞行型号……(可扩展)航班信息……(可扩展)1.1,功能模块(管理员)已订票客户为订票客户查看航班所有的信息2.1单链表(详见类Linklist_singly.cs)///summary///结点类////summary///typeparamname=T/typeparampublicclassNodeT{privateTdata;privateNodeTnext;///summary///构造函数2,数据结构(C#)订票功能查询功能退票功能终点站航班号飞行日期飞行型号……(可扩展)有票无票录入等待离开退票候补是办理数据管理模块1.2,功能模块(乘客)////summarypublicNode(){}publicNode(Tval){data=val;}///summary///数据域属性////summarypublicTData{get{returndata;}set{data=value;}}///summary///引用域的属性////summarypublicNodeTNext{get{returnnext;}set{next=value;}}}///summary///单链表(头结点的引用不为空)////summary///typeparamname=T/typeparampublicclassLinklistT{privateNodeThead;///summary///构造函数////summarypublicLinklist(){head=null;}///summary///头引用的属性////summarypublicNodeTHead{get{returnhead;}set{head=value;}}///summary///求单链表的长度////summary///returns链表的长度/returnspublicintGetLength(){NodeTp=head;intlen=0;while(p!=null){++len;p=p.Next;}returnlen;}///summary///判断链表是否为空////summary///returns若为空,返回true,否则返回false/returnspublicboolIsEmpty(){if(head==null)returntrue;elsereturnfalse;}///summary///在单链表末尾添加数据////summary///paramname=itemT类型的数据/parampublicvoidAppend(Titem){NodeTq=newNodeT(item);NodeTp=newNodeT();if(head==null){head=q;return;}p=head;while(p.Next!=null){p=p.Next;}p.Next=q;}///summary///删除单链表中第i个结点////summary///paramname=i索引号/param///returns/returnspublicTDelete(inti){if(IsEmpty()||i0){returndefault(T);//T是类为引用类型,返回null;}NodeTq=newNodeT();if(i==1)//删除头结点{q=head;head=head.Next;returnq.Data;}NodeTp=head;intj=1;while(p.Next!=null&&ji)//p为要删除的结点,q为p前面的一个结点{++j;q=p;p=p.Next;}if(i==j){q.Next=p.Next;//删除p结点returnp.Data;}elsereturndefault(T);}}2.2单链队(详见类Linklist_Queue.cs,代码略)三,功能实现本系统提供不同角色的登录功能。管理员的用户名:王昌,密码:123;用户的登录名的用户名:王昌,密码:421126199409203214。系统为管理员和用户分别提供了不同的功能。为了使系统的功能实现更加清晰,故本系统采用了三层架构的知识来实现不同角色的不同功能。首先,建立了三个类库,分别为数据层(DAL)、模型层(Model)、业务层(BLL)。数据层(DAL)主要是分别获取航班信息、已订票客户信息、未订票客户信息,同时还提供保存航班信息、已订票客户信息、未订票客户信息的方法。模型层(Model)提供了航班信息、已订票客户信息、未订票客户信息的类,分别提供了相关信息的字段和属性。业务层(BLL)是实现用户与windows窗体交互的功能具体实现的方法。数据层(DAL)、模型层(Model)、业务层(BLL)和windows窗体,这几者之间是相互调用的。数据层需要对模型层进行引用,业务层需要调用模型层、数据层来实现相关功能,windows窗体是与业务层进行交互的,与其他的没有之间的联系。3,1模型层(Model)飞行类publicclassFlightInformation{privatestringter_name;privatestringair_num;privatestringplane_num;privatestringday;privateinttkt_amt;privateinttkt_sur;///summary///航班信息////summary///paramname=t终点站/param///paramname=a航班号/param///paramname=p飞机型号/param///paramname=d飞行时间/param///paramname=amt乘员定额/param///paramname=sur余票量/parampublicFlightInformation(stringt,stringa,stringp,stringd,intamt,intsur){ter_name=t;air_num=a;plane_num=p;day=d;tkt_amt=amt;tkt_sur=sur;}publicFlightInformation(){}///summary///终点站的属性////summarypublicstringTer_name{get{returnter_name;}set{ter_name=value;}}///summary///航班号的属性////summarypublicstringAir_num{get{returnair_num;}set{air_num=value;}}///summary///飞机型号////summarypublicstringPlane_num{get{returnplane_num;}set{plane_num=value;}}///summary///飞行时间////summarypublicstringDay{get{returnday;}set{day=value;}}///summary///乘员定额////summarypublicintTkt_amt{get{returntkt_amt;}set{tkt_amt=value;}}///summary///余票量////summarypublicintTkt_sur{get{returntkt_sur;}set{tkt_sur=value;}}}已(未)订票客户信息类publicclasscustomer_book{privatestringter_name;privatestringname;privatelongidnumber;privateinttkt_book;privatestringday;///summary///未订票客户信息////summary///paramname=ter终点站/param///paramname=n客户姓名/param///paramname=i身份证号/param///paramname=t订票数量/param///paramname=d起飞时间/parampubliccustomer_book(stringter,stringn,longi,intt,stringd){ter_name=ter;name=n;idnumber=i;tkt_book=t;day=d;}publiccustomer_book(){}///summary///终点站的属性////summarypublicstringTer_name{get{returnter_name;}set{ter_name=value;}}///summary///客户姓名的属性////summarypublicstringName{get{returnname;}set{name=value;}}///summary///客户身份证号的属性////summarypubliclongIdnumber{get{returnidnumber;}set{idnumber=value;}}///summary///订票数量的属性////summarypublicintT