航空订票系统-业务逻辑以及个性化设置

上一节中,我们完成了数据访问层的相关任务,包括业务对象,和数据库表关系映射等等,接下来,我们将从业务逻辑去分析ASP.NET MVC,业务逻辑可以说是数据层和视图层的连接层,大量的业务操作都将在这里完成,并在视图层表现出强大的功能.....

一、构建业务逻辑项目

       我们将业务逻辑部分写到ASP.NET MVC应用程序的Controllers文件夹下:

      2011050619233920.jpg

      具体的MVC中的C即control 的功能这里不再赘述,我们将本系统用到的相关功能通过代码做一下解释....

      下面的对Custom即会员板块的业务逻辑进行说明:

     

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 [AuthenticationFilter]
2 public ActionResult Index()
3 {
4 return View();
5 }
6
7 CustomDB c = new CustomDB();
8 // 会员部分
9 public ActionResult Person()
10 {
11 return View();
12 }
13
14 // 获取会员信息
15 [AcceptVerbs(HttpVerbs.Post)]
16 public ActionResult GetPerData()
17 {
18 string iden = "" ;
19 string name = "" ;
20 string str = c.QueryCount( int .Parse(Request.Form[ " start " ]), int .Parse(Request.Form[ " limit " ]),iden,name);
21 Response.Write(str);
22 Response.End();
23 Response.Clear();
24 return null ;
25 }
26
27 // 搜索会员信息
28 [AcceptVerbs(HttpVerbs.Post)]
29 public ActionResult GetSData()
30 {
31 string str = c.QueryCount( 0 , 50 , Request.Form[ " c_iden " ], Request.Form[ " c_name " ]);
32 Response.Write(str);
33 Response.End();
34 Response.Clear();
35 return null ;
36 }
37
38 // 删除会员信息
39 [AcceptVerbs(HttpVerbs.Post)]
40 public ActionResult DeletePer()
41 {
42 bool a = c.delete(Request.Form[ " c_iden " ]);
43 if ( ! a)
44 {
45 Response.Write( " success:false " );
46 } else
47 {
48 Response.Write( " success:true " );
49 }
50 Response.End();
51 return null ;
52 }
53
54 // 添加会员
55 public ActionResult AddAccount()
56 {
57 Custom cus = new Custom();
58 cus.c_name = Request.Form[ " c_name " ];
59 cus.c_pwd = Request.Form[ " c_pwd " ];
60 cus.c_iden = Request.Form[ " c_iden " ];
61 cus.c_sex = Request.Form[ " c_sex " ];
62 cus.c_email = Request.Form[ " c_email " ];
63 cus.c_tel = Request.Form[ " c_tel " ];
64 bool a = c.add(cus);
65 if ( ! a)
66 {
67 Response.Write( " {success:false} " );
68 }
69 else
70 {
71 Response.Write( " {success:true} " );
72 }
73 Response.End();
74 return null ;
75 }
76
77 // 更新会员信息
78 [AcceptVerbs(HttpVerbs.Post)]
79 public ActionResult UpdatePer()
80 {
81 int idd = int .Parse(Request.Form[ " c_id " ]);
82 Custom cus = new Custom();
83 cus.c_name = Request.Form[ " c_name " ];
84 cus.c_iden = Request.Form[ " c_iden " ];
85 cus.c_pwd = Request.Form[ " c_pwd " ];
86 cus.c_sex = Request.Form[ " c_sex " ];
87 cus.c_email = Request.Form[ " c_email " ];
88 cus.c_tel = Request.Form[ " c_tel " ];
89 cus.c_integral = int .Parse(Request.Form[ " c_integral " ]);
90 cus.c_level = int .Parse(Request.Form[ " c_level " ]);
91 bool a = c.update(idd, cus);
92 if ( ! a)
93 {
94 Response.Write( " {success:false} " );
95 }
96 else
97 {
98 Response.Write( " {success:true} " );
99 }
100 Response.End();
101 return null ;
102 }

     那么,第一行index()方法,对应视图中的Index.aspx页面,这里设置了一个过滤器--[AuthenticationFilter],表示只有登录的注册用户才能访问....

ASP.NET MVC中的过滤器功能类似于其在现实中的功能,使用过滤器,我们可以过滤请求或者修改通过的数据。  

这个过滤器我们使用ActionFilter来实现,ActionFilter的使用就像使用特性一样,在方法上标记一下就可以使用了.....

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 public class AuthenticationFilterAttribute:ActionFilterAttribute
2 {
3 public override void OnActionExecuting(ActionExecutingContext filterContext)
4 {
5 if ( ! filterContext.HttpContext.User.Identity.IsAuthenticated)
6 {
7 filterContext.Result = new RedirectToRouteResult(
8 " Default " , new RouteValueDictionary( new { action = " Login " }));
9 }
10 }
11 }

       ASP.NET MVC中,将读取表单数据,在控制器中大部分我们都使用选择器AcceptVerbsAttribute,我们可以限制一个动作是“POST”.....

      那么具体的方法内容实现的功能我们在View即页面讲述的时候贴出来对应前台效果讲解........



