前言:
主要运用Java语言完成界面的编写和数据库的驱动连接,建表使用的是navicat,开发使用Ideal软件,大家可以自行选择自己熟悉的编译软件和开发软件。创作不易,如有帮助,请点赞收藏一下。
各个模块的源代码:
百度网盘
链接:https://pan.baidu.com/s/1C1kIfqMWX9f2IZDjbwV-5A
提取码:liu1
课程设计题目:
学生信息管理系统。
课程设计目的:
数据库系统课程设计是为了配合学习数据库系统原理及应用开发而设置的,是计算机科学与技术、大数据、信息安全、物联网工程、软件工程、智能制造等专业集中实践的教学环节,是将关系数据库理论知识转化为解决实际问题能力的重要环节。数据库系统课程设计目
的在于加深对关系数据库理论知识的理解,通过使用具体的 DBMS,掌握一种实际的数据库管理系统并掌握其操作技术,熟练掌握使用数据库前端开发工具(如 VB、C++、Java、JSP、Delphi、PowerBuilder 等),进一步提高同学们运用数据库技术解决实际问题的能力。
总体设计:
1.系统需求分析:
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
1.1.系统功能分析:
本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统 的主要功能有:
l 学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。
l 学生流动情况的输入,包括:转系、休学、复学、退学、毕业。
l 奖惩情况的输入。
l 学生个人情况查询和修改,包括流动情况和奖罚情况。
1.2.系统功能模块设计:
根据系统功能要求可以将系统分解成几个模块来分别设计应用程序界面,如图 1 所示。
1.3数据流程图:
学生信息管理系统的数据流程如图 2 所示。
2.数据库设计:
2.1.数据库需求分析:该功能要求实现学生信息所需的数据项和数据结构。
2.2.数据库概念结构设计:
图 3 是本系统所需数据的 E-R 模型图。
2.3数据库逻辑结构设计:
根据系统 E-R 图,需要设计 4个数据表来存放学生的信息。为了系统的完整,系统中 包括了应用程序设计中所需的 2个外部数据表。为了优化数据表结构,部分字段采用代码形式,因此需要附加 3个代码表。这 9个数据表的结构如表 1 到表 9 所示。
2.4.1数据库初始建立
2.4.2初始数据输入
数据表创建成功后,数据库中还没有实际的数据。为了保证外部键能使用,数据需要提前输入,如院系编号、班级编号、学籍变更代码和奖惩级别等等。
学籍变更代码和奖惩级别的主关键字 CODE 从 0 开始用阿拉伯数字依次编号,便于程序设计时,采用单选按钮来选择.
3.各功能模块的设计
3.1 功能说明
1、学生个人信息输入
2、学籍变更情况的输入
3、奖励情况的输入
4、处罚情况的输入
5、学生个人情况查询和修改
3.2 用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。由于本系统管理内容比较简单,且为校园管理信息系统的一部分,因此使用一个窗体不同的标签页来完成系统要求的 5 项功能。
1、应用程序主窗体的创建
2、学生个人信息输入界面
3、学籍变更情况输入界面
4、奖励情况输入界面
5、处罚情况输入界面
6、学生个人情况查询和修改界面
3.3 各功能模块的实现
1、学生个人信息输入
2、学籍变更情况输入
3、奖励情况输入
4、处罚情况输入
5、学生个人情况查询和修改
详细设计:
1.该系统所需要记录的学生信息所需的数据项和数据结构:
l 学生:学号、姓名、性别、生日、籍贯、所在院系、所在班级。
l 处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效。
l 奖励记录:记录号、级别、奖励对象、记录时间、详细描述。
l 学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述。
所需的外部数据支持:
l 班级:班级编号、班级名称、所属院系。
l 院系:代码、名称。
2.确定好所需要的数据项和数据结构以后,开始建立数据库,我使用的软件是Navicat for MySQL。首先建立连接,然后新建一个Infodb数据库,在这个数据库中创建所需要的表,创建结果如下:
将每个表中所需要的数据项添加完毕,确保每一个表的数据项没有遗漏,同时设置好主键,切记主键不能为空值。
然后把需要提前添加的表中的数据添加完毕。例如这个change_code表。
3.用户界面设计
3.1应用程序主窗体的创建
首先先定义Jpanel用来放图片和其他的盘子,然后定义JLabel标签和JTextField和JPasswordField用来表示登录界面的账号和密码输入。
接着定义JBotton表示登录和注册按钮,只要点击这两个按钮中的其中一个就能触发一个事件,用来打开另外一个界面。
代码样例:JButton ok,register;
然后设置这个窗口的大小及显示的位置。首先根据我想要设置的背景图片的大小,我把窗口设置为宽1080px,高810px,显示位置根据电脑尺寸大小自动算出合适的居中位置,代码如下:
Toolkit kit= Toolkit.getDefaultToolkit();
Dimension screenSize=kit.getScreenSize();
int width=screenSize.width;
int height=screenSize.height;
int x=(width-WIDTH)/2;
int y=(height-HEIGHT)/2;
setSize(WIDTH,HEIGHT);
setLocation(x,y);//设置位置 和窗口大小
接着可以设置每一个盘子的布局和显示大小,使得界面更加美观。
jpanel_1=new javax.swing.JPanel();
jpanel_1.setBounds(0,0,WIDTH,HEIGHT);
jpanel_1.setLayout(null);//设置布局为空
同时可以设置字体颜色和字体型号。
account=new JLabel("账号 ");
account.setFont(f.account);
account.setForeground(new Color(255,228,181));
这里我定义了一个fond类,用来专门设置字体的大小颜色和型号,便于需要时直接调用。
最终界面图如下:
该窗口关闭设置为JFrame.EXIT_ON_CLOSE,只要关闭此窗口,就算打开了其他的窗口,所有窗口都会被关闭。需要注意的是,用户在输入账号密码时,如果账号密码与Infodb数据库中user表中所存的数据不一样的话,是登录不了的,这是为了保护学生的隐私信息。
例如我输入账号为d,密码为d,而此时的user表中并没有这个数据,所以登录失败。
实现代码:与数据库驱动连接后执行以下代码使得数据库与Java代码联系在一块。
String sql = "select user.account,user.password from user where ";
sql = sql + "user.account = '" + account + "' and user.password = '" + password + "';"
System.out.println("loginProcess(). sql = " + sql);
dbProcess.connect();
ResultSet rs = dbProcess.executeQuery(sql);
if (rs.next()) {
dbProcess.disconnect();
return true;
} else {
dbProcess.disconnect();
return false;
}
} catch (SQLException sqle) {
System.out.println("sqle = " + sqle);
}catch (Exception e) {
System.out.println("e = " + e);
}
return false;
}
这样就实现了主界面大致的设计。
3.2注册页面
注册页面如下图所示:
首先设置窗口关闭方式:JFrame.HIDE_ON_CLOSE,这就保证了注册完了用户后,关闭该界面不会把主界面也关闭掉。
注册栏中一共有四个信息:姓名,账号,密码,确认密码,缺少任何一个数据都不能够注册成功。同时密码和确认密码必须保证是一致的,不然也会注册失败。例如密码如果为空,就会跳出以下窗口:
如果创建的账号和密码与user表中已经存了的重复的话,就会跳出以下窗口:
因为在创建user表的时候,把账号设置为主键了,主键是唯一的。
当注册的数据没有问题时,就会显示注册成功,此时user表中的数据也会更新。比如我输入姓名为王华,账号为root,密码为123456,则最终结果如下图所示:
可以发现这条数据已经成功的存进数据库了。
在实现注册信息时,需要为每一栏输入框设置监听,为了后面判断做准备。
listener1= new AccountEvent();
accounttext.addActionListener(listener1);
nametext.addActionListener(listener1);
passwordtext.addActionListener(listener1);
okpasswordtext.addActionListener(listener1);
reg.addActionListener(listener1);
相对应的SQL语句为:
String sql = "insert into user values('";
sql=sql+name+"','";
sql=sql+account+"','";
sql=sql+password+"')";
System.out.println("insertProcess(). sql = " + sql);
通过输入自我创建的账号密码以及教师外号(为防止外校人员进入管理系统而设置的只有本校教师所知道的固定的教师外号),如果输入的账号与数据库中的账号没有重复,则创建成功,若有重复,则创建失败。
3.3学生信息系统操作页面
如果账号密码没有错误,那么就能够安全登录,来到学生信息操作页面。
很明显,上面有六个操作页面,第一个页面是学生的个人信息输入,通过输入学生的学号,姓名,性别,专业,院系,生日,籍贯把学生的个人信息输入到数据库中。
同理,其他五个页面也是如此,我只需要输入对应的数据,就会把输入的数据存到数据库中去。
这里最关键的就是如何实现把数据插入到数据库中去,关键代码为:
String sNo = jTFSNo.getText().trim();
String sName = jTFSName.getText().trim();
String sSex = jTFSSex.getText().trim();
String sClass = jTFSClass.getText().trim();
String sSubject = jTFSSubject.getText().trim();
String sBirth = jTFSBirth.getText().trim();
String sJiGuan = jTFSJiGuan.getText().trim();
// 建立插入条件
String sql = "insert into student values('";
sql = sql + sNo + "','";
sql = sql + sName + "','";
sql = sql + sSex + "',";
sql = sql + sClass + ",";
sql = sql + sSubject + ",'";
sql = sql + sBirth + "','";
sql = sql + sJiGuan + "');"
public DbProcess() {
try {
//mysql数据库设置驱动程序类型
Class.forName("com.mysql.jdbc.Driver");
System.out.println("mysql数据库驱动加载成功");
//sqlserver数据库设置驱动程序类型 //Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//System.out.println("sqlserver数据库驱动加载成功");
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
首先将数据库驱动关键操作与Java操作连接在一块,才能实现Java 与数据库之间的操作。
其次最重要的还有如何将文本栏中输入的信息转换到表格当中去,这一点也至关重要。关键代码如下:
String sql = "select * from punish;";
System.out.println("queryAllProcess(). sql = " + sql);
dbProcess.connect();
ResultSet rs = dbProcess.executeQuery(sql);
// 将查询获得的记录数据,转换成适合生成JTable的数据形式
changeVector2.clear();
while (rs.next()) {
Vector v = new Vector();
v.add(rs.getString("id"));
v.add(rs.getString("sNo"));
v.add(Integer.valueOf(rs.getInt("levels")));
v.add(rs.getDate("rec_time"));
v.add(rs.getString("shengxiao"));
v.add(rs.getString("description"));
changeVector2.add(v);
实验结果与分析:
比如我输入以下数据:
就会把插入进去的数据和表中原有的数据一起展示出来。
同理,学籍变更页面,奖励页面,处罚页面的操作也是如此,样例如下:
现在我们再去数据库中查看以下,看我们添加的数据是否真正存到数据库里面了。
很明显是存进去了的。最后是教务处管理人员的查询和修改操作,能够查询学生的所有信息,比如我查询学号为6的学生,把此学生的所有信息显示出来,然后还能够进行修改。结果如下图所示:
查询籍贯为湖北的学生信息:
这是查询结果,我们可以在任意一栏中修改我们想要修改的信息,比如把学生籍贯从湖南改为湖北,更改以后点击更新按钮,我们可以发现数据库中student表的6号学生信息的籍贯由湖南变成了湖北。
小结
以上就是这个系统的全部功能,如有错误或不足,或者有什么不理解的地方,请在评论区交流。