2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、<p>  2012-2013學(xué)年第一學(xué)期</p><p><b>  課 程 設(shè) 計</b></p><p> 項目類別:C#程序設(shè)計II課程設(shè)計</p><p> 設(shè)計題目:物流配送管理系統(tǒng)</p><p> 班 級 :</p><p> 組長學(xué)號 :</p><

2、;p> 組長姓名 :</p><p> 校內(nèi)教師:</p><p> 企業(yè)教師:</p><p> 設(shè)計日期: 2012年12月 17 日——2012年12月 28日</p><p><b>  一、設(shè)計目標(biāo)</b></p><p>  “C#程序設(shè)計II”課程設(shè)計是在系統(tǒng)的學(xué)習(xí)了《C#程序

3、設(shè)計II》課程后,綜合運用所學(xué)的知識,設(shè)計開發(fā)一個小型基于C/S模式物流配送管理系統(tǒng)。它的主要功能有:區(qū)域信息管理、顧客信息管理以及物流配送信息管理和信息查詢四大功能。通過這一具體問題的分析、設(shè)計與實現(xiàn),將理論與應(yīng)用相結(jié)合,學(xué)會如何把書本上學(xué)到的知識用于解決實際問題,培養(yǎng)動手能力。</p><p><b>  二、任務(wù)描述</b></p><p><b> 

4、?。ㄒ唬┤龑蛹軜?gòu)模式</b></p><p>  三層架構(gòu)模式是有表現(xiàn)層、業(yè)務(wù)邏輯層,數(shù)據(jù)層組成的。</p><p>  表現(xiàn)層:根據(jù)需求進行界面設(shè)計,并完成基本交互代碼,能夠?qū)崿F(xiàn)將代碼提交給業(yè)務(wù)邏輯層。</p><p>  業(yè)務(wù)邏輯層:將表現(xiàn)層的數(shù)據(jù)解析成數(shù)據(jù)層的數(shù)據(jù)模型,并傳遞給數(shù)據(jù)層。同時接受數(shù)據(jù)層的返回結(jié)果給表現(xiàn)層、</p><

5、;p>  數(shù)據(jù)層:數(shù)據(jù)庫連接、接收業(yè)務(wù)邏輯層傳遞過來的數(shù)據(jù)模型,提交給數(shù)據(jù)庫進行處理,并根據(jù)實際的具體需求建立存儲過程,既數(shù)據(jù)層開發(fā)員不在負責(zé)數(shù)據(jù)庫的整體建立。</p><p><b>  (二)四大功能區(qū)域</b></p><p>  物流配送系統(tǒng)一共包括區(qū)域信息管理、顧客信息管理以及物流配送信息管理和信息查詢四大功能,一下就是這四大功能之間關(guān)系的簡圖。并且這

6、四大功能與數(shù)據(jù)相連,實現(xiàn)對數(shù)據(jù)庫的增、刪、改、查操作。</p><p><b>  三、人員分工</b></p><p><b>  四、設(shè)計過程</b></p><p><b> ?。ㄒ唬┰O(shè)計思想</b></p><p>  我們小組們采用三層架構(gòu)模式,使系統(tǒng)的代碼不冗長,也

7、有利于系統(tǒng)的編譯和運行,如果系統(tǒng)出現(xiàn)錯誤就會第一時間知道問題出現(xiàn)在哪里。所以采用三層的架構(gòu)模式,不僅調(diào)理清晰,組員分工明確完成的效率也會提高。以下就是三層架構(gòu)邏輯關(guān)系圖。也是我們小組們設(shè)計設(shè)計系統(tǒng)的思想。</p><p><b> ?。ǘ?shù)據(jù)庫設(shè)計</b></p><p>  根據(jù)物流管理系統(tǒng)的需求分析,可見在功能上分為:區(qū)域信息管理、顧客信息管理、物流配送管理和信

8、息查詢。</p><p><b>  1、數(shù)據(jù)表的建立</b></p><p><b>  區(qū)域信息管理</b></p><p>  根據(jù)需求分析得到區(qū)域信息只需要記錄:區(qū)域和區(qū)域信息的描述即可,所以可以為表TArea建立如下字段:</p><p>  物流配送區(qū)域:TArea</p>

