- 2.76 MB
- 2022-08-08 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
南华大学计算机科学与技术学院实验报告(2015~2016学年度第二学期)课程名称Java语言与网络编程实验名称学生管理系统专业软件工程班级教师12姓名:学号:\n一、实验目的及要求1.掌握下载安装JDK,SQL,eclipse2.掌握使用JDBC连接数据库的方法,学会安装JDBC驱动3.掌握编写与运行java程序的方法4.了解java语言,并熟练的使用二、实验设备(环境)及要求操作系统Windows10Enterprise64位(DirectX12)处理器英特尔Corei5-4210U@1.70GHz双核主板华硕X455LD(英特尔Haswell-ULT)内存4GB(DDR31600MHz)主硬盘希捷ST500LT012-1DG142(500GB/5400转/分)显卡英特尔Haswell-ULTIntegratedGraphicsController(1GB/华硕)数据库MySqlJava运行环境JDK1.8编译环境eclipse-x64-mars三、项目介绍及需求分析作为计算机应用的一部分,使用计算机对学校的各类信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查询方便、效率高、可靠性好、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学校信息管理的效率,也是一个单位科学化、正规化管理,与世界接轨的重要条件。学生信息管理系统的功能总结起来,共需要以下几个方面:1.学生信息管理管理所有学生的基本信息,包括增加、修改、删除等,也可以根据各种条件查询出需要的信息。2.课程信息管理管理所有课程的基本信息,包括增加、修改、删除等,也可以根据各种条件查询出需要的信。3.选课与成绩管理根据学号进行选课,登记课程的成绩,可以根据学号查询出来选课信息与成绩。四、系统设计4.1结构设计根据对系统的需求分析,本系统将分为4个模块:l学生管理:管理学生的基本信息,包括个人信息的添加、修改、删除,以及选课信息的添加。\nl课程管理:管理课程的基本信息,包括课程信息的添加、修改和删除。l成绩管理:管理学生的选课的成绩信息,包括成绩的登记与修改。l信息查询:查询已经登记的信息,包括学生的基本信息、课程的基本信息与成绩信息。4.2功能结构图\n学生管理系统学生管理课程管理成绩管理信息查询增加修改删除学生选课增加修改删除增加修改学生查询课程查询成绩查询按学号查询按姓名查询按专业查询按性别查询按学院查询按课程名称查询按授课教师查询查询所有成绩待实现待实现\n1.14.3功能流程以及工作流描述1.增加学生信息系统操作人员打开学生信息添加界面,输入相关的信息(姓名、性别、民族、籍贯、出生日期、入学年份、专业和学院等),在数据库中添加相关数据。2.修改学生信息根据学生的学号查询出该学生的相关信息,修改相关条目后保存在数据库中。3.删除学生信息根据学生的学号查询出该学生的相关信息,确定删除后,在数据库中删除该信息。4.学生选课选择学生学号与需要选择的课程,确定无误后保存,数据库中将自动添加新的选课记录。5.增加课程信息系统操作人员根据打开的课程增加界面,输入相关信息(课程名称、授课教师、课程学分、课程系数、上课地点等),在数据库中添加相关的数据。6.修改课程信息根据课程号查询出该课程的相关信息,修改条目后保存在数据库中。7.删除课程信息根据课程号查询出该课程的相关信息,确认删除后,在数据库中删除该信息。8.登记成绩根据学号,以及该学生所选择的课程,进行成绩登记,为选课的同学将无法登记。9.修改成绩对已经登记的成绩信息进行修改。10.学生查询可以根据学生学号、学生姓名、学生性别、学生所学专业、学生所属学院来对学生信息进行查询,所有符合查询条件的学生信息将都被显示出来。11.课程查询按照课程名称和授课教师的名称对课程详细信息进行查询,所有符合查询条件的课程信息都将会被显示出来。12.成绩查询:根据学生的学号来查询该学生所有课程的成绩。一、数据库设计1.25.2数据表的设计数据库中包含四个表,即是学生信息表(student)、课程信息表(Course)、教师账号信息表(teacher)和学生选课表(SC),设计要求如表所示。表1学生信息表(Student)\n名称字段名称数据类型主键非空学号SnumVarchar(20)YesYes学生密码SpasswordVarchar(10)NoNo学生姓名SnameVarchar(10)NoNo性别SsexVarchar(2)NoNo民族SethnicVarchar(4)NoNo籍贯ShomeVarchar(20)NoNo入学年份SyearVarchar(10)NoNo专业SmajorVarchar(10)NoNo学院ScollegeVarchar(10)NoNo出生日期SbirthVarchar(10)NoNo学分绩点SpointVarchar(10)NoNo表2课程信息表(Course)名称字段名称数据类型主键非空课程编码CnumVarchar(10)YesYes课程名称CnameVarchar(20)NoNo授课教师CteacherVarchar(10)NoNo上课地点CplaceVarchar(10)NoNo课程学分CpointVarchar(20)NoNo上课时间CtimeVarchar(20)NoNo表3学生选课表(SC)名称字段名称数据类型主键非空学号SnumVarchar(20)YesYes课程编码CnumVarchar(10)YesYes成绩GradeFloat(4,2)NoNo表4教师账号信息表(teacher)名称字段名称数据类型主键非空教师号TnumVarchar(20)YesYes密码TpasswordVarchar(20)YesYes数据表Student的数据库操作语句是:createtableStudent(Snumvarchar(20)primarykey,Spasswordvarchar(20),SnameVarchar(20),Ssexvarchar(2),Sethnicvarchar(4),ShomeVarchar(20),Syearvarchar(10),SmajorVarchar(10),Scollegevarchar(10),Sbirthvarchar(10),\nSpointvarchar(10));数据表Course的数据库操作语句是:createtableCourse(Cnumvarchar(10)primarykey,CnameVarchar(20),Cteathervarchar(10),Cplacevarchar(10),CpointVarchar(20),CtimeVarchar(20));数据表SC的数据库操作语句是:createtableSC(Snumvarchar(20),Cnumvarchar(10),GradeVarchar(20),primarykey(Snum,Cnum),);数据表Teacher的数据库操作语句是:createtableTeacher(Tnumvarchar(20),Tpasswordvarchar(10),primarykey(Snum,Cnum),);一、详细设计1.登陆界面模块登陆界面模块包括的类为loginFrame.java实现了用户根据账户密码登陆,为学生登陆和教师登陆,实现了密码验证。运行界面如图:2.主界面模块\n主界面模块分为:教师主菜单界面,学生主菜单界面,教师具有管理功能,学生具有查询功能。包括studentLoginFrame.java和teacherLoginFrame.java两个文件,里面集成了本项目所有的方法,通过调用各个不同功能的方法实现不同的功能!主要功能用Jmenu来实现,界面中央是用艺术字画出来的学生管理系统字样,以下是两个主界面的运行截图:\n1.学生信息管理模块学生信息管理模块:主要由addStuInfoFrame.javadeleteStudentInfoFrame.javachangeStudentInfoFrame.javastudentChooseCourse.java四个文件组成,addStuInfoFrame类是用于添加学生信息,deleteStudentInfoFrame类用于删除已经存在的学生信息,changeStudentInfoFrame类主要用来修改学生信息,studentChooseCourse类就是用来学生学课的主界面,这四个类一起组成了学生信息管理模块,以下是程序运行截图:\n\n1.课程信息管理模块课程信息管理模块:本模块由addCourseInfoFrame.javachangeCourseInfoFrame.javadeleteCourseInfoFrame.java三个文件组成,addCourseInfoFrame类实现课程的新增,changeCourseInfoFrame类实现课程信息的修改,deleteCourseInfoFrame类实现课程信息的删除。以下是程序的运行截图:2.成绩信息管理模块成绩信息管理模块:本模块由:addGradeInfo.javachangeGradeInfo.java两个文件组成,addGradeInfo实现新增成绩changeGradeInfo实现修改成绩以下是程序运行截图:\n1.学生信息查询模块学生信息查询模块由一个大类:serchStuInfo.java实现,其中分为按学号,姓名,专业,性别,学院。等五种查询方式,学生信息的显示方式是:将学生信息显示在Jtable中,以下是该模块的运行截图:\n1.课程查询模块课程查询模块由serchCourseInfo.java构成分为按课程名,按课程编号,按授课老师。查询,以下是运行截图。2.成绩查询模块该模块由studentLoginFrame.java构成以下是运行截图3.修码修改及小工具模块\n修改密码由changePasswordFrame.java和changepasswordStuFrame.java两个文件组成分别控制老师和学生的密码修改功能,小工具则是调用系统自带的记事本和计算器给用户提供方便以下是程序运行截图:\n一、实验结果(源程序)与数据处理Dbconnection包//////////////////////////////////dbconnection.java///////////////////////****数据库连接相关类*/packagecom.system.dbconnection;importjava.io.UnsupportedEncodingException;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;publicclassdbconnection{privateStatementstmt=null;privateResultSetrs=null;privateConnectionconn=null;//声明一个数据库连接Stringsql;publicinterfacejdbcConfig{StringDRIVER="com.mysql.jdbc.Driver";StringURL="jdbc:mysql://localhost:3306/studentsys";StringUSERNAME="root";StringPASSWORD="154451";}\n/****打开数据库连接*@throwsException*/publicvoidOpenconn(){try{Class.forName(jdbcConfig.DRIVER);conn=DriverManager.getConnection(jdbcConfig.URL,jdbcConfig.USERNAME,jdbcConfig.PASSWORD);//System.err.println("数据库连接成功!!!");conn.setAutoCommit(false);//不自动执行语句}catch(ClassNotFoundException|SQLExceptione){e.printStackTrace();}}/***执行SQL语句,返回结果集rs*/publicResultSetexcuteQuery(Stringsql){stmt=null;try{stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//结果集的游标可以上下移动,当数据库变化时,当前结果集不变||不能用结果集更新数据库中的表rs=stmt.executeQuery(sql);}catch(SQLExceptione){System.err.println("executeQuery:"+e.getMessage());e.printStackTrace();}returnrs;}/****执行SQL语句更新*@paramsqlexcuteUpdate*@return*/publicintexcuteUpdate(Stringsql){stmt=null;rs=null;intk=0;try{\nstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);k=stmt.executeUpdate(sql);conn.commit();}catch(SQLExceptione){System.err.println("excuteUpdate:"+e.getMessage());//获取异常信息e.printStackTrace();}returnk;}/****关闭数据库连接*/publicvoidcloseConn(){try{conn.close();}catch(SQLExceptione){System.err.println("aq.close:"+e.getMessage());//获取异常信息e.printStackTrace();}}/****转换编码*@paramstrUTF-8字符串*@returnGBK字符串*/publicStringtoGBK(Stringstr){if(str==null){str="";}else{try{str=newString(str.getBytes("ISO-8859-1"),"GBK");}catch(UnsupportedEncodingExceptione){e.printStackTrace();}}returnstr;}}\n//////////////////////////////////main.java///////////////////////****主函数相关类*/packagecom.system.main;importcom.system.dbconnection.dbconnection;importcom.system.model.stuBean;importcom.system.view.changePasswordFrame;importcom.system.view.loginFrame;importcom.system.view.studentLoginFrame;publicclassmain{publicstaticvoidmain(String[]args){//stuBeansBean=newstuBean();//sBean.getAllId();//sBean.getAllPass();loginFrameloginFrame=newloginFrame();//新建一个登陆界面}}//////////////////////////////////corseBean.java//////////////////////packagecom.system.model;importjava.sql.ResultSet;importjavax.swing.JOptionPane;importcom.system.dbconnection.dbconnection;publicclasscorseBean{Stringsql;ResultSetrs=null;StringcNum;StringcName;StringcTeacher;StringcPlace;StringcPoint;StringcTime;StringsNum;StringcolName;//列名StringcolValue;//列值\n/***添加课程信息*/publicvoidcrsAdd(Stringnum,Stringname,Stringteacher,Stringplace,Stringpoint,Stringtime){dbconnectionDB=newdbconnection();this.cNum=num;this.cName=name;this.cTeacher=teacher;this.cPlace=place;this.cPoint=point;//学分this.cTime=time;//上课时间if(cName==null||cName.equals("")){JOptionPane.showMessageDialog(null,"请输入课程名称","错误",JOptionPane.ERROR_MESSAGE);return;}else{sql="insertintocourse(cnum,cname,Cteather,cplace,cpoint,ctime)values('"+cNum+"','"+cName+"','"+cTeacher+"','"+cPlace+"','"+cPoint+"','"+cTime+"')";try{DB.Openconn();DB.excuteUpdate(sql);JOptionPane.showMessageDialog(null,"成功添加一条新的纪录!");}catch(Exceptione){JOptionPane.showMessageDialog(null,"保存失败","错误",JOptionPane.ERROR_MESSAGE);}finally{DB.closeConn();}}}/***修改课程信息*/\npublicvoidcrsModify(Stringnum,Stringname,Stringteacher,Stringplace,Stringpoint,Stringtime){dbconnectionDB=newdbconnection();this.cNum=num;this.cName=name;this.cTeacher=teacher;this.cPlace=place;this.cPoint=point;this.cTime=time;if(cName==null||cName.equals("")){JOptionPane.showMessageDialog(null,"请输入课程名称","错误",JOptionPane.ERROR_MESSAGE);return;}else{sql="updatecoursesetcname='"+cName+"',Cteather='"+cTeacher+"',cPlace='"+cPlace+"',cpoint='"+cPoint+"',cTime='"+cTime+"'wherecnum='"+cNum+"'";try{DB.Openconn();DB.excuteUpdate(sql);JOptionPane.showMessageDialog(null,"成功修改一条新的纪录!");}catch(Exceptione){System.out.println(e);JOptionPane.showMessageDialog(null,"更新失败","错误",JOptionPane.ERROR_MESSAGE);}finally{DB.closeConn();}}}/***根据课程号,搜索课程名称等相关信息*/publicString[]crsSearch(Stringnum){dbconnectionDB=newdbconnection();this.cNum=num;String[]s=newString[5];sql="select*fromcoursewherecnum='"+cNum+"'";\ntry{DB.Openconn();rs=DB.excuteQuery(sql);if(rs.next()){s[0]=rs.getString("Cname");s[1]=rs.getString("Cteather");s[2]=rs.getString("Cplace");s[3]=rs.getString("Cpoint");s[4]=rs.getString("Ctime");}elses=null;}catch(Exceptione){}finally{DB.closeConn();}returns;}/***根据课程名称,搜索课程号*/publicString[]crsNameSear(Stringname){dbconnectionDB=newdbconnection();String[]s=newString[6];this.cName=name;DB.toGBK(cName);sql="select*fromcoursewherecname='"+cName+"'";try{DB.Openconn();rs=DB.excuteQuery(sql);if(rs.next()){s[0]=rs.getString("cname");s[1]=rs.getString("Cteather");s[2]=rs.getString("cplace");s[3]=rs.getString("cpoint");s[4]=rs.getString("cTime");s[5]=rs.getString("cnum");}else\ns=null;}catch(Exceptione){System.out.println(e);}finally{DB.closeConn();}returns;}/***删除课程信息*/publicvoidcrsDel(Stringnum){dbconnectionDB=newdbconnection();this.cNum=num;sql="deletefromcoursewherecnum='"+cNum+"'";try{DB.Openconn();DB.excuteUpdate(sql);JOptionPane.showMessageDialog(null,"成功删除一条新的纪录!");}catch(Exceptione){System.out.println(e);e.printStackTrace();JOptionPane.showMessageDialog(null,"删除失败","错误",JOptionPane.ERROR_MESSAGE);}finally{DB.closeConn();}}/***获得course表中的所有课程号cnum*/publicString[]getAllId(){String[]s=null;introw=0;inti=0;dbconnectionDB=newdbconnection();sql="selectcnumfromcourse";\ntry{DB.Openconn();;rs=DB.excuteQuery(sql);if(rs.last()){row=rs.getRow();}if(row==0){s=null;}else{s=newString[row];rs.first();rs.previous();while(rs.next()){s[i]=rs.getString(1);i++;}}}catch(Exceptione){System.out.println(e);}finally{DB.closeConn();}returns;}/***获得course表中的所有教师姓名*/publicString[]getTeaName(){String[]s=null;introw=0;inti=0;dbconnectionDB=newdbconnection();sql="selectCteatherfromcourse";try{DB.Openconn();;rs=DB.excuteQuery(sql);if(rs.last()){row=rs.getRow();}\nif(row==0){s=null;}else{s=newString[row];rs.first();rs.previous();while(rs.next()){s[i]=rs.getString(1);i++;}}}catch(Exceptione){System.out.println(e);}finally{DB.closeConn();}returns;}/***获得course表中的所有课程名称*/publicString[]getAllName(){String[]s=null;introw=0;inti=0;dbconnectionDB=newdbconnection();sql="selectcnamefromcourse";try{DB.Openconn();rs=DB.excuteQuery(sql);if(rs.last()){row=rs.getRow();}if(row==0){s=null;}else{s=newString[row];rs.first();\nrs.previous();while(rs.next()){s[i]=rs.getString(1);i++;}}}catch(Exceptione){System.out.println(e);}finally{DB.closeConn();}returns;}//课程综合查询publicString[][]crsAllSearch(Stringcolname,Stringcolvalue){this.colName=colname;this.colValue=colvalue;dbconnectionDB=newdbconnection();String[][]cn=null;introw=0;inti=0;if(colValue==null||colValue.equals("")){sql="select*fromcourse";}else{sql="select*fromcoursewhere"+colName+"='"+colValue+"'";}try{DB.Openconn();rs=DB.excuteQuery(sql);if(rs.last()){row=rs.getRow();}if(row==0){cn=null;}else{cn=newString[row][6];rs.first();\nrs.previous();while(rs.next()){cn[i][0]=rs.getString("cnum");cn[i][1]=rs.getString("cname");cn[i][2]=rs.getString("Cteather");cn[i][3]=rs.getString("Cplace");cn[i][4]=rs.getString("Cpoint");cn[i][5]=rs.getString("Ctime");i++;}}}catch(Exceptione){System.out.println(e);}finally{DB.closeConn();}returncn;}}//////////////////////////////////scBean.java///////////////////////****学生选课成绩相关类*/packagecom.system.model;importjava.sql.ResultSet;importjava.sql.SQLException;importjavax.swing.JOptionPane;importcom.system.dbconnection.dbconnection;publicclassscBean{Stringsql;ResultSetrs;StringcNum;StringsNum;StringcName_1;Stringgrade;StringcolName;//列名StringcolValue;//列值\n/***添加学生的选课信息*/publicvoidcsAdd(Stringcnum,Stringsnum){dbconnectionDB=newdbconnection();this.cNum=cnum;this.sNum=snum;sql="insertintosc(cnum,snum)values('"+cNum+"','"+sNum+"')";try{DB.Openconn();DB.excuteUpdate(sql);JOptionPane.showMessageDialog(null,"成功添加一条新的纪录!");}catch(Exceptione){JOptionPane.showMessageDialog(null,"保存失败","错误",JOptionPane.ERROR_MESSAGE);}finally{DB.closeConn();}}/***修改学生的选课成绩*/publicvoidcsModify(Stringcnum,Stringsnum,Stringgrade){dbconnectionDB=newdbconnection();this.cNum=cnum;this.sNum=snum;try{this.grade=grade;}catch(Exceptione){JOptionPane.showMessageDialog(null,"成绩输入错误","错误",JOptionPane.ERROR_MESSAGE);return;}\nsql="updatescsetgrade="+grade+"wheresnum="+sNum+"andcnum="+cNum+"";try{DB.Openconn();DB.excuteUpdate(sql);JOptionPane.showMessageDialog(null,"成功登记成绩!");}catch(Exceptione){System.out.println(e);JOptionPane.showMessageDialog(null,"登记失败","错误",JOptionPane.ERROR_MESSAGE);}finally{DB.closeConn();}}/****根据学号和课程号搜索其所选的课程成绩*/publicStringserchGrade(Stringsnum,Stringcnum){dbconnectionDB=newdbconnection();this.sNum=snum;this.cNum=cnum;sql="select*fromscwheresc.snum="+sNum+"andsc.cnum="+cNum+"";Stringcn=null;DB.Openconn();rs=DB.excuteQuery(sql);try{if(rs.last()){cn=rs.getString("Grade");}else{cn=null;}}catch(SQLExceptione){e.printStackTrace();}finally{DB.closeConn();}returncn;\n}/****查找一个学生选的所有的课*/publicString[]csAllserch(Stringnum){this.sNum=num;dbconnectionDB=newdbconnection();String[]s=null;//用来保存数据的introw=0;inti=0;sql="select*fromscwheresnum="+sNum+"";DB.Openconn();rs=DB.excuteQuery(sql);try{if(rs.last()){row=rs.getRow();}if(row==0){s=null;}else{s=newString[row];rs.first();rs.previous();while(rs.next()){s[i]=rs.getString(2);i++;}}}catch(SQLExceptione){//TODOAuto-generatedcatchblockSystem.err.println(e);e.printStackTrace();}finally{DB.closeConn();}returns;}/****根据学号搜索其所选的课程成绩*/\npublicString[][]serchGradeAll(Stringsnum){dbconnectionDB=newdbconnection();this.sNum=snum;sql="select*fromscwheresc.snum="+sNum+"";String[][]s=null;inti=0;introw=0;DB.Openconn();rs=DB.excuteQuery(sql);try{if(rs.last()){row=rs.getRow();}}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}if(row==0){s=null;}else{s=newString[row][2];try{rs.first();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{rs.previous();}catch(SQLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}try{while(rs.next()){s[i][0]=rs.getString(2);s[i][1]=rs.getString(3);i++;}}catch(SQLExceptione){\n//TODOAuto-generatedcatchblocke.printStackTrace();}}for(intk=0;k