C++市内公交车管理系统—课程设计论文.doc

上传人:laozhun 文档编号:2384368 上传时间:2023-02-17 格式:DOC 页数:19 大小:187.50KB
返回 下载 相关 举报
C++市内公交车管理系统—课程设计论文.doc_第1页
第1页 / 共19页
C++市内公交车管理系统—课程设计论文.doc_第2页
第2页 / 共19页
C++市内公交车管理系统—课程设计论文.doc_第3页
第3页 / 共19页
C++市内公交车管理系统—课程设计论文.doc_第4页
第4页 / 共19页
C++市内公交车管理系统—课程设计论文.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C++市内公交车管理系统—课程设计论文.doc》由会员分享,可在线阅读,更多相关《C++市内公交车管理系统—课程设计论文.doc(19页珍藏版)》请在三一办公上搜索。

1、C+语言程序设计课程设计(论文)题目: 市内公交车管理系统 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(论文)任务及评语院(系): 教研室: 学 号 学生姓名 专业班级 课程设计(论文)题目市内公交车管理系统课程设计(论文)任务程序设计的任务与要求:(1). 掌握面向对象程序设计语言C+的基本语法(2). 掌握C+面向对象设计的思想(3). 掌握VC+6.0与DEV C+ 开发工具的使用 (4). 运用标准C+规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。指导教师评语及成绩

2、 成绩: 指导教师签字: 年 月 日 目 录第1章 课程设计目的与要求11.1 设计目的11.2实验环境11.3预备知识11.4设计要求1第2章 课程设计内容22.1 课题描述22.2 系统设计22.2.1功能分析22.2.2面向对象设计32.2.3类成员描述62.3程序实现82.3.1源码分析82.3.2运行结果14第3章 课程设计总结15参考文献16第1章 课程设计目的与要求1.1 设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(

3、1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows 操作系统的

4、微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。1.3预备知识熟悉C+语言程序设计的基本知识及VC+编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章 课程设计内容2.1 课题描述这是一个市内公交车管理系统,目标是市内公交车管理系统功能,以满足顾客的需求,而且使用起来也很容易。除了基本的公交车查询功能以及公交车必备功能以外,还提供了

5、对公交车信息进行修改,以给用户提供最大余地的选择空间,方便客户了解并能快速查找公交车相关信息。公交信息包括车辆信息与路线信息。根据已知的的路线信息,要输出该路线所经过的所有站点信息;.根据输入的站点信息,输出经过该站点的所有公交路线信息;对于用户来说,任意输入两个站台,可以得出两站台之间的所有可实现到达的路线选择,即乘多少路在那个站点转乘另外一路。2.2 系统设计2.2.1功能分析随着科学技术不断发展的今天,公交车管理系统具有较大的社会现实意义,因为公交车管理管理系统具有车辆信息和统计管理等功能我的题目是:市内公交车管理系统,根据我与老师交流所了解的情况及在图书馆、网络等查找的。操作可见性操作

6、可见性分为以下几种:公有:除了类本身以外,操作对其他模型元素也是可视的。 保护:操作只对类本身、它的子类或友元(取决于语言)是可视的。 私有:操作只对类本身和类的友元是可视的。 公有可见性应该尽量少使用,只有当另一个类需要该操作时才使用这种可见性。保护可见性是默认的可见性;它保护操作使其不被外部类使用,防止行为的耦合和封装变得松散。私有可见性可以用在您不希望子类继承操作的情况下。它提供了从超类对子类去耦的方法,并且减少了删除或排除未使用继承操作的需要。2.2.2面向对象设计类操作:操作几乎总是表示对象行为。操作也可以表示类的行为,这时的操作是类操作。在 UML 中可以通过归类方法对操作建模。下

7、面阐述一下对Bus的UML类图的实现:Bus- in_data:int- use_data:int- Bus_judge:int# Bus_No6:char# Bus_type:char+ Bus_total: int+ Bus()+ Bus()+ set_in(in int):void+ set_use(use int):void+ *Get_Bus_No():char+ Get_Bus_type():char+ Get_Bus_in():int+ Get_Bus_use():int+ print_Bus():void+ add_Bus():void+ delete_Bus(*BBus Bu

8、s):void+ check_Bus(BusNo char):void图2.1Bus的UML图Bus_Line- BusNo6:char- LineName4:char+ Bus_Line():void+ Bus_Line():void+ set_Bus_Line(busno char, linename char):void+ *Get_BusNo():char + *Get_LineName():char+ print_Busline():void+ set_BusNo(bn char):void+set_LineName(bna char):void图2.2Bus-line的UML图Dr