9、<p><b>  顧客信息表</b></p><p><b>  TGuest</b></p><p><b>  * 配送狀態(tài)表</b></p><p><b>  TOrder(</b></p><p><b>  配送時間表&

10、lt;/b></p><p>  TGuestOrder</p><p><b>  2、建立視圖 </b></p><p>  根據(jù)顧客表物流配送表檢索物流與顧客的關(guān)系并建立視圖V1。</p><p><b>  3、存儲過程設(shè)計</b></p><p>  為了方便

11、程序處理,我們小組們需要為每個數(shù)據(jù)庫中的表元素添加關(guān)于增、刪、改、查、的存儲過程,例如為區(qū)域增加的存儲過程(其他三個表的存儲過程也依此進行設(shè)計):</p><p><b>  插入</b></p><p>  ALTER Proc [dbo].[Insert_Guest]</p><p>  @GuestID uniqueidenti

12、fier,</p><p>  @GuestName varchar(50),</p><p>  @GuestPhone varchar(50),</p><p>  @GuestAddress varchar(500),</p><p>  @GuestDesc varchar (1000),</p><

13、;p>  @AresID uniqueidentifier</p><p><b>  As</b></p><p>  INSERT INTO [TGuest] ([GuestID],[GuestName],[GuestPhone],[GuestAddress],[GuestDesc],[AresID])</p><p> 

14、 VALUES (@GuestID,@GuestName,@GuestPhone,@GuestAddress,@GuestDesc,@AresID) </p><p><b>  修改</b></p><p>  ALTER Proc [dbo].[Update_Guest]</p><p>  @GuestID uniqueident

15、ifier,</p><p>  @GuestName varchar(50),</p><p>  @GuestPhone varchar(50),</p><p>  @GuestAddress varchar(500),</p><p>  @GuestDesc varchar(1000),</p><p> 

16、 @AresID uniqueidentifier</p><p><b>  As</b></p><p>  Update [TGuest] set [GuestName] = @GuestName, [GuestPhone] = @GuestPhone,[GuestAddress]=@GuestAddress,[GuestDesc]=@GuestDesc wh

17、ere [GuestID]=@GuestID</p><p><b>  刪除</b></p><p>  ALTER Proc [dbo].[Delete_Guest]</p><p>  @GuestID uniqueidentifier</p><p><b>  As</b></p&g

18、t;<p>  Delete from [TGuest] where [GuestID]=@GuestID</p><p><b>  查詢</b></p><p>  ALTER Proc [dbo].[Select_Guest]</p><p>  @GuestID uniqueidentifier,</p&g

19、t;<p>  @GuestName varchar(50),</p><p>  @GuestPhone varchar(50),</p><p>  @GuestAddress varchar(500),</p><p>  @GuestDesc varchar(1000),</p><p>  @AresI

20、D uniqueidentifier</p><p><b>  As</b></p><p>  select [GuestID], [GuestName], [GuestPhone],[GuestAddress],[GuestDesc],[AresID] from [TGuest] where </p><p>  conve

21、rt(varchar(50),[GuestID]) like '%' + convert(varchar(50),@GuestID)+ '%' and</p><p>  [GuestName ] like '%' + @GuestName + '%' and</p><p>  [GuestPhone ]

22、like '%' + @GuestPhone + '%' and</p><p>  [GuestAddress ] like '%' + @GuestAddress + '%' and</p><p>  [GuestDesc ] like '%' + @GuestDesc + '

23、;%' and</p><p>  convert (varchar(50),[AresID]) like '%' +convert(varchar(50), @AresID)+ '%'</p><p> ?。ㄈ┙?shù)據(jù)模型及代碼實現(xiàn)</p><p>  根據(jù)項目的核心思想,因此需要建立一個類庫項目,項目名稱為“Common

24、Model”,并根據(jù)數(shù)據(jù)庫表中的結(jié)構(gòu)定義類和屬性。盡量保證表名和類名相同,字段名和屬性名相同,字段類型和屬性數(shù)據(jù)類型相同。</p><p>  using System;</p><p>  using System.Collections.Generic;</p><p>  using System.Text;</p><p>  nam

25、espace CommonModel</p><p><b>  {</b></p><p>  public class TGuest</p><p><b>  {</b></p><p>  private Guid guestID = Guid.Empty;</p><p

26、>  private string guestName = "";</p><p>  private string guestPhone = "";</p><p>  private string guestAddress = "";</p><p>  private string guestD

27、esc = "";</p><p>  private Guid areaID = Guid.Empty;</p><p>  public Guid GuestID { get { return guestID; } set { guestID = value; } }</p><p>  public string GuestName { g

28、et { return guestName; } set { guestName = value ; } }</p><p>  public string GuestPhone { get { return guestPhone; } set { guestPhone = value; } }</p><p>  public string GuestAddress { get { re

29、turn guestAddress; } set { guestAddress = value; } }</p><p>  public string GuestDesc { get { return guestDesc; } set { guestDesc = value; } }</p><p>  public Guid AreaID { get { return areaID;

30、} set { areaID= value; } }</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  其他三個表同上</b></p><p>  (四)表現(xiàn)層的設(shè)計以及代碼實現(xiàn)</p><p>

31、<b>  1、項目總攬</b></p><p>  表現(xiàn)層開發(fā)員需要了解在項目的關(guān)系:</p><p>  CycleManagement項目:是項目運行的界面項目,負責(zé)與用戶交互;</p><p>  CycleInterface項目:是負責(zé)與業(yè)務(wù)邏輯層之間協(xié)商的規(guī)范,負責(zé)與業(yè)務(wù)邏輯層進行交互;</p><p>  

32、CommonModel項目:是負責(zé)表現(xiàn)層使用數(shù)據(jù)模型;</p><p>  當(dāng)項目開發(fā)時,表現(xiàn)層與業(yè)務(wù)邏輯層之間需要交流的便是CycleInterface項目中BLL文件夾內(nèi)的借口文件;</p><p>  2、主窗口——MainForm</p><p>  在“LogisticsManagement”項目中右擊,選擇“新建項”,在項目列表中選擇“Windows窗體

33、”,名稱為“MainForm.cs”;</p><p>  窗體建立后,設(shè)置窗體屬性:</p><p>  MainForm.IsMdiContainer=true</p><p>  MainForm.Text= "物流配送管理系統(tǒng)"</p><p>  MainForm.StartPosition=CenterScre

34、en</p><p>  在需求分析中,物流配送管理系統(tǒng)的主要功能有:區(qū)域信息管理、顧客信息管理以及物流配送信息管理和信息查詢四大功能,因此可以為主窗體添加一個菜單欄,并設(shè)置如下菜單:</p><p>  單擊“區(qū)域管理”菜單,則調(diào)用窗體“FArea”;</p><p>  單擊“顧客管理”菜單,則調(diào)用窗體“FGuest”;</p><p>

35、  單擊“物流配送管理”菜單,則調(diào)用窗體“FLogistics”;</p><p>  單擊“信息查詢”菜單,則調(diào)用窗體“FSearch”;</p><p>  單擊“退出系統(tǒng)”菜單,則執(zhí)行Application.Exit()退出應(yīng)用程序。</p><p>  因此,為每個菜單編輯類似如下的代碼(假設(shè)FArea窗體已經(jīng)存在)</p><p>

36、  FArea form = new FArea();</p><p>  form.MdiParent = this;</p><p>  form.StartPosition = FormStartPosition.CenterParent;</p><p>  form.WindowState = FormWindowStat

37、e.Maximized;</p><p>  form.Show();</p><p>  該窗體由于屬于各個功能窗體的調(diào)用總窗體,因此不需要與業(yè)務(wù)邏輯層進行任何的交互操作。</p><p>  3、區(qū)域管理窗口——FArea</p><p><b>  窗體控件布局</b></p>

38、<p>  根據(jù)需求分析,在區(qū)域管理的功能上,只需要做到增、刪、查即可,不需要為區(qū)域管理添加其他功能,因此可將區(qū)域管理功能的界面設(shè)計如圖所示界面:</p><p><b>  業(yè)務(wù)邏輯的功能統(tǒng)計</b></p><p>  根據(jù)界面的設(shè)計,我們小組們知道該功能需要:</p><p>  查詢出目前所有區(qū)域的信息</p>

39、<p><b>  創(chuàng)建區(qū)域信息</b></p><p><b>  修改區(qū)域信息</b></p><p><b>  刪除區(qū)域信息</b></p><p><b>  操作邏輯</b></p><p>  窗體加載成功后,通過查詢功能將區(qū)域

40、信息加載到內(nèi)存,并在區(qū)域信息的數(shù)據(jù)源列表中的第一個位置新增具有“新建區(qū)域”信息的區(qū)域項目;</p><p>  單擊“創(chuàng)建”按鈕,則調(diào)用業(yè)務(wù)邏輯層的創(chuàng)建方法,并傳遞區(qū)域名和區(qū)域描述兩個文本框的內(nèi)容;</p><p>  單擊“修改”按鈕,則調(diào)用業(yè)務(wù)邏輯層的修改方法,并傳遞區(qū)域編號、區(qū)域名、區(qū)域描述;</p><p>  單擊“刪除”按鈕,則調(diào)用業(yè)務(wù)邏輯層的刪除方法,

41、并傳遞區(qū)域編號;</p><p>  單擊“取消”按鈕,則使區(qū)域信息框隱藏,既Visible=false;</p><p><b>  窗體加載時讀取數(shù)據(jù)</b></p><p>  雙擊窗體標(biāo)題欄,進入代碼編寫界面,并在FArea_Load方法內(nèi)書寫如下代碼:</p><p>  IArea bll = new Are

42、aBLL();</p><p>  List<TArea> list = bll.GetList();</p><p>  TArea empty=new TArea ();</p><p>  empty.ID=Guid.Empty;</p><p>  empty.Name="新建區(qū)域&

43、quot;;</p><p>  empty.Description="";</p><p>  list.IndexOf(empty, 0);</p><p>  lstAreaList.Items.Clear();</p><p>  foreach (TArea tmp in list)&l

44、t;/p><p><b>  {</b></p><p>  ListViewItem lvi = new ListViewItem(tmp.Name);</p><p>  lvi.SubItems.Add(tmp.ID.ToString());</p><p>  lvi.SubItems.Add(tmp.Descr

45、iption);</p><p>  lvi.ToolTipText = tmp.Name;</p><p>  lvi.Tag = tmp;</p><p>  lvi.ImageIndex=0;</p><p>  lstAreaList.Items.Add(lvi);</p><p&

46、gt;<b>  }</b></p><p>  雙擊ListView操作</p><p>  雙擊ListView后,可能引發(fā)的三種情況:</p><p><b>  代碼如下:</b></p><p>  if (lstAreaList.SelectedItems.Count != 0)

47、</p><p><b>  {</b></p><p>  TArea area = (TArea)lstAreaList.SelectedItems[0].Tag;</p><p>  txtAreaName.Text = area.Name;</p><p>  txtAreaDesc.Text =

48、 area.Description;</p><p>  if (area.ID == Guid.Empty)</p><p><b>  {</b></p><p>  grpAreaInfo.Visible = true;</p><p>  btnCreate.Enabled = true;

49、</p><p>  btnModify.Enabled = false;</p><p>  btnDelete.Enabled = false;</p><p>  btnCancel.Enabled = true;</p><p>  grpAreaInfo.Tag = area;</p><p

50、>  txtAreaName.Text = "";</p><p>  txtAreaDesc.Text = "";</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</

51、b></p><p>  grpAreaInfo.Visible = true;</p><p>  btnCreate.Enabled = false;</p><p>  btnModify.Enabled = true;</p><p>  btnDelete.Enabled = true;</p><p>

52、;  btnCancel.Enabled = true;</p><p>  grpAreaInfo.Tag = area;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  單擊創(chuàng)建</b></p>&l

53、t;p>  單擊創(chuàng)建后,由于需要與數(shù)據(jù)庫進行交互,因此需要通過業(yè)務(wù)邏輯層的方法來創(chuàng)建。在創(chuàng)建之前,需要對數(shù)據(jù)進行簡單的驗證,例如是否為空,數(shù)據(jù)是否合法等:</p><p>  if (txtAreaName.Text == "") { MessageBox.Show("區(qū)域名稱不能為空!"); return; }</p><p>  IArea

54、 bll = new AreaBLL();</p><p>  if (bll.Create(txtAreaName.Text, txtAreaDesc.Text))</p><p><b>  {</b></p><p>  MessageBox.Show("區(qū)域新建成功!");</p><p> 

55、 grpAreaInfo.Visible = false;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("區(qū)域新建失??!")

56、;</p><p><b>  }</b></p><p><b>  單擊修改</b></p><p>  單擊修改后,由于需要與數(shù)據(jù)庫進行交互,因此需要通過業(yè)務(wù)邏輯層的方法來修改,在修改之前,需要對數(shù)據(jù)進行簡單的驗證,例如是否為空,數(shù)據(jù)是否有效等:</p><p>  if (txtAreaNa

57、me.Text == "") { MessageBox.Show("區(qū)域名稱不能為空!"); return; }</p><p>  IArea bll = new AreaBLL();</p><p>  if (bll.Modify(((TArea)grpAreaInfo.Tag).ID, txtAreaName.Text, txtAreaDes

58、c.Text))</p><p><b>  {</b></p><p>  MessageBox.Show("區(qū)域修改成功!");</p><p>  grpAreaInfo.Visible = false;</p><p><b>  }</b></p><

59、;p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("區(qū)域修改失??!");</p><p><b>  }</b></p><p><b>  單擊刪除</b&

60、gt;</p><p>  單擊刪除與修改相似,只是這里不再需要判斷數(shù)據(jù)是否合法,只需要將ID傳遞給業(yè)務(wù)邏輯層即可:</p><p>  if (MessageBox.Show(this, "確定要刪除該區(qū)域么?", "刪除", MessageBoxButtons.OKCancel) == DialogResult.OK)</p>&l

61、t;p><b>  {</b></p><p>  IArea bll = new AreaBLL();</p><p>  if (bll.Delete(((TArea)grpAreaInfo.Tag).ID))</p><p><b>  {</b></p><p>  MessageBo

62、x.Show("區(qū)域刪除成功!");</p><p>  grpAreaInfo.Visible = false;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>

63、;<p>  MessageBox.Show("區(qū)域刪除失?。?quot;);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  單擊取消</b></p><p>  單擊取消,只需要將Group

64、Box控件隱藏即可:</p><p>  grpAreaInfo.Visible = false;</p><p>  4、顧客管理窗口——FGuest</p><p>  顧客管理窗口的界面與區(qū)域管理相似,同樣應(yīng)用ListView顯示顧客數(shù)據(jù),適用GroupBox收集和顯示顧客信息數(shù)據(jù),可見右圖:</p><p>  在顧客管理窗口的顧客信

65、息GroupBox中,邏輯部分便是“顧客類型”選擇后,應(yīng)使對應(yīng)的Panel處于可用狀態(tài),以及單擊保存時,需要判斷該顧客是需要新建,還是需要保存修改。</p><p><b>  窗體加載</b></p><p>  但在窗體加載過程中,需要為區(qū)域下拉框添加數(shù)據(jù)源:</p><p>  IArea area=new AreaBLL ();<

66、/p><p>  cmbArea.DataSource = area.GetList();</p><p>  cmbArea.DisplayMember = "Name";</p><p>  雙擊ListView項目</p><p>  if (lstAreaList.SelectedItems.Count != 0)

67、</p><p><b>  {</b></p><p>  TArea area = (TArea)lstAreaList.SelectedItems[0].Tag;</p><p>  txtAreaName.Text = area.Name;</p><p>  txtAreaDesc.Text

68、 = area.Description;</p><p>  if (area.ID == Guid.Empty)</p><p><b>  {</b></p><p>  grpAreaInfo.Visible = true;</p><p>  btnCreate.Enabled = true

69、;</p><p>  btnModify.Enabled = false;</p><p>  btnDelete.Enabled = false;</p><p>  btnCancel.Enabled = true;</p><p>  grpAreaInfo.Tag = area;</p><

70、;p>  txtAreaName.Text = "";</p><p>  txtAreaDesc.Text = "";</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {<

71、;/b></p><p>  grpAreaInfo.Visible = true;</p><p>  btnCreate.Enabled = false;</p><p>  btnModify.Enabled = true;</p><p>  btnDelete.Enabled = true;</p><p&

72、gt;  btnCancel.Enabled = true;</p><p>  grpAreaInfo.Tag = area;</p><p><b>  }</b></p><p><b>  }</b></p><p>  切換RadioButton</p><p> 

73、 可設(shè)計為:單擊個人家庭RadioButton時,第一個Panel可用,第二個Panel不可用;單擊個體商戶RadioButton時,第一個Panel不可用,第二個Panel可用</p><p>  private void rdoHome_CheckedChanged(object sender, EventArgs e)</p><p><b>  {</b>&l

74、t;/p><p>  pnlHome.Enabled = true;</p><p>  pnlShop.Enabled = false;</p><p><b>  }</b></p><p>  private void rdoShop_CheckedChanged(object sender, EventArgs e)

75、</p><p><b>  {</b></p><p>  pnlHome.Enabled = false;</p><p>  pnlShop.Enabled = true;</p><p><b>  }</b></p><p><b>  單擊保存</

76、b></p><p>  首先,判斷雙擊項目是不是“新建顧客”的項目,如果是“新建顧客”的項目,則執(zhí)行業(yè)務(wù)邏輯層中新建的方法,否則需執(zhí)行修改的方法。操作成功后隱藏GroupBox控件。</p><p>  IGuest bll = new CycleBLL.GuestBLL();</p><p>  TGuest guest = (TGuest)grpG

77、uestInfo.Tag;</p><p>  string Address = txtProvince.Text + "," +</p><p>  txtCity.Text + "," +</p><p>  txtCounty.Text;</p><p>  if (rdoHome.Che

78、cked)</p><p>  {</p><p>  Address = Address + ",1," +</p><p>  txtBuildingArea.Text + "," +</p><p>  txtBuilding.Text + ",&quo

79、t; +</p><p>  txtUnit.Text + "," +</p><p>  txtLayer.Text + "," +</p><p>  txtRoomNo.Text;</p><p><b>  }</b></p><p><b&g

80、t;  else</b></p><p><b>  {</b></p><p>  Address = Address + ",2," +</p><p>  txtStreet.Text + "," +</p><p>  txtNo.Text + ",&

81、quot; +</p><p>  txtOther.Text;</p><p><b>  }</b></p><p>  if (guest.GuestID == Guid.Empty)</p><p><b>  {</b></p><p>  if (bll.

82、Create(txtName.Text,</p><p>  txtPhone.Text,</p><p><b>  Address,</b></p><p>  txtDesc.Text,</p><p>  ((TArea)cmbArea.SelectedValu</p><p>&

83、lt;b>  {</b></p><p>  MessageBox.Show("顧客創(chuàng)建成功!");</p><p>  grpGuestInfo.Visible = false;</p><p><b>  }</b></p><p><b>  else</b&g

84、t;</p><p><b>  {</b></p><p>  MessageBox.Show("顧客創(chuàng)建失??!");</p><p><b>  }</b></p><p><b>  }</b></p><p>  Else

85、</p><p><b>  {</b></p><p>  if (bll.Modify(guest.GuestID,</p><p>  txtName.Text,</p><p>  txtPhone.Text,</p><p><b>  Address,

86、</b></p><p>  txtDesc.Text,</p><p>  ((TArea)cmbArea.SelectedValue).ID))</p><p><b>  {</b></p><p>  MessageBox.Show("顧客修改成功!");</p>&

87、lt;p>  grpGuestInfo.Visible = false;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("顧客修改

88、失??!");</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  單擊取消</b></p><p>  隱藏GroupBox控件:grpGuest.Visibled=false;</p><p

89、>  5、物流配送管理窗口——FLogistics</p><p><b>  1 添加配送單</b></p><p>  添加時,需要收集的信息有:顧客姓名、配送單號、運費、配送日期。顧客姓名:顧客信息需要操作員手動輸入,將操作員手動輸入的文字與數(shù)據(jù)庫中的用戶進行對比,當(dāng)尋找到顧客姓名后,列在文本框下方的列表中提供操作員選擇,操作員選擇用戶后,才能繼續(xù)進行添加

90、配送單。</p><p><b>  需要定義一個接口:</b></p><p>  List<TGuest> GetList(string)</p><p>  根據(jù)姓名搜索顧客,并返回滿足條件的顧客列表。</p><p>  這時,就需要在文本框的文本改變事件中書寫搜索顧客信息的代碼:</p>

91、<p>  private void textBox1_TextChanged(object sender, EventArgs e)</p><p><b>  {</b></p><p>  listBox1.Items.Clear();</p><p>  IGuest bll = new GuestBLL();</p

92、><p>  List<TGuest> list = bll.GetList(textBox1.Text);</p><p>  listBox1.DataSource = list;</p><p>  listBox1.DisplayMember = "GuestName";</p><p><b>

93、  }</b></p><p>  private void listBox1_SelectedIndexChanged(object sender, EventArgs e)</p><p><b>  {</b></p><p>  if (listBox1.SelectedItems.Count != 0)</p>

94、<p><b>  {</b></p><p>  tabControl1.Enabled = true;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></

95、p><p>  tabControl1.Enabled = false;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  需要定義一個接口</b></p><p>  List<TCycle&

96、gt; GetNoUseCycle()</p><p>  在窗體加載時,為這個Combobox添加數(shù)據(jù)源。</p><p>  ICycle cyc=new CycleBLL.CycleBLL();</p><p>  comboBox1.DataSource = cyc.GetNoUseCycle();</p><p>  comboBo

97、x1.DisplayMember = "No";</p><p>  在信息收集完成后,單擊“添加”按鈕時,將各個數(shù)據(jù)傳遞給業(yè)務(wù)邏輯層,所以需要建立接口:</p><p>  bool AddCycle(Guid, Guid, string, float, DateTime, DateTime, string)</p><p>  并在單擊添加時

98、,執(zhí)行BLL的該方法</p><p>  IGuestCycle gc = new CycleBLL.GuestCycleBLL();</p><p>  if (gc.AddCycle(</p><p>  ((TGuest)listBox1.SelectedItems[0]).GuestID,</p><p>  ((TCycle)com

99、boBox1.SelectedItem[0]).ID,</p><p>  textBox3.Text,</p><p>  float.Parse(textBox5.Text),</p><p>  dateTimePicker1.Value,</p><p>  dateTimePicker2.Value,</p><

100、p>  textBox4.Text</p><p><b>  ))</b></p><p><b>  {</b></p><p>  MessageBox.Show("添加成功!");</p><p><b>  }</b></p>

101、<p><b>  else</b></p><p><b>  {</b></p><p>  MessageBox.Show("添加失??!");</p><p><b>  }</b></p><p>  6、信息查詢窗口——FSearch&l

102、t;/p><p>  在信息查詢窗口中,系統(tǒng)將完成以下功能:運單與顧客管理、物流的配送日期與送至日期等操作,由此可以看出, </p><p>  在該界面中,單擊物流與顧客管理后,可啟動FLogistics窗體,單擊搜索后,將搜索條件轉(zhuǎn)為參數(shù)傳遞給業(yè)務(wù)邏輯層,然后根據(jù)業(yè)務(wù)邏輯層所返回的泛型集合,將數(shù)據(jù)填充到列表中。</p><p>  (五)業(yè)務(wù)邏輯層的建立</p

103、><p>  業(yè)務(wù)邏輯開發(fā)員的主要工作就是將表現(xiàn)層傳遞進來的數(shù)據(jù)轉(zhuǎn)換成數(shù)據(jù)模型,并交由數(shù)據(jù)層處理。因此表現(xiàn)層需要在基礎(chǔ)框架上建立三個工程:CommonModel、DAL、BLL。Public int Insert(TArea area) {return 1;}</p><p>  至于CommonModel應(yīng)該通過組長向數(shù)據(jù)層開發(fā)員索要。</p><p>  業(yè)務(wù)邏輯開

104、發(fā)員只需要將BLL實現(xiàn)即可。在業(yè)務(wù)邏輯層實現(xiàn)過程中,需要不斷的與表現(xiàn)層或組長進行溝通,得知表現(xiàn)層需要什么樣的方法,返回什么樣的數(shù)據(jù)。</p><p>  區(qū)域信息管理只涉及到增、刪、改、查,因此在區(qū)域的業(yè)務(wù)邏輯類中,只要滿足這四個要求基本就可以滿足表現(xiàn)層所需要的功能了。</p><p>  其他接口的實現(xiàn)與鋼瓶創(chuàng)建的接口原理上都是一樣的,都是將參數(shù)轉(zhuǎn)換為數(shù)據(jù)模型,最簡成增、刪、改、查的操作

105、,再傳遞給能夠完成操作的數(shù)據(jù)層方法。</p><p>  (六)數(shù)據(jù)層建立及代碼實現(xiàn)</p><p>  1) 數(shù)據(jù)庫公共執(zhí)行類——DatabaseControl</p><p><b>  介紹并基本建類</b></p><p>  在框架基礎(chǔ)上,建立類庫項目:DAL,并添加對CommonModel類庫的引用。由于DA

106、L負責(zé)與數(shù)據(jù)庫的交互,為了減少代碼重寫,提高數(shù)據(jù)庫的操作,我們小組們將數(shù)據(jù)庫的操作過程寫在一個名為DatabaseControl的類中。該類是整個項目最核心的一個部分,也是相對最復(fù)雜的一個部分,該類一旦被建立,會大大減少我們小組們在其他位置所書寫的代碼和邏輯過程。</p><p>  對于數(shù)據(jù)庫的操作,除了返回“該操作共影響了 N 行”外,就是返回一個的數(shù)據(jù)集合。所以,我們小組們除了定義數(shù)據(jù)庫連接器(SqlCon

107、nection)、數(shù)據(jù)命令器(SqlCommand)和數(shù)據(jù)適配器(SqlDataAdapter)外,還需要建立公開方法:Executed方法所有需要執(zhí)行數(shù)據(jù)庫操作的,都必須調(diào)用Execute來執(zhí)行SQL語句或存儲過程。</p><p>  而Execute的返回值,則有兩種情況,一種是返回一個數(shù)字,一種是返回一個結(jié)果集,所以Execute方法得到了以下幾種重載</p><p>  //執(zhí)行

108、語句或存儲過程,返回影響的行數(shù)(無參數(shù)傳遞)</p><p>  Int Execute(CommandType, string)</p><p>  //將參數(shù)傳遞給語句或存儲過程并執(zhí)行,返回影響的行數(shù)(有參數(shù)傳遞)</p><p>  Int Execute(CommandType, string, SqlParameter[])</p><

109、p>  //執(zhí)行語句或存儲過程,返回結(jié)果集(無參數(shù)傳遞)</p><p>  DataCollection Execute(CommandType, string)</p><p>  //將參數(shù)傳遞給語句或存儲過程并執(zhí)行,返回結(jié)果集(有參數(shù)傳遞)</p><p>  DataCollection Execute(CommandType, string, Sq

110、lParameter[])</p><p>  由于數(shù)據(jù)庫的操作需要打開數(shù)據(jù)庫和關(guān)閉數(shù)據(jù)庫,因此需要建立Open和Close方法。</p><p>  截止到目前,我們小組們可以得到如下的類代碼:</p><p>  public class DatabaseControl</p><p><b>  {</b><

111、/p><p>  private const string connstr = ""; </p><p>  private SqlConnection conn = new SqlConnection(connstr); </p><p>  private Sql

112、Command comm = new SqlCommand(); </p><p>  private SqlParameter adap = new SqlParameter(); </p><p>  public int Execute(CommandType type, string command

113、) </p><p><b>  {</b></p><p>  return Execute(type, command, new SqlParameter[] { }); </p><p><b>  }</b></p><p>  public IL

114、ist Execute(CommandType type, string command) </p><p><b>  {</b></p><p>  return Execute(type, command, new SqlParameter[] { }); </p><p><b>  }

115、</b></p><p>  public int Execute(CommandType type, string command, SqlParameter[] para) </p><p><b>  { }</b></p><p>  public IList Execute(CommandType type, stri

116、ng command, SqlParameter[] para) { }</p><p>  private void OpenDatabase() {</p><p>  if (conn.State != ConnectionState.Open)</p><p><b>  {</b>&

117、lt;/p><p>  conn.Open(); }</p><p>  comm = new SqlCommand();</p><p>  comm.Connection = conn;</p><p><b>  }</b></p>

118、<p>  private void Close() </p><p><b>  {</b></p><p>  if (conn.State == ConnectionState.Open)</p><p><b>  {</b></p><p>  conn

119、.Close();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  進一步加工這個類,整合OpenDatabase方法</p><p>  根據(jù)兩個三參Execu

120、te方法,我們小組們可以看出,在建立指令對象時,需要為SqlCommand對象指定:CommandType、CommandText以及Parameter。需要注意的是SqlCommand所接受的Parameter并不是數(shù)組,而是SqlParameterCollection對象,因此我們小組們需要將SqlParameter數(shù)組對象添加到這個Collection中。所以,數(shù)據(jù)庫的打開方法:OpenDatabase將更改為:</p>

121、;<p>  Private void OpenDatabase(CommandType type, string command, SqlParameter[] para)</p><p><b>  {</b></p><p>  if (conn.State != ConnectionState.Open)</p><

122、;p><b>  {</b></p><p>  conn.Open(); </p><p><b>  }</b></p><p>  comm = new SqlCommand();</p><p>  comm.Connection = con

123、n;</p><p>  comm.CommandType = type;</p><p>  comm.CommandText = command;</p><p>  foreach (SqlParameter tmp in para)</p><p><b>  {</b></p>

124、<p>  comm.Parameters.Add(tmp);</p><p><b>  }</b></p><p><b>  }</b></p><p>  這樣,Execute在執(zhí)行的時候,只需要將參數(shù)再次傳遞給OpenDatabase,就可以完成一系列的設(shè)置操作。</p><p&g

125、t;  Public int Execute(CommandType type, string command, SqlParameter[] para)</p><p><b>  {</b></p><p>  OpenDatabase(type, command, para);</p><p>  int rtn = comm.Execu

126、teNonQuery();</p><p><b>  Close();</b></p><p>  return rtn;</p><p><b>  }</b></p><p>  利用泛型集合,將結(jié)果集返回到業(yè)務(wù)邏輯層</p><p>  到目前為止,我們小組們只是將E

127、xecute在執(zhí)行時,返回影響行數(shù)的這個模塊完成了,接下來,該考慮如何處理Execute返回結(jié)果集的部分。</p><p>  采用泛型集合的模式來返回結(jié)果集,主要目的是為了在邏輯層和表現(xiàn)層時的操作與數(shù)據(jù)無關(guān)而設(shè)計的,此外,也是為了減少數(shù)據(jù)層書寫更多的針對操作DataReader和DataTable的部分。</p><p>  所謂泛型是一種特殊類型,它把指定類型的工作推遲到客戶代碼并實例

128、化的類型。</p><p><b>  關(guān)于泛型:</b></p><p>  在過去,我們小組們定義數(shù)組:</p><p>  int[] array = new int[]{1,2,3,4};</p><p>  當(dāng)我們小組們需要對數(shù)組長度的動態(tài)增長,對于這種定義方式是不可行的,這時就會想到Array、ArrayLi

129、st。</p><p>  但無論是Array,還是ArrayList,對數(shù)據(jù)類型都沒有要求,因此就會出現(xiàn)像下面這樣的賦值過程:</p><p>  ArrayList array = new ArrayList();</p><p>  array.add(2);</p><p>  array.add("4");<

130、;/p><p>  如果這時對array對象中的元素進行加和,并得到結(jié)果時,就會出現(xiàn)數(shù)據(jù)類型不統(tǒng)一的異常錯誤。</p><p>  而泛型集合的出現(xiàn),便解決了這個尷尬的問題。</p><p>  List<int> list = new List<int>();</p><p>  list.add(1);</p&g

131、t;<p>  list.add(3);</p><p>  list.add("4"); //這時程序會提示語法錯誤,因為要求list的集合必須是int類型。</p><p><b>  關(guān)于泛型:</b></p><p>  在過去,我們小組們定義數(shù)組:</p><p>  i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論