学生信息系统.docx
《学生信息系统.docx》由会员分享,可在线阅读,更多相关《学生信息系统.docx(38页珍藏版)》请在冰点文库上搜索。
学生信息系统
北京联合大学
实验实训报告
课程(项目)名称:
面向对象程序设计(双语)课程设计
学院:
师范学院专业:
计算机科学与技术
班级:
2013本科1班学号:
2013020332027___
姓名:
马帅成绩:
________________
2016年1月 21日
《学生信息系统》数据库设计
一、系统需求分析
1.系统概述
学生信息管理系统是典型的管理信息系统,其系统开发主要包括数据库的规划设计与维护、客户端应用程序的开发两个方面。
对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据安全性,而对于后者则要求程序界面友好、功能完备,容易使用,具有流行软件的操作习惯等特点。
经过详细的调查分析,利用其提供的集成开发环境及支持面向对象的各种标准化的控件,尤其是对WEB的支持完成对数据库的各种操作,达到对学生学籍管理的目的。
设计时首先在短时间内先建立系统应用原型,然后对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的实际可行系统。
学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理信息,这种管理方式存在着许多缺点,如:
效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对学生档案信息进行管理,具有着手工管理所无法比拟的优点.例如:
检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高学生信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
关键词:
学生信息,管理,数据库,设计,实现
2、数据库需求分析
运用数据库基本理论与应用知识,在微机的环境上建立一个数据库应用系统。
要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
(1)学生基本信息管理:
对学生的学号、姓名、性别等基本信息的录入、修改和删除。
(2)各类信息的查询:
按简单条件和复合条件对各类信息进行查询。
(3)学生信息的统计:
自己设计统计条件对学生信息进行统计。
经过详细的调研,并多次在网上查询相关信息之后,首先加深了对学生信息管理的深刻了解,其次在充分熟悉学生档案管理的同时,我了解了整个学生信息管理系统需要的具体需求为:
(1)学生信息:
学生编号,姓名,住址,宿舍号
(2)选课表:
学生编号,课程编号,教师工号(3)教师表:
教师姓名,教师工号(4)班级表:
班级ID,学生人数,班主任,系别。
(5)出勤表:
班级ID,缺勤人数(6)宿舍表:
宿舍号,人数。
(7)系表:
系别,教师工号。
在学生信息管理系统中,通过权限管理学生只能查询到自己的相关信息,如:
学生的各类信息情况,而不能修改和删除任何的信息;而管理员和老师除了可以查看学生的任何信息之外,还能添加,修改和删除任何学生的任何信息。
二、数据库结构设计
1实体及属性说明
(1)学生信息:
学生编号,姓名,住址,宿舍号
(2)选课表:
学生编号,课程编号,教师工号
(3)教师表:
教师姓名,教师工号
(4)班级表:
班级ID,学生人数,班主任,系别。
(5)出勤表:
班级ID,缺勤人数
(6)宿舍表:
宿舍号,人数。
(7)系表:
系别,教师工号。
需建立7个实体。
2、E-R图设计
2、数据库连接程序
public class MySqlConnnection {
//私有空构造方法,保证本类不能够被实例化。
private MySqlConnnection() {
}
//获得数据库连接
public static Connection getConnection() {
Connection conn=null;
try {
//加载MySQL JDBC 驱动程序名称
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//数据库连接参数。
String serverName = "localhost:
1433"; // 数据库主机名称
String mydatabase = "学生信息管理"; // 数据库名称
String url = "jdbc:
sqlserver:
//"+serverName + ";DatabaseName=" + mydatabase;
String username = "sa"; //MySql用户名
String password = "123456"; //MySql密码
conn = DriverManager.getConnection(url, username, password);//建立连接
} catch (ClassNotFoundException e) {
e.printStackTrace();//[找]不到MySql驱动程序类时,打印异常
} catch (SQLException e) {
e.printStackTrace();//获得数据库连接发生异常
}
return conn;
}
//关闭数据库连接
public static void closeConnection(Connection conn) {
if (conn !
= null) { //连接是否有效
try {
if (!
conn.isClosed()) { //连接是否已关闭
conn.close(); //关闭连接
}
} catch (SQLException ex1) {
ex1.printStackTrace();
}
}
}
//测试连接类
public static void main(String[] args) throws Exception{
Connection conn = MySqlConnnection.getConnection();
String result="";
if (conn == null) {
result="获得数据库连接错误.";
}else {
result="正常获得数据库连接." + conn;
}
JOptionPane.showMessageDialog(null, result);
}
}
三、图形界面设计与实现
1、登陆界面
1)数据库的相关信息:
publicclassMyPanelextendsJPanelimplementsActionListener{
privateJLabellabels[];//文本框提示标签,数据库表的各字段名
protectedJTextFieldfields[];//文本框数组,用来显示、输入不同表的各字段值
protectedJButtonquerybtn,addbtn,updatebtn,delbtn;//数据库查、添、改、删按钮
protectedintsize;//表示库中某个表的字段个数的整数
protectedMyTableModeltableModel;//自定义的表格模型,表格列标题为数据库表的各字段
protectedStringcolumnNames[];//表格的标题--对应库中表的字段
protectedJTableresultTable;//表格对象,显示表中的所有记录
//构造方法:
为了通用,可通过参数设置数据库名、表名,在面板中构造图形界面
publicMyPanel(Stringdatabase,StringtableName){
setLayout(newBorderLayout());//设置面板布局为边框布局
setSize(800,600);
//初始化表格模型、表格的列标题、创建表格
tableModel=newMyTableModel(tableName);//自定义表格模型
size=tableModel.getColumnCount();//得到表格模型的列数(数据库表的字段数)
columnNames=tableModel.getColumnNames();//表格的列标题(数据库表的字段名)
resultTable=newJTable(tableModel);
resultTable.setBorder(BorderFactory.createEtchedBorder());
resultTable.addMouseListener(newMouseAdapter(){//表格增加鼠标监听
publicvoidmouseClicked(MouseEvente){
dealResultTable();//鼠标选中表格某行,将该行内容显示在文本框中
}
});
//1.设置北边图形界面---文本框和添、删、改、查按钮
initNorthGUI(size);
//2.设置中间图形界面---显示数据库记录的表格
JScrollPanescrollPanetable=newJScrollPane(resultTable);
scrollPanetable
.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);//总是显示水平滚动条
scrollPanetable
.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);//总是显示垂直滚动条
add(scrollPanetable,BorderLayout.CENTER);
}
//初始化面板中图形界面的北边,参数size是数据库表的字段个数
privatevoidinitNorthGUI(intsize){
JPanelnorthPanel=newJPanel(newBorderLayout());
northPanel.setBorder(BorderFactory.createEtchedBorder());
//1.提示程序使用的标签,在northPanel面板的北边
JPanelpanel1=newJPanel();//放置提示标签prompt
JLabelprompt=newJLabel("输入id号,查询、修改和删除",JLabel.CENTER);
panel1.add(prompt);
northPanel.add(panel1,BorderLayout.NORTH);
prompt.setFont(newFont("楷体_gb2312",Font.BOLD,20));
prompt.setForeground(Color.red);
//2.显示数据库表的字段名标签、输入文本框,在northPanel面板的中间
JPanelpanel2=newJPanel();
JPanelfieldPanel=newJPanel(newGridLayout(size,2));
panel2.add(fieldPanel);
northPanel.add(panel2,BorderLayout.CENTER);
labels=newJLabel[size];
fields=newJTextField[size];
for(intcount=0;countlabels[count]=newJLabel(columnNames[count],JLabel.RIGHT);
}
for(intcount=0;countfields[count]=newJTextField(20);
fields[count].setForeground(Color.red);
}
fields[0].addActionListener(this);//对输入id号的文本框增加监听
for(intcount=0;countfieldPanel.add(labels[count]);
fieldPanel.add(fields[count]);
}
//3.操作数据库表(添、删、改、查)的四个按钮,在northPanel面板的南边
JPanelpanel3=newJPanel();
JPanelbtnPanel=newJPanel(newGridLayout(1,4));
panel3.add(btnPanel);
northPanel.add(panel3,BorderLayout.SOUTH);
querybtn=newJButton("id查询");
btnPanel.add(querybtn);
querybtn.addActionListener(this);
addbtn=newJButton("添加");
btnPanel.add(addbtn);
addbtn.addActionListener(this);
updatebtn=newJButton("修改");
btnPanel.add(updatebtn);
updatebtn.addActionListener(this);
delbtn=newJButton("删除");
btnPanel.add(delbtn);
delbtn.addActionListener(this);
add(northPanel,BorderLayout.NORTH);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==querybtn|e.getSource()==fields[0]){
dealQuerybtn();//查询:
点击查询按钮或在输入id号的文本框中回车时执行
}elseif(e.getSource()==addbtn){
System.out.println("add");
dealAddbtn();//添加
System.out.println("add2");
}elseif(e.getSource()==updatebtn){
dealUpdatebtn();//修改
}elseif(e.getSource()==delbtn){
dealDelbtn();//删除
}
}
//根据不同的数据库表,在MyPanel类的子类中分别覆盖以下4个方法,实现其功能
protectedvoiddealAddbtn(){
}
protectedvoiddealDelbtn(){
}
protectedvoiddealUpdatebtn(){
}
protectedvoiddealQuerybtn(){
}
//处理鼠标选中表格的某行
protectedvoiddealResultTable(){
introw=resultTable.getSelectedRow();//鼠标选中的行
for(inti=0;ifields[i].setText(""+resultTable.getValueAt(row,i));
}
}
//面板中的表格定位到指定行
protectedvoidhighlightRow(Stringid){
Stringstr=null;
for(inti=0;istr=resultTable.getValueAt(i,0).toString();//第1列的值--id号
if(id.equals(str)){
resultTable.setRowSelectionInterval(i,i);
}
}
}
//测试MyPanel类
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("学生信息管理");
frame.getContentPane().add(newMyPanel("学生信息管理","student"));
frame.setSize(600,260);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2)连接数据库的登录界面:
2、操作界面
五、结论
本次课程设计对于我来说不仅是做了学生信息管理系统,最为珍贵的是准备这次课程设计所学到的以前不为己知的知识。
以前接触到java以及数据库只是注重在书本上,从来没有认真的去用它,更不用说实践操作。
零零散散的学习了一些基本知识,不大实用。
通过这次课程设计,了解了java中的以前不大明白的技术运用。
在java的登陆界面以及图形界面设计方面,我都有所提升。
同时使两门课程java和SQL数据库的学习有了一定的联系,融会贯通的学习促使我们更加注重平时的学习以及课程间的联系。
对课程设计要求的分析,培养了我们由书面文字要求到转化这种要求到现实模型的能力,很大程度上培养了我们的分析问题能力,总结归纳问题的能力。
理论联系实际就在这里自然地得到实现。
这对我们巩固已学知识,锻炼实践动手能力大有裨益。
六、程序代码:
管理员表:
packagedb;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importmybean.guanliyuan;
publicabstractclassdbguanliyuan{
privatedbguanliyuan(){
}
publicstaticvoidaddAdmin(guanliyuana){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();
PreparedStatementps=DBUtil.getPreStatment(conn,"INSERTINTOAdmin(AdminName,AdminPassWord)VALUES(?
?
)");
ps.setString(1,a.getAdminName());
ps.setString(2,a.getAdminPassWord());
ps.executeUpdate();
ps.close();
}catch(Exceptionex){
ex.printStackTrace();
}finally{
MySqlConnnection.closeConnection(conn);
}
}
publicstaticvoiddeleteAdmin(intid){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();
PreparedStatementps=DBUtil.getPreStatment(conn,"DELETEFROMAdminWHEREAdminId=?
");
ps.setInt(1,id);
ps.executeUpdate();
ps.close();
}catch(Exceptionex){
ex.printStackTrace();
}finally{
MySqlConnnection.closeConnection(conn);
}
}
publicstaticvoidupdateAdmin(guanliyuana){
Connectionconn=null;
try{
conn=MySqlConnnection.getConnection();
StringSql="UPDATEAdminSETAdminName=?
AdminPassWord=?
WHEREAdminId=?
";
PreparedStatementps=conn.prepareStatement(Sql);
ps.setString(1,a.getAdminName());
ps.setString(2,a.getAdminPassWord());
ps.setInt(3,a.getAdminId());
ps.executeUpdate();
ps.close();
}catch(Exceptionex){
ex.printStackTrace();
}finally{
MySqlConnnection.closeConnection(conn);
}
}
publicstaticguanliyuangetAdmin(intid){
gua