#学生信息管理系统的设计与实现报告.docx
- 文档编号:9687138
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:20
- 大小:132.76KB
#学生信息管理系统的设计与实现报告.docx
《#学生信息管理系统的设计与实现报告.docx》由会员分享,可在线阅读,更多相关《#学生信息管理系统的设计与实现报告.docx(20页珍藏版)》请在冰点文库上搜索。
#学生信息管理系统的设计与实现报告
《管理信息系统》课程设计报告
题目学生信息管理系统
学生姓名缪惠
学号************
专业班级信息管理与信息系统
指导老师方霞老师
设计日期
指导老师评阅意见:
评阅成绩:
签名:
需求分析(含业务流程图,数据流程图,E-R图等)
概要设计(模块划分等)
1详细设计
1.1.新生管理子系统
总体设计:
新生管理子系统包含新生录取信息的导入,新生预分学号,新生班级分配,新生寝室安排,新生报到管理,新生报到信息统计,新生欠费统计,新生分布信息,新生高考成绩分布等。
设计:
下面给出设计方案与实现方法。
功能:
①完成对新录取学生数据的导入
②完成对新生数据的报到预处理(初始化)
③实现新生报到现场完成,并统计报到情况
④统计新生的各种分布比例和成绩分布
设计:
①总体设计:
用Delphi的PageCtrl控件来实现各项菜单功能
②招生数据导入:
可以通过选择来指定全国网上录取系统的导出数据所在路径,并根据使用手册检查21个.dbf文件是否存在,来决定是否允许导入;在导入时采用记录的查重处理,所以,只能借助记录集的循环来完成;其中,对政治面貌与民族表要单独处理。
主要实现文件检查的代码:
functionCheckDBFile(varstrRst:
String):
boolean;
var
i,j:
integer;
blFound:
boolean;
begin
arrstrFileName[0]:
='t_tddw';arrstrFileName[1]:
='t_jhk';
//……此处对表名赋值
CheckDBFile:
=False;
blFound:
=True;i:
=0;
strRst:
='数据表';
while(i<21)do
beginj:
=DBFileListBox.Items.IndexOf(arrstrFileName[i]+'.dbf');
ifj=-1then//某个文件未找到,返回“假”
begin
blFound:
=False;
strRst:
=strRst+arrstrFileName[i]+'.dbf';
end;
i:
=i+1;
end;
strRst:
=strRst+'不存在!
';
ifblFoundthen//全部数据文件检查正确
CheckDBFile:
=True;
end;
③学号预处理:
将导入的数据从信息库表到在校生表,并根据考生的考号及其它信息填入其基本信息(如省份、入年年份等);基本处理思想是:
根据考生年份(报考号前两位)与当前系统数据库的绝对学期时间,筛选相应的考生信息,然后从这些信息中依次在学生基本信息表(JBXX2)中查询是否重复,来决定是否写入;如果写入,则根据报考号(第3、4位)的信息,写入考生所在省份代码。
④新生班级编排:
将分配学号的新生编排到指定班级中。
用两个DBGrid(可多选)分别将未分班学生和班级信息列出来,通过手工选中一个或多个学生,即可分配班级或从班级中取消分班。
实现DBGrid多选并在数据库中完成添加的代码:
withStuDBGrid.DataSource.DataSetdo
begin
fori:
=0tointSelStuCnt-1do
begin
GotoBookmark(pointer(StuDBGrid.SelectedRows.Items[i]));
strStuNo:
=Fields[0].AsString;
strSql:
='Updatejbxx2setBJID='+''''+strClasNo+'''';
strSql:
=strSql+'WhereXH='+''''+strStuNo+'''';
database.Execute(strSql);
end;
end;
……
寝室分配与班级编排可类似处理。
⑤新生现场报到:
对新生的报到程序进行计算机管理,自动检查该新生是否已到校,是否已完成所有报到手续,以及新生的欠费情况(只记载欠费,不记载缴费);并根据各项手续的完成,来确认新生的报到状态,为下一步查询提供足够信息。
此处关键在于如何把数据表中“0”和“1”状态标志以CheckBox的状态输出,代码如下:
读出:
……
ifADORegInfo.Activethen
begin
strState:
=ADORegInfo.FieldByName('SFQD').AsString;
ifstrState='1'then//是否签到
Reg1Check.Checked:
=true
else
Reg1Check.Checked:
=false;
strState:
=ADORegInfo.FieldByName('ZZGX').AsString;
ifstrState='1'then//组织关系
Reg2Check.Checked:
=true
else
Reg2Check.Checked:
=false;
strState:
=ADORegInfo.FieldByName('HKQY').AsString;
ifstrState='1'then//户口迁移
Reg3Check.Checked:
=true
else
Reg3Check.Checked:
=false;
strState:
=ADORegInfo.FieldByName('JCK').AsString;
ifstrState='1'then//就餐卡
Reg4Check.Checked:
=true
else
Reg4Check.Checked:
=false;
strState:
=ADORegInfo.FieldByName('TJ').AsString;
ifstrState='1'then//体检
Reg1Check.Checked:
=true
else
Reg1Check.Checked:
=false;
end;
……
写回数据库:
……
ADORegInfo.Edit;
ifReg1Check.Checkedthen
ADORegInfo.FieldByName('SFQD').AsString:
='1'
else
ADORegInfo.FieldByName('SFQD').AsString:
='0';
ifReg2Check.Checkedthen
ADORegInfo.FieldByName('ZZGX').AsString:
='1'
else
ADORegInfo.FieldByName('ZZGX').AsString:
='0';
ifReg3Check.Checkedthen
ADORegInfo.FieldByName('HKQY').AsString:
='1'
else
ADORegInfo.FieldByName('HKQY').AsString:
='0';
ifReg4Check.Checkedthen
ADORegInfo.FieldByName('JCK').AsString:
='1'
else
ADORegInfo.FieldByName('JCK').AsString:
='0';
ifReg1Check.Checkedthen
ADORegInfo.FieldByName('TJ').AsString:
='1'
else
ADORegInfo.FieldByName('TJ').AsString:
='0';
ADORegInfo.Post;
……
欠费查询可相应处理。
⑥报到情况统计:
可以按性别、专业、班级、省份等统计学生的报到情况,并以柱状图和表格显示;提供自由控制条件查询未报到学生信息。
统计功能实现代码如下:
……
CntBySexDBChar.Title.Text.Clear;//清除标题
CntBySexDBChar.Title.Text.Add('新生报到情况(按班级统计)');
CntBySexDBChar.Series[0].Clear;//清除图形
strSql:
='';
CntStrGrid.RowCount:
=ADOQFCntQuery.RecordCount+1;
fori:
=0to4do//设置StringGrid的标题
begin
CntStrGrid.Cols[i].Clear;
CntStrGrid.Cols[i].Add(titleName[i]);
end;
i:
=0;
RegSexTLbl.Lines.Clear;//清空统计显示
whilenotADOQFCntQuery.Eofdo
begin
intCntRegd[i]:
=ADOQFCntQuery.FieldByName('ClassRegdCnt').AsInteger;
CntBySexDBChar.Series[0].Add(intCntTot[i],inttostr(i)+'应到',clBlue);
CntBySexDBChar.Series[0].Add(intCntRegd[i],'到',clRed);
strSql:
=inttostr(i)+'['+trim(strClassName[i])+']报到比例:
';
strSql:
=strSql+floattostr(trunc(intCntRegd[i]/intCnttot[i]*10000)/100)+'%'+#13;
RegSexTLbl.Lines.Add(strSql);
CntStrGrid.Rows[i+1].Add(inttostr(i+1));
CntStrGrid.Rows[i+1].Add(strClassName[i]);
CntStrGrid.Rows[i+1].Add(inttostr(intCntTot[i]));
CntStrGrid.Rows[i+1].Add(inttostr(intCntRegd[i]));
CntStrGrid.Rows[i+1].Add(floattostr(trunc(intCntRegd[i]/intCnttot[i]*10000)/100)+'%');
i:
=i+1;
ADOQFCntQuery.Next;//下一个班
end;
……
⑦新生分布情况统计:
从学生的扩展信息与高考资料中提取信息,统计新生的各种分布情况,以饼状图和表格信息显示出来。
相应地,高考成绩信息也可以按科目绘制出柱状图来反映分布情况,对新生的整体情况有一个大概了解,以便有针对性地开展工作。
成绩统计的代码如下:
strSql:
='SelectMax('+FieldName+')asMaxScore,Min('+FieldName+')asMinScore,AVG('+FieldName+')asAvgScore';
strSql:
=strSql+'Fromt_tdd,xs_base,xs_expendWheret_tdd.ksh=xs_expend.bkhandxs_expend.xh=xs_base.xh';
strSql:
=strSql+'andNj='+MidStr(CurrentXQSJ,1,4);
ADOQFCntQuery.SQL.Clear;
ADOQFCntQuery.SQL.Add(strSql);
ADOQFCntQuery.Open;
ifADOQFCntQuery.Eofthen
begin
ShowMessage('对不起,未找到相关学生的成绩!
');
abort;
end;
fori:
=0to2do
begin
CntScoreStrGrid.Cols[i].Clear;
CntScoreStrGrid.Cols[i].Add(titleName[i]);
end;
CntScoreDBChart.Title.Text.Clear;
CntScoreDBChart.Title.Text.Add('新生高考成绩统计['+itemName+']');
CntScoreDBChart.Series[0].Clear;
maxScore:
=ADOQFCntQuery.FieldByName('MaxScore').AsInteger;
minScore:
=ADOQFCntQuery.FieldByName('MinScore').AsInteger;
avgScore:
=ADOQFCntQuery.FieldByName('AvgScore').AsInteger;
itemsCount:
=trunc((maxScore-minScore)/1)+1;
intCrntScore:
=trunc(minScore/1)*1;
i:
=0;
isWrite:
=true;
CntScoreStrGrid.RowCount:
=itemsCount+4;
intCrntCnt[i]:
=ADOQFCntQuery.FieldByName('CrntCnt').AsInteger;
strSql:
='';
if(isWrite)or(itemsCount<12)then
strSql:
=inttostr(intCrntScore-1)+'-';
CntScoreDBChart.Series[0].Add(intCrntCnt[i],strSql,intColor[imod11]);
CntScoreStrGrid.Rows[i+1].Add(inttostr(intCrntScore-1)+'-'+inttostr(intCrntScore));
CntScoreStrGrid.Rows[i+1].Add(inttostr(intCrntCnt[i]));
CntScoreStrGrid.Rows[i+1].Add(floattostr(trunc(intCrntCnt[i]/19*10000)/100)+'%');
isWrite:
=notisWrite;
i:
=i+1;
end;
CntScoreStrGrid.Rows[i+1].Add('最高分');
CntScoreStrGrid.Rows[i+1].Add(inttostr(maxScore));
CntScoreStrGrid.Rows[i+2].Add('最低分');
CntScoreStrGrid.Rows[i+2].Add(inttostr(minScore));
CntScoreStrGrid.Rows[i+3].Add('平均分');
CntScoreStrGrid.Rows[i+3].Add(inttostr(avgScore));
1.2毕业生管理子模块
功能:
①编辑学生(班级)的学习状态(在读、毕业班、已毕业等)
②毕业班级学生(毕业生)综合信息查询
③职业类别与档案材料基础代码的维护
④毕业生择意向与就业去向的处理
⑤毕业生档案材料与毕业经费的管理
⑥毕业生证书的发放管理
设计:
①总体设计:
采用与新生管理统一的界面,用PageCtrl来实现。
②毕业学生状态设置:
完成在校生到毕业班学生状态的改变或毕业班学生向已毕业学生状态的改变。
实现是通过修改学生基本信息的状态标志。
修改学生状态代码如下:
……
//设置毕业班
procedureTSelGraForm.addClassBtnClick(Sender:
TObject);
var
strSql,strCrntClassID:
String;
begin
if(ValClassListBox.Items.Count<1)or(ValClassListBox.ItemIndex<0)then
abort;
strCrntClassID:
=strValClassID[ValClassListBox.ItemIndex];
strSql:
='Updatejbxx2setZT='+''''+'毕业班'+''''+'Wherebjid='+''''+strCrntClassID+'''';
MainForm.database.Execute(strSql);
SelGraForm.FormShow(Sender);
end;
……
③毕业生综合信息查询:
查询毕业生的综合信息(成绩除外,有单独模块提供查询功能),按类分为若干页显示,提供打印功能。
响应数据源控件的代码:
procedureTsrchForm.DSsrchStuDataChange(Sender:
TObject;Field:
TField);//查询学生数据源数据改变
begin
srchForm.RefreshBaseInfo();//刷新基本信息
srchForm.RefreshJCInfo();//刷新奖惩信息
srchForm.RefreshQTInfo();//刷新干部信息等
end;
procedureTsrchForm.RefreshBaseInfo();//刷新基本信息
var
strSql,crntXH:
String;//查询语句与学号
begin
crntXH:
=trim(ADOsrchStuQuery.FieldByName('学号').AsString);
strSql:
='SELECTXS_BASE.*,JBXX2.XM,JBXX2.XB,BJXX.BJMC,';
strSql:
=strSql+'XS_ZYB.ZYMC,XS_BJXX.CC,XS_BJXX.XZ,ZZMMB.ZZMM,MZB.MZ,JGB.JGMC,';
strSql:
=strSql+'SFB.SFMC,XS_EXPEND.CYM,XS_EXPEND.SG,XS_EXPEND.XX,XS_EXPEND.BYXX,';
strSql:
=strSql+'XS_EXPEND.TC,XS_EXPEND.EMAIL,XS_EXPEND.HOMEPAGE,XS_EXPEND.JKXX';
strSql:
=strSql+'FROMJBXX2INNERJOIN';
strSql:
=strSql+'BJXXONJBXX2.BJID=BJXX.BJIDLEFTOUTERJOIN';//外连接班级扩展信息
strSql:
=strSql+'XS_BJXXONBJXX.BJID=XS_BJXX.BJIDLEFTOUTERJOIN';//外连接专业表
strSql:
=strSql+'XS_ZYBONBJXX.ZYID=XS_ZYB.ZYIDLEFTOUTERJOIN';//外连接籍贯表
strSql:
=strSql+'SFBONXS_BASE.SYSF=SFB.SFIDLEFTOUTERJOIN';
strSql:
=strSql+'JGBONXS_BASE.JGID=JGB.JGID';
strSql:
=strSql+'Wherejbxx2.XH='+''''+crntXH+'''';
ADOBaseQuery.SQL.Clear;
ADOBaseQuery.SQL.Add(strSql);
ADOBaseQuery.Open;
end;
④基础编码维护:
直接维护职业类别表与档案材料表。
通过ADOTable对象来实现与数据库中表的联系,直接读取或编辑更新数据表。
⑤择业意向登记与就业去向登记:
根据学生的择业要求和志向,登记其擅长的职业类别;按照毕业生的实际就业去向,登记毕业生的毕业单位、职务、联系方式等信息,以进行各种数据的统计和信息的交流。
采用DBGrid来显示学生信息,而用数据库控件来绑定就业详细信息;用按钮来实现数据的添加、修改和删除。
关键在于按钮状态(增、删、改)的实现:
procedureTMainForm.RefreshStuJob();//刷新就业信息
var
strSql,strJobXH:
String;
begin
strJobXH:
=trim(DBText10.Field.Text);//取得学号
ifstrJobXH=''then//为空,程序出错,退出
abort;
strSql:
='Selectxs_jyxx.*fromxs_jyxxWhereXH='+''''+strJobXH+'''';//查询是否已有该生就业信息
ADOStuGraQuery.SQL.Clear;
ADOStuGraQuery.SQL.Add(strSql);
ADOStuGraQuery.Open;
//控制权限
ifEditTB.Downthen//处于编辑状态
begin
ifnotADOStuGraQuery.Eofthen//有该生就业信息
begin
FirmDBEdit.Enabled:
=true;//可编辑
ProTypeLookup.Enabled:
=true;
PosDBEdit.Enabled:
=true;
TelDBEdit.Enabled:
=true;
EmailDBEdit.Enabled:
=true;
BZMemo.Enabled:
=true;
addJobBtn.Enabled:
=false;
delJobBtn.Enabled:
=true;//删除为有效
confirmJobBtn.Enabled:
=true;//确认编辑为有效
end
else//无就业信息,可添加
begin
FirmDBEdit.Enabled:
=false;
ProTypeLookup.Enabled:
=false;
PosDBEdit.Enabled:
=false;
TelDBEdit.Enabled:
=false;
EmailDBEdit.Enabled:
=false;
BZMemo.Enabled:
=false;
addJobBtn.Enabled:
=true;//添加为有效
delJobBtn.Enabled:
=false;//删除无效
confirmJobBtn.Enabled:
=false;//确认无效
end;
end;//endofEditTB.Down
end;//endofprocedure
⑥毕业生档案材料管理:
登记毕业生的档案材料信息,并提供查询,以确认该生是否具备正常的可毕业手续。
代码如下:
procedureTMainForm.RefreshDocuStu();//刷新档案材料信息
var
strSql,strCrntXH:
String;
begin
strSql:
='Selectjbxx2.xhas学号,xmas姓名,xbas性别,';
strSql:
=strSql+'xs_daxx.DACLdmas档案材料代码,DACLMCas档案材料名称,';
strSql:
=strSq
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 设计 实现 报告