外卖接单是系统盘0字节派的还是字节接

上海外卖接单王竟是个女骑手!一年跑两万多公里
[摘要]  湘菜馆里,何文妹倚靠在接菜口对面的一堵墙上,边刷新手机派单页面,边注意着从厨房传出来的菜品。  接菜窗口的麻婆豆腐从一盒增到九盒,而蹲在旁边玩手机的服务员却...
  湘菜馆里,何文妹倚靠在接菜口对面的一堵墙上,边刷新派单页面,边注意着从厨房传出来的菜品。
  接菜窗口的麻婆豆腐从一龅骄藕校自谂员咄的服务员却无动于衷。后来,麻婆豆腐又增到了二十七盒,何文妹不知道自己要送的三盒炒菜是否淹没在这些豆腐里面,赶时间的她走上前,一盒一盒地从窗口拿到桌子上,开始娴熟地帮着服务员打包。
  今年44岁的何文妹,是一家外卖平台的送餐员,经常骑着那辆大红色的电瓶车,活动在上海淞南镇长江南路一带。
  公开资料显示,上海共6万名外卖骑手,其中8%是像何文妹一样的女骑手。
  在不到一年时间里,何文妹至少送了12214单,跑了超过22412公里,因此,她有了上海&单王&的称号。
  &单王&的秘籍
  一个新刷出的单值不值得接,何文妹考虑的过程很短。所谓&值得&条件就是:从何文妹出发去餐馆,到取餐后送到顾客手上,全程时间不超过25分钟,路程在2公里左右。
  从去年5月11日开始,何文妹干送餐的活儿一年多了。这一年的经验让她心里有了一本账:
  短距离的单虽然赚得少,但不耽误时间,量的积累能赚更多;
  麻辣烫、馄饨店、炒菜馆这些店哪家出餐快要清楚,出餐快的单要优先接下,省出来的时间再接其它单;
  哪个小区的门牌号是乱序不容易找的,来自这里的单要往后排一排&&
  在平台有新单刷出时,何文妹就会将这些标准在脑子里过一遍,通常1秒足够,然后迅速抢下心仪的订单。这样一天下来,何文妹能够完成五六十单的量,如果遇上糟糕的天气,更能接下八十多单,&下雨天大家可能都不想出门,我反而能够刷到更多的单&。
  &经验都是一单单攒起来的,刚开始也走了不少冤枉路。&说完,何文妹自己呵呵地笑起来了。
  刚开始的时候,何文妹也接过四公里以外的单,远程的订单可以收8元左右的费用,比一两公里的单多出大约3块的收益。何文妹觉得接远一点的单费用多更划算,但后来她仔细算了一下账,发现跑几趟远程太耽误时间,远不如在近处多送几单赚得多。逐渐地,何文妹形成了自己的选择体系。她说,只诿挥械サ氖奔涠危约翰呕峤蛹傅ゲ荒敲蠢硐氲牟汀
  身为&单王&,除了上述小技巧外,无疑还得非常勤劳。何文妹和丈夫何金卫在长江南路一带经营一家水果店,平时丈夫待在店里看着生意,她外出跑外卖。早上七点是水果店开门的时间,也是何文妹一天接单的开始。何文妹的女儿说,通常母亲要干到晚上12点才会回到家里,&365天,她天天如此。&为了防止懈怠,夏天的时候,何文妹不会让自己在有空调的地方待太久,无论是送餐目的地还是家里,&一舒服就不想再出去做了&。
  何文妹和丈夫的水果店生意大不如前,坚持送餐有一方面原因是贴补家用,但何文妹强调自己在意的是这份工作时间自由,&想做就做,不想做就在家休息会儿&。
  上海外卖接单王竟是个女骑手!一年跑两万多公里
  何文妹女儿不愿看守水果店
  生活锁定
  女儿眼中的何文妹,远没有她自己说的那么潇洒。&没做这个之前,我们一年还有一次全家出去玩的机会,现在连逛超市,都没有全家出动过。&
  自从成了送餐员,何文妹每天的生活就被锁定在了里。
  早上七点,打开的何文妹就开始盯接单页面,她不停地用右手食指向下拉动菜单,一有新的订单就在1秒内迅速接下,然后骑着那辆去年为送餐配备的小型电动车去餐馆等餐。期间,她仍不时盯着,重复刷新动作。歇下来如此、等餐过程中如此、骑车送餐的路上也是如此。
  为了方便看和接单,何文妹将一块特制的塑料泡沫加装在送餐的保温箱上,在泡沫上专门弄出一个放置的凹槽,以便她在骑车时也能盯着页面,即使这样会增加她骑车的风险。
  一天中,除了时刻盯着外,她的红色头盔也很少有取下来的时候。午后2点是何文妹吃饭的时间,在那短短七八分钟里,她才会拿掉头盔,一边扒拉着饭,一边继续盯着。这时,她通常让休息在家的女儿盯着水果店旁边的餐馆,那里有她即将要送的餐。
  何文妹的女儿今年中专毕业,正值假期,因此承担了照看水果店的任务。在这段时间里,何文妹的丈夫也开始了骑电瓶车送外卖的活儿。夫妻俩没时间给孩子做午饭,很多时候,她的女儿和小儿子也会叫一份外卖。何文妹说,能够撑到下午2点不饿的办法,就是早饭迟点吃,她一般上午九十点钟才会吃早饭。订单多的时候,就简单吃点橘子或者超市买来的小零食;订单少的时候,可以去隔壁的馄饨店来上一碗。
  某种程度上,何文妹一天的生活除了睡觉就是工作。她总说送餐的时间自由,可她却将自由的时间全部安排给了送餐,偶尔困了眯一会儿都成了一种&奢侈&的享受。
  没想过未来
  水果店里,何文妹的女儿低头刷着,有客人光顾的时候,她会起身向不同客人重复介绍相同的内容。
  &为什么老是把我锁在家里?跟坐牢一样。&这个问题女儿在心里重复无数次,每次她都会告诉自己:&没办法,爸爸妈妈要挣钱呐。&
  &我有时候觉得上学才开心,周末对别人而言是用来放松的,对我而言反而更辛苦。&上中专的女儿并不住校,除了上学,她待在家的日子居多。何文妹一家四口生活在水果店上面的阁楼里,加上水果店的空间,大约有三十多平方米,其中一半的地方被存货占了,活动空间非常小。一家人离开浙江兰溪来到上海已经有十五年,这些年他们大部分时间都是守着这家水果店。
  &以前水果店一个月能赚一万多,现在大不如前了,有时候减掉五千多的房租,还要贴钱。&这也是何文妹想方设法赚钱的原因。此前,何文妹的丈夫一度想关掉水果店,但何文妹却拦了下来。何文妹将这三十多平方米的水果店和家看成是最后退守的地方,这就注定要有人被困在这里。
  无论是家里的营生,还是孩子的成长,何文妹选择一种随遇而安的态度来应对,对未来,并没有太多的思考。儿子的学习交给女儿看着,自己和丈夫利用吃饭的时间过问过问,何文妹觉得这也挺好,&儿子成绩一般般吧,但他不补课呀,那些拼命学习的孩子有时候还没他考得好呢。&
  &两个孩子以后学什么专业,做什么职业,得看他们个人兴趣。&何文妹说。然而,她的女儿认真想了一分钟,说:&好像我也没有什么爱好,最经常做的事情就是看着弟弟。&
  未来,何文妹也不知道会不会哪一天就不守在这里了,过几年儿子也许要回浙江考高中,一家人到底要不要跟着回去,何文妹没偻畲ο牍
  习惯了接单
  &你这个腿好像麻风病人一样。&去年夏天,何文妹取笑丈夫何金卫。夏天是她最害怕的季节,灼热的太阳烤着在送餐路上的何文妹,她伸出左臂比划着被晒的程度,有衣服捂着的皮肤和露在外面的泾渭分明,晚上睡觉时被暴晒的地方就会感到特别疼。等到了秋天,她和丈夫被晒了一整个夏天的皮肤就开始脱皮。&很恶心的,跟蛇皮一样。&何文妹耸起肩膀一副嫌弃的样子。
  何文妹也知道,长期暴晒对身体不太好,理应做一些防护,但她也只打算当今夏来临时,送餐时添一件长袖而已。&我没什么讲究的,随便都可以。&
  除了身体出现明显的痛感,何文妹似乎对一切都没有那么在意,接单成了她循环往复的生活节奏。&如果哪天不接,肯定会不习惯了。&
  何文妹早已将自己和家人的生活置于高速运转的齿轮之上,只能跟着前进,似乎一切都已停不下来。中午11点半,何文妹坐在店外的一棵树下等着隔壁麻辣烫出餐。她一边等着,一边刷新页面不停地念叨着:&今天没什么单,今天单怎么这么少呀。&
  阳光穿过树叶洒在女儿的脸上。此刻,她正坐在母亲身边专心削着菠萝。
《上海外卖接单王竟是个女骑手!一年跑两万多公里》由网-上海网提供,转载请注明出处:/xw/shwx//9183.html,谢谢合作!
[责任编辑:上海新闻网]
下一篇: 上一篇:
大家都在看
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
上海网版权与免责声明
1、未经上海网(以下简称本网)许可,任何人不得非法使用本网自有版权作品。
2、本网转载其他媒体之稿件,以及由用户发表上传的作品,不代表本网赞同其观点和对其真实性负责。
3、如因作品版权和其它问题可联系本网,本网确认后将在24小时内移除相关争议内容。【网上送餐】毕业论文--网上订餐管理系统_牛宝宝文章网【网上送餐】毕业论文--网上订餐管理系统专题:摘要时代在进步,科技在发展,当今时代网络已经成了我们生活中一个不可或缺的部分。网络的发展也给我们带来了无限的商机与便利,有人可以足不出户就赚钱,有人可以足不出户就买到想买的东西、订票等等。在餐饮业,网络也同样能够发挥它巨大的作用—网上订餐管理系统。网上订餐管理系统旨在通过网站的形式实现想要订餐的用户的订餐过程。本课题基于Web2.0,使用ASP.NET2.0实现B/S模式的订餐系统。用户通过访问餐馆的网站就能够看到该餐馆的菜肴种类、价格等信息,从而做出订餐的决定,然后使用唯一的账号登陆,通过一定的支付方式来付款,仅需几分钟就完成了一次订餐。而餐馆也能够及时地看到用户在自己餐馆网站上下的订单,从容准备,及时送达用户指定的就餐地点。相比一般的电话订餐方式,网上订餐不仅给用户节省了大量电话询问时间和电话费,也为餐馆提供了收款保障,餐馆可以选择网上银行或是充值系统等的预先付款方式,也可以选择货到付款的方式。在信息的准确性方面,网上订餐也比电话订餐高出一等,网上订餐则是由用户自己填写,不太容易造成错误。关键词:网上订餐,B/SABSTRACTWhen the era is going ahead, the technology developing quickly, the Internet has become a prerequisite part of our life. The development of the internet has brought us infinite opportunity of business and advantages of life. People can earn, buy things they need, order tickets and so on without going out. In the eatery area the internet can also play an important role which can be called” The System of Dinner-Order through the Internet”.“The system of dinner-order through the Internet“aims at realizing the process of dinner order in the form of website. This paper bases on Web2.0; uses ASP.NET 2.0 to realize the system of dinner-order through the internet of B/S module. The user who wants to order dinners can see the information of dish such as kinds, price, and introduction through suffering the website which contains the system, and then decides to order or not. After entering the system with his unique account, paying for the dinner through some way, he can finish the order in several minutes. And the eatery can see the orders which are delivered by the users quickly, prepare for the dinner leisurely, and send it to the destinations which are appointed by the users. Compare to the common dinner-order way, dinner-order through telephone, dinner-order through the Internet not only saves a mass of time and telephone fee to ask, but also offers the eatery the protection of receiving the payment. The eatery can choose both payoff beforehand as Net-Bank or Recharge System, and payoff after the dinner has sent to the destination. In the aspect of veracity of information, dinner-order through the internet is advantaged because its information is written by the users themselves and can not go wrong easily.Key Words: Dinner-Order through the internet, B/S目 录1. 引言 .............................................................................................................................. 11.1项目背景 .............................................................................................................. 11.2国内外现状 .......................................................................................................... 11.3项目意义 .............................................................................................................. 22. 相关技术介绍 .............................................................................................................. 32.1 Web 2.0技术 ........................................................................................................ 32.2 ASP.NET技术 ..................................................................................................... 52.3 AJAX技术 ........................................................................................................... 62.4 SQL Server 2005技术 ......................................................................................... 83. 系统功能分析与概要设计 ........................................................................................ 103.1 功能分析 ........................................................................................................... 103.2 界面设计 ........................................................................................................... 143.3 数据库设计 ....................................................................................................... 154. 系统详细设计与编码实现 ........................................................................................ 184.1 管理员模块 ....................................................................................................... 184.2 会员模块 ........................................................................................................... 234.3 公共模块 ........................................................................................................... 275. 系统测试 .................................................................................................................... 285.1 测试计划制定 ................................................................................................... 285.2 测试用例设计与执行 ....................................................................................... 285.3 测试报告 ........................................................................................................... 306. 总结 ............................................................................................ 错误!未定义书签。 致谢 ................................................................................................. 错误!未定义书签。参考文献 ......................................................................................................................... 331. 引言1.1项目背景时代在进步,科技在发展,当今时代网络已经成了我们生活中一个不可或缺的部分。网络的发展也给我们带来了无限的商机与便利,有人可以足不出户就赚钱,有人可以足不出户就买到想买的东西、订票等等。在餐饮业,网络也同样能够发挥它巨大的作用—网上订餐管理系统。“民以食为天”,餐饮业系百业之首。中国加入WTO后,我国餐饮业己形成了高中低档多层次,东西南北菜系多样化,中西餐相互补充的格局。与此同时,一些先进的餐饮管理技术也进入中国。目前,网络热潮正冲击着我们生活的方方面面。具体到餐饮业网络营销,网上订餐是一种主要的形式。网上订餐分为两种类型,一种是通过英特网预订某饭店的席位及菜品,另外一种是通过英特网预订某饭店的菜品,并由该餐厅负责送货上门。本课题就是要实现后者,通过实现网上订餐,以期能从互联网技术方面为餐饮业提供强大的动力,促进餐饮业的蓬勃发展。1.2国内外现状在我国,网上订餐最早出现在20世纪90年代末期,98年广州等大城市己出现网上订餐业务。2000年7月,北京丽华快餐公司为了探索餐饮业网络经营的道路,寻求新的经济增长点,也推出了网上订餐,成为探索网上订餐的先驱。2003年非典之后,为尽快恢复遭受非典疫情严重影响的餐饮业和住宿业的发展,全面振兴我国餐饮业和住宿业。日,商务部制订了《全国餐饮业和住宿业振兴计划》,开展网上订餐服务等拓展服务领域措施作为振兴计划的主要内容被提了出来。随后,一些餐饮公司纷纷在自己的网站上开设了网上订餐业务。目前网上订餐已逐渐普及,特别是在快餐业发达的东部地区。但目前网上订餐在我国并未成气候,很多大的餐饮公司网上订餐业务经营惨淡,很多网站每天只有几十份,经营较好的也只有几百份。如果单纯依靠网上订餐,公司根本无法生存。相反,一些小的个体饮食店老板巧妙地利用QQ、MSN等即时通信软件作为网上订餐工具,却取得了相当不错的效益。他们随着网上订餐业务的扩大,建立了自己的订餐网站,但最初单纯的网上订餐却发展成了网上送花、网上送票等的网上送货网站或者综合类的饮食网站,已经偏离了网上订餐的初衷[4]。在美国,食品网(www.niubb.net是目前美国网上订餐行业中的先驱。设在三藩市的食品网在99年已服务于全美一万三千间餐馆,有七十万的网上消费者。任1何消费者只要轻松上网,输入邮区号码,就可以了解到在周围有哪些餐馆提供网上送餐服务,并可以浏览到这些餐馆的菜单,做出预订。仅在二分钟内,预订者就可以通过电子邮件得到确定。再过一会,就可以收到所订的美食了。食品网发言人说:在参加该公司网上联网销售的餐馆中,网上订餐的数量实际上比普通的电话订餐高出22%。此外,网上订餐中多功能性的服务还可以让消费者从容地上网浏览餐馆的菜单,或进行价格上的比较,来选择所需要的美食佳肴。目前,通过上网提供外卖和送餐服务的餐厅多于独立餐馆经营者,外卖与送餐服务占餐饮生意额的一半以上。全美餐饮消费者越来越趋向于使用网上订餐的形式来购买外卖,特别是年轻一族的消费者。显而易见,网上订餐将成为餐馆业扩大生意的金矿源,有眼光的餐馆业主应该尽早考虑如何利用英特网上网销售。对于网上预订餐位,三藩市一家餐厅的总经理说该餐厅每周至少可以接到20个网上订餐。不过,他认为网上订餐最有价值的地方是大大地方便了消费者。因为如果通过电话订餐,往往会遇上电话线繁忙、占线的问题,客人也因此会另外选择其它店家。如今,使用网上订餐,这些问题不仅迎刃而解,而且客人什么时候想订餐位都可以,凌晨三四点都不成问题了。据资料报道,国外一些高档的餐厅有的不准备采用网上订购后送餐的服务方式,但是他们会偏向于利用英特网提供预订餐位的服务。如三藩市的完全利用英特网预订取代了传统的前台用纸用笔接受预订的方法。网上订餐带来了方便、实惠和个性化[3]。总的说来,单独的网上订餐还不足以支撑网站的经营。目前的状况是规模大的不盈利,小的有盈利。原因是规模大的范围广,运营成本高,规模小的由于运营成本低,客户群相对稳定,故有一定的利润空间。1.3项目意义网上订餐业务的兴起, 折射出餐饮业善抓机遇、抢占利润第二落点的经营理念,同时也显示出消费者在日常所需中, 运用网络观念的意识正逐渐增强。但比起如今火爆的网上购物, 网上订酒店住宿等服务, 网上订餐服务在一些餐饮企业中仍未引起足够的重视, 对于消费者来说, 许多人对这一新兴业务尚缺乏了解。但因这种消费方式顺应了当前信息社会的快捷、便利等趋势, 网上订餐仍存在着广阔的发展空间。网上订餐的发展也将给餐饮业带来勃勃的生机。22. 相关技术介绍2.1 Web 2.0技术Web2.0的概念最早是去年在美国提出来的,通过Blog口口相传,网上很多IT人士试图都在给 Web2.0 一个具体的定义,事实上却很难。2.1.1 Web2.0 概述Web2.0是为了区别于过往的以门户为代表的 Web1.0的称呼,Web2.0只是一个符号,它表明的是正在变化中的互联网,这些变化相辅相成,彼此联系在一起,它让社会性、用户、参与和创作这些元素浮出水面成为互联网文化的中坚力量。Web2.0的最大特点是个人化、去中心化,同时强调社会化,强调开放、共享, 强调参与、创造。基本上Web2.0的绝大部分服务都存在一个个人标识明确的页面。Web2.0的最大改变就是普通人开始改变、创造网络,草根性质的、或者说更准确的说法是非专业、业余性质的参与。需要说明的是草根并不是是社会底层。 Web2.0要凸现每个用户的价值,每个人在互联网上都可以创造自己的价值。2.1.2 Web2.0的技术与典型应用? RSS ,这个是Web2.0标杆式的技术,它以XML为基础,是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),通常被用于新闻和其他按顺序排列的网站, 例如Blog。一段项目的介绍可能包含新闻的全部介绍等。或者仅仅是额外的内容或者简短的介绍。这些项目的链接通常都能链接到全部的内容。网络用户可以在客户端借助于支持RSS的新闻聚合工具软件( 例如 Sharp Reader, News Crawler, Feed Demon),在不打开网站内容页面的情况下阅读支持RSS输出的网站内容。网站提供RSS输出,有利于让用户发现网站内容的更新。? XML ,Web2.0的基础技术,原来作为HTML的父集出现,现在以其为基础的周边应用越来越多,比如XSL、RSS、Ajax 等。? Ajax ,很旧的技术,采用 Javascript+XML,克服了以往页面更新请求将所有页面内容重新提交到了服务器, 然后再由服务器重新升成整个页面的低效率方式,Ajax通过XML技术将只向服务器请求更新的数据,然后通过Javascript 技术在客户端运算生成整个页面, 这种技术可以提高数据传输效率,增强用户体验。? Trackback ,Trackback中文称作“引用通告”,简称“引用”。用处就是通知被你所引用的日志,你引用了它。这样Blog之间就通过Trackback互相连接了起来,因此有人将之称为“思想的桥梁”。? Tag ,Tag是什么,网上目前也没有一个准确的说法,但是大家都能按照自己的方式去用,其实Tag就是一个文章或者一个Blog的标签,这个标签命名可以3来自关键词,也可以来自分类,作为关键词标记,你可以用几个关键词来概括你的文章或者Blog,这个关键词可以是文章中出现过的,也可以是没有的,作为分类标记,Tag又不同于一般的目录结构的分类方法,可以自由地不考虑目录结构的给文章进行分类,各个Tag之间的关系是一种平行的关系但是又可以根据相关性分析,将经常一起出现的Tag关联起来,而产生一种相关性的分类。前面我们提到的RSS、Ajax和Trackback也可以说是Web2.0的Tag。? Blog ,Web2.0时代最典型代表的应用就是Blog,Blog是Weblog的简写,翻译成中文叫网上日志,Blog是一种平台,也是一种技术,更是一种思潮,Blog是管理个人内容的一种工具。Blog是以 WEB( 网页)方式显示和发布,借助于互联网,人们就可以彼此分享自己的经验、想法、感受等,并由此形成一种新型的网络虚拟社群和人际交往方式。? Wiki ,Wiki一词来源于夏威夷语的“weekee”,原本是“快点”的意思。在这里 Wiki指的是一种网上共同协作的超文本系统,可由多人共同对网站内容进行维护和更新。我们可以通过网页浏览器对Wiki文本进行浏览、创建、更改,而且创建、更改、发布的代价远比HTML文本为小,您并不需要懂得HYTML代码,只要简单了解少量的Wiki的语法的约定,您就可以在系统中发布您的页面。与其它超文本系统相比,Wiki有使用方便及开放的特点,所以Wiki系统可以帮助我们在一个社群内共同收集、创作某领域的知识,发布大家都关心和感兴趣的话题。? SNS ,SNS即Social network software的英文缩写, 即社会性网络软件, 社会性网络软件依据六度理论,以认识朋友的朋友为基础,扩展自己的人脉。并且无限扩张自己的人脉,在需要的时候,可以随时获取一点,得到该人脉的帮助。SNS网站,就是依据六度理论建立的网站,帮你运营朋友圈的朋友。六度关系理论:美国著名社会心理学家米尔格伦 (Stanley Milgram)于20 世纪60年代最先提出,在人际脉络中,要结识任何一位陌生的朋友,这中间最多只要通过六个朋友就能达到目的。就是说你想认识一个人,托朋友找朋友,找认识他的人,之间不会超过六个人。? 网摘 , 网摘就是一种在网上保存网页链接的服务,通俗的说就是一个放在网络上的海量收藏夹。网摘服务作为一种个人的信息整理平台,基于它在网络上的这一独特的优势,它能提供很多本地收藏夹所不能提供的功能。其核心价值已经从保存浏览的网页,发展成了一个新的信息共享的中心,能够真正做到“共享中收藏、收藏中分享”。如果每日使用网摘的用户数量较大,用户每日提供的链接收藏数量足够,网摘站就成了汇集各种新闻链接的门户网站。国外代表网站有Delicious,国内有。? Podcast,中文译名尚未统一,但最多的是将其翻译为“播客”。它是数字广播技术的一种, 出现初期借助一个叫“iPodder”的软件与一些便携播放器相结4合而实现。Podcasting录制的是网络广播或类似的网络声讯节目,网友可将网上的广播节目下载到自己的 iPod、MP3播放器或其它便携式数码声讯播放器中随身收听,不必端坐电脑前,也不必实时收听,享受随时随地的自由。更有意义的是,你还可以自己制作声音节目,并将其上传到网上与广大网友分享。就像博客颠覆了被动接受文字信息的方式一样,播客颠覆了被动收听广播的方式,使听众成为主动参与者。? IM,即时通讯(Instant Messenger,简称IM)软件可以说是目前我国上网用户使用率最高的软件。聊天一直是网民们上网的主要活动之一,网上聊天的主要工具已经从初期的聊天室、论坛变为以MSN、QQ为代表的即时通讯软件。大部分人只要上网就会开着自己的MSN或QQ。作为使用频率最高的网络软件,即时聊天已经突破了作为技术工具的极限,被认为是现代交流方式的象征,并构建起一种新的社会关系。它是迄今为止对人类社会生活改变最为深刻的一种网络新形态,没有极限的沟通将带来没有极限的生活。2.2 ASP.NET技术ASP.NET是微软提供的新一代的Web开发平台,它为开发人员提供了生成企业级Web应用程序所需要的服务、编程模型和软件基础结构,同其他Web开发平台相比,ASP.NET具有下面三大优势。2.2.1支持编译型语言目前流行的几种脚本语言比如VBScript、JavaScript和ASP等都有两个主要的缺点。第一,不支持强数据类型。在JavaScript中定义变量只有一个关键字var,使用var关键字定义的变量,如果赋值是字符串,该变量就是字符串变量;如果赋值是整数,则该变量就是整型变量。在VBScript和ASP中,定义变量只通过一个关键字DIM,该变量也没有具体的类型。第二,脚本语言是解释型的。通常情况下,解释型的脚本语言在性能上抵不上编译型的语言。自推出.NET开发平台以来,微软在Web服务器端开发语言方面,主推VB.NET和C#.NET这两种编译型语言。通过这两种开发语言,程序员可以像开发普通的Windows程序一样来开发Web程序,只不过在Windows程序中用于开发GUI界面的各种控件,在Web程序开发中也有它们相应的Web版本。程序员通过C#语言,利用VS.NET提供的各种Web控件,可以非常容易地开发ASP.NET Web程序。开发的ASP.NET程序被编译成MSIL语言,这种中间语言具有平台无关性,而且,由于ASP.NET页面在执行前会被编译,所以ASP.NET的性能得到了很大的提高。2.2.2程序代码与页面内容的成功分离通常的动态网页开发,往往是在一个网页上混合多种脚本语言。比如在HTML脚本语言上可以嵌入JavaScript或VBScript等客户端脚本语言,也可以同时嵌入5ASP或JSP等服务器端脚本语言。这种多语言混合的Web开发模式通行已久,但是它的代码可读性很差,程序代码同页面内容混合在一起,程序员要在多种语言的思维上频繁切换,如果程序很复杂的话,这种开发模式非常不利于程序的开发,而且日后的维护也将成为大问题。ASP.NET Web开发技术为程序员提供了一种非常好的开发模式,即Code Behind技术,它通过Web控件将程序代码与页面内容成功分离,从而使ASP.NET的程序结构异常清晰,开发和维护的效率也得到了很大的提高。另外可以利用Visual Studio.NET集成环境下开发ASP.NET应用程序,该环境不仅提供了强大的调试能力,而且还集成了“所见即所得”的HTML编辑器,为开发人员开发Web页面提供了方便的图形化支持。2.2.3引入服务器端控件在ASP中,可以给页面手动添加HTML控件,对这些控件的响应有两种办法。一种是在客户端的脚本语言中响应用户对这些控件的输入,另一种是把该页面提交给服务器。这两种办法都存在问题,第一种办法产生的问题是不同的浏览器以不同的方式执行客户端脚本语言,我们很难编写在多种浏览器上都能良好运行的复杂的Web页面。第二种办法存在的问题是,如果我们把Web页面重新提交给服务器,那么Internet的无状态特性就会导致页面上存储在变量中的信息丢失,除非我们编写了复杂的代码,把它们存储在HTML元素或URL查询字符串中。ASP.NET通过服务器控件解决了上述问题。服务器端控件会生成发送给浏览器的HTML代码,显示控件,它们还能生成隐藏的HTML元素来存储它们当前的状态。在提交页面时,这些信息就会传送回服务器,控件将自动处理这些信息,改变HTML,显示控件[11]。2.3 AJAX技术AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。2.3.1与传统的web应用比较传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,6所以Web服务器的处理时间也减少了。2.3.2 Ajax应用程序的优势? 通过异步模式,提升了用户体验? 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用? Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。2.3.3 优点和缺点使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。对应用Ajax最主要的缺点就是,它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。2.3.4 Ajax的工作原理Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。在创建Web站点时,在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能:? 动态更新购物车的物品总数,无需用户单击Update并等待服务器重新发送整个页面。? 提升站点的性能,这是通过减少从服务器下载的数据量而实现的。例如,在某购物车页面,当更新篮子中的一项物品的数量时,会重新载入整个页面,这必须下载整个页面的数据。如果使用Ajax计算新的总量,服务器只会返回新的总量值,因此所需的带宽仅为原来的百分之一。 消除了每次用户输入时的页面刷新。7例如,在Ajax中,如果用户在分页列表上单击Next,则服务器数据只刷新列表而不是整个页面。? 直接编辑表格数据,而不是要求用户导航到新的页面来编辑数据。对于Ajax,当用户单击Edit时,可以将静态表格刷新为内容可编辑的表格。用户单击Done之后,就可以发出一个Ajax请求来更新服务器,并刷新表格,使其包含静态、只读的数据[12]。2.4 SQL Server 2005技术SQL Server 是一个全面的、集成的、端到端的数据解决方案,它为企业中的用户提供了一个安全、可靠和高效的平台用于企业数据管理和商业智能应用。2.4.1 SQL Server 数据平台SQL Server 2005 为IT专家和信息工作者带来了强大的、熟悉的工具,同时减少了在从移动设备到企业数据系统的多平台上创建、部署、管理及使用企业数据和分析应用程序的复杂度。 通过全面的功能集、和现有系统的集成性、以及对日常任务的自动化管理能力,SQL Server 2005 为不同规模的企业提供了一个完整的数据解决方案。图1显示了SQL Server 2005数据平台的组成架构。2.4.2 SQL Server 支持工具关系型数据库: 安全、可靠、可伸缩、高可用的关系型数据库引擎,提升了性能且支持结构化和非结构化(XML)数据。? 复制服务: 数据复制可用于数据分发、处理移动数据应用、系统高可用、企业报表解决方案的后备数据可伸缩存储、与异构系统的集成等,包括已有的Oracle数据库等。? 通知服务: 用于开发、部署可伸缩应用程序的先进的通知服务能够向不同的连接和移动设备发布个性化、及时的信息更新。? 集成服务: 可以支持数据仓库和企业范围内数据集成的抽取、转换和装载能力。? 分析服务: 联机分析处理(OLAP)功能可用于多维存储的大量、复杂的数据集的快速高级分析。? 报表服务: 全面的报表解决方案,可创建、管理和发布传统的、可打印的报表和交互的、基于Web的报表。? 管理工具: SQL Server 包含的集成管理工具可用于高级数据库管理和调谐,它也和其他微软工具,如MOM和SMS紧密集成在一起。标准数据访问协议大大减少了SQL Server和现有系统间数据集成所花的时间。此外,构建于SQL Server内的内嵌Web service支持确保了和其他应用及平台的互操作能力。? 开发工具: SQL Server 为数据库引擎、数据抽取、转换和装载(ETL)、数据挖掘、OLAP和报表提供了和Microsoft Visual Studio? 相集成的开发工具,8以实现端到端的应用程序开发能力。SQL Server中每个主要的子系统都有自己的对象模型和API,能够以任何方式将数据系统扩展到不同的商业环境中。2.4.3 SQL Server 2005的特点与优势? 充分利用数据资产: 除了为业务线和分析应用程序提供一个安全可靠的数据库之外,SQL Server 2005也使用户能够通过嵌入的功能,如报表、分析和数据挖掘等从他们的数据中得到更多的价值。? 提高生产力: 通过全面的商业智能功能,和熟悉的微软Office系统之类的工具集成,SQL Server 2005为组织内信息工作者提供了关键的、及时的商业信息以满足他们特定的需求。SQL Server 2005目标是将商业智能扩展到组织内的所有用户,并且最终允许组织内所有级别的用户能够基于他们最有价值的资产——数.提供了工业上最低的规划、实现和维护成本,使数据库投资能快速得到回报[13]。93. 系统功能分析与概要设计3.1 功能分析本网上订餐管理系统共涉及了三种类型的角色,包括:管理员、注册会员(以下简称会员)和游客。故在功能上也根据这三种角色划分了三种类型的功能。每种功能都需要有相应的角色权限才能使用,比如说游客不能使用会员的一些功能,而会员也不能使用管理员的一些功能,但是游客的功能是会员和管理员都可以使用的。下面将一一介绍。3.1.1 管理员功能在用户登陆时可以选择账户的类型,如果选择了管理员的话,则系统将从数据库中判断该用户是否为管理员,如果是的话则跳转到管理员专有的页面上进行操作。(见图3 - 1到3 - 4)图 3 - 1 管理员选择管理员类型登陆图 3 - 2 管理员登陆后的页面头部分10图 3 - 3 会员选择管理员类型登陆图 3 - 4 会员选择管理员类型登陆后的产生错误管理员功能主要分为以下几个大的部分,首先,最重要的是订单的管理,在该项功能中包含了对当前待处理的定单的处理、查看、排序、删除(见图3 - 5),以及对已处理的历史订单的查看、排序等(见图3 - 6和3 - 7)。图 3 - 5 所有待处理的定单图 3 - 6 所有已处理的定单图 3 - 7 点击“详情”后显示的订单详情(未处理定单中同)其次,菜品管理也是重要的一个部分。在菜品管理中包括了添加、删除和修改菜品。(见图3 - 8和3 - 9)管理员通过点击按钮来添加菜品,每个菜品都可以添加有自己的名称、价格、图片和介绍等信息(见图3 - 10)。图 3 - 8 菜品管理部分功能11图 3 - 9 修改菜品信息图 3 - 10 点击“添加新菜”后的添加菜品最后的一个部分就是会员的管理。在该功能中,管理员可以查看每个会员的所有订单,对每个订单还能看到他订了些什么、消费了多少等等。 (见图3 - 11)图 3 - 11 会员管理操作管理员功能部分的结构图如下图所示:3.1.2 会员功能 图 3 - 12 管理员功能结构图 在会员功能中,最重要的就是点菜功能了。因此将点菜页面作为了系统的主页,一经登陆就可以看到主页上的热门菜、新品上市和选菜下订单部分。(见图 3 -13)会员只需点击每个菜品片下面的按钮,就可以将该菜品加入购物车中,然后在页面的底部也将动态地显示出当前购物车中的物品、数量及价格,也12可以删除。(见图 3 - 14)在会员认为完成了点菜之后,点击电话等信息。(见图3 - 15) 按钮,就会显示出当前订单的所有详细的内容,以及要求会员填写就餐时间、地点、联系其次,会员功能还包括了会员服务和留言反馈。在会员服务中,会员可以修改自己的基本信息,也可以看到自己所有的订单、订单的详细情况以及订单现在有没有被送出等信息。(见图3 - 16)在留言反馈中,会员可以留下对本订餐管理系统中的一些不足之处的意见和建议或者是赞美之词。(见图3 - 17)图 3 - 13选菜下订单主页图 3 - 14购物车图 3 - 15 点击“ok,去收银台后”的提交菜单图 3 - 16会员服务页面图 3 - 17 留言反馈页面会员功能部分的结构图如下图所示:133.1.3 游客功能 图 3 - 18 会员功能结构图 游客是指没有在本订餐管理系统中注册过的访问者。当游客访问时首先看到的是选餐的页面,游客可以选择菜品,加入购物车,当游客点击按钮时,就会显示出没有登陆的信息并要求登陆后才能使用下订单的功能。对于会员服务,游客点击进去之后所有的内容都是空的,对于留言反馈,游客点击进去之后只能查看所有的留言而不能发表留言。(见图3 - 19)图 3 - 19 游客点击“ok,去收银台”之后3.2 界面设计本系统的所有界面都采用了红色色调,美工效果比较少,整体比较简洁有序。另外像注册、登陆、收银台和添加新菜这些页面都采用了弹出式的方式,使页面看上去比较有动感。(登陆见图3 – 20,其余弹出框类似)图 3 - 20 在点击了登陆后弹出的登陆框3.2.1 管理员界面在登陆时,管理员选择管理员类型登陆后,即跳转到管理员专用的页面,在管理员部分中将所有的功能分布在三个页面上:订单处理、菜品管理和会员管理。(见图3 - 21)14图 3 - 21 管理员页面部分3.2.2 会员界面在登陆时,会员选择会员类型登陆后,即跳转到会员的页面,在会员部分中也将所有的功能分布在三个页面上:选餐订餐、会员服务和留言反馈。这部分的页面和游客和页面是一样的,只不过当游客访问某些页面的时候会因为没有登陆而无法访问。(见图3 –22)图 3 - 22 会员页面部分3.3 数据库设计数据库往往是一个管理信息系统的核心,因为它存储了该系统的所有数据和信息,所以极其重要。在数据库设计中,既要关心到数据的冗余问题,又要关心到表与表之间的关系。3.3.1 数据库结构本系统的数据库名称为“DinnerOrder”,数据库中包含了以下几个表:FoodAndDrink, Member, MemberReback, Orders, Orders_Detail。其中FoodAndDrink表中存放了所有菜品的信息,包括:菜品ID、菜品名称、价格、介绍、种类、图片、被订次数;Member表中存放了所有会员的信息,包括会员ID、会员姓名、性别、邮箱、电话、密码、地址、类型、订餐次数、订餐总额;MemberReback表中存放了会员的反馈信息,信息ID、留言人姓名、留言标题、留言内容和留言时间;Orders表中存放了所有的订单,包括订单ID、订单会员ID、菜品数量、总额、用餐地点、订餐时间、用餐时间、状态、联系电话和处理时间;Order_Detail表中存放了每个订单的详细菜单,包括订单ID、菜品ID、每样菜品的数量、菜品名称和价钱。(图3 – 21显示了FoodAndDrink表的结构)15图 3 - 23在这些表中存在一些关系:Orders表中的会员ID参考了Member表中的会员ID,Order_Detail表中的订单ID参考了Orders表中的订单ID,每个表中都是以ID作为主码的。考虑到菜品是随时要修改的,而订单的数据是要一直保存在数据库中的,所以没有将订单中的菜品ID号与FoodAndDrink中的ID号参照起来,虽然这样做产生了一定的数据冗余,但是这保证了在个性菜品信息以后,此前订单中曾经订过该菜品的数据不会丢失,这样,管理员也可以根据历史数据做出合理的安排,此外,将订单的详细数据存放在一张表中虽然有冗余,但是在一定程度上却加快了数据库表查询的速度。3.3.2 数据库操作数据库操作主要是指对数据库中每个表的查询、插入、修改和删除等操作。在本系统中,FoodAndDrink和Orders表包含了所有的操作,另外的三个表没有删除的操作。在插入和修改表数据的时候都必须考虑到表中字段的数据类型及完整性约束,如:非空、整型与小数、图像的二进制类型及字符串的定长与可变长度等,必须在程序中对输入的数据进行相应的转换后才可以保存到数据库中,在删除订单时候,由于Order_Detail表中参照了Order表中的ID号,所以必须进行级联删除,即删除订单的时候也删除Order_Detail表中相应订单的数据。而在其他的表中没有这样的问题,因为没有涉及到参照。3.3.3 数据字典 数据字典1 菜品表A 表名字段名FoodIDFoodNameFoodPriceFoodIntroFoodKindFoodImg FoodAndDrink 类型 备注 int 非空,自增标识 nvarchar 非空,名称 numeric 非空,价格 text 介绍 nchar 非空,类型,菜肴和酒水 image 图片16 B 表结构FoodOrderTimes2 会员表 A 表名int 初始值为0B 表结构Member字段名 类型 MembID int MembName nvarchar MembGender nvarchar MembEmail nvarchar MembPhone nchar MembPwd varchar MembAddress nvarchar MembType nchar MembOrderTimes intMembTotalMoney numeric备注非空,自增标识 非空,会员名 非空,性别 会员邮箱非空,会员电话 非空会员地址 会员/管理员订餐次数,初始值为0订餐消费总额,初始值为0.003 反馈表 A 表名字段名 RebackID MembName RebackTitle RebackContent RebackDateB 表结构MembReback 类型 备注 int 非空,自增标识 nvarchar 非空,反馈者会员名 nvarchar 非空,反馈标题 text 非空,反馈内容 datetime 非空,反馈时间 Orders 类型 int int intnumeric nvarchar datetime varchar datetime varchar datetime4 订单表 A 表名字段名 OrderID MembID TotalNum TotalMoneyB 表结Location构HaveDinnerTime PhoneNumber OrderTime Deliverd DeliverTime5 订单详情表 A 表名字段名Order_Detail_ID OrderIDB 表结FoodID构FoodTotalNum FoodName FoodPrice备注非空,自增标识非空,外键,引用Member中ID 非空,本订单的菜品数量 非空,本订单的价格总额 非空,用餐地点 非空,用餐时间 非空,联系电话 非空,订餐时间非空,是否已处理,默认未处理 处理的时间,未处理时为空Order_Detail 类型 备注 int 非空,自增标识 int 非空,外键,引用Orders中的ID int 非空,菜品ID int 非空,所订该菜品的数量 nvarchar 该菜品名称 numeric 该菜品价格表 3 - 1 数据字典174. 系统详细设计与编码实现4.1 管理员模块管理员模块主要涉及了订单管理、菜品管理和会员管理三个部分,这个模块当中涉及的数据库操作比较多。4.1.1 订单管理订单管理主要对会员提交的处理工作,包含了显示订单、在订单派送后更改订单的状态和对于不合理的定单的删除。在显示订单方面分为未处理订单和已处理订单两个部分,但是都是放在一个页面上,其中未处理订单显示在页面的最上方,有利于管理员登陆后马上就能看到并处理,使用GridView来显示数据,从数据库中把数据读到DataReader中,再建立一张DataTable,把数据放进去,最后将这张DataTable绑定到GirdView中(由于后面的数据显示基本上都是采用这种方法,所以后面不再详述)。将数据对订单的显示也有排序方式可选择,分为:按用餐的时间排序、按订餐时间排序、按订单金额排序和按菜品数量排序四种。排序方式放在DropDownList中,并启用AutoPostBack,值一经改变就马上更新显示的方式并显示。(代码如下,一些变量的定义不在其中,后面的代码都是这样)/**创建gridview的数据,通过strDe_UnDe来判断是哪个*/protected void BindOrderUndeliverd(){this.gridviewOrderUndeliverd.DataSource =CreateSourceOrder(strSelOrderUnDeliverd, "UnDe");this.gridviewOrderUndeliverd.DataBind();lbnNextPageUnde.Enabled =lbnPrevPageUnde.Enabled =if (intCurrentPageUnde == (intPageCountUnde - 1)){lbnNextPageUnde.Enabled =}if (intCurrentPageUnde == 0){lbnPrevPageUnde.Enabled =}lblCurrentPageUnde.Text = (intCurrentPageUnde + 1).ToString(); this.updatepanelOrderUndeliverd.Update();}/**创建gridview的数据,通过strDe_UnDe来判断是哪个18*/protected ICollection CreateSourceOrder(string strSelOrder, string strDe_UnDe) {SqlCommand sqlCmd = new SqlCommand(strSelOrder, sqlConn); DataTable dtOrders = new DataTable();dtOrders.Columns.Add("ID", typeof(int));dtOrders.Columns.Add("MembID", typeof(int));dtOrders.Columns.Add("MembName", typeof(string));dtOrders.Columns.Add("TotalNum", typeof(int));dtOrders.Columns.Add("TotalMoney", typeof(decimal));dtOrders.Columns.Add("OrderTime", typeof(string));dtOrders.Columns.Add("HaveDinnerTime", typeof(string)); dtOrders.Columns.Add("Location", typeof(string));dtOrders.Columns.Add("OrderID", typeof(int));int intStartIndex = 0;if (strDe_UnDe == "De"){intStartIndex = intCurrentPageDe * intPageSdtOrders.Columns.Add("DeliverTime", typeof(string)); }else{intStartIndex = intCurrentPageUnde * intPageS}int i = 0, j = intStartIndex + 1;if (sqlConn.State == ConnectionState.Closed){sqlConn.Open();}SqlDataReader dr = sqlCmd.ExecuteReader();while (dr.Read()){i++;if (i & intStartIndex && i &= intStartIndex + intPageSize) {DataRow drow = dtOrders.NewRow();drow["ID"] = j++;drow["MembID"] = dr["ID"];drow["TotalNum"] = dr["NUM"];drow["TotalMoney"] = dr["MONEY"];drow["OrderTime"] = dr["OTIME"];drow["HaveDinnerTime"] = dr["HDTIME"];drow["Location"] = dr["ADDR"];drow["OrderID"] = dr["ODID"];if(strDe_UnDe == "De"){drow["DeliverTime"] = dr["DTIME"];}dtOrders.Rows.Add(drow);}19if (i & (intStartIndex + intPageSize)){}}dr.Close();sqlConn.Close();for (int k = 0; k & dtOrders.Rows.C k++ ){dtOrders.Rows[k]["MembName"] =SelectName_ID(int.Parse(dtOrders.Rows[k]["MembID"].ToString()),"MembID", "MembName", "Member");}return dtOrders.DefaultV}为了实现订单处理,在负责显示的GridView中添加一个链接按钮,显示的标题栏为“更改状态”,在数据栏中显示的内容为“未送出”,管理员只要点击这个链接就可以将该订单的状态改为“已处理”。由于在GirdView中每个数据的链接按钮都是相同的,所以在这个链接按钮上使用了CommandName来绑定GridView中的OrderID,在后台中读取到这个ID,然后再更改数据库中该ID的状态。在实现显示订单详情上也采用了类似的方法,这里不再详述。(代码如下)/** 点击“未送出”链接按钮后触发的修改订单的状态事件*/protected void lkbtnChangeStatue_Command(object sender, CommandEventArgs e) {int intOrderIDUnde = int.mandName.ToString());string strUpdateOrderState = "UPDATE [Orders] SET Deliverd = '已送出'WHERE OrderID = " + intOrderIDUnde + ";";string strUpdateOrderDeliverTime = "UPDATE [Orders] SET DeliverTime ='" + DateTime.Now.ToString() + "'WHERE OrderID = " +intOrderIDUnde + ";";SqlCommand sqlcmd = new SqlCommand(strUpdateOrderState, sqlConn); SqlCommand sqlcmd2 = new SqlCommand(strUpdateOrderDeliverTime,sqlConn);if(ConnectionState.Closed == sqlConn.State){sqlConn.Open();sqlcmd.ExecuteNonQuery();sqlcmd2.ExecuteNonQuery();sqlConn.Close();}BindOrderDe();// 重新绑定数据BindOrderUndeliverd();// 重新绑定数据}204.1.2 菜品管理菜品管理主要包括添加菜品、删除和修改菜品三块内容。菜品的显示也是采用了GridView,在这前面已经详述过,这里不再叙述。添加菜品是采用了AjaxControlToolkit中的Animations组件来实现弹出的效果,关于如何实现的代码如下:&ajaxControlToolkit:AnimationExtender id="OpenAnimation" runat="server" TargetControlID="imgbtnNewFood"&&Animations&&OnClick&&Sequence&&EnableAction Enabled="false" /&&ScriptActionScript="Cover($get('ctl00_ContentPlaceHolder1_imgbtnNewFood'),$get('flyout'));" /&&StyleAction AnimationTarget="flyout" Attribute="display"Value="block"/&&Parallel AnimationTarget="flyout" Duration=".3" Fps="25"& &Move Horizontal="150" Vertical="-50" /&&Resize Width="260" Height="280" /&&Color PropertyKey="backgroundColor" StartValue="#AAAAAA"EndValue="#FFFFFF" /&&/Parallel&&ScriptAction Script="Cover($get('flyout'), $get('info'), true);" /& &StyleAction AnimationTarget="info" Attribute="display"Value="block"/&&FadeIn AnimationTarget="info" Duration=".2"/&&StyleAction AnimationTarget="flyout" Attribute="display"Value="none"/&&Parallel AnimationTarget="info" Duration=".5"&&Color PropertyKey="color" StartValue="#FF0000"EndValue="#666666" /&&Color PropertyKey="borderColor" StartValue="#FF0000"EndValue="#666666" /&&FadeIn AnimationTarget="btnCloseParent" MaximumOpacity=".9" /& &/Parallel&&/Sequence&&/OnClick&&/Animations&&/ajaxControlToolkit:AnimationExtender&以上是实现弹出式添加菜品中的弹出部分的内容,关闭部分与打开部分相似,另外还需要一些层来实现,由于比较简单,这里不再详述。AjaxControlToolkit都是采用了标签式的方式来配置各种属性,与HTML代码类似,这方便了将其嵌入HTML代码中方便使用和查看。添加菜品需要注意的问题有以下几个:一是检验信息的完整性,二是检验信息的合法性(在这部分主要是菜品价格的合法性,因为必须是数字),三是如何将图片上传到数据库中保存起来。下面一一叙述。21首先检验信息的完整性使用了ASP.NET中Validation中的RequiredFieldValidator控件来控制TextBox框的内容必须被填写,当点击页面上的按钮后,系统会自动触发该控件来检测需要填写的内容是否被正确地填写了,如果还有未被填写的,则按钮事件不会被触发,并将显示出预先设定好的ErrorMessage的内容。(效果如图4 - 1)图 4 - 1其次信息的合法性上,添加菜品这部分涉及了价格的数字特性。在这里采用了AjaxControlToolkit中的MaskedEditExtender来控制文本框中只能被输入0至9的数字。(代码如下)&ajaxControlToolkit:MaskedEditExtender ID="MaskedEditExtender2" runat="server" TargetControlID="tbFoodPrice"Mask="99,999.99"MessageValidatorTip="true"OnFocusCssClass="MaskedEditFocus"OnInvalidCssClass="MaskedEditError"MaskType="Number"InputDirection="RightToLeft"AcceptNegative="Left"DisplayMoney="Left"/&最后是图片上传到数据库中保存。在数据库存放菜品信息的表中有一个image字段,这在前面数据库设计部分已经讲到过,在SQL中,这种类型的字段是以二进制的形式来存储的,所以在上传图片的时候要将图片转化成二进制的数组,然后再将这个数组中的内容存储到数据库中进行保存。在这里使用了IO流先把图片打开到流中,再从流中将图片的信息转化为二进制并保存到字节数组中,最后在把这个字节数组中的内容存入数据库中的image字段。(代码如下)//获得图象并把图象转换为byte[]22HttpPostedFile upPhoto = this.fileFoodImg.PostedFSystem.IO.Stream PhotoSint upPhotoLif(0 == upPhoto.ContentLength){string strPath = "~/resource/pic/NoImage.jpg";string strPhotoPath = Server.MapPath(strPath);PhotoStream = File.Open(strPhotoPath, FileMode.Open);upPhotoLength = (int)PhotoStream.L}else{upPhotoLength = upPhoto.ContentLPhotoStream = upPhoto.InputS}//没有图片使用默认byte[] PhotoArray = new Byte[upPhotoLength];PhotoStream.Read(PhotoArray, 0, upPhotoLength);strSql = "INSERT INTO [FoodAndDrink](FoodName, FoodPrice, FoodIntro,FoodKind, FoodImg) VALUES('"+ strFoodName + "'," + dubFoodPrice + ",'" + strFoodIntro + "','" +strFoodKind + "', @foodImg)";cmd = new SqlCommand(strSql, conn);cmd.Parameters.Add("@foodImg", SqlDbType.Image);cmd.Parameters["@foodImg"].Value = PhotoAconn.Open();cmd.ExecuteNonQuery();conn.Close();4.1.3 会员管理会员管理部分主要是显示会员以及显示会员的所有订单和订单的详细情况。显示会员信息与前面显示订单部分类似,这里不再详述。显示所有订单和订单的详细情况都是采用了AJAX Extensions中的UpdatePanel组件,这个组件的功能是可以进行页面的部分刷新,提高了显示的速度。将所有订单和订单的详细情况的分别放在两个GridView中,再将这两个GridView分别放入两个UpdatePanel中,初始默认为隐藏,等到触发了显示事件的时候再显示出来。有关显示哪个订单的问题还是采用了链接按钮的CommandName来判断,前面已经详述过。4.2 会员模块会员模块中包含了订餐管理、会员服务和留言反馈三个部分,其中会员服务和留言反馈部分都没有什么难的内容,在选餐订餐方面涉及到了购物车的实现。4.2.1 选餐订餐如概要设计中所述,选餐订餐是本系统的主页,在每个菜品下面都有一个加入菜单的链接,在点击这个链接以后就可以将这个菜品加入本次会话的购物车中,再次点击则购物车中该菜品的数量会增加。那么购物车如何实现呢?23我认为用Session加上Datatable实现比较方便,因为Cookie的话有可能在有的电脑上被禁止了,而DataSet等这些方法的操作都比较麻烦。Session的话不用管数据是什么类型,所以类型的东西都使用同一种方式读取,数据集合也一样。所以在实现的时候,可以先把自己的数据从数据库中读取出来,存放在一个DataTable中,当会话开始的时候把这个表和里面的内容放入Session中,每次对表修改的时候也对Session修改,或者可以一次性修改。(代码如下)/**初始化菜单*/protected void CreateOrderCar(){if (Session["FoodOrderCar"] == null){dtOrderCar.Columns.Add("FoodName", typeof(string));dtOrderCar.Columns.Add("FoodPrice", typeof(double));dtOrderCar.Columns.Add("FoodNum", typeof(int));dtOrderCar.Columns.Add("FoodPriceSum", typeof(double)); Session.Add("FoodOrderCar", dtOrderCar);}//刷新后dtOrderCar就没有了,要从Session中读取else{dtOrderCar = (DataTable)Session["FoodOrderCar"];}this.GridViewFoodOrder.DataSource = dtOrderCar.DefaultV this.GridViewFoodOrder.DataBind();this.GridViewFoodOrder.Visible =updatePanelOrder.Update();}/**加入一个菜*/protected void AddFoodIntoOrder(string strFoodName, double dubFoodPrice) {dtOrderCar = (DataTable)Session["FoodOrderCar"];foreach (DataRow dr in dtOrderCar.Rows){if (dr[0].ToString() == strFoodName){dr[2] = double.Parse(dr[2].ToString()) + 1;dr[3] = double.Parse(dr[2].ToString()) *double.Parse(dr[1].ToString());CaculateTotalMoney();UpdateOrderUpdatePanel();}}// 判断是否已存在于定单中DataRow drNewFood = dtOrderCar.NewRow();24drNewFood[0] = strFoodNdrNewFood[1] = dubFoodPdrNewFood[2] = 1; //第一次一次点击,数量为1drNewFood[3] = dubFoodPrice * 1;dtOrderCar.Rows.Add(drNewFood);UpdateOrderUpdatePanel();UpdateSubmitOrder();}protected void CaculateTotalMoney(){double dubTotalMoney = 0;foreach (DataRow dr in dtOrderCar.Rows){dubTotalMoney += (double.Parse(dr[1].ToString()) *double.Parse(dr[2].ToString()));}lbOrderTotalMoney.Text = dubTotalMoney.ToString();}在选餐订餐部分还有一个收银台的功能,收银台也是采用了前面添加菜品中的弹出方式来实现。所不同的是去收银台要求是已经是点了至少一个菜了并且用户必须已经登陆才可以。这里还是用Validation来实现,但是与前面的方式有所不同。因为有没有点菜和有没有登陆不是靠用户自己输入数据来判断的,而是要从Session中读取的,而如果将Session中的数据读出来输出到Label中的话,Validation的使用对象是不能为Label的。我结合了这两个内容,把从Session中读取的购物车信息和用户信息写到收银台中的TextBox中去,然后把这个TextBox设置为ReadOnly,这样就可以为TextBox加上Validation了。并且在收银台中还有一个用餐时间的填写问题,用户在订餐后要选择就餐时间,但是这个时间不能是比现在还早的时间,也不能是餐馆来不及准备和送餐的时间(我这里设置了30分钟),所有要加上时间的判断和计算。(代码如下)/**提交菜单事件*/protected void btnSubmitOrder_Click(object sender, EventArgs e){DateTime dtNow = DateTime.Nint intYear = dtNow.Yint intMonth = int.Parse(dplistMonth.SelectedValue.ToString());int intDay = int.Parse(dplistDay.SelectedValue.ToString());int intHour = int.Parse(dplistHour.SelectedValue.ToString());int intMinute = int.Parse(dplistMinute.SelectedValue.ToString());DateTime dtSelectTtry{dtSelectTime = new DateTime(intYear, intMonth, intDay, intHour,intMinute, 0);25}catch{this.lbSubmitError.Text = "您选择的时间有错误,请重新选择"; this.lbSubmitError.Visible =UpdatePanel3Update();}if(CaculateMinute(intMonth, intDay, intHour, intMinute) & 30){this.lbSubmitError.Text = "订餐失败,对不起,我们需要至少半个小时的准备时间!";this.lbSubmitError.Visible =UpdatePanel3Update();}else{// 更新orders, orders_detatil表string strUserName = Session["userName"].ToString();string strAddr = this.tbUseFoodAddress.Text.ToString();string strPhoneNum = this.tbSubmitPhoneNumber.Text.ToString(); int intTotalNum = int.Parse(this.tbTotalFoodNum.Text.ToString()); decimal decTotalMoney =decimal.Parse(this.lbSubmitTotalMoney.Text.ToString());if(0 == InsertTableOrders(strUserName, strAddr, intTotalNum,decTotalMoney, dtSelectTime, strPhoneNum)|| 0 ==InsertTableOrders_DetailAndFood((DataTable)Session["FoodOrderCar"])){this.lbSubmitError.Text = "出现错误,请重试!";this.lbSubmitError.Visible =UpdatePanel3Update();}this.lbSubmitError.Text = "谢谢你订餐,我们会及时送达!"; this.lbSubmitError.Visible =//Session.Remove("FoodOrderCar");UpdatePanel3Update();UpdateOrderUpdatePanel();}}4.2.2 会员服务和留言反馈会员服务和留言反馈这两块内容比较简单,而且涉及到的显示方式前面基本上都讲到过。在会员服务中的内容在刚加载的时候就从数据库中读取出来存放在页面上,需要修改的话直接在页面上相应的地方修改,完成后点击“确定修改”按钮26即可,若是有不合法的内容,也都是通过Validation来提示。密码修改单独做成一个弹出式的窗口,因为密码修改部分需要有密码验证等,将它单独列出来处理比较方便。会员自己的所有订单及订单详情也采用了前面订单管理部分的显示方式。在这两个部分中如果要进行操作的话只能是已经登陆的用户,在验证有没有登陆上也是采用了与收银台中相同的方法。4.3 公共模块在本系统中的公共模块其实就两个部分,一是选餐订餐部分,二是留言反馈部分。在选餐订餐部分游客和会员都可以选餐,但是在提交订单到收银台的时候,游客会被要求登陆。在留言反馈部分,游客和会员都可以查看所有的反馈信息,但是游客是不能发表反馈的,必须经过登陆。275. 系统测试5.1 测试计划制定为了使本系统能够正确运行,故在完成了系统编码以后对本系统进行黑盒测试(白盒测试在代码的编写过程中已经完成)。测试主要是对系统进行功能性的测试,即为系统的每个功能设计若干个测试用例,然后执行,由于本系统功能不是很多,所以这样测试实现起来并不复杂,而且这种测试覆盖比较全。测试时间共3天,其中第一天设计测试用例,后两天执行用例和完成测试报告。测试的离开准则为所有的测试用例都通过。5.2 测试用例设计与执行本次测试主要是针对系统的所有功能进行测试,分为以下几个功能部分:注册与登陆、选餐与订餐、修改会员信息及查看会员订单、发表反馈及查看反馈、处理未送出的订单及查看订单、添加菜品、修改菜品信息和查看所有会员及会员的订单详情。由于全部用例数量比较多,这里主要列出选餐与订餐功能部分的用例。(见表格5 - 1) 用例用例目的 号选择排序方式能否正常显示 直接点击提交订单能否成功 选择某个菜能否加入菜单 选择某个菜,菜单中的金额是否正确变化 再次选择该菜,菜单中的数通过/不通过 通过 通过 通过测试动作 测试数据 期望结果 实际结果123选择按价格从低到高方式排序 直接点击“去收银台”点击“香菇青菜”的链接 点击“香菇青菜”的链接 再次点击“香菇青菜”的链接无按价格从低到高排序 提示错误 在菜单中显示该菜,数量为1 在菜单中显示总金额为8元 在菜单中的该菜数量增1按价格从低到高排序提示没有选择任何菜品等信息 在菜单中显示该菜,数量为1无无4 无在菜单中显示总金额为8元 通过5 无在菜单中的该菜数量增1 通过28量是否增加 接上用例,菜单6中的金额是否正常变化 再选择另外一个7菜,菜单中的金额是否正常变化 删除菜单8中的一个菜能否成功点击“去9收银台”能否提交登陆后再去收银台能否提交 接上用例,用餐时间选择比当前时间早,能否提交 接用例 10,用餐时间选择比现在时间晚30分钟以内能否提交 接用例9,用餐时间选择比现在时间晚30分钟以上能否提交无 点击“西湖啤酒”的链接点击菜单中“香菇青菜”后的删除链接点击“去收银台”,再点击提交用测试数据登陆,再同用例8步骤使用测试数据的用餐时间,点击提交使用测试数据的用餐时间,点击提交 使用测试数据的用餐时间,点击提交 在菜单中显无示总金额为16元在菜单中显无示总金额为19元无菜单中没有香菇青菜 无 提示没有登陆 用户名:gcc1提示填写必密须的信息码:111111 时间比当前时间早提示用餐时一天间不正确时间比当前时间晚提示用餐时20-30分间不正确 钟时间比当前时间晚提示订餐成至少30分功 钟表格 5 - 129在菜单中显示总金额为16元 在菜单中显示总金额为19元 菜单中没有香菇青菜 提示没有登陆,且必须的信息未填写,不能提交 提示填写必须的信息,不能提交提示需要至少半个小时时间来准备,不能提交提示需要至少半个小时时间来准备,不能提交提示订餐成功通过通过通过通过通过通过通过通过10 1112 13转载请保留本文连接:分享到:相关文章声明:《【网上送餐】毕业论文--网上订餐管理系统》由“jola”分享发布,如因用户分享而无意侵犯到您的合法权益,请联系我们删除。TA的分享

我要回帖

更多关于 美团外卖系统派单漏洞 的文章

 

随机推荐