ASP.NET公交车管理系统的实现与设计

摘  要

随着经济的日益增长,信息化时代已经到来,生活中各种信息趋向数字化、清晰化。公交车作为现代城市生活中一种重要的交通工具,其数量增多,车型也不再单一,雇用的司机增多,这样使得公交车公司的车辆信息管理复杂化。在这样的背景下,提出了计算机管理的公交车管理系统,辅助公交车运营公司对车辆进行管理,实现公交车、公交线路和司机管理科学化,更合理的利用资源。

该系统主要根据实际的需求,以需求分析、系统的设计目标,并且重点进行系统功能模块的详细设计和实现,采用了Visual Studio .NET 2003开发平台和 SQL Server 2000数据库,实现了车辆信息管理、司机信息管理、线路信息管理和车辆分配线路管理等功能。在针对数据操作方面,主要通过存储过程的方式实现数据的添加、删除和查询等操作。通过系统测试,解决了公交车辆管理系统主要问题。

关键词 管理系统;数据库;存储过程

1.  编程环境的选择

微软公司的Visual Studio .NET 2003是Windows应用程序开发平台,该平台具有直观的开发界面、先进的程序设计思想,是目前最为广泛的、易学易用的面向对象的开发工具。VS.NET 2003提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。C#同时提供的一套完善的编译和调试系统,使得在开发过程中可以很好的解决开发过程中出现的一系列问题。同时在该平台下还提供了软件发布功能,使得开发、调试到发布可以一步完成。故而,这是实现该信息管理信息的一个较好选择。

2.  关系型数据库

SQL Server 2000是一种功能强大的数据库开发工具,数据库汇集了信息以供查询、存储和检索。它的优点在于强大的数据库引擎,它可以承受10000条以上的记录测试,而且数据库运行于服务器上,相对于本地数据库,可以明显的减少内存占用,提高运行速度和本机的利用效率。SQL数据库具有友好的管理界面——企业管理器,其中的视图可以直观的进行数据处理,同时支持直观的数据库设计,也可以通过词法分析器,使用SQL语句进行数据库的各种操作,包括数据库的建立,表的建立和修改等一系列操作。采用C/S模式的设计,可以更加合理的利用企业资源,使得数据集中在一台服务器上,从来节省了数据库管理的人力资源,也使得由于非专业人士的误操作,或者别的各种电脑意外而导致数据丢失,或者别的不必要损失,所以在数据库选择上采用了SQL Server 2000。

​​​​​​​3.  ADO.NET综述

ADO.NET是ADO的改进版本。ADO.NET是与C#和.NET Framework一起使用的类集的名称,用于以关系型的、面向表的格式访问数据[1]。ADO.NET集成到.NET Framework中,可以用于任何.NET语言,尤其是C#。这也是该管理系统采用C#程序语言的原因。

ADO.NET的作用与ADO(Active Data Objects)相同,提供易于使用的类集,以访问数据,ADO.NET的功能得到更新和增强,可以用于.NET编程环境。在使用SQL Server数据库时,通过SQL Server专用的内置.NET数据提供者可以获得最好的性能和对基础功能的最直接的访问。

​​​​​​​4.  逻辑设计

根据针对系统的需求分析,可以得到本系统对应的各实体以及实体之间的关系。其中包含有用户实体、司机实体、车辆实体、线路信息实体等。下面根据分析得出其中主要的E-R图,如图2和图3所示。

图2  司机实体与车辆实体E-R图

图3  车辆和线路E-R图

​​​​​​​5.1  登录模块

1.用户身份验证

输入:用户名和密码。

处理:

(1)用户登录窗体启动。

(2)输入用户名和密码。

(3)检索数据库中数据,是否有相应的用户名和密码。

(4)如果用户名和密码为空,或者错误,进行提示。

(5)如果输入的用户名和密码正确,则允许该用户进入系统。

(6)进入主控制台。

