基于java的学生选课系统__本科毕业设计论文

基于java的学生选课系统__本科毕业设计论文
基于java的学生选课系统__本科毕业设计论文

成绩:

课程设计

(Java程序设计)

题目基于Java的学生选课系统

学院计算机与软件学院

专业计算机科学与技术

学号、姓名

指导教师

二○一四年十二月十八日

基于Java的学生选课系统

摘要:课程管理系统是一个学校中不可缺少的部分。课程管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式对课程进行查询、更新、选课等,这种管理方式存在着许多缺点,如:效率低、执行速度慢。另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对选课信息进行管理,具有手工管理无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、成本低、效率高等。这些优点能够极大地提高学生选课系统的效率,也是企业、学校的科学化、正规化管理和与世界接轨的重要条件。因此,开发这样一套管理系统已成为有必要的事情。

JA V A是一门很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。本文中介绍了用JA V A语言实现课程管理系统的全部过程。

关键词:课程管理,Java,Eclipse,SQL,JDBC

目录

第一章前言 (1)

1.1 选课背景及意义 (1)

1.2 学生选课系统的发展和研究现状 (1)

1.3 各章节内容简介 (2)

第二章 Java语言以及开发工具 .................... 错误!未定义书签。

2.1 Java的背景知识介绍................................. 错误!未定义书签。

2.1.1 Java的起源 (2)

2.1.2 Java的特点 (2)

2.2 Java的开发工具 (3)

第三章学生选课系统的需求分析 (4)

3.1 学生选课系统功能分析 (4)

3.2 学生选课系统总体设计 (4)

3.3 学生选课系统数据库需求分析 (5)

3.3.1 用户登陆 (5)

3.3.2 学生登陆 (5)

3.3.3 数据库的构建 (5)

第四章学生选课系统的实现 (6)

4.1 学生选课系统程序及注释 (6)

4.2 系统运行环境....................................... 错误!未定义书签。

4.3 学生选课系统运行截图............................... 错误!未定义书签。

4.3.1 登陆页面(起始页)............................ 错误!未定义书签。

4.3.2 学生操作界面.................................. 错误!未定义书签。

第五章系统测试与维护 (19)

5.1 程序测试的目的 (19)

5.2 程序测试的意义 (19)

5.3 程序测试的原则 (19)

5.4 程序测试的流程 (21)

第六章总结与展望.............................. 错误!未定义书签。1参考文献....................................... 错误!未定义书签。1

第一章前言

1.1选题背景及意义

随着计算机技术和网络通讯技术的飞速发展,现在国内有很多大学的选课方式由传统的选择方式转变成了网上选课,学生可以在网上选择规定范围内的课程,并且可以在网上查询成绩。无需自己去老师那一门一门查,了解自己已得多少学分还需多少学分,既节省了学生的时间,又便于学校的管理。

网上选课系统为同学提供了一个自由选择的平台,学生可以选修规定范围内的课程,查看已修学分总数,还可以修改个人信息。本系统也为教师提供了很大的方便,教师可以根据统计的人数挑选一定数量的学生,也可以直接在网上公布成绩,让学生直接在网上查询成绩。

本系统方便了学生的选课,同时便于管理,减少大量的人力资源。并且促进了学生的积极性,近而开发了网上选课系统。

1.2学生选课系统的发展和研究现状

进入21世纪以来,国内各高校都在积极推动教育体制的改革,为培养更为优秀的新世纪复合型人才做出努力。然而在80年代以前,计算机还没有在国内普及各高校学生选课都是手工完成,不仅教师的工作量大,而且学生查询和检索时也很麻烦。

80年代后期,少数高校开始实行学年学分制,学生有了一定程度的选课自由。学生在学校只需要修满学分就可以毕业,并且可以根据自己的喜好选择科目。并且随着PC机的普及,有些高校已经开始应用电脑进行日常管理工作。这时,学生选课系统诞生了。但是,这些系统大多是基于DOS或者WINDOWS的单机版本,不仅界面不友好,而且功能薄弱。各科系之间的数据交流只能借助软盘为中介,费时费力。随着高校的规模扩大,教育体制改革的深化,这类系统已经不能适应管理上的要求。

90年代后期以来,各高校纷纷建立自己的高速校园网:在技术上,客户机/服务器体系结构已经非常成熟,同时浏览器/服务器体系结构正在兴起,这些都为创建大型的学生选课系统创造了条件,满足了数据集中存放,管理运作分布执行的需求。中心数据库存放学生选课系统的相关数据,管理人员通过网络访问数据库进行业务管理;学生和任课教师可以通过浏览器查询相关数据。目前国内各高校均有自己的选课系统。

1.3各章内容简介

