南京邮电大学软件设计

上传人:hao****an 文档编号:156933411 上传时间:2022-09-28 格式:DOC 页数:27 大小:530.01KB
收藏 版权申诉 举报 下载
南京邮电大学软件设计_第1页
第1页 / 共27页
南京邮电大学软件设计_第2页
第2页 / 共27页
南京邮电大学软件设计_第3页
第3页 / 共27页
资源描述:

《南京邮电大学软件设计》由会员分享,可在线阅读,更多相关《南京邮电大学软件设计(27页珍藏版)》请在装配图网上搜索。

1、软件设计题 目: 公司计薪系统 专 业计算机科学与技术学 生 姓 名班 级 学 号指 导 教 师指 导 单 位计算机学院软件工程系日 期2008.3.103.21教师评语 教师签名: 年 月 日成绩评定备 注一、 课题名称公司记薪系统功能内容:计算不同员工的薪水且不同的工作范围就会有不同的税收,可以设置员工的基本信息,在登录时用户需要密码。二、 课程内容和要求因为本课程的要求的功能对于一个公司是在过于简单,所以我自己的任务和目标如下:1任务和目标:(1). 三种员工的记薪方式:总经理的工资 = 基本工资 + 加班获得的津贴 - 缺勤的扣除 - 个人所得税;时薪人员的工资 = 工作小时数 * 每

2、小时工资 + 加班获得的津贴 - 缺勤的扣除 - 个人所得税;销售人员的工资 =工作小时数 * 每小时工资 + 佣金 * 销售额 + 加班获得的津贴 - 缺勤的扣除 - 个人所得税。(2)员工基本信息的录入和修改:能够添加员工的基本信息,修改以及删除。用Access来保存员工的基本信息且能够在窗体上立即显示,而且如果员工的编号重复时能够包出错误信息。(3)员工的考勤和加班以及用户的添加员工工资的基本设置:在有关的窗体上添加的时候即时的把更新的内容存到数据库中。(4)查询工资:员工只能查询关于本人的工资信息,换个角度也就是关于权限的问题。(5). 关于年终奖金:能够间接地体现员工本身的敬业态度核

3、对公司的贡献多少。(6)退出时的数据保存:对于数据库的操作问题,在上述的功能中已经实现。2. 个人进一步想要扩展的功能:工资信息用Excel的文件输出的报表功能,以及软件信息的帮助功能。3各功能的模块:基本模块如下:工资设置的模块,员工信息的模块,加班信息的模块,考勤信息的模块,医疗保险的模块,登陆信息的模块。三、 算法分析和流程图1开发环境: 开发工具Dephi 7.0,数据源文件Access。 2总体设计: 主要窗体:一个主窗体frmMain,一个登陆的窗体frmLogin,一个修改和增加登陆信息的窗体frmAdminLogin,一个增加用户的窗体frmAdminLoginAdd,一个修改

4、用户密码的窗体frmAdminLoginModify,一个修改工种的窗体frmGz,一个修改加班类别的窗体frmJblb,一个修改缺勤类别的窗口frmQqlb,一个修改员工基本信息的窗体frmYgxx,一个修改考勤信息的窗体frmKqxx,一个修改医疗保险的窗体frmYlbx, 3数据设计:工种的数据表的设置:字段名称数据类型说明gz_id自动编号主键gz文本工种jbgz货币基本月工资津贴信息的数据表设置:字段名称数据类型说明jt_id自动编号主键yg_id数字jbsj日期/时间加班时间jbts数字加班天数jblb_id数字加班类别考勤信息的数据表设置:字段名称数据类型说明kq_id自动编号主

5、键yg_id数字kqsj日期/时间考勤时间qqts数字缺勤天数qqlb_id数字缺勤类别年终奖金的数据表设置:字段名称数据类型说明nzjj_id自动编号主键yg_id数字员工编号nian数字年zj货币总计医疗保险的数据表设置字段名称数据类型说明ylbx_id自动编号主键yg_id数字ylfy货币医疗报销费bxfy货币保险费sj日期/时间时间缺勤类别的数据表的设置:字段名称数据类型说明qqlb_id自动编号主键qqlb文本缺勤类别jbgz货币扣除月工资ndxs数字扣除年度分红系数加班类别的数据表的设置:加班类别数据类型说明jblb_id自动编号主键jblb文本加班类别jbgz货币增加月工资ndx

