课程设计报告19661873.docx
- 文档编号:4194246
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:32
- 大小:97.65KB
课程设计报告19661873.docx
《课程设计报告19661873.docx》由会员分享,可在线阅读,更多相关《课程设计报告19661873.docx(32页珍藏版)》请在冰豆网上搜索。
课程设计报告19661873
(此文档为word格式,下载后您可任意编辑修改!
)
学年第一学期
课程设计
项目类别:
C#程序设计II课程设计
设计题目:
物流配送管理系统
班级:
11软件
组长学号:
0631
组长姓名:
高海丹王秋红
校内教师:
庞英智
企业教师:
徐铁楠
设计日期:
2012年12月17日——2012年12月28日
一、设计目标
“C#程序设计II”课程设计是在系统的学习了《C#程序设计II》课程后,综合运用所学的知识,设计开发一个小型基于CS模式物流配送管理系统。
它的主要功能有:
区域信息管理、顾客信息管理以及物流配送信息管理和信息查询四大功能。
通过这一具体问题的分析、设计与实现,将理论与应用相结合,学会如何把书本上学到的知识用于解决实际问题,培养动手能力。
二、任务描述
(一)三层架构模式
三层架构模式是有表现层、业务逻辑层,数据层组成的。
表现层:
根据需求进行界面设计,并完成基本交互代码,能够实现将代码提交给业务逻辑层。
业务逻辑层:
将表现层的数据解析成数据层的数据模型,并传递给数据层。
同时接受数据层的返回结果给表现层、
数据层:
数据库连接、接收业务逻辑层传递过来的数据模型,提交给数据库进行处理,并根据实际的具体需求建立存储过程,既数据层开发员不在负责数据库的整体建立。
(二)四大功能区域
物流配送系统一共包括区域信息管理、顾客信息管理以及物流配送信息管理和信息查询四大功能,一下就是这四大功能之间关系的简图。
并且这四大功能与数据相连,实现对数据库的增、删、改、查操作。
三、人员分工
成员
姓名
成员分工
组长
高海丹
负责数据层的建立
组长
王秋红
负责数据库建立
组员
矫美丽
负责业务逻辑层建立及代码实现
组员
牟天琪
负责业务逻辑层接口代码实现
组员
宋飞
表现层的FAreaFGuestFGuestOrder界面设计
组员
张强
表现层的MainFormForderFSearch界面设计
组员
崔志伟
表现层的FAreaFGuest代码设计
组员
赵映寰
表现层的FGuestOrderMainForm代码设计
组员
孙博
表现层的ForderFSearch代码设计
四、设计过程
(一)设计思想
我们小组们采用三层架构模式,使系统的代码不冗长,也有利于系统的编译和运行,如果系统出现错误就会第一时间知道问题出现在哪里。
所以采用三层的架构模式,不仅调理清晰,组员分工明确完成的效率也会提高。
以下就是三层架构逻辑关系图。
也是我们小组们设计设计系统的思想。
(二)数据库设计
根据物流管理系统的需求分析,可见在功能上分为:
区域信息管理、顾客信息管理、物流配送管理和信息查询。
1、数据表的建立
区域信息管理
根据需求分析得到区域信息只需要记录:
区域和区域信息的描述即可,所以可以为表TArea建立如下字段:
物流配送区域:
TArea
AreaID
uniqueidentifier
区域编号
AreaID
AreaName
Varchar(50)
区域名称
AreaName
AreaDesc
Varchar(150)
区域描述
AreaDesc
顾客信息表
TGuest
GuestID
uniqueidentifier
顾客编号
GuestID
GuestName
Varchar(50)
顾客姓名
GuestName
GuestPhone
Varchar(50)
顾客联系电话
GuestPhone
GuestAddress
Varchar(500)
顾客地址
GuestAddress
GuestDesc
Varchar(1000)
顾客说明
GuestDesc
AreaID
uniqueidentifier
所属区域
AreaID
*配送状态表
TOrder(
OrderID
uniqueidentifier
物流单编号
CycleID
OrderNo
Varchar(5)
物流单号
CycleNo
OrderState
Int
配送状态
CycleState
OrderDesc
Varchar(500)
配送备注
CycleDesc
配送时间表
TGuestOrder
GuestOrderID
uniqueidentifier
配送关系编号
GuestCycleID
GuestID
uniqueidentifier
顾客编号
GuestID
OrderID
uniqueidentifier
运单编号
CycleID
OrderOutDate
Datetime
配送日期
CycleOutDate
OrderOverDate
Datetime
送至日期
CycleNextDate
DeliveryStaff
Varchar(5)
配送员
CycleCheckNO
OrderMoney
Float
运费
CycleMoney
isBack
Int
是否被拒收
CycleBack
OrderState
Int
配送状态
CycleState
2、建立视图
根据顾客表物流配送表检索物流与顾客的关系并建立视图V1。
3、存储过程设计
为了方便程序处理,我们小组们需要为每个数据库中的表元素添加关于增、删、改、查、的存储过程,例如为区域增加的存储过程(其他三个表的存储过程也依此进行设计):
插入
ALTERProc[dbo].[Insert_Guest]
@GuestIDuniqueidentifier,
@GuestNamevarchar(50),
@GuestPhonevarchar(50),
@GuestAddressvarchar(500),
@GuestDescvarchar(1000),
@AresIDuniqueidentifier
As
INSERTINTO[TGuest]([GuestID],[GuestName],[GuestPhone],[GuestAddress],[GuestDesc],[AresID])
VALUES(@@@)
修改
ALTERProc[dbo].[Update_Guest]
@GuestIDuniqueidentifier,
@GuestNamevarchar(50),
@GuestPhonevarchar(50),
@GuestAddressvarchar(500),
@GuestDescvarchar(1000),
@AresIDuniqueidentifier
As
Update[TGuest]set[GuestName]=@GuestName,[GuestPhone]=@GuestPhone,[GuestAddress]=@GuestAddress,[GuestDesc]=@GuestDescwhere[GuestID]=@GuestID
删除
ALTERProc[dbo].[Delete_Guest]
@GuestIDuniqueidentifier
As
Deletefrom[TGuest]where[GuestID]=@GuestID
查询
ALTERProc[dbo].[Select_Guest]
@GuestIDuniqueidentifier,
@GuestNamevarchar(50),
@GuestPhonevarchar(50),
@GuestAddressvarchar(500),
@GuestDescvarchar(1000),
@AresIDuniqueidentifier
As
select[GuestID],[GuestName],[GuestPhone],[GuestAddress],[GuestDesc],[AresID]from[TGuest]where
convert(varchar(50),[GuestID])like'%'+convert(varchar(50))+'%'and
[GuestName]like'%'+@GuestName+'%'and
[GuestPhone]like'%'+@GuestPhone+'%'and
[GuestAddress]like'%'+@GuestAddress+'%'and
[GuestDesc]like'%'+@GuestDesc+'%'and
convert(varchar(50),[AresID])like'%'+convert(varchar(50),@AresID)+'%'
(三)建立数据模型及代码实现
根据项目的核心思想,因此需要建立一个类库项目,项目名称为“CommonModel”,并根据数据库表中的结构定义类和属性。
尽量保证表名和类名相同,字段名和属性名相同,字段类型和属性数据类型相同。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
namespaceCommonModel
{
publicclassTGuest
{
privateGuidguestID=Guid.Empty;
privatestringguestName="";
privatestringguestPhone="";
privatestringguestAddress="";
privatestringguestDesc="";
privateGuidareaID=Guid.Empty;
publicGuidGuestID{get{returnguestID;}set{guestID=value;}}
publicstringGuestName{get{returnguestName;}set{guestName=value;}}
publicstringGuestPhone{get{returnguestPhone;}set{guestPhone=value;}}
publicstringGuestAddress{get{returnguestAddress;}set{guestAddress=value;}}
publicstringGuestDesc{get{returnguestDesc;}set{guestDesc=value;}}
publicGuidAreaID{get{returnareaID;}set{areaID=value;}}
}
}
其他三个表同上
(四)表现层的设计以及代码实现
1、项目总揽
表现层开发员需要了解在项目的关系:
CycleManagement项目:
是项目运行的界面项目,负责与用户交互;
CycleInterface项目:
是负责与业务逻辑层之间协商的规范,负责与业务逻辑层进行交互;
CommonModel项目:
是负责表现层使用数据模型;
当项目开发时,表现层与业务逻辑层之间需要交流的便是CycleInterface项目中BLL文件夹内的借口文件;
2、主窗口——MainForm
在“LogisticsManagement”项目中右击,选择“新建项”,在项目列表中选择“Windows窗体”,名称为“MainForm.cs”;
窗体建立后,设置窗体属性:
MainForm.IsMdiContainer=true
MainForm.Text="物流配送管理系统"
MainForm.StartPosition=CenterScreen
在需求分析中,物流配送管理系统的主要功能有:
区域信息管理、顾客信息管理以及物流配送信息管理和信息查询四大功能,因此可以为主窗体添加一个菜单栏,并设置如下菜单:
基础信息管理(M)
信息查询(S)
退出系统(X)
区域管理(A)
顾客管理(G)
物流配送管理(C)
(无)
(无)
单击“区域管理”菜单,则调用窗体“FArea”;
单击“顾客管理”菜单,则调用窗体“FGuest”;
单击“物流配送管理”菜单,则调用窗体“FLogistics”;
单击“信息查询”菜单,则调用窗体“FSearch”;
单击“退出系统”菜单,则执行Application.Exit()退出应用程序。
因此,为每个菜单编辑类似如下的代码(假设FArea窗体已经存在)
FAreaform=newFArea();
form.MdiParent=this;
form.StartPosition=FormStartPosition.CenterParent;
form.WindowState=FormWindowState.Maximized;
form.Show();
该窗体由于属于各个功能窗体的调用总窗体,因此不需要与业务逻辑层进行任何的交互操作。
3、区域管理窗口——FArea
窗体控件布局
根据需求分析,在区域管理的功能上,只需要做到增、删、查即可,不需要为区域管理添加其他功能,因此可将区域管理功能的界面设计如图所示界面:
业务逻辑的功能统计
根据界面的设计,我们小组们知道该功能需要:
查询出目前所有区域的信息
创建区域信息
修改区域信息
删除区域信息
操作逻辑
窗体加载成功后,通过查询功能将区域信息加载到内存,并在区域信息的数据源列表中的第一个位置新增具有“新建区域”信息的区域项目;
单击“创建”按钮,则调用业务逻辑层的创建方法,并传递区域名和区域描述两个文本框的内容;
单击“修改”按钮,则调用业务逻辑层的修改方法,并传递区域编号、区域名、区域描述;
单击“删除”按钮,则调用业务逻辑层的删除方法,并传递区域编号;
单击“取消”按钮,则使区域信息框隐藏,既Visible=false;
窗体加载时读取数据
双击窗体标题栏,进入代码编写界面,并在FArea_Load方法内书写如下代码:
IAreabll=newAreaBLL();
List
TAreaempty=newTArea();
empty.ID=Guid.Empty;
empty.Name="新建区域";
empty.Description="";
list.IndexOf(empty,0);
lstAreaList.Items.Clear();
foreach(TAreatmpinlist)
{
ListViewItemlvi=newListViewItem(tmp.Name);
lvi.SubItems.Add(tmp.ID.ToString());
lvi.SubItems.Add(tmp.Description);
lvi.ToolTipText=tmp.Name;
lvi.Tag=tmp;
lvi.ImageIndex=0;
lstAreaList.Items.Add(lvi);
}
双击ListView操作
双击ListView后,可能引发的三种情况:
代码如下:
if(lstAreaList.SelectedItems.Count!
=0)
{
TAreaarea=(TArea)lstAreaList.SelectedItems[0].Tag;
txtAreaName.Text=area.Name;
txtAreaDesc.Text=area.Description;
if(area.ID==Guid.Empty)
{
grpAreaInfo.Visible=true;
btnCreate.Enabled=true;
btnModify.Enabled=false;
btnDelete.Enabled=false;
btnCancel.Enabled=true;
grpAreaInfo.Tag=area;
txtAreaName.Text="";
txtAreaDesc.Text="";
}
else
{
grpAreaInfo.Visible=true;
btnCreate.Enabled=false;
btnModify.Enabled=true;
btnDelete.Enabled=true;
btnCancel.Enabled=true;
grpAreaInfo.Tag=area;
}
}
单击创建
单击创建后,由于需要与数据库进行交互,因此需要通过业务逻辑层的方法来创建。
在创建之前,需要对数据进行简单的验证,例如是否为空,数据是否合法等:
if(txtAreaName.Text==""){MessageBox.Show("区域名称不能为空!
");return;}
IAreabll=newAreaBLL();
if(bll.Create(txtAreaName.Text,txtAreaDesc.Text))
{
MessageBox.Show("区域新建成功!
");
grpAreaInfo.Visible=false;
}
else
{
MessageBox.Show("区域新建失败!
");
}
单击修改
单击修改后,由于需要与数据库进行交互,因此需要通过业务逻辑层的方法来修改,在修改之前,需要对数据进行简单的验证,例如是否为空,数据是否有效等:
if(txtAreaName.Text==""){MessageBox.Show("区域名称不能为空!
");return;}
IAreabll=newAreaBLL();
if(bll.Modify(((TArea)grpAreaInfo.Tag).ID,txtAreaName.Text,txtAreaDesc.Text))
{
MessageBox.Show("区域修改成功!
");
grpAreaInfo.Visible=false;
}
else
{
MessageBox.Show("区域修改失败!
");
}
单击删除
单击删除与修改相似,只是这里不再需要判断数据是否合法,只需要将ID传递给业务逻辑层即可:
if(MessageBox.Show(this,"确定要删除该区域么?
","删除",MessageBoxButtons.OKCancel)==DialogResult.OK)
{
IAreabll=newAreaBLL();
if(bll.Delete(((TArea)grpAreaInfo.Tag).ID))
{
MessageBox.Show("区域删除成功!
");
grpAreaInfo.Visible=false;
}
else
{
MessageBox.Show("区域删除失败!
");
}
}
单击取消
单击取消,只需要将GroupBox控件隐藏即可:
grpAreaInfo.Visible=false;
4、顾客管理窗口——FGuest
顾客管理窗口的界面与区域管理相似,同样应用ListView显示顾客数据,适用GroupBox收集和显示顾客信息数据,可见右图:
在顾客管理窗口的顾客信息GroupBox中,逻辑部分便是“顾客类型”选择后,应使对应的Panel处于可用状态,以及单击保存时,需要判断该顾客是需要新建,还是需要保存修改。
窗体加载
但在窗体加载过程中,需要为区域下拉框添加数据源:
IAreaarea=newAreaBLL();
cmbArea.DataSource=area.GetList();
cmbArea.DisplayMember="Name";
双击ListView项目
if(lstAreaList.SelectedItems.Count!
=0)
{
TAreaarea=(TArea)lstAreaList.SelectedItems[0].Tag;
txtAreaName.Text=area.Name;
txtAreaDesc.Text=area.Description;
if(area.ID==Guid.Empty)
{
grpAreaInfo.Visible=true;
btnCreate.Enabled=true;
btnModify.Enabled=false;
btnDelete.Enabled=false;
btnCancel.Enabled=true;
grpAreaInfo.Tag=area;
txtAreaName.Text="";
txtAreaDesc.Text="";
}
else
{
grpAreaInfo.Visible=true;
btnCreate.Enabled=false;
btnModify.Enabled=true;
btnDelete.Enabled=true;
btnCancel.Enabled=true;
grpAreaInfo.Tag=area;
}
}
切换RadioButton
可设计为:
单击个人家庭RadioButton时,第一个Panel可用,第二个Panel不可用;单击个体商户RadioButton时,第一个Panel不可用,第二个Panel可用
privatevoidrdoHome_CheckedChanged(objectsender,EventArgse)
{
pnlHome.Enabled=true;
pnlShop.Enabled=false;
}
privatevoidrdoShop_CheckedChanged(objectsender,EventArgse)
{
pnlHome.Enabled=false;
pnlShop.Enabled=true;
}
单击保存
首先,判断双击项目是不是“新建顾客”的项目,如果是“新建顾客”的项目,则执行业务逻辑层中新建的方法,否则需执行修改的方法。
操作成功后隐藏Gr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 19661873
![提示](https://static.bdocx.com/images/bang_tan.gif)