软件综合课程设计车辆调度管理软件设计_第1页
软件综合课程设计车辆调度管理软件设计_第2页
软件综合课程设计车辆调度管理软件设计_第3页
软件综合课程设计车辆调度管理软件设计_第4页
软件综合课程设计车辆调度管理软件设计_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈阳航空航天大学 课课 程程 设设 计计 报报 告告 课程设计名称:软件综合课程设计软件综合课程设计 课程设计题目:车辆调度管理软件设计车辆调度管理软件设计 院(系):计算机学院 专 业:计算机科学与技术 班 级: 学 号: 姓 名: 指导教师: 完成日期:2011年9月9日 目目 录录 第第 1 章章 需求分析需求分析.1 1.1 问题内容与要求 .1 1.2 问题分析与假设 .1 第第 2 章章 概要概要设设计计.2 2.1 数据库逻辑模型设计 .2 2.1.1 数据库 er 图.2 2.1.2 数据库表格设计.3 2.2 系统功能模块 .4 第第 3 章章 详详细细设计设计.5 3.1

2、客户功能模块 .5 3.2 管理人员功能模块 .6 3.2.1 车辆信息更新.6 3.2.2 车辆信息的添加与删除.7 3.2.3 司机信息的添加与删除.8 第第 4 章章 调试使用调试使用.10 4.1 客户功能 .10 4.2 管理员功能 .11 4.2.1 车辆及司机信息的增删.11 4.2.2 车辆信息的修改.12 参考文献参考文献.14 附附 录(程序清单)录(程序清单).15 第 1 章 需求分析 1.1 问题内容与要求问题内容与要求 设计一个简单的车辆调度管理程序,可实现对不同的车辆、不同要求、不同 时间的调度算法。 1) 建立车辆信息表; 2) 实现对车辆信息的插入、修改、查询

3、、删除功能; 3) 界面要优化,直观、大方、美观; 4) 实现针对不同任务、不同时间的调度分配算法; 5) 独立完成系统的设计、编码和调试; 6) 按照课程设计规范书写课程设计报告。 1.2 问题分析与假设问题分析与假设 车辆调度就是根据客户的需求,合理地派遣出相应的车辆。假设每派遣出一 辆车,需要记录下该车的特有信息以及使用该车的客户信息。一辆车在被使用后, 不能在重叠的时间段被其他客户使用。而客户在选择车辆时,除了能够了解车辆 本身的属性外,也有权了解驾驶该车辆驾驶员的信息,比如驾驶员的性别、驾龄、 年龄。而作为车辆调度员,应该做到对车辆信息的查看、增删、及时更新等操作。 由于每一辆车都有

4、一个专属司机,所以每新增一辆,都必须提供一个已存在的司 机信息,如果添加了一个错误的司机,系统应该能够提供提示现提供一个正确的 司机信息。同理,如果想要注销掉某个司机的信息,首先要取消掉他与配对车辆 的关系,然后才能进行注销。 分析了客户与车辆、司机与车辆的关系,有利于我们建立合理的表格,并且 在设计程序时考虑到更多切合实际的应用。 本次课设所需要的表格将在 sql 2000 中建立。使用 microsoft visual c+编 写代码、进行对数据库的读写等操作。odbc 将作为搭载数据库与 vc+的平台。 第 2 章 概要设计 2.1 数据库逻辑模型设计数据库逻辑模型设计 2.1.1 数据

5、库数据库 e er r 图图 汽车调度管理系统的 er 图如图 2.1 所示。 图图 2.12.1 车辆调度管理数据库车辆调度管理数据库 e er r 图图 车辆实体与司机、客户这两个实体之间,分别通过驾驶关系和租用关系联系 在一起。为便于管理,一辆汽车只配备一名司机,一名司机也只能驾驶一辆汽车。 1 1 车辆车牌号 车型 豪华程度 车辆载重 状态 最早可用时间 驾驶 司机 司机编号 司机姓名 性别 驾龄年龄 租用 客户 客户电话 客户姓名 需求车型 需求程度 需求载重 租用车辆 租用时间 归还时间 m n 所以这两个实体之间是 1:n 的关系。而一辆汽车可以出租给不同的客户,而一 个顾客又可