本论文在第一章介绍了学生选课系统的研究意义以及研究现状,突出本系统研究的必要性;第二章介绍Java语言和它的开发工具,以说明选择Java的好处;第三章进行学生选课系统的需求分析,以使系统的模块更加清楚;第四章介绍本系统各模块的功能以及它们的结构图,还有具体程序和注释以及运行结果截图;第五章是介绍了程序测试的目的、意义、原则、流程,以使每一步程序的功能清晰地跃然纸上;第六章对学生选课系统进行了总结以及对前景作了展望,使系统更加完美。

第二章Java语言以及开发工具

有了系统制作的必要性接下来是选择开发语言和工具,由于选择的Java制作,座椅本章节将对Java进行介绍以说明选择它进行学生选课系统开发的理由,并介绍几种Java 的开发工具。

2.1 Java背景知识介绍

2.1.1 Java的起源

1991年四月份,Sun的绿色计划开始着手于发展消费性电子产品,所使用的语言是C、C++、及Oak(为Java语言的前身),后因语言本身和市场的问题,使得消费性电子产品的发展无法达到当初预期的目标,再加上网络的兴起,绿色计划也因此而改变发展的方向,这已是1994年了。而这一次的改变,就是Java诞生的契机。而Java这个名字不是由几个单词的首字所组成,而是从许多程序设计师钟爱的热腾腾、香浓咖啡中产生灵感的。

2.1.2 Java的特点

Sun是要Java成为一个简单(Simple)、面向对象对象的(Object Oriented)、分布式的(Distributed)、解释的(Interpreted)、健壮的(Robust)、安全的(Secure)、结构中立的(Architecture Neutral)、可移植的(Portable)、高效能的(High Performance)、多线程的(Multithreaded)、动态的(Dynamic)的程序语言。

面向对象的思想是Java语言的重要指导思想,最主要的重点是即将要用Java编写的程序,其次才是所需要的工具;最近的即插即用(Plug and Play)亦是面向对象设计的重点。

Java与C/C++最大不同点是Java有一个指针模型(Pointer Model)来排除内存被覆盖(Overwriting Memory)和毁损数据(Corrupting Data)的可能性。总的来说Java有以下特点:

结构中立的(Architecture Neutral):一般而言,网络是由很多不同机型的机器所组合而成的,CPU和作业系统体系结构均有所不同;因此,如火如荼使一个应用程序可以在每一种机器上执行,是一个难题。所幸,Java的编译器产生一种结构中立的目标文件格式(Object File Format);这使得编译码得以在很多种处理器中执行。

可移植的(Portable):原始资料形式的大小是被指定的,例如“float”一直是表示一个32位元IEEE754浮点运算数字,因绝大多数的CPU都具有此共同特征。程序库属于系统的一部分,它定义了一些可移植的程序接口,Java本身具备有很好的可移植性。

解释的(Interpreted):Java解释器能直接地在任何机器上执行Java位元码(Bytecodes),因此在进行程序连结时,时间的节省,这对于缩短程序的开发过程,有极大的帮助。

高效能的(High Performance):Java位元码迅速地能被转换成机器码(Machine Code),从位元码转换到机器码的效能几乎与C于与C++没有分别。

多线程的(Multi threaded):Java语言具有多线程的功能,这对于交互回应能力及即时执行行为是有帮助的。

动态的(Dynamic):Java比C或C++语言更具有动态性,更能适应时刻在变的环境,Java不会因程序库的更新,而必须重新编译程序。

正如上文所述,Java是一种成熟的语言又有其他语言所不具有的特点,所以本系统采用Java编程实现。

2.2 Java的开发工具

现在常用的Java项目开发环境有:JBuilder、VisualAge for Java、Forte for Java、Visual Cafe、Eclipse、NetBeans IDE、JCreator+J2SDK、jdk+记事本、EditPlus+J2SDK等等。一般开发J2EE项目时都需要安装各公司的应用服务器(中间件)和相应的开发工具,在使用这些开发工具之前,我们最好能熟知这些软件的优点和缺点,以便根据实际情况选择应用。编程工具只是工具,为了方便人们工作而开发的,各有特点,本次学生选课系统我们选择了Ecilpse,下面对其进行介绍。

EClipse是一种可扩展的开放源代码IDE。2010年11月,IBM公司捐出价值4000万美元的源代码组建了EClipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发\构建和调试”的周期之中。为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了EClipse平台。EClipse允许在同一IDE 中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。