6、s数字增加年度分红系数年度效益的数据表的设置:字段名称数据类型说明ndxy_id自动编号主键ndxy货币年度效益nian数字年月工资信息数据表的设置:字段名称数据类型说明ygz_id自动编号主键yg_id数字员工编号nian数字年yue数字月jbgz货币原本工资gs数字工时sgz货币元/时jt货币津贴kc货币扣除bx货币医疗保险zj货币总计yj数字佣金xse数字销售额员工基本信息的数据表设置:字段名称数据类型说明yg_id自动编号主键ygh文本员工号、主键xm文本姓名gz_id数字工种bm文本部门gzsj日期/时间工作时间gs数字每月工时sgz数字元/时yj数字佣金xse数字销售额用户信息的数

7、据表设置:字段名称数据类型说明uid文本用户名、主键Pwd文本用户密码Pwd_level文本用户权限界面的主要流程是这样的:然后主界面的各个子页面通过一些按钮来弹出各自所需的窗体。4 详细设计主界面的设计如下:主界面的组件主要是一个TpageControl,然后在这个TpageControl上一个个的添加页面,如上图所示,总共有9个页面,在工资标准设定的界面上有如下组件:TradioGroup,TDBGrid还有几个TspeedButton.里面有四个TDBGrid,每个都有三个TspeedButton,然后不同的TspeedButton对应不同的窗体显示,比如说在选中TradioGroup中

8、的工种,然后按下其界面下的添加就会显示下面的窗体如果选其他的选项的话就会出现与之想对应的界面。其他与之相同的界面设计,这里就不多介绍了。在主界面的定义的组件有:TapplicationEvents,Tlabel,Timage,TbitBtn,Tbutton,TspeedButton,TDBGrid,Tsplitter,Tedit,TcomboBox,Tpanel,TtabSheet主界面里面定义的函数主要有以下: procedure showGzbz(Index: Integer);/工资标准设定窗体显示内容不同的函数 function AddDbData(frm: TfrmPBase): B

9、oolean;/往数据库里面写数据的函数 function ModifyDbData(frm: TfrmPBase; ds: TDataSet): Boolean;/修改数据库 function DelDbData(ds: TDataSet): Boolean;/删除数据库里面的数据function IsHaveRelation(ds: TDataSet; field1, table2, field2: string):Boolean; /两个内容的比较 procedure CalcYgz();/计算月工资的函数procedure CalcNzjj();/计算年终奖金的函数还有一个比较不一样的

10、是DataModule的建立,也就是实现各个窗体之间的数据连接。其里面包括ADO里面的组件:TADOConnection,TADOQuery,TdataSource。其最主要的功能就是用起连接数据库。TADOQuery用于使用SQL语句查询数据 ,TADOConnection用与联接数据库使用,然后每一个TADOQuery都有一个TdataSource与之相连接,且要把数据表中的各个属性给添加进TADOQuery的fields里面。四 主要部分源程序工资标准设定也面不同显示的代码 procedure TfrmMain.showGzbz(Index: Integer); procedure sh

11、owcontrol(Index: Integer; show: Boolean); begin case Index of 0:begin /选不同选相时显示界面的不同,按钮和页面与之相对应 dbgrd1.Visible := show; btn1.Visible := show; btn2.Visible := show; btn3.Visible := show; end; 1:begin /选择加班时显示的页面 dbgrd2.Visible := show; btn4.Visible := show; btn5.Visible := show; btn6.Visible := show;

12、 end; 2:begin /选择缺勤时显示的页面 dbgrd3.Visible := show; btn7.Visible := show; btn8.Visible := show; btn9.Visible := show; end; 3:begin /选择年度效益时显示的页面 dbgrd4.Visible := show; btn10.Visible := show; btn11.Visible := show; btn12.Visible := show; end; end; end;begin case Index of 0:begin/显示工种设置的信息,其他屏蔽,其他类似 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; / 不能更改企业年度效益 btn11.Visible := False; btn12.Visible := False; end; end;end;/ 添加资料的函数function TfrmMain.AddDbData(frm: TfrmPBase): Boolean;begin frm.strState := N; / 这几个函数都是继承了另外

15、一个窗体TPBase上的信息 if mrOk = frm.ShowModal then Result := True else Result := False;end;/ 修改资料的函数function TfrmMain.ModifyDbData(frm: TfrmPBase; ds: TDataSet): Boolean;begin Result := False; if ds.RecordCount 0 then begin /当数据库中有内容可以修改的时候 frm.strState := M; if mrOk = frm.ShowModal then /是否按下确定 Result :=

16、True; end else Application.MessageBox(没有可以修改的信息。, PChar(Application.Title),MB_OK + MB_ICONINFORMATION); /没有可以提供修改消息的时候出现提示对话框end;/ 删除资料function TfrmMain.DelDbData(ds: TDataSet): Boolean;begin Result := False; if ds.RecordCount 0 then begin /看数据库中是否还有信息 if Application.MessageBox(是否要删除此信息?, PChar(Appl

17、ication.Title), MB_YESNO + MB_ICONQUESTION) = IDYES then /提示是否删除数据 begin ds.Delete;/删除数据 Result := True; end; end else Application.MessageBox(没有可以删除的信息。, PChar(Application.Title), MB_OK + MB_ICONINFORMATION); /没有可以删除的信息时应该有报错end;/IsHaveRelation函数functionTfrmMain.IsHaveRelation(ds: TDataSet; field1,

18、table2, field2: string):Boolean;var v: Variant; q: TADOQuery;begin Result := False; if ds.RecordCount 0 then begin /判断数据库中是否为空 if dsfield1 null then begin/判断数据库中的第一个属性是否为空 v := dsfield1; q := TADOQuery.Create(nil); q.Connection := dm.con1; /进行数据库的链接 q.SQL.Text := select+field2+from+table2+where+fiel

19、d2+ = :field2; q.Parameters.ParamByName(field2).Value := v; q.Prepared := True; q.Open; if q.RecordCount 0 then /判断是否有数据 Result := True; q.Close; q.Free; end; end;end;/ 计算月工资procedure TfrmMain.CalcYgz();var id, n, y, r: string; sql: string; qry: TADOQuery; jbgz, jt, kc, bx, zj,gs,sgz,yj,xse: Double;

20、begin id := dm.qryYgxxyg_id; /将员工信息中的员工号赋值给id n := edt1.Text; y := IntToStr(cbb1.ItemIndex+1); r := IntToStr(DaysInAMonth(StrToInt(n), StrToInt(y); / 删除旧数据 sql := delete +from ygz +where nian=+n+ and yue=+y+ and yg_id=+id;/将月工资那个页面里面的值给删掉 dm.con1.Execute(sql); dm.qryYgz.Close; dm.qryYgz.Open; qry :=

21、 TADOQuery.Create(nil); qry.Connection := dm.con1; / 查找原本工资 sql := SELECT Sum(gz.jbgz+ygxx.gs*ygxx.sgz+ygxx.yj*xse) AS 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里的内容转换 qry.Cl

22、ose; / 计算津贴 sql := SELECT Sum(jtxx.jbts * jblb.jbgz) AS jt +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+/1/+n+#) AND + (kqxx.kqsj)=#+y+/1/+n+#) AND +(ylbx.sj)=#+y+/+r+/+n+#); ; /保险和报销的算法 qry.SQL.Text := sql; qry.Open;

23、 bx :=qry.FieldByName(bx).AsFloat; /对保险和报销的结果进行变量类型的转换 qry.Close; qry.Close; qry.Free; / 计算总计 zj := jbgz + jt - kc - bx;/这个用来计算不同工资的税收算法 if zj0 then if zj 800 then if zj1000 then if zj =5000 then zj := zj * 0.9 /工资在1000到5000之间的情况 else zj := zj * 0.8; /工资大于5000的情况 /将算好的数据写入数据库 dm.qryYgz.Append; dm.qr

24、yYgzyg_id := StrToInt(id); dm.qryYgznian := StrToInt(n); dm.qryYgzyue := StrToInt(y); dm.qryYgzjbgz := jbgz; dm.qryYgzjt := jt; dm.qryYgzkc := kc; dm.qryYgzbx := bx; dm.qryYgzzj := zj; dm.qryYgz.Post;end;/ 月工资报表procedure TfrmMain.btn28Click(Sender: TObject);var sql, n, y, filename: String; qry: TADO

25、Query; i, z: Integer; ExcelApp: Variant; sheet, template: Variant;begin try StrToInt(edt1.Text); except Application.MessageBox(请输入正确的年份, PChar(Application.Title), MB_OK + MB_ICONWARNING); /看是否和已有的工资信息的年分是否相同 exit; end; n := edt1.Text; y := IntToStr(cbb1.ItemIndex+1); qry := TADOQuery.Create(nil); qr

26、y.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; qry.Open; z := qry.RecordCount; qry.Close; if z=0 then begin qry.Free; Application.MessageBox(请生成月工资记录,然后使用报表功能。, PChar(App

27、lication.Title), MB_OK + MB_ICONINFORMATION);/没有可以报表的工资信息 exit; end;try pb1.Min := 0; pb1.Max := z+4;pb1.Step := 1;pb1.Position := 0;pb1.Visible := True; pgc1.Enabled := False; Screen.Cursor := crHourGlass;创建 Excel 例程 ExcelApp := CreateOleObject(Excel.Application); ExcelApp.Visible := False; filenam

28、e := ExtractFilePath(Application.ExeName) + templateygz.xls; ExcelApp.WorkBooks.Open(filename); sheet := ExcelApp.WorkBooks1.Sheets1; template := ExcelApp.WorkBooks1.Sheets2; ExcelApp.Caption := ExcelApp.WorkBooks1.Sheets1.Name+报表; pb1.StepIt; CopyRange(template, 1,1, 8,3, sheet, 1,1); / 复制模板样子 Fill

29、Value(sheet, 1,8, Sheet.Cells1,8.Value+n+年+y+月,0,False); / 填写日期 pb1.StepIt; sql := SELECT ygxx.ygh, ygxx.xm, gz.gz, 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+) +ORDE

30、R BY ygxx.bm, gz.gz, ygxx.xm; / 统计月工资 qry.SQL.Text := sql; qry.Open; pb1.StepIt; i := 4; while not qry.Eof do begin Application.ProcessMessages; FillValue(sheet, i,1, qry.FieldByName(ygh).AsString,3); / 填写数据 FillValue(sheet, i,2, qry.FieldByName(xm).AsString,3); FillValue(sheet, i,3, qry.FieldByName

31、(gz).AsString,3); FillValue(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).AsFloat); qry.Next; Inc(i); pb

32、1.StepIt; end; filename := ExtractFilePath(Application.ExeName) + 报表+n+.+y+ 员工月工资报表.xls; / 保存报表 if FileExists(filename) then DeleteFile(filename); ExcelApp.DisplayAlerts := False; template.Delete; ExcelApp.WorkBooks1.SaveAs(filename); pb1.StepIt; ExcelApp.Visible := True; sheet.PrintPreview; / 打印预览

33、ExcelApp.WorkBooks.Close; ExcelApp.Quit; / 结束except on E: Exception do begin ExcelApp.WorkBooks1.Saved := True; ExcelApp.WorkBooks.Close;ExcelApp.Quit; Application.MessageBox(PChar(E.Message + #13+#13+ 生成报表失败), PChar(Application.Title), MB_OK + MB_ICONSTOP); end;end; pgc1.Enabled := True;Screen.Curs

34、or := crDefault;qry.Close;qry.Free; pb1.Visible := False;end;主界面的其他函数或事件都大致原理和以上所述差不多,所以也不一一写上。DataSet 函数 /保存DataSet的事件function SaveCDSEvents(ds: TDataSet): cdsEventsArray;/恢复DataSet的事件procedure RestoreCDSEvents(ds: TDataSet; e: cdsEventsArray);/ 将 TDataSet 的某个字段,形成 StringListprocedure AssignDsStrin

35、gs(ds: TDataSet; s: string; sl: TStrings);/ Excel 函数 / 数字转换成Excel的格式function IntToExcelStr(n: Integer): string;/ 为单元格加边框procedure RangeBorder(sheet: Variant; y, x: Integer);/ 复制 Sheet1.Range 到 Sheet2procedure CopyRange(src: Variant; x1, y1, x2, y2: Integer; dest: Variant; x,y: Integer);/ 填充单元格内容 ali

36、gn=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/保存CLIENTDATASET的事件function SaveCDSEvents(ds: TDataSet): cdsEventsArray;begin Resu

37、lt 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.AfterRefresh; Result 9.ne := ds.AfterScroll;Result10.ne := ds.BeforeCancel; Res

38、ult11.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.BeforeScroll; Result19.ne := ds.OnCalcFields;Result20.ne := ds.OnNewRec

39、ord; Result 1.ee := ds.OnDeleteError;Result 2.ee := ds.OnEditError; Result 3.ee := ds.OnPostError;Result 1.fe := ds.OnFilterRecord;end;/恢复CLIENTDATASET的事件procedure RestoreCDSEvents(ds: TDataSet; e: cdsEventsArray);begin ds.AfterCancel := e 1.ne;ds.AfterClose := e 2.ne; ds.AfterDelete := e 3.ne;ds.Af

40、terEdit := 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.BeforeEdit := e13.ne;ds.BeforeInsert := e14.ne; ds.BeforeOpen := e15.ne;ds.

41、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 1.fe;end;/ 将 TDataSet 的某个字段,形成 StringListprocedure AssignDsStrings(

42、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 := b;end;/ 数字转换成Excel的格式function IntToExcelStr(n: Integer): string;var s: string

43、;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: Variant; y, x: Integer);var R: string;begin R := IntToExcelStr(x)+IntToStr(y)+:+IntToExcelStr(x)+IntToStr(y); shee

44、t.RangeR.Borders1.Weight := sheet.RangeA4:A4.Borders1.Weight; sheet.RangeR.Borders2.Weight := sheet.RangeA4:A4.Borders2.Weight; sheet.RangeR.Borders3.Weight := sheet.RangeA4:A4.Borders3.Weight; sheet.RangeR.Borders4.Weight := sheet.RangeA4:A4.Borders4.Weight;end;/ 复制 Sheet1.Range 到 Sheet2procedure C

45、opyRange(src: Variant; x1, y1, x2, y2: Integer; dest: Variant; x,y: Integer);var R: string; i: Integer;begin / 内容与格式 R := IntToExcelStr(x1)+IntToStr(y1)+:+IntToExcelStr(x2)+IntToStr(y2); src.RangeR.Copy; R := IntToExcelStr(x)+IntToStr(y); dest.RangeR.PasteSpecial; dest.RangeA1.Select; / 单元格属性 for i:

46、= 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;/ 填充单元格内容 align=1 left, 2 right 3 centerprocedure FillValue(sheet:Variant; y, x:Integer; value:Variant ; align:Integer = 0; border: Boolean = True);begin

47、 sheet.Cellsy, x.Value := value; case align of 1:sheet.Cellsy, x.HorizontalAlignment := xlLeft; 2:sheet.Cellsy, x.HorizontalAlignment := xlRight; 3:sheet.Cellsy, x.HorizontalAlignment := xlCenter; end; if (border) then RangeBorder(sheet, y, x);end;/ 合并单元格procedure MergeCells(sheet: Variant; x1, y1,

48、x2, y2: Integer);var R: string;begin R := IntToExcelStr(x1)+IntToStr(y1)+:+IntToExcelStr(x2)+IntToStr(y2); sheet.RangeR.Merge;end;end.添加员工信息procedure TfrmYgxx.btn1Click(Sender: TObject);var ygh : string ;i : Integer ;begin ygh := dbedt1.Text; qry1.SQL.Text := select * from ygxx where ygh=+ygh+; /查询数

49、据库中的员工号和添加时的员工号是否相同qry1.Open; i := qry1.RecordCount; qry1.Close; if i0 then /查看数据库中的员工号 begin Application.MessageBox(已经存在此员工编号,请重新录入。, PChar(Application.Title), MB_OK + MB_ICONWARNING); exit; end;end;end.其余不是重要的函数或难得窗体内的事件和函数在这里也就不一一写明了。五 调试过程中的问题1. 关于“Access violiation at address 71615968 .”的问题 这个主

50、要是打印里出现的问题,刚刚出现的时候我是一点头绪都没有,因为编译的时候也没有出现错误,但是要调用打印的时候出现了这样的问题,刚开始我以为是自己的SQL语句查询的时候发生了链接的错误,但是当我用SQL语句一个个的调用时也会出现以上的问题,这说明跟SQL语句无关,也与数据库的链接无关。实在没法的时候,我上百度看了一下其他人是否也遇到过这样的问题,在搜索网页信息的时候,发现很多人都会出现这样的问题,主要是系统版本与delphi版本的相容性,所以我后来就换了一个delphi的版本,最后发现确实是这样的,就不会再出现以上的问题。2. 关于数据库的链接 因为我的数据库里面的数据表有10多个,其中有数据表与

51、数据表的调用问题,所以在建立DataModule的时候应该想好数据表的调用问题,刚开始我没有考虑那么多,所以导致后来根本就没法完成下去,只有重新编写。比如说津贴信息的数据表要用到员工基本信息的数据表中的内容,所以要在津贴信息的DataSet里面要设置为员工基本信息的数据表。3. 关于窗体间相互调用的问题在遇到这个问题的时候我还不以为然,认为这样的问题不是很难,很容易解决,但是我觉得有这样的想法是万万不可的,因为这是由于你在刚开始在做总体框架的时候没有考虑深层的问题,没有做好刚开始的框架设计,有这样的坏习惯会使你在编程阶段浪费很多时间,更是会阻碍你成功的步伐。4. 关于SQL语句的使用问题比如说在调用.SQL.ADD() 的之前有时应该将.SQL.Text中的内容清空,这样添加进去的内容才会是你想要操作的内容。还有关于select语句的使用,一部小心就会查询的内容就会不是完全符合你要求的内容。所以一定要考虑的相当的清楚,要反复不断的测试。 综上所述,在遇到困难时应不慌不乱,要沉着冷静地面对,要把大问题化成小问题,再将小问题解决。六. 程序调试的结果程序运行时的登录界面从图可以看出实现了员工编号重复时的提示信息。以及下面的界面:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!