一、个性化设置

      1、其中ASP.NET中,原始的错误总是暴露出大量的网站源码,给网站带来隐患的同时用户界面不友好体现的淋漓尽致....
     那么这里,我们根据不同异常种类,设置了几种异常处理页面,页面内容仿照博客园的异常页面:

      首先需要在全局应用程序类Global.asax.cs中,设置个性化异常处理的具体实现代码:

     

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 protected void Application_Error( object sender, EventArgs e)
2 {
3 Exception exception = Server.GetLastError();
4 Response.Clear();
5
6 HttpException httpException = exception as HttpException;
7 RouteData routeData = new RouteData();
8 routeData.Values.Add( " controller " , " Error " );
9
10 if (httpException == null )
11 {
12 routeData.Values.Add( " action " , " Index " );
13 }
14 else
15 {
16 switch (httpException.GetHttpCode())
17 {
18 case 404 :
19 routeData.Values.Add( " action " , " HttpError404 " );
20 break ;
21 case 500 :
22 routeData.Values.Add( " action " , " HttpError500 " );
23 break ;
24 default :
25 routeData.Values.Add( " action " , " General " );
26 break ;
27 }
28 }
29
30 routeData.Values.Add( " error " , exception);
31 Server.ClearError();
32 IController errorController = new ErrorController();
33 errorController.Execute( new RequestContext(
34 new HttpContextWrapper(Context), routeData));
35 }

     其中包括:错误404(找不到页面的异常)、错误500(服务器端的异常)、应用程序逻辑方面的异常以及其他异常....

     相应的我们建立一个ErrorController控制器....

    

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 [HandleError]
2 [OutputCache(Location = OutputCacheLocation.None)]
3 public class ErrorController : Controller
4 {
5 //
6 // GET: /Error/
7  
8 public ActionResult Index( string error)
9 {
10 ViewData[ " Title " ] = " sorry ,application error " ;
11 ViewData[ " Description " ] = error;
12 return View();
13 }
14
15 public ActionResult HttpError404( string error)
16 {
17 ViewData[ " Title " ] = " 404错误:资源不存在 " ;
18 ViewData[ " Description " ] = error;
19 return View();
20 }
21
22 public ActionResult HttpError500( string error)
23 {
24 ViewData[ " Title " ] = " sorry ,500 error " ;
25 ViewData[ " Description " ] = error;
26 return View();
27 }
28
29 public ActionResult General( string error)
30 {
31 ViewData[ " Title " ] = " sorry , error " ;
32 ViewData[ " Description " ] = error;
33 return View( " Index " );
34 }
35 }

     同样的,我们设置了捕获异常的过滤器---HandlerError以及相关缓存的设置....

     效果图:

     2011050620104343.jpg

     2、网站地图

          网站地图可以使你在一个XML文件(web.sitemap)定义网站的层次结构,在页面上可以设置SitemapPath控件,那么我们主要通过这个控件显示面包屑导航,使用户方面返回更高级页面...

         

ContractedBlock.gif ExpandedBlockStart.gif View Code
 
   
1 <? xml version = " 1.0 " encoding = " utf-8 " ?>
2   < siteMap xmlns = " http://schemas.microsoft.com/AspNet/SiteMap-File-1.0 " >
3 < siteMapNode url = " /Home " title = " Home " description = "" >
4 < siteMapNode url = " /Home/Index " title = " Home " description = "" />
5 < siteMapNode url = " /Home/Search " title = " Search " description = " Search " />
6 < siteMapNode url = " /Home/Map " title = " Map " description = " Map " />
7 < siteMapNode url = " /Account/Index " title = " PCenter " description = " PCenter " >
8 < siteMapNode url = " /Account/Login " title = " Login " description = " Login " />
9 < siteMapNode url = " /Account/Register " title = " Register " description = " Register " />
10 </ siteMapNode >
11 < siteMapNode url = " /Home/Picture " title = " View " description = " View " />
12 < siteMapNode url = " /Home/About " title = " About " description = " About " />
13 </ siteMapNode >
14
15 </ siteMap >

    在aspx页面,我们可以用过服务器控件SiteMapPath显示给用户...

   

 
  
< div id = " head_bottom " >
< asp:SiteMapPath ID = " smp " runat = " server " />
</ div >

     2011050620171989.jpg

    

    然而,我发现这种方式的面包屑导航有很不友好的一面,就是当我打开网站的默认首页的时候,以为没有对页面上的导航做任何行为,所以面包屑为空....定制SitemapProvider可以达到更好的效果....本系统没有设置SitemapProvider,笔者也在学习中,呵呵....

  

总结:

        业务逻辑层的编写在MVC环节中占据了很重要的一部分,它关系到数据层与视图层数据上的承接....

        但是就返回类型上,有时候遇到逻辑上的短路还是不懂得如何处理,就比如Ext中的charts组件,当需要返回每个月销售情况的时候,出于对LINQ语句的研究不够深入,分组的时候遇到了问题......有待研究....

         接下来,将对每个页面的页面和功能实现讲解一下,前台使用了jquery技术,所以对js 的引用将会比较多....

         各位,晚安!!!!

