1、物流管理系统学 院专 业班 级学 号姓 名指导教师教师职称年 月 日摘要【摘要】随着市场经济的高速发展,制造业、商业企业逐步接受着第三方物流服务。越来越多的企业认识到物流企业外包是降低成本、提高服务水平的有效渠道。物流管理的特点是以客户为核心、构建面向客户的业务流程支持各种形式、各种需求的现在企业中的业务模式。系统支持多形式客户的数据共享、提高作业效率、监控整个流程、提供完整的货品、进行订单跟踪,并且特别关注对各环节业务的监控及例外情况的监控。【关键词】 客户 物流 物流管理系统目录摘要 .1目录 .1引言 .11 系统分析 .21.1 需求分析 .21.2 可行性分析 .22 总体设计 .2
2、2.1 项目规划 .22.2 系统功能结构图 .33 详细设计 .33.1 系统登录设计 .33.2 车辆调度安排 .63.3 托运申请单管理 .83.4 货物托运管理 .113.5 在途跟踪管理 .173.6 信息查询 .20附录 A 参考文献 .30附录 B 数据表结构 31附录 C 文件架构图 37引言在当今高速发展的信息社会,现代物流行业突飞猛进发展,伴随着我国国民经济连续多年的高速增长,为现代物流发展创造了良好的条件。目前,我国各类物流企业有 14 万家左右,展望整个 21 世纪,可以说现代物流业还将有更大的发展。在发达国家,物流理论促使物流实践快速发展。经济全球化及现代物流业发展的
3、系统化、信息化、仓储运输的现代化和综合化等趋势,对我国物流业的发展提出了全方位的挑战。传统物流行业的操作模式已经不适应现代的物流行业,如何缩短物流过程,降低产品库存,加速对市场的反应,这是所有企业所面对的问题。本系统就是针对这些问题根据中小型企业的实际需求而开发的一套物流管理系统。系统的开发能够帮助企业实现对物流全过程的优化调度和动态控制,高效整合企业的物流业务,以全面提高经济效益和效率为目的,提供高效、实用、技术的物流管理系统和运营手段。物流管理系统是集现代运输、仓储配送、搬运、调度、跟踪为一体的网络系统,系统的开发实现了商品从原料供应商、制造商、分销商到零售商再到消费者的各个环节的有机结合
4、。 2 1 系统分析1.1 需求分析通过市场调查,要求本系统具有以下功能: 统一友好的操作界面,能保证系统的易用性。 规范、完善的基础信息设置。 灵活的报表设计及打印功能。 实现货物申请、托运、跟踪与验收的全过程。 全方位的信息查询功能。 系统日志详细记录各种操作,提供追查的有力依据。 完善的权限管理,增强系统的安全性。 强大的数据备份及恢复功能,保证系统数据的安全性。1.2 可行性分析由于传统物流行业操作过程复杂,手续繁多,业务信息多,围绕这些信息的处理也很纷杂。而且,物流行业竞争激烈,这种竞争,一方面表现在发展客户的市场开拓上,另一方面也存在于收集处理信息的速度、广度和深度,以及在业务操作
5、中对业务数据处理的准确性和严密性,而更高层次上,还牵涉到公司决策层对整体业务的控制和协调。物流管理系统从物流行业的实际需求出发,参照先进的物流理念和多家领先的物流公司实际的运营流程开发而成,系统从完善的基础信息设置到货物的托运管理、在线跟踪,信息查询、到最后各种报表的生成,清晰的业务流程,使操作人员能够按照流程清晰的进行实际的操作,保证物流运作有序而高效的进行。2 总体设计2.1 项目规划物流管理系统是一个典型的数据库管理系统,系统由基本信息设置、货物托运管理、信息查询、报表管理、系统管理等模块组成,规划系统功能模块如下: 基本信息设置模块该模块主要负责完成部门资料设置、职务信息设置、公司资料
6、设置、员工资料设置、客户资料设置、司机资料设置和车辆资料设置。 货物托运管理模块该模块主要由车辆调度安排、托运申请单管理、货物托运单管理、货物验收单管理和车辆配送跟踪记录单管理几部分组成。 信息查询模块该模块由货物申请单查询、车辆调度信息查询、货物托运信息查询、货物托运验收查询和车辆在途跟踪查询几部分组成。 报表管理模块包括货物申请单报表、货物托运单报表和货物验收单报表 3 部分。 系统管理模块 3 包括查看日志、删除日志、用户管理、数据备份、数据恢复和系统数据清理几部分。2.2 系统功能结构图物流管理系统的系统功能结构图如图 1 所示。图 1 系统功能结构图3 详细设计3.1 系统登录设计系
7、统登录主要用于对登录物流管理系统的用户进行安全性检查,以防止非法用户登录该系统。根据给管理员分配的权限,登录用户可以根据自己所具有的权限操作系统中相应的功能。在登录系统时验证操作员及其密码,主要通过 ADO 控件中记录集(RecordSet)对象结合If 语句判断用户选定的操作员及其输入的密码与数据库中的操作员和密码是否相同来实现,如果相同则允许登录,并给予相应的权限,否则将不允许用户登录。系统登录的运行结果如图 2 所示。 4 图 2 系统登录窗体的运行结果1窗体设计(1)在工程中新建 1 个窗体,将窗体的名称设置为“frm_xtdl” ,BorderStyle 属性设置为“0-None”,
8、通过设置 Picture 属性为窗体添加图片。(2)在窗体上添加 Adodc 控件,由于该控件属于 ActiveX 控件,在使用之前必须从“部件”对话框中添加到工具箱。添加方法如下:在“工程”/“部件”对话框中勾选 “Microsoft Ado Data Controls 6.0(SP4)”列表项,单击【确定】按钮之后即可将 Ado 控件添加到工具箱当中。(3)在窗体中添加 1 个 ComboBox 控件和文本框控件,分别设置名称为 Name 属性为“Cbx_Name”和“txt_Password ”,设置 BorderStyle 属性为“0-None” ,将 ComboBox 控件的Text
9、 属性设置为“MR ”。(4)在窗体中添加 2 个 CommandButton 控件,分别将 Name 属性设置为“Cmd_Ok”和“Cmd_Cancel”,Caption 属性设置为“登录”和“取消” 。登录窗体的设计结果如图 3 所示图 3 系统登录窗体的设计界面2代码设计在代码窗口的声明部分定义如下变量:Dim itmX As ListItem 定义一个ListItem对象Dim key As String 定义字符串变量在窗体装载事件中,通过 ADO 控件的 ConnectionString 属性建立数据库连接,同时将所有操作员的姓名添加到 Cbx_Name 控件当中,代码如下:Pri
10、vate Sub Form_Load()Call WHScreen 调用获取屏幕分辨率的过程函数使用代码连接数据库与数据表Adodc1.ConnectionString = PublicStr 5 Adodc1.RecordSource = “select * from tb_user“Adodc1.RefreshIf Adodc1.Recordset.RecordCount 0 ThenAdodc1.Recordset.MoveFirstCbx_Name.Clear 在添加数据时,首先清空控件中的内容Do While Adodc1.Recordset.EOF = False 将操作员信息添加
11、到ListView控件当中Cbx_Name.AddItem (Adodc1.Recordset.Fields(“user_name“)Adodc1.Recordset.MoveNextLoopEnd IfIf TWidth 0 ThenMPassword = Adodc1.Recordset.Fields(“user_mm“)If Txt_Password.Text = MPassword Then 判断数据的密码是否正确Name1 = Cbx_Name.TextFrm_Main.StatusBar1.Panels.Item(2).Text = “当前操作员: “ + Adodc1.Recor
12、dset.Fields(“user_name“)Frm_Main.Show 通过身份验证则显示主窗体,登录到系统当中Unload MeElseMsgBox “密码不正确,请您确认后重新输入“, , “提示信息“Txt_Password.Text = “Txt_Password.SetFocusEnd IfElseMsgBox “对不起 没有此用户的信息“, , “提示信息“Cbx_Name.Text = “Txt_Password.Text = “End IfEnd If 6 End Sub如果在输入密码的文本框中按下Enter键,则将调用【确定】按钮的单击事件,判断登录用户是否合法,代码如下
13、所示。Private Sub Txt_Password_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = 13 ThenCall Cmd_Ok_Click 调用确定按钮的单击事件代码End IfEnd Sub3.2 车辆调度安排车辆调度安排是物流管理过程中的重要环节,物流公司在接到托运货物信息之后,首要的问题是安排托运货物的车辆。在本系统当中通过车辆调度安排填写安排托运车辆的信息,然后打印出车辆调度通知单,并将通知单发放到托运司机的手中,司机根据调度通知单上的信息执行托运任务。通过单击窗体中的 Cmd_Select 按钮选择车牌
14、号码,然后输入其他一些辅助的信息,最后保存车辆调度安排信息。车辆调度安排模块的运行结果如图 4 所示。图 4 车辆调度安排窗体的运行结果1窗体设计(1)在工程中新建 1 个窗体,将窗体的名称设置为“frm_Cldd” ,BorderStyle 属性设置为“1-Fixed Single”,MaxButton 属性设置 False。(2)在窗体上添加 1 个 Toolbar 控件和 1 个 ImageList 控件。(3)在窗体的 Toolbar 控件上单击鼠标右键,在弹出的快捷菜单中选择“属性”项,在弹出的“属性页”对话框中设置窗体的工具栏,设计完成的工具栏如图 5 所示。(4)在窗体中添加 1
15、 个 Frame 控件,在 Frame 控件上添加 1 个文本框控件数组,并为每个文本框控件 配置 1 个标签控件,并且设置相应的 Caption 属性值,如图 5 所示。(5)在窗体上添加 1 个 DTPicker 控件,命名为 DT1,用于输入或显示托运司机执行任务的日期时间。(6)在窗体上添加 1 个 Ado 控件和 1 个 DataGrid 控件,将 DataGrid 控件的名称设置为Dgr_Sjll,DataSource 属性设置为 Adodc1,AllowUpdate 属性值设置为 False。(7)在窗体中添加 1 个标签控件,命名为 Lbl_Num。(8)在窗体上添加 1 个时
16、钟控件 Timer1,在属性窗口中将控件的 Interval 属性值设置为 7 60。车辆调度安排窗体的设计结果如图 5 所示。图 5 车辆调度安排窗体的设计结果2代码设计工具栏中的控制按钮控制着窗体的各项操作,在 Toolbar 控件 Tbr_xxcz 的 ButtonClick 事件当中,通过选择 Select Case 语句的索引值(单击工具栏中的按钮执行相应的索引值)调用相应的过程来完成添加、删除、修改和保存等操作的功能,保存过程事件的代码如下:Private Sub Saves() 保存信息的过程If Text1(0).Text = “ Or Text1(3).Text = “ Th
17、enMsgBox “重要信息不能为空值“, 48, “提示信息“ElseAdoRs.Open “select * from tb_Goods_cldd where cldd_cphm=“ + Text1(0).Text + “, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenMsgBox “该信息已经存在“, 48, “提示信息“AdoRs.Close 关闭记录集对象ElseAdoRs.Close 关闭记录集对象c = MsgBox(“确认保存信息吗“, 33, “ 提示信息“)If c = vbOK ThenSet AdoRs = Cnn.Execu
18、te(“insert into tb_Goods_cldd values(“ &Txt_id & “,“ & Text1(0)&“,“ & Text1(1) & “,“ & Text1(2) & “,“& Text1(3) & “,“ & Str(DT1.Value) & “,“ & Text1(4)& “,“ & Text1(5)& “,“ & Txt_bz & “)“)MsgBox “数据保存成功“, 64, “提示信息“ElseEnd IfAdodc1.RecordSource = “select * from tb_Goods_cldd order by cldd_id“Adodc1.
19、RefreshCall DBGConEnd IfCall Tbr_cortrol(Tbr_xxcz, True)End If 8 End Sub用户自定义修改信息过程事件的代码如下:Private Sub Edits() 修改信息的过程c = MsgBox(“确认修改信息吗“, 33, “ 提示信息“)If c = vbOK ThenSet AdoRs = Cnn.Execute(“UPDATE tb_Goods_cldd SET cldd_id=“ + Txt_id+ “,cldd_cphm=“ + Text1(0) + “,cldd_czxm=“ + Text1(1) + “,cldd_s
20、jxm=“+ Text1(2) + “,cldd_rwsj=“ + Str(DT1.Value) + “,cldd_phmc=“ + Text1(4)+ “,cldd_shdd=“ + Text1(5) + “,cldd_bz=“ + Txt_bz + “ where cldd_id=“+ Txt_id.Text + “)MsgBox “数据修改成功“, 64, “提示信息“Adodc1.RecordSource = “select * from tb_Goods_cldd order by cldd_id“Adodc1.RefreshStrId = Txt_id.TextStrTitle =
21、 Text1(0).TextCall joinRZ 添加修改信息日志Call DBGConElseEnd IfEnd Sub用户自定义删除信息过程事件的代码如下:Private Sub Deletes() 删除信息c = MsgBox(“确认删除该信息吗“, 17, “ 提示信息“)If c = vbOK ThenOn Error Resume Next 执行错误处理Set AdoRs = Cnn.Execute(“Delete tb_Goods_cldd from tb_Goods_cldd wherecldd_id=“ + Txt_id.Text + “)Adodc1.Refresh 刷新
22、数据信息End IfFor i = 0 To 5Text1(i).Text = “Next iTxt_bz.Text = “End Sub3.3 托运申请单管理在正式托运货物之前,需要进行托运货物申请,在进行托运货物申请时需要填写托运货物申请单,托运申请单经过核对之后,才可以填写货物托运单进行托运货物。在托运申请单中记录的托运货物的详细信息,以便托运货物时进行核对。货物托运申请管理模块的运行结果如图 6 所示。 9 图 6 货物托运申请管理模块运行结果1窗体设计(1)在工程中新建 1 个窗体,将窗体的名称设置为“frm_Tysq” ,BorderStyle 属性设置为“1-Fixed Sing
23、le”,MaxButton 属性设置“False” 。(2)在窗体上添加 1 个 Toolbar 控件和 1 个 ImageList 控件,为窗体设计工具栏。(3)在窗体中添加 1 个 Frame 控件,在 Frame 控件上添加 1 个文本框控件数组,并为每个文本控件配置 1 个标签控件,设置相应的 Caption 属性值,如图 7 所示。(4)在 Frame 控件上添加 2 个 DTPicker 控件,分别名称命名为 DT1 和 DT2,用于输入或显示出货日期时间和开票日期。(5)在窗体上添加 1 个 Ado 控件。(6)在窗体中添加 1 个标签控件,命名为 Lbl_Num。(7)在窗体上
24、添加 1 个时钟控件 Timer1,在属性窗口中将控件的 Interval 属性值设置为60。货物托运申请单管理窗体的设计结果如图 7 所示。 10 图 7 货物托运管理窗体的设计结果2代码设计当窗体启动时,锁定窗体中文本框,禁止输入字符信息,同时通过 Ado 控件的ConnectionString 属性连接到数据库,实现代码如下:Private Sub Form_Load()Call LoadFile 在窗体加载的时候显示数据信息For i = 1 To 20Text1(i).Locked = True 锁定文本框,禁止输入字符信息Next iAdodc1.ConnectionString
25、= PublicStr 通过代码连接到数据库Adodc1.RecordSource = “select * from tb_Goods_sqd order by sqd_lszh“Adodc1.RefreshDT1.Value = DateCall Tbr_cortrol(Tbr_xxcz, True)End Sub单击窗体中的工具栏按钮,完成相应的添加、删除、修改、保存和打印的操作,Toolbar 控件 Tbr_xxcz 的 ButtonClick 事件代码如下所示:Private Sub Tbr_xxcz_ButtonClick(ByVal Button As MSComctlLib.Bu
26、tton)Select Case Button.IndexCase 1 添加信息Call Tbr_cortrol(Tbr_xxcz, False)For i = 0 To 20Text1(i).Locked = FalseText1(i).Text = “Next iText1(0).SetFocusAdoRs.Open “select * from tb_Goods_sqd where sqd_lszh like %“ + Format(Date, “yyyymmdd“) + “% order by sqd_lszh“, Cnn, adOpenKeyset 根据日期产生流水账号If AdoR
27、s.RecordCount 0 ThenAdoRs.MoveLastTxt_id.Text = Val(AdoRs.Fields(“sqd_lszh“) + 1ElseTxt_id.Text = Format(Date, “yyyymmdd“) & “0000001“End IfAdoRs.CloseCase 2 删除信息Call DeletesCase 3 修改信息Call EditsCase 4 保存信息Call SavesCase 5Call Tbr_cortrol(Tbr_xxcz, True)For i = 1 To 20Text1(i).Text = “Text1(1).SetFo
28、cusNext i 11 Case 6 打印信息Unload MeEnd SelectEnd Sub通过文本框的 Change 事件,来实现在另一个文本框中自动计算合计金额的功能,实现的具体代码如下所示:Private Sub Text1_Change(Index As Integer)If Index = 7 Then Text1(15).Text = Val(Text1(7).Text) + Val(Text1(11).Text)ElseIf Index = 11 Then Text1(15).Text = Val(Text1(7).Text) + Val(Text1(11).Text)E
29、lseIf Index = 15 Then Text1(15).Text = Val(Text1(7).Text) + Val(Text1(11).Text)End IfEnd Sub3.4 货物托运管理货物托运管理是本系统的核心,在货物托运申请完成之后,就可以填写货物托运单,托运司机根据货物托运单将货物托运到客户手中。对于同一张货物托运单,可以托运多种不同的货物,在托运管理窗体中可以添加或删除托运货物,还可以通过 ListView 控件浏览货物托运单信息。货物托运管理模块的运行结果如图 8 所示,单击工具栏中的【添加货物】按钮,将弹出增加托运货物窗体,如图 9 所示。图 8 货物托运管理模块
30、的运行结果 12 图 9 增加托运货物窗体1货物托运窗体及增加托运货物窗体的设计(1)在工程中新建一个窗体,将窗体的名称设置为“frm_Hpty” ,BorderStyle 属性设置为“1-Fixed Single”,MaxButton 属性设置 False。(2)在窗体上添加 Toolbar 控件,根据前面所介绍的方法为窗体设计工具栏。(3)在窗体中添加 2 个 ImageList 控件。(4)在窗体上添加 1 个 ListView 控件。(5)在 ListView 控件上单击鼠标右键,在弹出的快捷菜单中选择“属性”项,在弹出的“属性页”对话框中选择“通用”选项卡,在该选项卡中选取“整行选择
31、” 、 “网格行”和“热跟踪”等复选框,在“查看”旁的列表框中选择 3-lvwReport,如图 10 所示。图 10 设置控件的显示模式(6)在 ListView 控件上单击鼠标右键,在弹出的快捷菜单中选择“属性”项,在弹出“属性页”对话框中选择“列首”选项卡,在该选项卡中单击【插入列】按钮,然后在“文本”文本框中输入插入列的标题名称,在“宽度”文本框中输入插入列的宽度,如图 11 所示。 13 图 11 设置插入列的属性(7)在 ListView 控件上单击鼠标右键,在弹出的快捷菜单中选择“属性”项,在弹出的“属性页”对话框中选择“图像列表”选项卡,在该选项卡中的“普通”和“列标头”列表框
32、中分别选择“ImageList2” ,如图 12 所示。图 12 连接 ImageList2 控件(8)在窗体上添加 1 个 Ado 控件。(9)在窗体中添加 3 个 Frame 控件,分别在 Frame 控件中添加文本框控件和 DataGrid 控件,将 DataGrid 控件的名称设置为 Dgr_Sjll,DataSource 属性设置为 Adodc1,BackColor 属性值设置为&H00FFFFC0&,设计完成的界面如图 13 所示。(10)在窗体中添加 1 个标签控件,名称命名为 Lbl_Num。(11)在窗体上添加 1 个时钟控件 Timer1,在属性窗口中将控件的 Interv
33、al 属性值设置为60。货物托运管理窗体的设计结果如图 13 所示。 14 图 13 货物托运管理窗体的设计界面(12)在工程中添加 1 个窗体,将窗体命名为 Frm_Tyhwgl,该窗体作为货物托运管理的子窗体,用于为完成为货物托运单添加托运货物的操作。(13)将该窗体的 BorderStyle 属性设置为“1-Fixed Single”。(14)在该窗体上添加 1 个 Ado 控件。(15)在该窗体中添加 1 个 Frame 控件,在 Frame 控件中添加文本框控件和标签控件。(16)在该窗体中添加 1 个 DataGrid 控件,将 DataGrid 控件的名称设置为Dgr_Sjll,
34、DataSource 属性设置为 Adodc1,设计完成的界面如图 14 所示。(17)在窗体上添加 4 个 CommandButton 控件,分别将控件的名称命名为“Cmd_Add” 、“Cmd_Save”、 “Cmd_Del”、 “Cmd_Cancel”,Caption 属性设置为“添加” 、 “保存” 、 “删除” 、“取消” 。图 14 托运货物管理窗体的设计界面2货物托运管理窗体的代码设计在窗体启动时,通过调用 LoadFile 过程,在窗体上显示数据,同时利用 Ado 对象计算出当前数据库中数据记录的条数,代码如下:Private Sub Form_Load()Call Refre
35、shDataCall LoadFileFor i = 1 To 21 锁定文本框,禁止输入内容 15 Text1(i).Locked = TrueNext iAdoRs.Open “select * from tb_Goods_tyd order by tyd_tydh“, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenLbl_Num.Caption = “当前数据表中共有 “ & AdoRs.RecordCount & “ 条记录“End IfAdoRs.CloseCall Tbr_cortrol(Tbr_xxcz, True)End Sub单击工具
36、栏中的控制按钮,通过 Select Case 语句控制工具栏中的按钮,完成添加、删除、修改、保存、添加货物和删除货物等操作,实现的代码如下:Private Sub Tbr_xxcz_ButtonClick(ByVal Button As MSComctlLib.Button)Select Case Button.IndexCase 1 Call Tbr_cortrol(Tbr_xxcz, False)For i = 0 To 21Text1(i).Locked = FalseText1(i).Text = “Next iText1(0).SetFocus根据日期产生流水账号AdoRs.Open
37、 “select * from tb_Goods_tyd where tyd_tydh like %“ + Format(Date, “yyyymmdd“) + “% order by tyd_tydh“, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenAdoRs.MoveLastTxt_id.Text = Val(AdoRs.Fields(“tyd_tydh“) + 1ElseTxt_id.Text = Format(Date, “yyyymmdd“) & “00001“End IfAdoRs.CloseCase 2 删除信息Call Deletes
38、Case 3 修改信息Call EditsCase 4 保存信息Call SavesCase 5Call Tbr_cortrol(Tbr_xxcz, True)For i = 1 To 21Text1(i).Text = “Text1(1).SetFocusNext iCase 6 添加货物TStrs = Txt_id.TextFrm_Tyhwgl.Cmd_Del.Enabled = False 使添加货物窗体中的“删除”按钮不可用Frm_Tyhwgl.Show 1 Case 7 删除货物 16 TStrs = Txt_id.TextFrm_Tyhwgl.Cmd_Add.Enabled = F
39、alseFrm_Tyhwgl.Cmd_Save.Enabled = FalseFrm_Tyhwgl.Show 1Case 8Unload MeEnd SelectEnd Sub通过单击选择 ListView 控件中的元素(托运单号) ,然后调用 DataLoad 过程在窗体上显示相对应托运单号的数据信息,同时查询该记录是否被修改过,如果修改过则将修改时间及修改人信息显示在窗体的 Txt_ysrq 和 Txt_ysr 文本框当中,代码如下所示:Private Sub ListView1_Click()AdoRs.Open “select * from tb_Goods_tyd where tyd
40、_tydh=“ & ListView1.SelectedItem & “ order by tyd_tydh“, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenCall DataLoad 调用显示数据的过程End IfAdoRs.Close 关闭数据集对象AdoRs1.Open “select * from tb_Goods_khys where khys_tydh=“ & ListView1.SelectedItem & “, Cnn, adOpenKeysetIf AdoRs1.RecordCount 0 ThenTxt_ysrq.Text = A
41、doRs1.Fields(“khys_ysrq“)Txt_ysr.Text = AdoRs1.Fields(“khys_ysr“)ElseTxt_ysrq.Text = “Txt_ysr.Text = “End IfAdoRs1.CloseCall ShowData 调用数据刷新的过程Call DBGConEnd Sub通过时钟控件,将当前数据库中的记录条数显示在标签控件 Lbl_Num 当中,实现的代码如下所示:Private Sub Timer1_Timer()On Error Resume Next 执行错误处理的语句Lbl_Num.Caption = “当前数据表中共有 “ & Ado
42、Rs.RecordCount & “ 条记录“End Sub3添加托运货物信息窗体的代码设计在增加托运货物窗体中单击【添加】按钮,清空窗体中文本框的信息,代码如下:Private Sub Cmd_Add_Click()For i = 1 To 4Text1(i).Text = “Next iText1(1).SetFocusEnd Sub在窗体中单击【保存】按钮,在确认该货物信息没有被保存之后,保存所添加的货物信息,同时刷新窗体中的数据信息,代码如下: 17 Private Sub Cmd_Save_Click()If Text1(0).Text = “ ThenMsgBox “托运单号不能为
43、空“, 64, “提示信息“ElseAdoRs.Open “select * from tb_Goods_hwzx where hwzx_hwid=“ + Text1(1) +“, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenMsgBox “该货物已经添加过“, 64, “提示信息“Elsec = MsgBox(“确认保存信息吗“, 33, “ 提示信息“)If c = vbOK ThenSet AdoRs = Cnn.Execute(“insert into tb_Goods_hwzx values(“ &Text1(1) & “,“ & Text
44、1(2) & “,“ & Text1(0) & “,“ & Text1(3) & “,“ & Text1(4)& “)“)MsgBox “数据保存成功“, 64, “提示信息“Adodc1.RecordSource = “select * from tb_Goods_hwzx where hwzx_sqdh=“ + Text1(0) + “ order by hwzx_hwid“Adodc1.RefreshCall DBGConCmd_Add.SetFocusEnd IfEnd IfAdoRs.CloseEnd IfEnd Sub3.5 在途跟踪管理在途跟踪是对正在托运的货物信息进行管理,托运
45、司机在托运货物的过程中,每到一个地方或者在托运过程中出现某些异常情况,就会给托运公司反馈一个信息,托运公司将反馈回来的信息进行记录,并且对反馈回来的异常情况进行处理,这个过程就是在途跟踪。在途跟踪管理模块的运行结果如图 15 所示。图 15 在途跟踪管理模块运行结果 18 1窗体设计(1)在工程中新建 1 个窗体,将窗体的名称设置为“Frm_Ztgz” ,BorderStyle 属性设置为“1-Fixed Single”,MaxButton 属性设置 False。(2)在窗体上添加 1 个 Toolbar 控件和 1 个 ImageList 控件。(3)在窗体上添加 1 个 ListView
46、控件。(4)在窗体上添加 1 个 Ado 控件。(5)在窗体中添加 3 个 Frame 控件,在 Frame 控件中添加文本框控件,并设置控件的相关属性。(6)在窗体上添加 DataGrid 控件,将 DataGrid 控件的名称设置为 Dgr_Sjll,DataSource属性设置为 Adodc1。在途跟踪管理窗体的设计结果如图 16 所示。图 16 在途跟踪管理窗体的设计2代码设计通过单击选择 ListView 控件中的元素(托运单号) ,在窗体中即可以显示相对应托运单号的数据信息,同时查询 tb_Goods_ztgzlx 数据表,从中检索出该托运单号的跟踪路线信息,将其显示在窗体的 Tx
47、t_lx.文本框当中,实现的代码如下所示:Private Sub ListView1_Click()AdoRs.Open “select * from tb_Goods_ztgz where ztgz_cydh=“ & ListView1.SelectedItem & “ order by ztgz_cydh“, Cnn, adOpenKeysetIf AdoRs.RecordCount 0 ThenText1(0).Text = AdoRs.Fields(“ztgz_id“)Text1(1).Text = AdoRs.Fields(“ztgz_cydh“)Text1(2).Text = Ad
48、oRs.Fields(“ztgz_sjxm“)Text1(3).Text = AdoRs.Fields(“ztgz_cphm“)DT1.Value = AdoRs.Fields(“ztgz_dasj“)Text1(4).Text = AdoRs.Fields(“ztgz_sjsj“)Text1(5).Text = AdoRs.Fields(“ztgz_dadd“)Text1(6).Text = AdoRs.Fields(“ztgz_bz“)End IfAdoRs.Close 关闭记录集对象AdoRs1.Open “select * from tb_Goods_ztgzlx where ztgzlx_tydh=“ & ListView1.SelectedItem & “, Cnn, adOpenKeyset 19 If