输出:主控制台。

2.用户登录模块的窗体设计

用户登录模块的窗体设计,如图4所示。

3.用户登录模块的主要代码

private void button1_Click(object sender, System.EventArgs e)

{

       DataAccess myAcc=new DataAccess();

       if(myAcc.userlogin(this.textBox1.Text.Trim(),

                     this.textBox2.Text.Trim())==1) {

              this.Visible=false;                      

Main newMain=new Main(this.textBox1.Text.Trim());

              newMain.Show();

       }

       else if(myAcc.userlogin(this.textBox1.Text.Trim(),"") == 0)

              MessageBox.Show("没有该用户!");

       else

       {

              MessageBox.Show("登录失败");

       }

}

private void button1_Click()鼠标事件用于实现在输入用户名和密码后,进入系统主控制界面的方法。DataAccess类是自定义的用于实现数据库访问的类。该方法中判断语句里调用了该类所声明的对象myAcc的方法userlogin(),该方法的具体实现代码如下所示:

public int userlogin(string username,string userpass)

{

       Database myDB=new Database();

       SqlParameter[] para={

       myDB.MakeInParam("@username",SqlDbType.NVarChar,50,username),

       myDB.MakeInParam("@userPass",SqlDbType.NVarChar,50,userpass)

        };

       return myDB.RunProc("spr_uerlogin",para);

}

该段代码展示了上文中所提到的存储过程的具体使用。

​​​​​​​5.2  主操作界面模块

1.主控制平台的窗体设计

主控制平台的窗体设计,如图5所示。

从界面上直观的向用户表明了在该系统下可以进行的一系列操作,包括新用户的注册,车辆信息的管理,司机信息的管理,线路信息的管理和车辆线路分配的管理。当用户选择相应的功能进行操作时,触发该按钮事件,则可以进入相应的功能界面进行相应的操作。

​​​​​​​5.3  系统用户注册模块

1.添加用户子模块

添加用户子模块负责系统的安全性,在该模块种只能增加新用户而不能修改、删除用户,这样是为了加强系统的安全性,保证了系统的恶意操作或误删除等情况出现。

(1)添加新用户功能的实现,并且设置用户的初始密码。

(2)功能模块实现的界面效果如图6所示。

2.该子模块功能主要代码

//用户名检测机制,保证用户名的唯一性。

private void button2_Click(object sender, System.EventArgs e)

{

       if(this.textBox1.Text.Trim()=="") {

              MessageBox.Show("用户名不能为空");

       }

       else if(checkuser()==1)

              MessageBox.Show("该用户名不存在,可以注册!");

       else {

              MessageBox.Show("该用户名存在,请重新录入新的用户名!");

       }

}

将新用户的信息写入数据库。通过自定义对象myAccc访问数据库,主要是由该对象调用存储过程来实现。

private void button1_Click(object sender, System.EventArgs e)

{

//checkuser()是自定义的方法,实现对用户名的检查判断。

       if(checkuser()==0) { 

              MessageBox.Show("该用户名存在,请重新录入新的用户名!");

              return ;

              }

自定义的regcheck()方法,根据该方法返回的值对不同的情况进行处理。

       if(regcheck()==1) {

              DataAccess myAcc=new DataAccess();

              int li_check=myAcc.uerReg(this.textBox1.Text.Trim(),

this.textBox2.Text.Trim(),

this.comboBox1.SelectedItem.ToString(),

this.textBox4.Text.Trim(),

this.textBox5.Text.Trim()

);

              if(li_check==1) {

                     MessageBox.Show("注册成功");

              }

       }

}

​​​​​​​5.4  车辆信息管理模块

1.车辆信息模块

该模块实现对车辆信息如、车牌号、颜色、座位数、是否无人售票和车辆品牌信息的录入和删除操作。该界面窗体效果如图7所示。

2.该功能模块实现的主要代码

