1、 成绩: 课程设计(Java程序设计) 题 目 基于Java的学生选课系统 学 院 计算机与软件学院 专 业 计算机科学与技术 学号、姓名 指 导 教 师 二一四 年 十二月十八日基于Java的学生选课系统摘要:课程管理系统是一个学校中不可缺少的部分。课程管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式对课程进行查询、更新、选课等,这种管理方式存在着许多缺点,如:效率低、执行速度慢。另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领
2、域并发挥着越来越重要的作用。作为计算机应用的一部分,使用计算机对选课信息进行管理,具有手工管理无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、成本低、效率高等。这些优点能够极大地提高学生选课系统的效率,也是企业、学校的科学化、正规化管理和与世界接轨的重要条件。因此,开发这样一套管理系统已成为有必要的事情。JAVA是一门很优秀的编程语言,具有面向对象、与平台无关、安全、稳定和多线程等特点,是目前软件设计中极为健壮的编程语言。本文中介绍了用JAVA语言实现课程管理系统的全部过程。关键词:课程管理,Java,Eclipse,SQL,JDBC目 录第一章 前言11.1 选课背景及意义11
3、.2 学生选课系统的发展和研究现状11.3 各章节内容简介2第二章 Java语言以及开发工具22.1 Java的背景知识介绍22.1.1 Java的起源22.1.2 Java的特点22.2 Java的开发工具3第三章 学生选课系统的需求分析43.1 学生选课系统功能分析43.2 学生选课系统总体设计43.3 学生选课系统数据库需求分析53.3.1 用户登陆53.3.2 学生登陆53.3.3 数据库的构建5第四章 学生选课系统的实现64.1 学生选课系统程序及注释64.2 系统运行环境144.3 学生选课系统运行截图154.3.1 登陆页面(起始页)154.3.2 学生操作界面16第五章 系统测
4、试与维护195.1 程序测试的目的195.2 程序测试的意义195.3 程序测试的原则195.4 程序测试的流程20第六章 总结与展望21参考文献21 第一章 前 言1.1选题背景及意义随着计算机技术和网络通讯技术的飞速发展,现在国内有很多大学的选课方式由传统的选择方式转变成了网上选课,学生可以在网上选择规定范围内的课程,并且可以在网上查询成绩。无需自己去老师那一门一门查,了解自己已得多少学分还需多少学分,既节省了学生的时间,又便于学校的管理。网上选课系统为同学提供了一个自由选择的平台,学生可以选修规定范围内的课程,查看已修学分总数,还可以修改个人信息。本系统也为教师提供了很大的方便,教师可以
5、根据统计的人数挑选一定数量的学生,也可以直接在网上公布成绩,让学生直接在网上查询成绩。本系统方便了学生的选课,同时便于管理,减少大量的人力资源。并且促进了学生的积极性,近而开发了网上选课系统。1.2学生选课系统的发展和研究现状进入21世纪以来,国内各高校都在积极推动教育体制的改革,为培养更为优秀的新世纪复合型人才做出努力。然而在80年代以前,计算机还没有在国内普及各高校学生选课都是手工完成,不仅教师的工作量大,而且学生查询和检索时也很麻烦。80年代后期,少数高校开始实行学年学分制,学生有了一定程度的选课自由。学生在学校只需要修满学分就可以毕业,并且可以根据自己的喜好选择科目。并且随着PC机的普
6、及,有些高校已经开始应用电脑进行日常管理工作。这时,学生选课系统诞生了。但是,这些系统大多是基于DOS或者WINDOWS的单机版本,不仅界面不友好,而且功能薄弱。各科系之间的数据交流只能借助软盘为中介,费时费力。随着高校的规模扩大,教育体制改革的深化,这类系统已经不能适应管理上的要求。90年代后期以来,各高校纷纷建立自己的高速校园网:在技术上,客户机/服务器体系结构已经非常成熟,同时浏览器/服务器体系结构正在兴起,这些都为创建大型的学生选课系统创造了条件,满足了数据集中存放,管理运作分布执行的需求。中心数据库存放学生选课系统的相关数据,管理人员通过网络访问数据库进行业务管理;学生和任课教师可以
7、通过浏览器查询相关数据。目前国内各高校均有自己的选课系统。1.3各章内容简介 本论文在第一章介绍了学生选课系统的研究意义以及研究现状,突出本系统研究的必要性;第二章介绍Java语言和它的开发工具,以说明选择Java的好处;第三章进行学生选课系统的需求分析,以使系统的模块更加清楚;第四章介绍本系统各模块的功能以及它们的结构图,还有具体程序和注释以及运行结果截图;第五章是介绍了程序测试的目的、意义、原则、流程,以使每一步程序的功能清晰地跃然纸上;第六章对学生选课系统进行了总结以及对前景作了展望,使系统更加完美。 第二章 Java语言以及开发工具 有了系统制作的必要性接下来是选择开发语言和工具,由于
8、选择的Java制作,座椅本章节将对Java进行介绍以说明选择它进行学生选课系统开发的理由,并介绍几种Java的开发工具。2.1 Java背景知识介绍2.1.1 Java的起源 1991年四月份,Sun的绿色计划开始着手于发展消费性电子产品,所使用的语言是C、C+、及Oak(为Java语言的前身),后因语言本身和市场的问题,使得消费性电子产品的发展无法达到当初预期的目标,再加上网络的兴起,绿色计划也因此而改变发展的方向,这已是1994年了。而这一次的改变,就是Java诞生的契机。而Java这个名字不是由几个单词的首字所组成,而是从许多程序设计师钟爱的热腾腾、香浓咖啡中产生灵感的。2.1.2 Ja
9、va的特点Sun是要Java成为一个简单(Simple)、面向对象对象的(Object Oriented)、分布式的(Distributed)、解释的(Interpreted)、健壮的(Robust)、安全的(Secure)、结构中立的(Architecture Neutral)、可移植的(Portable)、高效能的(High Performance)、多线程的(Multithreaded)、动态的(Dynamic)的程序语言。面向对象的思想是Java语言的重要指导思想,最主要的重点是即将要用Java编写的程序,其次才是所需要的工具;最近的即插即用(Plug and Play)亦是面向对象设
10、计的重点。Java与C/C+最大不同点是Java有一个指针模型(Pointer Model)来排除内存被覆盖(Overwriting Memory)和毁损数据(Corrupting Data)的可能性。总的来说Java有以下特点:结构中立的(Architecture Neutral):一般而言,网络是由很多不同机型的机器所组合而成的,CPU和作业系统体系结构均有所不同;因此,如火如荼使一个应用程序可以在每一种机器上执行,是一个难题。所幸,Java的编译器产生一种结构中立的目标文件格式(Object File Format);这使得编译码得以在很多种处理器中执行。可移植的(Portable):原
11、始资料形式的大小是被指定的,例如“float”一直是表示一个32位元IEEE754浮点运算数字,因绝大多数的CPU都具有此共同特征。程序库属于系统的一部分,它定义了一些可移植的程序接口,Java本身具备有很好的可移植性。解释的(Interpreted):Java解释器能直接地在任何机器上执行Java位元码(Bytecodes),因此在进行程序连结时,时间的节省,这对于缩短程序的开发过程,有极大的帮助。高效能的(High Performance):Java位元码迅速地能被转换成机器码(Machine Code),从位元码转换到机器码的效能几乎与C于与C+没有分别。多线程的(Multi threa
12、ded):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+J2S
13、DK等等。一般开发J2EE项目时都需要安装各公司的应用服务器(中间件)和相应的开发工具,在使用这些开发工具之前,我们最好能熟知这些软件的优点和缺点,以便根据实际情况选择应用。编程工具只是工具,为了方便人们工作而开发的,各有特点,本次学生选课系统我们选择了Ecilpse,下面对其进行介绍。EClipse是一种可扩展的开放源代码IDE。年月,公司捐出价值4000万美元的源代码组建了EClipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发构建和调试”的周期之中。为了帮助集成开发环境(IDE)克服目前的局限性,业界厂商合作创建了EClipse平台。ECl
14、ipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改变了项目工作流程,使开发者可以专注在实际的嵌入式目标上。EClipse框架的这种灵活性来源于其扩展点。它们是在中定义的一直接口,并充当插件的耦合点。扩展点的范围包括从用在常规表述过滤器中的简单字符串,到一个Java类的描述。任何EClipse插件定义的扩展点都能够被其他插件使用,反之,任何EClipse插件也可以遵从其他插件定义的扩展点。除了解由扩展点定义的接口外,插件不知道它们通过扩展点提供的服务将如火如和被使用。利用EClipse,可以将高级设计(也许是采用UML)与低级开发工具(如应用调试器等)结合
15、在一起。如果这些互相补充的独立工具采用EClipse扩展点彼此连接,那么当我们用调试器逐一检查应用时,UML对话框可以突出显示我们正在关注的器件。事实上,由于EClipse并不了解开发语言,所以无论Java语言调试器、还是汇编调试器都是有效的,并可以在相同的框架内同时瞄准不同的进程或节点。EClipse的最大特点是它能接受由Java开发者自己编写的开放源代码插件,这类似于微软公司的Visual Studio和Sun微系统公司的NetBeans平台。EClipse为工具开发商提供了更好的灵活性,使他们能更好地控制自己的软件技术。这是一款非常受欢迎的Java开发工具,这国内的用户越来越多,实际上使
16、用它Java开发人员是最多的。缺点就是较复杂,对初学者来说,理解起来比较困难。 第三章 学生选课系统的需求分析 在选择了开发工具后将对系统进行需求分析,以确保程序的结构清晰明朗,所以本章节将对学生选课系统的功能和结构进行分析,以及数据库的构建进行简单说明。3.1学生选课系统功能分析选课系统的核心是选课功能。学生在选课以前,必须通过系统的身份验证后,然后就可以选定自己的选修课程。当然,学生也能删除选错或者误选的课程。另外,选课系统还提供了课程查看功能。3.2 学生选课系统总体设计 用户登陆 课程模块 学生模块删除课程查询课程编辑课程删除学生查询学生编辑学生添加课程添加学生 图3-1 学生选课系统
17、总体设计图 3.3学生选课系统数据库需求分析 通过对学生选课系统工作内容和相关数据流程分析,根据学生选课系统的需要,以及系统功能设计的要求以及功能模块的划分,就可以设计出满足用户需求的各种实体。该系统由登陆模块、学生模块两部分组成,其功能如下。3.3.1 用户登陆 登陆模块包括用户名、密码的输入框,当用户名或密码输入错误时系统会报错。3.3.2 学生登陆 学生登陆后就可依次输入所要选的课程的课程ID、课程名、学时、学分、学期、性质,提交便可选课成功,但是如果选课人数已满,那么选课便不会成功,成功的页面会提示还剩多少人可选这门课程。3.3.3 数据库的构建 对于学生选课系统数据库,可以列出以下数
18、据项和数据结构: 学生信息:学号、姓名 课程信息:课程ID、课程名、学时、学分、学期、性质第四章 学生选课系统的实现 在系统的功能和结构分析完后,程序可以进行编写,本章节将对程序进行介绍,然后介绍了系统的运行环境,最后展示了程序完成后的界面截图。4.1 学生选课系统程序及注释public class StudentChooseCourse extends JFrame implements ActionListener JTextField jtfSearch = new JTextField(11);String columnNames = new String 课程ID, 课程名, 学时,
19、 学分, 学期, 性质 ;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
20、ps = null;ResultSet rs = null;private static String usrName;private static String passwrd;/在构造方法中添加两个参数。以便在提交时,将学生的身份连同所选的课程,一同记录在学生选课表中。public StudentChooseCourse(String usrName, String passwrd) createSearchCourse();this.usrName = usrName;this.passwrd = passwrd;public String getUsrName() return usr
21、Name;public void setUsrName(String usrName) this.usrName = 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().equ
22、als(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(); /如
23、果课程存在,且该学生具有选择该课程的资格,即effect为true,进入正式提交程序(tryCommit()if(effect=true)tryCommit();/对用户选课操作进行有效性检验;public boolean processBeforeCommit()/清空原结果显示区中的内容,如果有的话。int k = 1;while (k 10) for (int i = 1; i 6) JOptionPane.showMessageDialog(null, 你已经选满6学分,系统将退出);this.setVisible(false);return false;/无效操作3:课程该学生已经选
24、择了某课程,则不能再选该课程了。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.showMe
25、ssageDialog(null, 你已经选择了该课程。请另选课程);return false;/如果以上无效操作都不存在,则返回true,意为这是一个准有效操作return true;/对有效的提交操作的进行处理public void tryCommit() / userInput为用户输入的课程ID.String userInput = jtfSelectedCourse.getText().toString().trim().toLowerCase();/ if course still available(count 0) / save studentId and courseId t
26、o student-course table./ this.getUsrName();userInputsql = 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 + . + + 还有 + Remain
27、edCount+ 人可以选该课程。);/ 更新课程中已选该课程的人数:即将可选该课程的人数减去1个人。sql = update CourseXX set selectedCount=selectedCount+1 where cno=?;ps = con.prepareStatement(sql);ps.setString(1, userInput);ps.executeUpdate();mit();/如果该课程已经没有选择名额,提示重新选课 catch (Exception es) es.printStackTrace();try con.rollback(); catch (Excepti
28、on ey) ey.printStackTrace();/对用户查询课程信息,进行处理,并显示查询结果public void searchAvailableCourse() / 让程序自动选择连接的是Oracle或SqlServer.if (JDBCUtil.getConnection() != null) System.out.println(JDBCUtil.getConnection();con = JDBCUtil.getConnection(); else con = JDBCUtil.getConnection();/userInput取得用户输入的信息,selectedItem取
29、得用户选择的查询方式String userInput = jtfSearch.getText().toString().trim().toLowerCase();String selectedItem = jcbSearch.getSelectedItem().toString().trim();System.out.println(User search: + userInput);System.out.println(selectedItem: + selectedItem);String sql = null;/按用户查询方式,如按课程名,课程ID或学时的查询进行处理;并在表格中实现结果
30、try if (课程名.equals(selectedItem) sql = select cno,cname,hour,grade,term,isNeed from CourseXX where cname = ?;ps = con.prepareStatement(sql);ps.setString(1, userInput); else if (课程ID.equals(selectedItem) sql = select cno,cname,hour,grade,term,isNeed from CourseXX where cno = ?;ps = con.prepareStateme
31、nt(sql);ps.setString(1, userInput); else if (学时.equals(selectedItem) sql = select cno,cname,hour,grade,term,isNeed from CourseXX where hour = ?;ps = con.prepareStatement(sql);ps.setInt(1, Integer.parseInt(userInput); else if (学分.equals(selectedItem) sql = select cno,cname,hour,grade,term,isNeed from
32、 CourseXX where grade = ?;ps = con.prepareStatement(sql);ps.setInt(1, Integer.parseInt(userInput); else if (学期.equals(selectedItem) sql = select cno,cname,hour,grade,term,isNeed from CourseXX where term = ?;ps = con.prepareStatement(sql);ps.setString(1, userInput);System.out.println(sql);rs = ps.exe
33、cuteQuery();mit();ResultSetMetaData meta = rs.getMetaData();int cols = meta.getColumnCount();String result = null;int k = 1;boolean flag = false;/将查询结果以表格的形式显示出来while (rs.next() for (int i = 1; i = cols; i+) result = rs.getString(i);System.out.println(result);jtSearch.setValueAt(result, k - 1, i - 1
34、);k+;flag = true;/如果查询结果集为空,提示用户没有该课程if (flag = false) JOptionPane.showMessageDialog(null, 该课程不存在,请重新输入);return; catch (Exception ex) ex.printStackTrace();try con.rollback(); catch (Exception er) er.printStackTrace();/当某学生有效登录后,启动程序(将学生的登录信息也传过来,以便保存选课操作时使用)public static void main(String args) /Stri
35、ng usrName = xuliang;/String passwrd = 123;new StudentChooseCourse(usrName, passwrd);4.2 系统运行环境 由于本系统开发时用到SQL2012数据库、SQLJDBC、JDK1.7、Eclipse,故其运行需要一定的系统环境。解压下载好的JDBC至D:迅雷下载sqljdbc_4.0.2206.100_chssqljdbc_4.0 以及SQL2012至C:ProgramFilesMicrosoftSQLServer。然后要配置好环境变量,在数据库里建表,然后将Java通过JDBC连接到SQL2012等。具体操作过程
36、参见了 4.3学生选课系统运行截图4.3.1 登陆页面(起始页) 图4-1 登陆页面截图 输入用户名和密码并且选择用户类型即可登陆到相应用户类型的主界面。 图4-2 登陆信息错误提示截图 但是如果用户名或密码错误就会跳转到如上的提示界面。4.3.2 学生操作界面 图4-3 带选课界面截图 登陆之后学生可以看到如上的待选课界面。 图4-4 查询课程结果截图 可以选择课程ID、课程名、学时、学分、学期、性质对课程进行查询,出现如上界面。 图4-5 选课过程截图 依次输入所要选的课程的课程ID、课程名、学时、学分、学期、性质之后,检查确认无误之后提交。 图4-6 选课成功提示界面截图 提交之后便可看到如上的选课成功的提示界面,同时还提示还有多少人可以选择这门课程。 图4-7 重复选课提示界面截图如果重复选择了会出现如上界面提示学生已经选择了该课程 图4-8 选满学分提示界面截图 学生只能选择六个学分的课程,如果多于六个学分系统将出现如上的提示界面,并且自动退出。 第五章 系统测试与维护管理信息系统在完成研究开发、投入正常运行之后,就进入了系统测试与维护阶段。基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100