基于Java的学生选课系统Word文件下载.docx
《基于Java的学生选课系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于Java的学生选课系统Word文件下载.docx(31页珍藏版)》请在冰点文库上搜索。
2.2Java的开发工具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系统运行环境14
4.3学生选课系统运行截图15
4.3.1登陆页面(起始页)15
4.3.2学生操作界面16
第五章系统测试与维护19
5.1程序测试的目的19
5.2程序测试的意义19
5.3程序测试的原则19
5.4程序测试的流程20
第六章总结与展望21
参考文献21
第一章前言
1.1选题背景及意义
随着计算机技术和网络通讯技术的飞速发展,现在国内有很多大学的选课方式由传统的选择方式转变成了网上选课,学生可以在网上选择规定范围内的课程,并且可以在网上查询成绩。
无需自己去老师那一门一门查,了解自己已得多少学分还需多少学分,既节省了学生的时间,又便于学校的管理。
网上选课系统为同学提供了一个自由选择的平台,学生可以选修规定范围内的课程,查看已修学分总数,还可以修改个人信息。
本系统也为教师提供了很大的方便,教师可以根据统计的人数挑选一定数量的学生,也可以直接在网上公布成绩,让学生直接在网上查询成绩。
本系统方便了学生的选课,同时便于管理,减少大量的人力资源。
并且促进了学生的积极性,近而开发了网上选课系统。
1.2学生选课系统的发展和研究现状
进入21世纪以来,国内各高校都在积极推动教育体制的改革,为培养更为优秀的新世纪复合型人才做出努力。
然而在80年代以前,计算机还没有在国内普及各高校学生选课都是手工完成,不仅教师的工作量大,而且学生查询和检索时也很麻烦。
80年代后期,少数高校开始实行学年学分制,学生有了一定程度的选课自由。
学生在学校只需要修满学分就可以毕业,并且可以根据自己的喜好选择科目。
并且随着PC机的普及,有些高校已经开始应用电脑进行日常管理工作。
这时,学生选课系统诞生了。
但是,这些系统大多是基于DOS或者WINDOWS的单机版本,不仅界面不友好,而且功能薄弱。
各科系之间的数据交流只能借助软盘为中介,费时费力。
随着高校的规模扩大,教育体制改革的深化,这类系统已经不能适应管理上的要求。
90年代后期以来,各高校纷纷建立自己的高速校园网:
在技术上,客户机/服务器体系结构已经非常成熟,同时浏览器/服务器体系结构正在兴起,这些都为创建大型的学生选课系统创造了条件,满足了数据集中存放,管理运作分布执行的需求。
中心数据库存放学生选课系统的相关数据,管理人员通过网络访问数据库进行业务管理;
学生和任课教师可以通过浏览器查询相关数据。
目前国内各高校均有自己的选课系统。
1.3各章内容简介
本论文在第一章介绍了学生选课系统的研究意义以及研究现状,突出本系统研究的必要性;
第二章介绍Java语言和它的开发工具,以说明选择Java的好处;
第三章进行学生选课系统的需求分析,以使系统的模块更加清楚;
第四章介绍本系统各模块的功能以及它们的结构图,还有具体程序和注释以及运行结果截图;
第五章是介绍了程序测试的目的、意义、原则、流程,以使每一步程序的功能清晰地跃然纸上;
第六章对学生选课系统进行了总结以及对前景作了展望,使系统更加完美。
第二章Java语言以及开发工具
有了系统制作的必要性接下来是选择开发语言和工具,由于选择的Java制作,座椅本章节将对Java进行介绍以说明选择它进行学生选课系统开发的理由,并介绍几种Java的开发工具。
2.1Java背景知识介绍
2.1.1Java的起源
1991年四月份,Sun的绿色计划开始着手于发展消费性电子产品,所使用的语言是C、C++、及Oak(为Java语言的前身),后因语言本身和市场的问题,使得消费性电子产品的发展无法达到当初预期的目标,再加上网络的兴起,绿色计划也因此而改变发展的方向,这已是1994年了。
而这一次的改变,就是Java诞生的契机。
而Java这个名字不是由几个单词的首字所组成,而是从许多程序设计师钟爱的热腾腾、香浓咖啡中产生灵感的。
2.1.2Java的特点
Sun是要Java成为一个简单(Simple)、面向对象对象的(ObjectOriented)、分布式的(Distributed)、解释的(Interpreted)、健壮的(Robust)、安全的(Secure)、结构中立的(ArchitectureNeutral)、可移植的(Portable)、高效能的(HighPerformance)、多线程的(Multithreaded)、动态的(Dynamic)的程序语言。
面向对象的思想是Java语言的重要指导思想,最主要的重点是即将要用Java编写的程序,其次才是所需要的工具;
最近的即插即用(PlugandPlay)亦是面向对象设计的重点。
Java与C/C++最大不同点是Java有一个指针模型(PointerModel)来排除内存被覆盖(OverwritingMemory)和毁损数据(CorruptingData)的可能性。
总的来说Java有以下特点:
结构中立的(ArchitectureNeutral):
一般而言,网络是由很多不同机型的机器所组合而成的,CPU和作业系统体系结构均有所不同;
因此,如火如荼使一个应用程序可以在每一种机器上执行,是一个难题。
所幸,Java的编译器产生一种结构中立的目标文件格式(ObjectFileFormat);
这使得编译码得以在很多种处理器中执行。
可移植的(Portable):
原始资料形式的大小是被指定的,例如“float”一直是表示一个32位元IEEE754浮点运算数字,因绝大多数的CPU都具有此共同特征。
程序库属于系统的一部分,它定义了一些可移植的程序接口,Java本身具备有很好的可移植性。
解释的(Interpreted):
Java解释器能直接地在任何机器上执行Java位元码(Bytecodes),因此在进行程序连结时,时间的节省,这对于缩短程序的开发过程,有极大的帮助。
高效能的(HighPerformance):
Java位元码迅速地能被转换成机器码(MachineCode),从位元码转换到机器码的效能几乎与C于与C++没有分别。
多线程的(Multithreaded):
Java语言具有多线程的功能,这对于交互回应能力及即时执行行为是有帮助的。
动态的(Dynamic):
Java比C或C++语言更具有动态性,更能适应时刻在变的环境,Java不会因程序库的更新,而必须重新编译程序。
正如上文所述,Java是一种成熟的语言又有其他语言所不具有的特点,所以本系统采用Java编程实现。
2.2Java的开发工具
现在常用的Java项目开发环境有:
JBuilder、VisualAgeforJava、ForteforJava、VisualCafe、Eclipse、NetBeansIDE、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开发者自己编写的开放源代码插件,这类似于微软公司的VisualStudio和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学生选课系统程序及注释
publicclassStudentChooseCourseextendsJFrameimplementsActionListener{
JTextFieldjtfSearch=newJTextField(11);
String[]columnNames=newString[]{"
课程ID"
"
课程名"
学时"
学分"
学期"
性质"
};
DefaultTableModeldtmSearch=newDefaultTableModel(columnNames,27);
JTablejtSearch=newJTable(dtmSearch);
JScrollPanejspSearch=newJScrollPane(jtSearch);
JComboBoxjcbSearch=newJComboBox();
JTextFieldjtfSelectedCourse=newJTextField(10);
Connectioncon=null;
PreparedStatementps=null;
ResultSetrs=null;
privatestaticStringusrName;
privatestaticStringpasswrd;
//在构造方法中添加两个参数。
以便在"
提交"
时,将学生的身份连同所选的课程,一同记录在学生选课表中。
publicStudentChooseCourse(StringusrName,Stringpasswrd){
createSearchCourse();
this.usrName=usrName;
this.passwrd=passwrd;
}
publicStringgetUsrName(){
returnusrName;
publicvoidsetUsrName(StringusrName){
publicStringgetPasswrd(){
returnpasswrd;
publicvoidsetPasswrd(Stringpasswrd){
//根据用户的时间,做出相应的反映
publicvoidactionPerformed(ActionEvente){
Stringstr=e.getActionCommand();
//清空结果显示区中的内容,如果有的话。
if("
查询"
.trim().equals(str)){
intk=1;
while(k<
10){
for(inti=1;
i<
7;
i++){
jtSearch.setValueAt(null,k-1,i-1);
k++;
//调用下面的这个方法,在数据库中进行查找,并将结果显示在表格中。
searchAvailableCourse();
}elseif("
.equals(str)){
//processBeforeCommit()对用户选课操作进行有效性检验;
//剔除无效操作:
如输入无效的课程号,或已经选择了某一课程,已经选满的6学分等各种情况
booleaneffect=processBeforeCommit();
//如果课程存在,且该学生具有选择该课程的资格,即effect为true,进入正式提交程序(tryCommit())
if(effect==true)
{tryCommit();
//对用户选课操作进行有效性检验;
publicbooleanprocessBeforeCommit(){
//清空原结果显示区中的内容,如果有的话。
//取得用户输入的课程号
StringuserInput=jtfSelectedCourse.getText().toString().trim()
.toLowerCase();
//无效操作1:
在数据库中的coursexx表中查询该课程号。
如果不存在该课程,给出提示。
Stringsql="
selectcnofromcoursexxwherecno=?
"
;
booleanflagCourseExist=false;
try{
ps=con.prepareStatement(sql);
ps.setString(1,userInput);
rs=ps.executeQuery();
flagCourseExist=rs.next();
}catch(ExceptioneC){
eC.printStackTrace();
if(!
flagCourseExist){
JOptionPane.showMessageDialog(null,"
该课程不存在,请重新输入"
);
returnfalse;
//判断该学生选修课已选课程的总学分是否小于6;
//无效操作2:
如果已有选课记录,并且总学分大于6学分,该学生不能在选了。
sql="
selectsum(grade)"
+"
from(selectx.sname,o,k.gradegrade"
fromcoursexxkjoinchoicesxxx"
ono=oandx.sname=?
)result"
Stringgrade=null;
ps.setString(1,usrName);
while(rs.next()){
grade=rs.getString
(1);
if(grade==null){grade="
0"
}catch(Exceptionrrr){
rrr.printStackTrace();
System.out.println("
总学分:
"
+grade);
if(Integer.parseInt(grade)>
6){
你已经选满6学分,系统将退出"
this.setVisible(false);
//无效操作3:
课程该学生已经选择了某课程,则不能再选该课程了。
select*fromchoicesxxwheresname=?
andcno=?
booleanflag=false;
ps.setString(1,this.getUsrName());
ps.setString(2,userInput);
flag=rs.next();
}catch(Exceptioneaa){
eaa.printStackTrace();
if(flag){
你已经选择了该课程。
请另选课程"
//如果以上无效操作都不存在,则返回true,意为这是一个准有效操作
returntrue;
//对有效的提交操作的进行处理
publicvoidtryCommit(){
//userInput为用户输入的课程ID.
//ifcoursestillavailable(count<
MAX_STUDENT),saveresult.
//elseifcoursenotavailable,showMessagetostudent.
PreparedStatementps;
select(Max-selectedCount)asRemainedCount"
fromCoursexxwherecno=?
//取得学生ID或名字,将课程ID存入学生选课表choicesxx
ResultSetMetaDatameta=rs.getMetaData();
intcols=meta.getColumnCount();
intRemainedCount=-1;
RemainedCount=rs.getInt
(1);
RemainedCount:
+RemainedCount);
//如果该课程还有选择的名额,提示单项选课操作成功。
if(RemainedCount>
0){
//savestudentIdandcourseIdtostudent-coursetable.
//this.getUsrName();
userInput
insertintochoicesxxvalues(?
?
)"
ps.executeUpdate();
选课成功:
+this.getUsrName()
选了"
+userInput+"