1.1 问题的提出
人类刚跨过新千年,计算机通信技术的迅速发展和信息技术的广泛应用,正把人类带进计算机信息时代,计算机的应用已普及到经济和社会生活的各个领域。教育领域也不例外,现今已经出现了各种图书馆管理系统、超市管理系统……其中学生的档案成绩管理是任一院校都不可缺少的部分,它的内容对于学校的决策者和教学管理者来说都至关重要,而在过去当人们还处于手工管理阶段的时候,摆在管理员面前的是一大堆的工作,无论是信息的录入还是信息的查找都要让他忙上几天几夜,在那个阶段,不但要花费管理员的大量时间,而且还往往由于抄写不慎,出现张冠李戴的现象,人工管理的方式效率较低,为数据的查询、更新和维护代来了极大的不便。所以学生信息管理系统的开发和应用是必要的,它能够为管理人员提供充足的信息和快捷的查询手段,提高学校信息管理的效率,使管理快捷、方便、高效!
1.2 本文研究路线
本系统将以课本和一些课外书籍为参考,按照带课老师的作业要求,从系统开发背景→业务流程分析→数据流分析→功能模块设计→数据库设计→输入输出设计→系统部署一步步对系统进行分析和设计。
1.3系统开发基本目标
1.3.1 该系统开发的总体任务是实现学生信息管理的系统化,规范化的自动化。
1.3.2. 系统对永久记录的文件实现归档管理,支持高效率完成学生信息管理的各项任务。
1.3.3. 确定在一定的时间内能完成预定的程序功能是可行性分析报告的重点。
1.4 系统开发设计思想
1.4.1尽量采用学校现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用学校现有的资源,提高系统开发水平和应用效果的目的。
1.4.2系统采用模块化程序设计方法,既便于系统各子功能的组合和修改,又便于未参与开发的技术维护人员进行补充、维护。
1.4.3系统应具备数据库维护功能,及时根据用户需求进行数据的添加,删除.
1.4.4系统应符合学校对学生的管理流程满足学校对学生的管理需要,并达到操作过程中的直观,方便,实用,安全等要求。
2 学生成绩档案管理系统研究概述
2.1 管理信息系统的发展历史
管理信息系统在最初级阶段是统计系统,所研究的内容是数量数据间表面的规律,它可以把数据分成较相关和较不相关的组,然后把数据转换为信息。
第二阶段是数据更新系统,其典型代表是美国航空公司于20世纪50年代建成的SABRE预约订票系统。它设有1008个订票点,可以存取600000个旅客记录和27000个飞行段记录。它的操作比较复杂,在任何一"点"都可以查到某一航班是否有空座位。
第三阶段是状态报告系统,它可以分为生产状态报告、服务状态报告和研究状态报告等系统。比如生产状态报告系统,它的典型代表是IBM公司的生产管理系统。1964年它生产出中型计算机IBM360.一台计算机有超过15000个不同的部件,每一个部件又有若干个元件,加之IBM的工厂遍及美国各地,不同的定货有不同的部件和不同的元件,必须指出什么工厂什么设备生产什么元件,因此不仅生产复杂,装配、安装和运输都十分复杂。为了保证生产以及其他环节的顺利进行,必须要有一个以计算机为基础的生产状态报告系统。
状态报告系统还有一种形式是数据处理系统,它用来处理日常业务和生产报告,重点在于将手工作业自动化,提高效率和节省人力。数据处理系统一般不能提供决策信息。
最后的阶段是决策支持系统,它是用来辅助决策的信息系统。该系统可以计划、分析方案,审查解答和求解的误差。它一般包括一些模型用以产生决策信息,但不强调全面的管理功能。
2.2系统功能描述
2.2.1 系统总体结构
系统开发的总体任务是实现信息关系的系统化、规范化和自动化。
(1)系统的结构关系图(见附录图2-1)
2.2.2结构关系描述:
系统的结构关系图是系统的总体功能分析,是在系统开发的总体任务的基础上完成的。本项目中的学生信息系统需要完成的功能主要有:
① 学生信息的输入,包括学生基本信息、所在班级、个人经历、备注等。
② 学生信息的查询,包括学生基本信息、所在班级等。
③ 班级信息的输入,包括班级编号、班级名称等。
④ 班级信息的查询及列表。
⑤ 课程信息的设置包括添加、删除。
⑥ 学生成绩的录入、删除、查询,包括文化课成绩和量化成绩。
⑦ 学籍中的退学/休学的添加、删除
⑧ 学籍中的退学/休学的查询,包括学号、原班级、状态等。
2.3子系统描述
2.3.1 子系统的结构图规约说明
(1) 学生档案子系统的结构图应该包括学生基本信息、班级的管理等以及相对应的数据结构规约。
(2) 成绩子系统应该包括文化成绩、量化成绩等等与之对应的数据规约。
(3) 课程管理子系统应该包括新课程添加、旧课程删除等等数据规约。
2.3.2 结构连接图和说明 (见附录图2-2)
2.4 系统建模和模拟结构
2.4.1 用于模拟的系统模型
该系统的主要结构与功能在上面两张图中(系统结构关系图\结构连接图)已非常清楚,用于模拟的系统模型参照上图,主要模块及功能可分为系统管理\学生档案管理\课程管理\班级管理\成绩管理,使用上述系统的模型可对系统进行初步的模拟。
2.4.2 模拟结果
使用系统模型对整个系统进行初步的模拟之后可得出系统的模拟结果,系统的主要功能设计合理,且易操作,系统的主要目标已达到,系统模型模拟成功。
2.4.3 特殊性能
系统主要功能为学生档案的管理,课程信息,班级信息,成绩信息的管理。此外还加入用户的管理,并且有必要实现系统信息的加密,这一点在学生档案管理模块中尤为重要,因为学生的信息有的是保密的,所以对于数据库的加密是系统必要的附加特殊功能。
3 学生成绩档案管理系统分析与设计
3.1系统功能需求简介
商丘四中学生成绩档案管理系统是针对学校的大量业务处理工作而开发的管理软件,是典型的管理信息系统。它的内容对于学校的决策者和管理者来说都至关重要,它能够为用户提供充足的信息和快捷的查询手段,能有效的帮助学校和老师掌握学生的情况,为学生提供班级课程方面的查询。
用户通过输入学生基本信息、课程基本信息等,由系统自动生成相应的数据以供学生查询,还可以对这些基本信息进行更新和删除, 学校学生档案管理信息系统力求给用户方便快捷的途径去管理这些繁琐的数据。
具体系统功能需求描述如下:
3.1.1学生档案管理
每年有大量新生入学,通过这一模块,可以实现学生基本情况的添加、删除、修改,还能查询各个学生的情况。
3.1.2班级信息管理
实现班级的添加、删除、更新,查询班级的编号,名称等。
3.1.3课程信息管理
每个学期都会增加一些新的科目,通过本模块可以轻松的添加以及更新课程。可根据课程编号、课程名称,对其进行输入,可以看到集中的课程数据信息,而且可以根据用户的修改要求进行数据的添加、删除的操作。
3.1.4 学籍变动
在该模块中对在校学生进行退学、休学、复学、调班、转学等,实现对学生学籍的变动。
3.1.5系统管理
在该模块中包括了系统设置、用户管理、数据维护、修改密码。用户可以对其进行添加用户、删除用户、修改密码、数据备份、数据恢复等功能。
3.2 功能需求描述
3.2.1软件结构图
下页图所示
3.2.2系统用户管理模块
(1). 功能
系统管理模块主要实现以下功能:
①系统设置
②用户管理
③修改密码
④数据维护
⑤退出系统
输入输出:
系统启动后,将首先出现用户登录窗体,用户首先输入用户名,然后输入密码。如果用户或密码错误,则进入不了系统。
(2).算法
在本文档中都统一使用PAD 图,即树形问题分析图(Problem Analysis Diagram)。
3.2.3学生档案管理模块
(1). 功能
学生档案管理模块主要实现以下功能:
①添加学生信息
②修改学生信息
③查询学生信息
④删除学生信息
⑤打印学生信息
(2).算法
学生档案信息管理模块PAD图如下
3.2.4班级设置模块
(1). 功能
班级信息管理模块主要实现以下功能:
①添加班级信息
②删除班级信息
③查询班级信息
(2). 算法
班级设置管理模块的算法包括班级信息的添加和删除与学生信息管理的添加和删除查询类似,实现方法和前面介绍的一样,这里不再重复。
3.2.5课程设置模块
(1). 功能
课程设置模块主要实现以下功能:
①添加课程信息
②删除课程信息
(2).算法
与班级和学生档案信息的添加与删除类似。
3.2.6 成绩模块的设计
(1) 功能
成绩模块主要实现以下功能:
① 文化成绩与量化成绩添加、删除、查询、修改
② 课程的设置包括课程的添加、删除、查询、修改
3.2.7帮助模块的设计
一个良好的Windows应用程序应该提供一个About窗口,其中包括本系统的名称。所有者,联系方式,版本号,与专利信息等。
3.3 系统平台选择
设计平台: DELPHI 7.0
Delphi是一个面向对象设计的应用程序语言,是开发数据库前端的优秀工具,它的编程语言简洁明快、组件功能强大和编程环境灵活方便。采用Delphi来开发数据库应用程序具有更大的灵活性和可扩展性。
数据库: Microsoft Access
Access 是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。Access 的优点在于它能使用数据表示图或自定义窗体收集信息。数据表示图提供了一种类似于 Excel 的电子表格,可以使数据库一目了然。另外,Access 允许创建自定义报表用于打印或输出数据库中的信息。Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。Access 是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。Access 多用于中小型企业来设计中小型数据库,一般的学校教务系统的数据库用Access 来设计完全能达到要求。由于考虑到本系统是应用在单机系统上,只建立起一个数据库。
数据库访问方式:ADO
ADO(Active Data Objects)实际是一种提供访问各种数据类型的连接机制。ADO设计为一种极简单的格式,通过ODBC的方法同数据库接口。可以使用任何一种ODBC数据源,即不止适合于SQL Server、Oracle、Access 等数据库应用程序,也适合于Excel表格、文本文件、图形文件和无格式的数据文件。ADO是基于OLE-DB之上的技术,因此ADO通过其内部的属性和方法提供统一的数据访问接口方法。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。
3.4 数据库设计
3.4.1数据字典分析
传统的数据字典包括以下几种类型的条目:
(1).数据流条目--数据流条目给出某个数据流和定义,它通常是列出该数据流的各组成数据元素。
该系统中的数据流条目有:
学生基本信息=学号+班级编号+姓名+性别+民族+政治面貌+家庭地址+籍贯+联系电话+入学时间+出生日期+图片
课程信息=课程编号+课程名称
班级信息=班级编号+班级名称
用户信息=用户名+密码
(2).文件条目--文件条目给出某个文件的定义,列出它的组成数据项,此外还要给出文件的组织形式。
例:学生信息文件={学生基本信息记录}+{学生班级记录}
主键:学生学号
(3).数据元素条目--给出某个数据单项的定义,通常是数据项的值类型。
例:学生基本信息记录中“学生学号”的数据值类型为数值类型,有效值范围为000000~999999。
3.4.2逻辑结构设计
将逻辑结构用图形表示,即数据流图
数据库设计:
一个数据库中可以存储多个表,在表之间通过索引项建立关系称为关联,利用这种关系使各个表协同工作。
设计库的步骤是:
①确定所需的表;
②
确定每个表中所需的字段;
③确定各个表之间的关系。
3.4.3创建表结构和索引
学生信息管理系统共有5个表,分别为学生信息表、班级设置表、课程设置表、学籍变动表、用户表。每个表的结构如下:
表1。学生基本信息表
字段 | 字段名 | 类型 | 宽度 | 小数位数 |
bID | 学号 | 文本 | 8 | |
cID | 班级编号 | 文本 | 6 | |
bName | 姓名 | 文本 | 8 | |
bGender | 性别 | 文本 | 2 | |
bNation | 民族 | 文本 | 4 | |
bPolitic | 政治面貌 | 文本 | 8 | |
bNative | 籍贯 | 文本 | 14 | |
bFaName | 家长姓名 | 文本 | 4 | |
bFamAddr | 家庭详细地址 | 文本 | 30 | |
bPost | 邮政编码 | 文本 | 6 | |
bTel | 联系电话 | 文本 | 12 | |
bDate | 入学时间 | 日期 | 10 | |
bBirth | 出生日期 | 文本 | 10 | |
bStatus | 在校状态 | 文本 | 4 | |
bPhoto | 图片 | OLE对象 |
表2。班级信息表
字段 | 字段名 | 类型 | 宽度 | 小数位数 |
1 | 班级编号 | 文本 | 12 | |
2 | 班级名称 | 文本 | 20 |
表3。学生课程表
字段 | 字段名 | 类型 | 宽度 | 小数位数 |
1 | 课程编号 | 文本 | 4 | |
2 | 课程名称 | 文本 | 12 |
表4。用户表
字段 | 字段名 | 类型 | 宽度 | 小数位数 |
1 | 用户名 | 文本 | 15 | |
2 | 密码 | 文本 | 10 | |
级别 | 文本 | 20 |
表5。学籍变动表
字段 | 字段名称 | 类型 | 宽度 | 小数位数 |
bID | 学号 | 文本 | 8 | |
bName | 姓名 | 文本 | 8 | |
cClass | 原班级 | 文本 | 10 | |
school | 转学学校 | 文本 | 10 | |
xclass | 调班 | 文本 | 10 | |
Reasion | 原因 | 文本 | 20 | |
cDate | 变动日期 | 日期型 | 8 | |
Memo | 备注 | 备注 | 50 |
表6.学生成绩表
字段 | 字段名称 | 类型 | 宽度 | 小数位数 |
bID | 学号 | 文本 | 8 | |
bName | 姓名 | 文本 | 8 | |
cClass | 班级 | 文本 | 10 | |
cause | 科目 | 文本 | 10 | |
Score | 成绩 | 数字 | 8 |
3.4.4.系统出错处理
(1)故障信息
当数据冲突或误操作时,系统能自动出现提示对话框,一般自动退出系统或重启系统后数据恢复。
(2)补救措施和维护
当数据冲突或出错时,通常重启系统可以使数据库得到恢复。
3.4.5.安全保密设计
为了保证系统的安全性,操作人员进入本系统前必须输入有效的密码,系统根据密码确认决定是否进入,而不知道密码的操作人员是无权进入本系统的。
进入本系统的用户是“admin”
进入本系统的密码是“admin”
4 学生成绩档案管理系统的功能实现
本软件的主要目标是实现学校学生信息管理的自动化,主要功能是对有关学生信息的存储与查询管理。
4.1登录系统模块编码设计
系统启动后,将首先出现用户登录窗体如下,用户首先输入用户名,然后输入密码。
procedure Tlogin_form.BitBtn1Click(Sender: TObject);
var
pass:variant;
begin
pass:=ADOTable1.Lookup('user',edit1.Text,'password');
if pass = edit2.text then
begin
main_form.Show;
strloginname:=edit1.Text;
main_form.StatusBar1.Panels[1].Text:=edit1.Text;
main_form.WindowState:=wsMaximized;
self.close;
end
else
begin
showmessage('用户名或密码错误,请重新输入');
edit1.text:='';
edit2.text:='';
edit1.setfocus;
end;
end;
procedure Tlogin_form.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
BitBtn1.Click;
end;
procedure Tlogin_form.FormShow(Sender: TObject);
begin
ADOTable1.TableName:='login';
ADOTable1.Open;
self.edit1.SetFocus;
end;
4.2用户管理编码设计
选择系统菜单里的用户管理功能,出现用户综合管理窗口,在该窗口中当前登录用户可以创建一个或多个有固定权限的用户、删除用户、当前用户密码修改。
procedure TForm6.FormCreate(Sender: TObject);
var
newitem:Tlistitem;
strname,strp:string;
begin
adotable1.Open;
adotable1.Edit;
adotable1.First;
while not adotable1.Eof do
begin
newitem:=listview1.Items.Add();
strname:=adotable1.fields.fields[0].asstring;
strp:=adotable1.Fields.Fields[2].AsString ;
newitem.Caption:=strname;
newitem.SubItems.Add(strp);
adotable1.next;
end;
adotable1.Close;
adotable1.Free;
end;
procedure Tform6.listviewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
BitBtn1.Enabled := selected;
seluser:=Item.Caption ;
end;
procedure TForm6.BitBtn1Click(Sender: TObject);
var
strname:string;
begin
listview1.DeleteSelected;
adotable1.Edit;
adotable1.First;
while not adotable1.Eof do
begin
strname:=adotable1.Fields.Fields[0].AsString;
if (seluser=strname) then
adotable1.Delete;
end;
adotable1.Next;
adotable1.Post;
end;
procedure TForm6.BitBtn2Click(Sender: TObject);
begin
close;
end;
end.
4.3修改密码编码设计
用户可以直接修改当前用户的密码,非常的方便.
procedure TForm7.BitBtn1Click(Sender: TObject);
begin
if (edit4.Text =adotable1.Fields.Fields[0].AsString)and (edit1.Text =adotable1.Fields.Fields[1].AsString) then
begin
adotable1.Edit;
adotable1.Fields.Fields[1].AsString :=edit2.Text;
adotable1.Post;
showmessage('恭喜你,修改成功!');
end
else
showmessage('原用户名及密码错误,请重新输入!') ;
end;
procedure TForm7.BitBtn2Click(Sender: TObject);
begin
close;
end;
4.4学生档案信息管理编码设计
选择学生信息管理菜单项里的基本信息功能,出现基本信息窗口(如图),用户可以添加新的学生信息,但注意:学号不能和已有学号相同。
//以下为添加模块代码
procedure TForm8.BitBtn1Click(Sender: TObject);
begin
adotable1.Open;
adotable1.Edit;
adotable1.FieldByName('学号').AsString:=trim(edit1.Text);
adotable1.FieldByName('姓名').AsString:=trim(edit2.Text);
adotable1.FieldByName('性别').AsString:=trim(combobox1.Text);
adotable1.FieldByName('出生日期').AsString:=trim(edit12.Text);
adotable1.FieldByName('民族').AsString:=trim(combobox4.Text);
adotable1.FieldByName('政治面貌').AsString:=trim(combobox3.Text);
adotable1.FieldByName('籍贯').AsString:=trim(edit5.Text);
adotable1.FieldByName('入学时间').AsString:=trim(edit6.Text);
adotable1.FieldByName('入学成绩').AsInteger :=strtoint(trim(edit7.Text));
adotable1.FieldByName('宿舍号').AsString:=trim(edit8.Text);
adotable1.FieldByName('宿舍电话').AsString:=trim(edit9.Text);
adotable1.FieldByName('家庭地址').AsString:=trim(edit10.Text);
adotable1.FieldByName('家庭电话').AsString:=trim(edit11.Text);
adotable1.FieldByName('备注').AsString:=trim(memo1.Text);
adotable1.FieldByName('班级').AsString:=trim(edit3.Text);
adotable1.FieldByName('年级').AsString:=trim(combobox2.Text);
adotable1.FieldByName('班主任').AsString:=trim(edit4.Text);
adotable1.Post;
showmessage('你已经成功添加该信息!');
adotable1.Close;
end;
procedure TFrame3.Button1Click(Sender: TObject);//此为查找学生信息模块
begin
adoquery1.Close;
adoquery1.SQL.Clear;
if (combobox1.Text<>'')and(combobox2.Text<>'')and(edit1.Text<>'') then
begin
adoquery1.SQL.Add('select * from studentlist');
adoquery1.SQL.Add('where');
adoquery1.SQL.Add(combobox1.Text);
adoquery1.SQL.Add(combobox2.Text);
adoquery1.SQL.Add(''''+edit1.Text+'''');
adoquery1.Open;
end;
end;
// 此为删除确认模块代码
procedure TForm8.BtnDelClick(Sender: TObject);
begin
if messagebox(Application.Handle,'如果您点确定键此条记录将被删除','警告',
mb_ICONWarning+mb_yesno+mb_defbutton2)= mryes then
qutil2.Delete;
end;
//此为条件查找模块代码
procedure TForm8.SpeedButton1Click(Sender: TObject);
var
bid1,bid2,cid1,cid2,native,politic,nam:string;
Str:string;
begin
bid1 := trim(edit2.Text);
bid2 := trim(edit3.Text);
cid1 := trim(combobox4.Items[combobox4.itemindex]);
cid2 := trim(combobox5.Items[combobox5.itemindex]);
native := trim(edit6.Text);
politic := trim(combobo1.Text);
nam := edit5.text;
str := '';
if bid1 <>'' then
str := str+ 'AND bID>='''+bid1+'''';
if bid2 <> '' then
str := str+ 'AND bID<='''+bid2+'''';
if cid1 <> '' then
str := str+ 'AND cID>='''+cid1+'''';
if cid2 <> '' then
str := str+ 'AND cID<='''+cid2+'''';
if nam <> '' then
str := str + 'AND bName='''+nam+'''';
if native <> '' then
str := str+'AND bNation='''+native+'''';
if politic <> '' then
str := str+'AND bPolitic='''+politic+'''';
delete(str,1,4);
qutil2.SQL.Clear;
qutil2.SQL.Add('SELECT * FROM Arcinfo ');
if str <> '' then
qutil2.SQL.Add('where ' + str);
qutil2.SQL.add('order by bID');
qutil2.close;
qutil2.Open;
end;
//此为图片添加代码
procedure TForm8.SpeedButton12Click(Sender: TObject);
var
f : file of Byte;
size:int64;
begin
if OpenDialog1.Execute then
begin
AssignFile(f,OpenDialog1.FileName);
Reset(f);
Size:= FileSize(f);
CloseFile(f);
if Size >1024000 then
begin
showmessage('载入相片不能大于10K,请检查相片是否正确');
exit;
end;
dbbPhoto.Picture.LoadFromFile(OpenDialog1.FileName);
end;
end;
procedure TForm8.BtnPrintClick(Sender: TObject);
begin
FrmRep.Rep1.Print;
end;
procedure TForm8.BtnCloseClick(Sender: TObject);
begin
close;
end;
//此为档案信息浏览代码
procedure TForm5.ListView1Click(Sender: TObject);
var
newitem:Tlistitem;
str1,str2,str3,str4,str5,str6,str7,str8,str9,str10,str11,str12:string;
begin
n:=n+1;
if n<2 then
begin
frames.Parent := TWinControl(self);
frames.Name := 'frame3';
frames.Show;
frames.Align := alClient;
frames.Visible :=true;
frames.ListView1.Align :=alClient;
frames.ListView1.Visible:=true;
frames.GroupBox1.Visible :=false;
frames.Button1.Visible :=false;
frames.Button2.Visible :=false;
frames.Button3.Visible :=false;
adotable1.Edit;
adotable1.First;
while not adotable1.Eof do
begin
newitem:=frames.ListView1.Items.Add();
str1:=adotable1.fields.fields[0].asstring;
str2:=adotable1.Fields.Fields[1].AsString;
str3:=adotable1.Fields.Fields[2].AsString;
str4:=adotable1.Fields.Fields[3].AsString;
str5:=adotable1.Fields.Fields[4].AsString;
str6:=adotable1.Fields.Fields[5].AsString;
str7:=adotable1.Fields.Fields[10].AsString;
str8:=adotable1.Fields.Fields[11].AsString;
str9:=adotable1.Fields.Fields[7].AsString;
str10:=adotable1.Fields.Fields[9].AsString;
str11:=adotable1.Fields.Fields[13].AsString;
str12:=adotable1.Fields.Fields[14].AsString;
newitem.Caption:=str1;
newitem.SubItems.Add(str2);
newitem.SubItems.Add(str3);
newitem.SubItems.Add(str4);
newitem.SubItems.Add(str5);
newitem.SubItems.Add(str6);
newitem.SubItems.Add(str7);
newitem.SubItems.Add(str8);
newitem.SubItems.Add(str9);
newitem.SubItems.Add(str10);
newitem.SubItems.Add(str11);
newitem.SubItems.Add(str12);
adotable1.next;
end;
//adotable1.Close;
//adotable1.Free;
end
else
begin
frames.ListView1.Align :=alClient;
frames.ListView1.Visible:=true;
frames.GroupBox1.Visible :=false;
frames.Button1.Visible :=false;
frames.Button2.Visible :=false;
frames.Button3.Visible :=false;
end;
end;
4.5班级设置编码设计
选择班级管理菜单项里的班级设置信息功能,出现班级信息窗口户可以添加新的班级,但应注意:新添班级编号不能和已有班级编号相同。
//此为班级添加代码
procedure Taddclass.BitBtn1Click(Sender: TObject);
begin
unit9.classlist.ADOTable1.Open;
unit9.classlist.ADOTable1.Edit;
unit9.classlist.ADOTable1.Append;
unit9.classlist.ADOTable1.Fields.Fields[0].AsString:=trim(edit2.Text);
unit9.classlist.ADOTable1.Fields.Fields[1].AsString:=trim(edit1.Text);
unit9.classlist.ADOTable1.Fields.Fields[2].AsString:=trim(combobox1.Text);
unit9.classlist.ADOTable1.Fields.Fields[3].AsString:=trim(edit3.Text);
unit9.classlist.ADOTable1.Post;
self.close;
end;
//此为班级删除代码
procedure Tclasslist.BitBtn2Click(Sender: TObject);
begin
adotable1.Edit;
adotable1.Delete;
//adotable1.Post;
end;
//此为删除确认代码
procedure TFrmClass.btndelClick(Sender: TObject);
begin
if Messagedlg('确定要删除这条记录吗?',MtWarning,MbOKCancel,0)=MrOk then
qutil.Delete;
end;
//此为刷新记录代码
procedure TFrmClass.btnokClick(Sender: TObject);
begin
qutil.FieldByName('cid').AsString:=DBEdit1.Text;
qutil.FieldByName('cclass').AsString:=DBEdit2.Text;
qutil.Post;
qutil.Refresh;
btnadd.Enabled:=true;
btndel.Enabled:=true;
btnclose.Enabled:=true;
btnok.Enabled:=false;
btncancel.Enabled:=false;
end;
//此为增加数据代码
procedure TFrmClass.btncancelClick(Sender: TObject);
begin
if messagebox(0,'确定不新增本条数据?','提示',
mb_ICONInformation+mb_yesno+mb_defbutton2)= mryes then
begin
qutil.Cancel;
btnok.Enabled:=false;
btncancel.Enabled:=false;
btnadd.Enabled:=true;
btndel.Enabled:=true;
btnclose.Enabled:=true;
end;
end;
//此为条件查找班级代码
procedure TFrmClass.btnq1Click(Sender: TObject);
begin
qutil.SQL.Clear;
qutil.SQL.Add('Select * from Classinfo');
qutil.SQL.Add('Where cID >='''+edit1.text +'''');
qutil.SQL.Add('And cID<='''+edit3.text+'''');
qutil.Close;
qutil.Open;
end;
procedure TFrmClass.btnq2Click(Sender: TObject);
begin
qutil.SQL.Clear;
qutil.SQL.Add('Select * from Classinfo');
qutil.SQL.Add('Where cClass ='''+edit2.text +'''');
qutil.SQL.Add('And cClass<='''+edit4.text+'''');
qutil.Close;
qutil.Open;
end;
//此为窗口关闭提示代码
procedure TFrmClass.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
canClose := True;
if (formmode = 'ins') or (formmode = 'edt') then
begin
MessageBox(application.Handle,'请先结束输入模式后再离开','警告',
mb_ICONWarning+mb_OK);
canClose := False;
end;
end;
procedure TFrmClass.btnq3Click(Sender: TObject);
begin
qutil.SQL.Clear;
qutil.SQL.Add('Select * from Classinfo');
qutil.Close;
qutil.Open; //数据库找开
end;
4.6课程设置编码设计
选择课程设置菜单项里的课程设置功能,出现课程设置信息窗口户可以新增、删除课程,但应注意:新添课程号不能和已有课程号相同.
//增开新课程代码
procedure TForm15.BitBtn1Click(Sender: TObject);
var
n:integer;
begin
n:=0;
adotable1.Open;
adotable1.Edit;
adotable1.First ;
while not adotable1.Eof do
begin
if edit1.Text =adotable1.Fields.Fields[0].AsString then
n:=1;
adotable1.Next;
end;
if n=1 then
begin
showmessage('数据库中已存在该课程编号,请另外输入!');
edit1.Text :='';
edit1.SetFocus;
adotable1.First ;
end
else
begin
adotable1.append;
adotable1.Fields.Fields[0].AsString :=edit1.Text ;
adotable1.Fields.Fields[1].AsString :=edit2.Text ;
adotable1.Fields.Fields[2].AsString :=combobox1.Text;
adotable1.Fields.Fields[3].AsString :=memo1.Text;
adotable1.Post;
edit1.Text :='';
edit2.Text :='';
combobox1.Text :='';
memo1.Text :='';
edit1.SetFocus ;
end;
end;
//修改课程信息代码
procedure TForm15.BitBtn2Click(Sender: TObject);
begin
adotable1.Edit;
adotable1.Locate('课程编号',edit1.text,[]);
showmessage('你可以在对应记录内直接修改!');
end;
//删除课程信息代码
procedure TForm15.BitBtn3Click(Sender: TObject);
var
n:integer;
begin
n:=0;
//adotable1.Edit;
if edit1.Text = '' then
showmessage('请输入课程编号!')
else
begin
adotable1.Open;
adotable1.Edit;
adotable1.First ;
while not adotable1.Eof do
begin
if edit1.Text = adotable1.Fields.Fields[0].AsString then
begin
adotable1.Delete;
n:=n+1;
end
else
adotable1.Next;
end;
if n=0 then
begin
showmessage('该课程号不存在,请重试!');
edit1.Text :='';
edit1.SetFocus;
end;
end;
edit1.Text :='';
edit1.SetFocus;
end;
//删除确认代码
procedure TForm4.btndelClick(Sender: TObject);
begin
if Messagedlg('确定要删除这条记录吗?',MtWarning,MbOKCancel,0)=MrOk then
qutil.Delete;
end;
//添加确认代码
procedure TForm4.btncancelClick(Sender: TObject);
begin
if messagebox(0,'确定不新增本条数据?','提示',
mb_ICONInformation+mb_yesno+mb_defbutton2)= mryes then
begin
qutil.Cancel;
btnok.Enabled:=false;
btncancel.Enabled:=false;
btnadd.Enabled:=true;
btndel.Enabled:=true;
btnclose.Enabled:=true;
end ;
end;
4.7成绩模块编码设计
在成绩模块窗口的下们菜单下进行选择可执行相应操作,包括文化成绩及量化成绩的添加、删除及相应信息的查询。
//量化成绩的添加代码
procedure TFrame13.BitBtn1Click(Sender: TObject);
var
n:integer;
begin
n:=0;
if edit1.Text ='' then
showmessage('学号不能为空,重新输入!')
else
begin
adotable1.Open;
adotable1.Edit;
adotable1.First;
while not adotable1.Eof do
begin
if edit1.Text = adotable1.Fields.Fields[0].AsString then
begin
n:=1;
adotable1.Delete;
adotable1.append;
adotable1.Fields.Fields[0].AsString :=edit1.text;
adotable1.Fields.Fields[1].AsString :=edit2.text;
if checkbox1.Checked =true then
adotable1.Fields.Fields[3].AsInteger:=adotable1.Fields.Fields[3].AsInteger+1;
if checkbox2.Checked =true then
adotable1.Fields.Fields[2].AsInteger:=adotable1.Fields.Fields[2].AsInteger+1;
if checkbox3.Checked =true then
adotable1.Fields.Fields[4].AsInteger:=adotable1.Fields.Fields[4].AsInteger+1;
if checkbox4.Checked =true then
adotable1.Fields.Fields[5].AsInteger:=adotable1.Fields.Fields[5].AsInteger+1; adotable1.Post;
end;
adotable1.Next;
end;
if n=0 then
begin
adotable1.append;
adotable1.Fields.Fields[0].AsString :=edit1.text;
adotable1.Fields.Fields[1].AsString :=edit2.text;
if checkbox1.Checked =true then
adotable1.Fields.Fields[3].AsInteger:=adotable1.Fields.Fields[3].AsInteger+1;
if checkbox2.Checked =true then
adotable1.Fields.Fields[2].AsInteger:=adotable1.Fields.Fields[2].AsInteger+1;
if checkbox3.Checked =true then
adotable1.Fields.Fields[4].AsInteger:=adotable1.Fields.Fields[4].AsInteger+1;
if checkbox4.Checked =true then
adotable1.Fields.Fields[5].AsInteger:=adotable1.Fields.Fields[5].AsInteger+1;
if combobox1.Text = '活动量化' then
adotable1.Fields.Fields[6].AsString :=edit3.text;
if combobox1.Text = '班委量化' then
adotable1.Fields.Fields[7].AsString :=edit3.text;
if combobox1.Text = '学生会量化' then
adotable1.Fields.Fields[8].AsString :=edit3.text;
adotable1.Post;
end;
//adotable1.Close;
end;
edit1.Text :='';
edit2.Text :='';
edit3.Text :='';
checkbox1.Checked :=false;
checkbox2.Checked :=false;
checkbox3.Checked :=false;
checkbox4.Checked :=false;
combobox1.Text :='';
end;
//量化成绩信息修改
procedure TFrame13.BitBtn2Click(Sender: TObject);
begin
if edit1.Text ='' then
showmessage('学号不能为空!')
else
begin
adotable1.Edit;
adotable1.Locate('学号',edit1.Text,[]);
end;
end;
//量化成绩查询代码
procedure TFrame13.BitBtn3Click(Sender: TObject);
begin
if (checkbox5.Checked =false) and (checkbox6.Checked =false )then
showmessage('请选择查找条件再填入相应值!')
else
if checkbox5.Checked =true then
begin
if edit1.Text ='' then
showmessage('学号不能为空!')
else
begin
adotable1.Edit;
adotable1.Locate('学号',edit1.Text,[]);
if adotable1.Eof =true then
showmessage('该数据库中不存在此学号,建议使用姓名查找!');
edit1.Text :='';
edit2.Text :='';
edit3.Text :='';
checkbox1.Checked :=false;
checkbox2.Checked :=false;
checkbox3.Checked :=false;
checkbox4.Checked :=false;
checkbox5.Checked :=false;
checkbox6.Checked :=false;
combobox1.Text :='';
end;
end
else
if checkbox6.Checked =true then
begin
if edit2.Text ='' then
showmessage('姓名不能为空!')
else
begin
adotable1.Edit ;
adotable1.Locate('姓名',edit2.Text,[]);
if adotable1.Eof =true then
showmessage('该数据库中不存在此姓名,建议使用学号查找!');
edit1.Text :='';
edit2.Text :='';
edit3.Text :='';
checkbox1.Checked :=false;
checkbox2.Checked :=false;
checkbox3.Checked :=false;
checkbox4.Checked :=false;
checkbox5.Checked :=false;
checkbox6.Checked :=false;
combobox1.Text :='';
end;
end;
5 系统的测试
5.1 编写目的
软件测试是为了发现软件的错误,该文档的读者对象是软件测试部门,以指导软件测试过程。
5.1.1 定义
静态测试:主要方法有审阅,检查。
单元测试,组装测试,系统测试。
5.2 计划
5.2.1测试方案
使用以界面为基础的测试。以界面为基础的测试仅仅依靠软件与其运行环境之间的界面来选择和产生测试数据,而不管软件的具体需求和具体实现细节。包括软件输入,输出数据的类型取值范围以及取值的概率分布等等。
5.2.2测试项目
该测试计划主要包括对软件各个模块的测试,有:
(1) 用户登录窗口
(2) 用户综合管理窗口的测试
(3) 学生档案管理
(4) 成绩变动
(5) 班级设置
(6) 课程设置
5.2.3测试机构及人员
由于软件规模较小,所以所有测试任务都由软件的开发人员完成。
5.3 测试项目说明
5.3.1用户登录窗口的测试
该测试的目的是保证登陆窗口的正确性与在错误发生时的容错与纠错性。具体通过在登陆框中输入空用户名、空密码和错误的用户密码来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
图5-1
5.3.2用户综合管理窗口的测试
该测试的目的是保证修改用户密码窗口的正确性与在数据输入不正确时的容错与纠错性。具体通过在修改用户密码框中输入错的原用户密码,以及空的新用户密码,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
5.3.3学生档案管理窗口的测试
该测试的目的是保证新增学生信息窗口的正确性与在数据输入不正确时的容错与纠错性。
具体通过在新增学籍信息框中输入空的学号,已存在的学号,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
同时保证修改学生信息窗口的正确性与在数据输入不正确时的容错与纠错性。
具体通过在修改学籍信息框中输入空的学号,已存在的学号, 空的姓名来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
5.3.4班级设置窗口的测试
该测试的目的是保证添加班级信息窗口的正确性与在数据输入不正确时的容错与纠错性。
具体通过在班级设置窗口中的新增模式输入空的班级编号,已存在的班级号,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。在删除班级信息的时候,出现一个窗口,来确定是否真正删除。
查询的测试,具体通过在的查询方式框中输入空的编号,空的名称,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
5.3.5课程设置窗口的测试
图5-2
该测试的目的是保证添加课程信息窗口的正确性与在数据输入不正确时的容错与纠错性。
具体通过在添加课程信息窗口中输入空的课程编号,已存在的班级编号,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。在删除课程信息的时候,出现一个窗口,来确定是否真正删除。
查询的测试,具体通过在的查询方式框中输入空的编号,空的名称,来检测系统的出错运行情况。要求系统在遇到这些情况时能给出正确的错误提示。
5.3.6成绩模块窗口的测试
该测试的目的是保证添加学生成绩信息窗口的正确性与在数据输入不正确时的容错性与纠错性。具体通过在添加成绩信息窗口中输入空的数据、负值及大于100的数据来检测系统的出错运行情况,要求系统在遇到这些情况时能给出正确的错误提示。在删除成绩信息的时候,出现一个窗口,来确定是否真正删除。
6 系统的不足及改进设想(结论)
由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比如功能较少,用户界面不够美观,出错处理不够等多方面问题。软件开发是一个不断完善的过程,只有在实际的使用过程中才能不断的发现问题,从而再加以改进。而在系统的设计过程中,难免会出现一些预测不到的异常,这些异常甚至在系统测试阶段都检查不出来,只有在用户的使用过程中才能检查出来,很多地方未能考虑周全已至系统存在着很多不足之处,这些不足主要是由于时间不足造成的。在代码设计上也存在不足,容易造成系统运行效率的降低,这就需要在以后系统维护过程中逐步发现,并不断进行升级,都有待进一步改善。
通过本次毕业设计,很好地培养了对问题的分析、解决能力,同时,独立工作能力、合作能力也得到了很好的锻炼,特别是团队精神的培养,对即将走上工作岗位的我们,其中的作用是非常明显的。由于时间比较仓促,本系统不可避免地存在一些不足之处,例如本系统在代码重用性方面还有待提高,这将会在以后的工作中逐渐完善。
致 谢
在本论文写作过程中,得到了很多人的帮助,在此我要感谢所有支持我的老师,同学、朋友和所有关心我和帮助过我的人。
首先衷心地感谢茹庆云老师,在3个多月的论文写作过程中,茹老师在选题和深入分析上给予我很多帮助和启示,在整个毕业设计过程中提供了大量的宝贵资料,在设计过程中又花费了许多时间和我一起讨论、比较各个方案并在内容上指导,提出了许多有用的意见和建议。如果没有茹老师的帮助和热心的关怀,论文的进度和质量都难以达到要求。
感谢两年半来我的所有的任课老师,和02级计算机科学与技术系与我一起走完这条路的同学们。
感谢我的父亲、母亲和所有的家人,是他们殷切的期望和无私的关怀激励着我不断进取!
最后,也感谢学校的所有老师和领导,正是你们的辛勤耕耘,使我们的基础知识又一次得到了巩固,使理论能与实践相结合,不仅完成了学业,充实了自己,也更有利于我今后工作的发展。
陈涛、任新强
二○○五年六月
参考文献:
[1]. 李宣东 李存珠 编著 《软件工程概论》 南京大学计算机系出版 2001年8.
[2]. IV RogerS.Pressman 编著 《软件工程:实践者的研究方法》 机械工业出版社.
[3]. 刘韬 骆娟 何旭洪 编著 《Delphi 7.0 数据库系统开发实例》 人民邮电出版社.
[4].丁宝康 编著 数据库原理 经济科学出版社 2000.1
[5].王珊 陈红 编著 数据库系统原理教程 清华大学出版社 1998.7
[6].徐汀荣 王民 陈建明 编著 Delphi 6程序设计技术教程 北京希望电子出版社 2002.9
[7].林金霖 编著 Delphi 6实务经典 中国铁道出版社 2002.8
[8].瓮正科 王新英 编著 Oracle 8.x for Windows NT实用教程 清华大学出版社 1999.10
[9].张海藩 编著 软件工程导论 清华大学出版社 1998.1
附录: