基于java的学生信息管理系统设计与实现(完整资料)_第1页
基于java的学生信息管理系统设计与实现(完整资料)_第2页
基于java的学生信息管理系统设计与实现(完整资料)_第3页
基于java的学生信息管理系统设计与实现(完整资料)_第4页
基于java的学生信息管理系统设计与实现(完整资料)_第5页
已阅读5页,还剩108页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于java的学生信息管理系统设计与实现(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)

基于java的学生信息管理系统设计与实现基于java的学生信息管理系统设计与实现(完整资料)(可以直接使用,可编辑优秀版资料,欢迎下载)基于java的学生信息管理系统设计与实现摘要:利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高、存储量大、保密性好。本设计就是一个为实现信息化管理而开发的信息管理系统,能够进行信息存储、查询、修改等能功。该系统由六个模块构成,包括学生管理系统的主界面模块、学生信息管理模块、课程信息管理模块、成绩信息管理模块、信息查询模块和数据库操作模块。通过这些模块的有机结合,能方便的对学生信息进行综合管理,从而实现了信息化管理的目的。由于本人的能力有限,设计过程中难免有不足之处,设计中的存在问题本人将在日后进一步修改,以便让程序的设计更加完善.

关键词:oracle;

异常处理;关系模型目录TOC\o"1—3"\h\z\u_Toc296289665"1.1背景及意义11。2实验技术选择11.3课题实现技术的简要说明51。4可行性分析6HYPERLINK\l”_Toc296289669”2系统需求分析63。2。1结构设计103。2.2功能结构图105系统调试与测试175.1系统功能测试17HYPERLINK\l”_Toc296289678"5.2系统调试常见错误17HYPERLINK\l”_Toc296289679"6实验小结19,而这些子实体则是汽车的“孩子"。Java提供给用户一系列类(class),Java的类有层次结构,子类可以继承父类的属性和方法。与另外一些面向对象编程语言不同,Java只支持单一继承.②平台无关性Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性.JVM是一种抽象机器,它附着在具体操作系统之上,本身具有一套虚机器指令,并有自己的栈、寄存器组等。但JVM通常是在软件上而不是在硬件上实现。(目前,SUN系统公司已经设计实现了Java芯片,主要使用在网络计算机NC上。另外,Java芯片的出现也会使Java更容易嵌入到家用电器中。)JVM是Java平台无关的基础,在JVM上,有一个Java解释器用来解释Java编译器编译后的程序。Java编程人员在编写完程序后,通过Java编译器将Java源程序编译为JVM的字节代码.任何一台机器只要配备了Java解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。另外,Java采用的是基于IEEE标准的数据类型.通过JVM保证数据类型的一致性,也确保了Java的平台无关性.Java的平台无关性具有深远意义。首先,它使得编程人员所梦寐以求的事情(开发一次软件在任意平台上运行)变成事实,这将大大加快和促进软件产品的开发。其次Java的平台无关性正好迎合了“网络计算机”思想。如果大量常用的应用软件(如字处理软件等)都用Java重新编写,并且放在某个Internet服务器上,那么具有NC的用户将不需要占用大量空间安装软件,他们只需要一个Java解释器,每当需要使用某种应用软件时,下载该软件的字节代码即可,运行结果也可以发回服务器。目前,已有数家公司开始使用这种新型的计算模式构筑自己的企业信息系统.③分布式分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率.Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便得实现Java的分布式特性。④可靠性和安全性Java最初设计目的是应用于电子类消费产品,因此要求较高的可靠性。Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。首先,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;其次,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界,最后,Java提供了异常处理机制,程序员可以把一组错误代码放在一个地方,这样可以简化错误处理任务便于恢复。由于Java主要用于网络应用程序开发,因此对安全性有较高的要求。如果没有安全保证,用户从网络下载程序执行就非常危险。Java通过自己的安全机制防止了病毒程序的产生和下载程序对本地系统的威胁破坏.当Java字节码进入解释器时,首先必须经过字节码校验器的检查,然后,Java解释器将决定程序中类的内存布局,随后,类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后,客户端用户还可以限制从网络上装载的类只能访问某些文件系统.上述几种机制结合起来,使得Java成为安全的编程语言.⑤多线程线程是操作系统的一种新概念,它又被称作轻量进程,是比传统进程更小的可并发执行的单位。C和C++采用单线程体系结构,而Java却提供了多线程支持.Java在两方面支持多线程。一方面,Java环境本身就是多线程的。若干个系统线程运行负责必要的无用单元回收,系统维护等系统级操作;另一方面,Java语言内置多线程控制,可以大大简化多线程应用程序开发。Java提供了一个类Thread,由它负责启动运行,终止线程,并可检查线程状态.Java的线程还包括一组同步原语.这些原语负责对线程实行并发控制。利用Java的多线程编程接口,开发人员可以方便得写出支持多线程的应用程序,提高程序执行效率。必须注意地是,Java的多线程支持在一定程度上受运行时支持平台的限制。例如,如果操作系统本身不支持多线程,Java的多线程特性可能就表现不出来。⑵oracle数据库的特点●无范式要求,可根据实际系统需求构造数据库。●采用标准的SQL结构化查询语言.●具有丰富的开发工具,覆盖开发周期的各阶段。●支持大型数据库,数据类型支持数字、字符、大至4GB的二进制数据,为数据库的面向存储提供数据支持。●具有第四代语言的开发工具(SQL*formS、SQL*REPORTS、SQL*MENU等).●具有字符界面和图形界面,易于开发。●通过SQL*DBA控制用户权限,提供数据保护功能,监控数据库的运行状态,调整数据缓冲区的大小。●分布优化查询功能。●具有数据透明、网络透明,支持异种网络、异构数据库系统.并行处理采用动态数据分片技术.●支持客户机/服务器体系结构及混合的体系结构(集中式、分布式、客户机/服务器)。●实现了两阶段提交、多线索查询手段。●支持多种系统平台(HPUX、SUNOS、OSF/1、VMS、WINDOWS、WINDOWS/NT、OS/2).●数据安全保护措施:没有读锁,采取快照SNAP方式完全消除了分布读写冲突。自动检测死锁和冲突并解决。●数据安全级别为C2级(最高级)。●数据库内模支持多字节码制,支持多种语言文字编码。●具有面向制造系统的管理信息系统和财务系统应用系统。综上所述,选择java作为开发语言,oracle作为数据库开发工具是个不错的选择。java语言的面向对象、平台无关、分布式、多线程、可靠和安全等特性,使得开发出来的项目具有健壮性、可维护性、可移植性等特点.Oracle是目前最具权威的数据库产品,它具有的兼容性、可移植性、可联结性、高生产率和开放性的特点,使它成为当今众多的程序开发人员首选的数据库开发工具.所以本课题选择java和oracle作为开发技术是为今后开发更复杂的项目打下基础,以免到时候遇到相关的技术问题而不知所措。1。3课题实现技术的简要说明本课题主要运用了java图形编程和oracle数据库的操作。Java图形编程给用户提供了一个直观、易于与用户进行交互的图形界面。在图形编程中,运用了大量的java。swing包中的类,之所以选择swing包中的类而不选java.awt包中的类,主要是swing包中的类能给用户提供更好的观感.oracle数据库的操作这部分内容分成三部分来实现:首先,编写对数据库操作的类,包括:连接数据库、执行sql语句、关闭数据库连接等。其次,编写一个用于对学生信息进行数据库操作的类,包括:学生信息的增加、修改、删除和查询等。最后,编写一个用于对课程相关信息进行数据库操作的类,包括:对课程信息的增加、修改、删除、查询等等。通过结合图形编程和数据库编程,从而基本上实现了学生信息管理的基本功能,由于本人技术上的不足,难免有些地方需要改进,这些存在的问题都将成为本人前进的动力,并在日后更加完善本课题的设计。1.4可行性分析系统的性质为管理软件,因而数据库的设计与操纵是系统设计的核心。这里从两方面分析技术上的可行性。首先,对于java编程部分,java课已经开过。因此在课题设计中,对java图形编程方面的问题都能迎韧而解。其次,对于数据库的有关知识,本人运用了大量的时间对相关书籍的阅读以及上机实验,基本上掌握了运用oracle数据库技术,具备一定的系统分析与设计能力,熟悉数据库的设计与操纵;因而该系统的实现在技术上是可行的。2系统需求分析本课题根据学生信息管理综合分析,便出于方便管理考虑,将学生信息管理系统的功能总结起来,共需要实现以下几个方面功能:①管理学生信息管理所有学生的基本信息,对学生信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过学生学号查询出学生的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的学生表中。②管理课程信息管理所有课程的基本信息,包括对课程信息的添加、修改、删除等操作;可以根据各种条件查询出需要的信息,并对相应的信息进行操作.比如修改和删除,可以通过学生的学号查询出学生的相应课程信息,对相应的课程进行修改、删除操作。③学生选课与成绩根据学生的学号进行选课,登记所选课程的成绩;可以根据学号查询出选课信息与成绩。通过以上功能的设计与实现,并实现学生信息管理系统的基本功能.3学生信息管理系统设计3。1数据模型分析与设计数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等);模型的操纵部分规定了数据的添加、删除、显示、维护、打印、查找、选择、排序和更新等操作。数据库模型的分类:分层模型、关系模型、网络模型和对象模型.本课题选择的关系模型,关系模型是目前最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。关系数据模型具有下列优点:●关系模型与非关系模型不同,它是建立在严格的数学概念的基础上的。●关系模型的概念单一。无论实体还是实体之间的联系都用关系表示。对数据的检索结构也是关系(即表)。所以其数据结构简单、清晰,拥护易懂易用.●关系模型的存取路径对用户透明,从而具有更高的数据独立性、更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作.所以,关系数据模型诞生以后发展迅速,深受拥护的喜爱,这也是本课题选取关系数据模型的原因。当然,关系数据模型也有缺点,其中最主要的缺点是,由于存取路件对用户透明,查询效率往往不如非关系数据模型。因此为了提高性能,必须对用户的查询请求进行优化,增加了开发数据库管理系统的难度.本课题的关系数据模型的数据结构可分为三个表来表示:学生信息表(Student)、课程信息表(Course)、学生选课表(SC);学生信息表用于记录学生的基本信息,如表3—1;课程信息表用于记录课程的基本信息,如表3-2;学生选课表如下表3-3。这三个表对应的E-R图分别是:图3.1学生信息E—R图;图3。2课程信息E—R图;图3。3学生选课E-R图;如下图。表3-1学生信息表(Student)名称数据类型主键非空学号Number(10)YesYes学生姓名Varchar2NoYes性别Char(2)NoNo年龄Char(2)NoNo专业Varchar2NoNo学院Char(8)NoNo表3-2课程信息表(Course)名称数据类型主键非空课程编号Char(4)YesYes课程名称Varchar2NoYes授课教师Varchar2NoNo上课地点Varchar2NoNo课程类别Char(1)NoNo表3—3学生选课表(SC)名称数据类型主键非空学号Char(10)YesYes课程编号Char(4)YesYes成绩Number(4,1)NoNo学生学生学号学生姓名性别专业年级出生图3.1学生信息E-R图课程课程课程编号上课地点课程名称授课教师课程类别图3.2课程信息E-R图选课表选课表学号课程编号成绩图3.3学生选课E-R图3。2结构设计与结构功能图3。2。1结构设计根据对系统进行需求分析,本系统将分为4个模块:●学生管理管理学生基本信息,包括个人信息的添加、修改、删除以及选课信息的添加。●课程管理管理课程的基本信息,包括课程信息的添加、修改和删除。●成绩管理管理学生选课的成绩信息,包括成绩的登记与修改。●信息查询查询已经登记的信息,包括学生的基本信息、课程的基本信息与成绩信息。3.2.2功能结构图学生管理系统功能结构如图3。4所示。学生管理系统学生管理系统学生管理课程管理成绩管理信息查询添加增加删除学生查询增加课程查询修改修改修改删除学生选课成绩查询按姓名查询按学号查询按性别查询按专业查询按学院查询按课程名称查询查询所有科目成绩按授课老师查询图3.4学生管理系统功能结构图4系统实现该系统由6个模块构成,包括学生管理系统主界面模块、学生信息管理模块、课程信息管理模块、成绩信息管理模块、信息查询模块和数据操作模块。下面分别加以叙述:①学生管理系统主界面模块学生管理系统主界面模块包括StuMS.java和StuMain.java两个文件。StuMS是学生管理系统的主运行类,其中有运行整个程序的main方法,该文件生成了StuMain类的一个实例,从而生成了学生管理系统的界面,如图4.1所示。StuMain类继承自JFrame类,实现了ActionListener接口,他有一个不带参数的构造方法StuMain(),用来生成StuMain的实例。StuMain类将所有功能集中到菜单栏中,并通过调用其他模块来实现学生管理系统的各个功能。图4.1学生管理系统主界面②学生信息管理模块学生信息管理模块主要由StuInfo.java、AddStuInfo。java、EdiStuInfo。java、DelStuInfo.java、SelectCourse.java和StuInfoSearchSnum。java共计6个文件组成,其构成关系如图4.2所示。学生信息超类学生信息超类StuInfo.java增加学生信息AddStuInfo.java修改学生信息EdiStuInfo.java删除学生信息DelStuInfo.java学生选课SelectCourse.java按学号查询StuInfoSearchSnum.java按学号查询StuInfoSearchSnum.java图4.2学生信息管理模块功能结构图学生信息管理模块的6个文件组成了主界面中的“学生管理”菜单的内容,其中包括增加、修改、删除和学生选课功能,如图4.3所示。图4。3学生信息管理模块的运行界面③课程信息管理模块课程信息管理模块主要由CourseInfo。java、AddCourseInfo.java、EditCourseInfo。java、DelCourseInfo。java、CourseInfoSearchCnum.java这5个文件组成,其构成关系如图4.4所示。课程信息超类课程信息超类CourseInfo.java增加课程信息AddCourseInfo.java修改课程信息EditCourseInfo.java删除课程信息DelCourseInfo.java按课程号查询CourseInfoSearchCnum.java按课程号查询CourseInfoSearchCnum.java图4.4课程信息管理模块功能结构图课程信息管理模块中的5个类文件组成了主界面中“课程管理"菜单的内容,其中包括增加、修改和删除功能,如图4.5所示.图4。5课程信息管理模块运行界面④成绩信息管理模块成绩信息管理模块主要由GradeInfo。java、AddGradeInfo。java、EditGradeInfo.java这3个文件组成,其构成关系如图4.6所示。成绩管理超类成绩管理超类GradeInfo.java增加成绩信息AddGradeInfo.java修改成绩信息EditGradeInfo.java图4.6成绩信息管理模块功能结构图成绩信息管理模块中的3个类文件组成了主界面中的“成绩管理”菜单的内容,其中包括增加和修改功能,如图4.7所示.图4。7成绩信息管理模块的运行界面⑤信息查询模块信息查询模块主要包括学生查询、课程查询和成绩查询3个部分.信息查询的运行主截面如图4.8所示。图4.8学生信息查询模块的运行界面学生查询由StuSearchSnum.java、StuSearchSsex。java、StuSearchScollege.java、StuSearchSmajor。java和ResultStudent.java这6个文件组成,主要实现功能包括:按学号查询、按学生姓名查询、按性别查询、按学院查询与按专业查询。5系统调试与测试5.1系统功能测试功能测试主要是测试程序模块是否实现了设计中所要求的功能。功能测试中需要注意的有:(1)查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的。这里要注意的多个查询条件之间的关系。还有一些常识性的问题,比如按月查询,闰月中二月的天数.(2)录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台和后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因。还有就是必须录入的字段的设置时候有误。(3)测试删除功能中需要注意的是单击”删除"按钮后,一般会出现提示信息,询问是否确定删除。通常情况下,我们单击"确认"按钮查看信息是否被删除掉了,而忽略了单击”取消"按钮后程序的反应:这时有可能的是没有删除,还有一种可能是即便单击了”取消"按钮,也一样删除了数据。另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除掉了,即如果再按照这种查询方式查询,时候还能查询出来。有的时候需要在数据库中设立一个标志位,而不是真正的物理删除。所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志考虑在内.(4)关于修改功能的测试主要是看修改确认后是否数据真正已被修改了。这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。5.2系统调试常见错误1。NullPointerException异常一般是对一个为NULL值的变量进行操作引起的。为避免这种异常,最好在对变量操作之前检查,看它是否为NULL值。2.SQLException异常一般是由于SQL语句不正确引起的。为避免这种异常,最好在使用SQL语句的程序中捕获此SQL异常。3.NumberFormatException异常这是由于数字的格式错误而出现的例外。为了避免出现此类错误,一般必须保证数据格式输入正确。4。数据库连接垃圾回收在实际的开发应用中,通常出现某一个对象未能关闭的情况,为了防止这种情况的发生,可以在有关对数据库操作的Java类文件中增加自动回收函数,在JVM自动地回收对象时,取出使用的连接对象,判断是否关闭,如果没有关闭则关掉。代码如下所示:protectedvoidfinalize(){try{If(getConn()!=null&&!getConn()。isClosed()){rs。cloes();stm.close();conn.close();}}catch(SQLExceptione){}}6实验小结经过这次课题的设计并实现,尽管会遇到很多难题,但是让我更加受益的是在这次课题中得到的经验、心得和锻炼。我发现做实验的过程其实就是个不断的解决问题的过程,从中也感觉到实验成功的快乐,一个人永远有学不玩的知识,就算是实验中的知识点都学了,但在实际的应用过程中仍然会遇到不少问题,遇到问题时要做到两点:一个是“查”,一个是“问”。不懂的地方就得要自己找答案,可以从书本、网络中查找解决的答案;再一个就是问周边的同学.这次课程的设计给我所学的知识做了一个总结,为我深入学习编程做了铺垫。在本课题中存在的不足之处是在所难免的,本人将在日后加于改进。参考文献[1]王克宏、郝建文。Java技术教程[M]。北京:清华大学出版社,2002年9月。[2]蔡敏、徐慧慧、黄炳强.UML基础与Rose建模教程[M].北京:人民邮电出版社,2006年5月.[3]萨师煊、王珊.数据库系统概论(第三版)[M].北京:高等教育出版社,2005年12月。[4]