9、iver# driver_no3:char# driver_name8:char# driver_sex3:char# driver_phone:int# driver_age:int# driver_judge:int+ Driver()+ Driver()+set_no(driverNo3 char):void+set_name(drivername8char):void+set_sex(driversex3 char):void+ set_age(driverage int):void+ set_phone(driverphone int):void+ *get_driver_no():

10、char+ *get_driver_name():char+ *get_driver_sex():char+ get_driver_age():int+ get_driver_phone():int+ print_driver():void+ add_driver():void+ dele_driver() :void+ find_driver():void图2.3 Driver的UML图counter- busno6:char- lineno4:char- student:int- monthperson:int- commonperson:int- totalperson:int- stu

11、money:float- monmoney:float- commoney:float- totalmoney:float- totaltimes:int+counter (bn char, ln char,int,int, int):void+ counter():void+ set_busno(bn char):void+ set_lineno(ln char):void+ *Get_busno():char+ *Get_lineno:char+ set_student(x int):void+ set_monthperson(x int):void+ set_commonperson(x

12、 int):void+ set_totalperson(x int):void+ set_totpay(x float):void+ stupay():float+ monpay():float+ compay():float+ Get_totalperson():int+ Get_student():int+ Get_monthperson():int+ Get_commonperson():int+ Get_totpay():float+ set_totaltimes(int):void+ Get_totaltimes():int+ print_count():void图2.4 count

13、er的UML图Point- point_name10:char+ Point()+ Point()+ *Get_point_name():char+ set_point_name(pname char):void图2.5 Point的UML图bus_person- personnum3:char- busnum6:char+ Bus_Person():void+ Bus_Person():void+set_Bus_Person(pernum char, busname char):void+ *Get_personnum():char+ *Get_busnum():char+ print_Bu

14、s_Person():void + set_personnum(pn char) + name_c():void+ set_busnum(bn char):void图2.6 bus_person的UML图Line- Line_name4:char- *points:point:- point_num:int- max_point:int- sign:int+ Line()+ Line()+ *Get_Line_name():char+set_point_number(pn int):void+ dele_point_number():void+ Get_point_number():int+

15、Get_sign():int图2.7 Line的UML图2.2.3类成员描述类的成员包括数据成员和函数成员,它们分别描述了问题的属性和行为,是不可分割的两个方面。这次课程设计我们设计了公交车管理类Bus、线路管理类Line(其中包含了point站点类)、人员管理类Driver、车线管理类Bus_line、人车管理类Bus_person、统计类Count。其中,我以实现公交车管理类(Bus -基类)进行简述,与其他类的设计基本相同:类的成员函数描述的是类的行为,这里包括bus,bus line,counter,Driver,bus_person,Line,Point。成员函数是程序算法的实现部分

16、,是对封装的数据进行操作的方法。C+中static类数据成员是指类static成员函数 和 类static数据成员两种。使用类的static成员的优点:1 static成员的名字是在类的作用域中,因此可以避免与其他类的成员或者全局对象名字的冲突;2可以实施封装。static成员可以是私有成员,而全局对象不可见;3通过阅读程序容易看出来static成员与特定类关联的。static成员的定义:static成员遵循正常的共有/私有访问规则,不过都可以通过 classname:成员进行访问,不论成员是私有还是共有。使用类的static成员:通过classname:成员;通过class对象.成员;通过c

