您现在的位置:网站首页答辩论文计算机毕业设计计算机论文电子商务论文

教学管理系统

  • 简介: 河北工业大学函授考试 毕业设计(论文) 题 目 : 教学管理系统 专 业 : 计算机科学与技术(本科) 姓 名 : 李晨曦 指导教师 : 马秋菊 目 录 第一章 前言----------...
    • 请与管理员联系购买资料 QQ:5739126
  • 论文简介
  • 相关论文
  • 论文下载

 

 

河北工业大学函授考试

毕业设计(论文)

 

 

 

     :   教学管理系统     

     :   计算机科学与技术(本科)   

      :   李晨曦   

 

指导教师 :   马秋菊

 

       

 

 

    

 

 

第一章   前言--------------------------------------------------------------2

第二章   总体设计--------------------------------------------------------------------------3

  2.1   项目背景--------------------------------------------------------------------------3

  2.2   系统功能设置--------------------------------------------------------------------3

  2.3   系统功能模块---------------------------------------------------------------------3

第三章  系统流程及库文件--------------------------------------------4-8

3.1  系统流程-----------------------------------------------------------------------------4

3.2  数据库需求分析--------------------------------------------------------------------4

3.3  数据库概念结构设计------------------------------------------------5

3.4  数据库逻辑结构设计------------------------------------------------(5-8)

第四章  程序源码--------------------------------------------------------(8-21)

4.1  登录界面-------------------------------------------------------------(8-9)

4.2  教师课程管理界面---------------------------------------------------(9-13)

4.3  教务处管理界面-----------------------------------------------------(13-18)

4.4  学生选课管理界面---------------------------------------------------(18-21)

第五章            系统测试------------------------------------------------------------------------------------------21

5.1  系统不足------------------------------------------------------------21

5.2  学生选课管理界面----------------------------------------------------21

第六章   用户操作说明-----------------------------------------------------------------------------------(21-26)

6.1  前期工程---------------------------------------------------------------21

6.2  系统演示------------------------------------------------------------(22-26)

致谢-----------------------------------------------------------------------------------------------------------------------------25

参考文献---------------------------------------------------------------------------------------------------------------------25

 

 

 

 

 

 

 

第一章      

 

信息管理系统(MIS)是集计算机技术、网络通信技术为一体的信息系统工程,它能够使企业运行的数据更加准确、及时、全面、详实,同时对各种信息进一步的加工,使企业领导层对生产、经营的决策依据更充分,更具有合理性科学性,并创造出更多的发展机会;另外也进一步加强企业的科学化、合理化、制度化、规范化管理,为企业的管理水平跨上新台阶,为企业持续、健康、稳定的发展打下基础。

MIS系统开发过程不仅仅是一个编写应用程序的过程,而是以软件工程的思想为指导,从可行性研究开始,经过系统分析、系统设计、系统实施等主要阶段而进行规范的开发过程。目前国内使用和发展的MIS平台模式大体上分为两种:客户机/服务器(Client/Server,简称C/S)模式和浏览器/服务器(Browser/Server,简称C/S)模式。

MIS系统不仅仅使用在企业中,它可以应用的方面很广,各行各业都可以应用:金融、保险、农业、工业等等。只要是有数据采集整理纪录的方面,都可以应用。

学校作为一个独立的机构同样也不例外。而且学校的各种情况都比较复杂,各个机构都各自独立,又相互联系,这就需要一个比较复杂的MIS系统。学校的MIS系统一般由以下管理部分组成:学生信息管理,教学管理,教务处管理,财务管理,物资管理,后勤管理等。

学校的各个系统又分为不同的管理人员,不同的管理人员所看到的以及所操作管理的部分又不同,这就需要给不同的操作者提供不同的操作管理权限。不同身份的用户所需要的资料也不同,这需要给不同的用户提供不同的操作界面,进行不同的操作。而且不同身份的客户所关心的问题也不同,比如学校的使用者大体分学生、教师、教务处、这就需要在做MIS系统开发之前一定要做好前期的需求分析,中期的系统设计、程序开发,而且也要注意后期的系统维护。

 

关键字:教学管理、课程申请、审批、选课、查询

 

第二章              总体设计

2.1 项目背景

当今社会,科学技术飞速发展,知识更替日新月异。随着计算机应用在全世界的普遍推广,各大中专院校都逐渐实现了计算机化管理,并且视野已经深入到Internet领域,实现了网络化管理。在学校里,如果说学生管理是为学习环境提供强大的后勤保障,那么教学管理就可以说是学校发展的强劲动力。加强教学管理,实现计算机化管理,不仅能使大中专院教学水平上了一个新台阶,而且方便了教学管理人员对学院教学、教师授课、学生学习等几大环节的深入了解和全面掌握。在学校实现教学管理的计算机化,是学校建设的一个重要的方面。

 

