呂顯強(qiáng)陶冶楊文蓮楊松吳俊峰石云峰
(大連海洋大學(xué)教育技術(shù)與計(jì)算中心,遼寧大連116023)
基于對(duì)象模型的船舶電力負(fù)荷表格計(jì)算系統(tǒng)
呂顯強(qiáng),陶冶,楊文蓮,楊松,吳俊峰,石云峰
(大連海洋大學(xué)教育技術(shù)與計(jì)算中心,遼寧大連116023)
針對(duì)船舶電力負(fù)荷計(jì)算輸入數(shù)據(jù)多、表格設(shè)計(jì)復(fù)雜等問(wèn)題,提出了一種利用MFC基于對(duì)象模型的表格計(jì)算系統(tǒng),采用View對(duì)象負(fù)責(zé)表格的繪制和各種項(xiàng)目的計(jì)算,利用編輯框定位方式來(lái)模擬手工表格輸入的過(guò)程,有效地避免了基于Form-Control法輸入數(shù)據(jù)和最終打印效果不一致的缺陷,實(shí)現(xiàn)了所見(jiàn)即所得。View-Document對(duì)象模型能夠獨(dú)立處理表格數(shù)據(jù),并支持打開(kāi)、保存和打印操作,該系統(tǒng)具有可視化和仿真操作能力,實(shí)例顯示具有較高的執(zhí)行效率和應(yīng)用效果。
電力負(fù)荷;對(duì)象模型;表格計(jì)算;微軟基礎(chǔ)類(lèi)庫(kù)
船舶電站是船舶動(dòng)力的主要來(lái)源,合理的電站容量配置不僅關(guān)系到整個(gè)船舶的各種電力系統(tǒng)及設(shè)備的使用壽命,而且可有效地確保船舶電力使用的安全性和可靠性,并最終達(dá)到船舶經(jīng)濟(jì)運(yùn)行的目標(biāo)。船舶電力負(fù)荷計(jì)算主要采用3種方法:概率法、晝夜航行圖表法和負(fù)荷系數(shù)法[1]。其中負(fù)荷系數(shù)法是目前廣泛使用的一種方法,而概率法則需要具備相同類(lèi)型母型船的相關(guān)資料,晝夜航行圖表法適用于小型船舶或電動(dòng)輔助性船舶,在一定程度上限制了使用范圍。負(fù)荷系數(shù)法一般需要船舶電力設(shè)計(jì)人員根據(jù)船舶設(shè)備的實(shí)際工況 (包括航行狀態(tài)、工作狀態(tài)、進(jìn)出港狀態(tài)和停泊狀態(tài)等),分別統(tǒng)計(jì)并計(jì)算出硒裝設(shè)備、輪機(jī)設(shè)備、空調(diào)冷藏設(shè)備、弱電及其它設(shè)備的數(shù)量,以及電動(dòng)機(jī)額定功率、機(jī)械負(fù)荷系數(shù)、電動(dòng)機(jī)負(fù)荷系數(shù)、功率因數(shù)、所需有功和無(wú)功功率等,以獲得船舶需要配置的主發(fā)動(dòng)機(jī)和備用發(fā)電機(jī)的臺(tái)數(shù)。目前,負(fù)荷系數(shù)法主要通過(guò)設(shè)計(jì)人員手工建立表格的方法進(jìn)行計(jì)算,統(tǒng)計(jì)修改困難,工作量很大。
隨著計(jì)算機(jī)技術(shù)的發(fā)展,電力系統(tǒng)的計(jì)算機(jī)仿真已成為電力系統(tǒng)設(shè)計(jì)、規(guī)劃、運(yùn)行及故障分析的重要工具。有關(guān)這方面的研究主要集中在電動(dòng)機(jī)建模方面,Iked等[2]提出了一種新的計(jì)算機(jī)仿真方法用于異步電動(dòng)機(jī)暫態(tài)及數(shù)學(xué)模型的研究;Bossio等[3]建立了動(dòng)態(tài)電動(dòng)機(jī)模型用于實(shí)現(xiàn)定子鐵心故障的分析。在船舶電力計(jì)算機(jī)輔助計(jì)算方面,大部分以基于傳統(tǒng)的窗體設(shè)計(jì)為主,王煥文等[4]采用Visual Basic在Windows窗體上利用控件對(duì)象,作為與設(shè)計(jì)人員交互的手段,用戶(hù)通過(guò)在文本框中輸入各類(lèi)參數(shù)值,并利用指定的算法模型進(jìn)行處理和計(jì)算。但上述方法有一定的缺陷,一是控件過(guò)多,設(shè)計(jì)難度大;二是人機(jī)功效差。為此,本研究中作者根據(jù)上述情況,重點(diǎn)研究采用面向?qū)ο蠹夹g(shù),利用Visual C++的MFC(微軟基礎(chǔ)類(lèi)庫(kù))中的View-Documents對(duì)象思想[5-6],設(shè)計(jì)出真正意義上的船舶電力負(fù)荷計(jì)算的 “電子表格”,可方便地進(jìn)行各參數(shù)的輸入、保存、計(jì)算和打印,該表格與設(shè)計(jì)人員手工計(jì)算的表格完全一致,實(shí)現(xiàn)了所見(jiàn)即所得,設(shè)計(jì)人員可以在完全熟悉的環(huán)境下進(jìn)行輸入和計(jì)算,大大提高了計(jì)算效率。
面向?qū)ο蠓椒?(Object-oriented method)是一種按照人類(lèi)認(rèn)識(shí)世界的思維來(lái)分析和解決問(wèn)題,并將 “對(duì)象”的思想引入到軟件開(kāi)發(fā)過(guò)程中,以對(duì)象為中心,以類(lèi)和繼承為構(gòu)造機(jī)制的軟件系統(tǒng)。面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言具有封裝性、繼承性和多態(tài)性,可讀性強(qiáng),易于維護(hù),大大降低了代碼的重復(fù)率和工作效率。
模擬船舶電力負(fù)荷手工計(jì)算表格是一項(xiàng)比較復(fù)雜的工程,主要包括前臺(tái)表格界面的繪制和后臺(tái)文檔的處理。其中前臺(tái)表格界面的設(shè)計(jì)要涉及大量的位置計(jì)算和交互性的處理,因此設(shè)計(jì)比較困難,為此,本研究中采用了Visual C++的MFC中的View-Document對(duì)象的思想,將二者單獨(dú)進(jìn)行處理,減少了代碼冗余度,提高了效率。
1.1 船舶設(shè)備類(lèi)的設(shè)計(jì)和封裝
在船舶電力負(fù)荷計(jì)算表中,用戶(hù)要預(yù)先輸入大量的設(shè)備參數(shù),為此定義了船舶設(shè)備CEDevice類(lèi),該類(lèi)封裝了船舶設(shè)備的基本參數(shù)值。此外,該類(lèi)還具有自繪能力,以實(shí)現(xiàn)用戶(hù)每次輸入一個(gè)設(shè)備的同時(shí),系統(tǒng)能夠自動(dòng)完成對(duì)該設(shè)備行所有單元格邊框的繪制。CEDevice類(lèi)的原型設(shè)計(jì)如下:
class CEDevice:public CObject
{
public:
CString m_strName;//設(shè)備名稱(chēng)
int m_nNumber;//設(shè)備數(shù)量
float m_fMaxAxisPower;//最大機(jī)械軸功率
float m_fRatedData[5];//電機(jī)額定數(shù)據(jù)
float m_fSumPowerNeeded;//所需總功率
float m_fK1;//電動(dòng)機(jī)利用系數(shù)
float m_fStateData[8][7];//8種工作狀態(tài)數(shù)組
int* m_nItemWidth;//項(xiàng)目寬度指針變量
CRect* m_ItemRect;//項(xiàng)目矩形尺寸指針變量
…
public:
void Init(int*ItemWidth,CRect*pRect,int dd,int TextHeight);//表格初始化函數(shù)
void DrawText(CDC*pDC,int nLeft,int nTop,BYTE bFlag[]);//自繪設(shè)備表格標(biāo)題函數(shù)
void SetItemRect(int nLeft,int nTop,BYTE bFlag []);//計(jì)算單元格矩形尺寸函數(shù)
void DrawBorder(CDC*pDC,intnLeft,int nTop,BYTE bFlag[]);//繪制表格邊框函數(shù)
…
};
1.2 表格對(duì)話(huà)框類(lèi)的創(chuàng)建
用戶(hù)在新創(chuàng)建一張船舶電力負(fù)荷計(jì)算表格前,均需要事先確定船舶名稱(chēng)、工作狀態(tài)名稱(chēng)、設(shè)備分類(lèi)名稱(chēng)以及I類(lèi)和II類(lèi)負(fù)荷系數(shù)的大小。用戶(hù)也可以自定義新的工況名稱(chēng)和設(shè)備分類(lèi)名稱(chēng),這些功能均需要通過(guò)對(duì)話(huà)框完成,本研究中將這些功能抽象地定義為對(duì)話(huà)框類(lèi)。對(duì)話(huà)框類(lèi)的原型設(shè)計(jì)如下:
class CNewDialog:public CDialog
{ public:
CStringm_strDEviceCategoryName[8];//設(shè)備分類(lèi)名稱(chēng)
CStringm_strStatName[8];//工作狀態(tài)名稱(chēng)
CListBoxm_listDeviceCategory;//設(shè)備分類(lèi)列表框CListBoxm_listWorkState;//工作狀態(tài)列表框CStringm_NEWCATE;//新設(shè)備分類(lèi)名稱(chēng)CStringm_NEWSTAT;//新工作狀態(tài)名稱(chēng)CStringm_strShipName;//船舶名稱(chēng)floatm_fCoef1;//I類(lèi)負(fù)荷系數(shù)floatm_fCoef2;//II類(lèi)負(fù)荷系數(shù)
…
};
新建計(jì)算表格對(duì)話(huà)框如圖1所示。
圖1 電力負(fù)荷計(jì)算表的 “新建”對(duì)話(huà)框Fig.1 The“new”dialog of tabular computation for power loading
1.3 編輯框類(lèi)的定義
在船舶電力負(fù)荷計(jì)算表中,由于該表格是通過(guò)多條直線(xiàn)繪制出的,所有單元格均為不可編輯狀態(tài)。為了能夠?qū)崿F(xiàn)用戶(hù)即點(diǎn)即輸入的效果,以實(shí)現(xiàn)模擬用戶(hù)手工填寫(xiě)表格的要求,本研究中定義了編輯框類(lèi),該類(lèi)繼承于標(biāo)準(zhǔn)編輯框類(lèi),并重載了鍵盤(pán)單擊OnKeyDown函數(shù),以實(shí)現(xiàn)用戶(hù)按上下左右方向鍵的同時(shí),能動(dòng)態(tài)改變編輯框的位置。編輯框類(lèi)的原型設(shè)計(jì)如下:
class CMyEdit:public CEdit
{
public:
CMyEdit();
virtual~CMyEdit();
protected:
afx_msg void OnKeyDown(UINT nChar,UINT nRepC-nt,UINT nFlags);
};
MFC通常使用View-Document結(jié)構(gòu)來(lái)管理數(shù)據(jù)和視圖顯示,文檔 (CDocument)負(fù)責(zé)數(shù)據(jù)的輸入、輸出和文件管理;視 (CView)類(lèi)從文檔結(jié)構(gòu)中獲取數(shù)據(jù);框架窗口 (CFrameWnd)類(lèi)負(fù)責(zé)整個(gè)系統(tǒng)移動(dòng)、最大化、最小化和關(guān)閉應(yīng)用程序操作等,該模型將數(shù)據(jù)管理和圖形顯示進(jìn)行了分離,有效地降低了管理的難度[6]。在船舶電力負(fù)荷計(jì)算中,主要包括用戶(hù)表格繪制、表格編輯 (插入和刪除行列)、文件保存和打印操作,輸入數(shù)據(jù)量大,表格操作和數(shù)據(jù)管理復(fù)雜,因此,本研究中將上述內(nèi)容采用MFC的View-Document對(duì)象來(lái)建模,以減輕設(shè)計(jì)難度。
2.1 CELoadView類(lèi)
CELoadView類(lèi)主要作為顯示表格和用戶(hù)的操作界面,以便將文檔類(lèi)的內(nèi)容顯示到屏幕或進(jìn)行打印和打印預(yù)覽操作。由于船舶電力負(fù)荷計(jì)算表格內(nèi)容多,本研究中采用了MFC的CScrollView類(lèi)作為其父類(lèi),以支持表格的滾動(dòng)功能。由于CEDevice設(shè)備類(lèi)已經(jīng)支持表格設(shè)備數(shù)據(jù)的自繪功能,因此, CELoadView類(lèi)主要負(fù)責(zé)繪制表格的標(biāo)題,該功能由DrawSummary、DrawHeadText和FillBK函數(shù)來(lái)實(shí)現(xiàn)。此外,在CELoadView類(lèi)中還設(shè)計(jì)了兩個(gè)重要的對(duì)象成員,即m_Edit和m_Combo,它們主要用于實(shí)現(xiàn)與用戶(hù)的交互性操作。CELoadView類(lèi)的原型設(shè)計(jì)如下:
class CELoadView:public CScrollView
{
public:
CComboBoxm_Combo;//負(fù)荷類(lèi)別組合框?qū)ο?/p>
CMyEditm_Edit;//輸入編輯框
int nTextHeight;//文字高度
CEDevice*m_pEDevice[8];//8種設(shè)備類(lèi)型指針RectRowData*m_pRectRowData;//每行數(shù)據(jù)矩形尺寸(所有列)
int x,y;//鼠標(biāo)滾動(dòng)偏移量
SelectedPostion m_SelectedPos;//記錄用戶(hù)選擇位置
intm_nPageWidth,m_nPageHeight;//紙張大小(單位mm)
int*m_nSumWidthPrinted,*m_nSumHeightPrinted;//打印的總寬度、總高度
int p,p1;//水平、垂直分頁(yè)數(shù)
public:
…
void MoveCombo(CRect&rect);//負(fù)荷類(lèi)別組合框移動(dòng)處理函數(shù)
void MoveEdit(CRect&rect);//編輯框移動(dòng)處理函數(shù)
void DrawSummary(CDC*pDC,int nLeft,int nT-op);//統(tǒng)計(jì)行繪制函數(shù)
void DrawHeadText(CDC*pDC,int nLeft,int nTop, CString str);//表格標(biāo)題函數(shù)
void FillBK(CDC*pDC,CRect&rect,CBrush &brush);//表格背景處理函數(shù)
…
};
2.2 CELoadDoc類(lèi)
CELoadDoc類(lèi)可以存儲(chǔ)和載入用戶(hù)定義的數(shù)據(jù),相當(dāng)于 “容器”功能,它是CDocument類(lèi)的派生類(lèi),其主要功能是將用戶(hù)輸入的參數(shù)和表格計(jì)算的數(shù)據(jù)存入到指定的文件中。該系統(tǒng)可以實(shí)現(xiàn)將每艘船的數(shù)據(jù)單獨(dú)存入一個(gè)文件,同時(shí)允許用戶(hù)打開(kāi)已經(jīng)存在的文件,方便用戶(hù)進(jìn)行修改。CELoad-Doc類(lèi)的原型設(shè)計(jì)如下:
class CELoadDoc:public CDocument
{
public:
CString m_strShipName;//船名
CStringm_strEngineChosen[2][8];//已選定的發(fā)電機(jī)名稱(chēng)
int m_nDeviceNumber[8];//各類(lèi)設(shè)備數(shù)量
floatm_fSumP1[8],m_fSumQ1[8];//I類(lèi)負(fù)荷總有功功率,總無(wú)功率
floatm_fSumP2[8],m_fSumQ2[8];//II類(lèi)負(fù)荷總有功功率,總無(wú)功率
floatm_fSumP1Coef[8],m_fSumQ1Coef[8];//考慮同時(shí)系數(shù)的I類(lèi)負(fù)荷總功率
floatm_fSumP2Coef[8],m_fSumQ2Coef[8];//考慮同時(shí)系數(shù)的II類(lèi)負(fù)荷總功率
floatm_fSumP[8],m_fSumQ[8];//考慮同時(shí)系數(shù)的總功率之和
floatm_fSumP5[8],m_fSumQ5[8];//考慮網(wǎng)絡(luò)傳輸中功率損失5%時(shí)的總功率
floatm_cos[8];//加權(quán)平均值功率
floatm_fCoef1,m_fCoef2;//負(fù)荷系數(shù)
…
};
在通常情況下,船舶設(shè)備本身的功率與負(fù)荷計(jì)算表中的實(shí)際計(jì)算功率是不同的。此外,船舶的電力設(shè)備還可能受到間歇負(fù)荷和特殊設(shè)備的影響。本研究中綜合考慮上述三類(lèi)情況,相應(yīng)的系數(shù)計(jì)算主要包括以下3個(gè)方面[7]。
3.1 電動(dòng)機(jī)、機(jī)械負(fù)荷的各類(lèi)系數(shù)
船舶電力負(fù)荷計(jì)算表中的主要功率和各類(lèi)系數(shù)的計(jì)算公式如下:
1)電動(dòng)機(jī)利用系數(shù)K1=P2/P1;
2)機(jī)械負(fù)荷系數(shù)K2=P3/P2;
3)電動(dòng)機(jī)負(fù)荷系數(shù)K3=K1×K2=P3/P1;
4)電動(dòng)機(jī)額定效率η=P1/P4;
5)電動(dòng)機(jī)實(shí)際所需總功率
Pe≈K3×P4=(K3/η)×P1=P3/η;
其中:P1為電動(dòng)機(jī)額定功率 (kW);P2為機(jī)械軸上所需的最大軸功率 (kW);P3為機(jī)械軸上的輸出功率 (kW);P4為電動(dòng)機(jī)需要從電網(wǎng)獲取的功率 (kW)。上述幾類(lèi)系數(shù)均由本系統(tǒng)自動(dòng)完成計(jì)算。
3.2 同時(shí)使用系數(shù)K0
K0是運(yùn)行的間歇載荷最大需要功率之和與所有間斷負(fù)載的最大需要功率之和的比值。目前,在國(guó)內(nèi)外大多數(shù)計(jì)算中,同時(shí)使用系數(shù)K0都選為0.4或0.5。
3.3 其他特殊設(shè)備系數(shù)
1)廚房及洗衣設(shè)備 這些設(shè)備工作的時(shí)段和時(shí)間的長(zhǎng)短都較為固定,其負(fù)荷系數(shù)一般取為0.2~0.3。
2)舵機(jī) 該設(shè)備正常工作時(shí)所需要的功率遠(yuǎn)小于其額定功率,其負(fù)荷系數(shù)可以考慮取小值,一般取為0.2~0.3。
3)空調(diào) 一般按照2臺(tái)壓縮機(jī)同時(shí)運(yùn)行計(jì)算制冷量,此外空調(diào)還應(yīng)作為間歇負(fù)荷考慮。
交互操作設(shè)計(jì)是本研究的重點(diǎn)和難點(diǎn),為了能夠記錄用戶(hù)對(duì)表格數(shù)據(jù)的操作,以符合重繪表格的要求,本研究在文檔類(lèi)中采用了動(dòng)態(tài)鏈表作為主要的數(shù)據(jù)結(jié)構(gòu)支持,從4個(gè)方面進(jìn)行了設(shè)計(jì)。
1)編輯框定位 根據(jù)用戶(hù)鼠標(biāo)的位置坐標(biāo),將編輯框移動(dòng)到指定的單元格位置,以實(shí)現(xiàn)即點(diǎn)即輸入的目的。該方法的步驟如下:
(1)返回鼠標(biāo)坐標(biāo)點(diǎn)point,存入到變量m_ SelectedPos中。
(2)根據(jù)已經(jīng)繪制的表格邊框線(xiàn),判定m_ SelectedPos所處的單元格,并返回該單元格的尺寸m_ItemRect及行列坐標(biāo)i,j。
(3)修改編輯框的位置,并改變編輯框的大小與該單元格相同。
(4)將編輯框的內(nèi)容輸入到由CEDevice類(lèi)型的指針數(shù)組m_pEDevice[i][j]所指向的內(nèi)存空間存放。
(5)調(diào)用Invalidate方法,更新視圖,以顯示編輯框新輸入的內(nèi)容。
2)表格行刪除 該方法的步驟如下:
(1)返回待刪除行的鼠標(biāo)坐標(biāo)點(diǎn)point,存入到變量m_SelectedPos中。
(2)根據(jù)已經(jīng)繪制的表格邊框線(xiàn),判定m_ SelectedPos所處的單元格,并返回該單元格的尺寸m_ItemRect及行坐標(biāo)i。
(3)釋放指針變量m_pEDevice[i]所指向的內(nèi)存空間。
(4)調(diào)用Invalidate方法,更新視圖。
3)表格行插入 該方法的步驟如下:
(1)返回待插入行的鼠標(biāo)坐標(biāo)點(diǎn)point,存入到變量m_SelectedPos中。
(2)根據(jù)已經(jīng)繪制的表格邊框線(xiàn),判定m_ SelectedPos所處的單元格,并返回該單元格的尺寸m_ItemRect及行列坐標(biāo)i,j。
(3)使用new方法動(dòng)態(tài)分配CEDevice類(lèi)型大小的內(nèi)存空間,由指針變量m_pEDevice[j]指向,并初始化該內(nèi)存空間的全部成員變量。
(4)調(diào)用Invalidate方法,更新視圖。
上述3種基本操作均以CEDevice類(lèi)型的指針作為數(shù)據(jù)支持,均可共享該部分?jǐn)?shù)據(jù),實(shí)時(shí)地反映用戶(hù)操作的情況,并由CDocument文檔類(lèi)負(fù)責(zé)處理,進(jìn)行保存和打開(kāi)文件的操作。
4)船舶設(shè)備數(shù)據(jù)的鏈表結(jié)構(gòu) 考慮到在實(shí)際應(yīng)用中,用戶(hù)可能隨時(shí)添加和刪除表格數(shù)據(jù),因此當(dāng)用戶(hù)在執(zhí)行第1) ~第3)步時(shí),均需要訪(fǎng)問(wèn)文檔類(lèi)的數(shù)據(jù),本研究在CDocument類(lèi)中增加了鏈表指針數(shù)組m_RowArray,程序通過(guò)坐標(biāo)變換可以先獲得該船舶設(shè)備數(shù)據(jù)所在行的坐標(biāo)i和j,并通過(guò)m_RowArraya[i]引用即可得到該數(shù)據(jù)所在的內(nèi)存空間的地址。
對(duì)于表格的行刪除操作,可以通過(guò)程序
deletem_RowArray[i]
m_RowArray.RemoveAt(m_SelectedPosRow)
來(lái)釋放某種船舶的數(shù)據(jù),以達(dá)到刪除該設(shè)備的目的。
對(duì)于表格的插入操作,主要包括兩步:動(dòng)態(tài)分配設(shè)備類(lèi)的內(nèi)存空間 (new CEDevice)以及增加鏈表數(shù)據(jù)元素,其程序如下:
m_RowArray.InsertAt(m_SelectedPos.Row,new CEDevice)
此外,為了能夠重新顯示用戶(hù)修改的數(shù)據(jù),該鏈表也作為表格重繪的數(shù)據(jù)支持。程序首先進(jìn)行電力負(fù)荷計(jì)算表的字體設(shè)置、顯示滾動(dòng)范圍設(shè)置和表頭輸出,再判定鏈表指針是否到達(dá)表尾。如果為否,則修改鏈表指針,使其指向下一船舶設(shè)備行數(shù)據(jù),并輸出該設(shè)備數(shù)據(jù)和繪制表格邊框。上述過(guò)程循環(huán)進(jìn)行,當(dāng)鏈表指針到達(dá)表尾,則退出循環(huán),輸出選定方案的各項(xiàng)統(tǒng)計(jì)數(shù)據(jù)。
上述過(guò)程相關(guān)的算法流程如圖2所示。
圖2 船舶電力負(fù)荷表格交互功能流程圖Fig.2 The flow charts of interactive function for ship power loading
船舶的電力負(fù)荷計(jì)算不僅作為船舶電站容量的參考,是船舶電力系統(tǒng)發(fā)動(dòng)機(jī)配置的基礎(chǔ),直接影響到發(fā)動(dòng)機(jī)型號(hào)的選擇,而且還可有效地避免船舶電站容量匹配不合理,資源和資金浪費(fèi)的缺陷。本研究中采用面向?qū)ο蟮姆椒?設(shè)計(jì)了完全仿真手工繪制計(jì)算的電子表格,實(shí)際運(yùn)行情況如圖3所示。
從圖3可以看出,由于使用了編輯框定位技術(shù),使原來(lái)通過(guò)繪制方法得到的靜態(tài)表格處于可編輯狀態(tài),用戶(hù)只要使用鼠標(biāo)單擊表格中的任意單元格,即可對(duì)該單元格進(jìn)行編輯操作。由于每個(gè)單元格可以通過(guò)行、列標(biāo)號(hào)記錄該單元格所對(duì)應(yīng)的數(shù)據(jù),因此,將移動(dòng)的編輯框和后臺(tái)數(shù)據(jù)建立關(guān)聯(lián),當(dāng)編輯框離開(kāi)單元格后,即修改該單元格對(duì)應(yīng)的數(shù)據(jù),確保了顯示內(nèi)容和后臺(tái)保存內(nèi)容的一致性。從應(yīng)用角度看,該單元格有效地避免了用戶(hù)利用控件方法接受用戶(hù)輸入的缺陷,實(shí)現(xiàn)了用戶(hù)全屏幕編輯和修改數(shù)據(jù)。
本研究中提出利用MFC的View-Document對(duì)象結(jié)構(gòu),設(shè)計(jì)船舶電力負(fù)荷計(jì)算的電子表格系統(tǒng)。與傳統(tǒng)的基于窗體-控件的輸入界面不同,該方法模擬了設(shè)計(jì)人員手工繪制表格的方法,根據(jù)用戶(hù)鼠標(biāo)的點(diǎn)擊坐標(biāo),定位單個(gè)編輯框控件,可修改該單元格對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),并由CDocument對(duì)象負(fù)責(zé)存盤(pán),集保存和輸入操作為一體,所有的計(jì)算均由計(jì)算機(jī)負(fù)責(zé),用戶(hù)完全處于自己最熟悉的可視化環(huán)境中,大大降低了用戶(hù)通過(guò)表格計(jì)算的難度,該系統(tǒng)具有很好的應(yīng)用前景。
圖3 船舶電力負(fù)荷表格計(jì)算系統(tǒng)的初始界面Fig.3 The initial table of software system for shippower loading
[1] 張統(tǒng)光.淺析船舶電站容量確定和計(jì)算方法[J].中國(guó)水運(yùn), 2011,11(2):106-107.
[2] Ikeda M,HIyama T.Simulation studies of the transients of squirrel -cage induction motors[J].IEEE Trans-actions on Energy Conversion,2007,22(2):233-239.
[3] Bossio G R,Solsona JA,Garcna G O,et al.Model for three-phase induction motors with stator core faults[J].Electric Power Applications,IET,2010,4(8):591-602.
[4] 王煥文,王殿卿.船舶電力負(fù)荷計(jì)算軟件開(kāi)發(fā)[J].中國(guó)造船, 2004,45(12):233-237.
[5] 李春葆,章啟俊.Visual C++程序設(shè)計(jì)基礎(chǔ)教程[M].武漢:武漢大學(xué)出版社,2006.
[6] Caragian B.Visual C++6.0程序員指南[M].北京:希望電腦公司,1998.
[7] 顧一清,姚炯,陳逢源.運(yùn)輸船電力負(fù)荷計(jì)算探討[J].船舶設(shè)計(jì)通訊,2010(增刊):65-70.
A tabular com putation software system for ship power loading based on objectmodel
LüXian-qiang,TAO Ye,YANGWen-lian,YANG Song,WU Jun-feng,SHIYun-feng
(Educational Technology&Computer Center,Dalian Ocean University,Dalian 116023,China)
Considering the problem of abundant input data and complex table design for ship power loading,the paper puts forward a tabular computation software system by using MFC objectmodel,which adopts view object to draw tables and calculate the items in tables and uses the editbox to locate the proper position.The method simulates the process of inputting data by handwork,avoids inconsistence between data input and print result as a result of using Form-Controlmethod,and accomplishesW.Y.S.W.Y.G.Furthermore the View-Document objectmodel can dealwith data in table independently,and supports the operations such as file open,save,and print.The proposed method has visual propety and simulation analysis ability.The actual example shows that it has good executive efficiency and pratical effect.
power loading;objectmodel;tabular computation;MFC
U662.6;TP273
A
2095-1388(2012)04-0377-06
2012-05-10
大連海洋大學(xué)教育教學(xué)改革研究項(xiàng)目 (2011);遼寧省優(yōu)秀青年骨干教師資助計(jì)劃項(xiàng)目 (2006);遼寧省教育廳高等學(xué)??蒲杏?jì)劃項(xiàng)目 (2008146)
呂顯強(qiáng) (1957-),男,副教授。E-mail:lxq@dlou.edu.cn