EClipse框架的这种灵活性来源于其扩展点。它们是在XML中定义的一直接口,并充当插件的耦合点。扩展点的范围包括从用在常规表述过滤器中的简单字符串,到一个Java 类的描述。任何EClipse插件定义的扩展点都能够被其他插件使用,反之,任何EClipse插件也可以遵从其他插件定义的扩展点。除了解由扩展点定义的接口外,插件不知道它们通过扩展点提供的服务将如火如和被使用。

利用EClipse,可以将高级设计(也许是采用UML)与低级开发工具(如应用调试器等)结合在一起。如果这些互相补充的独立工具采用EClipse扩展点彼此连接,那么当我们用调试器逐一检查应用时,UML对话框可以突出显示我们正在关注的器件。事实上,由于EClipse 并不了解开发语言,所以无论Java语言调试器、还是汇编调试器都是有效的,并可以在相同的框架内同时瞄准不同的进程或节点。

EClipse的最大特点是它能接受由Java开发者自己编写的开放源代码插件,这类似于微软公司的Visual Studio和Sun微系统公司的NetBeans平台。EClipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。这是一款非常受欢迎的Java开发工具,这国内的用户越来越多,实际上使用它Java开发人员是最多的。缺点就是较复杂,对初学者来说,理解起来比较困难。

第三章学生选课系统的需求分析

在选择了开发工具后将对系统进行需求分析,以确保程序的结构清晰明朗,所以本章节将对学生选课系统的功能和结构进行分析,以及数据库的构建进行简单说明。

3.1学生选课系统功能分析

选课系统的核心是选课功能。学生在选课以前,必须通过系统的身份验证后,然后就可以选定自己的选修课程。当然,学生也能删除选错或者误选的课程。另外,选课系统还提供了课程查看功能。

3.2 学生选课系统总体设计

图3-1 学生选课系统总体设计图

3.3学生选课系统数据库需求分析

通过对学生选课系统工作内容和相关数据流程分析,根据学生选课系统的需要,以及系统功能设计的要求以及功能模块的划分,就可以设计出满足用户需求的各种实体。

该系统由登陆模块、学生模块两部分组成,其功能如下。

3.3.1 用户登陆

登陆模块包括用户名、密码的输入框,当用户名或密码输入错误时系统会报错。

3.3.2 学生登陆

学生登陆后就可依次输入所要选的课程的课程ID 、课程名、学时、学分、学期、性质,提交便可选课成功,但是如果选课人数已满,那么选课便不会成功,成功的页面会提示还剩多少人可选这门课程。

3.3.3 数据库的构建

对于学生选课系统数据库,可以列出以下数据项和数据结构:

用户登陆 课程模块 学生模块 删除课程

查询课程 编辑课程 删除学生 查询学生 编辑学生 添加课程 添

加学

学生信息:学号、姓名

课程信息:课程ID、课程名、学时、学分、学期、性质

第四章学生选课系统的实现

在系统的功能和结构分析完后,程序可以进行编写,本章节将对程序进行介绍,然后介绍了系统的运行环境,最后展示了程序完成后的界面截图。

4.1 学生选课系统程序及注释

