---文档均为word文档,下载后可直接编辑使用亦可打印---
前 言
学生管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件学籍,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
本系统全面、真实地记录学生在校就读期间的各方面表现,使学生管理工作负责人、辅导员、班主任、学生家长能及时、全面地了解学生的成长轨迹;建立一个与学生互动的信息平台,以了解学生的需求、意见,有效地指导学生;相关企业可以发布信息,为相关企业提供了毕业生的信息查询。本系统还便于学院学生管理信息化。
第一章 系统概述
1.1 开发背景
1.1.1 发展趋势
现代教育技术特别是网络与多媒体技术的发展,对学习活动产生了具有深远意义的冲击,网络中的学习者必须是一个主动行为的主体,人们可以选择或者设计适合其学习特点的信息采集、加工与重组方式,一种个性化的学习类型。该学籍管理系统采用多层架构的系统,是真正适应教育信息化发展三大趋势的校园网络应用系统,全面支持Internet功能、远程访问功能,全部采用最先进的B/S(浏览器/服务器) 模式来开发,支持有关学校信息交流、日常教学、教务管理等的各种应用,提供了一个基于校园内联网中支持各种类型的学校应用产品的服务平台和开发平台,基本目标是在学校内部和外部建立起顺畅的信息通道,让信息技术成为推动教育生产力的有力工具,提高学校的管理水平和效率,同时充分利用全球的教育资源为学校的教育服务,克服了目前大部分学校的校园网建设只起到宣传作用的通病。
1.1.2 学籍管理系统的意义
本系统全面、真实地记录学生在校就读期间的各方面表现,使学生管理工作负责人、辅导员、班主任、学生家长能及时、全面地了解学生的成长轨迹;建立一个与学生互动的信息平台(Email形式),以了解学生的需求、意见,有效地指导学生;相关企业可以发布信息,为相关企业提供了毕业生的信息查询。本系统还便于学院学生管理信息化。
通过本项目,使学生掌握Web项目的开发过程,基础知识和规范标准,通过实践让学生熟练掌握Web开发方法与Web编程技巧,让学生熟练使用网页编程语言进行程序设计,从而增强学生就业的岗位竞争力。
学生通过设计和实现本项目,主要的意义表现在三个方面。其一,可以熟练掌握网页开发技术。其二,通过项目训练网页编程技能,增强学生从业时的岗位竞争力。其三,是为从网页开发的学生的工作实践奠定基础。
第二章 系统开发技术介绍
2.1 .NET技术
.NET是一个透明的开发平台,它是由美国微软公司开发的一款致力于提高软件开发敏捷性和软件应用开发快速性,而且与平台没有任何关系的网络、透明开发平台。.NET包括许多迅捷有效的开发技术,而且全部基于互联网和内部网。.NET提供了一套跨语言的统一编程环境,它是一个由多种语言组件组成了一个统一的开发和执行环境。微软公司规范.NET框架的原因是为了方便各类开发人员能更快速方便的建立网页应用程序和网页服务,在因特网上的各个程序之间实现互联互通,从而达到方便沟通的目的。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行时(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP NET的面向Web的网络应用程序模板(Web Forms和Web Services)。公共语言运行时(CLR),是一个运行时环境,管理代码的执行并使开发过程变得更加简单。CLR是一种受控的执行环境,其功能通过编译器与其它工具共同展现。在CLR之上的是服务框架,它提供了一套开发人员希望在标准语言库中存在的基类库,包括集合、输入/输出、字符串及数据类。
.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。.NET就是微软的用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术。NET也可以如下来定义:.NET是微软的新一代技术平台,为敏捷商务构建互联互通的应用系统,这些系统是基于标准的,联通的,适应变化的,稳定的和高性能的。
Web Services是.NET的核心技术。
ASP 是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。 运行于 IIS 之中的程序 。ASP技术是ASP.NET的前身,虽然具有简单以及高度可定制化的能力,不过也存在大型的ASP应用程序维护难度高和直译式语言让效能受限的缺点。新技术使用Visual Basic.NET、C#、Perl与Python语言来开发,它的强大和适应性,使其运行在Web全部的平台上通用语言的基本库,可以选择一种最适合自己的语言来编写程序,或者把程序用很多种语言来写。ASP.NET一般分为两种开发语言,VB.NET和C#,C#是.NET独有的语言也更常被用到。
三层架构一般指的是界面层,业务层,数据层。界面层就是系统的操作界面,和用户直接交互的地方。业务层又称为逻辑层,简称BLL,是执行业务逻辑的地方,也就是业务规则都在这一层体现。数据层也称为数据访问层,简称DAL,这
里是直接和数据库进行交互的地方,也是整个系统里唯一允许访问数据库的地方。除此之外,还有一个业务实体层,这个层比较特殊,就是定义实体类的地方,有些人把这个层归属业务层,有些人把这个出来,变成一个公共层。
2.2 C#语言
C#是专门为.NET应用而开发出的语言,这从根本上保证了C#与.NET框架的完美结合.NET框架的各种优点在C#中表现得淋漓尽致。C#在带来对应用程序的快速开发能力的同时,并没有牺牲C与C++程序员所关心的各种特性。它忠实地继承了C和C++的优点。比C和C++易学,比C和C++开发效率高。
适合桌面和Web应用程序开发,特别是基于ASP.NET的网站开发和ADO.NET的数据库开发。
(1)简洁的语法。在缺省的情况下,C#的代码在.NET框架提供的环境下运行,不允许直接地内存操作。也没有了指针。C#只支持一个“.”每种C#操作符在.NET类库中都有了新名字。
(2)精心地面向对象设计。C#具有面向对象的语言所应有的一切特性:封装、继承与多态性。在C#的类型系统中,每种类型都可以看作一个对象。C#只允许单继承,避免了类型定义的混乱。代码将具有更好的可读性,并且减少了发生命名冲突的可能。
(3)与Web的紧密结合。程序员们能够利用他们已有的面向对象的知识与技巧开发Web服务。仅需要使用简单的C#语言结构,C#组件将能够方便地为Web服务,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。
(4)完整的安全性与错误处理。C#的设计思想消除了在软件开发中的诸多常见错误,并提供了必要且完整的安全性能。
(5)版本的处理技术。C#在软件开发的语言中,植入了版本控制功能。支持接口和接口的继承。保证了复杂的软件可以被方便地开发和升级。
(6)灵活性和兼容性。在简化语法的同时C#允许你将某些类或者类的某些方法声明为非安全的。通过对接口的继承便可解决C#不支持类的多继承的问题。
2.3 SQL2005数据库
SQL Server由Microsoft Sybase 和Ashton-Tate三家公司共同开发的一个关系数据库管理系统。SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。同时也是数据库脚本文件的扩展名。
SQL允许用户在高层数据结构上工作。也是沟通数据库服务器和客户端的重要工具,它不要求指定数据的存放方法,也不需要知道数据的具体存放方式,所以底层结构不同数据库系统也可以使用相同的SQL语言作为数据输入与管理的
接口。
SQL语言包括三种主要程序设计语言类别的语句: 数据定义语言Data Definition Language(DDL) 数据操作语言Data Manipulation Language(DML) 数据控制语言Data Controlling Language(DCL)。 SQL语言具有以下五个特点:
(1)综合统一:SQL语言数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可完成数据库生命周期中的全部活动。在关系模型中,实体和实体间的联系均用关系表示,使得数据操作符的统一,查找、插入、删除、修改等每一种操作都只需要一种操作符。
(2)高度非过程化:SQL对数据进行操作,只需提出“做什么”,不用指明“怎么做”,数据存取路径的选择以及语句的操作过程由系统自动完成。
(3)面向集合的操作方式SQL语言采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可是元组的集合。
(4)以同一种语法结构提供两种保用方式:此语法结构提供两种不同的使用方式的做法,提供了极大的灵活性与方便性。
(5)语言简捷,易学易用:SQL语言功能强,设计巧妙,完成核心功能的动词只有6个,容易学习,容易使用。
SQL语言具有以下10项功能: (1)面向数据库执行查询 (2)可在数据库中插入新的记录 (3)可从数据库删除记录 (4)可在数据库中创建新表 (5)可从数据库取回数据 (6)可更新数据库中的数据 (7)可创建新数据库
(8)可在数据库中创建存储过程 (9)可在数据库中创建视图
(10)可以设置表、存储过程和视图的权限
2.4 系统开发模式
2.4.1 C/S结构
C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,这种结构的软件适于在用户数目不多的局域网内使用。对于异地软件应用,C/S结构的软件必须在各地安装多个服务器,并在多个服务器之间进行数据同步,这样每个
数据点上的数据安全必然了整个应用的数据安全。C/S的三层模式如图3-1所示:客户端、应用服务器、数据服务器。
客户端 应用 服务器 数据 服务器
图2-1 C/S结构图
C/S架构模式能充分发挥客户端PC处理能力客户端响应速度快、应用服务器运行数据负荷较轻、数据储存管理功能较为透明的优点。但也具有只适用于局域网、客户端需要安装专用的客户端软件、维护成本高昂且投资大工作效率低、系统针对性不强变更不灵活等缺点。 2.4.2 B/S模式
B/S(浏览器/服务器模式,即Browser/Server)是随着Internet技术的兴起,对C/S结构的一种改进。在这种结构下,软件应用的业务逻辑完全在应用服务器端实现,用户表现完全在Web服务器实现,客户端只需要浏览器即可进行业务处理,是一种全新的软件系统构造技术。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN, WAN, Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。
B/S三层结构如图2-2所示。
图2-2 三层B/S结构
B/S架构软件具有的优点有:
(1)维护和升级方式简单。B/S架构的软件只需要管理服务器就行了,所有的客户端只是浏览器,根本不需要做任何的维护。
(2)应用服务器运行数据负荷较重。由于B/S架构特点,网络管理人员只需要管理服务器所以应用服务器运行数据负荷较重,一旦发生服务器“崩溃”等问题,后果不堪设想。因此,备有数据库存储服务器尤为重要。
通过对以上两种系统开发模式的比较,本系统采用B/S模式进行开发。
第三章 系统需求分析
3.1 可行性分析
3.1.1 运行环境可行性
(1)Web服务器
微软公司提供的Web服务器软件由于管理简单、易于使用而受到广大用户的欢迎。采用基于B/S模式的浏览器、服务程序中间件和数据库服务程序三层结构体系,保证了系统运行的安全、稳定和便捷。
(2)数据库
后台数据库使用SQL Server 2005。其高可用性、强大的管理工具、安全性及可伸缩性进一步增强了其功能。
(3)客户端
采用B/S结构的客户端系统可以在任何Windows系统版本的浏览器上使用。 3.1.2 技术可行性
(1)过程控制的设计思想
通过网络信息系统的运行,大大简化了部门和部门之间的接触,节省了相互之间信息沟通的时间。系统的面向对象为本部门内所有人员用户。在实施标准的过程中,通过加强执行力,使管理全过程落到实处,产生实效,充分发挥标准化在学籍管理中的引导和协调作用,从而有力地保证正常运行。
(2)采用模块化的软件设计结构
本系统根据不同层次的用户设置了不同的权限,每个权限既运行,又可以实现数据共享。采用模块化的软件设计结构方便系统升级,单独升级某个模块,并不影响其他模块的使用。
(3)全面的安全策略
本系统采用了三层的B/S安全架构,系统由表示层(用户层)、业务层(应用层)、数据库层组成,每层存在,又相互关联成一个整体,任何一层的数据泄漏不会影响整个系统的安全性。系统将用户分成三类,部门、教师和普通管理人员,分别对其设置了不同的权限,每类用户只能在其级别的管理集合中操作,不能越权使用。用户登录时进行安全验证,保障了学籍管理数据库的安全性和易用性,防止非法用户访问系统内部网页。 3.1.3 经济可行性
软件开发主要由团队完成,在很大程度上节约了成本。
3.2 需求分析
3.2.1 功能描述
系统的功能模块包括: 1、用户管理模块 (1)添加用户 (2)修改用户 (3)删除用户 (4)分配用户角色 2、学生信息管理模块
管理员可以分班级进行学生档案信息的录入、查询、修改、删除等。其他用户可以查询权限允许内的学生的档案信息。
3、日常教务管理模块
管理员可以分班级进行学生日常教务情况(如:课程出勤情况,班级活动情况,学生日常工作考核情况等)的管理:录入、修改、删除、查询、统计等。
4、学生成绩管理模块
管理员通过该模块给录入班级学生的学习成绩。其他用户可以查询权限允许内的学生的成绩。分权限对学生成绩可以修改、删除、查询、统计,报表生成及打印等。可以分班级和个人统计成绩,分析考试结果,奖学金及助学金评定等。
5、学籍处理模块
管理学生在校期间的学籍处理情况,录入、修改、删除、查询、统计。 3.2.2 数据流设计
图3-1 0层数据流图
图3-2 1层数据流图
图3-3 2层数据流图
第四章 系统设计
4.1 功能结构设计
4.1.1 系统功能结构设计
根据系统分析阶段的功能需求分析,可导出此系统按功能划分的总体框架结构如图4-1所示。
高校学生学籍管理系统用户管理学生信息管理日常教务管理成绩管理学籍处理管理用户添加用户修改用户删除权限设置档案录入档案修改档案删除档案查询学院管理班级管理其他管理成绩录入成绩查询成绩修改成绩删除学籍录入学籍修改学籍删除查询统计
图4-1 系统总体框架结构图
4.1.2 系统流程设计
管理员登陆
管理系统用户(添加,登陆表单(管理员或者普通用户身份登陆) Splash表单 重新登陆 主窗口 (系统主窗口) 返回查询信息 管理学生学籍信息(学生基本信息管理,课程管理,专业/学院管理和考试成绩管理 对学生信息进行查 找(按学号或姓名)
图4-2 系统流程图
4.1.3 基于MVC的BS模式设计
ASP.NET本身集成了很多良好的框架及层次结构,可以实现基于MVC的经典BS模式。其中的视图部分直接通过ASPX页面中的用户接口实现;控制器的实现则统一保存在.CS文件中;模型层主要实现绩效管理的业务逻辑。通过ASP.NET实现MVC的多层系统比传统ASP结构具有以下优点:视图与控制分离提高了代码的重用性,即将用户显示从动作中分离出来。为了将设计与后台具体存储数据结构无关,将数据模型从控制器中分离出来。本绩效管理系统的MVC结构是一种松耦合的,便于后期升级及功能扩展。
学籍管理系统的BS模式三层架构如图4-4所示。
用户浏览器类(classes)数据访问层WEB.NET汇编业务规则、逻辑层数据库浏览器SQL Server组件(com .dll)浏览器Web服务 图4-4 系统三层架构图
(1)Web层(View层):主要负责通过浏览器与用户进行交互,此部分包含表单及页面交互的部分页面代码。表单负责用户界面中基本信息的展示,页面代码实现基本控件事件与控制层的交互。Web层可以划分为以下几个方面:页面的布局通过页面模板进行定义;视图标签内容通过页面配置文件进行定义;页面初始化及加载由页面布局策略类实现;参数设置、校验器加载以及事件的委托通过基本配置进行初始化;表示层的脚本校验是在用户通过基本事件提交前进行处理的;验证通过后,对页面基类page_base进行定义,并将业务逻辑进行处理;页面布局策略类PageLayout,用于加载用户部件到页面,完成页面布局;动态加载检验部件通过用户部件基类User-ControlBase实现,以及实现用户部件的个性化。
(2)业务规则、逻辑层(Model层):负责身份合法性以及数据有效性等各种业务逻辑功能实现。业务处理结果通过业务处理对象进行响应并提交给指定的视图组件,业务处理对象都是由ProcessBase基类进行派生的子类,主要对业务逻辑进行封装,并交由控制层进行调用。描述客户端表单数据的属性是通过业务实体对象进行定义的。业务实体对象是由Entity-Base派生的子类对象,业务处理对象不需要request和response对象进行数据交互便可以直接对它进行读写。模型与视图之间的交互同样是通过业务实体对象进行实现。利用ASP.NET的已有特点,实现业务实体与业务处理的分离,提高了业务逻辑代码的可重用性,便于后期扩展及升级。
(3)控制层(Control层):主要实现视图层与逻辑层之间的通讯,并实现所有web应用与数据库访问之间的控制服务。本学籍系统控制层的控制器功能主要由定义的三个类实现,分别为Controller(控制器类)、HttpCapture(请求捕获者类)、以及HttpReqDispatcher(分发者类)。用户所有的请求都是通过控制器类进行的:首先请求捕获者类捕获HTTP请求并转发给控制器类;其次控制器对请求进行处理后,再把请求委托给分发者类;视图的管理和导航由分发者类分发,它提供给分发资源控制并管理通过哪个视图提供给用户。
4.2 数据库设计
4.2.1 逻辑结构设计
本系统的实体有:学生实体、用户实体、年级实体、课程实体。各个实体具体的描述E-R图如图下所示:
学生 基本信息
每个学生包括所在的班级,所学的课程和各科成绩以及其他一些基本知识。
课程 班级 成绩 教师 用户 学生
此模块中有教师和学生两个用户来实现查询功能。
课程名称 学分 课程 学时 教师 一门课程包括他的名称,有几学时,多少学分以及教师。
现在需要将上面的数据库概念结构转化为parador数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。 4.2.1 物理结构设计
在系统设计过程中,首先要建立的就是数据库。本数据库采用SQL Server 2000来构造,共使用了7个表,它们分别是用户信息表(UserInfo)、学生信息表(StuInfo)、班级信息表(Class)、专业信息表(Major)、学院信息表(Depart)、课程信息表(Lesson)、学生成绩表(Result)。 1.用户信息表(UserInfo):
字段名 UserID UserPWD UserName UserPower
2.学生信息表(StuInfo): 字段名 SID SName SGender SPlace SBirthday SMinzu SZhengzhi SDormitory SAddress SCode STel SRemark
3.班级信息表(Class): 字段名 ID
4.专业信息表(Major): 字段名 ID Name 数据类型 文本 文本 说明 号 专业名称 是否为空 Not Null Not Null 是否为关键字 Primary Key 数据类型 文本 说明 班级代码 是否为空 Not Null 是否为关键字 Primary Key 数据类型 文本 文本 文本 文本 日期/时间 文本 文本 文本 文本 文本 文本 备注 说明 学号 姓名 性别 籍贯 出生日期 民族 政治面貌 寝室号码 家庭住址 邮政编码 联系电话 备注 是否为空 Not Null Not Null Not Null Not Null Not Null Not Null Not Null Not Null Not Null Not Null Not Null Not Null 是否为关键字 Primary Key 数据类型 文本 文本 文本 文本 说明 用户名 用户密码 姓名 使用权限 是否为空 Not Null Not Null Not Null Not Null 是否为关键字 Primary Key
5.学院信息表(Depart):
字段名 ID Name
6.课程信息表(Lesson): 字段名 ID Name Time Mark
7.学生成绩表(Result): 字段名 ID Name Score Remark 数据类型 文本 文本 文本 文本 说明 学生学号 课程名称 分数 备注 是否为空 Not Null Not Null Not Null Not Null 是否为关键字 Primary Key Primary Key 数据类型 文本 文本 文本 文本 说明 课程代号 课程名称 课时 学分 是否为空 Not Null Not Null Not Null Not Null 是否为关键字 Primary Key 数据类型 文本 文本 说明 学院代号 学院名称 是否为空 Not Null Not Null 是否为关键字 Primary Key
第五章 系统实现
经过需求分析、功能模块设计之后要进入详细设计阶段,本阶段将按系统的主要模块进行论述,重在阐述具体的某项功能的实现方法或运用到的相关技术。
5.1 用户界面实现
5.1.1 登陆功能实现
因为本系统是按学籍管理的思想设计的,故而登陆部分主要完成密码校验、确定登录人角色等功能,对于密码本系统采用的是MD5算法。这里附上本程序的登陆界面,如图所示。
利用SQL语句,在数据库中查询,如果查到相应的记录,则调用登陆验证事件,用户的登陆获得通过,此时可以退出登陆窗口,并进入主窗口,同时将用户类型和用户名分别传递到主窗口的session中;如果没有相应的记录,则给出提示错误信息,提示用户重新输入。主要代码如下:
public partial class Login : System.Web.UI.Page {
protected void LoginButton_Click(object sender, EventArgs e) {
if (rbtnStudent.Checked)
{ Student student = new Student(); student.ValidStudentLogin(UserName.Text, Password.Text);
}
if (rbtnTeacher.Checked) {
Teacher teacher = new Teacher(); teacher.ValidTeacherLogin(UserName.Text,
Password.Text);
}
if (rbtnDept.Checked) {
Department department = new Department(); department.ValidDepartMentLogin(UserName.Text, Password.Text);
} }
protected void btnClose_Click(object sender, EventArgs e) {
Response.Write(\"\");
} }
5.1.2 三级主界面实现
首先判断登录用户的级别,然后根据不同的级别权限转入相应的管理主界面,主要包括部门、教师以及学生三级。
部门管理主界面如图所示。
部门管理相关代码如下所示:
using System;
using System.Collections.Generic; using System.Text; using System.Data;
using System.Data.SqlClient; using StudentManager.DBUtility; using StudentManager.IDAL; using StudentManager.Model;
#region 数据访问层
namespace StudentManager.SQLServer {
#region 部门(学院,其他部门数据访问层类体) ///
public class Department:SqlServerBaseDb,IDepartment {
#region 存储过程参数常量
private const string DP_ID = \"@Dp_id\"; private const string DP_PWD=\"@Dp_pwd\"; private const string DP_OLDPWD=\"@Dp_oldpwd\"; private const string DP_NEWPWD=\"@Dp_newpwd\"; private const string DP_RENEWPWD = \"@Dp_renewpwd\"; private const string DP_NAME=\"@Dp_name\"; private const string DP_ADDRESS=\"@Dp_address\"; private const string DP_TEL= \"@Dp_tel\"; private const string DP_REMARK= \"@Dp_remark\"; private const string CUR_DP_ID = \"@CurDp_id\";
private const string SP_ID=\"@Sp_id\"; private const string SP_NAME=\"@Sp_name\"; private const string SP_RENARK=\"@Sp_remark\"; private const string SP_GRADE=\"@Sp_grade\";
private const string OBJECT = \"@Object\"; private const string NUMBER = \"@Number\"; private const string NEWPWD = \"@Newpwd\"; private const string CL_ID = \"@Cl_id\"; private const string CB_ID = \"@Cb_id\"; #endregion
#region 验证登陆 ///
/// 部门ID /// 密码 ///
public bool ValidLogin(string dp_Id, string dp_Pwd) {
SqlParameter[] parms ={
MakeInParm(DP_ID,SqlDbType.Char,2,dp_Id), MakeInParm(DP_PWD,SqlDbType.VarChar,20,dp_Pwd) }; try {
return ExecProc(\"Valid_Dp_Login\parms) > 0 ? true : false;
} catch {
return false; } }
#endregion
#region 部门修改密码 /// /// 部门修改密码 ///
/// ID /// 原密码 /// 新密码 /// 重复密码 ///
public int ChangePwd(string dp_Id, string dp_OldPwd, string dp_NewPwd, string dp_ReNewPwd)
{
SqlParameter[] parms ={
MakeInParm(DP_ID,SqlDbType.VarChar,20,dp_Id),
MakeInParm(DP_OLDPWD,SqlDbType.VarChar,20,dp_OldPwd),
MakeInParm(DP_NEWPWD,SqlDbType.VarChar,20,dp_NewPwd),
MakeInParm(DP_RENEWPWD,SqlDbType.VarChar,20,dp_ReNewPwd)
}; try {
return ExecProc(\"Dp_ChangePwd\ } catch {
return 0; }
}
#endregion
#region 添加部门信息(包括学生信息) /// /// 添加部门信息(包括学生信息) ///
/// 部门信息 ///
public int AddDept(DepartmentInf dept) {
SqlParameter[] parms={
MakeInParm(DP_ID,SqlDbType.Char,2,dept.Dp_Id),
MakeInParm(DP_NAME,SqlDbType.VarChar,20,dept.Dp_Name),
MakeInParm(DP_PWD,SqlDbType.VarChar,20,dept.Dp_Pwd),
MakeInParm(DP_ADDRESS,SqlDbType.VarChar,30,dept.Dp_Address),
MakeInParm(DP_TEL,SqlDbType.Char,11,dept.Dp_Tel),
MakeInParm(DP_REMARK,SqlDbType.VarChar,600,dept.Dp_Remark)
}; try {
return ExecProc(\"Add_Dept\ } catch {
return 0; } }
#endregion
#region 添加专业信息 ///
/// 专业编号 /// 所属学院 /// 专业名字 /// 专业备注
/// 专业所属年级 ///
public int AddSpeciality(string sp_Id, string dp_Id, string sp_Name, string sp_Remark, string sp_Grade)
{
SqlParameter[] parms ={
MakeInParm(SP_ID,SqlDbType.Char,20,sp_Id), MakeInParm(DP_ID,SqlDbType.Char,2,dp_Id), MakeInParm(SP_NAME,SqlDbType.VarChar,40,sp_Name),
MakeInParm(SP_RENARK,SqlDbType.VarChar,600,sp_Remark),
MakeInParm(SP_GRADE,SqlDbType.Char,4,sp_Grade) }; try {
return ExecProc(\"Add_Speciality\ } catch {
return 0; } }
#endregion
#region 绑定学院 ///
///
return ExecProcDs(\"GetCollegeForBind\ }
catch {
return null; } }
#endregion
#region 绑定所有学院信息 ///
///
DataTable dtCollegeList = new DataTable(); try {
dtCollegeList null).Tables[0];
} catch {
return null; }
return dtCollegeList; }
#endregion
#region 重置密码
public int ResetPwd(string objectStr, string number, string pwd)
{
SqlParameter[] parms ={
MakeInParm(OBJECT,SqlDbType.VarChar,20,objectStr),
=
ExecProcDs(\"GetCollegeList\
MakeInParm(NUMBER,SqlDbType.VarChar,20,number), MakeInParm(NEWPWD,SqlDbType.VarChar,20,pwd) }; try {
return ExecProc(\"ReSetPwd\ } catch {
return -1; } }
#endregion
#region 删除学院部门 ///
///
public int DeleteDept(string CurDp_ID,string dp_ID) {
SqlParameter[] parms ={
MakeInParm(CUR_DP_ID,SqlDbType.Char,2,CurDp_ID), MakeInParm(DP_ID,SqlDbType.VarChar,2,dp_ID), }; try {
return ExecProc(\"Delete_College\ } catch {
return 0; } }
#endregion
#region 删除专业 ///
///
public int DeleteSP(string CurDp_ID, string sp_ID) {
SqlParameter[] parms ={
MakeInParm(CUR_DP_ID,SqlDbType.Char,2,CurDp_ID), MakeInParm(SP_ID,SqlDbType.VarChar,20,sp_ID), }; try {
return ExecProc(\"Delete_Speciality\ } catch {
return 0; } }
#endregion
#region 删除班级 ///
///
public int DeleteCL(string CurDp_ID, string cl_ID) {
SqlParameter[] parms ={
MakeInParm(CUR_DP_ID,SqlDbType.Char,2,CurDp_ID), MakeInParm(CL_ID,SqlDbType.VarChar,20,cl_ID), };
try {
return ExecProc(\"Delete_Class\ } catch {
return 0; } }
#endregion
#region 删除课程库课程 ///
///
public int DeleteCourseLib(string CurDp_ID, string cb_ID) {
SqlParameter[] parms ={
MakeInParm(CUR_DP_ID,SqlDbType.Char,2,CurDp_ID), MakeInParm(CB_ID,SqlDbType.VarChar,10,cb_ID), }; try {
return ExecProc(\"Delete_CourseLib\ } catch {
return 0; } }
#endregion
#region 显示学院详细信息 /// /// 显示学院详细信息 ///
///
public DataSet DisplayDeptDetailsInf(string CurDp_ID) {
SqlParameter[] parms ={
MakeInParm(DP_ID,SqlDbType.Char,2,CurDp_ID) }; try {
return ExecProcDs(\"DisplayDeptDetailsInf\parms); } catch {
return null; } }
#endregion }
#endregion }
#endregion
教师管理主界面如图所示:
教师管理主要代码如下所示: using System;
using System.Collections.Generic; using System.Text; using System.Data;
using System.Data.SqlClient; using StudentManager.IDAL; using StudentManager.DBUtility; using StudentManager.Model;
namespace StudentManager.SQLServer {
///
public class Teacher:SqlServerBaseDb,ITeacher {
#region 存储过程参数常量
private const string TE_ID = \"@Te_id\"; private const string TE_PWD = \"@Te_pwd\"; private const string TE_OLDPWD = \"@Te_oldpwd\"; private const string TE_NEWPWD = \"@Te_newpwd\"; private const string TE_RENEWPWD = \"@Te_renewpwd\"; private const string DP_ID=\"@Dp_id\"; private const string LG_NAME=\"@Lg_name\"; private const string ZC_NAME=\"@Zc_name\"; private const string TE_NAME=\"@Te_name\"; private const string TE_SEX=\"@Te_sex\";
private const string TE_IDENTITY=\"@Te_identity\"; private const string TE_SPECIALITY=\"@Te_speciality\"; private const string TE_ADDRESS=\"@Te_address\"; private const string TE_ZZFACE=\"@Te_zzface \"; private const string TE_MINZU=\"@Te_minzu\";
private const string TE_TEL=\"@Te_tel\";
private const string TE_BIRTIDAY=\"@Te_birthday\"; private const string TE_TEACHERTIME=\"@Te_teachtime\"; private const string TE_PROVINCE =\"@Tb_Province\"; private const string TE_REMARK=\"@Te_Remark\"; private const string DP_NAME=\"@Dp_name\";
#endregion
#region 验证登陆 ///
/// 教师ID /// 密码 ///
public bool ValidLogin(string te_Id,string te_Pwd) {
SqlParameter[] parms={
MakeInParm(TE_ID,SqlDbType.VarChar,10,te_Id), MakeInParm(TE_PWD,SqlDbType.VarChar,20,te_Pwd) }; try {
return
ExecProc(\"Valid_Te_Login\
} catch {
return false; } }
#endregion
#region 修改密码 ///
/// ID /// 原密码 /// 新密码 /// 重复密码 ///
public int ChangePwd(string te_Id, string te_OldPwd, string te_NewPwd, string te_ReNewPwd)
{
SqlParameter[] parms ={
MakeInParm(TE_ID,SqlDbType.VarChar,20,te_Id),
MakeInParm(TE_OLDPWD,SqlDbType.VarChar,20,te_OldPwd),
MakeInParm(TE_NEWPWD,SqlDbType.VarChar,20,te_NewPwd),
MakeInParm(TE_RENEWPWD,SqlDbType.VarChar,20,te_ReNewPwd)
}; try {
return ExecProc(\"Te_ChangePwd\ } catch {
return 0; } }
#endregion
#region 添加老师 /// ///
/// 老师实体 ///
public int AddTeacher(TeacherInf teacherInf) {
SqlParameter[] parms ={
MakeInParm(TE_ID,SqlDbType.VarChar,20,teacherInf.Te_Id),
MakeInParm(DP_ID,SqlDbType.Char,2,teacherInf.Dp_Id),
MakeInParm(LG_NAME,SqlDbType.VarChar,10,teacherInf.Te_Learngrade),
MakeInParm(ZC_NAME,SqlDbType.VarChar,10,teacherInf.Te_ZhiCheng),
MakeInParm(TE_NAME,SqlDbType.VarChar,10,teacherInf.Te_Name),
MakeInParm(TE_SEX,SqlDbType.Char,2,teacherInf.Te_Sex),
MakeInParm(TE_IDENTITY,SqlDbType.Char,18,teacherInf.Te_Identity),
MakeInParm(TE_SPECIALITY,SqlDbType.VarChar,20,teacherInf.Te_Speciality),
MakeInParm(TE_ADDRESS,SqlDbType.VarChar,50,teacherInf.Te_Address),
MakeInParm(TE_ZZFACE,SqlDbType.Char,20,teacherInf.Te_ZZFace),
MakeInParm(TE_MINZU,SqlDbType.Char,16,teacherInf.Te_MinZu),
MakeInParm(TE_TEL,SqlDbType.Char,11,teacherInf.Te_Tel),
MakeInParm(TE_BIRTIDAY,SqlDbType.DateTime,0,teacherInf.Te_Birthday),
MakeInParm(TE_TEACHERTIME,SqlDbType.DateTime,0,teacherInf.Te_Teachtim
e),
MakeInParm(TE_PROVINCE,SqlDbType.VarChar,16,teacherInf.Te_Province),
MakeInParm(TE_REMARK,SqlDbType.VarChar,600,teacherInf.Te_Remark)
}; try {
return ExecProc(\"AddTeacer\ } catch {
return 0; }
}
#endregion
#region 获取教师列表
public DataTable GetTeachers(string dp_name) {
SqlParameter[] parms ={
MakeInParm(DP_NAME,SqlDbType.VarChar,20,dp_name) }; try {
return ExecProcDs(\"GetTeachers\parms).Tables[0]; } catch {
return null; } }
#endregion
#region 获取教师详细信息
public DataTable DisplayTeacherDetailsInf(string te_id) {
SqlParameter[] parms ={
MakeInParm(TE_ID,SqlDbType.VarChar,10,te_id) }; try {
return parms).Tables[0];
} catch {
return null; } }
#endregion } }
学生管理主界面如图所示:
ExecProcDs(\"GetTeacherInf\
主要代码如下:
5.2 详细功能实现
5.2.1 学生信息添加
在Textbox中输入了相应的数据以后,按添加按钮则调用该按钮的Click事件,代码如下
当单击“添加”按钮时,首先检查输入的基本信息是否满足要求,如果满足要求,则检查用户名是否有重复,需要打开系统信息表,如果当前记录不为空,则逐条记录检查是否有重复;如果有重复,则提示已存在这个用户,然后将焦点设置给Text1,并将所有的文本框清空。如果以上全部正确无误的设置好了,则将新用户的信息添加到数据表中,并提示“添加新用户成功”。主要代入如下所示:
public partial class Department_AddStudent : System.Web.UI.Page {
private Department dept = new Department(); private Speciality speciality = new Speciality(); private Student student = new Student(); private StuClass studentClass = new StuClass(); private Common common = new Common(); private string collegeSelect =\"\"; private int collegeSelectIndex = 0; private int specialitySelectIndex = 0; private string specialitySelect = \"\"; private DateTime birthday; #endregion
protected void Page_Load(object sender, EventArgs e) {
dept.BindCollegeForDll(ddlCollegeList);
ddlCollegeList.SelectedIndex = collegeSelectIndex; speciality.BindSpecialityList(collegeSelect,
ddlSpeciality);
ddlSpeciality.SelectedIndex = specialitySelectIndex; studentClass.BindClassList(specialitySelect, ddlClass); if (!Page.IsPostBack) {
common.BindMZList(ddlMingZu); common.BindProvinceList(ddlProvince); common.BindZZList(ddlStuFace); } }
protected void txtQingshiNumber_TextChanged(object sender, EventArgs e)
{ }
protected void ddlCollegeList_DataBinding(object sender, EventArgs e)
{
collegeSelect = ddlCollegeList.SelectedValue; collegeSelectIndex = ddlCollegeList.SelectedIndex; } protected EventArgs e)
{
specialitySelect = ddlSpeciality.SelectedValue; specialitySelectIndex = ddlSpeciality.SelectedIndex; } protected { }
protected void btnAddStudent_Click(object sender, EventArgs e) { try {
birthday=Convert.ToDateTime(txtBirthday.Text);
void
ddlSpeciality_SelectedIndexChanged(object
sender, EventArgs e)
void
ddlSpeciality_DataBinding(object
sender,
StudentInf StudentInf(txtStudentNumber.Text, txtStudentName.Text, txtIdentity.Text,
studentInf
ddlSex.SelectedItem.Value,
= new
birthday,
ddlClass.SelectedValue, ddlProvince.SelectedValue, ddlMingZu.SelectedValue,
txtTel.Text,
ddlStuFace.SelectedItem.Text,
txtHomeAddress.Text, txtRemark.Text);
student.AddStudent(studentInf); } catch {
JScript.AlertAndRedirect(\"误!\
} } }
5.2.2 修改密码功能
当用户要更改密码时,单击“系统管理/修改密码”菜单,弹出如图所示界面。在编辑窗口中,单击“系统管理/修改密码”,当用户输入完毕时,单击“修改”按钮,引发Click事件。这时,先检查两次输入的密码是否一致,如果不一致,则提示用户,将焦点设置到第二个Text2控件,后面两个文本框清空,如果密码一致,则判断输入的原密码是否正确,如果正确则将新密码写入数据库,这时需要一个字符串变量表达SQL语句,一个Recordset对象变量打开系统信息数据表。然后打开数据库,并将新密码写入,提示用户密码修改成功。修改完毕后,单击“返回”退出此窗体。具体代码如下:
日
期
格
式
错
public partial class Department_PwdManager : System.Web.UI.Page {
private Department dept = new Department();
protected void Page_Load(object sender, EventArgs e) { }
protected void btnChangePwd_Click(object sender, EventArgs e) {
if (txtNewPwd.Text == txtReNewPwd.Text) {
if (ddlObject.SelectedValue == \"部门\" && HttpContext.Current.User.ToString() != \"01\")
{
lblMessage.Text = \"只有教务处才有此权利\"; } else {
dept.ReSetPwd(ddlObject.SelectedItem.Text, txtNumber.Text, txtNewPwd.Text, lblMessage);
} }
else {
lblMessage.Text = \"两次密码不一致\"; } } }
5.3 系统测试
5.3.1 测试内容
测试的主要内容有链接测试、表单测试、数据库测试、功能测试、界面测试、业务流程测试和性能测试等,测试过程中首先进行功能测试,在保证系统功能实现的情况下同时保证业务逻辑的正确性,通过多次回归测试来验证系统的功能,最后对系统的性能进行测试,主要对重点业务的并发用户和响应时间进行压力测试。本文主要对系统的功能和性能测试进行介绍。
(1)功能测试:功能测试的主要目标是验证系统功能能否符合用户需求,能否满足环境需要和管理要求。该测试侧重于所有业务功能和业务规则的测试,目标是核实数据的保存、统计、报送和查询结果是否正确,以及业务规则的实现是否恰当。该测试过程包括了公证系统的所有功能,验证了与需求的一致性、系统的稳定性、安全性和可扩展性等性能要求。
(2)性能测试:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。对系统性能评估的指标主要有两个:一个是在测试环境下,记录多用户并发时系统的表现;另一个是在大数据量条件下,测试某些功能模块的响应能力。
5.3.2 测试结果
系统涵盖了需求的全部业务功能,并进行了很好的实现,满足了房地产业务需求,功能稳定,运行效率较好;界面测试表明,系统界面友好,能够顺利与用户进行交互,并提供了完备的系统运行提示及信息提示;通过业务流程测试,完成了站内信从编辑、发送到接受的全过程,并通过了积分规则及统计数据的测试,系统能够顺利处理相关的业务,表现出了良好的效率和稳定性,满足了系统可靠性、安全性的要求。
第六章 总结与展望
通过对课题研究情况的总结,提出了需求调研方法的重要性,将对今后的工作和学习产生积极的影响。系统的研究和开发是一个团体性的成果,这里进一步明确了在研发中担任的角色和参与的工作。系统的应用和推广将是一个逐步完善的过程,本文指出了当前存在的问题和不足,提出了今后的努力方向。
1、课题总结
本文通过研究分析当前学籍信息化建设方面存在的问题, 系统的开发过程是一个发现问题与解决问题的过程,用户需求的不确定性、不稳定性给系统的开发带来了一定的难度。为了解决好需求与系统开发之间的矛盾,采用了面向对象的软件开发方法,该方法有效的解决了需求频繁变更的问题,极大的把系统设计与底层实现技术分离开来,同时增加了系统的复用性。
2、个人工作量
在课题研发过程中,本人承担的工作主要如下:
(1)完成了系统可行性研究报告的编写,参与了需求的调研和分析工作; (2)参与了系统总体框架的设计和技术选型工作; (3)完成了学籍管理系统的设计,构建了数据库;
(4)参与了系统的实现工作,完成了学籍管理系统的实现工作; 3、系统待改进之处
C#中ADO技术的综合应用是当前信息化建设的一个热点,也是相对成熟的一种应用模式,无论从技术上还是软硬件设备支持上都是成熟稳定的。本文的研发成果学籍管理系统也是基于成熟的技术、优良的软硬件设备、安全的保障体系和良好的数据存储和更新策略,同时系统具有良好的可扩展性和可靠性,加上系统试点应用证明,具备推广应用价值。下一步需要做好项目成果的产品转化工作,使得研究成果在提高学籍管理信息化水平方面起到更大的促进作用。
因此,系统的应用推广具有重要的现实意义,通过系统成果的应用推广,对解决学籍管理面临的问题,提高学籍管理的信息化建设水平,将开创一个全新时代!
参考文献
[1] 抖斗书屋编著, 《Visual Basic 6.0常用编程技巧》, 清华大学出版社, 1999年8月;
[2] (美)David Jung Pierre Boutquin John D.Conley 等编著, 《Visual Basic 6.0 开发人员参考手册》, 2000年1月;
[3] 袁鹏飞 孙军安编著,《中文版SQL Server 2000数据库系统管理》, 人民邮电出版社, 2001年5月;
[4] 李真文编著,《Visual Basic 6.0全实例教程》, 北京希望电子出版社, 2002年6月;
[5] 张海藩编著,《软件工程导论》, 清华大学出版社, 2002年1月;
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务