成绩管理系统java+mySQL.docx
《成绩管理系统java+mySQL.docx》由会员分享,可在线阅读,更多相关《成绩管理系统java+mySQL.docx(71页珍藏版)》请在冰点文库上搜索。
![成绩管理系统java+mySQL.docx](https://file1.bingdoc.com/fileroot1/2023-6/17/30cc5326-9fae-4bc6-a096-2453321932fa/30cc5326-9fae-4bc6-a096-2453321932fa1.gif)
成绩管理系统java+mySQL
《Java语言》课程期末作业
题目第9题:
学生成绩管理系统
学院计算机学院
专业
班别
学号
姓名温景钊
2013年6月10日
一、课程题目
设计一个简易的学生成绩管理系统。
用于记录学生的各科成绩,以及实现常用的统计功能。
(1)记录学生的基本信息,如姓名、学号、专业、班级等
(2)记录各科成绩
(3)实现常用的统计功能,如:
单科成绩排名、总分排名、统计成绩高于/低于某一临界值的学生、统计单科/总分平均值……
(4)使用图形方式显示某些数据,如直方图显示各分数段的人数、绘制各科分数分布曲线……(可选)
(5)必须使用数据库。
其它功能可自行扩展。
二、题目分析与设计
1.注明所使用的开发环境(Eclipse、NetBeans,JBuilder)。
开发环境:
Eclipse
2.论述题目的需求。
给出软件功能架构图。
题目需求:
通过数据库记录学生成绩和信息,并通过数据库读取这些信息,实现单个学生查找、全体学生查找等功能和单科排名、平均分、总分排名、平均分等功能。
其他扩展功能:
登录界面,保存到txt文件。
软件功能架构图:
其中,删除、修改、单个查找功能均通过学号定位学生
3.论述界面设计过程,指出其设计上的创意及组件的布局策略。
界面设计过程:
主要界面包括登录界面,主功能界面,各个子功能界面。
登录界面包括3个面板,每个面板放入相应的标签、文本框、按钮等组件,登录界面采用3行1列的网格布局;主功能界面包括菜单栏和若干面板,面板中放入标签或若干按钮,菜单栏的菜单项与按钮相对应,主功能界面采用7行1列的网格布局;学生管理类子功能(增加学生、删除学生、修改学生、单个查找)界面采用6行2列的网格布局,每个网格均放入一个面板,每个面板放入标签、文本框、组合框、按钮等组件,以达到较友好的界面效果;学生查找类子功能界面(查看全体、按年级查询、按班别查询、按专业查询)和成绩管理类子功能(单科排名、总分排名、合格学生、挂科学生)界面采用边界布局,界面的上部放入一个面板,面板放入相应的按钮或组合框,中部放入一个文本域。
所有错误信息等信息均通过对话框的形式显示相应信息。
4.论述程序逻辑的实现,包括类的设计、对象的协作过程等,必要时加以各种图形和表格辅助论述。
不得以粘贴代码的方式代替设计部分。
类的设计过程:
本程序包括19个类文件,每个类文件只含有一个类,分别是包含main方法的主类Main,实现登录功能的类Login,实现各种功能选择功能的类Function,实现数据库连接的类DataBaseCreate,实现学生信息编辑功能类StudentEdit,执行增加学生功能的类AddStudent,执行删除学生功能的类DeleteStudent,执行修改学生功能的类UpdateStudent,执行单个查询功能的类IndexOfSingle,(由于AddStudent,DeleteStudent,UpdateStudent,IndexOfSingle界面和操作基本相同,所以上4类均继承StudentEdit)实现条件查找和成绩管理功能的类IndexOrManage,执行查询全体功能的类LookAllStudents,执行按年级查询功能的类IndexOfGrade,执行按班别查询功能的类IndexOfClass,执行按专业查询的类IndexOfMajor,执行单科排名功能的类SubjectScoreRanking,执行总分排名功能的类TotalScoreRanking,执行查找单科及格学生功能的类PassStudents,执行查找单科不及格学生功能的类NotPassStudents,(由于LookAllStudents,IndexOfGrade,IndexOfClass,IndexOfMajor,SubjectScoreRanking,TotalScoreRanking,PassStudents,NotPassStudents,界面和操作基本相同,所以上8类均继承IndexOrManage)执行将文本域内容保存到TXT文件的类TxtSave。
以上19个类,除了Main类以外,均包含一个构造方法,有些还包含actionPerformed(e)方法。
对象的协作过程:
三、测试分析
小四字体,1.5倍行距。
对程序的测试情况作出分析。
至少包括但不限于需要具备以下内容:
1.阐述扩展包(仅限于SUN官方发布)的部署过程,并将扩展包附于光盘源程序中;给出数据库的详细配置说明。
导入扩展包
mysql-connector-java-5.1.25-bin.jar
数据库配置说明:
数据库mySQL
数据库服务器localhost
端口3306
用户名root
密码空
数据库名studentmanagement
Student表
2.典型测试数据的构建,并且给出测试数据的预计结果
原数据:
测试数据:
添加学生
10005张兰女20122信息工程19930506827458
删除学生10000
修改学生10001
李嘉女20114网络工程19920304548586.5
单个查找10003
查询全体
按年级查找2011级
按班别查找1班
按专业查找软件工程
单科排名并显示平均分语文
总分排名并显示平均分
单科及格学生英语
单科不及格学生语文
保存Txt总分
预测结果:
均成功完成操作
3.本程序的测试情况,与预计结果作对比
测试情况:
成功完成相关操作
添加学生
10005张兰女20122信息工程19930506827458
删除学生10000
修改学生10001
李嘉女20114网络工程19920304548586.5
单个查找1000320001
查询全体
按年级查找2011级
按班别查找1班
按专业查找软件工程
单科排名并显示平均分语文
总分排名并显示平均分
单科及格学生英语
单科不及格学生语文
保存Txt总分排名
附录:
源代码
小四字体,1.5倍行距。
只需列出程序中所有的包及相关的文件。
不需要打印源代码。
程序中所有的包及相关的文件:
代码:
importjavax.swing.JFrame;
publicclassMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Loginlogin=newLogin();
login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
//登录界面
publicclassLoginextendsJFrameimplementsActionListener{
JButtonb1=newJButton("登录");
JButtonb2=newJButton("退出");
JLabella1=newJLabel("用户名");
JLabella2=newJLabel("密码");
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp3=newJPanel();
JTextFieldname=newJTextField(15);
JPasswordFieldpw=newJPasswordField(15);
publicLogin(){
setTitle("学生成绩管理系统");
getContentPane().setLayout(newGridLayout(3,1));
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p3);
p1.add(la1);
p1.add(name);
p2.add(la2);
p2.add(pw);
p3.add(b1);
p3.add(b2);
setBounds(500,250,100,100);
pack();
setVisible(true);
pw.setEchoChar('*');
b1.addActionListener(this);
b2.addActionListener(this);
}
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand()=="登录"){
Stringpassword=pw.getText();
Stringuser=name.getText();
if(user.equals("admin")&&password.equals("admin")){
Functionfunction=newFunction();
function.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(false);
}
else{
JOptionPane.showMessageDialog(null,"用户名或密码错误","Error",JOptionPane.INFORMATION_MESSAGE);
}
}
elseif(e.getActionCommand()=="退出"){
System.exit(0);
}
}
}
importjava.sql.*;
//连接数据库类
publicclassDataBaseCreate{
//连接数据库静态方法,若产生错误,则抛出相应错误信息
publicstaticConnectiongetConnection()throwsSQLException,java.lang.ClassNotFoundException{
//建立本地数据库连接,编码规则转换为utf-8(正常录入中文)
Stringurl="jdbc:
mysql:
//localhost:
3306/studentmanagement?
useUnicode=true&characterEncoding=utf8";
Class.forName("com.mysql.jdbc.Driver");
StringuserName="root";
Connectioncon=DriverManager.getConnection(url,userName,"");
returncon;
}
}
importjavax.swing.JFrame;
publicclassMain{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Loginlogin=newLogin();
login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
//主要功能界面
publicclassFunctionextendsJFrameimplementsActionListener{
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp6=newJPanel();
JPanelp3=newJPanel();
JPanelp4=newJPanel();
JPanelp5=newJPanel();
JButtonadd=newJButton("增加学生");
JButtondel=newJButton("删除学生");
JButtonupdate=newJButton("修改学生");
JButtonsingle=newJButton("单个查询");
JButtonlook=newJButton("查看全体");
JButtonb11=newJButton("按年级查找");
JButtonb12=newJButton("按班别查找");
JButtonb13=newJButton("按专业查找");
JLabella1=newJLabel("学生管理");
JLabella2=newJLabel("成绩管理");
JLabella3=newJLabel("学生查找");
JButtonb1=newJButton("单科排名");
JButtonb2=newJButton("总分排名");
JButtonb3=newJButton("合格学生");
JButtonb4=newJButton("挂科学生");
JMenuItemitems[][]=newJMenuItem[4][];
JMenuBarbar=newJMenuBar();
JMenum1=newJMenu("开始");
JMenum2=newJMenu("学生管理");
JMenum3=newJMenu("学生查找");
JMenum4=newJMenu("成绩管理");
//构造方法
publicFunction(){
setTitle("学生成绩管理系统");
//设计菜单栏
items[0]=newJMenuItem[2];
items[1]=newJMenuItem[4];
items[2]=newJMenuItem[4];
items[3]=newJMenuItem[4];
m1.add(items[0][0]=newJMenuItem("返回"));
m1.add(items[0][1]=newJMenuItem("退出"));
m2.add(items[1][0]=newJMenuItem("增加学生"));
m2.add(items[1][1]=newJMenuItem("删除学生"));
m2.add(items[1][2]=newJMenuItem("修改学生"));
m2.add(items[1][3]=newJMenuItem("单个查询"));
m3.add(items[2][0]=newJMenuItem("查看全体"));
m3.add(items[2][1]=newJMenuItem("按年级查找"));
m3.add(items[2][2]=newJMenuItem("按班别查找"));
m3.add(items[2][3]=newJMenuItem("按专业查找"));
m4.add(items[3][0]=newJMenuItem("单科排名"));
m4.add(items[3][1]=newJMenuItem("总分排名"));
m4.add(items[3][2]=newJMenuItem("合格学生"));
m4.add(items[3][3]=newJMenuItem("挂科学生"));
bar.add(m1);
bar.add(m2);
bar.add(m3);
bar.add(m4);
//设计布局
getContentPane().setLayout(newGridLayout(7,1));
getContentPane().add(bar);
getContentPane().add(p1);
getContentPane().add(p2);
getContentPane().add(p6);
getContentPane().add(p3);
getContentPane().add(p4);
getContentPane().add(p5);
p1.add(la1);
p2.add(add);
p2.add(del);
p2.add(update);
p2.add(single);
p6.add(la3);
p3.add(look);
p3.add(b11);
p3.add(b12);
p3.add(b13);
p4.add(la2);
p5.add(b1);
p5.add(b2);
p5.add(b3);
p5.add(b4);
setBounds(500,250,100,100);
pack();
setVisible(true);
//注册监听器
add.addActionListener(this);
del.addActionListener(this);
update.addActionListener(this);
look.addActionListener(this);
single.addActionListener(this);
b11.addActionListener(this);
b12.addActionListener(this);
b13.addActionListener(this);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
b4.addActionListener(this);
items[0][0].addActionListener(this);
items[0][1].addActionListener(this);
items[1][0].addActionListener(this);
items[1][1].addActionListener(this);
items[1][2].addActionListener(this);
items[1][3].addActionListener(this);
items[2][0].addActionListener(this);
items[2][1].addActionListener(this);
items[2][2].addActionListener(this);
items[2][3].addActionListener(this);
items[3][0].addActionListener(this);
items[3][1].addActionListener(this);
items[3][2].addActionListener(this);
items[3][3].addActionListener(this);
}
//按钮事件响应,对用对应的类对象
publicvoidactionPerformed(ActionEvente){
if(e.getActionCommand()=="增加学生"){
AddStudentaddStudent=newAddStudent();
}
elseif(e.getActionCommand()=="删除学生"){
DeleteStudentdelStudent=newDeleteStudent();
}
elseif(e.getActionCommand()=="修改学生"){
UpdateStudentdelStudent=newUpdateStudent();
}
elseif(e.getActionCommand()=="单个查询"){
IndexSingleis=newIndexSingle();
}
elseif(e.getActionCommand()=="查看全体"){
LookAllStudentslook=newLookAllStudents();
}
elseif(e.getActionCommand()=="按年级查找"){
IndexOfGradeig=newIndexOfGrade();
}
elseif(e.getActionCommand()=="按班别查找"){
IndexOfClassic=newIndexOfClass();
}
elseif(e.getActionCommand()=="按专业查找"){
IndexOfMajorim=newIndexOfMajor();
}
elseif(e.getActionCommand()=="单科排名"){
SubjectScoreRankingsubject=newSubjectScoreRanking();
}
elseif(e.getActionCommand()=="总分排名"){
TotalScoreRankingsubject=newTotalScoreRanking();
}
elseif(e.getActionCommand()=="合格学生"){
PassStudentspass=newPassStudents();
}
elseif(e.getActionCommand()=="挂科学生"){
NotPassStudentsnotPass=newNotPassStudents();
}
elseif(e.getActionCommand()=="返回"){
setVisible(false);
Loginlogin=newLogin();
login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
elseif(e.getActionCommand()=="退出"){
System.exi