城市公交查询系统

文档

代码压缩包

 

摘要

出行是人类生活的基本活动之一。城市的快速发展、科技的发展以及环保意识的增强,对城市公共交通的发展趋势的快速性、舒适性、便捷性、环保等方面提出更高要求。先进的信息技术也促进了公共交通技术的发展,从而为乘客提供了良好的出行条件,并且能够逐渐满足市民出行多样化的交通需求。为城市的进-步发展提供便捷条件,对于城市公共交通来说,必然要优先发展公交,因此,公共交通的地位也不断得到提升。
  2005年以来,中国先后印发了关于优先发展城市公共交通的意见等系列文件正式确立了公交优先发展的战略思想,为优先发展城市公共交通指明了方向,有力推动了中国城市公交事业的发展。截止2009年底到全国公共汽电车运营线路网总长度28.9万公里公交专用车道里程达7452公里,10余个城市开通运营快速公交路线,公交运输总量达到780亿人次。随着时代发展,需要更便捷的生活,因此乘客需要实时的查询公交系统的信息以便出行,在此背景下,本文最主要采用vs2010来实现公交查询系统的设计采用SQLServer2008数据库来实现系统所需的数据需求。
  在公交查询系统设计过程中考虑用户查询的模块为:线路查询、站点查询、换乘查询,管理员模块则应该包括对数据增、删、查、改等操作,对于数据库设计应该体现出数据之间明确的联系关系。

关键词:数据库、vs2010、公交查询、管理员

 

 

软件系统设计实习报告

 

第1章 绪论

 

1.1应用背景​

随着交通工具的不断革新,距离已经不再是人们足迹的羁绊,庞大复杂的交通网几 乎覆盖了世界的每一个角落,使人们可以到达任何一个想去的地方,然而当人们面对交 通网时却会因为它本身的复杂而显得不知所措,从而感觉到出行的麻烦。

在过去,当人们在一个不熟悉的城市时,或不清楚本城市的公交线路时,只能采用 打电话咨询,看交通地图,向熟人打听等传统方式查询公交信息,这样会浪费大家很多 时间、精力和财力,而且得到的信息也不一定是可靠的。这是还没有公交线路查询系统 时所出现的情况。

在互联网普及的今天,交通信息服务的电子化、网络化是已经是必然的趋势,而提 供良好的公交服务是建设和谐社会的基本要求。以信息化为基础,促进乘客、车辆、站 点设施以及交通环境等要素之间的良性互动,能有效推动公交系统建设。为了能够为市 民特别是为外来旅游、出差、就医、求职等急需了解本地的公交路线的人提供高效、快 捷的公交信息查询,让他们可以方便的在网络上得到自己所需要的各种相关信息,以便 减少各种可能产生的不必要的交通流量,提高公交的运作效率,节约出行时间。因此, 开发一个供人们快速查找公交线路的网络程序是势在必行的。

 

 

1.2发展前景

随着公交查询系统的不断发展完善,各种新技术的不断涌现,未来的公交查询系统 将基于B/S架构,通过浏览器查询,通过计算机网络全面联网,实现中心控制、自动更 新、异地查询等功能,同时可添加电话服务、语音服务、在线服务等功能,帮助用户更 好的使用公交查询系统。还可以开发手机版本的公交线路查询系统,使用手机上网的用户可以轻松的随时随地进行公交查询。

 

     

1.3系统目标

随着科学技术的迅猛发展,计算机已经得到了广泛的应用。几乎各行各业都有关于 计算机的使用,这使得计算机已成为社会中普遍存在的事物。由于计算机的使用,使得 人们在管理、应用及服务等各个领域使用数据方面变得更加简洁,更加方便,大大提高 了工作效率,产生了以计算机为主体,以人为辅助的局面。在此所设计的公交车查询系 统就是为了方便人员在数据查询方面的操作,使得他们在日常生活中都会达到事半功倍 的效果,减轻了人力的负担,方便了数据的存储,增加了安全性。本系统能够使用户 简单的查询出他们自己想要的车次经过哪些站点,在哪一站可以转乘,然后继续换乘哪 路车;也可以预先知道可以通过哪些车次可以到达目的地

 

1.4系统开发环境及简介

系统开发环境分为两部分 1. 硬件部分、2. 软件部分

硬件部分:一般电脑配置即可

软件部分:SQL Server 2008 数据库、Microsoft Visual Studio 2010

(一)数据库采用SQL Server 2008数据库
数据库可以理解为存储数据的仓库。他是按照一定的组织方式存储的相互有关的数据的集合,这些数据不仅彼此关联而且可以动态变化。它具有以下几个特点:

1、数据结构化
2、数据共享
3、数据的独立性
4.数据的一致性与正确性
在数据库中最核心的一部分为DBMS即数据库管理系统他是使用户能够实现数据加工的数据管理系统,为用户提供以下几个功能:
1、建库功能
2、数据的操作功能:实现对数据的增、删、查、改等功能“]
(二)编程软件采用Microsoft Visual Studio 2010
Visual Studio是Window平台应用程序的开发环境,它是建立在IDE(统- -开发环境)的基础之上,可用于开发多种不同类型的应用程序。

 

 

 

第2章 需求分析及结构设计

2.1需求分析概述

 需求分析是软件定义时期的最后一个阶段,需求分析指的是在建立-一个新的或改变一个现存的电脑,系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。

2.1.1需求分析的基本任务的一个阶段

   它的基本任务是准确地回答“系统必须做什么?”这个问题。需求分析的任务还不是确定系统怎样完成他的工作,而仅仅是确定系统必须完成那些工作,也就是对目标系统提出完整、准确、清晰、具体的要求“1。具体说需求分析的任务有以下几个方面:(一)、确定对系统的综合要求一-- 通常对软件系统有下述几个方面的综合要求:
1、功能需求:这方面的需求制定系统必须提供的服务。通过需求分析应该划分出系统必须完成的所有功能
2、性能需求:性能需求指定系统必须满足的定时约束或容量约束,通常包括速度(响应时间、信息量速率)"]
3、可靠性和可用性需求:可靠性需求定量地指定系统是的可靠性,可用性与可靠性密切相关,它量化了用户可以使用系统的程度,例如:“在任何时候主机或备份机上的机场雷达系统应该至少有一个是可以用的,而且在一个月内在任何一台计算机上盖系统不可以用的时间不能超过总时间的2%。
4、出错处理需求.5、接口需求
6、约束
7、逆向需求
8、将来可能提出的要求

 

 

2.2 E-R图

2.2.1 E-R图概述

  为了把用户的数据要求清楚、准确的描述出来,系统分析员通常建立一个概念性的数据模型。概念性数据模型是一种面向问题的数据模型,是按照用户的观点对数据建立的模型。它描述了从用户角度看到的数据,它反映了用户的显示环境,而且与在软件系统中的实现方法无关

2.2.2 公交E-R图

 

 图2-1 公交E-R图

 

 

 

 

 

 

2.3层次方框图

公交查询系统层次方框图如下:

          

图2-2 公交查询系统层次方框图

2.4 数据流图

 

图2-3公交DFD

 

2.5系统功能模块划分

  一个系统可以看成是由多个小模块组成,这些小模块之间应该具有高内聚、低耦合的特点:
  耦合:是对一个软件结构内不同模块之间互联程度的衡量。而耦合程度取决于模块时间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合包括以下几种: 1、数据耦合2、控制耦合3、特征耦合4、公共耦合。
  内聚:内聚标志着一个模块内各个元素之间的彼此结合程度。内聚包括以下几种:1、功能内聚2、顺序内聚3、通信内聚4、过程内聚5、时间内聚6、逻辑内聚7.偶然内聚。
公交查询系统可以看成是由两个大模块组成即:用户查询模块和管理员模块。

 

2.5.1用户查询模块


  用户查询模块主要供用户使用其主要完成的对公交信息的查询,这些查询包括公交站点、公交线路以及公交站点到站点的额查询(公交换乘插叙)并将查询的结果通过一定的方式显示出来,并且需要制定一个“选择框”以便用户进行模糊查询。

2.5.2管理员模块

  管理员在公交查询系统中拥有最高的权限,它能够对公交信息进行增、删、查、改等一系列工作,当然对于管理员模块需要进行身份验证,当正确以后才能进行操作。

 

 

 

第3章 详细设计

3.1系统详细设计                 

系统的详细设计阶段其根本目标是确定应该怎样具体的实现所要求的系统,也就是经过这个阶段的设计工作,应该得到对系统的准确描述,从而在编码阶段可以把整个描述直接翻译为用vs2010编写的程序代码,在这-阶段不是实现软件的具体代码编写

3.1.1系统总体功能设计

系统功能详细设计主要表述系统的功能架构如图3-1:

 

图3-1 系统功能架构

3.1.2 系统各功能模块详细设计

  对于用户模块来说就是完成对信息的查询功能并返回值如图3.1.2.1,对于管理员来说不仅可以查询公交的信息还可以对公交信息进行增、删、查、改等工作如图3-2、图3-3所示:

图3-2 功能图                              图3-3 功能图

 

 

 

 

3.2数据库设计

 

数据库设计是指对于一个结定的应用环境,构造(设计)优化的数据库模和物理结构,并提此建过数据库及其应用系统,使之能有效地存储和管理划好,满足各种用户的应用需求,包括数据管理需求和数据操作需求。

