数据库课程设计报告总结
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、课程设计题目
学生信息管理系统
二、课程设计目的
数据库系统课程设计是为了配合学习数据库系统原理及应用开发而设置的是将关系数据库理论知识转化为解决实际问题能力的重要环节。数据库系统课程设计目的在于加深对关系数据库理论知识的理解通过使用具体的 DBMS掌握一种实际的数据库管理系统并掌握其操作技术熟练掌握使用数据库前端开发工具如 VB、 C++、 Java、 JSP、 Delphi、PowerBuilder 等进一步提高同学们运用数据库技术解决实际问题的能力。
学校每年都有新生入学、老生毕业还有其他各种人事变动。如何有效地管理这些学生的信息帮助学校和老师掌握学生的情况这就是学生信息管理系统需要完成的功能。
关于本系统的设计笔者出于对以下几点的考虑最终敲定设计的课题为学生信息管理系统
每个学校每个学院都有学生信息管理系统目的是对每年入学退学转学、获得各项奖励、获得各种处分、的学生基本信息的管理目前随着计算机的普及使用纸质档表格记录学生信息的方式已经落伍原因之一是纸质档难以实现对学生信息的删除修改次数频繁也会使得纸质档不清晰无法实现学生信息的快捷查询原因之二是当纸质档学生信息册只有一份时教师修改学生信息数据时需要相互传阅麻烦耗时当纸质学生信息册有多份时教师仅仅有权限实现对本班学生信息的修改学院需要统计各班的学生信息情况而这会导致最终学期汇总时的工作量巨大。基于以上原因学生信息管理系统的开发和设计十分有必要考虑到这些因素笔者最终敲定设计的课题为学生信息管理系统。
三、总体设计
3.1 实验要求
本系统主要的功能是收集学生的个人信息以便向教师提供每个学生在校的情况。
系统的主要功能有
1、学生个人信息输入包括姓名、性别、院系、生日、籍贯、生源所在地
2、学生流动情况的输入包括转系、休学、复学、退学、毕业
3、奖惩情况的输入
4、学生个人情况查询和修改包括流动情况和奖罚情况。
系统功能概念模型
3.2 本系统所运用到技术栈
版本控制系统Git
数据库技术MySql
后端技术JavaBean、JavaSwing
3.3 本系统所运用到的编程工具
代码编写Eclipse
数据库图形化管理工具Navicat for MySQL
前端页面设计插件windowBuilder
代码托管服务gitee
3.4 核心技术介绍
MysqlMySQL 是一个关系型数据库管理系统由瑞典 MySQL AB 公司开发目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统关联数据库将数据保存在不同的表中而不是将所有数据放在一个大仓库内这样就增加了速度并提高了灵活性。
windowBuilderwindowBuilder是一个工作在Eclipse IDE下的可视化的窗体设计插件利用它通过拖拽、直接属性设置等交互式的设计方式自动生成所见即所得的界面所需要的Java代码从而高效地完成Java GUI程序的图形用户界面的设计。在复杂的GUI界面设计上它将显著提高开发效率事半功倍。
GitGit 是一个免费并且开源的分布式版本控制系统旨在快速高效地处理从小到大所有项目的版本管理。Git 非常容易学习低植入高性能。因为拥有轻量的本地分支易用的暂存区和多工作流的特点它超越了类似Subversion CVSPerforce和ClearCase的其他的 SCM 工具。简洁来说Git是一个分布式版本控制系统。
3.5 模块介绍
数据库表设计
学生基本信息表
学生奖励代码表
学生奖励信息表
老师注册表
学生注册表
学生惩罚信息表
学生惩罚代码表
学生学籍变更信息表
学生学籍信息变更代码表
登录模块
学生首页模块
修改密码模块
学生实名认证模块
学生基本信息模块
老师首页模块
老师操作学生学籍信息模块
老师录入学生奖励信息模块
老师录入学生处罚信息模块
老师查询学生信息模块
3.6 设计步骤
1、在Eclipse中安装windowBuilder插件并创建WindowBuilder工程项目。
2、在Maven官网下载jar包并导入工程。
3、打开Swing Design插件设计前端登录页面并完成基本的注册和退出系统的后端功能。
4、设计学生系统首页和老师系统首页并完成登录模块的登录和重置输入的后端功能。
5、设计并实现修改密码、返回登录窗口、学生信息实名认证的后端功能。
6、设计并实现老师系统中录入学生学籍变更、奖励记录、处分记录的后端功能。
7、设计并实现老师系统中查询学生信息的页面及按钮的后端功能。
8、设计并实现学生系统中查询自己学籍变更、奖励记录和处罚记录的后端功能。
四、详细设计
4.1 项目资源目录介绍
4.2 关键代码介绍
4.2.1 安装windowBuilder插件并创建WindowBuilder工程项目
查看eclipse版本在eclipse官网中找到与之相匹配的windowBuilder插件版本复制对应的插件版本下载链接。在eclipse中点击Help中的Install New Software进入界面后点击Add将之前复制过的插件下载链接粘贴到Location输入框中Name中填写windowBuilder随便填不填都可以点击OK。点击Select All点击Next一路Next后点击接受条约点击Finish然后等待安装成功重启Eclipse。
重启Eclipse后新建工程点击New-other选择WindowBuilder-Swing Designer中的JFrame点击Next输入类名后点击Finish。在项目实体类中点击左下角的Design按钮进行页面设计。
4.2.2 在Maven官网下载jar包并导入工程
打开Maven仓库搜索需要的jar包名称点击所需版本的jar包之后点击Files栏中的jar按钮进入jar包的下载。将下载的jar包拷贝到项目的libs目录下点击Project-properties进入界面后点击Java Build Path选择Libraries栏点击Add JARs…选择libs目录下刚添加进去的jar包点击OK后完成。如图4-3所示。
4.2.3设计前端登录页面并完成注册和退出系统的后端功能
前端页面的设计依赖于windowBuilder插件在Designer设计页面设置布局后拖拽组件在Desigen页面对应的java文件中会自动生成Javaswing代码此处展示登录页面的部分Javaswing代码之后不再展示前端代码
//登录按钮板块
Login = new JFrame();
login.setBounds(100, 100, 849, 598);
login.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
login.setLocationRelativeTo(null);//将登录界面置于屏幕中间
JButton button_login = new JButton("\u767B\u5F55");
button_login.setBounds(430, 506, 94, 33);
button_login.setFont(new Font("微软雅黑 Light", Font.BOLD, 17));
从登录模块点击注册按钮后跳转到注册按钮直接退出登录窗口打开注册窗口即可注册按钮实现的后端代码如下
button_register.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new register_frame().main(null);//打开注册
login.dispose();//关闭登录窗口
}
});
登录页面跳转到注册页面后用户设置用户名和新密码以及确认新密码获取用户输入的数据通过所有判断条件后调用sqlUpdate实体类中的方法操作数据库将用户输入的用户名和密码插入到相应的数据库表中。确定注册按钮的后端实现代码如下
button_right.addActionListener(new ActionListener() {
/*注册确认按钮实现的代码*/
public void actionPerformed(ActionEvent e) {
if (e.getSource()==button_right) {//用户点击了确认按钮
/*判断用户行为显示相应窗口*/
if (textField_username.getText().toString().equals("")) {
JOptionPane.showMessageDialog(null, "请输入用户名和密码","友情提示",2);//用户用户名和密码均未输入
}else if (textField_password.getText().toString().equals("")) {
JOptionPane.showMessageDialog(null, "请输入密码","友情提示",2);//用户未输入密码
}else if (textField_username.getText().toString().equals("")) {
JOptionPane.showMessageDialog(null, "请输入用户名","友情提示",2);//用户未输入用户名
}else if (textField_rightKey.getText().toString().equals("")) {
JOptionPane.showMessageDialog(null, "请确认密码保证两次输入密码相同","友情提示",2);//用户未确认密码
}else {//用户所有信息均已输入且满足确认的要求
if (textField_rightKey.getText().toString().equals(textField_password.getText().toString())) {//两次输入密码相同
if (comboBox_user.getSelectedItem().toString().equals("老师")) {//判断出用户类型为老师
String sql="Insert Into register_teacher(username,password) values(?,?)";//编写sql语句
sqlUpdate.update(sql, textField_username.getText().toString(),textField_password.getText().toString());//调用自定义函数将老师的账号和密码插入到数据库中
JOptionPane.showMessageDialog(null, "注册成功");
}else {//判断出用户类型为学生
String sql="Insert Into register_student(username,password) values(?,?)";//编写sql语句
sqlUpdate.update(sql, textField_username.getText().toString(),textField_password.getText().toString());//调用自定义函数将学生的账号和密码插入到数据库中
JOptionPane.showMessageDialog(null, "注册成功");
}
new xt_application().main(null);//打开登录窗口
register.dispose();//关闭注册窗口
}else {//两次输入密码不同
JOptionPane.showMessageDialog(null, "两次输入的密码不一致","友情提示",2);
}
}
}
}}
从登录模块退出系统实现退出按钮的功能设计出退出按钮后实现其后端代码捕获到用户行为弹出提示框提示用户是否确定要退出系统并创建变量接收用户的点击结果当变量为0时说明用户点击了“是”此时关闭系统若变量值不为0则不执行退出系统操作退出系统按钮实现的后端代码如下
/*退出按钮的代码实现*/
button_exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if (e.getActionCommand().toString().equals("退出")) {//捕获到用户行为
int isExit = JOptionPane.showConfirmDialog(null, "您确定要退出系统吗","友情提示",JOptionPane.YES_NO_OPTION);//提示用户是否要退出系统
if(isExit==0) login.dispose();//退出系统
}
}
});
4.2.4 设计学生系统首页和老师系统首页完成登录模块的登录和重置输入的后端功能
设计学生系统首页和老师系统首页直接在Design页面中拖拉组件即可在此前端代码不再展示不再赘述。此处主要介绍登录页面的登录和重置输入按钮的后端实现功能。
当用户点击登录按钮后获取到用户输入的用户名、密码和下拉框中选择的登录身份。当用户选择“学生”的身份进行登录时调用sqlUpdate实体类中的静态方法传参为sql语句和参数查询出学生登录表中是否有此账号若密码错误或者账号错误则给出相应的提示信息若账号密码正确则关闭登录页面打开学生系统页面。当用户选择“老师”的身份进行登录时代码类似只是查询数据时是在老师登录表中查询是否有此账号。登录按钮实现的后端代码如下注意由于老师登录的代码与学生登录的代码类似此处不再展示老师登录的代码
public void actionPerformed(ActionEvent e) {
String name=user_text.getText().toString();//用户名
String key=key_text.getText().toString();//密码
String idtf=user_type_comboBox.getSelectedItem().toString();
if (e.getActionCommand().equals("登录")) {
if (name.isEmpty()&&!key.isEmpty()) {//用户未输入用户名只输入了密码
JOptionPane.showMessageDialog(null,"用户名不能为空","友情提示",2);//弹出用户名为空的提示性对话框
}else if (key.isEmpty()&&!name.isEmpty()) {//用户只输入了用户名而未输入密码
JOptionPane.showMessageDialog(null, "密码不能为空","友情提示",2);//弹出密码为空的提示性对话框
}else if (key.isEmpty()&&name.isEmpty()) {//用户均未输入用户名和密码
JOptionPane.showMessageDialog(null, "用户名和密码不能为空","友情提示",2);//弹出用户名和密码均为空的提示性对话框
}else {
if (idtf.equals("学生")) {//当用户类型为学生时
try {
if (name.equals(sqlUpdate.user_Query("select username from register_student where username=?", name))) {//在数据库中查询到指定用户名
if (key.equals(sqlUpdate.pwd_Query("select password from register_student where password=?", key))) {//在数据库中查询到用户名所对应的密码
stu_menu_frame f=new stu_menu_frame();//由于getId()未设置为静态方法故必须新设对象一调用getId()方法
f.getId(sqlUpdate.id_Query("select id from register_student where username=?", name));//调用stu_menu_frame中的getId()方法达到传参的目的
new stu_menu_frame().main(null);//验证身份成功登录成功
login.dispose();//关闭登录页面
}else {
JOptionPane.showMessageDialog(null, "密码错误,请重新输入","友情提示",2);//密码错误验证身份失败登录失败
}
}else {
JOptionPane.showMessageDialog(null, "用户名不存在","友情提示",2);//用户名不存在或者用户类型不符合
}
} catch (HeadlessException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
} catch (Exception e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
}
}
当用户点击登录界面的重置按钮后将用户名和密码输入框置空并将下拉框的选项置为初始值。重置按钮的后端实现代码如下
public void actionPerformed(ActionEvent e) {
user_text.setText("");/*将输入框置空*/
key_text.setText("");
user_type_comboBox.setSelectedIndex(0);
}
});
4.2.5设计并实现修改密码、返回登录窗口、学生信息实名认证的后端功能
创建变量保存登录页面传来的用户id保证之后所有的操作都是围绕此用户的信息。当用户点击菜单项修改密码按钮时将id进行传参到menu_frame类中打开修改密码的窗口关闭学生系统首页的窗口。由于点击菜单项打开新窗口的代码逻辑类似在此仅展示点击修改密码按钮后的页面跳转逻辑之后类似操作不再赘述点击修改密码按钮的后端代码实现
public void mousePressed(MouseEvent e) {
// TODO 自动生成的方法存根
if (e.getSource()==menuItem_change_key) {//捕获到用户点击了菜单项修改密码的按钮
stu_change_key_frame change_key=new stu_change_key_frame();//由于change_key_frame类中的getId()方法不是静态方法,所以必须先创建对象
change_key.getId(s_id);//调用getId()传参
new stu_change_key_frame().main(null);//打开修改密码的窗口
menu_frame.dispose();//关闭菜单窗口
}
}
当用户点击返回登录页面菜单项时代码逻辑打开登录窗口并关闭菜单窗口即可逻辑简单不再赘述。
当用户点击学生信息实名认证的菜单项时向实名认证的类中传参id调用sqlUpdate类中的静态方法查询数据库学生信息表中是否存在此id号学生的信息若方法返回值不为0则说明该用户信息已经足够完善无需再完善信息若方法返回值为0则说明学生信息表中不存在此id号的学生信息需要进行实名认证打开完善信息的页面点击实名认证菜单项的后端代码实现如下
public void mousePressed(MouseEvent e) {
// TODO 自动生成的方法存根
if (e.getSource()==menuItem_confirm) {
try {
confrim_frame confrim=new confrim_frame();//由于getId()并没有设置为confrim_frame类中的静态方法,所以必须新建立对象才能调用方法
confrim.getId(s_id);//向confrim_frame类中传参
/*isId是id_Query()方法的返回值,若数据库中已存在该s_id号方法返回值为id值说明在此之前用户已经完善过信息无需完善若方法返回0值说明此前用户未完善信息*/
int isId = sqlUpdate.id_Query("select id from student where id=?", s_id);//查找数据库中是否存在登录界面传来的id号
if (isId!=0) {//若id号存在说明该用户无需完善信息
JOptionPane.showMessageDialog(null, "信息已足够完善","友情提示",2);
}else {//若id号不存在说明该用户是新用户,需要完善信息
new confrim_frame().main(null);//打开完善信息页面
}
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
}
}
4.2.6设计并实现老师系统中录入学生学籍变更、奖励记录、处分记录的功能
当老师点击录入信息中的学籍变更菜单项时关闭教师管理系统窗口打开修改学籍信息的窗口老师输入学号后点击查询编写sql语句并执行查询学生信息表中的相关信息将查询到的相应信息放入相应的标签当中达到数据回显的目的然后老师输入学籍代码点击修改后通过一系列判断后查询到用户输入的学籍代码所对应的学生学籍变更信息编写sql语句并执行修改或者增添数据库中学生学籍信息表数据修改学籍信息菜单项的后端代码实现如下
public void actionPerformed(ActionEvent e) {
if (e.getSource()==button_change&&textField_CODE.getText().toString().isEmpty()) {//当用户未输入级别代码却点击了修改按钮
JOptionPane.showMessageDialog(null, "请您输入级别代码","友情提示",2);//弹出提示窗口
}else if (e.getSource()==button_change&&label_getStuId.getText().toString().isEmpty()) {//当学号标签上未显示内容但用户点击了修改按钮
JOptionPane.showMessageDialog(null, "请您先查找指定学生","友情提示",2);//弹出提示窗口
}else {
int code = Integer.parseInt(textField_CODE.getText().toString());//获取用户输入在文本框内的学籍代码并将其转换为int类型
String StuId = textField_getStuId.getText().toString();//获取用户输入在文本框内的学号
int id=0;
try {
id = sqlUpdate.id_Query("select ID from student where s_studentid=?", StuId);//查找到相应学号的同学的id号
} catch (Exception e2) {
// TODO 自动生成的 catch 块
e2.printStackTrace();
}//获取查询同学的id号
if (e.getSource()==button_change) {//捕获到用户点击了修改按钮
if (flag1==1) {
if (code<0||code>4) {
JOptionPane.showMessageDialog(null, "您输入的学籍代码错误,请输入0~4之间的数字","友情提示",2);
}else {
if (flag2==1) {//该学生在学籍信息的数据库中有记录只需修改学籍信息而无需增添信息到数据库中
sqlUpdate.update("update change_information set CHANGE_CODE=? where STUDENTID=? ", code,StuId);//修改数据库中的内容
String DESCRIPTION="";
try {
DESCRIPTION = sqlUpdate.description_Query("select DESCRIPTION from change_code where code=?", code);//调用函数查询到code对应的学籍状态
} catch (Exception e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
sqlUpdate.update("update change_information set DESCRIPTION=? where STUDENTID=?", DESCRIPTION,StuId);//将数据库中DESCRIPTION的内容修改
label_getXjZt.setText(DESCRIPTION);//将标签的内容修改
label_getXjCODE.setText(String.valueOf(code));//更新标签上的内容
java.util.Date date=new java.util.Date();//获取点击按钮的当前时间
SimpleDateFormat dateFormat=new SimpleDateFormat("YYYY-MM-dd");//设置时间的格式
label_getTime.setText(dateFormat.format(date));//修改标签上的内容
sqlUpdate.update("update change_information set REC_TIME=? where STUDENTID=?", dateFormat.format(date),StuId);//更改数据库中的内容
}else {
String DESCRIPTION="";
try {
DESCRIPTION = sqlUpdate.description_Query("select DESCRIPTION from change_code where code=?", code);//调用函数查询到code对应的学籍状态
} catch (Exception e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
label_getXjZt.setText(DESCRIPTION);//将标签的内容修改
label_getXjCODE.setText(String.valueOf(code));//更新标签上的内容
java.util.Date date=new java.util.Date();//获取点击按钮的当前时间
SimpleDateFormat dateFormat=new SimpleDateFormat("YYYY-MM-dd");//设置时间的格式
label_getTime.setText(dateFormat.format(date));//修改标签上的内容
/*向*/
sqlUpdate.update("insert into change_information(ID,STUDENTID,CHANGE_CODE,REC_TIME,DESCRIPTION) values(?,?,?,?,?)", id,StuId,code,dateFormat.format(date),DESCRIPTION);
flag2=1;
}
JOptionPane.showMessageDialog(null, "修改成功","友情提示",2);//弹出修改成功的提示窗口
}
}else {
JOptionPane.showMessageDialog(null, "未查询到该学生,故您无法修改学籍信息","友情提示",2);
}
}
}
}});
老师录入学生奖励记录和处罚记录的代码逻辑和录入学籍信息的类似再次不再赘述。
4.2.7 设计并实现老师系统中查询学生信息的页面及按钮的后端功能
设计学生信息查询页面同样是使用windowBuilder组件进行设计不再赘述。当输入查询条件后点击查询按钮根据用户输入的数据进行判断通过数据类型来编写sql语句不得不说我认为这是整个项目自己当时写的最烂的一部分代码了代码复用性特别差完全可以封装成函数把获取参数添加到集合中去然后遍历集合就好了for循环中可以使用判断语句然后拼接字符串最终把sql语句拼接好然后进行传参就好然后调用类中的方法进行传参。从数据库表中查询到信息后放入表格标签中实现数据显示然后每点击一次查询就清空一次表格数据防止点击查询导致数据在表格中的追加而不是查询显示。另外在表格右下角设计了刷新按钮此按钮的目的是清空表格内容其实我感觉是多此一举的功能因为每点击一次查询在显示出学生信息之前就会将表格内容清空实现逻辑就是调用model中的setRowCount函数使得表格中行数置0数据清空。查询学生信息的代码展示一部分吧实在太烂太长复用性太差就不展示全部代码了查询学生信息的部分代码如下
//若用户只输入了性别一栏信息
model.setRowCount( 0 );//将表格的行数置为0实现每点击查询按钮一次表格就清空一次
String sex=comboBox_getSex.getSelectedItem().toString();
List<Student> list = null;//存放学生变量
try {
list = sqlUpdate.Student_Query("select * from student where s_sex=?", sex);//查找数据库中性别全为sex的学生
} catch (Exception e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
for (int i = 0; i < list.size(); i++) {//遍历集合,将每一个同学的基本信息输入到表格中
try {//将查询到相应学号的学生的奖惩信息赋值予对象的相应属性
list.get(i).setXj_information(sqlUpdate.xj_rReward_Punish_query("select DESCRIPTION from change_information where STUDENTID=?", list.get(i).getStudentId()));
list.get(i).setReward_information(sqlUpdate.xj_rReward_Punish_query("select DESCRIPTION from reward where STUDENTID=?", list.get(i).getStudentId()));
list.get(i).setPunish_information(sqlUpdate.xj_rReward_Punish_query("select DESCRIPTION from punishment where STUDENTID=?", list.get(i).getStudentId()));
list.get(i).setIsRight(sqlUpdate.IsPunish_query("select ENABLE from punishment where STUDENTID=?", list.get(i).getStudentId()));
} catch (Exception e2) {
// TODO: handle exception
e2.printStackTrace();
}
/*提取出学生的奖惩属性赋值给新的变量*/
String xj_information = list.get(i).getXj_information();
String reward_information = list.get(i).getReward_information();
String punish_information = list.get(i).getPunish_information();
String isRight = list.get(i).getIsRight();
/*提取出学生的基本属性赋值给新的变量*/
int studentId = list.get(i).getStudentId();
String name = list.get(i).getName();
String sex2 = list.get(i).getSex();
int classid = list.get(i).getClassid();
String collage = list.get(i).getCollage();
String born = list.get(i).getBorn();
String resident = list.get(i).getResident();
/*设置表格中的行内容*/
Object[] data=new Object[] {studentId,name,sex2,classid,collage,born,resident,xj_information,reward_information,punish_information,isRight};
model.addRow(data);
4.2.8 设计并实现学生系统中查询自己学籍变更、奖励记录和处罚记录的功能
学生系统中查询学籍变更、奖励记录和处罚记录的功能其实十分类似因为学生是没有录入自己奖励记录和处罚记录的功能的这个操作只能由老师实现所以仅仅是一个数据回显的实现所以后端查询数据库前端获取到数据后将数据放入标签中显示在页面中即可。当用户点击查询信息中的学籍变更菜单项时将学生系统页面关闭打开学籍变更信息页面在页面中可以看到数据库中查询到的信息。代码逻辑是当用户点击了菜单项跳转页面时就把学生id进行传参然后在方法体中编写sql语句将id作为查询条件进行查询学生的学号、姓名、学籍代码、学籍状态和更新时间等信息并将这些信息放入到标签当中以此在页面中可以显示出来。查询学生学籍变更信息的后端代码实现如下
try {
Connection con = connection.getConnection();
String sql="select STUDENTID,CHANGE_CODE,REC_TIME,DESCRIPTION from change_information where ID=?";
PreparedStatement statement=con.prepareStatement(sql);
statement.setInt(1, s_id);
ResultSet set = statement.executeQuery();
if (set.next()) {
label_getStuId.setText(String.valueOf(set.getInt(1)));//学号
label_getCODE.setText(set.getString(2));//学籍代码
label_getDes.setText(set.getString(4));//学籍状态
label_getTime.setText(set.getString(3));//更新时间
label_getName.setText(sqlUpdate.name_query("select s_name from student where id=?", s_id));//姓名
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
五、结果与分析
最终项目成型学生信息管理系统目前未发现任何bug项目实现了任务指导书中的所有基本功能此项目有拓展功能存在但此项目中存在很多不足之处以下一并进行分析。
项目拓展功能
①登录注册和修改密码的功能任务指导书上并没有对这个功能做要求笔者认为登录注册功能是系统所必需的基本功能感觉没有登录注册功能的系统是不完善的系统所以项目中分别设计了老师登录表和学生登录表在前端可以判断出用户身份并对两张表进行新增数据和查询数据。修改密码功能则是对两张表进行修改数据。
②退出系统的功能这个功能任务指导书上也没有要求但功能十分简单所以就一并实现了。因为整个系统都是在原有页面上打开的新页面所以只需将当前页面窗口关闭即可实现退出系统功能。
③返回登录页面的功能此功能也十分简单和退出功能十分类似只需要关闭当前页面窗口打开登录页面即可也就是简单的页面跳转。
项目功能不足之处
①项目整体架构不好只是单独的Java文件没有面向接口编程没有利用好项目的三层架构。
②没有封装好函数代码过于冗余代码复用性不好更新功能或完善功能较为困难。
③前端页面是利用组件设计但在一开始没设置布局某些页面在显示数据字数过多时会导致标签错位。且前端页面不够美观。
④Jar包没全部保存在libs目录下整个项目是引入的外部jar包这会导致更改项目路径后出现jar包缺失的情况。
⑤项目中判断语句过多代码阅读性差但还好注释比较多。
⑥类似于dao层的sqlUpdate文件中的代码并没有很好地完成它的功能很多sql语句是其他文件传参进来的而应该的是sql语句在dao层编写才对。
⑦涉及到输入数据的部分大多都是采用的输入框形势并且没有对输入的数据进行校验一旦用户输入了非法数据数据类型和数据库中存储的数据类型不一致就会导致报错可以说输入数据部分及其不完善。
六、小结与心得体会
谈到项目功能的不足之处还是比较多的这是当时学完Java后就做的第一个Swing项目作为练手当时的主要目的是熟悉类、静态方法等基础知识点所以这个项目并不成熟代码也过于冗余复用性不好
但是通过这个项目学习前后端交互知识还是及其不错的它是原生的jdbc加载驱动连接数据库的这些基础打牢了再去学习一些框架就会轻松许多。另外该项目能很好地锻炼到Java基础知识点因为笔者是学完Java就写的这个项目练手当时对于类、继承和静态方法等一些不太明白不太熟练的点这个项目作为练手是很好的选择。为什么不更新这个项目呢也就是为什么不把不足之处进行完善笔者已经说过该项目没有采用面向接口编程没有利用好三层架构函数封装的也不够好代码冗余性、复用性以及阅读性都不够好在此基础上进行更新完善功能笔者觉得意义不大因为项目本身就是当时学完Java练手写的目的是熟悉Java的基础知识显然目的是达到了的笔者觉得这就足够了。
通过此项目还是很好的学习到了数据库技术对于sql语句的编写数据库的连接方法数据库图形化工具的使用数据库建模工具的使用Java基础知识都有所熟练为之后框架的学习打下了良好的基础。
体会
谈到项目功能的不足之处还是比较多的这是当时学完Java后就做的第一个Swing项目作为练手当时的主要目的是熟悉类、静态方法等基础知识点所以这个项目并不成熟代码也过于冗余复用性不好
但是通过这个项目学习前后端交互知识还是及其不错的它是原生的jdbc加载驱动连接数据库的这些基础打牢了再去学习一些框架就会轻松许多。另外该项目能很好地锻炼到Java基础知识点因为笔者是学完Java就写的这个项目练手当时对于类、继承和静态方法等一些不太明白不太熟练的点这个项目作为练手是很好的选择。为什么不更新这个项目呢也就是为什么不把不足之处进行完善笔者已经说过该项目没有采用面向接口编程没有利用好三层架构函数封装的也不够好代码冗余性、复用性以及阅读性都不够好在此基础上进行更新完善功能笔者觉得意义不大因为项目本身就是当时学完Java练手写的目的是熟悉Java的基础知识显然目的是达到了的笔者觉得这就足够了。
通过此项目还是很好的学习到了数据库技术对于sql语句的编写数据库的连接方法数据库图形化工具的使用数据库建模工具的使用Java基础知识都有所熟练为之后框架的学习打下了良好的基础。
以上为本次课程设计的小结与心得体会皆为真实感受不管以后走的多远学的东西有多杂Java、Mysql的基础知识部分还是要时常温习基础坚决要打牢然后学习过新技术后要注意找项目练手这样才能对新知识进一步熟练掌握。