6、以租用多辆汽车,所以两个实体之间的关系是 m:n 的关系。 e-r 图表示的关系模式为: 车辆(车牌号,车型,司机编号,载重,豪华程度,状态,最早可用时间) ; 司机(司机编号,司机姓名,性别,驾龄,年龄) ; 客户(客户电话,客户姓名,需求车型,需求程度,需求载重,租用时间, 归还时间,租用车辆) 。 “车辆”实体的主码是“车牌号” 。属性“司机编号”是来自于实体“司机” , 的外码,参照其属性“司机编号” 。 “司机”实体的主码是“司机编号” 。 “客户”实体的主码是“客户电话” 。属性“租用车辆”是来自于实体“车 辆”外码,参照其属性“车牌号” 。 2.1.2 数据库表格设计数据库表格设

7、计 1车辆(vehicles) 表表 2.12.1 车辆信息表车辆信息表 列名列名数据类型数据类型长度长度是否可以为空是否可以为空说明说明 vnochar20 否车牌号 vtypechar10 是车型 vdnochar20 否司机编号 vloadint 不定是车辆载重 vgrandchar10 是豪华程度 vstatuschar10 是状态 vbacktimeint 不定是最早可用时间 2司机(drivers) 表表 2.22.2 司机信息表司机信息表 列名列名数据类型数据类型长度长度是否可以为空是否可以为空说明说明 dnochar20 否司机编号 dnamechar10 是司机姓名 dsex

8、char10 是性别 ddegreeint 不定是驾龄 dageint 不定是年龄 3客户(orders) 表表 2.32.3 客户信息表客户信息表 列名列名数据类型数据类型长度长度是否可以为空是否可以为空说明说明 otelchar20 否客户电话 onamechar10 是客户姓名 otypechar10 是需求车型 ograndchar10 是需求程度 oloadint 不定是需求载重 ohiertimeint 不定是租用时间 obacktimeint 不定是归还时间 ovnochar20 否租用车辆 2.2 系统功能模块系统功能模块 本系统主要功能和层次结构如图 2.2 所示。 本系统有

9、七个主要功能。其中客户的使用到的功能更有用户下单、车辆信息 查询两个功能,而管理人员使用到的功能有车辆信息更改、新增车辆、新增司机、 车辆删除、司机删除五个功能。 图图 2.22.2 系统主要功能和层次结构系统主要功能和层次结构 车辆调度管理系统功能模块 客户下单 车辆信息查询 车辆信息更改 新增车辆 新增司机 删除车辆 删除司机 第 3 章 详细设计 3.1 客户功能模块客户功能模块 顾客类模块是为了实现顾客下订单和查询车辆信息的需求。客户可以通过它, 查看全部车辆或指定车辆的信息,或是根据自己的需求筛选车辆。并且,客户还 可以根据指定车辆的车牌号,查看该辆车的司机信息。 客户在输入了客户电

10、话、姓名、对车辆的需求,以及时间等相关信息后,可 以先使用查询功能查看满足条件的车辆,然后选定某辆车查看其司机信息,全部 信息都满意后,再通过了系统对客户的租用时间与该车最早可用时间的核对,就 可以下单,已取得该车的使用权。 客户功能模块流程图如图 3.1 所示。 y n 开始 输入客户数据 显示满足客户需求的车辆 输入指定车辆的车牌 查看司机信息 最早可用时间大于租用时间 成功下单 结束 图图 3.13.1 客户功能模块流程图客户功能模块流程图 3.2 管理人员功能模块管理人员功能模块 该模块主要实现对车辆与司机信息的增删查改。 3.2.1 车辆信息更新车辆信息更新 通过该功能,管理人员可以

11、改变指定车辆的配置司机,或是将已归还的汽车 的订单取消,使该汽车可以投入下一轮使用。 在改变车辆的配置司机时,输入车牌号和新的司机编号,就可以将指定的车 辆的司机改变。注意,输入的新司机编号只能是已存在的,并且是没有被配置到 其他车辆的司机的编号,否则系统会提示出错。 改变车辆配置司机的流程图如图 3.2 所示。 图图 3.23.2 改变车辆配置司机的流程图改变车辆配置司机的流程图 在取消已归还汽车的的订单时,输入车票号和归还时间,就可以将对应的订 单取消,若该车辆已其他没有订单,将车辆状态由“busy”变为“free” ,表示 目前空闲,否则车辆状态保持“busy” ,直至该车辆无任何订单。