转载于:https://www.cnblogs.com/Chanx/archive/2011/05/06/2039364.html

飞机航班管理系统 项目背景和目标 飞机航班信息管理系统主要能够查询飞机的航班情况,飞行线路,票价,折扣等等情况,并能够在数据库中更新维护飞机航班的信息,对飞机航班数据库进行管理,如航班的增加,删除和修改等。我们的目标就是为该系统提供后台连接数据库程序设计以及前台用户界面设计。 系统运行环境 Java运行在eclipse软件上,数据库用mysql数据库 使用redis进行菜单缓存,mongodb进行日志管理以及webService技术调用接口。 开发与设计的总体思想 飞机航班信息管理系统主要分为用户和系统管理员2类,因此也将该系 统分为2个相应的大的功能模块。 用户可以通过服务项目选择查询相关航班情况,进行订票,退订等服务项目。系统会将数据库中相应信息反馈给顾客。 系统管理员负责管系统信息的及时更新,可以根据航空公司航班的具体的情况更新数据库。 系统的管理模块: 1.用户管理 ²订单查询 ²用户列表 ²黑名单 2.客机及保养管理 ²保养管理 3.公司人员管理 ²员工管理 4.航班信息管理 ²航班管理 5.飞机托运货物管理 ²托运须知 ²托运管理 6.用户的购票信息管理 ²购票 ²个人订单 7.整个系统的财务统计等整理 ²highcharts报表 8.客户全部订单管理 ²订单管理 9.意见管理 ²顾客回访调查 10.角色权限管理 ²角色列表 11.日志管理 ²日志记录 12.我的网盘 ²图片管理 一 用户登陆注册管理 整个系统的用户和管理员登陆和注册界面以及用户的权限和角色管理都是由李长乐负责,其中包括订单查询列表 l用户查询:查看用户信息 (包括用户里程,用户飞行次数,用户总消费,航班信息) l列表功能:批量加入黑名单,批量改变用户级别 l黑名单:批量恢复用户 l注册:接收手机验证码。账号已存在无法注册。 二 个人订单信息管理 管理系统的个人订单信息管理由郭宇成负责,其中包括查询航班信息。以及放松一下模块。三个小游戏。 l退票信息:退票直接进行退票。 改签信息: l回显购票信息,修改购票信息,当前时间到起飞时间不够2小时不能改签。满足改签条件后,管理员需同意后,方可进行改签的后续工作。 三 全部订单信息管理 管理系统的全部订单信息及公告管理由黄富强负责,其中包括查询所有用户的订单信息,和个人订单信息关联,如果用户申请改签,管理员同意后方可改签。 四 人员管理 管理系统的人员管理由张晓甜负责,其中包括航空公司的所有人的查询,新增,修改,删除 查询:编号,职位,人员名称,状态(0未飞,1在飞,2,休假,3请假) 新增:人员名称等基本信息 修改:人员名称等基本信息 删除,人员名称等基本信息 点击详情信息查询每个员工的信息:基本信息,工作经历。其中人员状态为在飞,休假,请假时都不能加入航班信息。 五 客机信息及保养管理 管理系统的客机信息及保养管理由王壮负责,其中包括客机的基本信息增删改查,根据航班信息模块中查询每架飞机的飞行次数,当到达3次后,飞机自动进入保养状态。这时,新增航班信息将查不到保养中的客机。保养完成后,飞机飞行次数自动重置成0次。此模块还有客机图片展示。 六 飞机托运货物管理 管理系统的飞机托运货物管理由张博管理,其中包括行李托运表的增删改查,新增托运货物时,身份证号和乘客的身份证号进行统一。没有身份证号无法进行托运。当已付款的托运货物进行修改时,会根据修改的托运货物的重量和物品类型对乘客进行退钱和补交。未付款的货物信息状态用红色字体显示 也是为了更好区分。 七 航班信息管理 管理系统的航班信息管理由侯俊杰负责,其中包括 l已发布航班信息的查询 l新增航班信息.添加航班班次必须是未工作状态才可新增,乘务员和机长也必须是未工作状态. l判断是否此次航班信息是否小于系统当前时间,若小于,航班失效本条航班信息置灰,也无法进行售票。 l航班开始售票后,用户才可以购买相应的航班。 l开始售票和停止售票的按钮用绿色和红色来清楚的划分。 八 统计管理 整个系统的统计管理由赵航天负责,使用了highchars技术,其中包括收入,支出和利润情况,只展示了三个字段是可以将将公司的收支情况生动形象的展示出来,使管理员可以一目了然。 九 意见管理 整个系统的意见管理由王壮负责,查询了用户的飞行次数和会员级别,从而可以更准确地发送邮件信息。发送邮件信息使用了javaMail技术。 十 角色权限管理 整个系统的角色权限管理由李长乐负责,查询了角色名称和每种角色的人数,可以赋权限。 十一 日志管理 整个系统的日志管理由张晓甜负责,利用了mongodb技术,结合aop切面,将事务控制在Service层,查询了每个方法的方法名和参数。还有时间的条件查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值