public class StudentChooseCourse extends JFrame implements ActionListener {

JTextField jtfSearch = new JTextField(11);

String[] columnNames = new String[] { "课程ID", "课程名", "学时", "学分", "学期", "性质" };

DefaultTableModel dtmSearch = new DefaultTableModel(columnNames, 27);

JTable jtSearch = new JTable(dtmSearch);

JScrollPane jspSearch = new JScrollPane(jtSearch);

JComboBox jcbSearch = new JComboBox();

JTextField jtfSelectedCourse = new JTextField(10);

Connection con = null;

PreparedStatement ps = null;

ResultSet rs = null;

private static String usrName;

private static String passwrd;

//在构造方法中添加两个参数。以便在"提交"时,将学生的身份连同所选的课程,一同记录在学生选课表中。

public StudentChooseCourse(String usrName, String passwrd) {

createSearchCourse();

https://www.360docs.net/doc/1512641157.html,rName = usrName;

this.passwrd = passwrd;

}

public String getUsrName() {

return usrName;

}

public void setUsrName(String usrName) {

https://www.360docs.net/doc/1512641157.html,rName = usrName;

}

public String getPasswrd() {

return passwrd;

}

public void setPasswrd(String passwrd) {

this.passwrd = passwrd;

}

//根据用户的时间,做出相应的反映

public void actionPerformed(ActionEvent e) {

String str = e.getActionCommand();

//清空结果显示区中的内容,如果有的话。

if ("查询".trim().equals(str)) {

int k = 1;

while (k < 10) {

for (int i = 1; i < 7; i++) {

jtSearch.setValueAt(null, k - 1, i - 1);

}

k++;

}

//调用下面的这个方法,在数据库中进行查找,并将结果显示在表格中。

searchAvailableCourse();

} else if ("提交".equals(str)) {

//processBeforeCommit()对用户选课操作进行有效性检验;

//剔除无效操作:如输入无效的课程号,或已经选择了某一课程,已经选满的6学分等各种情况

boolean effect=processBeforeCommit();

//如果课程存在,且该学生具有选择该课程的资格,即effect为true,进入正式提交程序(tryCommit())

if(effect==true)

{tryCommit();}

}

}

//对用户选课操作进行有效性检验;

public boolean processBeforeCommit(){

//清空原结果显示区中的内容,如果有的话。

int k = 1;

while (k < 10) {

for (int i = 1; i < 7; i++) {

jtSearch.setValueAt(null, k - 1, i - 1);

}

k++;

}

//取得用户输入的课程号

String userInput = jtfSelectedCourse.getText().toString().trim()

.toLowerCase();

//无效操作1:在数据库中的coursexx表中查询该课程号。如果不存在该课程,给出提示。

String sql = "select cno from coursexx where cno=? ";

boolean flagCourseExist = false;

try {

ps = con.prepareStatement(sql);

ps.setString(1, userInput);

rs = ps.executeQuery();

flagCourseExist = rs.next();

} catch (Exception eC) {

eC.printStackTrace();

}

if (!flagCourseExist) {

JOptionPane.showMessageDialog(null, "该课程不存在,请重新输入");

return false;

}

//判断该学生选修课已选课程的总学分是否小于6;

//无效操作2:如果已有选课记录,并且总学分大于6学分,该学生不能在选了。PreparedStatement ps = null;

sql = "select sum(grade) "

+ "from (select x.sname , https://www.360docs.net/doc/1512641157.html,o,k.grade grade "

+ "from coursexx k join choicesxx x "

+ "on https://www.360docs.net/doc/1512641157.html,o=https://www.360docs.net/doc/1512641157.html,o and x.sname=?) result";

String grade =null;

try {

ps = con.prepareStatement(sql);

ps.setString(1, usrName);

rs = ps.executeQuery();

while (rs.next()) {

grade = rs.getString(1);

if(grade==null){grade="0";}

}

} catch (Exception rrr) {

rrr.printStackTrace();

}

System.out.println("总学分:" + grade);

if (Integer.parseInt(grade) > 6) {

JOptionPane.showMessageDialog(null, "你已经选满6学分,系统将退出"); this.setVisible(false);

return false;

}

//无效操作3:课程该学生已经选择了某课程,则不能再选该课程了。

sql = "select * from choicesxx where sname=? and cno=?";

boolean flag = false;

try {

ps = con.prepareStatement(sql);

ps.setString(1, this.getUsrName());

ps.setString(2, userInput);

rs = ps.executeQuery();

flag = rs.next();

} catch (Exception eaa) {

eaa.printStackTrace();

}

if (flag) {

JOptionPane.showMessageDialog(null, "你已经选择了该课程。请另选课程"); return false;}

//如果以上无效操作都不存在,则返回true,意为这是一个准有效操作

return true;

}

//对有效的提交操作的进行处理

public void tryCommit() {

// userInput为用户输入的课程ID.

String userInput = jtfSelectedCourse.getText().toString().trim()

.toLowerCase();

// if course still available(count

// else if course not available,show Message to student.

PreparedStatement ps;

String sql = "select (Max-selectedCount) as RemainedCount "

+ "from Coursexx where cno=?";

try {

ps = con.prepareStatement(sql);

// 取得学生ID或名字,将课程ID存入学生选课表choicesxx

ps.setString(1, userInput);

rs = ps.executeQuery();

ResultSetMetaData meta = rs.getMetaData();

int cols = meta.getColumnCount();

int RemainedCount = -1;

while (rs.next()) {

RemainedCount = rs.getInt(1);

System.out.println("RemainedCount:" + RemainedCount);

}

//如果该课程还有选择的名额,提示单项选课操作成功。

if (RemainedCount > 0) {

// save studentId and courseId to student-course table.

// this.getUsrName();userInput

sql = "insert into choicesxx values(?,?)";

ps = con.prepareStatement(sql);

ps.setString(1, this.getUsrName());

ps.setString(2, userInput);

ps.executeUpdate();

JOptionPane.showMessageDialog(null, "选课成功:" + this.getUsrName() + " 选了" + userInput + "." + "" + " 还有" + RemainedCount

+ " 人可以选该课程。");

// 更新课程中已选该课程的人数:即将可选该课程的人数减去1个人。sql = "update CourseXX set selectedCount=selectedCount+1 where cno=?"; ps = con.prepareStatement(sql);

ps.setString(1, userInput);

ps.executeUpdate();

相关文档
最新文档