12、 取消已归还汽车订单的流程图如图 3.3 所示。 n 开始 输入需要更改的信息 该司机编号是否合法 y 更改信息 结束 图图 3.33.3 取消已归还汽车订单的流程图取消已归还汽车订单的流程图 3.2.2 车辆信息的添加与删除车辆信息的添加与删除 该功能显而易见,主要是完成对车辆的新增或删除。 输入车牌号、车型、司机编号、车辆载重、豪华程度、初始车辆状态,而初 始最早可用时间默认为 0。就可以添加一辆新车。需要注意的是,输入的司机编 号只能是已存在的,并且是没有被配置到其他车辆的司机的编号,否则系统会提 示出错。 若只输入车牌号,则表示需要删除某一个已经存在的车辆信息。需要注意的 是,输入的车

13、牌号必须是存在的已有的车辆的车牌号,否则系统提示出错。 车辆信息的添加与删除功能的流程图如图 3.4 所示。 y 开始 输入订单信息 换车时间小于该车最早可用时间 取消对应订单 车辆状态不改变 结束 取消对应订单 车辆状态变为 “free” n 图图 3.43.4 车辆信息的添加与删除功能的流程图车辆信息的添加与删除功能的流程图 3.2.3 司机信息的添加与删除司机信息的添加与删除 归还功能与车辆信息的添加与删除类似。 输入司机编号、司机姓名、性别、驾龄、年龄等信息,就可以添加一名新司 机。需要注意的是,输入的新司机编号不能与已有的司机编号重复,否则系统提 示出错。 若只输入司机编号,则表明需

14、要删除某一个司机。需要注意的是,删除的这 一个司机不能是配置到车辆上的,否则系统提示出错。 司机信息的添加与删除功能流程图如图 3.5 所示。 y y n n n 开始 输入车辆信息 是否只有车牌号信息 司机编号是否合法 初始化最早可用时间 写入新车辆信息 结束 车牌号存在 删除车辆信息 输入司机编号 y 图图 3.53.5 司机信息的添加与删除功能流程图司机信息的添加与删除功能流程图 n n 开始 输入司机信息 是否只有司机信号 添加司机信息者 司机已配置 删除司机 禁止删除 结束 y y 第 4 章 调试使用 4.1 客户功能客户功能 客户下单和查询车辆信息界面如图 4.1 所示。 图图

15、4.14.1 客户下单和查询车辆信息界面客户下单和查询车辆信息界面 输入合理信息后,通过鼠标点击按钮,就可以实现不同的功能。比如依次输 入: 、 “vanpersy” 、 “audi” 、 “a+” 、 “3” 、 “1530” 、 “2311”后, 点击“根据客户需要显示车辆”出现匹配车辆如图 4.2 所示。 然后选中其中的车牌为“a1256”的车型,点击“查看司机信息” ,出现 “0706” 、 “ronaldo” 、 “male” 、 “6” 、 “30”字样。分别代表司机编号、司机姓名、 性别、驾龄、年龄。信息如图 4.3 所示。 客户如果满意,点击“下单”即

16、可成功下单。 图图 4.24.2 匹配客户匹配客户 vanpersyvanpersy 需求的车辆需求的车辆 图图 4.34.3 车辆车辆 a1256a1256 的司机信息的司机信息 4.2 管理员功能管理员功能 4.2.1 车辆及司机信息的增删车辆及司机信息的增删 若需要在车辆信息表 vehicles 中加入一辆车型为“lambor” 、车牌号为 “a1122” 、驾驶司机为“0755”豪华程度为“aa+” 、载重为 2 人的新车,需要 在车辆信息更新界面输入信息。如图 4.4 所示。 图图 4.44.4 新增车辆信息新增车辆信息 但是点击添加后,会提示“没有该司机!请先输入司机信息” 。原因