数据库设计的好坏直接期响到系统的功能否实现数据操作是否简单。设计段好数提库很容易使用:并且前够保护数据的有效,而设计不好的数据库虽然能够姓挥相当的作用且是可能会导致数据的无效、错误或者丢失。

 

3.2.1数据库设计步骤

 

建立数据库的步骤:

数据库系统的生存期可划分为:需求分析、概念结构设计、逻辑结构设计、物

理结构设计、实施和运行维护七个阶段,而需求分析和概念结构设计可以独立于任 何数据库管理系统而进行。逻辑结构设计和物理结构设计与选用的​DBMS (database

management system)密切相关。我们通常把前五个阶段称为“数据库的分析和设计阶 段”后两个阶段称为“数据库的实现与运行阶段。 ”111

(1)需求分析:在这一步需要做的主要工作是收集数据库所有的信息内容和处理 要求,并对其进行分析。

(2)概念结构设计:经过需求分析后,在这个阶段把用户的需求加以解释,并用 概念模型(概念模型是现实世界到信息世界的抽象,具有独立于具体的数据库实现的优 点,因此它是用户和数据库设计人员之间进行交流的语言。)表达出来.

(3)逻辑结构设计:这个阶段的主要任务是利用数据库管理系统所提供的工具将信息世界中的概念模型映射为计算机世界中为数据库管理系统所支持的数据模型,将其用数据描述语言表达出来。

(4)物理结构设计:数据库的物理设计是指对数据库存储结构和存储路径的设计,即将数据库的逻辑模型在实际的物理存储设备上加以实现,建立一个具有良好性能的数据库。

(5)数据库实施:数据库实施和运行维护阶段的主要工作是:装入数据,投入使 用,同时根据数据库运行中所产生的问题以及用户提出的需求不断完善和提高数据库的 功能以及性能。

3.3公交数据库详细设计

公交数据库的设计主要包括了公交的站点数据库设计、公交线路的设计、城市的设 计、和其他的一些设计,在统一建立好一个名为“公交数据库”的数据库后分别建立各 个数据的分表分别对这些表进行设计。

3.3.1公交站点的数据库设计

公交站点的设计如图表格3-1所示:

 

                            表格3-1 公交站点设计

3.3.2公交线路的数据库设计

公交数据线路的设计如图表格3-2公交线路字段表所示:

 

表格3-2公交数据线路设计

 

 

 

 

3.3.3公交线路信息数据库设计

公交数据线路信息的设计如表格3-3公交线路信息字段表所示

 

表格3-3公交数据线路信息

 

 

3.3.5公交管理员信息数据库设计

公交管理员数据库的设计如表格 3-4管理员字段表所示:

 

表格3-5 管理员字段表

3.3.6 数据库关系图

通过上面的分析我们可以得出数据表 dbo、BusInfo.dbo、BusStation.dbo 之间存在疑点的关系,我们可将其关系画为如 图 3-9 关系图所示,通过这张图可以清晰的反应四张数据表之间的对应关系

 

图3-4 关系图

 

 

第4章 实现

 

4.1 系统界面实现

系统设计是新系统的物理设计阶段。根据系统分析阶段所确定的新系统的逻辑模型、功能要求,在用户提供的环境条件下,设计出一个能在计算机网络环境上实施的方案,即建立新系统的物理模型。对于公交查询系统主要涉及两个方面: 1、用户功能模块设计 2、系统管理员模块设计 ,

 

                         图4-1 系统界面

 

4.2用户功能模块实现

用户主界面是供用户进行数据的一系列操作所使用的, 其界面至少包含站点、 线路、换乘查询等部分。最终设计的界面如图

 

 图4-2 用户主界面

4.2.1 线路查询

 

对于一个公交查询系统, 在公交线路的查询中通常会知道某条线路或者是某条线路的部分名称,来查询这条线路所经过的站点名称,这时线路查询模块则会根据查询功能将所有的带有所输入数字的公交线路列,在单击查询后将结果列举出来(如图 4-3 公交线路查询结果)

 

 图4-3 线路查询

void 公交路线查询ToolStripMenuItemClick(object sender, EventArgs e)
        {
            pictureBox1.Visible=false;
            
            panel公交站查询.Visible=false;
            panel公交路线.Visible=true;
            comboBox路线查询.Text="";
            comboBox路线查询.Items.Clear();
            string sql = "select distinct BusLine from BusStation ";//order by  BusLine asc";
            SqlDataReader dr = DataConnection.GetSqlDataReader(sql);
            while (dr.Read())
            {
                comboBox路线查询.Items.Add(dr["BusLine"]);
            }
            dr.Close();
        }

