模块开发卷宗.docx
《模块开发卷宗.docx》由会员分享,可在线阅读,更多相关《模块开发卷宗.docx(21页珍藏版)》请在冰豆网上搜索。
![模块开发卷宗.docx](https://file1.bdocx.com/fileroot1/2023-2/7/80ce2936-20ce-4a4c-931e-c9a6c68c29b6/80ce2936-20ce-4a4c-931e-c9a6c68c29b61.gif)
模块开发卷宗
模块开发卷宗
1标题
软件系统名称:
学校内部员工工资管理系统。
模块名称:
用户管理模块、员工信息管理模、工资管理模块、数据统计模块和数据维护模块等。
程序编制员签名:
陈伟,黄建才
修改完成日期:
2007年12月30日
卷宗序号:
1
编排日期:
2007年12月30日
2模块开发情况表
1.建立程序系统结构
3功能说明
员工信息管理模块:
员工基本信息模块具有员工信息输入、员工增删、员工信息查询三个功能,员工基本信息包括员工号、员工姓名、员工性别、所在部门、所在岗位、工龄和工资等级等信息。
员工增删实现了对数据库中员工信息的增加和删除。
员工可以通过员工号或员工姓名对员工信息进行查询。
用户管理模块:
实现对不同用户管理级别的分类,以及不同级别用户对系统拥有不同权限而对系统进行操作。
工资信息管理模块:
实现工资表的生成、个人工资查询、工资修改、工资结算、工资统计以及工资表打印等功能。
其中按月生成工资表,保存在数据库中。
数据统计模块:
用户在员工信息管理模块对该员工的工资等级进行输入以后,在工资汇总模块会自动对员工工资进行汇总。
用户可以打印出工资汇总表,打印之前可以通过打印预览功能进行打预览。
系统维护模块:
系统维护模块包括数据库的恢复与备份,部门信息的维护三个功能,部门信息维护模块主要是进行部门的添加和修改。
另外,在本高校工资管理系统中,还包括帮助文件的制作,要求有较为完善的帮助文件,使用说明供用户参考。
4设计说明
用户管理模块:
a.制定用户的管理级别,管理级别分为管理员和教职员工两类。
b.他们的操作权限不同,管理员是财务部门人员,可以对系统进行一切操作,而教职员工只能进行查询和打印。
c.另外在这个模块中也应该包含添加用户、修改用户信息、修改口令等。
员工信息管理模块
员工基本信息模块具有员工信息输入、员工增删、员工信息查询三个功能,员工基本信息包括员工号、员工姓名、员工性别、所在部门、所在岗位、工龄和工资等级等信息。
员工增删实现了对数据库中员工信息的增加和删除。
员工可以通过员工号或员工姓名对员工信息进行查询。
工资管理模块
根据该公司的工资管理实际情况,本系统将工资结构分为基本工资、浮动工资、工资发放三部分。
该模块可以对这三个工资类型设置工资等级,并对每个等级设置工资标准。
数据统计模块
用户在员工信息管理模块对该员工的工资等级进行输入以后,在工资汇总模块会自动对员工工资进行汇总。
用户可以打印出工资汇总表,打印之前可以通过打印预览功能进行打预览。
系统维护模块
系统维护模块包括数据库的恢复与备份,部门信息的维护三个功能,部门信息维护模块主要是进行部门的添加和修改,
其它功能模块
主要有管理员的添加、修改以及登录信息浏览,调用系统的记事本和计算器等工具。
5原代码清单
登录到该工资管理系统需要验证管理员和普通员工的身份,
界面如下图所示:
实现该功能的代码是:
if(length(trim(user.Text))>0)or(length(trim(pwd.Text))>0)then
begin
if(RadioGroup1.ItemIndex=0)then
begin
sql:
='selectadminname,pwdfromadmin
whereadminname='+''''+user.Text+''''+'andpwd='+''''+pwd.Text+'''';
adoquery_login.Close;
adoquery_login.SQL.Clear;
adoquery_login.SQL.Add(sql);
adoquery_login.SQL.Add(sql);
adoquery_login.Open;
ifadoquery_login.RecordCount>0then
begin
ADOQuery_Login.Close;
ADOQuery_Login.SQL.Clear;
ADOQuery_Login.SQL.Add('insertintoLogindetailvalues('''+user.Text+''','''+'管理员'+''','''+datetimetostr(NOW)+''')');
ADOQuery_Login.ExecSQL;
frmmain.Show;
frmmain.StatusBar1.Panels[1].Text:
='管理员:
'+user.Text;
loginform.hide;
end
else
begin
application.MessageBox('您输入的用户名或密码错误!
','错误提示',mb_ok);
user.SetFocus;
end;
end;
if(RadioGroup1.ItemIndex=1)then
begin
sql:
='selectemployeenamefromemployeeswhereemployeename='+''''+user.text+'''';
adoquery_login.Close;
adoquery_login.SQL.Clear;
adoquery_login.SQL.Add(sql);
adoquery_login.SQL.Add(sql);
adoquery_login.Open;
ifadoquery_login.RecordCount>0then
begin
ADOQuery_Login.Close;
ADOQuery_Login.SQL.Clear;
ADOQuery_Login.SQL.Add('insertintoLogindetailvalues('''+user.Text+''','''+'普通员工'+''','''+datetimetostr(NOW)+''')');
ADOQuery_Login.ExecSQL;
gzfind.Show;;
loginform.hide;
end
else
begin
application.MessageBox('对不起!
该用户不存在!
','错误提示!
',mb_ok);
user.SetFocus;
end;
员工信息管理
员工信息的输入界面如下图所示:
员工信息的输入实现代码是:
if(edit_id.Text='')or(edit_name.Text='')or(combobox_sex.Text='')or(edit_depname.Text='')then
begin
Messagebox(handle,'请输入有效的信息!
','错误提示信息',MB_OK);
exit;
end;
if(edit_id.gettextlen)>8then
begin
Messagebox(handle,'你输入的员工编号不能大于8位!
','错误提示信息',MB_OK);
exit;
end
else
begin
adoquery.Close;
adoquery.SQL.Clear;
adoquery.SQL.Add('select*fromemployeeswhereemployeeID=:
ygID');
adoquery.Parameters.ParamByName('ygID').Value:
=strtoint(trim(edit_id.Text));
adoquery.Open;
ifnotadoquery.IsEmptythen
begin
Messagebox(handle,'该编号已经存在!
','错误提示信息',MB_OK);
adoquery.Close;
adoquery.Free;
exit;
end;
try
str:
='insertintoemployees(employeeID,employeename,sex,level,departname,hiresdate,bank,bankID,note)';
str:
=str+'Values(:
ygID,:
name,:
sex,:
level,:
departname,:
hiresdate,:
bank,:
bankID,:
note)';
withadoquerydo
begin
close;
sql.Clear;
sql.Add(str);
parameters.ParamByName('ygID').Value:
=strtoint(trim(edit_id.Text));
parameters.ParamByName('name').Value:
=trim(edit_name.Text);
parameters.ParamByName('sex').Value:
=trim(combobox_sex.Text);
parameters.ParamByName('level').Value:
=trim(combobox_wenhua.Text);
parameters.ParamByName('departname').Value:
=trim(edit_depname.Text);
parameters.ParamByName('hiresdate').Value:
=trim(datetostr(datetimepicker1.Date));
parameters.ParamByName('bank').Value:
=trim(combobox_bank.Text);
parameters.ParamByName('bankID').Value:
=trim(edit_banknum.Text);
parameters.ParamByName('note').Value:
=trim(memo_detail.Text);
ExecSQL;
end;
showmessage('添加成功!
');
btclear.Click;
except
showmessage('添加失败!
请检查数据正确与否?
');
end;
end;
end;
procedureTYGForm.BitBtn5Click(Sender:
TObject);
begin
ifnotadotable.IsEmptythen
adotable.First
else
showmessage('没有员工信息记录,请确定员工信息!
');
end;
员工信息的查询界面如下图:
员工信息的查询实现代码:
var
searchfield:
String;
str:
String;
begin
caseRadioGroup1.ItemIndexof
0:
searchfield:
='employeeID';
1:
searchfield:
='employeename';
2:
searchfield:
='level';
3:
searchfield:
='departname';
4:
searchfield:
='hiresdate';
5:
searchfield:
='bank';
end;
ifcontent.Text=''then
begin
if(messagedlg('您输入的查询内容不能为空!
是否要重输?
',mtinformation,[mbyes,mbno],0)<>mryes)then
close;
end
else
begin
adoquery1.Close;
adoquery1.SQL.Clear;
ifsearchfield='employeeID'then
str:
='select*fromemployeeswhere'+searchfield+'='+trim(content.Text)
else
str:
='select*fromemployeeswhere'+searchfield+'='''+trim(content.Text)+'''';
adoquery1.SQL.Add(str);
adoquery1.Active:
=true;
ifadoquery1.RecordCount=0then
begin
messagebeep
(1);
showmessage('没有找到符合条件的记录,请确定查询条件或放弃查询!
');
ifmessagedlg('是否继续查询?
只有结束查询才能进行其它操作!
',mtinformation,[mbyes,mbno],0)=mrnothen
abort;
end
else
begin
adotable.Recordset:
=adoquery1.Recordset;
{adotable.Filtered:
=false;
adotable.Filter:
=searchfield+'='''+content.Text+'''';
adotable.Filtered:
=true;
adotable.Active:
=true;}
showmessage('共找到了'+inttostr(adoquery1.recordcount)+'条记录!
');
content.Text:
='';
end;
把员工信息查询的结果导到Excel中去,实现代码是:
var
iCount,jCount:
Integer;
XLApp:
Variant;
Sheet:
Variant;
begin
screen.Cursor:
=crHourGlass;
ifnotVarIsEmpty(XLApp)then
begin
XLApp.DisplayAlerts:
=False;
XLApp.Quit;
VarClear(XLApp);
end;
try
XLApp:
=CreateOleObject('Excel.Application');
except
screen.Cursor:
=crDefault;
Exit;
end;
XLApp.workbooks.add;
XLApp.sheetsInNewWorkbook:
=1;
XLApp.workbooks[1].worksheets[1].name:
=DBGrid2.Name;
sheet:
=XLApp.workbooks[1].worksheets[DBGrid2.Name];
sheet.columns.autofit;
ifnotdbgrid2.DataSource.DataSet.Activethen
begin
screen.Cursor:
=crDefault;
exit;
end;
dbgrid2.DataSource.DataSet.First;
foriCount:
=0todbgrid2.Columns.Count-1do
sheet.cells[1,iCount+1]:
=dbgrid2.Columns.Items[iCount].Title.caption;
jCount:
=1;
whilenotdbgrid2.DataSource.DataSet.Eofdo
begin
foriCount:
=0todbgrid2.Columns.Count-1do
sheet.cells[jCount+1,iCount+1]:
=adoquery1.Fields[icount].AsString;
inc(jCount);
dbgrid2.DataSource.DataSet.Next;
end;
XlApp.visible:
=true;
screen.Cursor:
=crDefault;
end;
工资发放管理界面如下图:
工资发放管理工资保存代码实现如下:
withtasavedo
begin
open;
edit;
append;
iftrim(combobox1.Text)=''then
begin
Application.MessageBox('员工编号不能为空','提示',0+64);
combobox1.SetFocus;
exit;
end;
iftrim(editygname.Text)=''then
begin
Application.MessageBox('员工姓名不能为空','提示',0+64);
editygname.SetFocus;
exit;
end;
iftrim(editjiben.Text)=''then
begin
Application.MessageBox('基本工资不能为空','提示',0+64);
editjiben.SetFocus;
exit;
end;
iftrim(editzhiwu.Text)=''then
begin
Application.MessageBox('职务不能为空','提示',0+64);
editzhiwu.SetFocus;
exit;
end;
iftrim(editgongling.Text)=''then
begin
Application.MessageBox('工龄工资不能为空','提示',0+64);
editgongling.SetFocus;
exit;
end;
iftrim(edityanglao.Text)=''then
begin
Application.MessageBox('养老保险不能为空','提示',0+64);
edityanglao.SetFocus;
exit;
end;
iftrim(editjiangjin.Text)=''then
begin
Application.MessageBox('其他奖金不能为空','提示',0+64);
editjiangjin.SetFocus;
exit;
end;
iftrim(editzhufang.Text)=''then
begin
Application.MessageBox('住房补助不能为空','提示',0+64);
editzhufang.SetFocus;
exit;
end;
iftrim(editbaoxian.Text)=''then
begin
Application.MessageBox('保险费不能为空','提示',0+64);
editbaoxian.SetFocus;
exit;
end;
iftrim(editshenghuo.Text)=''then
begin
Application.MessageBox('生活补助不能为空','提示',0+64);
editshenghuo.SetFocus;
exit;
end;
ifApplication.MessageBox('确定添加记录?
','提示',mb_YesNo)=ID_Yes
then
begin
tasave.FieldByName('employeeID').AsString:
=trim(combobox1.Text);
tasave.FieldByName('employeename').AsString:
=trim(editygname.Text);
tasave.FieldByName('basicwages').AsString:
=trim(editjiben.Text);
tasave.FieldByName('dutywages').AsString:
=trim(editzhiwu.Text);
tasave.FieldByName('agewages').AsString:
=trim(editgongling.Text);
tasave.FieldByName('oldage-insurance').AsString:
=trim(edityanglao.Text);
tasave.FieldByName('others').AsString:
=trim(editjiangjin.Text);
tasave.FieldByName('housing-subsidy').AsString:
=trim(editzhufang.Text);
tasave.FieldByName('insurance').AsString:
=trim(editbaoxian.Text);
tasave.FieldByName('life-subsidy').AsString:
=trim(editshenghuo.Text);
tasave.FieldByName('worktimes').AsString:
=trim(editjiaban.Text);
tasave.FieldByName('workwages').AsString:
=trim(editday.Text);
tasave.FieldByName('asktimes').AsString:
=trim(editshijia.Text);
tasave.FieldByName('workwages2').AsString:
=trim(editday2.Text);
tasave.FieldByName('personal-incom').AsString:
=trim(editshuilv.Text);
tasave.FieldByName('totals').AsString:
=trim(editzong.Text);
tasave.FieldByName('pays').AsString:
=trim(editshifa.Text);
tasave.FieldByName('paydate').AsString:
=datetostr(datetimepicker1.date);
tasave.Post;
showmessage('保存数据成功!
');
end;
员工信息统计界面:
员工信息统计实现代码:
ifradiogroup2.ItemIndex=0then
begin
adodataset2.Active:
=false;
adodataset2.CommandText:
='selectdepartnameas"部门",count(*)as"人数"fromemployeesgroupbydepartname';
adodataset2.Active:
=true;
adodataset2.Open;
end;
ifradiogroup2.ItemIndex=1then
begin
adodataset2.Active:
=false;
adodataset2.CommandText:
='selectsexas"性别",count(*)as"人数"fromemployeesgroupbysex';
adodataset2.Active:
=true;
adodataset2.Open;
end;
ifradiogroup2.Item