2.2   系统功能设置

本文所作的软件是MIS系统中的教学管理系统,前台用Delphi所开发,后台数据库使用的是SQL,采用的是B/S模式,其内容包括:

(1)                 登录界面(功能为为不同的用户提供不同的登录界面,实现不同权限的客户不同的操作功能);

(2)                 教师课程申请(包括增开新课程、删除旧课程、修改已有课程,为学生选课时使用),教师的课程管理(包括开设的课程列表、所报课程的学生名单、输入学生的成绩);

(3)                 教务处课程设置审批(包括审批课程详细内容、通过审批、拒绝申请),课程资源分配(主要完成上课教师和时间的分配。每学期开始选课前需要清除所有原分配的资源,重新输入分配结果),选课结果查询管理界面(主要功能是将选课的结果转移到成绩单中,同时兼有修改功能),成绩单(主要完成每个课程成绩单的查询。另外由于时间的缘故,未能实现成绩单的打印功能);

(4)                 学生选课功能(主要功能是实现课程的查询,把要选的课程加入已选课程表),

学生查询成绩功能(实现自己已学课程列表的成绩查询);

 

2.3          系统功能模块

系统各功能模块如图所示:

因为使用这套系统的人员不光是教务管理人员,还包括学生和教室。不同的身份对数据库的操作权限也不同。为了避免管理的混乱,需要针对不同的角色设计不同的客户端,分配不同的权限,对同一个数据库进行合理的修改。

   教学管理信息体统是校园信息管理系统的一个重要的有机组成部分。这个系统与校园其它系统之间实现互依赖、相互补充的,他需要从学生信息管理系统获取学生的个人信息,从教室信息管理系统获取任课教师的相关信息。同时,此系统提供的成绩单又为其它系统提供了必要的参考。

 

 

第三章              系统流程及库文件

2.4          系统流程

 流程图如图所示:

  

3.2  数据库需求分析

   根据图所室的数据流程,教学管理信息系统需要下数据项:

A.       课程:课程号、课程名称、讲课教师、学分、学时、上课时间、上课地点、课程简介、课程状态。

B.       选课结果:记录编号、选课人、所选课程。

C.      成绩单:记录编号、学生、课程、成绩

所需的外部数据支持

A.         学生:学号、姓名、班级;

B.         教师:员工号、姓名、所在院系;

3.4  数据库概念结构设计

本系统所需数据的E-R模型图如图所示:

 

 

3.5  数据库逻辑结构设计

根据上面的E-R图,需要三个基本信息表:教室信息、学生信息、课程信息。其中,教师信息和学生信息在实际系统是从其它信息管理系统的数据表中直接读取。学生的选课信息需要用一个表来单独保存。由于每学期期末前都要进行选课,一次选课结束后要讲这个表的内容及时保存到成绩单数据表中。使用本系统的不光是教务处的管理人员和教师,每个学生都需要登录倒选课系统进行课程的选择。因此,需要对不同的登录人员进行密码认证和权限的限制,防止出现越权行为。用户名、密码和权限单独保存在一个数据表中。另外需要一个表格保存各记录号的计数值和一个课程状态代码表,这八个数据表的结构如下图所示:

TEACHER  教师个人信息表

  

字段名

数据类型

是否为空

 

ID

CHAR(6)

NOT NULL

员工号(主关键字)

NAME

VARCHAR(20)

NOT NULL

   

DEPARTMENT

CHAR(2)

NOT NULL

所属院系

STUDENT  学生个人信息表

字段名

数据类型

是否为空

 

ID

CHAR(6)

NOT NULL

学号(主关键字)

NAME

VARCHAR(20)

NOT NULL

  

CLASS

CHAR(4)

NULL

所在班级

COURSE   课程信息表

字段名

数据类型

是否为空

 

ID

CHAR(10)

NOT NULL

课程号(主关键字)

NAME

VARCHAR(50)

NOT NULL

课程名称

TEACHER

CHAR(6)

NOT NULL