4.2.4 公交站点查询

 

在公交站点的查询中通常会知道某个站点的全部或者是某个站点的部分名称来查询经过这个站点的所有的线路,这时站点查询模块则会根据模糊查询功能将所有的带有“净水厂”的公交站点数据列举出来供用户选择(如图4-4站点显示),在单击查.询后将结果列举出来.

 

图4-4 站点查询

void公交换乘查询ToolStripMenuItemClick(object sender, EventArgs e)
        {
            
            panel公交路线.Visible=false;
            panel公交站查询.Visible=true;
            
            string sql = "select distinct BusLine from BusStation order by  BusLine asc";
            SqlDataReader dr= DataConnection.GetSqlDataReader(sql);
            while (dr.Read())
            {
                comboBox路线查询.Items.Add(dr["BusLine"]);
            }
            
        }
        

4.3 管理员功能模块

 

对于公交查询系统来说,公交线路、站点等信息不是一成不变的,对于用户来说过时的公交线路、站点信息没有多大的用处。因此需要进行数据的实时更新,即对数据的操作实现增删查改功能,使得软件的查询具有实际的意义方便人们的出行。当然对于数

据的更新并不是所有的人群都可以而是一些固定的人群即在公交查询数据库中的表 “admin”中存在的人才可以进行更改,以防止数据被乱改等现象 ,这时就需要设计管理员模块。其模块可以细分为以下几个小模块:

1、管理员登录模块

2、信息修改模块

3、信息增加模块

4、信息删除模块

当然系统管理员还可以查询数据,其查询模块和用户的查询模块处于同一位置,即

管理员的查询模块即为用户的查询模块。

 

4.3.1 系统管理员登陆界面设计

 

登陆界面设计的意义在于防止外来人员进入到修改界面中修改数据造成数据的破坏,首先在公交系统设计的主页面中添加一个新的窗体既为管理员的登陆窗体,在登陆窗体中分别添加按钮(确定按钮、清空按钮——如果填写错误则可以清空输入的内容、取消按钮)、标签(用于标注用户名和密码) 、文本(输入数据使用)如图 4-5 管理员登录所示:

 

图4-5 登陆界面

void Button确定Click(object sender, EventArgs e)
        {
            if (textBox用户名.Text != "")
            {
                if (textBox密码.Text != "")
                {
                    
                    DataConnection.getConn();
                    string id = textBox用户名.Text.Trim();
                    string pwd = textBox密码.Text.Trim();
                    string sql = "select count(*) from qadmin where adusers='" + id + "' and adpwd='" + pwd + "'";
        int state = DataConnection.GetCountInfoBySql(sql);
                    if (state == 0 || state > 1)
                    {
                        MessageBox.Show("用户名或密码错误!!!");

                    }
                    else
                    {
                   管理员操作界面 f2 = new 管理员操作界面();
                        f2.Show();
                        this.Hide();
                    }
                    DataConnection.CloseConn();
                }
                else
                {
                    MessageBox.Show("密码为空!!!请输入....");
                }
            }
            else
            {
                MessageBox.Show("用户名为空!!!请输入....");
            }
        }
        
        void Button清空Click(object sender, EventArgs e)
        {
            textBox密码.Text="";
            textBox用户名.Text="";
        }
        
        void Button取消Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        
        void TextBox密码TextChanged(object sender, EventArgs e)
        {
            textBox密码.PasswordChar='*';
        }

 

4.3.2 添加路线和站点信息

 

在上一步中当我们输入正确的用户名和密码之后就可以进入到系统管理员的操作界面,对于“添加路线和站点”界面设计如图 4-6 信息增加界面:

 

图4-6 信息增加界面

 

 

void 增加线路和站点信息ToolStripMenuItemClick(object sender, EventArgs e)
        {
            label公交路线.Text="公交路线信息增加:";
            label公交站点.Text="公交站点增加:";
            label公交线路信息.Text="公交线路信息增加:";
            button修改1.Visible=false;
            button公交线路信息.Text ="增加";
            button修改2.Visible=false;
            panel管理员.Visible=true;
            textBoxLineCode.Text="";
            textBoxStart.Text="";
            textBoxEnd.Text="";
            textBoxBusInfoId.Text="";
            textBoxStation.Text="";
            textBoxStationIndex.Text="";
            textBoxBusLineID.Text="";
            textBoxBusInfoIndex.Text="";
            textBoxFare.Text="";
            textBoxSTime.Text="";
            textBoxETime.Text="";
            textBoxDistance.Text="";

        }
        void Button公交线路信息Click(object sender, EventArgs e)
        {
            if(button公交线路信息.Text=="修改")
            {string sql="delete from BusStation where Station='"+textBoxStation.Text+"' and BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                sql="delete frome BusInfo where BusLine='"+textBoxLineCode+"'";
                DataConnection.UpdateDate(sql);
                sql="insert into BusInfo(BusLine,StartTime,EndTime,DepartureStation,TerminateStation,Fare,Distance) values ('"+textBoxLineCode.Text+"','"+textBoxSTime.Text+"','"+textBoxETime.Text+"','"+textBoxStart.Text+"','"+textBoxEnd.Text+"','"+textBoxFare.Text+"','"+textBoxDistance.Text+"')";
                DataConnection.UpdateDate(sql);
                
            }
            else if(button公交线路信息.Text=="删除")
            {
                string sql="delete from BusStation where Station='"+textBoxStation.Text+"' and BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                 //sql="delete from BusInfo where BusLine='"+textBoxLineCode.Text+"'";
                //DataConnection.UpdateDate(sql);
            }
            else {
        
                string sql="insert into BusInfo(BusLine,StartTime,EndTime,DepartureStation,TerminateStation,Fare,Distance) values ('"+textBoxLineCode.Text+"','"+textBoxSTime.Text+"','"+textBoxETime.Text+"','"+textBoxStart.Text+"','"+textBoxEnd.Text+"','"+textBoxFare.Text+"','"+textBoxDistance.Text+"')";
                DataConnection.UpdateDate(sql);  }  }
         
4.3.3 删除线路和站点

 

同理对于系统的删除界面进行如图 4-7 删除界面的界面设置:

 

图4-7 删除界面

if(button公交线路信息.Text=="删除")
   {
                
string sql="delete from BusInfo where BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                sql="delete from BusStation where BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
            }

4.3.4 修改路线站点信息

 

对于一个完整的管理员模块还需要具备修改数据信息的功能, “修改路线站点信息”界面和增加界面大体一致如图 4-8 修改界面所示

 

图4-7 修改界面

void Button修改2Click(object sender, EventArgs e)
        {
            if(button公交线路信息.Text=="修改")
            { 
                string sql="update  BusInfo set Fare='"+textBoxFare.Text+"' where BusLine='"+textBoxBusLineID.Text+"'";
                
                DataConnection.UpdateDate(sql);
            }}
            

2

 

 

 

 

 

 

 

软件系统设计实习报告

 

参考文献

[1]郭海智,郭亮. 基于项目实践的ASP.NET课程教学改革探索[J]. 信息记录材料,2018,19(02):247-248.


 [2]王鲁米,曹永桃,黄虎文. ObjectARX.NET技术在地下管网属性管理中的应用[J]. 地理空间信息,2018,16(01):104-106+9.


 [3]宋宇辉,林春梅. 基于ASP.NET的高校教代会提案系统的研究与实现[J]. 信息与电脑(理论版),2018(01):101-103.


 [4]刘娟. 基于.NET的小区物业管理系统设计与实现[J]. 无线互联科技,2018,15(01):130-131.


 [5]李兴瑞. 《基于.NET的批量标准查新程序的设计与实现》[J]. 办公自动化,2018,23(01):35-37+29.

 

[6]赵福英,倪俊芳. 基于Visual C#.NET绗缝机智能控制软件系统的研发[J]. 现代纺织技术,2018,26(02):85-89.

 

 

附录2—实现代码

用户界面操作关键代码:

Program DataConnection =new Program();
        
public MainForm()
{
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            DataConnection.getConn();
            InitializeComponent();
            pictureBox1.Visible=true;
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
}

 

void 公交站点查询ToolStripMenuItemClick(object sender, EventArgs e)
        {
            panel公交路线.Visible=false;
            pictureBox1.Visible=false;
            panel公交站查询.Visible=true;
            comboBox站点查询.Text="";
            comboBox站点查询.Items.Clear();
            string sql = "select distinct Station from BusStation ";
            SqlDataReader dr = DataConnection.GetSqlDataReader(sql);
            while (dr.Read())
            {
                comboBox站点查询.Items.Add(dr["Station"]);
            }
            dr.Close();
        }

void 公交路线查询ToolStripMenuItemClick(object sender, EventArgs e)
        {
            pictureBox1.Visible=false;
            
            panel公交站查询.Visible=false;
            panel公交路线.Visible=true;
            comboBox路线查询.Text="";
            comboBox路线查询.Items.Clear();
            string sql = "select distinct BusLine from BusStation ";//order by  BusLine asc";
            SqlDataReader dr = DataConnection.GetSqlDataReader(sql);
            while (dr.Read())
            {
                comboBox路线查询.Items.Add(dr["BusLine"]);
            }
            dr.Close();
        }
        