17、是编号 为 0755 的司机信息还没有存入数据库。解决办法就是在司机信息更新界面输入 编号为 0755 的司机的相关信息。如图 4.5 所示。 图图 4.54.5 新增司机信息新增司机信息 点击“添加” 。添加了司机信息后,重新在车辆信息更新界面输入司机编号, 就可以添加所需要的新车辆了。 删除车辆信息与司机信息时,只需要输入对应的车牌号或是司机编号,点击 删除即可。 4.2.2 车辆信息的修改车辆信息的修改 若有车辆归还,输入归还车辆的车牌号,以及该车辆的返回时间,就可以取 消对应的订单。如上面被租用的车辆 a1256,车辆返回后,在车辆信息更新界面 输入信息“a1256” 、 “2311”

18、 ,点击“修改” ,就完成了订单的取消。如图 4.6 所 示。 图图 4.64.6 取消车辆取消车辆 a1256a1256 的订单的订单 若是修改车辆的的配置司机,在司机编号处输入合法的司机编号即可。 参考文献 1 高富平,张楚 . 电子商务法m. 北京:北京大学出版社,2002 2 沈炜,徐慧 . vc+数据库编程技术与实例 m . 北京:人民邮电出版社, 2005 3 杨章伟等 . 21 天学通 visual c+ m. . 北京:电子工业出版社,2009 4 王珊,萨师煊 . 数据库系统概论m. 北京:高等教育出版社,2006 5 崔莹,王华军 . vc+数据库编程 100 例m. 北京

19、:中国铁道出版社,2007 附 录(程序清单) #include stdafx.h #include ylz.h #include ylzset.h #include ylzdoc.h #include ylzview.h #include driverset.h #include ve1set.h #ifdef _debug #define new debug_new #undef this_file static char this_file = _file_; #endif cylzview:cylzview() : crecordview(cylzview:idd) /afx_data

20、_init(cylzview) m_pset = null; m_tel = _t(); m_name = _t(); m_type = _t(); m_grand = _t(); m_load = 0; m_upvno = _t(); m_upvdno = _t(); m_upvgrand = _t(); m_upvstatus = _t(); m_upvtype = _t(); m_upvload = 0; m_dno = _t(); m_dname = _t(); m_dsex = _t(); m_ddegree = 0; m_dage = 0; m_vno = _t(); m_htim

21、e = 0; m_btime = 0; m_upbtime = 0; /afx_data_init void cylzview:dodataexchange(cdataexchange* pdx) crecordview:dodataexchange(pdx); /afx_data_map(cylzview) ddx_control(pdx, idc_list3, m_listd); ddx_control(pdx, idc_list1, m_list1); ddx_text(pdx, idc_edit1, m_tel); ddx_text(pdx, idc_edit2, m_name); d

