版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/[键入文档标题][键入文档副标题]XX大学XX大学计算机科学与技术1班陈斌E11314079陈柚霖E11314033刘昊霖E113140312016-9-202016-9-20目录一、目的及要求21.实验目的22.实验要求2二、实验环境3三、实验内容与步骤31.系统需求分析32.概念结构设计73.逻辑结构设计134.数据库与应用系统的实施和维护16四、小组成员分工47五、总结48目的及要求实验目的通过本次课程设计,熟练掌握一种开发语言〔如C#和一种数据库系统软件〔如SQLserver2014的使用。加深对软件工程的理解,训练编写程序的良好习惯。包括:认真编写需求分析文档、做好系统功能和数据库设计、学会自己进行程序的算法、数据结构设计。培养良好的程序设计风格〔模块划分、接口设计、程序界面、应用系统设计和习惯〔程序备份、版本更新与控制,提高软件测试、调试的能力与技巧。通过本次课程设计,应该达到具有独立完成小型应用系统设计的能力,具备编写较为规范的软件设计文档的能力。实验要求民航售票管理系统主要分为机场、航空公司和客户三方的服务。航空公司提供航线和飞机的资料,机场则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该有航班线路和剩余票数的查询,以及网上订票等功能。客户又可以分为两类,一类是普通客户,对于普通客户只有普通的查询功能和订票功能,没有相应的机票优惠,另一种是经常旅客,需要办理注册手续,但增加了里程积分功能和积分优惠政策。机场还要有紧急应对措施,在航班出现延误时,要发送相应的信息。本系统至少能完成如下查询功能:查某代售地某月售出的票数和金额。查航空公司拥有多少航班。查某天某航空还剩多少票或座位。查某天某航空还剩商务舱座位以及经济舱座位票价。查某航空公司拥有多少售票点、某月售出总金额以及某航线售出票数。实验环境本系统开发平台及运行环境如下:系统开发平台:MicrosoftVisualStudio2015系统开发语言:C#数据库管理软件:SQLServer2014运行平台:Windows10教育版运行环境:Microsoft.NETFrameworkSDKv4.5实验内容与步骤系统需求分析信息要求:指用户需要从数据库中获得信息的内容与性质。数据库中需要存储哪些数据。本系统是针对民航售票进行管理,主要涉及航空公司信息、客户信息、飞机信息、航线信息、航班信息、订票信息等多种数据信息。用户名和密码信息:字段名数据类型长度主键否描述Usernamevarchar16是用户名Passwordvarchar16密码Userclasschar1用户类别航空公司信息:字段名数据类型长度主键否描述Aidvarchar16是编号Anamevarchar64名称Aaddrvarchar64地址Acontvarchar32联系方式机场信息:字段名数据类型长度主键否描述APidvarchar16是编号APnamevarchar64名称APaddrvarchar64地址APcontvarchar32联系方式客户信息:字段名数据类型长度主键否描述Cidvarchar16是编号Cnamevarchar16姓名Ccontchar11联系方式IsSpecchar1特殊客户?Pointsint里程积分飞机信息:字段名数据类型长度主键否描述Pidvarchar16是编号Typevarchar32型号SeatsNumint座位数Aidvarchar16外键航空公司编号座位信息:字段名数据类型长度主键否描述Sidvarchar16是编号Levelchar1座位等级Pidvarchar16外键飞机编号IsChoosechar1是否被选航线信息:字段名数据类型长度主键否描述Lidvarchar16是编号SPositionvarchar32起点EPositionvarchar32终点Distancereal里程Aidvarchar16外键航空公司编号航班信息:字段名数据类型长度主键否描述Fidvarchar16是编号Ftimedatetime时间Pidvarchar16外键飞机编号Lidvarchar16外键航线编号APidvarchar16外键机场编号Levelchar1座位等级Pricereal票价订票信息:字段名数据类型长度主键否描述BidintIdentity<1,1>是编号Fidvarchar16外键航班编号Cidvarchar16外键客户编号Sidvarchar16外键座位编号Payreal购票金额Btimedatetime购票时间处理要求:用户需要完成什么处理功能,对处理的响应时间有什么要求〔给出功能模块图。民航售票管理系统主要满足三类用户的要求,这三类用户分别是航空公司管理员、机场管理员和客户〔分为普通客户和经常旅客。航空公司管理员提供航线和飞机的资料,机场管理员则对在本机场起飞和降落的航班和机票进行管理,而客户能得到的服务应该有航班线路和剩余票数的查询,以及网上订票等功能。具体的需求分析如下:航空公司管理员:提供飞机基本信息提供航班基本信息查询售票点信息、某月售出总金额以及某航线售出票数机场管理员:对本机场的航班信息进行管理对本机场的机票信息进行管理查询某月售票数量和金额客户:查询航班信息机票订购里程积分优惠<经常旅客>功能模块图如下所示:图SEQFigure\*ARABIC1功能模块图安全性与完整性要求。数据库的安全性是指保护数据库,防止不合法的使用所造成的数据泄露和破坏。数据库系统中保证数据安全性的主要措施是进行存取控制,即规定不同用户对于不同数据对象所允许执行的操作,并控制各用户只能存取他有权〔操作权力存取的数据。存取控制机制分为自主存取控制〔DAC与强制存取控制〔MAC,主要包括两部分:一是定义用户权限,并将用户权限登记到数据字典中;二是合法权限检查。数据库完整性指数据的〔逻辑而非物理正确性和相容性。为了防止数据库中存在不合语义的数据,防止错误数据的输入和输出。数据库完整性技术包括完整性约束条件与完整性检查两部分。完整性约束条件指为维护数据库的完整性,DBMS提供加在数据库数据之上的语义约束条件,作为数据库模式的一部分存入数据库。完整性检查意味检查数据库是否满足完整性约束条件的机制。完整性约束条件作用的对象可以是关系、元组、列三种。其中列约束主要是列的类型、取值范围、精度、排序等的约束条件。元组的约束是元组中各个字段间的联系的约束。关系的约束是若干元组间、关系集合上以及关系之间的联系的约束。完整性约束条件涉及这三类对象,其状态可以是静态的,也可以是动态的。完整性约束条件一般分为实体完整性、参考完整性自定义完整性。定义实体完整性约束条件要考虑修改关系中主码的问题;定义参考完整性约束条件要考虑外码能否接受空值问题、在被参照关系中删除元组的问题〔级联删除或受限删除、在参照关系中插入元组时的问题。概念结构设计根据分析,民航售票管理系统包含航空公司、机场、客户、飞机、座位、航线、航班及机票8个实体,各个实体的局部E-R图如下所示,其中航空公司编号是航空公司实体的主码,机场编号是机场实体的主码,客户编号是客户实体的主码,飞机编号是飞机实体的主码,座位编号是座位实体的主码,航线编号是航线实体的主码,航班编号是航班实体的主码,机票编号是机票实体的主码。图SEQFigure\*ARABIC2航空公司实体及属性图SEQFigure\*ARABIC3机场实体及属性图SEQFigure\*ARABIC4客户实体及属性图SEQFigure\*ARABIC5飞机实体及属性图SEQFigure\*ARABIC6座位实体及属性图SEQFigure\*ARABIC7航线实体及属性图SEQFigure\*ARABIC8航班实体及属性图SEQFigure\*ARABIC9机票实体及属性逐一设计分ER图,合并分ER图,生成基本ER图。根据需求分析的结果可以看到,在民航售票管理系统中一个航空公司可以提供多条航线、多架飞机,飞机拥有多个座位,一个机场可以安排多个航班,一个航班对应一架飞机、涉及一条航线、可以有多个客户选择乘坐,一个客户可以订购多张机票,一张机票对应一个座位。由以上分析可得各个局部的E-R图,如下所示〔忽略各个实体的属性:图SEQFigure\*ARABIC10航空公司与飞机及航线之间的E-R图图SEQFigure\*ARABIC11飞机与航班之间的E-R图图SEQFigure\*ARABIC12航班与航线之间的E-R图图SEQFigure\*ARABIC13机场与航班之间的E-R图图SEQFigure\*ARABIC14客户与航班之间的E-R图图SEQFigure\*ARABIC15客户与机票之间的E-R图图SEQFigure\*ARABIC16飞机与座位之间的E-R图图SEQFigure\*ARABIC17座位与机票之间的E-R图若在合并中存在属性冲突、命名冲突以及结构冲突,给出解决办法,若存在不必要的冗余,则消除并给出设计方法。合并分E-R图并不是单纯地将各个分E-R图画在一起,而是必须消除各个分E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。各个分E-R图之间的冲突包括3种:属性冲突、命名冲突以及结构冲突。经过分析,将航空公司、机场、客户、飞机、座位、航线、航班及机票之间进行关联。因此,合并各个分E-R图,生成基本E-R图,如下所示:图SEQFigure\*ARABIC18民航管理系统基本E-R图基本ER图中要求标明主码、外码、联系类型。基本E-R图中,各实体的主码用下划线加粗显示,外码倾斜加粗表示,联系类型表明于连接线上。逻辑结构设计给出由ER得到的关系模型,并注明转换过程中应用的规则。E-R图向关系数据模型转换的基本规则如下:一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键;一个联系转化为一个关系模式,与该联系相连的各个实体的键以及联系的属性为该关系的属性,该关系的键分为3种情况:1:1联系:任一相连实体的键都可以作为该关系的主键。1:n联系:n端<多端>实体的键作为该关系的主键。m:n联系:各端实体的键的组合为该关系的主键。其中,1:1联系可以和联系的任意一端实体的关系模式合并,将联系的属性和另一端关系模式的键加入该关系模式即可;1:n联系则需要和多端的关系模式合并,在多端关系模式中加入联系的属性和1端关系模式的键即可;m:n联系不能与实体合并,必须转换为单独的关系模式。根据E-R图向关系数据模型转换的相关规则,将图18所示的E-R图转换为关系数据模型,得到民航售票管理系统的关系模式如下:航空公司〔编号,名称,地址,联系方式,应用规则1>。航线〔编号,航空公司编号,起点,终点,里程,应用规则2>-②1:n联系。飞机〔编号,航空公司编号,型号,座位数,应用规则2>-②1:n联系。机场〔编号,名称,地址,联系方式,应用规则1>。航班〔编号,飞机编号,航线编号,机场编号,时间,座位等级,票价,应用规则2>-①1:1联系及规则2>-②1:n联系。座位〔编号,飞机编号,等级,被选?,应用规则2>-②1:n联系。客户〔编号,姓名,联系方式,特殊客户?,积分,应用规则1>。机票〔编号,座位编号,航班编号,客户编号,金额,应用规则2>-①1:1联系及规则2>-②1:n联系。数据模型的优化。数据库的逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该根据应用需要适当地修改、调整数据模型的结构,这就是数据模型的优化。关系数据模型的优化通常以规范化理论为指导。确定数据依赖。分别写出每个关系内部属性的以及不同关系模式属性间的数据依赖。根据需求分析可知:航空公司关系模式的数据依赖:{编号->名称,编号->地址,编号->联系方式};航线关系模式的数据依赖:{编号->航空公司编号,编号->起点,编号->终点,编号->里程};飞机关系模式的数据依赖:{编号->航空公司编号,编号->型号,编号->座位数};机场关系模式的数据依赖:{编号->名称,编号->地址,编号->联系方式};航班关系模式的数据依赖:{编号->飞机编号,编号->航线编号,编号->机场编号,编号->时间,〔编号,座位等级->票价};座位关系模式的数据依赖:{编号->飞机编号,编号->等级,编号->被选?};客户关系模式的数据依赖:{编号->姓名,编号->联系方式,编号->特殊客户?,编号->积分};机票关系模式的数据依赖:{编号->座位编号,编号->航班编号,编号->客户编号,编号->金额};对各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。采用分析方法,根据数据项之间逻辑关系的说明,已经消除了各个关系模式之间的数据冗余联系。按照数据依赖的理论确定个关系模式分别属于第几范式。根据各个范式的定义:航空公司关系模式属于BCNF,因为该关系模式的码是航空公司编号,且每一个决定因素都包含码,所以∈BCNF;航线关系模式属于BCNF,因为该关系模式的码是航线编号,且每一个决定因素都包含码,所以∈BCNF;飞机关系模式属于BCNF,因为该关系模式的码是飞机编号,且每一个决定因素都包含码,所以∈BCNF;机场关系模式属于BCNF,因为该关系模式的码是机场编号,且每一个决定因素都包含码,所以∈BCNF;航班关系模式属于1NF,因为该关系模式的码是〔编号,座位等级,存在非主属性部分依赖于码,所以∈1NF;座位关系模式属于BCNF,因为该关系模式的码是座位编号,且每一个决定因素都包含码,所以∈BCNF;客户关系模式属于BCNF,因为该关系模式的码是客户编号,且每一个决定因素都包含码,所以∈BCNF;机票关系模式属于BCNF,因为该关系模式的码是机票编号,且每一个决定因素都包含码,所以∈BCNF;用户子模式设计。将概念模型转换为全局逻辑模型后,还应该根据局部应用需求,结合具体DBMS的特点设,计用户的外模式。机场管理员查某代售地某月售出的票数和金额,建立相应视图:视图1〔机场编号,机场名称,月售票数,月售票金额;客户查航空公司拥有多少航班,建立相应视图:视图2〔航空公司编号,航空公司名称,航班总数;客户查某天某航空还剩多少票或座位,建立相应视图:视图3〔航空公司编号,航空公司名称,剩余票数,剩余座位数;客户查某天某航空还剩商务舱座位以及经济舱座位票价,建立相应视图:视图4〔航空公司编号,航空公司名称,航班编号,座位等级,票价;航空公司管理员查某航空公司拥有多少售票点、某月售出总金额以及某航线售出票数,建立相应视图:视图5〔航空公司编号,航空公司名称,售票点总数,月售总金额;视图6〔航空公司编号,航空公司名称,航线编号,售出票数;对不同级别用户定义不同的视图保证系统安全性。客户只能查看航空公司、机场等基本信息,及票价信息、座位信息,个人基本信息;航空公司管理员可以查看涉及该航空公司的所有信息〔如售票统计信息等,机场管理员可以查看涉及该机场的所有信息〔如该机场售票统计信息等。数据库与应用系统的实施和维护应用程序的编码和调试。给出截图〔标明图号简单阐述该模块的基本功能。给出该模块的设计思路,针对难点部分进行详细地阐述。首先是登录模块:输入用户名和密码,选择登录用户,点击登录。链接数据库,检查数据库中是否存在该用户,以及密码是否正确,如果错误,提示用户名或密码错误,否则进入相应的用户界面。相关代码:///判断用户名和密码是否正确///</summary>///<paramname="name">用户名</param>///<paramname="pwd">密码</param>///<paramname="type">用户类型〔1为航空公司管理员,2为机场管理员,3为经常旅客privateboolIsLogin<stringname,stringpwd,inttype>{boolb=false;using<SqlConnectioncon=newSqlConnection<strCon>>{stringsql;if<type==1>sql="selectcount<*>fromAdminswhereADid=@nameandADpass=@pwdandAidisnotnull";elseif<type==2>sql="selectcount<*>fromAdminswhereADid=@nameandADpass=@pwdandAPidisnotnull";elsesql="selectcount<*>fromUserswhereCid=@nameandCpass=@pwd";using<SqlCommandcmd=newSqlCommand<sql,con>>{try{con.Open<>;//给sql中的参数赋值SqlParameters1=newSqlParameter<"@name",name>;SqlParameters2=newSqlParameter<"@pwd",pwd>;cmd.Parameters.Add<s1>;cmd.Parameters.Add<s2>;intn=Convert.ToInt32<cmd.ExecuteScalar<>>;if<n>0>b=true;}catch<Exceptionex>{MessageBox.Show<ex.Message>;connectDatabase=false;}}}returnb;}管理员模块:登录航空公司管理员账号,进入航空公司管理员界面,管理员首先向数据库中添加相应的数据信息。飞机信息录入:点击飞机信息录入,可以进行添加飞机信息操作。可以自动导入文件,也可以手动添加相关信息。以导入文件为例:点击导入文件按钮,选择相应文件,点击打开。如果格式不正确,则给出相应提示,否则导入相应信息,点击提交,将数据存入数据库中。同理,座位信息、航线信息均可按此方法导入数据库中。相关代码为://提交privatevoidbutton4_Click<objectsender,EventArgse>{//提交前检查是否有信息,没有则提示用户至少添加一行数据if<dataGridView1.Rows.Count==0>MessageBox.Show<"请至少添加一行数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk>;else{inttag=0;using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;//检查是否有不完整信息for<inti=0;i<dataGridView1.RowCount;i++>{for<intj=0;j<dataGridView1.ColumnCount;j++>{if<<string>dataGridView1.Rows[i].Cells[j].Value==null>{MessageBox.Show<"存在不完整信息,请检查录入信息","提示">;return;}}}for<inti=0;i<dataGridView1.RowCount;i++>{stringsql="";switch<type>{case1:sql=string.Format<"insertintoPlanevalues<'{0}','{1}',{2},'{3}'>",dataGridView1.Rows[i].Cells[0].Value.ToString<>,dataGridView1.Rows[i].Cells[1].Value.ToString<>,Convert.ToInt32<dataGridView1.Rows[i].Cells[2].Value>,Aid>;break;case2:sql=string.Format<"insertintoSitvalues<'{0}','{1}','{2}','N'>",dataGridView1.Rows[i].Cells[0].Value.ToString<>,dataGridView1.Rows[i].Cells[1].Value.ToString<>,dataGridView1.Rows[i].Cells[2].Value.ToString<>>;break;case3:sql=string.Format<"insertintoLinevalues<'{0}','{1}','{2}',{3},'{4}'>",dataGridView1.Rows[i].Cells[0].Value.ToString<>,dataGridView1.Rows[i].Cells[1].Value.ToString<>,dataGridView1.Rows[i].Cells[2].Value.ToString<>,Convert.ToInt32<dataGridView1.Rows[i].Cells[3].Value.ToString<>>,Aid>;break;}//向数据库中插入相关信息using<SqlCommandcmd=newSqlCommand<sql,con>>{intn1=cmd.ExecuteNonQuery<>;if<n1>0>tag++;}}if<tag==dataGridView1.RowCount>{MessageBox.Show<"提交成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information>;//DialogResultdiares=MessageBox.Show<"要清除当前表格中的数据吗?","提示",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning>;//if<diares==DialogResult.Yes>//dataGridView1.Rows.Clear<>;}}catch<Exceptionex>{MessageBox.Show<ex.Message,"提示",MessageBoxButtons.OK>;}}}}此外,航空公司管理员可以查询相关信息。点击查询统计,会弹出相关子菜单,可以查询相应的信息。由于现在数据库中还没有相关航班信息及售票信息,暂时还不能查询到相关信息,等航班信息录入及旅客购票操作完成后再进行查询即可查询到相关信息。登录机场管理员账号,进入机场管理员界面,管理员首先向数据库中添加相应的数据信息。航班信息录入:点击导入文件,导入相关航班信息:相关代码为://提交privatevoidbutton4_Click<objectsender,EventArgse>{//提交前检查是否有信息,没有则提示用户至少添加一行数据if<dataGridView1.Rows.Count==0>MessageBox.Show<"请至少添加一行数据","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk>;else{inttag=0;using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;//检查是否有不完整信息for<inti=0;i<dataGridView1.RowCount;i++>{for<intj=0;j<dataGridView1.ColumnCount;j++>{if<<string>dataGridView1.Rows[i].Cells[j].Value==null>{MessageBox.Show<"存在不完整信息,请检查录入信息","提示">;return;}}}for<inti=0;i<dataGridView1.RowCount;i++>{stringsql=string.Format<"insertintoFlightvalues<'{0}','{1}','{2}','{3}','{4}','{5}',{6}>",dataGridView1.Rows[i].Cells[0].Value.ToString<>,<dataGridView1.Rows[i].Cells[1].Value.ToString<>+""+dataGridView1.Rows[i].Cells[2].Value.ToString<>>,dataGridView1.Rows[i].Cells[3].Value.ToString<>,dataGridView1.Rows[i].Cells[4].Value.ToString<>,APid,dataGridView1.Rows[i].Cells[5].Value.ToString<>,Convert.ToInt32<dataGridView1.Rows[i].Cells[6].Value>>;//向数据库中插入相关信息using<SqlCommandcmd=newSqlCommand<sql,con>>{intn1=cmd.ExecuteNonQuery<>;if<n1>0>tag++;}}if<tag==dataGridView1.RowCount>{MessageBox.Show<"提交成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information>;//DialogResultdiares=MessageBox.Show<"要清除当前表格中的数据吗?","提示",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Warning>;//if<diares==DialogResult.Yes>//dataGridView1.Rows.Clear<>;}}catch<Exceptionex>{MessageBox.Show<ex.Message,"提示",MessageBoxButtons.OK>;}}}}机场管理员也可以查询该机场售出票数及金额〔由于当前旅客还未进行购票操作,暂时查询不到相关信息。旅客账号注册模块:点击登录界面的注册键,进入注册界面:输入相关信息点击立即注册即可:如果信息不完整,或前后密码不一致,或者用户名已被注册都会提示错误信息:相关代码为:privatevoidbtnRegisterNow_Click<objectsender,EventArgse>{stringusername=txtUserName.Text.Trim<>;//用户名stringpassword=txtUserPassword.Text.Trim<>;//用户密码stringconfirmpwd=txtConfirmPassword.Text.Trim<>;//确认密码stringname=txtName.Text.Trim<>;//用户姓名stringusertel=txttel.Text.Trim<>;//用户手机if<password!=confirmpwd>{MessageBox.Show<"密码不一致,请重新输入","提示">;return;}if<username==""||password==""||confirmpwd==""||name==""||usertel=="">{MessageBox.Show<"请输入完整信息","提示">;return;}if<password.Length>16>{MessageBox.Show<"密码长度大于16,请重新输入","提示">;return;}if<password.Length<6>{MessageBox.Show<"密码长度小于6,请重新输入","提示">;return;}if<usertel.Length!=11>{MessageBox.Show<"手机号码应为11位,请重新输入","提示">;return;}//通过客户端应用程序连接数据库using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;//查找数据库该用户名是否已被注册stringsql;sql="select*fromUserswhereCid=@uname";using<SqlCommandcmd=newSqlCommand<sql,con>>{cmd.Parameters.AddWithValue<"@uname",username>;using<SqlDataReaderreader=cmd.ExecuteReader<>>{if<reader.HasRows>{MessageBox.Show<"该用户名已被注册">;return;}}}//向数据库中插入相关信息sql=string.Format<"insertintoUsersvalues<'{0}','{1}','{2}','{3}','N',0>",username,password,name,usertel>;using<SqlCommandcmd=newSqlCommand<sql,con>>{intcount=cmd.ExecuteNonQuery<>;if<count>0>{DialogResultdiares=MessageBox.Show<"注册成功!一定要记住自己的密码呦^_^","恭喜您",MessageBoxButtons.OK>;if<diares==DialogResult.OK>{this.Close<>;}}else{MessageBox.Show<"注册失败!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning>;return;}}}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}旅客模块:输入用户名和密码,点击登录,进入旅客界面:输入起始地和目的地并点击查询即可查询到相关航班信息:座位等级H—商务舱,L—经济舱。点击确认购票进入座位选择界面:选择座位后点击预定:点击确定:订票成功后,此座位已经不能被预定了〔S201座位已经不能被预定:航班信息查询相关代码为://查询航班信息voidselectFlight<stringsql>{if<textBox1.Text==""||textBox2.Text=="">{MessageBox.Show<"起始地与目的地不可为空!!!">;return;}if<textBox2.Text==textBox1.Text>{MessageBox.Show<"起始地与目的地不可相同!!!">;return;}//查询相关航班信息using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;dgvflight.Rows.Clear<>;using<SqlCommandcmd=newSqlCommand<sql,con>>{using<SqlDataReaderreader=cmd.ExecuteReader<>>{if<!reader.HasRows>{MessageBox.Show<"抱歉,没有找到您查询的航班~","提示">;return;}//有该航班则显示相关航班信息while<reader.Read<>>{intindex=dgvflight.Rows.Add<>;dgvflight.Rows[index].Cells[0].Value=reader["Fid"].ToString<>;dgvflight.Rows[index].Cells[1].Value=reader["Pid"].ToString<>;dgvflight.Rows[index].Cells[2].Value=reader["SPosition"].ToString<>;dgvflight.Rows[index].Cells[3].Value=reader["EPosition"].ToString<>;dgvflight.Rows[index].Cells[4].Value=reader["Ftime"].ToString<>;dgvflight.Rows[index].Cells[5].Value=reader["Level"].ToString<>;dgvflight.Rows[index].Cells[6].Value=reader["Price"].ToString<>;dgvflight.Rows[index].Cells[7].Value=reader["Distance"].ToString<>;}}}}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}预定机票相关代码为:privatevoiddgvflight_CellContentClick<objectsender,DataGridViewCellEventArgse>{if<e.RowIndex>=0>{DataGridViewColumncolumn=dgvflight.Columns[e.ColumnIndex];if<columnisDataGridViewButtonColumn>//预定{DialogResultdia=MessageBox.Show<"是否确认预定此座位","提示",MessageBoxButtons.OKCancel>;if<dia==DialogResult.OK>{using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;stringsql=string.Format<"selectIsSpec,PointsfromUserswhereCid='{0}'",Cid>;using<SqlCommandcmd=newSqlCommand<sql,con>>{SqlDataReaderreader=cmd.ExecuteReader<>;while<reader.Read<>>{IsSp=reader["IsSpec"].ToString<>;Dist=Convert.ToInt32<reader["Points"]>;}reader.Close<>;}if<Dist>2000>zhekou=0.8f;//写订票记录sql=string.Format<"insertintoTicketsvalues<'{0}','{1}','{2}',{3},'{4}'>",Fid,Cid,dgvflight.Rows[e.RowIndex].Cells[5].Value.ToString<>,Convert.ToInt32<dgvflight.Rows[e.RowIndex].Cells[7].Value>*zhekou,DateTime.Now>;using<SqlCommandcmd=newSqlCommand<sql,con>>{cmd.ExecuteNonQuery<>;}sql=string.Format<"updatePlanesetSeatsNum=SeatsNum-1wherePid='{0}'",dgvflight.Rows[e.RowIndex].Cells[1].Value.ToString<>>;using<SqlCommandcmd=newSqlCommand<sql,con>>{cmd.ExecuteNonQuery<>;}//标记此票已经被购买了,不能重复购买sql=string.Format<"updateSitsetIsChoose='Y'whereSid='{0}'",dgvflight.Rows[e.RowIndex].Cells[5].Value.ToString<>>;using<SqlCommandcmd=newSqlCommand<sql,con>>{cmd.ExecuteNonQuery<>;}//经常旅客增加里程积分if<IsSp=="Y">{sql=string.Format<"updateUserssetPoints=Points+{0}whereCid='{1}'",juli,Cid>;using<SqlCommandcmd=newSqlCommand<sql,con>>{cmd.ExecuteNonQuery<>;}if<Dist>2000>MessageBox.Show<"订票成功!由于您是经常旅客,里程积分达到2000分,有8折优惠,实际票价为"+Convert.ToInt32<dgvflight.Rows[e.RowIndex].Cells[7].Value>*zhekou+"元">;elseMessageBox.Show<"订票成功!","提示">;dgvflight.Rows.RemoveAt<e.RowIndex>;}else{MessageBox.Show<"订票成功!","提示">;dgvflight.Rows.RemoveAt<e.RowIndex>;}}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}else{//取消购票}}}}此外,旅客也可以注册成为经常旅客,只需点击旅客界面右下角的注册键:点击确定即可:再次点击会给出已经是经常旅客的提示:相关代码为:privatevoidlinkLabel1_LinkClicked<objectsender,LinkLabelLinkClickedEventArgse>{stringsql=string.Format<"selectIsSpecfromUserswhereCid='{0}'",cid>;using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;using<SqlCommandcmd=newSqlCommand<sql,con>>{SqlDataReaderreader=cmd.ExecuteReader<>;while<reader.Read<>>{isspec=reader["IsSpec"].ToString<>;}reader.Close<>;}}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}if<isspec=="Y">{MessageBox.Show<"您已经是经常旅客了!","提示">;return;}if<MessageBox.Show<"成为经常旅客可以享受积分优惠政策<里程积分需达到2000分>,是否注册?","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Question>==DialogResult.OK>{sql=string.Format<"updateUserssetIsSpec='Y'whereCid='{0}'",cid>;using<SqlConnectioncon=newSqlConnection<strCon>>{try{con.Open<>;using<SqlCommandcmd=newSqlCommand<sql,con>>{intn=cmd.ExecuteNonQuery<>;if<n>0>{MessageBox.Show<"注册成功!","提示">;}}}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}}现在再次购票即可增加里程积分,当里程积分达到2000分即可享受8折优惠。由于现在里程积分为0,需要先购票使得里程积分达到2000分,之后便可享受8折优惠:现在登录航空公司管理员账号进行查询统计:首先查询航班情况:查询售票点情况:查询售出票数及金额:相关代码为:privatevoid查询航班情况ToolStripMenuItem_Click<objectsender,EventArgse>{dataGridView2.Columns.Add<"c1","航班编号">;dataGridView2.Columns.Add<"c2","起点">;dataGridView2.Columns.Add<"c3","终点">;stringsql=string.Format<"selectdistinctFid,SPosition,EPositionfromFlight,LinewhereFlight.Lid=Line.LidandAid='{0}'",Aid>;using<SqlConnectioncon=newSqlConnection<strCon>>{using<SqlCommandcmd=newSqlCommand<sql,con>>{try{con.Open<>;SqlDataReaderreader=cmd.ExecuteReader<>;while<reader.Read<>>{inti=dataGridView2.Rows.Add<>;dataGridView2.Rows[i].Cells[0].Value=reader["Fid"].ToString<>;dataGridView2.Rows[i].Cells[1].Value=reader["SPosition"].ToString<>;dataGridView2.Rows[i].Cells[2].Value=reader["EPosition"].ToString<>;}reader.Close<>;}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}}privatevoid查询售票点个数ToolStripMenuItem_Click<objectsender,EventArgse>{dataGridView2.Columns.Add<"c1","机场编号">;dataGridView2.Columns.Add<"c2","机场名称">;dataGridView2.Columns.Add<"c3","机场地址">;dataGridView2.Columns.Add<"c4","联系方式">;stringsql=string.Format<"selectdistinctFlight.APid,APname,APaddr,APcontfromFlight,Line,AirportwhereFlight.Lid=Line.LidandFlight.APid=Airport.APidandAid='{0}'",Aid>;using<SqlConnectioncon=newSqlConnection<strCon>>{using<SqlCommandcmd=newSqlCommand<sql,con>>{try{con.Open<>;SqlDataReaderreader=cmd.ExecuteReader<>;while<reader.Read<>>{inti=dataGridView2.Rows.Add<>;dataGridView2.Rows[i].Cells[0].Value=reader["APid"].ToString<>;dataGridView2.Rows[i].Cells[1].Value=reader["APname"].ToString<>;dataGridView2.Rows[i].Cells[2].Value=reader["APaddr"].ToString<>;dataGridView2.Rows[i].Cells[3].Value=reader["APcont"].ToString<>;}reader.Close<>;}catch<Exceptionex>{MessageBox.Show<ex.Message>;}}}}privatevoid查询售出票数及金额ToolStripMenuItem_Click<objectsender,EventArgse>{dataGridView2.Columns.Add<"c1"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年资料员考试试题及答案
- 2025年北京市办公家具采购合同
- 2025租赁车辆抵押合同
- 2025设备采购借款合同范本AA
- 2025企业短期借款合同协议书范本
- 2025年下半年哈尔滨市政府机关幼儿园招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林长春莲花山生态旅游度假区招聘工作人员6人(2号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省长春市市直事业单位招聘321人(5号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省省直事业单位招聘372人(8号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉安井冈山市展览馆接待员和讲解员招考(4人)易考易错模拟试题(共500题)试卷后附参考答案
- 第十章放射防护法规与标准
- 介入室医院感染预防与控制
- 演艺票务智能平台架构-洞察及研究
- 巡查工作流程课件
- 车辆税务维护管理办法
- 【正版授权】 ISO 80000-3:2019/Amd 1:2025 EN Quantities and units - Part 3: Space and time - Amendment 1
- 【《基于PHP的二手车交易网站的设计与实现》11000字(论文)】
- 舒曼共振科普课件
- 研究生学术道德与学术规范课件
- 香皂监督管理办法
- ALD工艺温度对性能影响-洞察及研究
评论
0/150
提交评论