C#WPF 项目开发(一)(火车订票系统)

一、架构模式
I.了解架构模式
1.如何设计大型企业级的系统,在开始主要的代码开发之前,我们必须选择一种
合适的体系架构。
(1)、架构模式是对给定上下文的软件架构中常见问题的一种通用的可复用的解决方案。一种模式就是特定上下文的问题的一种解决方案。
2.10种常见的体系架构模式
(1)、分层模式:有3层Presentation layer 表示层(也就是UI层)、Application layer 应用层(也就是服务层)、Business logic layer 业务逻辑层(也就是领域层)、Data access layer 数据访问层(也就是数据持久层)(应用:一般桌面应用程序)。
(2)、客户端-服务器模式:该模式由两部分组成:一个服务端和多个客户端,服务器向多个客户端提供服务。客户端向服务器发起请求,服务器向这些客户端提供相关服务,之后,服务器继续侦听客户端的请求(应用:在线应用程序)。
(3)、主从设备模式:该模式也分为两块:主模块和从模块。主模块在相同的从模块之间分配工作,并根据从 模块返回的结构来计算最终的结果(应用:在数据库复制中,主数据库被视作权威数据源,而从数据库与其保持同步 、连接到计算机系统总线上的外围设备(主驱动器和从驱动器))。
(4)、管道-过滤器模式:用于构建产生和处理数据流的系统。每个处理步骤都包含在一个过滤器组件中,要处理的数据通过管道传递。这些管道可用于缓冲或者同步(应用:编译器。依次使用不同的过滤器执行词法分析、解析、语法分析和代码生成)。
(5)、代理模式:服务器将它们的功能(服务和特征等)发布到代理,客户端向代理请求服务,然后代理根据其注册表将客户端请求转发给合适的服务。
(6)、点对点模式:用途文件共享网络,如Gnutella 和 G2 、多媒体协议,如P2PTV 和 PDTP 基于加密货币的产品,如比特币和区块链。
(7)、事件总线模式:4个重要的组件:事件源、事件侦听器、通道和事件总线。事件
源将消息发送到事件总线上的特定通道,侦听器会订阅特定的频道。当消息发送到频道
中后,订阅该频道的侦听器会收到该消息的通知(应用:安卓开发、通知服务)。
(8)、模型-视图-控制器模式:该模式将交互式应用分为三个部分:模型——包含核心功能和数据 、视图——向用户显示信息(可以定义多个视图)、控制器——处理用户的输入,
这样做是为了将数据的内部表示与用户输入和向用户展示的形式分离开来,这样可以解
耦组件,同时也可以进行高效的代码重用(应用:主流编程语言的互联网应用架构、网络框架,如Django 和 Rails)。
(9)、黑板模式:黑板—— 一个结构化的全局内存,包含解决方案领域的对象、知识源——具有自身含义的专业模块、控制组件——选择、配置和执行模块,所有组件都可以访问黑板,组件可能会产生要添加到黑板中的新数据对象,组件在黑板上寻找特定类型的数据,并且可以通过与现有知识源进行模式匹配来找到这些数据(应用:语音识别)。
(10)、解释器模式:用于设计组件来解释使用专用语言写出的程序,它主要指定如何估算程序行,即以特定语言编写的语句或表达式。基本思想是为每种语言符号都设计一个类(应用:数据库查询语言,如SQL、用于描述通信协议的语言)。
注:以上解释来源网络
3.本次开发应用“分层模式”或“客户端-服务器模式”,使用SQL Server作为数据库。
(1)、分层模式:三层架构主要是指将业务应用规划中的表示层 UI、数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是“高内聚低耦合”的实现。
(2)、优点:高内聚、低耦合,可以降低层与层之间的依赖、各层互相独立,完成自己该完成的任务,项目可以多人同时开发,开发人员可以只关注整个结构中的其中某一层、容易移植、维护,如 B / S 转 C / S、SQLServer 转 Oracle、添加、修改、删除等
有利于标准化、有利于各层逻辑的复用、安全性高、用户端只能通过业务逻辑层来调用数据访问层,减少了入口点,把很多危险的系统功能都屏蔽了。
(3)、数据访问层(DAL):数据访问层 DAL 是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层 BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写 Data AccessCommon,保证数据访问层 DAL 数据处理功能。
(4)、业务逻辑层 (BLL):业务逻辑层 BLL 的功能是对具体问题进行逻辑判断与执行操作,接收到表现层 UI 的用户指令后,会连接数据访问层 DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层 UI 中,实现软件功能。
(5)、表示层 (UI):表示层又称表现层 UI,位于三层构架的最上层,与用户直接接触,主要是 B/S 信息系统中的 Web浏览页面。作为 Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到 BLL 系统中进行数据处理,处理后会将处理结果反馈到表示层中。