该段代码在用户点击“所有”按时,触发一个事件,通过调用allcarinfo()方法来返回数据库中的数据, 然后使用dataGrid控件将数据显示出来。

private void button2_Click(object sender, System.EventArgs e)

{

DataAccess myAcc = new DataAccess();

DataSet mySet = new DataSet();

mySet=myAcc.allcarinfo();

this.dataGrid1.DataSource = mySet.Tables[0];

}

该段代码实现用户增加车辆信息后完成保存功能的实现。其中针对某些可能出错的地方做出了人性化的处理,以便用户更正和做出相应的处理。

​​​​​​​5.5  司机信息管理模块

1.司机信息管理模块

通过该窗体,输入司机姓名、身份证、编号和驾驶编号等等司机的个人资料,实现添加司机信息的功能,该功能模块窗体的效果如图8所示。

2.实现该功能模块的主要代码

该事件实现将合法的司机信息写入数据库。同样通过自定义类的对象来访问数据库,并通过调用存储过程实现完成操作。

private void button1_Click(object sender, System.EventArgs e)

{

       if(AddDirverscheck()==1) {

              DataAccess myAcc=new DataAccess();

              int li_check=

                     myAcc.AddDirvers(this.tb_name.Text.Trim(), this.tb_Number.Text.Trim(),

                                          this.lab_photo.Text.Trim(), this.tb_Idnumber.Text.Trim(),

                                          this.tb_phone.Text.Trim(), this.tb_address.Text.Trim(),                                                  his.tb_DirverNumber.Text.Trim() );

              if(li_check==1) {

                     string ls_D=System.Environment.CurrentDirectory;

                     MessageBox.Show("操作成功");

                     int li_counts=this.Controls.Count;

                     for(int i=0;i<li_counts;i++) {

                     if(this.Controls[i].GetType().ToString()=="System.Windows.Forms.TextBox")                            this.Controls[i].Text=""; }

              }

       }

 }

​​​​​​​5.6  线路信息管理模块

1.在该功能模块中实现添加线路相关的信息,主要输入的信息包括线路编号、线路名称、发车时间和收车时间等,具体的窗体效果见下页图9所示。

2.实现该功能的主要代码

CheckReg()是一个用于实现检查用户注册信息的私有方法,该方法通过嵌入SQL语句来检索数据库信息,以核对用户信息的有效性。

private int CheckReg()

{

       DataSet mySet=new DataSet();

       string ls_query= "select * from t_lineInfo where LineName='"+ this.tb_name.Text.Trim()+"' or LineCode='"+ this.tb_Code.Text.Trim()+"'";

       Database myDB=new Database();

       mySet=myDB.SQLQuery(ls_query);

       if(mySet.Tables[0].DefaultView.Count==0) return 0;

       else

return 1;

}

​​​​​​​5.7  车辆分配线路管理模块

1.车辆分配线路管理功能

公交车最终要与固定的某条线路相匹配,把具体的每一辆车分配到设置好的线路上。这样,汽车,司机,线路才能完成有机的联系,形成一个整体。对于管理者来说,能够通过该系统所提供的功能从宏观上把握车辆的运行情况,如图10所示。

2.实现功能的主要代码

鼠标单击“确定”事件时,将进行的操作。首先根据整型变量li_LineID和li_CarID的值来判断是否选择了车辆或者某条线路;若没有,则弹出一消息窗口,给出提示信息。

private void button1_Click(object sender, System.EventArgs e)

{

       if(li_LineID==0 || li_CarID==0 ){

              MessageBox.Show("车辆或者线路没有选择,请选择!");

              return;

       }

       DataAccess myAcc=new DataAccess();

       if(myAcc.CheckLinByCarID(li_CarID)==0){

              MessageBox.Show("该汽车已经分配线路");

       }

       else{

              int li_flag=0;

              if(this.checkBox1.Checked==true)

                     li_flag=1;

              else

                     li_flag=0;

              if(myAcc.InsertCarLine(li_CarID,li_LineID,li_flag)>0)

                     MessageBox.Show("保存成功!");

       }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/544043.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

架构师系列-搜索引擎ElasticSearch(四)- 高级查询

ES查询 matchAll 脚本方式 该方式可以通过kabana、curl、elasticsearch-head&#xff08;纯前端&#xff09;去操作 # 默认情况下&#xff0c;es一次展示10条数据,通过from和size来控制分页 # 查询结果详解 GET goods/_search {"query": {"match_all":…

计算机网络 实验指导 实验17

实验17 配置无线网络实验 1.实验拓扑图 Table PC0 和 Table PC1 最开始可能还会连Access Point0&#xff0c;无影响后面会改 名称接口IP地址网关地址Router0fa0/0210.10.10.1fa0/1220.10.10.2Tablet PC0210.10.10.11Tablet PC1210.10.10.12Wireless互联网220.10.10.2LAN192.16…

JavaScript(六)-高级篇

文章目录 作用域局部作用域全局作用域作用域链JS垃圾回收机制闭包变量提升 函数进阶函数提升函数参数动态参数多余参数 箭头函数 解构赋值数组解构对象解构 遍历数组forEach方法&#xff08;重点&#xff09;构造函数深入对象创建对象的三种方式构造函数实例成员 & 静态成员…

舒欣上门预约系统源码-按摩预约/家政预约全行业适用-小程序/h5/app

上门预约或者到店预约均可&#xff0c;家政&#xff0c;按摩&#xff0c;等等上门类行业均可适用。&#xff08;后台的技师及前台技师这两个字是可以更改的&#xff0c;例如改成家政老师&#xff0c;保洁&#xff0c;等等&#xff09; 视频教程是演示搭建的小程序端&#xff0c…

Leetcode 235. 二叉搜索树的最近公共祖先

心路历程&#xff1a; 这道题可以完全按照二叉树的公共祖先来做&#xff0c;但是由于题目中给了二分搜索树的条件&#xff0c;因此可以通过值的大小简化左右子树的递归搜索。 解法一&#xff1a;按照二分搜索树的性质 # Definition for a binary tree node. # class TreeNod…

【1000个GDB技巧之】如何在远端服务器打开通过vscode动态观测Linux内核实战篇?

Step: 配置ssh的服务端host &#xff08;也可以直接在vscode中配置&#xff0c;忽略&#xff09; 主要步骤&#xff1a;在~/.ssh/config中添加服务端的host&#xff0c;以便vscode的remote中能够登录 详细配置过程参考兄弟篇文章&#xff1a;ssh config如何配置用host名替代ro…

文献阅读:LESS: Selecting Influential Data for Targeted Instruction Tuning

文献阅读&#xff1a;LESS: Selecting Influential Data for Targeted Instruction Tuning 1. 文章简介2. 方法介绍 1. Overview2. 原理说明 1. SGD上的定义2. Adam上的定义 3. 具体实现 1. Overview1. LoRA使用2. 数据选择3. LESS-T 3. 实验考察 & 结论 1. 实验设计2. 主…

Jmeter三个常用组件

Jmeter三个常用组件 一、线程组二、 HTTP请求三、查看结果树 线程组&#xff1a;jmeter是基于线程来运行的&#xff0c;线程组主要用来管理线程的数量&#xff0c;线程的执行策略。 HTTP请求&#xff1a;HTTP请求是jmeter接口测试的核心部分&#xff0c;主要使用HTTP取样器来发…

PyQt5

Qt是基于C实现的GUI,而PyQt就是用python调用Qt. PyQt中有很多的功能模块,开发最常用的模块功能主要有3个 1) QtCore:包含核心的非GHI的功能,主要和时间,文件与文件夹,各种数据,流,URLs,进程与线程一起使用 2) QtGUi:包含窗口系统,事件处理,2D图像,基本绘画,字体和文字类 3)…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU使用containerd部署K8S 1.26.15集群(一主多从)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本&#xff0c;出现了一个问题&#xff0c;就是在pod中访问百度网站&#xff0c;大…

