学生选课及信息管理系统的毕业设计
第1章 绪 论
1.1 引 言
学生选课系统是一个学校不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生选课系统应该能够为用户提供充足的信息和快捷的查询手段.但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点.如:效率低、保密性差.另外时间一长,将产生大量的文件和数据.这对于查找、更新和维护都带来了不少的困难.随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.作为计算机应用的一部分,使用计算机对选课信息进行管理,有着手工管理所无法比拟的优点,例如:检索迅速、查找方便、可靠性高、 存储量大、保密性好、寿命长、成本低等.这些优点能够极大地提高人事劳资管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件.
1.2 系统分析
1.2.1 开发背景
随着计算机技术的发展,计算机应用越来越深入到人们日常生活的每个领域.计算机管理作为其中的一个重要做成部分,也以它独特的优势,渐渐代替了原始的手工管理.学生选课信息管理作为学校管理的重要部分,由于其信息量大,给以后的查询、修改等操作带来不便,需要使用计算机来管理这些信息.学生选课系统应运而生. 1.2.2 需求分析
高校学生资料的管理使学生管理的最主要工作,由于其工作时间比较集中,工作流程复杂,信息量大,信息准确性要求高,信息更新要求快,所以系统不但需求符合高校学生管理部门的实际业务流程需要,而且需要有很好的信息可维护性、用户交互便利性、信息管理严密性、系统安全性及数据共享性.
随着科学技术的不断提高,计算机科学日渐成熟,其强大的计算机功能已经让人们深刻认识到,计算机已经进入人类社会的各个领域并发挥着越来越重要的作用.
作为计算机应用的一部份,使用计算机对选课信息进行管理,具有手工管理所无法比拟的优点.例如:查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等.这些优点能够极大地提高人事劳资管理的效率,也是学校的科学化、正规化管理与世界接轨的重要条件.因此,很有必要开发一套这样的软件.
1
江南大学学士学位论文
1.2.3 系统概要
本课题所开发的系统使用JAVA来设计开发完成前台界面,SQL Server 2005作为后台数据库支持.系统要有较高的安全性和较好的性能.管理员登陆系统后可以现实以下功能:学生的增加、删除、修改、查询,教师的增加、删除、修改、查询,课程的增加、删除、修改、查询,还可以分别通过课程和学号来进行选课以及设置教师所代课程等功能.教师登陆以后,可以查询自己所代的课程,并可以录入和删除选课的学生,录入课程成绩并进行成绩统计.学生登录以后是另外的界面,学生可以选课、查看自己的选课情况、退选课程、修改密码的操作.
实验流程包括:需求分析、感念结构设计、逻辑结构设计、物理设计、相关脚本语言的编写、功能方面的实施、维护机制等.
本系统通过图形化界面为用户提供方便快捷的学生管理系统.采用JAVA编程语言编写前台界面,使用SQL sever提供后台数据库支持.前台界面以清晰、简单的风格呈现.后台数据库设计六张表:教师信息表、学生信息表、课程信息表、选课成绩表、教师课程表、选课时间表,以此来存储整个系统的数据. 1.2.4 系统要求 1. 硬件要求:
(1) 486/DX66Mhz以上CPU
(2) 内存16M以上(使用Windows NT需要32M以上内存) (3) 硬盘容量1GB以上 (4) EGA以上分辨率的显示器. (5) 鼠标及键盘 2. 软件要求:
(1) 操作系统应使用Microsoft Windows95及以上版本,或者使用Microsoft Windows
NT3.51或者更高版本 (2) 安装JDK 1.6或更高版本 (3) 安装SQL SERVER 2005
2
第2章 应用技术介绍
2.1 数据库简介
SQL(Structured Query Language),结构化查询语言.SQL语言的主要功能就是同各种数据库建立联系,进行沟通.按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言.SQL语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等.绝大多数流行的关系型数据库管理系统都采用了SQL语 言标准.虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select、Insert、Update、Delete、 Create以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作.
2.1.1 SQL SERVER基本信息
SQL Server 是一个关系数据库管理系统.它最初是由Microsoft、 Sybase 和Ashton-Tate三家公司共同开发的,于1988 年推出了第一个OS/2 版本.在Windows NT 推出后,Microsoft与Sybase 在SQL Server 的开发上就分道扬镳了,Microsoft 将SQL Server 移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本.Sybase 则较专注于SQL Server在UNIX 操作系统上的应用. 2.1.2 SQL SERVER 2005
SQL Server 2005 是一个全面的数据库平台,使用集成的商业智能(BI)工具提供了企级的数据管理.SQL Server 2005 数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,使您可以构建和管理用于业务的高可用和高性能的数据应用程序 [8] .
SQL Server 2005 数据引擎是本企业数据管理解决方案的核心.此外 SQL Server 2005 结合了分析、报表、集成和通知功能.这使您的企业可以构建和部署经济有效的 BI 解决方案,帮助您的团队通过记分卡、Dashboard、Web services 和移动设备将数据应用推向业务的各个领域 [1] .
2.1.3 SQL SERVER 2005 的特点 1. 可编程性
CLR(Common Language Runtime,公共语言运行时)集成.CLR集成是指你可以使用任何一种.NET 语言编写SQL Server 2005 的存储过程,触发器,函数,自定义类型,甚至是自定义的聚合函数.想想以前的扩展存储过程,编程非常不容易.代码中一不小心就会引起内存泄漏. 2. 安全性
SQL Server 2005 的安全达到了很强大水平,有着很更清晰的安全模型即主体,安全对象和权限 [7] .
3
江南大学学士学位论文
3. 异步处理能力
Service Broker提供了一个功能强大的异步编程模型.Broker的最大好处一是异步执行能力,提高了可伸缩性,二是可靠执行,三是集成于数据库中,备份数据库就备份了broker 的消息队列.
4. 支持通过HTTP SOAP协议直接访问数据库
增加XML数据类型,支持Xquery,使用新的SQL ServerManagement Studio 等等 [4] . 以前都是大项目用ORACLE或者DB2,因为只有ORACLE和DB2能胜任,现在情况有些变化了.不少在Windows构架下的大项目还是倾向于用SQL的,像镜像,高可用性,页面级的恢复,联机索引,多CPU支持等高级特性,SQL也不比ORACLE差. 2.1.4 SQL SERVER 2005对比其他数据库的优势
目前市场上除了SQL SERVER以外还有很多数据库,比如DB2、Oracle等,但是经过各种对比,最终还是选择了SQL SERVER.
首先,SQL Server 2005 已经证明能满足客户的高可用性要求,而且提供此功能的成本要比 Oracle 10g 低很多.SQL Server 2005 在 SQL Server 2005 Standard Edition 和 SQL Server 2005 Enterprise Edition 中均提供了所有主要的高可用性功能,如 Microsoft Clustering Services 支持、Database Mirroring、数据库快照、日志传送和复制等,无需额外的资金投入.SQL Server 2005 Enterprise Edition 还通过对多个服务器间的数据进行分区提供了提高可用性的能力.在 Oracle 10g 中增加此功能需要购买 Oracle Partitioning 产品.高可用性并不需要同样的高成本,SQL Server 2005 以比 Oracle 10g 低很多的价格满足客户的高可用性要求.
其次,SQL Server 2005集成.NET运行库时采用的“进程内”模型与“进程外”模型相比有一些非常明显的优势.举个例子,考虑一个负担沉重的数据库实例,要响应许多并发的请求,这一情况已经持续了很长一段时间.SQL Server能自动和智能地在数据存储和程序逻辑(例如,.NET存储过程)之间平衡内存的分配.当系统的负担有了一些性质上的变化——例如,相对较多的 请求利用了较多的程序逻辑——SQL Server会再次自动地进行调整.这样,系统的性能会根据满足实际需求的伸缩性和可靠性进行不断的优化.因为DB2 UDB v8.2采用“进程外”的模型集成.NET运行库,所以DB2不能提供这种类型的机器资源动态平衡和性能优化 [10] .
综合以上SQL SERVER的特点以及对比其他数据库的优点,最终决定采用SQL SERVER数据库来作为后台数据库支持.
2.2 开发平台和开发工具
2.2.1 开发平台的选择
考虑到本系统的性能要求,和现有的条件,我们选择了WINDOWS 7版作为开发、测试和运行的平台.因为WINDOWS操作系统是目前应用最广的操作系统,它以全新的图形界面,简单快捷的操作方式,支持多媒体功能等特点而成为软件发展的流行趋势,选用它作为开发平台,易于功能的扩展和软件升级.
4
2.2.2 JAVA简介
Java,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称.用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态的Web、Internet计算.从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet [5] . 2.2.3 JAVA语言的特点 1. 简单的
Java语言的语法与C语言和C++语言很接近,但是Java丢弃了C++ 中如操作符重载、多继承、自动的强制类型转换等特性.特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧. 2. 面向对象的
Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制. 3. 健壮的
Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证.对指针的丢弃是Java的明智选择.Java的安全检查机制使得Java更具健壮性 [2] . 4. 安全的
Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击. 5. 可移植的
这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度.Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的. 6. 解释型的
如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行.在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中. 7. 高性能的
与那些解释型的高级脚本语言相比,Java的确是高性能的 [6] . 2.2.4 选择JAVA的原因
实际上,Java确实是从C语言和C++语言继承了许多成份,甚至可以将Java看成是类C语言发展和衍生的产物.尽管如此,Java和C语言、C++语言又有许多差别,主要表现在如下几个方面:
1. Java中对内存的分配是动态的.它采用面向对象的机制,采用运算符new为每个对象分配内存空间.而且,实际内存还会随程序运行情况而改变.程序运行中,Java系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集,使得系统资源得到更充分地利用.
5
江南大学学士学位论文
2. 3. 4. 5.
Java不在所有类之外定义全局变量,而是在某个类中定义一种公用静态的变量来Java不用goto语句,而是用try-catch-finally异常处理语句来代替goto语句处理出Java对每种数据类型都分配固定长度.比如,在Java中,int类型总是32位的.而类型转换不同.在C和C++中,可通过指针进行任意的类型转换,常常带来不安
完成全局变量的功能. 错的功能 [9] .
在C和C++中,对于不同的平台,同一个数据类型分配不同的字节数.
全性.而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换. 6.
Java不再使用指针.指针是C和C++中最灵活,也最容易产生错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性.而Java对指针进行完全地控制,程序员不能直接进行任何指针操作 [3] . 7.
综合以上JAVA语言的特点,以及JAVA和C/C++的对比,为了可以更灵活、更安全的实现整个系统,最终决定选择JAVA语言来开发.
6
第3章 系统的规划与分析
3.1 系统的可行性分析
3.1.1 经济可行性分析
由于本系统是一个基于Java的应用,后台采用SQL SERVER数据库,只要安装JAVA虚拟机和SQL SERVER 即可使用本系统,系统成本主要集中在系统软件的开发上,当系统投入运行后可以为学校节约大量的人力、物力.所带来的效益远远大于系统软件的开发成本.在经济上完全可行. 3.1.2 操作可行性分析
界面设计时充分考虑管理人员的习惯,使得操作简单,数据录入迅速、规范、可靠,统计准确,适应力强,容易扩充. 3.1.3 技术可行性分析
本系统仅需要一台装有 Windows 系统并装有 SQL SERVER数据库和JAVA虚拟机的计算机即可,对机器本身没有太高的要求,一般当前学校或个人电脑完全可满足要求.对于软件技术要求,现在的JAVA程序设计语言已非常成熟,本系统前台采用基于C/S 架构的Java开发,页面采用Java常用的BorderLayout、GridLayout等布局.后台采用SQL SERVER语句来实现与数据库的数据交换.
3.2 系统功能分析
在实际开发中,系统功能分析需要开发小组的系统设计人员与用户进行全面,深入的交流,以切实了解用户对整个系统期望具有的功能,并分析用户行业营运特点,决定系统具有哪些功能.
本系统中的学生选课管理系统主要具有以下功能: 1. 登陆界面:
(1) 注册:新用户注册,包括教师和学生的注册,教师注册的时候需要管理员给的安全码.
(2) 忘记密码:教师或学生可以使用自己的安全码修改登录密码. (3) 登陆:输入用户名和密码,并选择登陆类型之后可以登录到系统. 2. 管理员系统:
(1) 学生信息管理:增加学生信息,修改学生信息,删除学生信息.
(2) 教师信息管理:增加教师信息,修改教师信息,删除教师信息,设置教师注册时的验证码.
(3) 课程信息管理:增加课程信息,修改课程信息,删除课程信息,设置教师和学生的选课时间,设置学生选课的学分限制.
(4) 选课信息管理:增加选课信息,修改选课信息,删除选课信息.
(5) 信息查询:按条件查看学生信息、按课号或课名查看课程信息、查看选课信息. (6) 教师信息查询:查看教师所代的课程、添加教师代课信息.
7
江南大学学士学位论文
3. 教师系统:
(1) 我的课程:查看老师所代的课程,并可以查看某课程有哪些同学选了. (2) 学生管理:添加或删除学生的选课信息.
(3) 成绩管理:添加和修改学生的成绩,对各门课程做成绩统计. (4) 添加课程:由老师来选择代哪门课程,选课有时间的限制.
(5) 修改密码或安全码:修改教师登陆密码或者修改密码时用的安全码. 4. 学生系统:
(1) 选课:学生可以查看所有的课程,点击课程之后可以查看任课教师的信息和课
程信息,并可以在这里输入教师号和课程号来选课.
(2) 我的课程:学生可以查看自己已选的课程,并可以输入课程号来退选. (3) 修改密码或安全码:修改学生登陆密码或者修改密码时用的安全码.
3.3 系统模块设计
根据对系统功能分析,经过模块化的分析得到如图所示的学生选课管理系统各个功能模块结构图.
1. 用户登录模块包括新用户注册、修改登录密码以及输入信息登陆系统的功能.如图3-1,是系统的登陆界面模块结构图.
用户登录 模块
新用户 注册
修改 登录密码
输入信息登录
系统
教师用户 注册
学生用户 注册
教师密码 修改
学生密码 修改
图3-1 登陆系统模块图
2. 管理员系统包括对学生信息、教师信息、课程信息以及选课信息的管理,比如添加、修改、查询等功能,以及其他一些系统设置,比如选课时间和学分的设置.如图3-2,是管理员管理系统的各功能模块图.
8
管理员系统
学生信息管理 教师信息管理 课程信息管理 选课信息管理 信息查询管理 添加修改删除添加修改删除添加修改删除添加修改删除修改修改学生课程选课教师学生学生学生教师教师教师课程课程课程选课选课选课选课学分信息信息信息信息信息 信息 信息 信息 信息 信息 信息 信息 信息 信息 信息 信息 时间 限制 查询 查询 查询 查询
图3-2 管理员系统模块图
3. 教师系统包括教师对自己课程的查看,管理选课学生,添加并管理所带课程的成绩,修改个人简介和所代课程简介,以及修改密码等功能.如图3-3,是教师管理的各功能模块图.
教师系统模块
我的 课程
学生 管理
成绩 管理
修改密码和安全码
退出 系统
查看所代课程
查看选课学生名单
添加选课学生
删除选课学生
成绩 录入
修改 成绩
按条件统计成绩
图3- 3 教师管理模块图
4. 学生系统包括查看课程并选课,查看已选的课程并退选,以及修改密码等功能.如图3-4,是学生系统的各功能模块图.
9
江南大学学士学位论文
学生系统 模块 选课 我的 选课 修改密码和 安全码 退出 系统 查看所 有课程 输入信息 选课 查看已 选课程 输入信息 退选 图3-4 学生管理模块图
3.4 开发与运行环境的选择
开发与运行环境的选择会影响到数据库设计,本系统采用的是SQL SERVER 2005作为数据库管理系统,所以也采用了对该数据库支持最好的windows系统作为运行环境.另外,系统采用Java做前台界面,在系统中要安装JDK编译环境和Java虚拟机来运行本系统.
3.5 系统实现过程分析
在实现过程中,首先需要根据对系统功能的分析设计出需要的数据库,包括各个数据表和数据表关系图的详细结构.
在实现各个功能模块时,先将系统每个模块做成一个类,然后将不同的模块包含在不同的包下来区分.各个模块之间可以相互调用,来完成整个系统的实现.
在访问数据库时,采用了JAVA连接数据库的函数来实现与数据库的信息交换.用实体类来存放从数据库中取出来的数据,可以方便的读取.这里附上连接数据库的函数方法.
public static Connection CONN() {
String driverName = \"com.microsoft.sqlserver.jdbc.SQLServerDriver\"; String dbURL = \"jdbc:sqlserver://localhost:1433; DatabaseName=student\"; String userName = \"sa\"; String userPwd = \"sa\"; Connection dbConn = null; try {Class.forName(driverName); }
10
dbConn = DriverManager.getConnection(dbURL, userName, userPwd); System.out.println(\"Connection Successful!\"); } catch (Exception e) {
e.printStackTrace();} return dbConn;
3.6 数据库设计
系统设计是对整个管理系统功能进行分析,并划分和构建系统功能模块,而数据库设计则是分析和创建系统数据库,两者对整个系统的开发具有同等重要的关键作用.根据学习到的知识,将数据库的设计总结为两个步骤:绘制系统数据流图和数据库结构设计. 3.6.1 绘制系统数据流图
绘制系统数据流图.系统数据流图根据用户日常工作流程,绘制出系统的各个操作节点,对每一个操作节点,绘制出与该操作关联的数据.然后根据数据流图分析总结出系统数据字典.即总结出系统管理流程只用到的各个数据以及包含的数据项.系统数据流图如图3-5所示.
学生选课系统
学生信教师信课程信选课信新用户注册
登录 系统
修改 密码
息管理 息管理 息管理 息管理 学生信息表
教师信息表
课程信息表
选课信息表
学生信息表
教师信息表
学生信息表
教师信息表
学生信息表
教师信息表
图3-5 学生选课系统数据流图
1. 系统用户数据:包括的数据项有用户名,密码,用户ID,姓名.
2. 教师信息数据:包括的数据项有教师号,教师姓名,登录密码,安全码,职称和简介. 3. 学生信息数据:包括的数据项有学号,学生姓名,所在学院,班级,登录密码,安全
码.
4. 课程信息数据:包括的数据项有课程号,课程名,学分,允许选课人数,课程介绍. 5. 选课信息数据:包括的数据项有课号,教师号,学号,学生成绩,选课信息表分为学
生选课信息表和教师选课信息表.
6. 另外,根据系统要求,还要一个数据库表来存放选课时间和教师注册验证码的信息. 3.6.2 数据库结构设计
设计数据库结构.根据第一步得到的数据字典,为数据库规划需要的数据表,并设计每个数据表的结构.
按照学生选课管理系统数据字典,设计出学生选课管理系统数据库中各种数据表,包括系统系统用户表,学生信息表,教师信息表,课程信息表,学生选课表,教师选课表,选课时间表7个表.
数据库中的各个数据表名称和结构分别如下所示.
11
江南大学学士学位论文
1. 系统用户表.系统用户数据表用于保存系统管理员的帐户信息,包括编号,用户名,登录密码和姓名,数据表命名为“admin”,表结构如图3-6所示.
图3-6 系统用户数据表
2. 教师信息数据表.教师信息表用来存放教师的基本信息,包括教师编号,教师姓名,登录密码,安全码,教师职称和教师简介.数据表命名为“teacher”,表结构如图3-7所示.教师号作为主关键字.
图3-7 教师信息数据表
3. 学生信息数据表.学生信息表用来存放学生的基本信息,包括学号,学生姓名,所在院系,所在班级,登录密码和安全码.数据表命名为“S”,表结构如图3-8所示.学号作为主关键字.
图3-8 学生信息数据表
4. 课程信息数据表.课程信息表用来存放课程的基本信息,包括课程编号,课程名,学分,允许选课的人数以及课程简介.数据表命名为“C”,表结构如图3-9所示.课程号作为主关键字.
图3-9 课程信息数据表
12
5. 学生选课信息表.学生选课表用来存放学生选课的相关信息,包括课程号,学号,课程成绩,教师编号.数据表命名为“SC”,表结构入图3-10所示.由于每门课程可能由多个教师来教,所以要在该表添加教师编号一列来区分学生选了哪位教师的课.
图3-10 学生选课信息数据表
6. 教师选课信息表.教师选课表用来存放教师所代课程的相关信息,包括课程号和教师编号.数据表命名为“TC”,表结构入图3-11所示.
图3-11 教师选课信息数据表
7. 选课时间表.选课时间表用来存放管理员设置的教师和学生选课的时间.为了节省资源,在此表内添加了两列来存放教师注册时的验证码和允许学生选课的最多学分.数据表命名为“time”,表结构入图3-12所示.
图3-12 选课时间数据表
8. 数据表关系图.数据的完整性对于一个数据库而言非常重要,比如,如果删除了某个教师的信息之后,那么该教师所代的课程,以及选过该教师所代课程的学生选课信息都要随之删除,否则以后在查询或修改的时候都会出现错误.通过创建教师表和教师选课表、学生选课表之间的关联,就可以实现信息的自动删除.数据库表关系图如图3-13所示.
13
江南大学学士学位论文
图3-13 表关系图
14
第4章 系统应用程序设计与实现
4.1用户登录模块的实现
4.1.1 注册新用户功能的实现 1.创建数据环境变量.
在注册新用户时,需要验证新用户提供的注册ID是否已经被注册,所以要判断用户的ID是否已经存在于数据库当中.通过使用SQL语句和ResultSet来判断.另外,院系、班级以及教师的职称是不能乱填的,要从数据库中取出已经设置好的由用户来选择,这里用到Choice组件来实现.另外,教师注册界面有“验证码”一栏,要求教师输入管理员设置好的验证码才能注册.这是为了防止非教师人员注册.附上验证学号的代码,其他代码见附录:
String sql = \"select Sno from S where Sno='\" + jt1.getText() + \"'\"; ResultSet rs = stmt.executeQuery(sql1);// 判断注册学号是否已经存在
if (rs.next()) {
JOptionPane.showMessageDialog(this, \"该学号已经被注册!\"); jt1.setText(\"\");}
2.创建注册用户窗体.
定义好界面中使用的各个控件之后,使用GridLayout布局将控件添加到界面当中.用户输入相关信息之后,点击注册即可.如图4-1和4-2分别是学生和教师的注册界面.
图4-1 学生注册界面 图4-2 教师注册界面
4.1.2 使用安全码修改密码的实现
用户平时可能会忘记自己的登录密码,这时在登陆界面点击“忘记密码?”按钮即可使用之前自己设置好的安全码来修改自己的登陆密码.
15
江南大学学士学位论文
1.创建数据环境变量.
因为用户有教师和学生两种,所以定义了两个安全码和密码项,根据不同的用户,分别从数据库中取出相应的安全码来验证是否输入正确.这里附上获取学生安全码的代码,其他代码见附录.
sql = \"select safe from S where Sno = '\" + jt1.getText() + \"'\"; ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
safe = rs.getString(\"safe\");}
2.创建修改密码窗体.
不同的用户要分开修改密码,所以定义了一个JTabbedPane选项卡.然后分别做好教师和学生的修改密码界面,分别放在JTabbedPane的选项卡里面.只要输入编号和正确的验证码,就可以重新设置密码.如图4-3和4-4所示,分别是学生和教师修改密码的界面.
图4-3 学生修改密码界面 图4-4 教师修改密码界面 4.1.3 用户登录系统的实现 1.创建数据环境变量.
定义了两个JTextField来记录用户名和密码,并使用用户名从数据库中取出相应的密码,判断是否正确.另外,定义了一个CheckboxGroup,用来存放三个不同的登录类型:管理员,教师和学生.附上CheckboxGroup的代码.
CheckboxGroup cg=new CheckboxGroup();
Checkbox r1=new Checkbox(\"管理员\ Checkbox r2=new Checkbox(\"教师\Checkbox r3=new Checkbox(\"学生\
2.创建用户登录窗体.
用户输入用户名和密码,并选择登陆类型,点击登录即可进入系统.如图4-5所示.
图4-5 用户登录窗体
16
4.2 管理员系统的实现
4.2.1 学生信息管理的实现
学生信息管理包括学生信息的录入,修改和删除. 1.创建数据环境变量.
学生信息包括学号、姓名、所在院系和班级、登录密码和安全码.需要从数据库访问S表来读取这些数据.另外,在录入学生信息时,院系和班级是已经设置好的,不能随便填写,所以使用了两个Choice下拉列表来存放信息,并实现简单的二级联动.附上部分联动代码.
public void itemStateChanged(ItemEvent e) {
if (e.getItem().equals(\"物联网工程学院\")) {
c2.removeAll(); c2.addItem(\"请选择\"); c2.addItem(\"计科0701\"); c2.addItem(\"计科0702\");}}
2.设计学生信息管理窗体.
学生信息管理分为学生信息的添加、修改和删除.添加信息时,要输入完整的学生信息才能录入,否则会有系统提示.如图4-6所示,是添加学生信息的界面.
4-6 添加学生信息界面
修改信息时,先输入学号查询出要修改的学生信息,修改后点击“修改”提交即可.如图4-7所示,是修改学生信息的界面.
4-7 修改学生信息界面
17
江南大学学士学位论文
删除时也要先输入学号查询出要删除的学生的信息,然后点删除,否则会有系统提示.如图4-8所示,是删除学生信息的界面.
图4-8 删除学生信息界面
4.2.2 教师信息管理的实现
教师信息管理包括教师信息的添加,修改和删除以及修改教师注册时的安全码. 1.创建数据变量
教师信息包括教师号、教师姓名、教师职称和简介、登录密码和安全码.需要从数据库访问teacher表来读取这些数据.还需要访问time表来读取教师注册时的验证码.教师职称是系统设定好的几个职称,这里同样使用了Choice下拉列表来存放教师职称信息. 2.设计教师信息管理窗体.
添加信息时,要输入完整的教师信息才能录入,否则会有系统提示.如图4-9所示,是添加教师信息的界面.
图4-9 添加教师信息界面
修改信息时,先输入教师号查询出要修改的教师信息,修改后点击“修改”按钮提交即可.如图4-10所示,是修改教师信息的界面.
图4-10 修改教师信息界面
18
删除教师信息时也要先输入教师号查询要删除的教师信息,然后点删除才可以删除教师的信息.如图4-11所示,是删除教师信息的界面.
图4-11 删除教师信息界面
为了防止学生在注册界面注册教师信息,所以添加了教师注册验证码,输入新的验证码以后点击“提交”即可.如图4-12所示,是修改教师注册验证码界面.
图4-12 修改教师注册验证码界面
4.2.3 课程信息管理的实现
课程信息管理包括课程信息的添加,修改和删除. 1.创建数据变量
课程信息包括课程号,课程名,课程简介,学分,允许选课的总人数.需要从数据库访问C表来读取这些数据. 2.设计课程信息管理窗体.
课程信息管理分为课程信息的添加、修改,删除.添加信息时,要输入完整的课程信息才能录入,否则会有系统提示.如图4-13所示,是添加课程信息的界面.
图4-13 添加课程信息界面
19
江南大学学士学位论文
修改信息时,先输入课程号查询出要修改的课程信息,修改后提交即可.如图4-14所示,是修改课程信息界面.
图4-14 修改课程信息界面
删除时也要先输入课程号查询要删除的课程信息,然后点删除.在删除课程信息时,同时会将学生和教师相关的选课信息删除掉.如图4-15所示,是删除课程信息界面.
图4-15 删除课程信息界面
4.2.4 选课信息管理的实现
选课信息管理包括选课信息的添加,修改和删除,设置教师和学生选课时间,以及设置学生选课的总学分. 1.创建数据变量
选课信息包括课程号,学号,课程简介,学分,允许选课的总人数.需要从数据库访问SC表来读取这些数据.还需要访问time表来读取教师和学生的选课时间.在设置选课时间时,有时间判断的功能,即结束时间要晚于开始时间.设置时间时,使用Choice下拉表来选择时间,并实现联动.附上时间判断代码.
SimpleDateFormat myTime = new SimpleDateFormat(\"yyyy年MM月dd日\"); DateFormat df = new SimpleDateFormat(\"yyyy-MM-dd\"); dateStart = rs.getDate(\"start\"); dateEnd = rs.getDate(\"ends\"); Date dt1 = df.parse(newStart); Date dt2 = df.parse(newEnd); if (dt1.getTime() > dt2.getTime()) {
JOptionPane.showMessageDialog(this, \"结束时间要晚于开始时间!\");}
20
2.设计课程信息管理窗体.
课程信息管理分为课程信息的添加、修改,删除,设置教师和学生的选课时间,以及设置学生选课的总学分.添加信息时,要输入完整的选课信息才能录入,否则会有系统提示.如图4-16所示,是添加选课信息的界面.
图4-16 添加选课界面
修改信息时,先输入课程号和学号查询出要修改的选课信息,修改后提交即可.如图4-17所示,是修改选课信息的界面.
图4-17 修改选课信息界面
删除时也要先输入课程号和学号查询要删除的选课信息,然后点删除.如图4-18所示,是删除选课信息的界面.
图4-18 删除选课信息界面
21
江南大学学士学位论文
教师选择自己所代课程的时间是有限制的,由管理员来设置.如图4-19所示,是修改教师选课时间界面.
图4-19 设置教师选课时间界面
学生选课时间也是有限制的,由管理员来设置学生选课的时间,只有在选课时间内,学生才能选课和推选.如图4-20所示,是修改学生选课时间界面.
图4-20 设置学生选课时间界面
学生选课时的学分是有上限的,由管理员来设置.如图4-21所示,是修改允许学生选课总学分界面.
图4-21 设置学生选课总学分界面
4.2.5 信息查询的实现 1.创建数据环境命令.
信息查询包括查询学生信息,课程信息,学生选课信息,教师选课信息.每次的查询都是使用SQL语句连接数据库读取数据并返回到Table表中显示.
22
2.信息查询窗体.
这里把学生信息,课程信息,学生选课信息的查询做到一个窗口里,方便操作.系统提供了多种查询方法,可以按条件来筛选.另外,如果不输入任何信息,则查询这方面的所有信息.如图4-22、4-23所示,是查询学生信息和教师信息的界面.
图4-22 学生课程信息查询界面
图4-23 教师课程查询界面
4.3 教师系统的实现
4.3.1 教师系统主界面的实现
教师系统主界面显示了当前教师的姓名,并显示教师功能的按钮. 1.创建数据环境命令.
根据登陆之后从Login类传递的用户名userID来得到当前登录的教师的姓名,然后将其放在Label中显示出来.附上相关代码.
sql = \"select Tname from teacher where TID = '\" + userID + \"'\";
try {
stmt = (Statement) dbConn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql); while (rs.next()) {
teacherName = rs.getString(\"Tname\");}
23
江南大学学士学位论文
JLabel jl = new JLabel(\"欢迎您 \"+teacherName.trim()+\" 老师\"); 2.主体界面设计.
使用两个JLabel分别显示欢迎信息和界面图片,用Box来存放功能按钮.主体界面如图4-24所示.
图4-24 教师系统主体界面
1.3.2 教师课程信息界面的实现 1.创建数据环境变量.
点击“我的课程”之后,向要调用的类传递userID,调用的类使用userID得到当前教师所代的所有课程,并返回到JTable中显示.给JTable的每一行添加MouseListener属性,当点击某一行的时候,得到点击行Row的数值,从而用getValueAt(row, 0)方法得到学号Cno,传递给要调用的类,调用的类使用userID和Cno查询到选择了该教师所代的某一门课程的学生名单,在弹出的窗口中显示.这里附上弹窗函数.
jt.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent arg0) {
int row=jt.getSelectedRow();//获取选中的行数,从0开始的
String cno = (String) jt.getValueAt(row, 0);//获取当前行的值,(行,列) TeacherStudent student = new TeacherStudent(userID,cno); student.setBounds(400,300,600,300); student.setVisible(true);}});
2.课程界面设置.
两个窗体都是用JTable来存放从数据库中取出来的数据.界面如图4-25所示.
24
图4-25 教师课程界面
1.3.3 学生管理界面的实现 1.创建数据环境变量.
点击“学生管理”之后,教师可以给自己所代的课程添加和删除学生信息.添加学生的时候,有已选人数的判断,如果超出规定的人数,那就不能添加.采用两个Choice下拉表来存储教师所代的课程信息,这些信息是直接从数据库中选出来的.这里附上取出选课人数的函数.
String sqlYX = \"select yunxu from C where Cno = '\" + cno + \"'\" ResultSet rsYX = stmt.executeQuery(sqlYX);
if (rsYX.next()) {
yunxu = rsYX.getInt(1);// 取出允许的选课人数 if (!(yixuan < yunxu)) {
JOptionPane.showMessageDialog(this, \"此课程已被选满,不允许再选!\");}}
2.学生管理窗体设置.
采用JTabbedPane选项卡来区分添加学生信息和删除学生信息.如图4-26、4-27所示,分别是添加和删除学生信息的界面.
图4-26 添加学生信息界面 图4-27 删除学生信息界面
4.3.4 学生成绩管理界面的实现
学生成绩管理包括成绩添加和修改,按条件统计成绩. 1.创建数据变量.
用Choice下拉表来存储教师所代的课程,然后根据教师选择的不同课程和添加的成绩来更新数据库的内容.按条件删选成绩,用DefaultTableModel和ArrayList来实现JTable
25
江南大学学士学位论文
表中数据的更新.另外,在更新数据以前,采用deleteRow方法来清除表中原有的内容.这里附上deleteRow方法.
public void deleteRow() {
DefaultTableModel dtm2 = (DefaultTableModel) jt.getModel(); int iRows = jt.getRowCount(); for (int j = iRows - 1; j >= 0; j--) { DefaultTableModel dtm2.removeRow(j);}}
2.学生成绩管理窗体设置.
同样,这个窗体采用了JTabbedPane选项卡,讲添加成绩、修改成绩和成绩统计分别放在不同的选项卡中.在成绩统计页面,采用JTable来显示统计出来的数据.如图4-28、4-29所示,分别是添加和修改成绩界面.
图4-28 添加成绩界面 图4-29 修改成绩界面
教师可以通过不同的信息来筛选查看学生的课程信息,并可以提示总共有多少人.如图4-30所示,是教师筛选课程成绩的界面.
图4-30 成绩统计界面
4.3.5 添加所带课程界面的实现
这里允许老师来选择自己要代的课程.界面由一个JTable表和一个JPanel来组成.表中存放的数据是所有课程,并可以在这里输入课程号来选定要教的课程.不过,教师不能
26
随便退掉自己选定的课程.如果已经选了这门课,会有相关的提示.选课界面如图4-31所示.
图4-31 教师选课界面
4.3.6 教师个人信息修改界面
点击“个人介绍”弹出教师个人信息修改界面.教师可以在这里修改自己的介绍.这些介绍将在学生选课时被学生看到.这里采用了JTextArea来存放和编辑教师的介绍.采用JTextArea.setLineWrap(true)方法来实现文本框的自动换行,采用JScrollPane(JTextArea)来实现文本框的滚动.具体界面如图4-32所示.
图4-32 教师个人信息修改界面
4.3.7 课程信息修改界面的实现
教师可以对自己所代的课程的简介进行修改.课程信息在学生选课的时候将被学生看到.同样,这里采用了Choice来存放教师已选定的课程,点击“查询”之后,会在JTextArea文本框中显示数据库里的该课程的信息,教师可以对其修改.界面如图4-33所示.
图4-33 课程信息修改界面
27
江南大学学士学位论文
4.3.8 登录密码修改界面
该界面包括登录密码和安全码的修改.
1. 创建环境变量.采用几个JTextField来读取输入的内容.采用SQL语句与数据库进行数据交换,如果输入的原密码正确,并且新密码符合要求,就更新数据库中的内容,并提示修改成功.
2. 界面窗体设置.采用了JTabbedPane选项卡来区分两个不同的界面,界面采用常用的GrdLayout布局.如图4-34、4-35所示,分别是修改密码和安全码的界面.
图4-34 修改登录密码界面 图4-35修改安全码界面
4.4 学生系统的实现
4.4.1 学生系统主界面的实现
登录时,给学生主窗体这个类传递了学号信息,使用这个学号取出学生的姓名,采用this.setTitle(\"欢迎你 \"+stuName.trim()+\" 同学\")方法将其显示在窗体的标题上.整个窗体采用了一个JPanel来放四个功能按钮,一个JLabel来显示界面的图片.页面采用BorderLayout布局格式.主体界面如图4-36所示.
图4-36 学生系统主体界面
28
4.4.2 学生选课界面的实现
点击“选课”按钮,可以弹出学生选课界面,在这里可以查看到所有已经有教师代课的课程,点击课程所在的行,可以弹出教师信息和课程信息的详细介绍.这里是采用JTable.getSelectedRow()方法来获得点击的行数,用(String) JTable.getValueAt(row,col)方法得到当前行某一列的值,然后传递到新打开的窗口.新窗口的类使用这些信息查出对应的教师信息和课程信息,显示在弹出窗口的JTextArea中.采用setEditable(false)方法将这里的JTextArea设置成不可编辑的.在选课界面,学生输入要选的课程对应的教师号和课程号即可选课.另外,选课是有时间和学分限制的,这些都是由管理员来设置的.如果时间不在选课时间内,不能选课,而且学分超出限制,也不能选课.具体时间和学分比较的代码请参见附录.选课窗口如图4-37所示,弹出窗口如图4-38所示.
图4-37 学生选课界面 图4-38 教师和课程详细信息界面
4.4.3 学生选课情况查询界面
点击“选课情况”弹出“我的选课情况”界面.学生在这可以查看自己已选的课程,包括课程号、课程名、任课教师、学分和成绩.也可以看到自己已选的学分和还可以选的学分.这些学分是通过使用SQL语句从数据库中取出,再放在JLabel中显示出来的.在下面的文本框输入要退选的课程号即可退掉已选的课程.当然,退选也有时间限制,在管理员设置的选课时间内才可以退选.界面如图4-39所示.
图4-39 学生选课情况界面
4.4.4 登录密码修改界面的实现
该界面包括登录密码和安全码的修改.
29
江南大学学士学位论文
1. 创建环境变量.采用几个JTextField来读取输入的内容.采用SQL语句与数据库进行数据交换,如果输入的原密码正确,并且新密码符合要求,就更新数据库中的内容,并提示修改成功.
2. 界面窗体设置.采用了JTabbedPane选项卡来区分两个不同的界面,界面采用常用的GrdLayout布局.如图4-40、4-41所示,分别是修改密码和安全码的界面.
图4-40 修改登录密码界面 图4-41修改安全码界面
30
第5章 项目总结
5.1 结论
本系统是针对学校管理学生选课情况开发的系统.包括管理员、教师和学生三个面向的对象,每个对象都有不同的功能,所以使用了三个不同的界面.系统包括教师、学生、课程、选课等信息.系统使用JAVA做前台开发,用SQL SERVER 2005做后台数据库支持.整个系统安全性、稳定性都有所保证.
本系统内部数据具有较高的关联性,学生、学生选课、教师、教师选课、课程,这些数据之间都有相关的联系,删除其中某一项,其他一些也需要做相应的改动.
在用户操作方面,尽可能让用户操作起来更加方便、快捷.包括管理员对各种信息的添加、删除、修改和查询,教师对所带课程的管理,以及成绩的录入和统计,学生选课和查询自己的选课成绩等.
整个系统由本人自己完成,从最开始的需求分析到最后的代码实现,都难免遇到各种各样的问题.由于自己对JAVA的代码设计也不是很熟悉,所以只能一边学习一边做,有些地方实现的不是很好.数据库方面,因为联系到的表比较多,表之间的关系比较复杂,有时候也要花很多时间来理清其中的关系,才能写出正确的SQL语句.
5.2 不足之处及未来展望
由于系统是在学习当中开发的,所以还有很多不足之处,比如:
1. 界面的布局不是很合理,有些JAVA的高端布局没有运用到,导致一些界面的显示没有想象中的好;
2. 受技术限制,在教师录入学生成绩时,没有实现批量录入的功能,只能单次录入成绩,这对教师来说增加了工作量;
3. 在一些数据输入时没有及时的进行数据格式校验,不能保证数据输入的绝对正确性.
以上是暂时发现的需要系统完善的地方,要实现一个完美的选课管理系统还差很多,这需要在以后的学习中慢慢积累开发经验.
在本次毕业设计中,我学到了很多东西,也是第一次讲学习到的软件工程方面的知识运用到实际当中.不管是在技术上,还是实践上,都有了很大的提升.
31
江南大学学士学位论文
32
参考文献
[1] 徐云彪编著.数据库原理与技术[M].浙江:浙江大学出版社,2002:23-59. [2] 陆晶编著.Java程序设计[M].北京:清华大学出版社,2002:10-136. [3] 李钟尉编著.Java编程宝典[M].北京:人民邮电出版社,2008:23-158. [4] 孙元编著.Java语言 SQL接口[M].北京:清华大学出版社,1997:3-59.
[5] 周亚辉主编著.Java数据库系统项目开发实践[M].北京:科学出版社,2005:59-103. [6] 苗春义著.Java项目开发全程实录[M].北京:清华大学出版社,2008:45-159. [7] 蒋瀚洋编著.SQL Server 2005数据库管理与开发教程[M].北京:人民邮电出版社,2009:
15-86.
[8] 吴道君著.SQL关系数据库与JAVA开发语言的融合[A].北京:《中国新技术新产品》
[C],2009:45-169.
[9] (美) Bruce Eckel著.Thinking in JAVA[M].北京:机械工业出版社,2000:5-386.
[10] (美)John O′Donahue著.Java数据库编程宝典[M].北京:电子工业出版社,2003:45-232.
33
江南大学学士学位论文
34
致 谢
首先,衷心感谢我的指导老师丁老师在本次毕业设计中给予我的悉心教导和帮助.在整个毕业设计制作的过程中,丁老师给了我细心的教导和悉心的关怀.从毕业设计开始阶段,丁老师就帮助我修改开题报告、任务书和选题表,给我提出很多意见.之后的系统设计阶段,丁老师也给我的系统提出很多意见和改进的建议,才让我能够顺利的做完、做好整个系统.与其说丁老师是位教师,不如说他是学生的好朋友,每次与丁老师的交流,都感觉是跟自己很贴心的朋友在谈话,让我能够很容易地接受各种批评和建议.
其次,我要感谢小顾同学,在做毕业设计的时候,他指导我做了很多东西,技术方面的问题有很多都是他帮忙解决的.
同时,还要感谢大学四年以来教导我的各位老师们. 是你们教会了我计算机方面的知识,叫我如何将学到的运用到实践当中去.
再次感谢所有曾帮助过我的老师和同学,谢谢你们!
35
江南大学学士学位论文
36
附录
Choice下拉列表的二级联动函数 class itemStateChanged implements ItemListener{ public void itemStateChanged(ItemEvent e) { if (e.getItem().equals(\"物联网工程学院\")) { c2.removeAll(); c2.addItem(\"请选择\"); c2.addItem(\"计科0701\"); c2.addItem(\"计科0702\");
c2.addItem(\"微电子0701\");
} else if (e.getItem().equals(\"食品学院\")) { c2.removeAll(); c2.addItem(\"请选择\"); c2.addItem(\"食品安全0701\"); c2.addItem(\"食品安全0702\");
c2.addItem(\"食品安全0703\");
} else if (e.getItem().equals(\"医药学院\")) { c2.removeAll(); c2.addItem(\"请选择\"); c2.addItem(\"制药0701\"); c2.addItem(\"制药0702\");
c2.addItem(\"制药0703\");
} else if (e.getItem().equals(\"机械学院\")) { c2.removeAll(); c2.addItem(\"请选择\"); c2.addItem(\"自动化0701\"); c2.addItem(\"自动化0702\");
c2.addItem(\"自动化0703\");
37
1.
江南大学学士学位论文
} }
}
2. 获得某课程选课人数的函数.按照课程编号和教师编号获取选择该课程的个数,如果没有人选择,则返回0 public int studentCountOfCno(String cno, String teacherID) { String sql = \"select count(*) from SC where Cno ='\" + cno
+ \"' and TID = '\" + teacherID + \"'\";
try { Connection dbConn1 = CONN();
stmt = (Statement) dbConn1.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs2 = stmt.executeQuery(sql); while (rs2.next()) { return rs2.getInt(1);
}
} catch (SQLException e1) { System.out.print(\"SQL Exception occur.Message is:\"
+ e1.getMessage());
} return 0;
}
3. 时间的比较方法
Date dt1 = df.parse(now_str);// 系统当前日期 Date dt2 = df.parse(dateStart_str);// 选课开始日期 Date dt3 = df.parse(dateEnd_str);// 选课结束日期 System.out.println(\"当前日期\" + dt1);
System.out.println(\"开始日期\" + dt2);
38
System.out.println(\"结束日期\" + dt3); if (dt1.getTime() < dt2.getTime()) {
dateStart_str = printTime.format(dateStart); dateEnd_str = printTime.format(dateEnd);
JOptionPane.showMessageDialog(this, \"选课还没开始!\" + \"\\n\"
+ \"选课时间为\" + \"\\n\" + dateStart_str + \"至\" + dateEnd_str);
} else if (dt1.getTime() > dt3.getTime()) { }
dateStart_str = printTime.format(dateStart); dateEnd_str = printTime.format(dateEnd);
JOptionPane.showMessageDialog(this, \"选课已经结束!\" + \"\\n\"
+ \"选课时间为\" + \"\\n\" + dateStart_str + \"至\" + dateEnd_str);
4. JTable表内容刷新函数 private List getTable(String sql1) {
while (rs.next()) {
deleteRow(); String sql = null; sql = sql1;
List