4.B/S架构与C/S架构的区别
(1)、CS即Client/Server(客户机/服务器)结构(即需要进行安装包安装),C/S结构在技能上非常成熟,它的重要特征就是交互性强、拥有安全的存取形式、网络通信数量低、响应速度快、利于处置大量数据。
(2)、BS即Browser/Server(浏览器/服务器)结构(即通过网页形式展现),就是只安装维护一个服务器 (Server),而客户端选用浏览器(Browse)运行软件。
(3)、CS响应速度快,安全性强,通常应用在局域网当中,可是开发维护费用高;BS能够完成跨平台,客户端零维护,可是个性化才能低,响应速度较慢。于是有一些单位平日办公 应用BS,在实际生产当中使用CS结构。
二、使用分层模式以及C/S架构进行开发
I、进行开发分层
1.(1)、Service(服务层):数据访问层(DAL)、业务逻辑层(BLL),使用WCF 服务应用程序。
(2)、新建一个项目用于存放服务层采用“类库”,项目名称为“DAL”选择路径、解决方案为“Service”。

(3)、在刚刚创建的DAL项目上的“解决方案”鼠标右键选择添加新建项目,仍然采用“类库”,项目名称为“BLL”。

(4)、在刚刚创建的BLL项目上的“解决方案”鼠标右键选择添加新建项目,搜索“WCF服务应用程序”,项目名称为“WcfService”。

2.(1)、Client(客户层):表示层(UI),使用WPF应用程序。
(2)、新建项目,搜索WPF,使用WPF应用(.NET Framewok),项目名称为“WpfApp”,解决方案名称为“Client”。

II、项目布局
注:以火车售票系统为例
1.(1)、首先布局系统的登录页面,登录页面类似于弹窗不需要嵌套所以使用“窗口(WPF)”,如果页面需要嵌套到选项卡中的就使用“用户控件(WPF)”。
(2)、创建一个登录前台页面“xaml”,进行页面的布局,接着创建一个文件夹用于存放页面布局使用的图片。

(3)、Client(客户层)
前台
1.Images(图片)
2.Tools (封装的方法)
(1)、Controls(封装的用户控件)
①前台–UCTabItemWithClose.xaml(关闭按钮)
后台–Tools\Controls\UCTabltemWithClose.xaml (关闭按钮)
②前台–AutoComplete.xaml (下拉框)
后台–AutoComplete.xaml.cs (下拉框)
(2)、Dictionary(封装的资源字典)
① 前台–PublicBasic.xaml (封装的控件如文本框、输入框)
② 前台–ButtonsBasic.xaml (封装的按钮如增删查改)
(3)、Utils(封装的类)
① 前台–CheckIDCardGetDiQu.cs (类–根据身份证号码判断地区)
3.View (存放页面)
单独页面(登录页面、主页面)
4.LoginWindow.xaml (登录页面)

(4)、在App.xaml里默认运行启动页面为“MainWindow.xaml”,需要把创建好的登录页面名称进行替换,这样运行时启动的页面为创建好的登录页面。

(5)、登录页面的页面尺寸如果在头部这里进行设置会出现页面问题,如页面会把整个电脑屏幕占满甚至把电脑页面的任务栏也覆盖掉,所以不要在头部进行尺寸设置,所以这里使用后台进行设置,把页面进行绑定。

(6)、给退出按钮绑定退出事件,如果使用this.Close();方法来关闭窗口会无法关闭,但是如果App.xaml那边设置的是当前窗口的话可以关闭,如果是Window.xaml则无法关闭。

(7)、在MainWindow.xaml布局主页面,在登录页面的后台“登录按钮”绑定主页面,点击登录跳转到主页面并且关闭登录页面(此过程未进行登录验证)。

三、VS连接SQL数据库
I.连接数据库
1.(1)、打开“Microsoft SQL Server Management Studio 18(SQL Server 2019)”展开提前引进来的数据库“TTS”–>可编程性–>存储过程–>新建“存储过程”。
(2)、存储过程是存储语句的集合,存储语句常见的是:查询、新增、修改、删除。

2.存储语句:
(1)、SELECT FROM --从数据库表中检索数据行和列(查询)。
(2)、INSERT INTO VALUES --向数据库表添加新数据行(新增)。
(3)、DELETE WHERE --从数据库表中删除数据行(删除)。
(4)、UPDATE SET --更新数据库表中的数据(修改)。

3.(1)、例如需要进行登录验证,使用参数进行存储语句的区分,实例化参数“@type”数据类型为“varchar”范围是200,字符串类都等于空,前面声明后面赋值为初始化。

(2)、字典表:把一些不会变的下拉框或能枚举出来的数据,如性别、证件类型等等放在字典表里进行快速调用,比如这个“火车订票系统数据库”里有两个字典表“属性表”、“属性明细表”,类型表对应详细类型。

(3)、根据账号密码获取登录人员信息,在数据库里获取主页面的个人信息:部门、账号、密码等等,通过查询语句进行数据查询,“BEGIN”下面的“IF(@type=‘btnLogin_Click_CheckLogin’)”判断当前语句名字,把登录按钮的事件名称作为语句名称后面加登录意思,不需要连表查询的数据直接进行“SELECT”查询,需要连表查询的数据通过“FROM”进行连表查询后再通过“SELECT”查询,“WHERE”查询具体数据条件可以是表头也可以是具体账号或密码,然后执行检查数据是否已经出来,因为添加了权限查询所以查询出来的数据后面显示了账号能够操作什么页面的权限。
(4)、因为账号、密码为字符串,复制的时候后面会带空格,所以要使用“RTRIM”和“AS”进行右去空格。