17、lass对象引用.成员;通过class对象指针-成员;不论是static成员函数还是static数据成员都可以这样使用。开始输入站点判断输入站点是否合理输出公交线路Y输出提示信息结束 图2.8公交站点查询流程图2.3程序实现2.3.1源码分析在本系统的设计中,将主要实现以下功能:公交车管理功能、线路管理功能、人员管理功能、车线管理功能、人车管理、统计功能。其中,前5项都可实现调入文件操作、显示基本信息、添加基本信息、查找基本信息、修改基本信息、返回开始界面,可以说功能比较强大,内容信息完善,不仅为客户提供了极大的方便,而且同时管理员使用更为方便,管理更加清晰,提高了系统的使用效率。/ Mark

18、up.h: interface for the CMarkup class./ Markup Release 6.3/ Copyright (C) 1999-2002 First Objective Software, Inc. All rights reserved/ Go to for the latest CMarkup and EDOM documentation/ Use in commercial applications requires written permission/ This software is provided as is, with no warranty.#

19、if !defined(AFX_MARKUP_H_948A2705_9E68_11D2_A0BF_00105A27C570_INCLUDED_)#define AFX_MARKUP_H_948A2705_9E68_11D2_A0BF_00105A27C570_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000#include #ifdef _DEBUG#define _DS(i) (i?&(LPCTSTR)m_csDoc)m_aPosi.nStartL:0)#define MARKUP_SETDEBUGSTATE m_pMa

20、inDS=_DS(m_iPos); m_pChildDS=_DS(m_iPosChild)#else#define MARKUP_SETDEBUGSTATE#endifclass CMarkup public:CMarkup() SetDoc( NULL ); ;CMarkup( LPCTSTR szDoc ) SetDoc( szDoc ); ;CMarkup( const CMarkup& markup ) *this = markup; ;void operator=( const CMarkup& markup );virtual CMarkup() ;/ Navigatebool L

21、oad( LPCTSTR szFileName );bool SetDoc( LPCTSTR szDoc );bool IsWellFormed();bool FindElem( LPCTSTR szName=NULL );bool FindChildElem( LPCTSTR szName=NULL );bool IntoElem();bool OutOfElem();void ResetChildPos() x_SetPos(m_iPosParent,m_iPos,0); ;void ResetMainPos() x_SetPos(m_iPosParent,0,0); ;void Rese

22、tPos() x_SetPos(0,0,0); ;CString GetTagName() const;CString GetChildTagName() const return x_GetTagName(m_iPosChild); ;CString GetData() const return x_GetData(m_iPos); ;CString GetChildData() const return x_GetData(m_iPosChild); ;CString GetAttr( LPCTSTR szAttr ) const return x_GetAttr(m_iPos,szAtt

23、r); ;CString GetChildAttr( LPCTSTR szAttr ) const return x_GetAttr(m_iPosChild,szAttr); ;CString GetAttrName( int n ) const;bool SavePos( LPCTSTR szPosName=_T() );bool GetOffsets( int& nStart, int& nEnd ) const;CString GetError() const return m_csError; ;enum MarkupNodeTypeMNT_ELEMENT= 1, / 0x01MNT_