任课教师(外部关键字TEACHER

CREDIT_HOUR

SMALLINT

NULL

  

PERIOD

SMALLINT

NULL

  

CLASSTIME

VARCHAR(20)

 NULL

上课时间

CLASSROOM

VARCHAR(20)

NULL

上课地点

INTRO

VARCHAR(4000)

NULL

课程简介

STATE

CHAR(1)

NOT NULL

课程状态(外部关键字COURSE_STATE

COURSE_SELECT 课程状态代码表

字段名

数据类型

是否为空

 

ID

INTEGER

NOT NULL

记录号(主关键字)

COURSE

CHAR(10)

NOT NULL

课程号(外部关键字COURSE

STUDENT

CHAR(6)

NOT NULL

选课学生(外部关键字STUDENT

SCORE 成绩信息表

字段名

数据类型

是否为空

 

ID

INTEGER

NOT NULL

记录号(主关键字)

STUDENT

CHAR(6)

NOT NULL

学号(外部关键字STUDENT

COURSE

CHAR(10)

NOT NULL

课程号(外部关键字COURSE

SCORE

FLOAT

NULL

 

 

USER_PASS 用户密码信息表

字段名

数据类型

是否为空

 

ID

CHAR(6)

NOT NULL

用户名(主关键字)

PASSWD

CHAR(15)

NOT NULL

 

AUTHORITY

CHAR(1)

NOT NULL

 

COURSE_STATE 课程状态代码表

字段名

数据类型

是否为空

 

CODE

CHAR(1)

NOT NULL

状态代码(主关键字)

DESCRIPTION

VARCHAR(20)

NOT NULL

 

COUNTER  计数信息表

字段名

数据类型

是否为空

 

ID

CHAR(1)

NOT NULL

计数器号(主关键字)

COUNTER_VALUE

CHAR(15)

NOT NULL

计数值

3.6初始数据的输入

  在开发应用程序之前必须先输入部分基础的数据,包括部分教师的信息、用户名密码权限、所需的计数器和课程状态代码。计数器的设置如图一所示,课程状态代码的设置如图二所示,用户权限设置的设置如图三所示。

图一:

计数器设置

计数器编号

说明

F

成绩记录编号

K

课程编号

X

选课编号

图二:

课程状态代码

状态代码

说明

0

申请增加新课

1

申请删除旧课

2

申请修改课程

3

课选(激活)

4

等待课程安排

5

已删除

6

拒绝申请

 

图三:

用户权限

权限代码

说明

0

学生

1

教师

2

教务处

 

第四章           程序源码

以下为程序的原码:

4.1  登录界面:

     

 

用户认证的过程在“登录”按钮B_loginOnClick事件处理程序中完成,代码如下:

procedure TF_Login.B_loginClick(Sender: TObject);

begin

    try

       Database1.Connected:=True;                      //打开数据库连接           

       T_user.Filter:='ID='''+i_user.Text+'''';               //根据输入的用户名设置过滤器

       T_user.Filtered:=True;                           //激活过滤器                            

       T_user.Open;                                  //捕获信息                        

    except

       Application.MessageBox('请与系统管理员联系。', '数据库连接错误!', MB_OK);

       Application.Terminate;                      //数据库连接错误,报错并中断程序 

    end;

  if T_user.RecordCount=1 then                     //判断用户名是否存在 

  begin

     if T_user['AUTHORITY']='0' then

     begin

       F_main_st:=TF_main_st.Create(Self);

        try

         F_main_st.ShowModal;

        finally

       end;

end

else

        if T_user['AUTHORITY']='1' then

        begin

          F_main_tc:=TF_main_tc.Create(Self);

          try

          F_main_tc.ShowModal;

        finally

        end;

end

 else

        begin

          F_main_jwc:=TF_main_jwc.Create(Self);

          try

          F_main_jwc.ShowModal;

          finally

        end;

     end

   end

    else

      Application.MessageBox('密码不正确,请重新确认,注意大小写!', '密码不匹配', MB_OK);               

  End                                           

  else

    Application.MessageBox('请确认用户名是否正确!', '无此用户', MB_OK);                       

end;                                                                 

4.1  教师课程管理界面:

 

申请界面的OnShow事件和“恢复表单”按钮的OnClick事件使用同一个事件处理程序,主要是初始化申请表单,代码如下:

procedure TF_main_tc.B_resetClick(Sender: TObject);            //初始化申请表单     

begin

  i_state_1.ItemIndex:=0;                                   //申请初始化到增开新课   

  i_state_1Click(nil);                                       //调用申请修改程序        

  i_name_1.Text:='';                                        //清除课程名     

  i_credit_hour_1.Text:='0';                                   //初始化学分     

  i_period_1.Text:='0';                                       //初始化学时

  i_intro_1.Lines.Clear;                                      //清除课程简介    

end;

 

关闭窗口时,要同时关闭整个应用程序,因此窗体OnClose事件处理程序代码如下:

procedure TF_main_tc.FormClose(Sender: TObject; var Action: TCloseAction);

begin

 F_Login.i_user.Text:='';                                     //登录界面清空

F_Login.i_passwd.Text:='';

Close;                                                     //释放         

end;

 

当修改申请的内容时,程序要根据情况决定是否显示已开课程列表。控制代码在i_state_1OnClick时间处理程序中,代码如下

procedure TF_main_tc.i_state_1Click(Sender: TObject);

begin

  if i_state_1.ItemIndex>0 then                        //如果不是新开课程,则显示列表

    begin

      T_course_1.Filter:='TEACHER='''+F_Login.i_user.Text+''' AND STATE<>''5'' AND STATE<>''1''';

      T_course_1.Filtered:=True;                      //获取当前教师所开的课程

      T_course_1.Open;                             //不包括已删除和申请删除的课程

      o_course_1.Enabled:=True;                     //激活已开课程列表

      o_course_1CellClick(nil);

    end

  else

    begin                                                                      //如果是新开课程

       T_course_1.Close;                           //关闭已开课程数据表

       o_course_1.Enabled:=False;                    //取消课程列表显示

   end;

end;

 

如果是删除或修改旧的课程,在单击课程列表时,将在输入框中显示课程的详细信息,代码如下:

procedure TF_main_tc.o_course_1CellClick(Column: TColumn);

begin

  if T_course_1.Active then                             //判断课程信息表是否激活

  begin

    i_name_1.Text:=T_course_1['NAME'];                //提取课程名称

    i_credit_hour_1.Text:=T_course_1['CREDIT_HOUR'];   //提取课程学分

    i_period_1.Text:=T_course_1['PERIOD'];             //提取课程学时

    i_intro_1.Lines.Clear;                             //清除简介

    i_intro_1.Lines.Add(T_course_1['INTRO']);          //提取课程简介

  end;

end;

 

表单的提交在提交按钮B_submitOnClick事件处理程序中进行,代码如下

procedure TF_main_tc.B_submitClick(Sender: TObject);

var

  counter:integer;                                        //用于计数

  course_id:String;                                       //用于保存课程编号

begin

  case i_state_1.ItemIndex of                               //根据不同申请,分别处理

   0:                                                   //0:增加新课

   begin

    //获取课程计数

    T_counter_K.Open;                                  //打开计数器表

    counter:=T_counter_K['COUNTER_VALUE'];             //获取计数值

    inc(counter);                                         //增加计数值

    T_counter_K.Edit;                                    //修改计数器

    T_counter_K['COUNTER_VALUE']:=counter;             //输入新值

    T_counter_K.Post;                                    //提交修改

    T_counter_K.Close;                                   //关闭计数器表

    //合成课程编号

    course_id:='00000'+IntToStr(counter);                    //将计数值转换为字符串

    course_id:=copy(course_id,length(course_id)-6,6);          //截取固定长度字符串

    course_id:=FormatDateTime('yyyy',now)+course_id;        //添加年份信息

    //添加课程信息

    T_course_1.Filtered:=False;                            //取消过滤

    T_course_1.Open;

    T_course_1.AppendRecord([course_id, i_name_1.Text,

      F_login.i_user.Text, i_credit_hour_1.Text,

      i_period_1.Text, '', '', i_intro_1.Lines, '0']);              //追加纪录

   end;

   1:                                                  //1:删除

   begin

    T_course_1.Filtered:=False;                            //取消过滤

    T_course_1.Edit;                                     //进行修改

    T_course_1['STATE']:='1';                              //改变课程状态

    T_course_1.Post;                                     //提交修改

   end;

   2:                                                   //2:申请修改

   begin

    T_course_1.Filtered:=False;

    T_course_1.Edit;                                      //进行修改

    T_course_1['NAME']:=i_name_1.Text;                     //修改课程名称

    T_course_1['CREDIT_HOUR']:=i_credit_hour_1.Value;       //修改课程学分

    T_course_1['PERIOD']:=i_period_1.Value;                  //修改课程学时

    T_course_1['INTRO']:=i_intro_1.Lines.Text;                //修改课程信息

    T_course_1['STATE']:='2';                                //修改课程状态

    T_course_1.Post;                                       //提交

   end;

  end;

  B_resetClick(nil);                                        //恢复表单

end;

 

 

在界面初始化的时候,需要列出可选的课程列表。TabSheet2OnShow事件处理代码如下:

procedure TF_main_tc.TabSheet2Show(Sender: TObject);

begin

  //选取激活的课程

  T_course_1.Filter:='TEACHER='''+F_Login.i_user.Text+''' AND STATE=''3'''; //设置过滤条件

  T_course_1.Filtered:=True;                                         //激活过滤器

  T_course_1.Open;                                                 //打开数据表

  o_course_2CellClick(nil);                               //显示学生名单和成绩输入表

  T_students.Open;                                      //打开学生名单表

end;

 

当单击课程列表时,显示相应课程的学生名单和成绩单输入表。程序代码在o_course_2OnCellClick事件处理中:

procedure TF_main_tc.o_course_2CellClick(Column: TColumn);

begin

  Q_students.Close;                                           //关闭查询

  Q_students.Params.ParamValues['COURSE']:=T_course_1['ID'];     //设置课程参数

  Q_students.Open;                                          //重新打开查询

end;

 

4.3  教务处管理界面:

 

界面初始化工作在TabSheet1OnShow事件处理程序中完成,代码如下:

procedure TF_main_jwc.TabSheet1Show(Sender: TObject);            //界面初始化

begin                                                        //打开申请课程列表

  T_course_apply.Open;                                        //打开教师信息表

  T_teacher.Open;

end;

 

“通过审批”按钮的代码如下:

procedure TF_main_jwc.B_passClick(Sender: TObject);               //通过审批

begin

  Q_update.Close;                                             //关闭查询

  Q_update.SQL.Clear;                                         //清除语句

  Q_update.SQL.Add('UPDATE COURSE');

  Q_update.SQL.Add('SET STATE="4"');                          //4:通过

  Q_update.SQL.Add('WHERE ID="'+T_course_apply['ID']+'"');

  Q_update.ExecSQL;

  T_course_apply.Refresh;

end;

 

“拒绝请求”的按钮代码如下:

procedure TF_main_jwc.B_rejectClick(Sender: TObject);       //拒绝请求

begin

  Q_update.Close;                                     //关闭查询

  Q_update.SQL.Clear;                                 //清除SQL语句

  Q_update.SQL.Add('UPDATE COURSE');              //添加修改课程状态的SQL语句

  Q_update.SQL.Add('SET STATE="6"');                  //6:拒绝申请

  Q_update.SQL.Add('WHERE ID="'+T_course_apply['ID']+'"');

  Q_update.ExecSQL;                                 //执行

  T_course_apply.Refresh;                              //刷新

end;

 

 

界面初始化工作在TabSheet2OnShow事件处理程序中,代码如下:

procedure TF_main_jwc.TabSheet2Show(Sender: TObject);            //界面初始化

begin                                                       //关闭未分配课程查询

  Q_course_not_actived.Close;                                  //关闭已分配课程查询

  Q_course_actived.Close;                                     //打开未分配课程查询

  Q_course_not_actived.Open;                                  //打开已分配课程查询

  Q_course_actived.Open;

end;

 

“提交分配”的处理程序如下:

procedure TF_main_jwc.B_submitClick(Sender: TObject);         

begin

  With Q_submit do                                        //设置默认前缀Q_submit

  begin

    Close;

    SQL.Clear;

    SQL.Add('UPDATE COURSE');                  //添加修改记录用的SQL语句

    SQL.Add('SET CLASSROOM="'+i_classroom.Text+

                   '", CLASSTIME="'+i_time.Text+

                   '", STATE="3"');

    SQL.Add('WHERE ID="'+Q_course_not_actived['ID']+'"');

    ExecSQL;                                    //执行

  end;

  TabSheet2Show(nil);

  i_classroom.Text:='';

  i_time.Text:='';

end;

 

“取消当前分配纪录”的代码如下:

procedure TF_main_jwc.B_disableClick(Sender: TObject);        //取消当前分配纪录

begin                                                   // 设置默认前缀Q_submit

  With Q_submit do

  begin

    Close;

    SQL.Clear;

    SQL.Add('UPDATE COURSE');

    SQL.Add('SET STATE="4"');

    SQL.Add('WHERE ID="'+Q_course_actived['ID']+'"');

    ExecSQL;

  end;

  TabSheet2Show(nil);

end;

 

清除所有旧的分配的代码如下:

procedure TF_main_jwc.B_clear_allClick(Sender: TObject);       //清除所有旧的分配

begin

  if Application.MessageBox(

    '确认要清除所有已分配资源?',

    '操作确认',

    MB_OKCANCEL)=IDOK then                        //确认

  Begin                              //使用SQL语句的UPDATE指令来修改纪录

    With Q_submit do                                   //设置默认前缀Q_submit

    begin

      Close;

      SQL.Clear;                                       //添加修改用的SQL语句

      SQL.Add('UPDATE COURSE');

      SQL.Add('SET STATE="4"');

      SQL.Add('WHERE STATE="3"');

      ExecSQL;

    end;

    TabSheet2Show(nil);                                 //刷新显示

  end;

end;

 

选课结果布局初始化工作在TabSheet3OnShow事件处理程序中完成:

procedure TF_main_jwc.TabSheet3Show(Sender: TObject);         //选课结果布局初始化

begin

  T_course_select.Open;                                    //打开已选课程数据表

  T_score.Open;                                           //打开成绩数据表

end;

“转移纪录”按钮的代码如下:

procedure TF_main_jwc.Button1Click(Sender: TObject);             //转移纪录

var    counter:integer;

begin

  T_counter_F.Open;                                  //打开计数器

  counter:=T_counter_F['COUNTER_VALUE'];            //获取计数值

  T_course_select.First;                               //跳转至已选课程列表的第一行

  while not T_course_select.Eof do                      //依次对所有记录进行操作

  begin

    inc(counter);                                    //增加计数器值

    T_score.AppendRecord([counter,

      T_course_select['STUDENT'],T_course_select['COURSE'],

      0]);                                         //转移纪录

    T_course_select.Delete;                           //删除旧纪录

  end;

  T_counter_F.Edit;                                  //编辑计数器

  T_counter_F['COUNTER_VALUE']:=counter;           //设置计数值

  T_counter_F.Post;                                  //提交修改

end;

 

 

在输入课程编号后,单击“查询”按钮进行课程成绩单查询过程,代码如下:

procedure TF_main_jwc.B_queryClick(Sender: TObject);        //课程成绩单查询

begin

//查询课程名

  T_course_info.Filter:='ID='''+i_course_id.Text+'''';            // 设置过滤条件

  T_course_info.Filtered:=True;                            //激活过滤器

  T_course_info.Open;                                   //提取课程信息

  if T_course_info.RecordCount=1 then                     //判断记录是否存在

  begin

    //显示成绩列表

    Q_score_list.Close;                                  //关闭查询

    Q_score_list.Params[0].AsString:=i_course_id.Text;        //设置课程编号参数

    Q_score_list.Open;                                   //打开成绩查询

    //查询课程统计信息

    Q_info.Close;

    Q_info.SQL.Clear;

    Q_info.SQL.Add('SELECT COUNT(STUDENT) as COUNT, AVG(SCORE) as AVG, MAX(SCORE) as MAX, MIN(SCORE) as MIN'+' FROM SCORE WHERE COURSE='''+

                   i_course_id.Text+'''');                    //添加统计语句

    Q_info.Open;

    o_num_total.Text:=Q_info['COUNT'];                     //显示学生总人数

    o_score_max.Text:=Q_info['MAX'];                       //最高成绩

    o_score_avg.Text:=Q_info['AVG'];                        //平均成绩

    o_score_min.Text:=Q_info['MIN'];                        //最低成绩

    Q_info.Close;

    Q_info.SQL.Clear;

    Q_info.SQL.Add('SELECT COUNT(STUDENT) as COUNT  FROM SCORE'+

                   ' WHERE COURSE="'+i_course_id.Text+'"'+

                   ' AND SCORE<60');                        //统计不合格的人数

    Q_info.Open;

    o_num_failed.Text:=Q_info['COUNT'];                        //显示不及格人数

  end

  else

    Application.MessageBox('请确认课程编号','错误的编号',MB_OK);

end;

 

中断程序退出,代码如下:

procedure TF_main_jwc.FormClose(Sender: TObject; var Action: TCloseAction);    

begin

F_Login.i_user.Text:='';                                        //登录界面清空       

F_Login.i_passwd.Text:='';                                                  

Close;                                                      //释放 

end;

4.4  学生选课管理界面:

 

退出时清空已选课程,代码如下:

procedure TF_main_st.FormClose(Sender: TObject; var Action: TCloseAction);

begin

  F_Login.i_user.Text:='';                                          //登录界面清空

  F_Login.i_passwd.Text:='';

  F_main_st.Close;                                               //释放

end;

 

TabSheet1OnShow事件处理程序中进行初始化,代码如下:

procedure TF_main_st.TabSheet1Show(Sender: TObject);            //初始化

begin

  Q_course_selected.Close;                                    //关闭已选课程表

  Q_course_selected.Params[0].AsString:=F_login.i_user.Text;        //设置参数

  Q_course_selected.Open;                                     //打开已选课程查询

  Q_total_credit_hour.Close;                                    //关闭总学分查询

  Q_total_credit_hour.Params[0].AsString:=F_login.i_user.Text;        //设参

  Q_total_credit_hour.Open;                                    //打开总学分查询

end;

 

输入课程编号后,B_showOnClick事件处理程序来显示相应课程信息

procedure TF_main_st.B_showClick(Sender: TObject);                //输入编号,查询

begin

  T_course_info.Filter:='ID='''+i_course_id.Text+                    //条件

    ''' and STATE=''3''';

  T_course_info.Filtered:=True;                                  //激活过滤器

  T_course_info.Open;                                         //打开课程信息表

  T_teacher.Open;                                             //打开教师表

end;

 

将课程加入选课列表的操作在B_addOnClick事件处理程序中,代码如下:

procedure TF_main_st.B_addClick(Sender: TObject);                   //加入选课列表

var

  counter:integer;

begin

  //修改计数值

  T_counter_X.Open;                                          //打开计数器表

  counter:=T_counter_X['COUNTER_VALUE'];                     //提取计数值

  Inc(counter);                                                 //推进计数值

  T_counter_X.Edit;                                            //修改计数器纪录

  T_counter_X['COUNTER_VALUE']:=counter;                     //保存当前计数

  T_counter_X.Post;                                            //提交修改

  //添加课程

  if T_course_info.Active and (T_course_info.RecordCount=1) then      //判断

  begin

    With Q_select do

    begin

      Close;

      SQL.Clear;

      SQL.Add('INSERT INTO COURSE_SELECT');                 //插入

      SQL.Add('(ID, COURSE, STUDENT)');

      SQL.Add('VALUES ('+IntToStr(counter)+',"'

        +i_course_id.Text+'","'+F_login.i_user.Text+'");');             //追加

      ExecSQL;

    end;

    TabSheet1Show(nil);

  end

  else

    Application.MessageBox('课程编号有误','出错',MB_OK);

end;

 

删除当前选中的课程在B_delOnClick事件处理程序中实现,代码如下:

procedure TF_main_st.B_delClick(Sender: TObject);                 //删除当前选中的课程

begin

  With Q_select do

  begin

    Close;

    SQL.Clear;

    SQL.Add('DELETE FROM COURSE_SELECT');                //添加删除语句

    SQL.Add('WHERE ID='+IntToStr(Q_course_selected.FieldValues['SEL_ID'])+';');   //删除

    ExecSQL;

  end;

  TabSheet1Show(nil);

end;

 

 

TabSheet2OnShow事件处理程序实现界面的初始化工作,代码如下:

procedure TF_main_st.TabSheet2Show(Sender: TObject);              //显示查询初始化

begin

  Q_course_learned.Close;

  Q_course_learned.Params[0].AsString:=F_login.i_user.Text;          //设置条件

  Q_course_learned.Open;

end;

 

当单击DBGrid2中的课程名称时,OnCellClick事件处理程序启动三个统计SQL表,代码如下

procedure TF_main_st.DBGrid2CellClick(Column: TColumn);

begin

  Q_score_max.Close;

  Q_score_max.Params[0].AsString:=Q_course_learned['ID'];           //设参

  Q_score_max.Open;                                           //统计最大值

  Q_score_avg.Close;

  Q_score_avg.Params[0].AsString:=Q_course_learned['ID'];

  Q_score_avg.Open;                                           //统计平均值

  Q_score_min.Close;

  Q_score_min.Params[0].AsString:=Q_course_learned['ID'];

  Q_score_min.Open;                                           //统计最小值

end;

 

以上为整个系统的部分程序,不包括一些不重要的程序。

第五章               系统测试

5.1  系统不足

(1)         系统所需要的教师个人信息表和学生个人信息表并不能在程序中输入,而是由数据库中直接输入,考虑到本系统是一个课程信息管理系统,是校园信息系统的一个子系统,所需的数据库可以在其他子系统中得到。但本系统作为一个完整的系统,应该在教务处管理界面上实现这些数据的程序中输入;

(2)         系统的第二个不足的地方在于数据未能及时刷新。比如学生选完课后,教务处得选课结果查询管理中应该能立即得到数据,但是点击其他工具条后才能实现刷新,其像这样的不能及时刷新还有;

(3)         学生选课时未能在程序中看到所有已经开设的课程,只能查课程的编号得到所开课程的详细信息,此为一严重的不足;

(4)         系统未能实现打印的功能;

5.2  改进

 一个系统的完整性和严谨性体现在系统所需要的一切信息和操作都能在程序中实现,故此系统存在严重的不足,我会努力改进程序,实现系统的完整。

 

第六章    用户操作说明

6.1   前期工程

     1)在SQL数据库的企业管理器中建立一个名为School的数据库,在数据库中创建教师个人信息表、学生个人信息表、课程信息表、选课结果信息表、成绩信息表、用户密码表、课程状态代码表、计数信息表(如上文所给)。

     2)在开发程序之前必须先输入部分数据,包括教师的信息,学生的信息,用户名密码权限,所需的计数器和课程状态代码(如上文所示)。

     3)在控制面板的管理工具打开ODBC数据源管理器,添加一个名为aaa的数据源(驱动程序为SQL SERVER),连接到本地的数据库上。

6.2  系统演示

完成以上所有的编程内容后,我们可以来看看程序的运行效果。首先是登录窗口,因为一共设置了三种不同的权限(0学生, 1教师, 2教务处),又为了方便演示,故所有的用户密码就是用户的权限,图5-1是教师课程管理系统的登录界面。

6-1 教师登录界面

输入用户名和密码后,进入教师课程管理程序主界面,单击“课程设置申请”标签进入课程设置申请界面,如图8-2所示:

6-2  课程设置申请

此界面主要是完成课程的各项申请。选择“增开新的课程”时,允许输入全新的信息。如果是“删除旧的课程”或者“修改已有课程”,则已开课程列表激活,显示该教师所开得课程。通过单击列表中课程即可进行相应的设置。最后单击“提交申请”按钮来完成申请。

教师课程管理程序中另一项是课程管理。每学期当选课结束后教务处把选课结果移入成绩单中。这时,在课程管理界面中就会显示已开设的课程,和各课程的学生名单。在期末的时候也可以通过管理界面输入学生的成绩。课程管理界面如图6-3所示:

6-3  课程管理界面

学生登录后,首先是选课界面,如图6-4所示。学生需要输入课程编号。然后显示课程信息,确认是所要选的课程。在单击“加入>>”按钮,即可将课程加入“已选课程列表中。如果学错了课程,可以在课程列表中选择该课程编号,然后单击“<<删除”按钮。选课过程中,系统会随时统计已选课程的总学分。

6-4  选课界面

在期末教师输入成绩单后,学生课在查询成绩界面中察看自己的学科成绩。成绩查询界面如图6-5所示。单击不同的课程,即可显示该门课程的成绩和各类统计信息,包括最高成绩、平均成绩、和最低成绩。

6-5  查询成绩界面

本系统中管理功能最强的是教务课程管理应用程序。进入主界面后,一共有四项管理功能。

第一项时课程设置审批,界面如图6-6所示。所有老师提交的申请都列在界面左侧的课程列表中。单击列表中的课程编号,会显示具体的申请内容。通过下面的两个按钮来通过审批或拒绝请求。

6-6  课程设置审批界面

第二项功能是课程资源的分配,界面如图6-7所示。每学期开始选课之前,首先要确定下学期开设的课程和上课的地点及时间。进行资源分配的第一步是清除所有原来的分配,这样所有有效的课程都将恢复到待分配状态。随后单击课程,输入上课教师和时间,并且提交分配。如果输入又误,可以在已分配课程列表中选择该课程,然后取消分配,将该课程恢复到待分配状态。

6-7   课程资源分配

第三项功能为选课结果查询管理,如图6-8所示。这项功能主要是将选课的结果移存到成绩单数据表中,并且晴空选课结果数据表,已备期末的时候进行下学期的选课。此界面一个附带的功能就是在选课结束后修改选课的结果。

6-8  选课结果查询管理

  最后已项功能是成绩单的查询,如图6-9所示。这项功能主要用于查询和输出每门课程的成绩列表,并且统计5项基本情况:课程人数、最高成绩、平均成绩和不及格人数。

6-9  成绩单查询界面

致谢

感谢毕业设计指导教师马秋菊

感谢所有给予我支持和帮助的同学、朋友

参考文献

1.Delphi 6入门与提高》          张增强 武向辉              人民邮电出版社 

2.Delphi 4从入门到精通》         Marco Cantu                 电子工业出版社

3.SQL Server 2000 金典教程》     彭林 余艳                  人民邮电出版社

4.Delphi 6 灵感编程》            飞思科技产品研发中心       电子工业出版社

5.Delphi 数据库开发》            陈豫龙 何旭洪              人民邮电出版社

 

查看评论 已有0位网友发表了看法
  • 验证码: