联系方式: 微信:biyebang QQ: 629001810
摘 要
大学期间,综合测评计算是每学期必不可少的工作。人工计算综合测评是一个很繁杂的过程:每个学生先计算自己的综合测评成绩,制成草表,上交给班委;然后班委核对并将成绩录入制成电子文档上交给院系相关部门。在这个过程中,学生常常感到厌烦,因而草表的准确率很低;接着人工核对、录入成绩,造成工作量大,效率低下,准确率也无法得到保证。所以,广大师生迫切希望信息化综合测评系统的产生。利用该系统,同学们可以方便准确地计算出自己的综合测评成绩,并能将结果上传至服务器,省去班委人工核对、成绩录入这些烦琐的工作。而且,系统提供的查询功能可以方便同学们对自己所需信息的检索。该论文主要介绍了网络上最受欢迎的Java Applet技术、系统的分析设计、各个功能模块的实现、系统的测试调试、以及系统开发过程中遇到的问题和问题的解决。
目录
系统设计
需求分析
根据计算机科学与工程系综合测评评分细则以及广大同学计算综合测评的经历,整理得到该系统的功能需求为:
1、用户只要根据列出的得分项进行选择,以及少量的数据输入就可以计算出自己的综合测评成绩。
2、用户将自己计算好并核对过的综合测评成绩上传,为防止恶意用户随意修改合法用户的成绩,成绩上传前必须进行用户合法性的验证,合法用户方能将自己的综合测评成绩上传至服务器端的数据库。同时,合法用户也可以随时修改自己的密码。
3、用户可以根据自己的需要进行查询:
1)输入学号,就可以精确得到该位同学的综合测评的得分、排名等情况
2)查询所有学生的综合测评得分情况,并按学号顺序排列显示
3)查询业务学习成绩大于等于或小于某一值的所有学生的综合测评得分情况,并按业务学习成绩从高到低排列显示
4)查询综合测评成绩大于等于或小于某一值的所有学生的综合测评得分情况,并按综合测评成绩从高到低排列显示
5)查询业务学习成绩大于或小于某一值且综合测评成绩大于等于或小于某一值的所有学生的综合测评得分情况,并按学号的顺序排列显示。
4、用户可以查看全班同学的业务学习成绩及综合测评成绩各个得分段的比例,更好地了解班级的综合测评情况。
系统整体框架
根据系统的功能需求,分析出系统的框架为:
模块功能说明
1、政治素质
该模块能够将所有的政治素质方面的得分项列出来,供用户选择自己的得分情况,然后计算出政治素质的得分。法纪观念、学习态度、品德修养、劳动实践、奖惩得分与政治素质模块的功能相似,都是计算各自的得分,所以在此不一一阐述。
2、政治思想素质
该模块则将政治素质、法纪观念、学习态度、品德修养、劳动实践、奖惩分各个模块组合,以整体的方式显示给用户,并能将各个小模块的得分情况相加,得出政治思想素质的实际得分(100分制)及总得分(实际得分×20%)
3、业务学习得分
该模块能够处理用户输入各门课程的得分情况,计算业务学习实际得分(100分制,业务学习实际得分=各门课程的学分成绩总和÷各门课程学分总和+公共选修课的成绩)及总得分(业务学习实际得分×60%)。
4、智能素质得分
该模块则将科研能力、社会工作能力、师范生技能、文艺活动能力各个小模块的得分相加得到智能素质的实际得分(100分制)及总得分(实际得分×10%)。
5、体育素质得分
该模块能够处理用户体育课成绩的输入,计算体育素质的实际得分(体育课成绩×60% + 课外体育活动成绩)及总得分(实际得分×10%)。
6、精确查询
该模块能够接受用户输入学号,查询该同学综合测评的相关情况。
7、模糊查询
该模块能够接受用户的输入,根据用户的需要,以业务学习得分和综合测评得分为条件进行查询。
8、综合测评成绩比例显示
该模块能够根据全部上传的综合测评,统计总人数,某一分数段的人数,然后按比例图显示给用户。
9、综合测评成绩上传
该模块能够验证用户的合法性并将合法用户计算出的综合测评得分情况上传至服务器端的数据库上,作为留档材料,也作为成绩核对的依据。
10、用户密码修改
该模块能够验证用户的合法性并能实现合法用户对自己密码的修改。
系统实现
系统数据库设计
1、数据库需求分析:
本系统数据库的设计总体需求是:学号、用户密码、课程名称、课程学分、成绩类型、政治思想素质、业务学习、智能素质、体育素质、综合测评得分、备注。
2、本系统采用ACCESS作为数据库。在本系统中,要求数据库名为:综合测评数据库.mdf,并在里面建立系统设计时需要用到的数据表,各表设计如下所示:
数据库访问模块的实现
本项目与数据库的连接采用JDBC-ODBC桥连接[8],其连接成功后将出现提示,如图4所示界面:
其核心代码如下:
boolean success=true; //定义一个标志变量标志连接数据库是否成功
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加载驱动程序 con=DriverManager.getConnection("jdbc:odbc:zonghecepingshujuku");
//与数据库的连接
stmt=con.createStatement(); //执行访问数据库的SQL语句
}
catch(Exception e)
{
JOptionPane.showMessageDialog(this, "数据库连接失败!");
success=false;
}
if(success)
{ JOptionPane.showMessageDialog(this,"数据库连接成功"); }
4.3客户端各个模块的实现
1、政治思想素质模块的实现:
本模块的界面主要是利用Java的awt包及swing包开发的,界面实现如图5
所示:
本模块是由政治素质、法纪观念、学习态度、品德修养、劳动实践、奖惩得分,其他得分共七个小模块够成的,各小模块的容器面板都是继承自swing包的Jpanel,而且其中的各个元素,如:复选框、文本框等采用GridLayout布局管理。各个小模块作为一个类来设计,其中包含构造函数,getscore()方法及getbeizhu()方法,分别取得本小模块的得分,及得分的原因。选取其中的政治素质模块描述其实现过程(其他模块类似)如下:
classZhengzhisuzhi extends Zuhemianban //政治素质类,详见源代码
{ …… //类内部成员的声明
public Zhengzhisuzhi(){ …… } //构造函数,实现界面的布局
public float getscore() //获取政治素质得分
{ beizhu=""; //用于存放得分理由
float score=18; //基本分18分
if(this.malie.getState()) //如果“马列理论学习优”有选中
{ score+=1; //加上该项的得分
beizhu+=this.malie.getLabel()+";"; //得分理由加入备注字符串中
}
…… //其他得分项类似处理
return score; //将得分值返回
}
public String getbeizhu() //获取备注内容
{ return beizhu; }
}
2、业务学习成绩计算模块
业务学习成绩的界面如图6所示:
其中一个科目就是一个小模块,而且这些科目的信息是从服务器端的“课程信息表”中获取的,这些科目组合就够成了业务学习成绩计算的主要部分。但由于这些科目是动态生成的,而不是设计时给定的,所以必须用一个数组链表存储这些动态生成的科目类实例,才可能在计算出业务学习得分的过程中得到必须的数据。也因其是动态生成的,所以实现过程相对比较复杂,其核心代码如下:
public Yewuxuexi(InetAddress ip) //构造函数传入服务器的IP地址
{ …… //建立与服务器通信的数据输入输出流,并提交初始化请求
xinxis=datain.readUTF().split(":"); //读取初始化数据
for(int i=1;i<xinxis.length;i++)
{ String[]kechengxinxi=xinxis[i].split(",");
Xuexichengjixuexichengji=new Xuexichengji(kechengxinxi[0],
Float.parseFloat(kechengxinxi[1].trim()),kechengxinxi[2]);
//实例化一门科目,并将其加入面板中
this.add(xuexichengji);
//将其加入数组链表中,为下面计算课程的学分成绩提供数据
this.arraylist.add(xuexichengji); } //for
} //Yewuxuexi
public floatgetscore() //获取各门课程的学分成绩总和
{ float sum=0; //初始化成绩为0
for(int i=0;i<this.arraylist.size();i++)
{ //遍历链表中的每个元素,并将得分累加
sum=sum+((Xuexichengji)(arraylist.get(i))).getscore();
}
return sum; //将得分作为该方法的返回值返回
}
3、智能素质模块
智能素质的模块实现界面如图7所示:
该模块是由科研能力、社会工作能力、师范生技能、文艺活动能力、其他得分5个小模块组合成的,其实现过程与政治思想素质的实现过程类似,这里不再赘述。
4、体育素质模块
体育素质模块实现界面如图8所示:
本模块实现过程与政治思想素质的实现过程也类似,这里不再赘述。
5、成绩上传模块
成绩上传模块的实现界面如图9所示:
该模块类继承自java.awt包中的Frame类,当用户输入的学号与密码正确时,才能将成绩上传,其实现的核心代码如下:
//综合测评得分情况插入数据库的SQL语句
strshangchuan=strshangchuan + "insert into 综合测评成绩表 values('"
+this.xuehao.getText().trim()+"',"+ this.sqlzongheceping + ")";
String[]temps=this.yewuxuexi.split(":");
//业务学习得分情况插入数据库的SQL语句
String temp=":insert into 业务学习成绩表(学号,备注"+temps[0] +")
values('"+this.xuehao.getText().trim()+"','"+temps[2] +"'" +temps[1]+ ")";
strshangchuan+=temp;
6、用户密码修改模块
用户密码修改模块的实现界面如图10所示:
该模块类也是继承自java.awt包中的的Frame类。首先将进行“新口令”与“确认新口令”的核对,如果两者相同,将进行用户合法性检查。如果是合法用户,可进行密码修改,数据库信息修改成功后,将反馈一个“密码修改成功”的消息给用户。否则,不能进行密码的修改,将反馈一个“密码修改失败”的信息给用户。其中,用户合法性的检查与成绩上传时用户的合法性检查一致,这里不再赘述,只取其中部分核心代码说明如下:
if(datain.readUTF().trim().equals("密码修改合法用户")) //若是合法用户
{ //密码修改SQL语句
String xinmimashangchuan="update 用户信息表 set 密码='"
+this.xinkouling.getText().trim()+"'where学号='"
+this.xuehao.getText().trim()+"'";
dataout.writeUTF(xinmimashangchuan); //更新数据库请求上传
}
else //非法用户
{……}
7、查询模块
查询模块实现界面如图11所示:
其分为精确查询与模糊查询两块,精确查询是将输入的学号作为查询条件,而模糊查询则根据业务学习成绩与综合测评成绩的组合作为查询条件进行查询。精确查询的结果将返回个人的各个得分情况及综合测评与业务学习成绩的排名情况。模糊查询返回结果的界面图12所示:
当业务学习成绩与综合测评成绩选项数值都为0时,或者两个选项的值都不为0时,将返回所有结果集,并按学号顺序排列。当业务学习选项的数值为0但综合测评成绩选项数值不为0时,或者相反时,将以非0的一项作为排列显示的依据。其核心代码如下:
1)精确查询
resultset= stmt.executeQuery("select * from 综合测评成绩表 order by 综合测评得分desc"); //成绩由高到低排列
while(this.resultset.next()) //检索该生的综合测评记录
{ i++; //i标记该学生综合测评成绩的排名
if(this.resultset.getString(1).equals(xinxis[1].trim()))
//若是该学生的综合测评成绩记录则提取其所有的得分情况及排名
{ jieguo+=","+this.resultset.getFloat(2)+ "," + this.resultset.getFloat(3)+","
+this.resultset.getFloat(4) + ","+ this.resultset.getFloat(5)+","
+this.resultset.getFloat(6) + ","+ i;
break; //跳出检索 }
}
2)模糊查询
String mohuchaxunjieguo=datain.readUTF(); //读取模糊查询结果
//以下是数据在JTable中的显示
this.vector.removeAllElements(); //将存放显示数据的向量清空
this.tm.fireTableStructureChanged(); //通知所有侦听器表结构已更改。
String[]strmohuxianshis=mohuchaxunjieguo.split(":");
//将从服务器端返回的数据字符串按行分割
for(inti=1;i<strmohuxianshis.length;i++)
{
Vector rowvector=new Vector();
String[] strs=strmohuxianshis[i].split(",");
for(int j=0;j<strs.length;j++)
{ rowvector.addElement(strs[j]); } //添加一个显示数据项
this.vector.addElement(rowvector); //添加一行显示数据项
}
this.tm.fireTableStructureChanged();
模糊查询的部分SQL语句如下:
s="select 用户信息表.学号,姓名,政治素质,业务学习,智能素质,体育素质,综合测评得分 from 综合测评成绩表,用户信息表 where 业务学习 >=" + this.yewu.getfloat()+ "and综合测评得分 >=" + this.zonghe.getfloat()
+" and 综合测评成绩表.学号=用户信息表.学号";
8、成绩比例图显示模块
该模块实现界面如图13所示:
其中,左右两块为同一类的两个不同实例化对象。该模块的实现过程是:
先查询数据库,统计总人数以及各个成绩段的人数,然后在客户端计算各个成绩段人数所占总人数的比例,最后将比例图通过Graphics类的fillArc()方法画出,数据通过文本框显示出来,其核心代码如下:
public void paint(Graphics g)
{
int int_red=(int)(bili[0]*360); //计算红色扇形圆心角的度数
intint_green=(int)(bili[1]*360); //计算绿色扇形圆心角的度数
int int_blue=(int)(bili[2]*360); //计算蓝色扇形圆心角的度数
int int_yellow=360-int_red-int_green-int_blue;
//计算黄色扇形圆心角的度数,下面画出比例图
g.setColor(Color.red); //绘制红色扇形
g.fillArc(startx,starty,endlen,endlen,0,int_red);
g.setColor(Color.green); //绘制绿色扇形
g.fillArc(startx,starty,endlen,endlen,int_red,int_green);
g.setColor(Color.blue); //绘制蓝色扇形
g.fillArc(startx,starty,endlen,endlen,int_red+int_green,int_blue);
g.setColor(Color.yellow); //绘制黄色扇形
g.fillArc(startx,starty,endlen,endlen,int_red+int_green+int_blue,int_yellow);
}
源文件
版权所有© 帮我毕业网 并保留所有权利