24、TEXT= 2, / 0x02MNT_WHITESPACE= 4, / 0x04MNT_CDATA_SECTION= 8, / 0x08MNT_PROCESSING_INSTRUCTIO= 16, / 0x10MNT_COMMENT= 32, / 0x20MNT_DOCUMENT_TYPE= 64, / 0x40MNT_EXCLUDE_WHITESPACE= 123,/ 0x7b;/ Createbool Save( LPCTSTR szFileName );CString GetDoc() const return m_csDoc; ;bool AddElem( LPCTSTR szName

25、, LPCTSTR szData=NULL ) return x_AddElem(szName,szData,false,false); ;bool InsertElem( LPCTSTR szName, LPCTSTR szData=NULL ) return x_AddElem(szName,szData,true,false); ;bool AddChildElem( LPCTSTR szName, LPCTSTR szData=NULL ) return x_AddElem(szName,szData,false,true); ;bool InsertChildElem( LPCTST

26、R szName, LPCTSTR szData=NULL ) return x_AddElem(szName,szData,true,true); ;bool AddAttr( LPCTSTR szAttr, LPCTSTR szValue ) return x_SetAttr(m_iPos,szAttr,szValue); ;bool AddChildAttr( LPCTSTR szAttr, LPCTSTR szValue ) return x_SetAttr(m_iPosChild,szAttr,szValue); ;bool AddAttr( LPCTSTR szAttr, int

27、nValue ) return x_SetAttr(m_iPos,szAttr,nValue); ;bool AddChildAttr( LPCTSTR szAttr, int nValue ) return x_SetAttr(m_iPosChild,szAttr,nValue); ;bool AddChildSubDoc( LPCTSTR szSubDoc ) return x_AddSubDoc(szSubDoc,false,true); ;bool InsertChildSubDoc( LPCTSTR szSubDoc ) return x_AddSubDoc(szSubDoc,tru

28、e,true); ;CString GetChildSubDoc() const;/ Modifybool RemoveElem();bool RemoveChildElem();bool SetAttr( LPCTSTR szAttr, LPCTSTR szValue ) return x_SetAttr(m_iPos,szAttr,szValue); ;bool SetChildAttr( LPCTSTR szAttr, LPCTSTR szValue ) return x_SetAttr(m_iPosChild,szAttr,szValue); ;bool SetAttr( LPCTST

29、R szAttr, int nValue ) return x_SetAttr(m_iPos,szAttr,nValue); ;bool SetChildAttr( LPCTSTR szAttr, int nValue ) return x_SetAttr(m_iPosChild,szAttr,nValue); ;bool SetData( LPCTSTR szData, int nCDATA=0 ) return x_SetData(m_iPos,szData,nCDATA); ;bool SetChildData( LPCTSTR szData, int nCDATA=0 ) return

30、 x_SetData(m_iPosChild,szData,nCDATA); ;protected:#ifdef _DEBUGLPCTSTR m_pMainDS;LPCTSTR m_pChildDS;#endifCString m_csDoc;CString m_csError;struct ElemPosElemPos() Clear(); ;ElemPos( const ElemPos& pos ) *this = pos; ;bool IsEmptyElement() const return (nStartR = nEndL + 1); ;void Clear()nStartL=0;

31、nStartR=0; nEndL=0; nEndR=0; nReserved=0;iElemParent=0; iElemChild=0; iElemNext=0;void AdjustStart( int n ) nStartL+=n; nStartR+=n; ;void AdjustEnd( int n ) nEndL+=n; nEndR+=n; ;int nStartL;int nStartR;int nEndLint nEndR;int nReserved;int iElemParent;int iElemChild;int iElemNext;CArray m_aPos;int m_

32、iPosParent;int m_iPos;int m_iPosChild;int m_iPosFree;int m_nNodeType;struct TokenPosTokenPos( LPCTSTR sz ) Clear(); szDoc = sz; ;bool IsValid() const return (nL = nR); ;void Clear() nL=0; nR=-1; nNext=0; bIsString=false; ;bool Match( LPCTSTR szName )int nLen = nR - nL + 1;/ To ignore case, define MA

33、RKUP_IGNORECASE#ifdef MARKUP_IGNORECASEreturn ( (_tcsncicmp( &szDocnL, szName, nLen ) = 0)#elsereturn ( (_tcsnccmp( &szDocnL, szName, nLen ) = 0)#endif& ( szNamenLen = _T(0) | _tcschr(_T( =/),szNamenLen) ) );int nL;int nR;int nNext;LPCTSTR szDoc;bool bIsString;struct SavedPosint iPosParent;int iPos;

34、int iPosChild;CMap m_mapSavedPos;void x_SetPos( int iPosParent, int iPos, int iPosChild )m_iPosParent = iPosParent;m_iPos = iPos;m_iPosChild = iPosChild;m_nNodeType = iPos?MNT_ELEMENT:0;MARKUP_SETDEBUGSTATE;int x_GetFreePos();int x_ReleasePos();int x_ParseElem( int iPos );int x_ParseError( LPCTSTR s

35、zError, LPCTSTR szName = NULL );static bool x_FindChar( LPCTSTR szDoc, int& nChar, _TCHAR c );static bool x_FindToken( TokenPos& token );CString x_GetToken( const TokenPos& token ) const;int x_FindElem( int iPosParent, int iPos, LPCTSTR szPath );CString x_GetTagName( int iPos ) const;CString x_GetDa

