




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.1 总体设计1.1.1开发背景1.1.2 系统功能设置1.1.3 系统功能模块1.2 系统流程及库文件 1.2.1 系统流程 1.2.2 数据库需求分析 1.2.3 数据库概念结构设计 1.2.4 数据库逻辑结构设计 1.2.5 初始数据输入1.3 程序源码 1.3.1登录界面 1.3.2教师课程管理界面 1.3.3教务处管理界面 1.3.4学生选课管理界面1.4 总结 1.1 总体设计1.1.1 开发背景 当今社会,科学技术飞速发展,知识更替日新月异。随着计算机应用在全世界的普遍推广,各大中专院校都逐渐实现了计算机化管理,并且视野已经深入到Internet领域,实现了网络化管理。在学校里,如果说学生管理是为学习环境提供强大的后勤保障,那么教学管理就可以说是学校发展的强劲动力。加强教学管理,实现计算机化管理,不仅能使大中专院校教学水平上了一个新台阶,而且方便了教学管理人员对学院教学、教师授课、学生学习等几大环节的深入了解和全面掌握。在学校实现教学管理的计算机化,是学校建设的一个重要的方面。1.1.2 系统功能设置通过对教学管理系统的研究与分析,该系统应该具有如下功能:(1) 登录界面(功能是为不同的用户提供不同的登录界面,实现不同权限的客户不同的操作功能)。(2) 教师课程申请(包括增开新课程、删除旧课程、修改已有课程,为学生选课时使用),教师的课程管理(包括开设的课程列表、所报课程的学生名单、输入学生的成绩)。(3) 教务处课程设置审批(包括审批课程详细内容、通过审批、拒绝申请),课程资源分配(主要完成上课教师和时间的分配。每学期开始选课前需要清除所有原分配的资源,重新输入分配结果),选课结果查询管理界面(主要功能是将选课的结果转移到成绩单中,同时兼有修改功能),成绩单(主要完成每个课程成绩单的查询。另外由于时间的缘故,未能实现成绩单的打印功能)。(4) 学生选课功能(主要功能是实现课程的查询,把要选的课程加入已选课程表);(5) 学生查询成绩功能(实现自己已学课程列表的成绩查询)。1.1.3系统功能模块系统各功能模块如图所示: 系统功能模块图因为使用这套系统的人员不光是教务管理人员,还包括学生和教师。不同的身份对数据库的操作权限也不同。为了避免管理的混乱,需要针对不同的角色设计不同的客户端,分配不同的权限,对同一个数据库进行合理的修改。教学管理信息系统是校园信息管理系统的一个重要的有机组成部分。这个系统与校园其它系统之间是相互依赖、相互补充的,它需要从学生信息管理系统获取学生的个人信息,从教师信息管理系统获取任课教师的相关信息。同时,此系统提供的成绩单又为其它系统提供了必要的参考。1.2 系统流程及库文件1.2.1系统流程 流程图如图所示:系统流程图1.2.2 数据库需求分析根据图所示的数据流程,教学管理信息系统需要以下数据项:课程:课程号、课程名称、讲课教师、学分、学时、上课时间、上课地点、课程简介、课程状态。选课结果:记录编号、选课人、所选课程;成绩单:记录编号、学生、课程、成绩。所需的外部数据支持:学生:学号、姓名、班级;教师:员工号、姓名、所在院系。1.2.3 数据库概念结构设计本系统所需数据的E-R模型图如图所示:数据库概念设计结构图1.2.4 数据库逻辑结构设计根据上面的E-R图,需要三个基本信息表:教师信息、学生信息、课程信息。其中,教师信息和学生信息实际上是从其它信息管理系统的数据表中直接读取。学生的选课信息需要用一个表来单独保存。由于每学期期末前都要进行选课,一次选课结束后要将这个表的内容及时保存到成绩单数据表中。使用本系统的不光是教务处的管理人员和教师,每个学生都需要登录到选课系统进行课程的选择。因此,需要对不同的登录人员进行密码认证和权限的限制,防止出现越权行为。用户名、密码和权限单独保存在一个数据表中。另外需要一个表格保存各记录号的计数值和一个课程状态代码表,这八个数据表的结构如下图所示:表1-1 TEACHER教师个人信息表 字段名数据类型是否为空说 明IDCHAR(6)NOT NULL员工号(主关键字)NAMEVARCHAR(20)NOT NULL姓名DEPARTMENTCHAR(2)NOT NULL所属院系表1-2 STUDENT学生个人信息表字段名数据类型是否为空说 明IDCHAR(6)NOT NULL学号(主关键字)NAMEVARCHAR(20)NOT NULL姓 名CLASSCHAR(4)NULL所在班级表1-3 COURSE课程信息表字段名数据类型是否为空说 明IDCHAR(10)NOT NULL课程号(主关键字)NAMEVARCHAR(50)NOT NULL课程名称TEACHERCHAR(6)NOT NULL任课教师(外部关键字TEACHER)CREDIT_HOURSMALLINTNULL学分PERIODSMALLINTNULL学时CLASSTIMEVARCHAR(20)NULL上课时间CLASSROOMVARCHAR(20)NULL上课地点INTROVARCHAR(4000)NULL课程简介STATECHAR(1)NOT NULL课程状态(外部关键字COURSE_STATE) 表1-3 COURSE_SELECT 课程状态代码表字段名数据类型是否为空说 明IDINTEGERNOT NULL记录号(主关键字)COURSECHAR(10)NOT NULL课程号(外部关键字COURSE)STUDENTCHAR(6)NOT NULL选课学生(外部关键字STUDENT)表1-4 SCORE 成绩信息表字段名数据类型是否为空说 明IDINTEGERNOT NULL记录号(主关键字)STUDENTCHAR(6)NOT NULL学号(外部关键字STUDENT)COURSECHAR(10)NOT NULL课程号(外部关键字COURSE)SCOREFLOATNULL成 绩表1-5 USER_PASS 用户密码信息表字段名数据类型是否为空说 明IDCHAR(6)NOT NULL用户名(主关键字)PASSWDCHAR(15)NOT NULL密 码AUTHORITYCHAR(1)NOT NULL权 限表1-6 COURSE_STATE 课程状态代码表字段名数据类型是否为空说 明CODECHAR(1)NOT NULL状态代码(主关键字)DESCRIPTIONVARCHAR(20)NOT NULL描 述表1-7 COUNTER 计数信息表字段名数据类型是否为空说 明IDCHAR(1)NOT NULL计数器号(主关键字)COUNTER_VALUECHAR(15)NOT NULL计数值1.2.5初始数据输入在开发应用程序之前必须先输入部分基础的数据,包括部分教师的信息、用户名密码权限、所需的计数器和课程状态代码。计数器的设置如表一所示,课程状态代码的设置如表二所示,用户权限设置的设置如表三所示。表1-8 计数器设置计数器编号说 明F成绩记录编号K课程编号X选课编号表1-9 课程状态代码状态代码说 明0申请增加新课1申请删除旧课2申请修改课程3课选(激活)4等待课程安排5已删除6拒绝申请表1-10 用户权限权限代码说明0学生1教师2教务处1.3 程序代码1.3.1登录界面 (1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_DIG_LOGIN,将对话框标题设置为“兰州商学院教学管理系统登陆界面”。(2)向对话框中添加3个Label控件,文本分别设置为“教学管理系统登陆界面”,“用户名”,“密码”。添加2个文本框,名称分别为“textBox1”,“textBox2”。添加2个按钮,名称分别设置为“ButtonLogin”,“ButtonCancel”。(3)用户认证的过程在“登录”按钮ButtonLogin的OnClick事件处理程序中完成,代码如下: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_userAUTHORITY=0 then begin F_main_st:=TF_main_st.Create(Self); try F_main_st.ShowModal; finally end;endelse if T_userAUTHORITY=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; 1.3.2教师课程管理界面(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_DIG_TECRMANGER,将对话框标题设置为“教师课程管理”。(2)向对话框中添加6个Label控件,文本分别设置为“申请”,“已开设课程表”,“课程名称”,“学分”,“学时”,“课程简介”。添加3个单选按钮,文本分别设置为“增开新的课程”,“删除旧的课程”,“激活已选课程”。添加2个文本框,名称分别设置为“textbox1”和“textbox2”。添加2个组合框,名称分别为“comboBox1”和“comboBox2”。最后添加2个按钮,名称分别为“提交申请”,“恢复申请”。(3)分别为各个按钮添加单击事件: a 申请界面的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;b关闭窗口时,要同时关闭整个应用程序,因此窗体OnClose事件处理程序代码如下:procedure TF_main_tc.FormClose(Sender: TObject; var Action: TCloseAction);begin F_Login.i_user.Text:=; /登录界面清空F_Login.i_passwd.Text:=;Close; /释放 end;c当修改申请的内容时,程序要根据情况决定是否显示已开课程列表。控制代码在i_state_1的OnClick事件处理程序中,代码如下:procedure TF_main_tc.i_state_1Click(Sender: TObject);begin if i_state_1.ItemIndex0 then /如果不是新开课程,则显示列表 begin T_course_1.Filter:=TEACHER=+F_Login.i_user.Text+ AND STATE5 AND STATE1; 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;d如果是删除或修改旧的课程,在单击课程列表时,将在输入框中显示课程的详细信息,代码如下:procedure TF_main_tc.o_course_1CellClick(Column: TColumn);begin if T_course_1.Active then /判断课程信息表是否激活 begin i_name_1.Text:=T_course_1NAME; /提取课程名称 i_credit_hour_1.Text:=T_course_1CREDIT_HOUR /提取课程学分 i_period_1.Text:=T_course_1PERIOD; /提取课程学时 i_intro_1.Lines.Clear; /清除简介 i_intro_1.Lines.Add(T_course_1INTRO); /提取课程简介 end;end;e表单的提交在提交按钮B_submit的OnClick事件处理程序中进行,代码如下:=2; /修改课程状态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_KCOUNTER_VALUE; /获取计数值 inc(counter); /增加计数值 T_counter_K.Edit; /修改计数器 T_counter_KCOUNTER_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_1STATE:=1; /改变课程状态 T_course_1.Post; /提交修改 end; 2: /2:申请修改 begin T_course_1.Filtered:=False; T_course_1.Edit; /进行修改 T_course_1NAME:=i_name_1.Text; /修改课程名称 T_course_1CREDIT_HOUR:=i_credit_hour_1.Value; /修改课程学分 T_course_1PERIOD:=i_period_1.Value; /修改课程学时 T_course_1INTRO:=i_intro_1.Lines.Text; /修改课程信息 T_course_1STATE: T_course_1.Post; /提交 end; end; B_resetClick(nil); /恢复表单end;f在界面初始化的时候,需要列出可选的课程列表。TabSheet2的OnShow事件处理代码如下: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;g当单击课程列表时,显示相应课程的学生名单和成绩单输入表。程序代码在o_course_2的OnCellClick事件处理中:procedure TF_main_tc.o_course_2CellClick(Column: TColumn);begin Q_students.Close; /关闭查询 Q_students.Params.ParamValuesCOURSE:=T_course_1ID; /设置课程参数 Q_students.Open; /重新打开查询end;1.3.3教务处管理界面(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_DIG_EXEMANGER,将对话框的标题设置为“教务处管理”。(2)向对话框中添加6个Label控件,名称分别为“名称”,“教师”,“学时”,“学分”,“简介”,“申请项目”。添加4个文本框,名称分别为“textbox1”,“textbox2”,“textbox3”和“textbox4”。添加3个单选框,名称分别为“申请增加课程”,“申请删除课程”和“申请修改课程”。添加2个按钮,名称分别为“通过申请”和“拒绝请求”。(3)为各个按钮添加单击事件:a界面初始化工作在TabSheet1的OnShow事件处理程序中完成,代码如下:procedure TF_main_jwc.TabSheet1Show(Sender: TObject); /界面初始化begin /打开申请课程列表 T_course_apply.Open; /打开教师信息表 T_teacher.Open;end;b“通过审批”按钮的代码如下: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_applyID+); Q_update.ExecSQL; T_course_apply.Refresh;end;c“拒绝请求”的按钮代码如下: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_applyID+); Q_update.ExecSQL; /执行 T_course_apply.Refresh; /刷新end;d界面初始化工作在TabSheet2的OnShow事件处理程序中,代码如下: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;e“提交分配”的处理程序如下: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_activedID+); ExecSQL; /执行 end; TabSheet2Show(nil); i_classroom.Text:=; i_time.Text:=;end;f“取消当前分配记录”的代码如下: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_activedID+); ExecSQL; end; TabSheet2Show(nil);end;g“清除所有旧的分配”的代码如下: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;h选课结果布局初始化工作在TabSheet3的OnShow事件处理程序中完成: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_FCOUNTER_VALUE; /获取计数值 T_course_select.First; /跳转至已选课程列表的第一行 while not T_course_select.Eof do /依次对所有记录进行操作 begin inc(counter); /增加计数器值 T_score.AppendRecord(counter, T_course_selectSTUDENT,T_course_selectCOURSE, 0); /转移记录 T_course_select.Delete; /删除旧记录 end; T_counter_F.Edit; /编辑计数器 T_counter_FCOUNTER_VALUE:=counter; /设置计数值 T_counter_F.Post; /提交修改end;i在输入课程编号后,单击“查询”按钮进行课程成绩单查询过程,代码如下:procedure TF_main_jwc.B_queryClick(Sender: TObject); /课程成绩单查询beginT_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.Params0.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_infoCOUNT; /显示学生总人数 o_score_max.Text:=Q_infoMAX; /最高成绩 o_score_avg.Text:=Q_infoAVG; /平均成绩 o_score_min.Text:=Q_infoMIN; /最低成绩 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 SCORE60); /统计不合格的人数 Q_info.Open; o_num_failed.Text:=Q_infoCOUNT; /显示不及格人数 end else Application.MessageBox(请确认课程编号,错误的编号,MB_OK);end;j中断程序退出,代码如下:procedure TF_main_jwc.FormClose(Sender: TObject; var Action: TCloseAction); beginF_Login.i_user.Text:=; /登录界面清空 F_Login.i_passwd.Text:=; Close; /释放 end;1.3.4学生选课管理界面(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_DIG_STUOMANGER,将对话框标题设置为“学生选课管理”。(2)向对话框添加13个Label控件,名称分别为“选课”,“查询成绩”,“课程编号”“课程信息”,“名称”,“教师”,“学时”,“学分”,“上课地点”,“上课时间”,“简介”,“总学分”和“已选课程”。添加9个文本框,名称分别为“textbox1”,“textbox2”,“textbox3”,“textbox4”,“textbox5”,“textbox6”,“textbox7”,“textbox8”和“textbox9”。添加2个按钮,分别为“添加”和“删除”。(3)各个按钮及控件的单击事件时间如下:a退出时清空已选课程,代码如下: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;b在TabSheet1中OnShow事件处理程序中进行初始化,代码如下:procedure TF_main_st.TabSheet1Show(Sender: TObject); /初始化begin Q_course_selected.Close; /关闭已选课程表 Q_course_selected.Params0.AsStr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论