齐治昌、谭庆平、宁洪。

软件工程(第二版)[M]。

北京:高等教育出版社,2004年,3月.

[5]

周竞涛、赵寒。

Eclipse完全手册

[M]。

北京:电子工业出版社,2006年,8月.

[6]

Cay

S。Horstmann、Gary

Cornll.

叶乃文

等译。

Java核心技术

[M]

北京:机械工业出版社,2006年5月.[7]

蒙祖强、龚涛.

Oracle

10g

数据库Java开发.

北京:中国水利水电出版社,2005年6月。附录代码//AddStuInfo。javapackagecom.main;importjava。awt。event。ActionEvent;importjava.awt.event.ActionListener;importjava.sql.Connection;importjavax。swing。JButton;importjavax.swing。JComboBox;importjavax.swing。JFrame;importjavax.swing。JLabel;importjavax。swing.JTextField;importjavax。swing。JOptionPane;importcom.bean.Student;importcom.dao。StudentDao;importcom.db。DB;importcom.main。DelteStudent。delAction;publicclassAddStuInfoextendsJFrame{StudentDaostudao=newStudentDao();DBdb=newDB();Connectionconn=db.getConnection();JTextFieldsnoText=null;JTextFieldsnameText=null;JComboBoxsexcom=null;JTextFieldageText=null;JComboBoxclasscom=null;JComboBoxdepartcom=null;publicvoidinit(){//窗体设计this.setLayout(null);this。setTitle("学生信息管理系统");this.setSize(500,400);JLabeltitle=newJLabel(”学生信息维护模块———录入数据");title.setBounds(180,20,200,30);this.add(title);JLabelsnoLabel=newJLabel(”学号”);snoText=newJTextField();snoLabel.setBounds(20,60,40,25);snoText.setBounds(60,60,120,25);this.add(snoLabel);this.add(snoText);JLabelsnameLabel=newJLabel("姓名”);snameText=newJTextField();snameLabel.setBounds(220,60,40,25);snameText.setBounds(260,60,120,25);this.add(snameLabel);this.add(snameText);JLabelsexlabel=newJLabel("性别”);String[]sex={”男”,"女"};sexcom=newJComboBox(sex);sexlabel。setBounds(20,90,40,25);sexcom。setBounds(60,90,120,25);this。add(sexlabel);this.add(sexcom);JLabelageLabel=newJLabel("年龄");ageText=newJTextField();ageLabel.setBounds(220,90,40,25);ageText。setBounds(260,90,120,25);this.add(ageLabel);this。add(ageText);JLabelclasslabel=newJLabel(”班级");String[]classes={”信息081","信息082",”物流081”};classcom=newJComboBox(classes);classlabel。setBounds(20,120,40,25);classcom。setBounds(60,120,120,25);this。add(classlabel);this。add(classcom);JLabeldepartlabel=newJLabel("学院”);String[]depart={”造纸",”理学院”,"机电学院”};departcom=newJComboBox(depart);departlabel。setBounds(220,120,40,25);departcom.setBounds(260,120,120,25);this.add(departlabel);this。add(departcom);//录入数据JButtonaddbtn=newJButton(”录入”);addbtn。setBounds(150,180,60,30);addbtn.addActionListener(newaddAction());this。add(addbtn);//返回JButtonbackbtn=newJButton(”返回");backbtn.setBounds(230,180,60,30);backbtn。addActionListener(newBackAction());this.add(backbtn);this.setLocationRelativeTo(null);//使窗体居中this。setResizable(false);//固定窗体大小this.setVisible(true);//设置窗体可见//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭时,程序结束}//获取文本框或选择框的值publicStudentgetStudent(){Studentstu=newStudent();Stringsno=snoText。getText();//获取输入的学号Stringsname=snameText。getText();//获取姓名Stringsex=(String)sexcom。getSelectedItem();//获取性别intage=Integer。parseInt(ageText.getText().trim());//获取年龄StringclassName=(String)classcom.getSelectedItem();//获取班级Stringdepart=(String)departcom.getSelectedItem();//获取学院//封装信息stu.setSno(sno);stu.setName(sname);stu.setSex(sex);stu。setAge(age);stu。setClassName(className);stu.setDepart(depart);returnstu;}publicstaticvoidmain(String[]args){AddStudentaddstu=newAddStudent();addstu。init();}//录入的监听器classaddActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){Studentstu=getStudent();booleanb=studao。save(stu,conn);if(b){JOptionPane。showMessageDialog(null,”数据录入成功!");}else{JOptionPane.showMessageDialog(null,”学号已存在,数据录入失败!");}}}classBackActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){MainFramem=newMainFrame();m。init();}}}//DelStuInfo.javapackagecom。main;importjava.awt。event.ActionEvent;importjava.awt。event.ActionListener;importjava.sql.Connection;importjava.sql.SQLException;importjava.util。Vector;importjavax.swing。JButton;importjavax。swing.JComboBox;importjavax。swing。JFrame;importjavax。swing。JLabel;importjavax.swing.JOptionPane;importcom.bean。Student;importcom。dao.StudentDao;importcom.db.DB;importcom。main。AddStudent.BackAction;//删除学生信息publicclassDelStuInfoextendsJFrame{StudentDaostudao=newStudentDao();DBdb=newDB();Connectionconn=db.getConnection();JComboBoxsnocom=null;publicvoidinit(){//窗体设计this。setLayout(null);this。setTitle(”学生信息管理系统”);this。setSize(500,400);JLabeltitle=newJLabel("学生信息维护模块-——删除数据");title.setBounds(180,20,200,30);this.add(title);//选择学号JLabelsnoLabel=newJLabel(”请选择要删除学生信息的学号”);snoLabel.setBounds(20,60,200,25);this。add(snoLabel);try{Vectorvec=studao.getSno();snocom=newJComboBox(vec);//将数据库里的学号信息装入下拉框中snocom。setBounds(30,90,150,25);}catch(SQLExceptione){e。printStackTrace();}this。add(snocom);//删除数据JButtondelbtn=newJButton(”删除”);delbtn。setBounds(100,180,60,30);delbtn。addActionListener(newdelAction());this.add(delbtn);//返回JButtonbackbtn=newJButton("返回”);backbtn。setBounds(180,180,60,30);backbtn.addActionListener(newBackAction());this。add(backbtn);this。setLocationRelativeTo(null);//使窗体居中this.setResizable(false);//固定窗体大小this.setVisible(true);//设置窗体可见//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗体关闭时,程序结束}publicstaticvoidmain(String[]args){DelteStudentdelstu=newDelteStudent();delstu.init();}//删除的监听器classdelActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){Stringdelsno=(String)snocom.getSelectedItem();booleanb=studao.delete(delsno,conn);if(b){JOptionPane.showMessageDialog(null,"删除录入成功!");}else{JOptionPane.showMessageDialog(null,"删除录入失败!");}}}classBackActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){MainFramem=newMainFrame();m。init();}}}packagecom.main;importjava.awt.event。ActionEvent;importjava.awt.event.ActionListener;importjava.sql.Connection;importjava。sql.SQLException;importjava。util。Vector;importjavax。swing.JButton;importjavax.swing。JComboBox;importjavax.swing.JFrame;importjavax。swing。JLabel;importjavax。swing。JTextField;importjavax。swing。JOptionPane;importcom。bean.Student;importcom。dao。StudentDao;importcom.db。DB;importcom。main.AddStudent.BackAction;importcom。main.DelteStudent。delAction;publicclassEditFrameextendsJFrame{StudentDaostudao=newStudentDao();DBdb=newDB();Connectionconn=db.getConnection();JTextFieldsnameText=null;JComboBoxsexcom=null;JTextFieldageText=null;JComboBoxclasscom=null;JComboBoxdepartcom=null;JComboBoxsnocom=null;publicvoidinit(){//窗体设计this.setLayout(null);this。setTitle("学生信息管理系统”);this.setSize(500,400);JLabeltitle=newJLabel(”学生信息维护模块—--修改数据”);title。setBounds(180,20,200,30);this.add(title);JLabelsnoLabel=newJLabel("学号");snoLabel。setBounds(20,60,40,25);this。add(snoLabel);try{Vectorvec=studao。getSno();snocom=newJComboBox(vec);//将数据库里的学号信息装入下拉框中snocom.setBounds(60,60,120,25);}catch(SQLExceptione){e。printStackTrace();}this.add(snocom);JLabelsnameLabel=newJLabel(”姓名");snameText=newJTextField();snameLabel。setBounds(220,60,40,25);snameText。setBounds(260,60,120,25);this.add(snameLabel);this.add(snameText);JLabelsexlabel=newJLabel(”性别");String[]sex={”男”,”女"};sexcom=newJComboBox(sex);sexlabel。setBounds(20,90,40,25);sexcom。setBounds(60,90,120,25);this.add(sexlabel);this.add(sexcom);JLabelageLabel=newJLabel(”年龄");ageText=newJTextField();ageLabel。setBounds(220,90,40,25);ageText。setBounds(260,90,120,25);this。add(ageLabel);this。add(ageText);JLabelclasslabel=newJLabel("班级”);String[]classes={"信息081","信息082","物流081"};classcom=newJComboBox(classes);classlabel.setBounds(20,120,40,25);classcom。setBounds(60,120,120,25);this.add(classlabel);this.add(classcom);JLabeldepartlabel=newJLabel(”学院”);String[]depart={”造纸","理学院”,”机电学院"};departcom=newJComboBox(depart);departlabel.setBounds(220,120,40,25);departcom。setBounds(260,120,120,25);this.add(departlabel);this。add(departcom);//修改JButtoneditbtn=newJButton(”修改");editbtn.setBounds(150,180,60,30);editbtn.addActionListener(neweditAction());this。add(editbtn);//返回JButtonbackbtn=newJButton("返回”);backbtn.setBounds(220,180,60,30);backbtn.addActionListener(newBackAction());this.add(backbtn);this。setLocationRelativeTo(null);//使窗体居中this。setResizable(false);//固定窗体大小this。setVisible(true);//设置窗体可见//this.setDefaultCloseOperation(JFrame。EXIT_ON_CLOSE);//窗体关闭时,程序结束}//获取文本框或选择框的值publicStudentgetStudent(){Studentstu=newStudent();Stringsno=(String)snocom.getSelectedItem();//获取输入的学号Stringsname=snameText.getText();//获取姓名Stringsex=(String)sexcom.getSelectedItem();//获取性别intage=Integer.parseInt(ageText。getText().trim());//获取年龄StringclassName=(String)classcom。getSelectedItem();//获取班级Stringdepart=(String)departcom.getSelectedItem();//获取学院//封装信息stu.setSno(sno);stu.setName(sname);stu.setSex(sex);stu.setAge(age);stu.setClassName(className);stu.setDepart(depart);returnstu;}publicstaticvoidmain(String[]args){EditFrameeditstu=newEditFrame();editstu。init();}//修改监听器classeditActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){Studentstu=getStudent();booleanb=studao。edit(stu.getSno(),stu。getName(),stu。getSex(),stu。getAge(),stu.getClassName(),stu。getDepart(),conn);if(b){JOptionPane。showMessageDialog(null,”数据修改成功!");}else{JOptionPane。showMessageDialog(null,"数据修改失败!");}}}classBackActionimplementsActionListener{publicvoidactionPerformed(ActionEvente){MainFramem=newMainFrame();m。init();}}}

基于Android教务信息管理系统摘要:针对目前高校教务信息系统的不足,提出一种基于Android的教务信息查询管理系统,它不仅可以帮助师生查询常用信息,同时系统也提供学生选课、上课提醒等实用的辅助功能,为本校大学生使用教务系统提供便利。该系统充分利用Android平台的功能特点,采用Http请求方式完美实现手机端和服务器数据通信,利用jsoup和sax等方法进行数据解析处理,同时也对界面进行精心的设计,增强用户的体验。关键词:Android;教务信息管理系统;手机客户端;UIAcademicInformationManagementSystembasedonAndroidAbstract:Forlessthanthecurrentuniversityeducationalinformationsystems,theSenateproposedaAndroid—basedinformationsystem,whichcanbeusednotonlytohelpstudentsandteachersqueryinformation,andthesystemalsoprovidesstudentenrollment,schoolremindersandotherusefulauxiliaryfunctions,deanoftheUniversityStudents’useThesystemprovidesconvenience.ThesystemfeaturesfulladvantageoftheAndroidplatform,usingHttprequestmethodtoachievetheperfectmobileclientandserverdatacommunicationusingjsoupandsaxandothermethodsofdataanalysisprocessing,butalsoontheinterfacecarefullydesignedtoenhancetheuserexperience.Keywords:Android;AcademicInformationManagementSystem;Mobileclient;UI;目录TOC\o”1-3”\h\z\uHYPERLINKﻩ ﻩandroid:id=”@+id/radio_button0” ﻩ android:checked=”true” style="@style/main_tab_bottom"/〉从上述代码可以看到,在菜单的每个选项卡样式都是调用了style上的main_tab_bottom来实现样式的,而main_tab_bottom的背景background的值是@drawable/btn_bg,btn_bg不是一个简单的背景图片,而是一个xml文件,通过这个文件可以实现菜单选项卡切换时的背景切换的效果,使得这个菜单栏更加的美观,代码是使用了安卓的selector来实现,在这里是通过不停的条件来判断使用哪一个item的,里面包括了几个属性值,如是否获得焦点、是否响应事件、是否点击三个条件。实施的代码如下:〈selectorxmlns:android=”http://schemas。android.com/apk/res/android”><itemandroid:state_focused="true"android:state_enabled=”true”android:state_pressed="false"android:drawable=”@drawable/btn_bg_s"/〉〈itemandroid:state_enabled=”true”android:state_pressed="true"android:drawable="@drawable/btn_bg_s"/〉<itemandroid:state_enabled="true"android:state_checked=”true"android:drawable="@drawable/btn_bg_d"/>〈/selector>制定完主页面布局后,在src/com.manage。activity下的MainPage文件中OnCreate(OnCreate方法是用来初始化Activity实例对象的)中调用布局,到现在为止顶部菜单栏的布局已经基本完成,但现在里面所对应的内容还是空的.所以就需要在这里给tabHost中添加tab内容,以第一格的tab为例,先是通过Intent的方式新建个mDate,用来实现页面的跳转的方法,然后动态用tabHost来通过addTab的方法添加对应TabSpec的值和各个属性。最后在添加RadioGroup的选择操作函数,这里是通过switch来完成对应按钮的功能的实现,在每个case项中通过tabHost。setCurrentTabByTag来给与特定的值实现页面上的跳转.最终的效果如图4-1:图4—2主页界面头部菜单4.2.2页面跳转在Main_bootom_Tab中添加两个页面,里面添加系统的功能选项。第一个为MainActivity,第二个为ChoiseCourse。实现效果如下图所示:图4—3系统主界面其中每一个选项是一个自定义的RelativeLayout,定义样式为:〈RelativeLayout android:id=”@+id/course"ﻩ ﻩandroid:layout_width=”wrap_content"android:layout_height=”wrap_content”android:layout_marginTop=”5dip"android:gravity=”center_vertical”android:clickable="true">ﻩ <ImageViewﻩ android:id="@+id/add_friend_shake” android:layout_marginLeft=”10dip" ﻩandroid:layout_width=”40dip" android:layout_height="40dip”ﻩ android:layout_margin="4dip" ﻩandroid:src="@drawable/tqyb"/>〈TextViewandroid:id=”@+id/miaoshuzbcs"ﻩﻩandroid:layout_width="wrap_content” android:layout_height="wrap_content"ﻩﻩandroid:layout_toRightOf=”@id/add_friend_shake" android:layout_marginLeft="10dip" android:layout_marginTop="4dip” android:textColor="#068FFF” ﻩandroid:textSize="14sp" android:text="已选课程”/>ﻩ <TextView android:layout_width=”wrap_content"ﻩ android:layout_height="fill_parent”ﻩﻩandroid:layout_toRightOf="@id/add_friend_shake"ﻩﻩandroid:layout_below=”@id/miaoshuzbcs" android:layout_marginLeft=”10dip”ﻩ android:textColor=”#666666" android:textSize=”8sp" android:padding="2dip”ﻩﻩﻩ android:text="(查询当学期所选课程的详细信息)"/〉ﻩﻩﻩ<ImageView android:layout_width="wrap_content" ﻩandroid:layout_height="wrap_content” android:layout_centerVertical=”true”ﻩ android:layout_alignParentRight=”true”ﻩﻩandroid:src="@drawable/mm_submenu"/>ﻩﻩﻩﻩ ﻩﻩ</RelativeLayout>在主类当中通过results=(RelativeLayout)findViewById(R.id。results);方法直接得到一个对象,然后对象上绑定监听器。results.setOnClickListener(newgotoActivity());通过判断所点击的对象的ID将Intent中添加标志,最后用Intent对象启动新Activity,具体实现代码如下:classgotoActivityimplementsOnClickListener{ﻩ publicvoidonClick(Viewv){ﻩ Intentintent=newIntent();ﻩﻩﻩintent.setClass(MainActivity。this,resInformation.class);ﻩ if(v。getId()==R.id.results){intent。putExtra("mark”,"1");ﻩﻩﻩ}elseif(v.getId()==R.id。course){ ﻩ intent.putExtra(”mark","2");} ﻩelseif(v.getId()== R。id。schedule){ ﻩ ﻩintent。putExtra("mark",”3");} ﻩelseif(v。getId()==R.id。status){ ﻩﻩﻩSystem。out。println("第四个页面-——-->waterlevenow——logn!!”);ﻩ ﻩﻩintent。putExtra(”mark”,"4");} ﻩ elseif(v.getId()==R。id.examinfi){ ﻩﻩﻩSystem.out。println("第五个页面——〉waterlevenow——logn!!”); ﻩ intent。putExtra("mark","5");ﻩ }else{return;}ﻩﻩﻩMainActivity.this.startActivity(intent); }新启动的Activity被启动后,去除Intent中传入的键值对,通过标志信息的判断,来选择所需要发送的URL。由前期分析的到,学校教务系统只能通过http请求发送接收数据,从系统整体结构分析,加个连接池类可以增加系统的可扩展性与可管理性。整个连接池类只作为字符串的返回与修饰,在这里不做介绍。4.2。3通过WebView显示信息在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。WebKit是MacOSXv10.3及以上版本所包含的软件框架。同时,WebKit也是MacOSX的Safari网页浏览器的基础。WebKit是一个开源项目,主要由KDE的KHTML修改而来并且包含了一些来自苹果公司的一些组件。传统上,WebKit包含一个网页引擎WebCore和一个脚本引擎JavaScriptCore,它们分别对应的是KDE的KHTML和KJS.不过,随着JavaScript引擎的独立性越来越强,现在WebKit和WebCore已经基本上混用不分。在这里通过添加一个WebView来显示服务器返回的页面,实现代码如下:packagecom。keen.electivesystem;importcom.keen.electivesystem.utils。ExtractionUrl;.keen。electivesystem.utils.myApplication;importandroid.app.Activity;importandroid.content。Intent;importandroid.os.Bundle;importandroid.view.KeyEvent;importandroid.webkit.WebView;importandroid。webkit.WebViewClient;publicclassresInformationextendsActivity{ﻩprivateWebViewwebview;ﻩprivatemyApplicationmyApp;ﻩ@OverrideﻩprotectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstubﻩ super。onCreate(savedInstanceState); setContentView(R。layout.resinfo);ﻩ Stringurl=null;ﻩ myApp=(myApplication)getApplication(); ExtractionUrlfacUrl=newExtractionUrl(); Intentintent=getIntent(); Stringmark=intent。getStringExtra(”mark");ﻩﻩintmk=Integer.parseInt(mark); ﻩswitch(mk){ﻩ case1:url=facUrl.getResults(myApp。getStid());break; case2:url=facUrl.getCourse(myApp.getStid()); break; ﻩcase3:url=facUrl。getSchedule(myApp。getStid(),myApp.getStuName()); ﻩ break; case4:url=facUrl.getStatus(myApp.getStid(),myApp。getDpcode_g()); ﻩbreak;ﻩﻩcase5:url=facUrl.getExamInfi(myApp.getStid());break;ﻩﻩcase6:ﻩﻩﻩStringcuid=intent.getStringExtra("cuid"); ﻩﻩStringtpcode=intent.getStringExtra("tpcode");ﻩ Stringstid=myApp。getStid();ﻩﻩﻩStringgrade=myApp.getDpcode_g(); Stringspid=myApp.getDpid();ﻩ Stringclid=myApp。getUserOther(); Stringfx=myApp。getFx(); url=facUrl.getCourseDetail(cuid,tpcode,stid,grade,spid,clid,fx); System.out.println(url); }ﻩ ﻩwebview=(WebView)findViewById(R.id.webview);ﻩ//设置WebView属性,能够执行Javascript脚本ﻩwebview。getSettings().setJavaScriptEnabled(true); //加载需要显示的网页 webview。loadUrl(url); //设置Web视图 webview.setWebViewClient(newHelloWebViewClient());}ﻩ@Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){webview。goBack();//goBack()表示返回WebView的上一页面returntrue;}returnfalse;}privateclassHelloWebViewClientextendsWebViewClient{@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){view.loadUrl(url);returntrue;}}}通过重写WebView的onKeyDown方法可以解决点击返回键时直接退出页面。4。3选课功能实现选课功能由于数据量比较多,但对于一般学生用户而言选课只能选择所对应专业的课程与通识课程,所以在这里其他专业的课程将不做显示。4.3。1页面设计学生选课由于需要显示的项比较多,但在手机界面显示项目太多会影响用户对其操作与体验。所以在这里,只显示了教师,学分,课程名称,以及教室。整个信息主要使用ListView动态加载可选课程信息.ListView所需要的布局文件如下:〈LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas。android。com/tools”android:layout_width="fill_parent"android:layout_height=”fill_parent”ﻩandroid:orientation=”horizontal” android:paddingLeft="1dip” android:paddingRight=”1dip"android:paddingTop=”1dip" android:paddingBottom="1dip”〉 <LinearLayoutﻩandroid:id="@+id/listLinearL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论