22、dx_text(pdx, idc_edit3, m_type); ddx_text(pdx, idc_edit4, m_grand); ddx_text(pdx, idc_edit5, m_load); ddx_text(pdx, idc_edit9, m_upvno); ddx_text(pdx, idc_edit11, m_upvdno); ddx_text(pdx, idc_edit13, m_upvgrand); ddx_text(pdx, idc_edit14, m_upvstatus); ddx_text(pdx, idc_edit10, m_upvtype); ddx_text(

23、pdx, idc_edit12, m_upvload); ddx_text(pdx, idc_edit6, m_dno); ddx_text(pdx, idc_edit8, m_dname); ddx_text(pdx, idc_edit15, m_dsex); ddx_text(pdx, idc_edit16, m_ddegree); ddx_text(pdx, idc_edit17, m_dage); ddx_text(pdx, idc_edit7, m_vno); ddx_text(pdx, idc_edit18, m_htime); ddx_text(pdx, idc_edit19,

24、m_btime); ddx_text(pdx, idc_edit20, m_upbtime); /afx_data_map bool cylzview:precreatewindow(createstruct void cylzview:oninitialupdate() m_pset = crecordview:oninitialupdate(); getparentframe()-recalclayout(); resizeparenttofit(); bool cylzview:onprepareprinting(cprintinfo* pinfo) return dopreparepr

25、inting(pinfo); #ifdef _debug void cylzview:assertvalid() const crecordview:assertvalid(); void cylzview:dump(cdumpcontext cylzdoc* cylzview:getdocument() / non-debug version is inline assert(m_pdocument-iskindof(runtime_class(cylzdoc); return (cylzdoc*)m_pdocument; #endif /_debug crecordset* cylzvie

26、w:ongetrecordset() return m_pset; / cylzview message handlers void cylzview:onbutton1() cveset cc; cstring pp( ); /int nitem=-1; cstring str0; updatedata(true); for(int j=0;jisopen() m_pset-close(); if(cc.isopen() cc.close(); cc.open(); m_vno=m_vno+pp; m_pset-open(); m_pset-addnew(); m_pset-m_otel=m

27、_tel; m_pset-m_oname=m_name; m_pset-m_otype=m_type; m_pset-m_ogrand=m_grand; m_pset-m_oload=m_load; m_pset-m_ovno=m_vno; m_pset-m_ohiretime=m_htime; m_pset-m_obacktime=m_btime; while(cc.iseof()!=1) if(cc.m_vno=m_vno) updatedata(true); cc.edit(); cc.m_vstatus=busy; cc.m_vbacktime=m_btime; cc.update()

28、; cc.movenext(); cc.requery(); updatedata(false); elsecc.movenext(); m_pset-update(); m_pset-movelast(); m_pset-requery(); messagebox(已下单!已下单!); m_tel=m_name=m_type=m_grand=; m_load=0; m_htime=m_btime=0; m_pset-close(); cc.close(); m_vno=; for(int i=0;i10;i+) m_list1.deletestring(0); m_listd.deletes

29、tring(0); updatedata(false); void cylzview:onbutton2() cveset vs; cstring str=; updatedata(true); for(int i=0;i=%d and vgarnd=%s,m_type,m_load,m_grand); vs.open(); while(vs.iseof()!=1) str.format(%4s %4s %4s %d %18s %5s %7d,vs.m_vno,vs.m_vtype,vs.m_vdno,vs.m_vload,vs.m_vgarnd,vs.m_vstatus,v s.m_vbac

30、ktime); m_list1.addstring(str); vs.movenext(); updatedata(false); vs.close(); void cylzview:onbutton3() cveset s1; cdriverset s2; cstring str1=; updatedata(true); for(int i=0;iisopen() m_pset-close(); if(m_upbtime!=0) alv.m_strfilter.format(vno=%s,m_upvno); alv.open(); if(m_upbtime=alv.m_vbacktime)

31、alv.edit(); alv.m_vstatus=free; alv.m_vbacktime=0; alv.update(); alv.movenext(); alv.requery(); m_pset-m_strfilter.format(ovno=%s and obacktime=%d,m_upvno,m_upbtime); m_pset-open(); crecordsetstatus status; m_pset-getstatus(status); m_pset-delete(); if(status.m_lcurrentrecord=0) m_pset-movenext(); e

32、lse m_pset-movefirst(); messagebox(订单已删除,该车辆已返回,可以使用订单已删除,该车辆已返回,可以使用!); m_upvstatus=; m_upvno=; m_upbtime=0; updatedata(false); if(m_upvdno!=) ckd1.open(); ckd1.movefirst(); updatedata(true); m_upvdno=m_upvdno+sp2; while(ckd1.iseof()!=1) if(ckd1.m_dno=m_upvdno) b+; alv.m_strfilter.format(vno=%s,m_u

33、pvno); alv.open(); alv.edit(); alv.m_vdno=m_upvdno; alv.update(); alv.movelast(); alv.requery(); messagebox(修改成功修改成功!); m_upvdno=m_upvno=; updatedata(false); ckd1.movenext(); else ckd1.movenext(); if(b=0) alv.open(); messagebox(无此司机无此司机!请先输入司机信息请先输入司机信息!); m_upvdno=; updatedata(false); alv.close(); m_pset-close(); void cylzview:onbutton9() cveset vs1; cstring strc=; for(int i=0;i10;i+) m_list1.deletestring(0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论