36、ta( int iPos ) const;CString x_GetAttr( int iPos, LPCTSTR szAttr ) const;bool x_AddElem( LPCTSTR szName, LPCTSTR szValue, bool bInsert, bool bAddChild bool x_AddSubDoc( LPCTSTR szSubDoc, bool bInsert, bool bAddChild );bool x_FindAttr( TokenPos& token, LPCTSTR szAttr=NULL ) const;bool x_SetAttr( int

37、iPos, LPCTSTR szAttr, LPCTSTR szValue );bool x_SetAttr( int iPos, LPCTSTR szAttr, int nValue );bool x_CreateNode( CString& csNode, int nNodeType, LPCTSTR szText );void x_LocateNew( int iPosParent, int& iPosRel, int& nOffset, int nLength, int nFlags );int x_ParseNode( TokenPos& token );bool x_SetData

38、( int iPos, LPCTSTR szData, int nCDATA );int x_RemoveElem( int iPos );void x_DocChange( int nLeft, int nReplace, const CString& csInsert );void x_PosInsert( int iPos, int nInsertLength );void x_Adjust( int iPos, int nShift, bool bAfterPos = false );CString x_TextToDoc( LPCTSTR szText, bool bAttr = f

39、alse ) const;CString x_TextFromDoc( int nLeft, int nRight ) const;2.3.2运行结果如在主菜单选项下,选择1会进入“公交线路查询”功能选项下,再次按提示语操作输入要查询的公交路线,如8路就输入8,就会显示8路所经过的站点。 图2.9运行操作主菜单界面 图2.10路线查找图 图2.11站点查找图 图2.12一次换乘图第3章 课程设计总结通过此次市内公交车管理系统的设计,使我对C+程序设计有了深一步的了解,对系统设计及开发有了比较全面的思路。首先,通过对系统进行需求分析,确定各个功能函数;然后一个个具体地对他们进行编程,并且仔细检查

40、看是否有错;在完成这一步之后才开始构造主函数,通过主函数把各个功能函数联系起来,编译修改错误和不足之处。在实际编程过程中会遇到很多不同的错误,有时候是一些很明显很细节的语法错误,这些可以通过编译来查找错误的所在,然而那些并不明显难以查找的隐性错误却真让人头痛,没有办法只好利用断点调试来一步步检查代码中的错误,这样为了找一个错误花费了大量的时间,但是找出错误之后的感觉却是非常好的。同时我翻阅了大量的书籍,尽管大部分书都只是翻了一部分页码而已,却给了我一个非常有价值的经验。总之,此次系统设计给我们提供了一个既动手又动脑、自学、独立实践的机会,使我们养成了勤翻阅各种相关资料的习惯,将书本上的理论知识

41、和实际有机地结合起来,锻炼了实际分析问题和解决问题的能力,提高了适应实际、实践编程的能力,为今后的学习和实践打下了良好的基础。参考文献1徐孝凯.C+语言程序设计.北京:清华大学出版社 2003.72刘宗田.C+ 编程思想.北京:机械工业出版社 2005.13裘宗燕.C+问题求解.北京:机械工业出版社 2005.84周靖.C+编程金典(第3版).北京:清华大学出版社 2007.95邱仲潘.C+大学教程(第二版).北京:电子工业出版社 2001.66刘瑞挺.C+程序设计.北京:电子工业出版社 2007.97韩毅刚.C+程序设计语言.北京:机械工业出版社 2004.68黄都培.C+语言程序设计.北京:清华大学出版社2007.59钱能.C+程序设计教程.北京:清华大学出版社 2005.910黄迪明.C+语言程序设计基础.北京:电子工业出版社 2005.111陆宗骐.C+图像处理编程.北京:清华大学出版社 2000.712刘海嘉.C+程序设计教程.北京:机械工业出版社 2005.113杨富国.C+问题求解思想.北京:机械工业出版社 2005.814杨祥.C+编程金典精讲.北京:清华大学出版社 2007.915盛素英.C+大学教程.北京:电子工业出版社 2001.6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号