【opencv】示例-stiching_detailed.cpp 使用OpenCV进行图像拼接的整体流程

#include <iostream> // 引入输入输出流库 #include <fstream> // 引入文件流库&#xff0c;用于文件输入输出 #include <string> // 引入字符串库 #include "opencv2/opencv_modules.hpp" // 引入OpenCV模块 #include <opencv2/core/utility.h…

【微信小程序——开发DAY4(黑马程序员课程)】

学习目标 自定义小程序组件自定义组件&#xff08;1.&#xff09;创建自定义组件文件夹&#xff08;2.&#xff09;引用自定义组件&#xff08;3.&#xff09;组件和页面的区别&#xff08;4.&#xff09;自定义组件的隔离性——自定义组件不影响小程序的样式——自定义组件也只…

用通俗易懂的方式讲解:大模型高级 RAG 检索策略之递归检索

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大模…

LinkSage:基于 GNN 的 Pinterest理解

目录 一、背景二、动机和介绍三、技术设计3.1 数据3.2 图3.3 特征3.4 型 四、主要创新4.1 多维表示4.2 XSage的兼容性4.3 增量服务 五、离线结果5.1 召回5.2 分数分布5.3 峰度 六、在线结果6.1 面向用户的表面6.2 Ads 七、总结 LinkSage&#xff1a;基于图神经网络的Pinterest…

微服务之LoadBalancer负载均衡服务调用

一、概述 1.1什么是负载均衡 LB&#xff0c;既负载均衡&#xff08;Load Balancer&#xff09;,是高并发、高可用系统必不可少的关键组件&#xff0c;其目标是尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 负载均衡的主要作用 高并发…

IDEA阅读Java源码 SimpleDateFormat

IDEA阅读Java源码 SimpleDateFormat 文章目录 IDEA阅读Java源码 SimpleDateFormat一、阅读的代码二、IDEA操作2.1 标记断点2.2 启用Debug2.3 按键区分2.4 强制进入方法2.5 进入指定方法2.6 多方法进入指定方法2.7 进入正确的方法2.8 真正的方法体实现 三、SimpleDateFormat源码…

网络篇08 | 运输层 tcp

网络篇08 | 运输层 tcp 01 简介1&#xff09;运输层的作用2&#xff09;与应用层的关系3&#xff09;两个协议的应用场景4&#xff09;传输的数据单位 02 功能特性1&#xff09;面向连接2&#xff09;停止等待协议3&#xff09;流水线传输协议4&#xff09;滑动窗口机制5&#…

011、Python+fastapi,第一个后台管理项目走向第11步:建立python+fastapi项目,简单测试一下

一、说明 本文章就是记录自己的学习过程&#xff0c;如果有用您可以参考&#xff0c;没用你就略过&#xff0c;没有好与不好之分&#xff0c;今天主要是参考了gitee上的一些项目&#xff0c;一步一步的往后i建立 对于学习来说&#xff0c;如果您有java c等经验&#xff0c;py…

Redis的哨兵机制

引入&#xff1a; 主从复制最大的问题还是在主节点上&#xff0c;主节点挂了&#xff0c;从节点就迷茫了&#xff0c;虽然能够提供读操作&#xff0c;但是从节点不能自动生成主节点&#xff0c;不能替换原有主节点对应的角色&#xff1b;此时&#xff0c;就需要程序员/运维手工…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器&#xff1a;主要用于HDMI线的延长&#xff0c;有HDMI对接头方式延长&#xff0c;或HDMI公头加HDMI母头的HDMI线进行延长&#xff0c;或通过网线方式延长&#xff0c;早期为双网线&#xff0c;目前已发展为单网线&#xff0c;需要注意的是&#xff0…