




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、軟件設(shè)計(jì)題 目: 公司計(jì)薪系統(tǒng) 專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué) 生 姓 名班 級(jí) 學(xué) 號(hào)指 導(dǎo) 教 師指 導(dǎo) 單 位計(jì)算機(jī)學(xué)院軟件工程系日 期2001教師評(píng)語(yǔ) 教師簽名: 年 月 日成績(jī)?cè)u(píng)定備 注一、 課題名稱公司記薪系統(tǒng)功能內(nèi)容:計(jì)算不同員工的薪水且不同的工作范圍就會(huì)有不同的稅收,可以設(shè)置員工的基本信息,在登錄時(shí)用戶需要密碼。2、 課程內(nèi)容和要求因?yàn)楸菊n程的要求的功能對(duì)于一個(gè)公司是在過(guò)于簡(jiǎn)單,所以我自己的任務(wù)和目標(biāo)如下:1任務(wù)和目標(biāo):(1). 三種員工的記薪方式:總經(jīng)理的工資 = 基本工資 + 加班獲得的津貼 - 缺勤的扣除 - 個(gè)人所得稅;時(shí)薪人員的工資 = 工作小時(shí)數(shù) * 每
2、小時(shí)工資 + 加班獲得的津貼 - 缺勤的扣除 - 個(gè)人所得稅;銷(xiāo)售人員的工資 =工作小時(shí)數(shù) * 每小時(shí)工資 + 傭金 * 銷(xiāo)售額 + 加班獲得的津貼 - 缺勤的扣除 - 個(gè)人所得稅。(2)員工基本信息的錄入和修改:能夠添加員工的基本信息,修改以及刪除。用Access來(lái)保存員工的基本信息且能夠在窗體上立即顯示,而且如果員工的編號(hào)重復(fù)時(shí)能夠包出錯(cuò)誤信息。(3)員工的考勤和加班以及用戶的添加員工工資的基本設(shè)置:在有關(guān)的窗體上添加的時(shí)候即時(shí)的把更新的內(nèi)容存到數(shù)據(jù)庫(kù)中。(4)查詢工資:?jiǎn)T工只能查詢關(guān)于本人的工資信息,換個(gè)角度也就是關(guān)于權(quán)限的問(wèn)題。(5). 關(guān)于年終獎(jiǎng)金:能夠間接地體現(xiàn)員工本身的敬業(yè)態(tài)度核
3、對(duì)公司的貢獻(xiàn)多少。(6)退出時(shí)的數(shù)據(jù)保存:對(duì)于數(shù)據(jù)庫(kù)的操作問(wèn)題,在上述的功能中已經(jīng)實(shí)現(xiàn)。2. 個(gè)人進(jìn)一步想要擴(kuò)展的功能:工資信息用Excel的文件輸出的報(bào)表功能,以及軟件信息的幫助功能。3各功能的模塊:基本模塊如下:工資設(shè)置的模塊,員工信息的模塊,加班信息的模塊,考勤信息的模塊,醫(yī)療保險(xiǎn)的模塊,登陸信息的模塊。三、 算法分析和流程圖1開(kāi)發(fā)環(huán)境: 開(kāi)發(fā)工具Dephi 7.0,數(shù)據(jù)源文件Access。 2總體設(shè)計(jì): 主要窗體:一個(gè)主窗體frmMain,一個(gè)登陸的窗體frmLogin,一個(gè)修改和增加登陸信息的窗體frmAdminLogin,一個(gè)增加用戶的窗體frmAdminLoginAdd,一個(gè)修改
4、用戶密碼的窗體frmAdminLoginModify,一個(gè)修改工種的窗體frmGz,一個(gè)修改加班類別的窗體frmJblb,一個(gè)修改缺勤類別的窗口frmQqlb,一個(gè)修改員工基本信息的窗體frmYgxx,一個(gè)修改考勤信息的窗體frmKqxx,一個(gè)修改醫(yī)療保險(xiǎn)的窗體frmYlbx, 3數(shù)據(jù)設(shè)計(jì):工種的數(shù)據(jù)表的設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明gz_id自動(dòng)編號(hào)主鍵gz文本工種jbgz貨幣基本月工資津貼信息的數(shù)據(jù)表設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明jt_id自動(dòng)編號(hào)主鍵yg_id數(shù)字jbsj日期/時(shí)間加班時(shí)間jbts數(shù)字加班天數(shù)jblb_id數(shù)字加班類別考勤信息的數(shù)據(jù)表設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明kq_id自動(dòng)編號(hào)主
5、鍵yg_id數(shù)字kqsj日期/時(shí)間考勤時(shí)間qqts數(shù)字缺勤天數(shù)qqlb_id數(shù)字缺勤類別年終獎(jiǎng)金的數(shù)據(jù)表設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明nzjj_id自動(dòng)編號(hào)主鍵yg_id數(shù)字員工編號(hào)nian數(shù)字年zj貨幣總計(jì)醫(yī)療保險(xiǎn)的數(shù)據(jù)表設(shè)置字段名稱數(shù)據(jù)類型說(shuō)明ylbx_id自動(dòng)編號(hào)主鍵yg_id數(shù)字ylfy貨幣醫(yī)療報(bào)銷(xiāo)費(fèi)bxfy貨幣保險(xiǎn)費(fèi)sj日期/時(shí)間時(shí)間缺勤類別的數(shù)據(jù)表的設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明qqlb_id自動(dòng)編號(hào)主鍵qqlb文本缺勤類別jbgz貨幣扣除月工資ndxs數(shù)字扣除年度分紅系數(shù)加班類別的數(shù)據(jù)表的設(shè)置:加班類別數(shù)據(jù)類型說(shuō)明jblb_id自動(dòng)編號(hào)主鍵jblb文本加班類別jbgz貨幣增加月工資ndx
6、s數(shù)字增加年度分紅系數(shù)年度效益的數(shù)據(jù)表的設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明ndxy_id自動(dòng)編號(hào)主鍵ndxy貨幣年度效益nian數(shù)字年月工資信息數(shù)據(jù)表的設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明ygz_id自動(dòng)編號(hào)主鍵yg_id數(shù)字員工編號(hào)nian數(shù)字年yue數(shù)字月jbgz貨幣原本工資gs數(shù)字工時(shí)sgz貨幣元/時(shí)jt貨幣津貼kc貨幣扣除bx貨幣醫(yī)療保險(xiǎn)zj貨幣總計(jì)yj數(shù)字傭金xse數(shù)字銷(xiāo)售額員工基本信息的數(shù)據(jù)表設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明yg_id自動(dòng)編號(hào)主鍵ygh文本員工號(hào)、主鍵xm文本姓名gz_id數(shù)字工種bm文本部門(mén)gzsj日期/時(shí)間工作時(shí)間gs數(shù)字每月工時(shí)sgz數(shù)字元/時(shí)yj數(shù)字傭金xse數(shù)字銷(xiāo)售額用戶信息的數(shù)
7、據(jù)表設(shè)置:字段名稱數(shù)據(jù)類型說(shuō)明uid文本用戶名、主鍵Pwd文本用戶密碼Pwd_level文本用戶權(quán)限界面的主要流程是這樣的:然后主界面的各個(gè)子頁(yè)面通過(guò)一些按鈕來(lái)彈出各自所需的窗體。4 詳細(xì)設(shè)計(jì)主界面的設(shè)計(jì)如下:主界面的組件主要是一個(gè)TpageControl,然后在這個(gè)TpageControl上一個(gè)個(gè)的添加頁(yè)面,如上圖所示,總共有9個(gè)頁(yè)面,在工資標(biāo)準(zhǔn)設(shè)定的界面上有如下組件:TradioGroup,TDBGrid還有幾個(gè)TspeedButton.里面有四個(gè)TDBGrid,每個(gè)都有三個(gè)TspeedButton,然后不同的TspeedButton對(duì)應(yīng)不同的窗體顯示,比如說(shuō)在選中TradioGroup中
8、的工種,然后按下其界面下的添加就會(huì)顯示下面的窗體如果選其他的選項(xiàng)的話就會(huì)出現(xiàn)與之想對(duì)應(yīng)的界面。其他與之相同的界面設(shè)計(jì),這里就不多介紹了。在主界面的定義的組件有:TapplicationEvents,Tlabel,Timage,TbitBtn,Tbutton,TspeedButton,TDBGrid,Tsplitter,Tedit,TcomboBox,Tpanel,TtabSheet主界面里面定義的函數(shù)主要有以下: procedure showGzbz(Index: Integer);/工資標(biāo)準(zhǔn)設(shè)定窗體顯示內(nèi)容不同的函數(shù) function AddDbData(frm: TfrmPBase): B
9、oolean;/往數(shù)據(jù)庫(kù)里面寫(xiě)數(shù)據(jù)的函數(shù) function ModifyDbData(frm: TfrmPBase; ds: TDataSet): Boolean;/修改數(shù)據(jù)庫(kù) function DelDbData(ds: TDataSet): Boolean;/刪除數(shù)據(jù)庫(kù)里面的數(shù)據(jù)function IsHaveRelation(ds: TDataSet; field1, table2, field2: string):Boolean; /兩個(gè)內(nèi)容的比較 procedure CalcYgz();/計(jì)算月工資的函數(shù)procedure CalcNzjj();/計(jì)算年終獎(jiǎng)金的函數(shù)還有一個(gè)比較不一樣的
10、是DataModule的建立,也就是實(shí)現(xiàn)各個(gè)窗體之間的數(shù)據(jù)連接。其里面包括ADO里面的組件:TADOConnection,TADOQuery,TdataSource。其最主要的功能就是用起連接數(shù)據(jù)庫(kù)。TADOQuery用于使用SQL語(yǔ)句查詢數(shù)據(jù) ,TADOConnection用與聯(lián)接數(shù)據(jù)庫(kù)使用,然后每一個(gè)TADOQuery都有一個(gè)TdataSource與之相連接,且要把數(shù)據(jù)表中的各個(gè)屬性給添加進(jìn)TADOQuery的fields里面。四 主要部分源程序工資標(biāo)準(zhǔn)設(shè)定也面不同顯示的代碼 procedure TfrmMain.showGzbz(Index: Integer); procedure sh
11、owcontrol(Index: Integer; show: Boolean); begin case Index of 0:begin /選不同選相時(shí)顯示界面的不同,按鈕和頁(yè)面與之相對(duì)應(yīng) dbgrd1.Visible := show; btn1.Visible := show; btn2.Visible := show; btn3.Visible := show; end; 1:begin /選擇加班時(shí)顯示的頁(yè)面 dbgrd2.Visible := show; btn4.Visible := show; btn5.Visible := show; btn6.Visible := show;
12、 end; 2:begin /選擇缺勤時(shí)顯示的頁(yè)面 dbgrd3.Visible := show; btn7.Visible := show; btn8.Visible := show; btn9.Visible := show; end; 3:begin /選擇年度效益時(shí)顯示的頁(yè)面 dbgrd4.Visible := show; btn10.Visible := show; btn11.Visible := show; btn12.Visible := show; end; end; end;begin case Index of 0:begin/顯示工種設(shè)置的信息,其他屏蔽,其他類似 sh
13、owcontrol(1, False); showcontrol(2, False); showcontrol(3, False); showcontrol(0, True); end; 1:begin showcontrol(0, False); showcontrol(2, False); showcontrol(3, False); showcontrol(1, True); end; 2:begin showcontrol(0, False); showcontrol(1, False); showcontrol(3, False); showcontrol(2, True); end
14、; 3:begin showcontrol(0, False); showcontrol(1, False); showcontrol(2, False); showcontrol(3, True); btn10.Visible := False; / 不能更改企業(yè)年度效益 btn11.Visible := False; btn12.Visible := False; end; end;end;/ 添加資料的函數(shù)function TfrmMain.AddDbData(frm: TfrmPBase): Boolean;begin frm.strState := 'N' / 這幾個(gè)
15、函數(shù)都是繼承了另外一個(gè)窗體TPBase上的信息 if mrOk = frm.ShowModal then Result := True else Result := False;end;/ 修改資料的函數(shù)function TfrmMain.ModifyDbData(frm: TfrmPBase; ds: TDataSet): Boolean;begin Result := False; if ds.RecordCount >0 then begin /當(dāng)數(shù)據(jù)庫(kù)中有內(nèi)容可以修改的時(shí)候 frm.strState := 'M' if mrOk = frm.ShowModal t
16、hen /是否按下確定 Result := True; end else Application.MessageBox('沒(méi)有可以修改的信息。', PChar(Application.Title),MB_OK + MB_ICONINFORMATION); /沒(méi)有可以提供修改消息的時(shí)候出現(xiàn)提示對(duì)話框end;/ 刪除資料function TfrmMain.DelDbData(ds: TDataSet): Boolean;begin Result := False; if ds.RecordCount >0 then begin /看數(shù)據(jù)庫(kù)中是否還有信息 if Applicat
17、ion.MessageBox('是否要?jiǎng)h除此信息?', PChar(Application.Title), MB_YESNO + MB_ICONQUESTION) = IDYES then /提示是否刪除數(shù)據(jù) begin ds.Delete;/刪除數(shù)據(jù) Result := True; end; end else Application.MessageBox('沒(méi)有可以刪除的信息。', PChar(Application.Title), MB_OK + MB_ICONINFORMATION); /沒(méi)有可以刪除的信息時(shí)應(yīng)該有報(bào)錯(cuò)end;/IsHaveRelation
18、函數(shù)functionTfrmMain.IsHaveRelation(ds: TDataSet; field1, table2, field2: string):Boolean;var v: Variant; q: TADOQuery;begin Result := False; if ds.RecordCount >0 then begin /判斷數(shù)據(jù)庫(kù)中是否為空 if dsfield1 <> null then begin/判斷數(shù)據(jù)庫(kù)中的第一個(gè)屬性是否為空 v := dsfield1; q := TADOQuery.Create(nil); q.Connection :=
19、dm.con1; /進(jìn)行數(shù)據(jù)庫(kù)的鏈接 q.SQL.Text := select'+field2+'from'+table2+'where'+field2+' = :field2' q.Parameters.ParamByName('field2').Value := v; q.Prepared := True; q.Open; if q.RecordCount >0 then /判斷是否有數(shù)據(jù) Result := True; q.Close; q.Free; end; end;end;/ 計(jì)算月工資procedure
20、 TfrmMain.CalcYgz();var id, n, y, r: string; sql: string; qry: TADOQuery; jbgz, jt, kc, bx, zj,gs,sgz,yj,xse: Double;begin id := dm.qryYgxx'yg_id' /將員工信息中的員工號(hào)賦值給id n := edt1.Text; y := IntToStr(cbb1.ItemIndex+1); r := IntToStr(DaysInAMonth(StrToInt(n), StrToInt(y); / 刪除舊數(shù)據(jù) sql := 'delete
21、 '+'from ygz '+'where nian='+n+' and yue='+y+' and yg_id='+id;/將月工資那個(gè)頁(yè)面里面的值給刪掉 dm.con1.Execute(sql); dm.qryYgz.Close; dm.qryYgz.Open; qry := TADOQuery.Create(nil); qry.Connection := dm.con1; / 查找原本工資 sql := 'SELECT Sum(gz.jbgz+ygxx.gs*ygxx.sgz+ygxx.yj*xse) AS
22、jbgz '+'FROM gz INNER JOIN ygxx ON gz.gz_id = ygxx.gz_id '+'WHERE (ygxx.yg_id)='+id+'); ' /原本工資的算法 qry.SQL.Text := sql; qry.Open; jbgz :=qry.FieldByName('jbgz').AsFloat; /將jbgz里的內(nèi)容轉(zhuǎn)換 qry.Close; / 計(jì)算津貼 sql := 'SELECT Sum(jtxx.jbts * jblb.jbgz) AS jt '+'
23、FROM jblb INNER JOIN jtxx ON jblb.jblb_id=jtxx.jblb_id'+'WHERE(jtxx.yg_id)='+id+')AND(jtxx.jbsj)>=#'+y+'/1/'+n+'#) AND '+'(jtxx.jbsj)<=#'+y+'/'+r+'/'+n+'#); ' qry.SQL.Text := sql; qry.Open; jt :=qry.FieldByName('jt').A
24、sFloat; /將jt里的值轉(zhuǎn)換成float qry.Close; / 計(jì)算扣除 sql := 'SELECT Sum(kqxx.qqts*qqlb.jbgz) AS kc '+'FROM qqlb INNER JOIN kqxx ON qqlb.qqlb_id=kqxx.qqlb_id'+'WHERE(kqxx.yg_id)='+id+')AND(kqxx.kqsj)>=#'+y+'/1/'+n+'#) AND '+ '(kqxx.kqsj)<=#'+y+'/
25、'+r+'/'+n+'#); ' qry.SQL.Text := sql; qry.Open; kc :=qry.FieldByName('kc').AsFloat; qry.Close; / 計(jì)算報(bào)銷(xiāo)/保險(xiǎn)sql:=SELECTSum(ylbx.ylfy+ylbx.bxfy)ASbx'+'FROMylbx'+'WHERE(ylbx.yg_id)='+id+')AND(ylbx.sj)>=#'+y+'/1/'+n+'#) AND '+'(
26、ylbx.sj)<=#'+y+'/'+r+'/'+n+'#); ' /保險(xiǎn)和報(bào)銷(xiāo)的算法 qry.SQL.Text := sql; qry.Open; bx :=qry.FieldByName('bx').AsFloat; /對(duì)保險(xiǎn)和報(bào)銷(xiāo)的結(jié)果進(jìn)行變量類型的轉(zhuǎn)換 qry.Close; qry.Close; qry.Free; / 計(jì)算總計(jì) zj := jbgz + jt - kc - bx;/這個(gè)用來(lái)計(jì)算不同工資的稅收算法 if zj< 0 then zj := 0 /工資小于0的情況 else if zj &g
27、t;0 then if zj <= 800 then zj:=zj /工資在0與800之間的情況 else if zj >800 then if zj<= 1000 then zj := zj * 0.95 /工資在800到1000之間的情況 else if zj >1000 then if zj <=5000 then zj := zj * 0.9 /工資在1000到5000之間的情況 else zj := zj * 0.8; /工資大于5000的情況 /將算好的數(shù)據(jù)寫(xiě)入數(shù)據(jù)庫(kù) dm.qryYgz.Append; dm.qryYgz'yg_id'
28、 := StrToInt(id); dm.qryYgz'nian' := StrToInt(n); dm.qryYgz'yue' := StrToInt(y); dm.qryYgz'jbgz' := jbgz; dm.qryYgz'jt' := jt; dm.qryYgz'kc' := kc; dm.qryYgz'bx' := bx; dm.qryYgz'zj' := zj; dm.qryYgz.Post;end;/ 月工資報(bào)表procedure TfrmMain.btn28Clic
29、k(Sender: TObject);var sql, n, y, filename: String; qry: TADOQuery; i, z: Integer; ExcelApp: Variant; sheet, template: Variant;begin try StrToInt(edt1.Text); except Application.MessageBox('請(qǐng)輸入正確的年份', PChar(Application.Title), MB_OK + MB_ICONWARNING); /看是否和已有的工資信息的年分是否相同 exit; end; n := edt1.
30、Text; y := IntToStr(cbb1.ItemIndex+1); qry := TADOQuery.Create(nil); qry.Connection := dm.con1; sql := 'SELECT ygxx.yg_id '+'FROM ygz INNER JOIN ygxx ON ygz.yg_id = ygxx.yg_id '+'WHERE (ygz.nian)='+n+') AND (ygz.yue)='+y+');' / 是否生成了月工資 qry.SQL.Text := sql; qr
31、y.Open; z := qry.RecordCount; qry.Close; if z=0 then begin qry.Free; Application.MessageBox('請(qǐng)生成月工資記錄,然后使用報(bào)表功能。', PChar(Application.Title), MB_OK + MB_ICONINFORMATION);/沒(méi)有可以報(bào)表的工資信息 exit; end;try pb1.Min := 0; pb1.Max := z+4;pb1.Step := 1;pb1.Position := 0;pb1.Visible := True; pgc1.Enabled :=
32、 False; Screen.Cursor := crHourGlass;創(chuàng)建 Excel 例程 ExcelApp := CreateOleObject('Excel.Application'); ExcelApp.Visible := False; filename := ExtractFilePath(Application.ExeName) + 'templateygz.xls' ExcelApp.WorkBooks.Open(filename); sheet := ExcelApp.WorkBooks1.Sheets1; template := Exce
33、lApp.WorkBooks1.Sheets2; ExcelApp.Caption := ExcelApp.WorkBooks1.Sheets1.Name+'報(bào)表' pb1.StepIt; CopyRange(template, 1,1, 8,3, sheet, 1,1); / 復(fù)制模板樣子 FillValue(sheet, 1,8, Sheet.Cells1,8.Value+n+'年'+y+'月',0,False); / 填寫(xiě)日期 pb1.StepIt; sql := 'SELECT ygxx.ygh, ygxx.xm, gz.gz,
34、ygz.jbgz, ygz.jt, ygz.kc, ygz.bx, ygz.zj '+'FROM gz INNER JOIN (ygz INNER JOIN ygxx ON ygz.yg_id = '+' ygxx.yg_id) ON gz.gz_id = ygxx.gz_id '+ 'WHERE (ygz.nian)='+n+') AND (ygz.yue)='+y+') '+'ORDER BY ygxx.bm, gz.gz, ygxx.xm;' / 統(tǒng)計(jì)月工資 qry.SQL.Text
35、:= sql; qry.Open; pb1.StepIt; i := 4; while not qry.Eof do begin Application.ProcessMessages; FillValue(sheet, i,1, qry.FieldByName('ygh').AsString,3); / 填寫(xiě)數(shù)據(jù) FillValue(sheet, i,2, qry.FieldByName('xm').AsString,3); FillValue(sheet, i,3, qry.FieldByName('gz').AsString,3); Fil
36、lValue(sheet, i,4, qry.FieldByName('jbgz').AsFloat); FillValue(sheet, i,5, qry.FieldByName('jt').AsFloat); FillValue(sheet, i,6, qry.FieldByName('kc').AsFloat); FillValue(sheet, i,7, qry.FieldByName('bx').AsFloat); FillValue(sheet, i,8, qry.FieldByName('zj').A
37、sFloat); qry.Next; Inc(i); pb1.StepIt; end; filename := ExtractFilePath(Application.ExeName) + '報(bào)表'+n+'.'+y+' 員工月工資報(bào)表.xls' / 保存報(bào)表 if FileExists(filename) then DeleteFile(filename); ExcelApp.DisplayAlerts := False; template.Delete; ExcelApp.WorkBooks1.SaveAs(filename); pb1.Ste
38、pIt; ExcelApp.Visible := True; sheet.PrintPreview; / 打印預(yù)覽 ExcelApp.WorkBooks.Close; ExcelApp.Quit; / 結(jié)束except on E: Exception do begin ExcelApp.WorkBooks1.Saved := True; ExcelApp.WorkBooks.Close;ExcelApp.Quit; Application.MessageBox(PChar(E.Message + #13+#13+ '生成報(bào)表失敗'), PChar(Application.Tit
39、le), MB_OK + MB_ICONSTOP); end;end; pgc1.Enabled := True;Screen.Cursor := crDefault;qry.Close;qry.Free; pb1.Visible := False;end;主界面的其他函數(shù)或事件都大致原理和以上所述差不多,所以也不一一寫(xiě)上。DataSet 函數(shù) /保存DataSet的事件function SaveCDSEvents(ds: TDataSet): cdsEventsArray;/恢復(fù)DataSet的事件procedure RestoreCDSEvents(ds: TDataSet; e: cds
40、EventsArray);/ 將 TDataSet 的某個(gè)字段,形成 StringListprocedure AssignDsStrings(ds: TDataSet; s: string; sl: TStrings);/ Excel 函數(shù) / 數(shù)字轉(zhuǎn)換成Excel的格式function IntToExcelStr(n: Integer): string;/ 為單元格加邊框procedure RangeBorder(sheet: Variant; y, x: Integer);/ 復(fù)制 Sheet1.Range 到 Sheet2procedure CopyRange(src: Variant;
41、 x1, y1, x2, y2: Integer; dest: Variant; x,y: Integer);/ 填充單元格內(nèi)容 align=1 left, 2 right 3 centerprocedure FillValue(sheet:Variant; y, x:Integer; value:Variant ; align:Integer = 0; border: Boolean = True);/ 合并單元格procedure MergeCells(sheet: Variant; x1, y1, x2, y2: Integer);implementation/保存CLIENTDATAS
42、ET的事件function SaveCDSEvents(ds: TDataSet): cdsEventsArray;begin Result 1.ne := ds.AfterCancel; Result 2.ne := ds.AfterClose; Result 3.ne := ds.AfterDelete;Result 4.ne := ds.AfterEdit; Result 5.ne := ds.AfterInsert;Result 6.ne := ds.AfterOpen; Result 7.ne := ds.AfterPost;Result 8.ne := ds.AfterRefres
43、h; Result 9.ne := ds.AfterScroll;Result10.ne := ds.BeforeCancel; Result11.ne := ds.BeforeClose;Result12.ne := ds.BeforeDelete; Result13.ne := ds.BeforeEdit;Result14.ne := ds.BeforeInsert; Result15.ne := ds.BeforeOpen;Result16.ne := ds.BeforePost; Result17.ne := ds.BeforeRefresh;Result18.ne := ds.Bef
44、oreScroll; Result19.ne := ds.OnCalcFields;Result20.ne := ds.OnNewRecord; Result 1.ee := ds.OnDeleteError;Result 2.ee := ds.OnEditError; Result 3.ee := ds.OnPostError;Result 1.fe := ds.OnFilterRecord;end;/恢復(fù)CLIENTDATASET的事件procedure RestoreCDSEvents(ds: TDataSet; e: cdsEventsArray);begin ds.AfterCanc
45、el := e 1.ne;ds.AfterClose := e 2.ne; ds.AfterDelete := e 3.ne;ds.AfterEdit := e 4.ne; ds.AfterInsert := e 5.ne;ds.AfterOpen := e 6.ne; ds.AfterPost := e 7.ne;ds.AfterRefresh := e 8.ne; ds.AfterScroll := e 9.ne;ds.BeforeCancel := e10.ne; ds.BeforeClose := e11.ne;ds.BeforeDelete := e12.ne; ds.BeforeE
46、dit := e13.ne;ds.BeforeInsert := e14.ne; ds.BeforeOpen := e15.ne;ds.BeforePost := e16.ne; ds.BeforeRefresh := e17.ne; ds.BeforeScroll := e18.ne; ds.OnCalcFields := e19.ne ;ds.OnNewRecord := e20.ne; ds.OnDeleteError := e 1.ee; ds.OnEditError := e 2.ee; ds.OnPostError := e 3.ee; ds.OnFilterRecord := e
47、 1.fe;end;/ 將 TDataSet 的某個(gè)字段,形成 StringListprocedure AssignDsStrings(ds: TDataSet; s: string; sl: TStrings);var b: TBookmarkStr;begin b := ds.Bookmark; sl.Clear; ds.First; while not ds.Eof do begin if ds.FieldValuess <> null then sl.Add(ds.FieldByName(s).AsString); ds.Next; end; ds.Bookmark :=
48、b;end;/ 數(shù)字轉(zhuǎn)換成Excel的格式function IntToExcelStr(n: Integer): string;var s: string;begin if n > 26 then s := char(integer('A')+(n-1) div 26)-1); if n mod 26 = 0 then s := s+'Z' else s := s+char(integer('A')+(n mod 26)-1); Result := s;end;/ 為單元格加邊框procedure RangeBorder(sheet: Va
49、riant; y, x: Integer);var R: string;begin R := IntToExcelStr(x)+IntToStr(y)+':'+IntToExcelStr(x)+IntToStr(y); sheet.RangeR.Borders1.Weight := sheet.Range'A4:A4'.Borders1.Weight; sheet.RangeR.Borders2.Weight := sheet.Range'A4:A4'.Borders2.Weight; sheet.RangeR.Borders3.Weight :
50、= sheet.Range'A4:A4'.Borders3.Weight; sheet.RangeR.Borders4.Weight := sheet.Range'A4:A4'.Borders4.Weight;end;/ 復(fù)制 Sheet1.Range 到 Sheet2procedure CopyRange(src: Variant; x1, y1, x2, y2: Integer; dest: Variant; x,y: Integer);var R: string; i: Integer;begin / 內(nèi)容與格式 R := IntToExcelStr(x1
51、)+IntToStr(y1)+':'+IntToExcelStr(x2)+IntToStr(y2); src.RangeR.Copy; R := IntToExcelStr(x)+IntToStr(y); dest.RangeR.PasteSpecial; dest.Range'A1'.Select; / 單元格屬性 for i:= x1 to x2 do dest.Columnsx+i-x1.ColumnWidth := src.Columnsi.ColumnWidth; for i:= y1 to y2 do dest.Rowsy+i-y1.RowHeight := src.Rowsi.RowHeight;end;/ 填充單元格內(nèi)容 align=1 left, 2 right 3 centerprocedure FillValue(sheet:Variant; y, x:Integer; value:Variant ; align:Integer = 0; border: Boolean = True);begin sheet.Cellsy, x.Value := value; case align of 1:sheet.Ce
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高校思想政治教育課程中的生成式人工智能技術(shù)應(yīng)用模式
- 電商平臺(tái)與社交媒體在農(nóng)產(chǎn)品銷(xiāo)售中的應(yīng)用
- 湖北省武漢市新觀察2024年數(shù)學(xué)七年級(jí)第一學(xué)期期末檢測(cè)模擬試題含解析
- 節(jié)能環(huán)保領(lǐng)域門(mén)窗節(jié)能玻璃鍍膜再生:行業(yè)動(dòng)態(tài)與市場(chǎng)洞察
- 電子商務(wù)對(duì)機(jī)油泵產(chǎn)品銷(xiāo)售模式的影響研究
- 2025至2030中國(guó)肌電監(jiān)測(cè)系統(tǒng)行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2025至2030稀有金屬礦行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030陶瓷水果刀行業(yè)運(yùn)營(yíng)態(tài)勢(shì)與投資前景調(diào)查研究報(bào)告
- 2025至2030中國(guó)自動(dòng)泡沫皂液機(jī)行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 2025至2030中國(guó)自缷車(chē)行業(yè)深度研究及發(fā)展前景投資評(píng)估分析
- 2025年廣東省中考英語(yǔ)試題卷(含答案解析)
- 2025年吉林省中考物理試卷真題及答案詳解(精校打印版)
- 浙江省溫州市瑞安市2023-2024學(xué)年四年級(jí)下學(xué)期英語(yǔ)期末試卷6月(含答案)
- 2025至2030中國(guó)羅伊氏乳桿菌行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展報(bào)告
- 標(biāo)準(zhǔn)的編寫(xiě)講課件
- 學(xué)堂在線 護(hù)理研究方法 期末考試答案
- 2025年湖南省中考英語(yǔ)試卷真題(含答案解析)
- 重癥超聲在急性呼吸困難快速鑒別診斷中的應(yīng)用
- 2025年天津市中考英語(yǔ)真題試卷及答案
- 鄉(xiāng)鎮(zhèn)會(huì)議制度管理制度
- 2025至2030年中國(guó)電子束曝光系統(tǒng)行業(yè)市場(chǎng)研究分析及發(fā)展前景研判報(bào)告
評(píng)論
0/150
提交評(píng)論