void 公交换乘查询ToolStripMenuItemClick(object sender, EventArgs e)
        {
            
            panel公交路线.Visible=false;
            panel公交站查询.Visible=true;
            
            string sql = "select distinct BusLine from BusStation order by  BusLine asc";
            SqlDataReader dr = DataConnection.GetSqlDataReader(sql);
            while (dr.Read())
            {
                comboBox路线查询.Items.Add(dr["BusLine"]);
            }
            
        }

 

void Button站点查询Click(object sender, EventArgs e)
        {
            string station = comboBox站点查询.Text;
            if(station!="")
            {    
            string sql = "select Station,BusLine from BusStation where Station = '"+station+"' order by BusLine asc";
            dataGridView站点查询.DataSource = DataConnection.GetDataSuoce(sql).Tables[0];
            }
        }
        

 

void Button路线查询Click(object sender, EventArgs e)
        {
            string BusLine = comboBox路线查询.Text;
            if(BusLine!="")
            {    
            string sql = "select Station,BusLine,BusOrder from BusStation  where BusLine ='"+BusLine+"' order by len(BusOrder)";
            dataGridView路线查询.DataSource = DataConnection.GetDataSuoce(sql).Tables[0];
            }
        }
        

void Panel公交换乘Paint(object sender, PaintEventArgs e)
        {
            
        }
        
void ButtonmanagerClick(object sender, EventArgs e)
        {
            管理员登录界面 f=new 管理员登录界面();
            f.Show();
            this.Hide();
            
        }

 