(5)、成功获取到数据后,执行全部存储语句,显示“命令已成功完成”,这时候在“存储过程”里就生成一个新的存储过程。

(6)、如果执行过存储语句后,选定“SELECT”再执行一次就出现错误,原因为存储过程已经创建了无法再创建新的,只要把“SELECT”换成“ALTER”(修改)就可以执行。
4.存储语句简易方式:
(1)、如果存储语句不熟悉不会写可以使用简易方式进行存储语句创建,在“BEGIN”下面鼠标右键,选择“在编辑器中设计查询”,把需要的表都添加进去,然后勾选出需要的数据名称,把表进行主外键连接,然后确定,这样自动创建的“存储语句”通过执行,查询出的数据和手写的存储语句查询结果一样的,这样可以用于项目的快速开发,但是需要学会存储语句的编写,所以尽量手动多写。

C#WPF 项目开发(一)(火车订票系统)相关推荐

  1. 火车时刻表C语言报告,终稿火车订票系统的设计与实现课程设计.doc最终版(范文1)...

    <火车订票系统的设计与实现课程设计.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)火车订票系统的设计与实现课程设计.doc(最终版)>相关文档资源请在帮帮文库(www ...

  2. springboot火车订票系统

    毕设设计项目网站:http://www.houxinhong.top/ springboot火车订票系统 这是在软件测试课程里面跟同学一起开发的一个用来学习软件测试的小系统,麻雀虽小,但五脏俱全,提供 ...

  3. 【Python】【项目模拟】模拟火车订票系统

    本项目代码基于python大作业--列车管理系统_丿灬慕容笑笑的博客-CSDN博客_python 车票管理系统 的代码,本人对其进行重新加工及充实.项目总体仍较为粗糙,后面还需继续完善. 部分项目界面 ...

  4. spring boot火车订票系统 毕业设计源码031012

    火车订票系统的设计与实现 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题. ...

  5. java计算机毕业设计火车订票系统(附源码、数据库)

    java计算机毕业设计火车订票系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  6. java计算机毕业设计火车订票系统源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计火车订票系统源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计火车订票系统源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开 ...

  7. 基于SSM的火车订票系统

    基于SSM的火车订票系统 火车订票系统 项目简介 功能简介 技术选型 数据库设计 代码结构 界面设计 代码获取 火车订票系统 项目简介 本项目为火车订票系统,主要分为管理员.代售网点.用户三大角色. ...

  8. JAVA JSP火车订票系统(JSP订票系统 JSP火车票预订系统)JSP火车票网上购票系统

    JSP火车订票系统(JSP订票系统 JSP火车票预订系统)JSP火车票网上购票系统 大家好,很高兴和大家分享Java项目和经验.不管同学们是出于什么需求.都希望各位计算机专业的同学有一个提高. 本系统 ...

  9. java编写火车订票系统_毕业设计(论文)-基于JavaWeb技术的火车订票系统.doc

    本科生毕业设计 题 目 基于JavaWeb技术的火车订票系统 姓 名 学 号 院 系 专 业 信息与计算科学 指导教师 20 年 月 教务处制 本科生毕业设计声明 本人郑重声明:所呈交的毕业设计,是本 ...

最新文章

  1. HDU1443(约瑟夫环问题)
  2. 关于比特币,人民日报发话了!
  3. Leetcode题目:Balanced Binary Tree
  4. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
  5. Spark没有读取HDFS文件的方法?那textFile是怎么读的?
  6. python入门系列:深入Python的set和dict
  7. python分段函数图像画法_我想用Python matplotlib 画一个这样类似的图像,需要用到分段函数。大佬帮帮这个小弟?...
  8. VC6.0 中的__asm语句
  9. PHP CURL模拟POST提交XML数据
  10. 专有网络 VPC > VPC与外部网络连接 > 连接VPC
  11. vscode如何自定义补全内容,自定义常用的快捷方式?
  12. 数据结构与算法 —— 动态数组
  13. 数据类产品设计和实现思路
  14. 植物大战僵尸辅助之重叠植物
  15. java compile方法_Java Pattern.compile函数的语法以及参数
  16. 如何显示密件抄送人员地址_什么是密件抄送,以及为什么不使用它会成为一个可怕的人...
  17. 为什么你的前端工作经验不值钱?
  18. HuaWei ❉ IPv4基本原理
  19. SpringBoot新项目配置
  20. 个人空间的编辑个人资料案例(简单介绍 仅供参考)

热门文章

  1. jquery+select+ajax实现时间可控的自动刷新
  2. 区块链日报@2019.1.9
  3. 笔记1—身份证排序(截取字符串,比较大小)
  4. web如何实现文档在线预览
  5. 微信小程序 新闻列表及详情页
  6. 汇编语言实验4-利用跳转指令构造循环
  7. 证书链校验 与 证书合并
  8. 域名和IP(Java)
  9. 如何完善Redis监控告警?
  10. RedisInsight:Redis监控工具部署(linux)