java课程设计学生信息管理系统.docx
《java课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《java课程设计学生信息管理系统.docx(62页珍藏版)》请在冰豆网上搜索。
java课程设计学生信息管理系统
1需求分析
利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高、存储量大、保密性好。
要科学地实现信息化管理,开发一个适合学校的,能够进行信息存储、查询、修改等功能的信息管理系统是十分重要的。
我这次的课题就是设计与实现一个学生信息管理系统。
1.1设计任务要求
该学生信息管理系统的设计要求主要有以下几点:
(1)使用图形用户界面;
(2)用数据库建立1或2个学生信息表;(不限使用哪种数据库)
(3)能连接数据库并实现对学生信息查询、增、删、改等功能。
1.2系统功能需求分析
系统主要包括以下几项功能:
(1)添加学生信息;
(2)查询学生信息;
(3)删除学生信息;
(4)修改学生信息。
2概要设计
2.1图形用户界面的设计
图形用户界面中,设置窗口大小、显示位置和窗口标题,设置窗口关闭之后其后台程序同时关闭,设置窗口可拉伸且为可见的。
同时设置了用户输入文本框,文本框的窗口大小等属性也进行设置,文本框中可输入用户需要输入的学生信息。
2.2用数据库建立学生信息表
在这里我用的是数据库mysql,建立的数据库名字为student,而且程序使用的是单表形式,表名为st,st表的字段,各个字段分别对应学生的学号,名字,性别,年龄,籍贯,系别。
2.3数据库的连接
数据库的连接只需通过jdbc驱动,即可实现用户操作与数据资源的连接,并可对相关的数据库信息进行操作。
2.4模块功能的实现
以下是学生信息管理系统功能模块关系图,主要包含查询、添加、修改、删除学生信息等功能。
图2.1系统功能模块关系图
根据功能的需要,我设想了主窗口界面的大体布置图,并在设计与实现的过程中尽量去按照设想图的图样去实现。
设想图如下图所示,图中也大概地标明了部分标语与说明。
图2.2设想的主界面
图2.2中组件功能的实现:
(1)当用户点击查询按钮时,系统创建一个数据库连接,从数据库调出用户所输入要查询学生的信息,并显示到jscrollPane中,即主模块的中部;
(2)当用户点击添加按钮时,系统创建一个数据连接,弹出一个添加学生的信息的文本框,文本框可输入要添加的学生信息,并可存入数据库。
(3)当用户点击修改按钮时,系统创建一个数据连接,从数据库中调出你所选行的学生信息,并弹出修改该学生的信息文本框,文本框可进行学生信息修改,修改完确认后,该学生的信息会重新存入数据库。
(4)当用户点击删除按钮时,系统创建一个数据连接,根据你所选行的学生学号,在数据库中找到该学生信息,并删除。
3详细设计
3.1图形用户界面的设计
(1)主界面窗口设计函数代码程序如下:
//定义用户界面用到的组件
JLabeluserName=null;//要查询的学生的名字
JTextFieldtextField=null;//用户输入的文本框
JButtonselect=null;//查询按钮
JButtoninsert=null;//添加按钮
JButtonupdate=null;//修改按钮
JButtondelete=null;//删除按钮
JTabletable=null;//用于显示数据库调出的数据的表
Panelpanel1=null;
Panelpanel2=null;
Panelpanel3=null;
JScrollPanejscrollPane=null;
StModelstModel=null;//st表的模型
privateObjectPreparedStatement;
publicStuMange()
{
//窗口显示的上部的组件
userName=newJLabel("学生名:
");
textField=newJTextField(10);//用户输入文本框限定为最多输入10个字符
select=newJButton("查询");//查询按钮
//添加到第一个面板中
panel1=newPanel();
panel1.add(userName);
panel1.add(textField);
panel1.add(select);
//窗口下部的组件
insert=newJButton("添加");
delete=newJButton("删除");
update=newJButton("修改");
//添加到第三个个面板中
panel3=newPanel();
panel3.add(insert);
panel3.add(delete);
panel3.add(update);
//窗口中部的组件
stModel=newStModel();
stModel.insertDatabase("select*fromst");
table=newJTable(stModel);
jscrollPane=newJScrollPane(table);
//注册事件监听
select.addActionListener(this);
insert.addActionListener(this);
update.addActionListener(this);
delete.addActionListener(this);
//将各个组件添加到窗体中
this.add(panel1,BorderLayout.NORTH);
this.add(jscrollPane,BorderLayout.CENTER);
this.add(panel3,BorderLayout.SOUTH);
//设置窗体属性
this.setSize(400,300);//设置窗口大小
this.setLocation(200,200);//设置窗口显示的位置
this.setTitle("学生信息管理系统");//设置窗口标题
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗口关闭之后其后台程序同时关闭
//设置窗口为可见
this.setVisible(true);
}
(2)添加学生的界面文本框设计函数程序代码如下所示:
privateJLabelid,name,sex,age,address,dep;//分别代表学生的学号,名字,性别,年龄,籍贯,系别
privateJTextFieldjtf1,jtf2,jtf3,jtf4,jtf5,jtf6;//用户输入的文本框,分别为学生的学号,名字,性别,年龄,籍贯,系别
privateJButtonadd,canel;//分别为添加按钮和取消按钮
privatePanelpanel1,panel2,panel3;
publicInsertStudent(Frameowner,Stringtitle,booleanmodel)
{
super(owner,title,model);//实现与父类窗口对话
System.out.println("我执行了");
//窗体的西部的组件
id=newJLabel("学号:
");
name=newJLabel("姓名:
");
sex=newJLabel("性别");
age=newJLabel("年龄");
address=newJLabel("籍贯");
dep=newJLabel("系别:
");
//添加到panel1面板中
panel1=newPanel(newGridLayout(6,1));
panel1.add(id);
panel1.add(name);
panel1.add(sex);
panel1.add(age);
panel1.add(address);
panel1.add(dep);
//窗体的东部组件
jtf1=newJTextField(10);
jtf2=newJTextField(10);
jtf3=newJTextField(10);
jtf4=newJTextField(10);
jtf5=newJTextField(10);
jtf6=newJTextField(10);
//添加到第二个面板中
panel2=newPanel(newGridLayout(6,1));
panel2.add(jtf1);
panel2.add(jtf2);
panel2.add(jtf3);
panel2.add(jtf4);
panel2.add(jtf5);
panel2.add(jtf6);
//窗体北部的控件
add=newJButton("添加");
canel=newJButton("取消");
//注册事件监听
add.addActionListener(this);
canel.addActionListener(this);
//添加到panel3面板中
panel3=newPanel();
panel3.add(add);
panel3.add(canel);
//将各个组件添加到窗体中
this.add(panel1,BorderLayout.WEST);
this.add(panel2,BorderLayout.CENTER);
this.add(panel3,BorderLayout.SOUTH);
//设置对话框属性
this.setSize(300,200);
//设置对话框为可见
this.setVisible(true);
}
(3)修改学生的界面文本框的设计
JLabelid,name,sex,age,address,dep;//分别为学生的学号,学生的姓名,学生的性别,学生的年龄,学生的籍贯,学生的系别的标签
JTextFieldjtf1,jtf2,jtf3,jtf4,jtf5,jtf6;//分别为学生的学号,姓名,性别,年龄,籍贯,系列的输入文本框
JButtonupdate,canel;//分别为修改和取消按钮
Panelpanel1,panel2,panel3;
publicUpdateDatabase(Frameown,Stringtitle,booleanmodel,StModelstModel,introw)
{
super(own,title,model);//实现与父类窗口对话
//窗体西部的组件
id=newJLabel("学号");
name=newJLabel("名字");
sex=newJLabel("性别");
age=newJLabel("年龄");
address=newJLabel("地址");
dep=newJLabel("系别");
//添加到panel1中
panel1=newPanel(newGridLayout(6,1));
panel1.add(id);
panel1.add(name);
panel1.add(sex);
panel1.add(age);
panel1.add(address);
panel1.add(dep);
//添加到窗体的东部的组件
jtf1=newJTextField(10);
jtf1.setText((String)(stModel.getValueAt(row,0)));
jtf1.setEditable(false);//设置学号不可修改
jtf2=newJTextField(10);
jtf2.setText((String)(stModel.getValueAt(row,1)));
jtf3=newJTextField(10);
jtf3.setText((String)(stModel.getValueAt(row,2)));
jtf4=newJTextField(10);
jtf4.setText((String)(stModel.getValueAt(row,3)));
jtf5=newJTextField(10);
jtf5.setText((String)(stModel.getValueAt(row,4)));
jtf6=newJTextField(10);
jtf6.setText((String)(stModel.getValueAt(row,5)));
//添加到第二个面板中
panel2=newPanel(newGridLayout(6,1));
panel2.add(jtf1);
panel2.add(jtf2);
panel2.add(jtf3);
panel2.add(jtf4);
panel2.add(jtf5);
panel2.add(jtf6);
//窗体南部的组件
update=newJButton("确认");
canel=newJButton("取消");
panel3=newPanel();
panel3.add(update);
panel3.add(canel);
//注册事件监听
update.addActionListener(this);
canel.addActionListener(this);
//添加组件到窗体中
this.add(panel1,BorderLayout.WEST);
this.add(panel2,BorderLayout.CENTER);
this.add(panel3,BorderLayout.SOUTH);
//设置窗体属性
this.setSize(300,200);
//设置窗体为可见
this.setVisible(true);
}
3.2用数据库建立学生信息表
(1)数据库建立学生表的函数程序代码如下所示:
createtablest
(
stIdvarchar(30)primarykey,
stNnamevarchar(50)notnull,
stSexvarchar
(2)default'男',
stAgeint,
stBornvarchar(30),
stDeptvarchar(30),
constraintstScheck(stSexin('男','女'))
);
(2)st表的模型实现的函数程序代码如下所示:
publicclassStModelextendsAbstractTableModel{
VectorcolumNames=null;//表的字段名称
VectorrowDate=null;//表的数据
//数据库
privateConnectioncon=null;
privatePreparedStatementps=null;
privateResultSetrs=null;
privatefinalstaticStringdriver="com.mysql.jdbc.Driver";//加载的jdbc驱动
privatefinalstaticStringurl="jdbc:
mysql:
//localhost:
3306/student";//数据源
privatefinalstaticStringuser="root";//数据库的用户名
privatefinalstaticStringpassWord="root";//数据库的用户名的密码
//对数据库进行查找
publicvoidinsertDatabase(Stringsql)
{
columNames=newVector();//表的字段名称
rowDate=newVector();//表的数据
columNames.add("学号");
columNames.add("名字");
columNames.add("性别");
columNames.add("年龄");
columNames.add("籍贯");
columNames.add("系别");
try
{
//加载jdbc驱动
Class.forName(driver);
//连接数据源
con=DriverManager.getConnection(url,user,passWord);
//执行sql
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
while(rs.next())
{
Vectorrow=newVector();
row.add(rs.getString
(1));
row.add(rs.getString
(2));
row.add(rs.getString(3));
row.add(rs.getString(4));
row.add(rs.getString(5));
row.add(rs.getString(6));
rowDate.add(row);//将学生的一条记录(row)添加到rowDate中
}
}
catch(ClassNotFoundExceptione)
{
e.printStackTrace();
}
catch(SQLExceptione)
{
e.printStackTrace();
}
finally
{
//关闭数据库资源
try
{
if(null!
=rs)
{
rs.close();
}
if(null!
=ps)
{
ps.close();
}
if(null!
=con)
{
con.close();
}
}
catch(SQLExceptione)
{
e.printStackTrace();
}
}
}
//返回列数
publicintgetColumnCount(){
returnthis.columNames.size();
}
//返回表的行数
publicintgetRowCount(){
returnthis.rowDate.size();
}
//得到某行某列的数据
publicObjectgetValueAt(introwIndex,intcolumnIndex){
return((Vector)this.rowDate.get(rowIndex)).get(columnIndex);
}
//设置表的字段名
publicStringgetColumnName(intcolumn)
{
return(String)this.columNames.get(column);
}
}
3.3数据库的连接
privatefinalstaticStringdriver="com.mysql.jdbc.Driver";//加载的jdbc驱动
privatefinalstaticStringurl="jdbc:
mysql:
//localhost:
3306/student";//数据源
3.4模块功能的实现
主模块功能的实现函数程序代码如下所示:
publicvoidactionPerformed(ActionEvente)
{
//用户点击了查找按钮
if(e.getSource()==select)
{
Stringparas=textField.getText().trim();
stModel=newStModel();
stModel.insertDatabase("select*fromstwherestNname='"+paras+"'");
table.setModel(stModel);
}
//用户点击了添加按钮
elseif(e.getSource()==insert)
{
InsertStudentinsertStudent=newInsertStudent(this,"添加学生",true);
//刷新窗口表的数据
stModel=newStModel();
stModel.insertDatabase("select*fromst");
table.setModel(stModel);
}
//用户点击了修改按钮
elseif(e.getSource()==update)
{
introw=this.table.getSelectedRow();//用户选择的行数
if(-1==row)//如果用户没有选中行
{
JOptionPane.showMessageDialog(this,"请选择一行");
}
else
{
UpdateDatabaseupdateDatabase=newUpdateDatabase(this,"修改学生",true,stModel,row);
//刷新窗口表的数据
stModel=newStModel();
stModel.insertDatabase("select*fromst");
table