系统管理员相关操作关键代码:

 

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace gongjiao
{
    /// <summary>
    /// Description of 管理员操作.
    /// </summary>
    public partial class 管理员操作界面 : Form
    {

Program DataConnection=new Program();

public 管理员登录界面()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
            
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        
void Button确定Click(object sender, EventArgs e)
        {
            if (textBox用户名.Text != "")
            {
                if (textBox密码.Text != "")
                {
                    
                    DataConnection.getConn();
                    string id = textBox用户名.Text.Trim();
                    string pwd = textBox密码.Text.Trim();
                    string sql = "select count(*) from qadmin where adusers='" + id + "' and adpwd='" + pwd + "'";
                    int state = DataConnection.GetCountInfoBySql(sql);
                    if (state == 0 || state > 1)
                    {
                        MessageBox.Show("用户名或密码错误!!!");

                    }
                    else
                    {
                        管理员操作界面 f2 = new 管理员操作界面();
                        f2.Show();
                        this.Hide();
                    }
                    DataConnection.CloseConn();
                }
                else
                {
                    MessageBox.Show("密码为空!!!请输入....");
                }
            }
            else
            {
                MessageBox.Show("用户名为空!!!请输入....");
            }
        }
        
void Button清空Click(object sender, EventArgs e)
        {
            textBox密码.Text="";
            textBox用户名.Text="";
        }
        
void Button取消Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        
void TextBox密码TextChanged(object sender, EventArgs e)
        {
            textBox密码.PasswordChar='*';
        }

 

void 修改线路和站点信息ToolStripMenuItemClick(object sender, EventArgs e)
        {
            label公交路线.Text="公交路线信息修改:";
            label公交站点.Text="公交站点修改:";
            label公交线路信息.Text="公交线路信息修改:";
             button修改1.Visible=true;
             button修改1.Text="修改";
            button公交线路信息.Text ="修改";
            button修改2.Visible=true;
            panel管理员.Visible=true;
            textBoxLineCode.Text="";
            textBoxStart.Text="";
            textBoxEnd.Text="";
            textBoxBusInfoId.Text="";
            textBoxStation.Text="";
            textBoxStationIndex.Text="";
            textBoxBusLineID.Text="";
            textBoxBusInfoIndex.Text="";
            textBoxFare.Text="";
            textBoxSTime.Text="";
            textBoxETime.Text="";
            textBoxDistance.Text="";

        }
        
void 删除线路和站点信息ToolStripMenuItemClick(object sender, EventArgs e)
        {    
            label公交路线.Text="公交路线信息删除:";
            label公交站点.Text="公交站点删除:";
            label公交线路信息.Text="公交线路信息删除:";
            
            button修改1.Text="删除";
            button修改2.Visible=false;
            button公交线路信息.Text ="删除";
            button修改1.Visible=true;
            panel管理员.Visible=true;
            textBoxLineCode.Text="";
            textBoxStart.Text="";
            textBoxEnd.Text="";
            textBoxBusInfoId.Text="";
            textBoxStation.Text="";
            textBoxStationIndex.Text="";
            textBoxBusLineID.Text="";
            textBoxBusInfoIndex.Text="";
            textBoxFare.Text="";
            textBoxSTime.Text="";
            textBoxETime.Text="";
            textBoxDistance.Text="";

        }
        
void 增加线路和站点信息ToolStripMenuItemClick(object sender, EventArgs e)
        {
            label公交路线.Text="公交路线信息增加:";
            label公交站点.Text="公交站点增加:";
            label公交线路信息.Text="公交线路信息增加:";
            button修改1.Visible=false;
            button公交线路信息.Text ="增加";
            button修改2.Visible=false;
            panel管理员.Visible=true;
            textBoxLineCode.Text="";
            textBoxStart.Text="";
            textBoxEnd.Text="";
            textBoxBusInfoId.Text="";
            textBoxStation.Text="";
            textBoxStationIndex.Text="";
            textBoxBusLineID.Text="";
            textBoxBusInfoIndex.Text="";
            textBoxFare.Text="";
            textBoxSTime.Text="";
            textBoxETime.Text="";
            textBoxDistance.Text="";

        }
        

        
void Button公交线路信息Click(object sender, EventArgs e)
        {
            if(button公交线路信息.Text=="修改")
            {string sql="delete from BusStation where Station='"+textBoxStation.Text+"' and BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                sql="delete frome BusInfo where BusLine='"+textBoxLineCode+"'";
                DataConnection.UpdateDate(sql);
                sql="insert into BusInfo(BusLine,StartTime,EndTime,DepartureStation,TerminateStation,Fare,Distance) values ('"+textBoxLineCode.Text+"','"+textBoxSTime.Text+"','"+textBoxETime.Text+"','"+textBoxStart.Text+"','"+textBoxEnd.Text+"','"+textBoxFare.Text+"','"+textBoxDistance.Text+"')";
                DataConnection.UpdateDate(sql);
                
            }
            else if(button公交线路信息.Text=="删除")
            {
                string sql="delete from BusStation where Station='"+textBoxStation.Text+"' and BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                 //sql="delete from BusInfo where BusLine='"+textBoxLineCode.Text+"'";
                //DataConnection.UpdateDate(sql);
            }
            else {
        
                string sql="insert into BusInfo(BusLine,StartTime,EndTime,DepartureStation,TerminateStation,Fare,Distance) values ('"+textBoxLineCode.Text+"','"+textBoxSTime.Text+"','"+textBoxETime.Text+"','"+textBoxStart.Text+"','"+textBoxEnd.Text+"','"+textBoxFare.Text+"','"+textBoxDistance.Text+"')";
                DataConnection.UpdateDate(sql);
            }
        }
            
        
void Button修改1Click(object sender, EventArgs e)
        {
            if(button公交线路信息.Text=="修改")
            {
                //button修改1文本改为删除
                string sql="update BusInfo set DepartureStation='"+textBoxStart.Text+"' where BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                //string sql="delete from BusStation where Station='"+textBoxStation.Text+"' and BusLine='"+textBoxLineCode.Text+"'";
                //DataConnection.UpdateDate(sql);
                //sql="delete frome BusInfo where BusLine='"+textBoxLineCode+"'";
                //DataConnection.UpdateDate(sql);
                //sql="insert into BusInfo(BusLine,StartTime,EndTime,DepartureStation,TerminateStation,Fare,Distance) values ('"+textBoxLineCode.Text+"','"+textBoxSTime.Text+"','"+textBoxETime.Text+"','"+textBoxStart.Text+"','"+textBoxEnd.Text+"','"+textBoxFare.Text+"','"+textBoxDistance.Text+"')";
                //DataConnection.UpdateDate(sql);
                
            }
            else if(button公交线路信息.Text=="删除")
            {
                
                string sql="delete from BusInfo where BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
                sql="delete from BusStation where BusLine='"+textBoxLineCode.Text+"'";
                DataConnection.UpdateDate(sql);
            }
            
        }
        
void Button修改2Click(object sender, EventArgs e)
        {
            if(button公交线路信息.Text=="修改")
            {
                
                string sql="update  BusInfo set Fare='"+textBoxFare.Text+"' where BusLine='"+textBoxBusLineID.Text+"'";
                
                DataConnection.UpdateDate(sql);
            }
            
        }  

  }
}

 

 

 

数据库连接及增删改查关键操作代码:

using System;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
namespace gongjiao
{
    /// <summary>
    /// Class with program entry point.
    /// </summary>
    internal sealed class Program
    {
        /// <summary>
        /// Program entry point.
        /// </summary>
        ///[STAThread]
        public static string peocontact = @"data source =LAPTOP-9ULLRPDJ;initial catalog =BusStationQuery;integrated security=true";
        public SqlConnection con = new SqlConnection(peocontact);
        private static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
        public void getConn()
        {

            try {
                con.Open();
            }
            catch (Exception e)
            {
                MessageBox.Show("数据库连接错误");
                Application.Exit();
            }
        }
        public int GetCountInfoBySql(string s)
        {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText=s;
                SqlDataAdapter sda=new SqlDataAdapter(cmd);
                DataSet dataset=new DataSet();
                sda.Fill(dataset);
                int count = Convert.ToInt32((dataset.Tables[0]).Rows[0][0].ToString());

                return count ;
                //return cmd.ExecuteNonQuery();
        }
        public void UpdateDate(string s)
        {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText=s;
                 cmd.ExecuteNonQuery();
        }
        public string GetDataString(string s)
        {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText=s;
                SqlDataAdapter sda=new SqlDataAdapter(cmd);
                DataSet dataset=new DataSet();
                sda.Fill(dataset);
                return (dataset.Tables[0]).Rows[0][0].ToString() ;
        }
        public SqlDataReader GetSqlDataReader(string s)
        {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText=s;
                 SqlDataReader dr=cmd.ExecuteReader();    
                return dr;
        }
        public DataSet GetDataSuoce(string s)
        {        SqlCommand cmd = new SqlCommand();
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText=s;
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataSet ds = new DataSet();
                da.Fill(ds,"hahah");
           
                return ds;
        }
        public void  CloseConn(){
            
             con.Close();
        }
    }
}

 

  • 33
    点赞
  • 273
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
c++城市公交查询系统 1.设有一文件对象in_file,若在while循环中用in_file>> 每次从文件中得到一个字符串直到文件结束, 如果用in_file直接来判断文件是否结束, 则文件末的那个字符串会得到两次。 而用文件in_file.eof()来判断则会得到正确的结果。 2.用delete []释放字符串空间时,老是有问题, 其中的原因之一是你原来申请的空间不够大, 后来往这个空间中放了过多的内容以至越界, 这时候会发生运行时的错误。 3.把一个对象作为参数传给另一个对象的成员函数时, 程序不能正常结束,即系统删除对象时有问题; 而使用指针或者引用传递参数时不仅不会出现问题, 而且可以人为的删除对象。 我个人认为这很有可能是值传递的原因, 当把一个对象作为实参传给一个函数时,函数形参拷贝了实参的值, 这时,如果对象有指针成员,那么形参的指针成员的值和 实参的指针成员的值将完全一样, 即它们指向的是同一块内存,所以当函数调用结束的时候, 函数的形参将会被系统撤消, 这时,形参调用析构函数,释放用new动态申请的内存。在函数的外面, 作为实参的对象的指针成员其实已经被撤消了,所以当程序结束, 系统撤消这个对象时,这个对象又要调用析构函数来释放指针成员, 但这时指针其实已经指向了非法的空间,导致出错。 bus 文件夹的内容记录的是每条线路的信息,对应于bus 类。 每个文件以线路名称(即车名,忽略前面的k)命名。 每个文件的内容组织如下:(共分为6行,以回车键作为行结束标志) 第一行为“线路名称:#### ”,其中####用具体的线路名称代替; 第二行为“上行站点:####”。 第三行为“下行站点:####”。 第四行为“首班车时间:####”。 第五行为“末班车时间:####”。 第六行为“票价:####”。 注:若不分“上行站点”和“下行站点”, 则第二行为“站点名称:####”, 第三行为空行;
随着经济的飞速发展,汽车越来越多,城市的道路建设远赶不上城市化进程的加快,交通拥堵已成为制约城市发展的重要问题之一。城市公共交通覆盖面广、经济快捷。为了缓解交通压力,必须大力发展公共交通,提高公交服务水平,鼓励和吸引市民选择乘坐公交出行,从而改善交通状况。为此我们设计开发了基于Web的公交查询系统,为乘客出行提供详细全面的信息,进一步提高公交的服务水平。 本文从乘客的角度出发,研究了乘客的出行行为,对公交查询系统进行了需求分析;从系统开发环境、系统目标、设计流程、功能设计、模块设计和数据库设计六个方面进行系统的总体设计;通过抽象公交网络中的站点和线路,建立了公交网络数学模型,讨论了公交网络的最优路径算法,并在此基础上详细介绍了在三种不同目标情况下适合公交查询的最优路径算法;在需求分析、总体设计和基于网络路径最优的公交查询算法探讨基础上,对查询系统进行了详细设计,并成功将三种网络路径算法应用于系统的换乘查询中,系统还实现了线网维护、线路查询、站点查询和标志性地点查询的功能,最后利用武汉市25条线路和400个站点的实验数据,对系统的功能进行了测试,并对公交网络路径的算法时间和查询结果进行了分析。实验证明该系统界面友好、功能完善。
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大章鱼(张文哲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值