HNUST Java 数据库系统课程设计:学生管理系统
目录
- 实验要求叙述
- 系统需求分析
- 系统功能分析
- 系统功能模块设计(划分)
- 与其它系统的关系
- 数据流程图
- 数据库设计
- 数据库需求分析
- 数据库概念结构设计
- 数据库逻辑结构设计
- 数据库的建立
- 各功能模块的设计与实现
- 功能说明
- 用户界面设计
- 各功能模块的实现
- 界面演示及讲解(GUI界面设计)
- 注册界面
- 登陆界面
- 学生管理系统界面
- 组件(按钮,文本框,下拉框,文本等)
- JLabel (标签组件)
- JButton(按钮)
- TextField(文本框)
- JComboBox(下拉框)
- JPasswordField(密码文本框)
- 相关操作(增删改查)
- 增加
- java连接数据库的增加操作
- 查询
- java连接数据库的查询操作
- 删除
- java连接数据库的删除操作
- 更改
- java连接数据库的修改操作
- 监听事件
- 按钮监听事件
- 回车监听事件
- 其余代码操作
- 更改任务栏图标
- 按钮透明化
实验要求叙述
系统需求分析
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生
的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
系统功能分析
本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统
的主要功能有:
学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。
学生流动情况的输入,包括:转系、休学、复学、退学、毕业。
奖惩情况的输入。
学生个人情况查询和修改,包括流动情况和奖罚情况。
系统功能模块设计(划分)
根据系统功能要求可以将系统分解成几个模
块来分别设计应用程序界面,如图 1 所示。
与其它系统的关系
学生信息管理系统是校园信息管理系统的一
个组成部分。它为其它系统,如班级信息管理系统、
教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提
供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数
据。
数据流程图
学生信息管理系统的数据流程如图 2 所示。
数据库设计
数据库需求分析
根据上一节的数据流程图,可以列出以下记录学生信息所需的数据项和数据结构:
学生:学号、姓名、性别、生日、籍贯、所在院系、所在班级。
处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效。
奖励记录:记录号、级别、奖励对象、记录时间、详细描述。
学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述。
所需的外部数据支持:
班级:班级编号、班级名称、所属院系。
院系:代码、名称。
数据库概念结构设计
图 3 是本系统所需数据的 E-R 模型图。
数据库逻辑结构设计
根据系统 E-R 图,需要设计 4 个数据表来存放学生的信息。为了系统的完整,系统中
包括了应用程序设计中所需的 2 个外部数据表。为了优化数据表结构,部分字段采用代码形
式,因此需要附加 3 个代码表。这 9 个数据表的结构如表 1 到表 9 所示。
数据库的建立
初始数据的输入
数据表创建成功后,数据库中还没有实际的数据。为了保证外部键能使用,数据需要提
前输入,如院系编号、班级编号、学籍变更代码和奖惩级别等等。
学籍变更代码和奖惩级别的主关键字 CODE 从 0 开始用阿拉伯数字依次编号,便于程
序设计时,采用单选按钮来选择。
本系统中所用到的学籍变更和奖惩级别代码如表 10 至表 12 所示(请设计者完成这些数
据表的逻辑结构)
各功能模块的设计与实现
功能说明
1、学生个人信息输入
2、学籍变更情况的输入
3、奖励情况的输入
4、处罚情况的输入
5、学生个人情况查询和修改
用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。由于本
系统管理内容比较简单,且为校园管理信息系统的一部分,因此使用一个窗体不同的标签页
来完成系统要求的 5 项功能。
我们把学生信息管理系统的窗体分成____个主要部分,如图____所示。
1、应用程序主窗体的创建
2、学生个人信息输入界面
3、学籍变更情况输入界面
4、奖励情况输入界面
5、处罚情况输入界面
6、学生个人情况查询和修改界面
各功能模块的实现
1、学生个人信息输入
2、学籍变更情况输入
3、奖励情况输入
4、处罚情况输入
5、学生个人情况查询和修改
界面演示及讲解(GUI界面设计)
我设计的界面包括登陆界面,注册界面以及学生信息管理(增删查改)界面。
注册界面
此界面通过dialog实例化一个JDialog窗口,将窗口关闭设置为JFrame.HIDE_ON_CLOSE(点击关闭按钮关闭当前窗口)
dialog = new JDialog(frame,"注 册",true);dialog.getContentPane().setLayout(null);
dialog.setSize(600,500); //窗口尺寸dialog.setLocation(620,250); //打开窗口的位置dialog.setVisible(true); //设置为可见dialog.setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE); //关闭当前窗口
通过输入自我创建的账号密码以及教师代码(为防止外校人员进入管理系统而设置的只有本校教师所知道的固定的代码),如果输入的账号与数据库中的账号没有重复,则创建成功,若有重复,则创建失败。
登陆界面
此界面通过frame实例化一个JFrame窗口,将窗口关闭设置为JFrame.EXIT_ON_CLOSE(点击关闭按钮关闭全部窗口)
frame = new JFrame();frame.setResizable(false);frame.setTitle("\u5B66\u751F\u7BA1\u7406\u7CFB\u7EDF"); //学生管理系统的窗口名frame.setBounds(200, 25, 1500, 1000);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭所有窗口frame.getContentPane().setLayout(null);
通过输入账号和密码,匹配数据库,若账号不存在,则会输出账号不存在,若账号密码正确则会进入学生管理系统界面。
学生管理系统界面
此界面通过f实例化一个JFrame窗口,然后通过jtbp实例化一个JTabbedPane标签,jp1实例化一个JPanel面板。举一个代码例子如下:
JTabbedPane:表示选项卡面板,可以包含多个组件,但一次只显示一个组件,用户可在组件之间方便地切换。
JPanel:表示一个普通面板,是最灵活、最常用的中间容器。
JTabbedPane jtbp = new JTabbedPane();jtbp.setFont(new Font("华文仿宋", Font.PLAIN, 25)); //设置tab的字体样式及大小JPanel jp1=new JPanel();jp1.setLayout(null);jtbp.addTab("学生个人信息", jp1); //将jp1面板添加到jtbp中,并将标签名字设置为“学生个人信息”f.setContentPane(jtbp); //将jtbp添加到定义的JFame窗口中
再此页面进行增删查改的操作。
组件(按钮,文本框,下拉框,文本等)
以 以下界面 为例子。
JLabel (标签组件)
文本:
JLabel lblNewLabel = new JLabel("查询字段"); //显示的单行文本为:查询字段lblNewLabel.setFont(new Font("华文隶书", Font.PLAIN, 24)); //设置文本的样式及文本大小lblNewLabel.setBounds(58, 243, 78, 41); //显示的位置jp1.add(lblNewLabel); //添加至jp1中
图片(背景):
JLabel lblNewLabel_40 = new JLabel("New label"); lblNewLabel_40.setIcon(new ImageIcon("C:\\eclipse_sourse\\DatabaseCourseDesign\\image\\\u6E56\u5357\u79D1\u6280\u5927\u5B665.jpg")); //图片路径lblNewLabel_40.setBounds(0, 0, 938, 651); jp1.add(lblNewLabel_40);
JButton(按钮)
JButton btnNewButton = new JButton("查询"); //在按钮上显示的文本为:查询btnNewButton.setFont(new Font("华文隶书", Font.PLAIN, 25)); //设置文本的样式及文本大小btnNewButton.setBounds(570, 105, 113, 36); //显示的位置jp1.add(btnNewButton); //添加至jp1中
按钮监听事件:
btnNewButton.addActionListener(e->{ //监听内容});
TextField(文本框)
TextField textField = new TextField();textField.setFont(new Font("华文宋体", Font.PLAIN, 25)); //输入的文本的样式及大小textField.setBounds(319, 105, 213, 36); //显示的位置jp1.add(textField); //添加至jp1中
获取文本框中的文本内容:
String a = textField.getText();
JComboBox(下拉框)
JComboBox comboBox = new JComboBox();comboBox.setFont(new Font("华文隶书", Font.PLAIN, 25)); //下拉框选项文本的样式及大小comboBox.setModel(new DefaultComboBoxModel(new String[] {"学号", "姓名", "学院", "班级"})); //设置下拉框选项comboBox.setBounds(171, 105, 87, 36); //显示的位置jp1.add(comboBox_5); //添加至jp1中
获取下拉框中的内容:
String c = (String) comboBox.getSelectedItem();
JPasswordField(密码文本框)
private JPasswordField passwordField;passwordField = new JPasswordField();passwordField.setFont(new Font("华文仿宋", Font.PLAIN, 25));passwordField.setBounds(1011, 350, 255, 37);frame.getContentPane().add(passwordField);
获取文本框中内容:
String b=new String(passwordField.getPassword());
相关操作(增删改查)
增加
btnNewButton为“确认”按钮。确认按钮监听事件
btnNewButton.addActionListener(e->{ //学生信息表插入数据 String a = textField.getText(); //学号,获取学号对应文本框的内容String b = textField_1.getText(); //名字String c = (String) comboBox_4.getSelectedItem(); //性别,获取下拉框内容String d = textField_2.getText(); //班级编码String f = textField_3.getText(); //院级编码String g = textField_4.getText(); //生日String h = textField_5.getText(); //籍贯try {Insert.student_insert(a,b,c,d,f,g,h); //调用包中的Insert类(需要为静态函数)JOptionPane.showMessageDialog(null,"输入成功!"); //输出输入成功} catch (Exception e1) {e1.printStackTrace();} });
Insert.student_insert(a,b,c,d,f,g,h); //调用包中的增加函数
JOptionPane.showMessageDialog(null,“输入成功!”); //输出输入成功
java连接数据库的增加操作
public static void student_insert(String a,String b,String c,String d,String f,String g,String h) throws Exception{ //学生信息数据插入数据库Connection conn=null;Class.forName("com.mysql.cj.jdbc.Driver");try {conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student/*数据库名*/?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8 ","root/*账户*/","root/*密码*/");}catch (SQLException e){e.printStackTrace();}String sql = "insert into student_information/*表名*/ (STUDENTID,NAME,SEX,CLASS,DEPARTMENT,BIRTHDAY,NATIVE_PLACE/*列名*/) values ('"+a+"','"+b+"','"+c+"','"+d+"','"+f+"','"+g+"','"+h+"')"; //增加语句Statement stmt = conn.createStatement();stmt.executeUpdate(sql);stmt.close();conn.close();}
查询
btnNewButton_4为“查询”按钮。查询按钮监听事件
btnNewButton_4.addActionListener(e->{ //查询String a = textField_23.getText(); //获取文本框内容if(textField_23.getText().trim().equals("")) //如果文本框内容为空{try {Select.student_select_0(); //调用包中的Select查询类} catch (Exception e1) {e1.printStackTrace();}}else if((String) comboBox_5.getSelectedItem() == "学号") { //获取下拉框内容为“学号”try {Select.student_select(a); } catch (Exception e1) {e1.printStackTrace();}}else if((String) comboBox_5.getSelectedItem() == "姓名") { //获取下拉框内容为“姓名”try {Select.student_select_1(a);} catch (Exception e1) {e1.printStackTrace();}}else if((String) comboBox_5.getSelectedItem() == "班级") { //获取下拉框内容为“班级”try {Select.student_select_3(a);} catch (Exception e1) {e1.printStackTrace();}}else { //学院try {Select.student_select_2(a);} catch (Exception e1) {e1.printStackTrace();}}});
Select.student_select_0();
java连接数据库的查询操作
public static void student_select_0() throws Exception{ //学号查询信息JFrame f=new JFrame(); Connection conn=null;/*获取数据库连接,JDBC省略*/Class.forName("com.mysql.cj.jdbc.Driver");try {conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student/*数据库名*/?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8 ","root/*账户*/","root/*密码*/");}catch (SQLException e){e.printStackTrace();}PreparedStatement preparedStatement=conn.prepareStatement("select *from student_information");//sql语句编译预处理ResultSet res=preparedStatement.executeQuery();//获取ResultSet结果集res.last();//游标移动到查询到的数据库数据记录的最后一条int row=res.getRow();//获取记录的总条数res.beforeFirst();//游标回到第一个记录前的位置 String arr[]= {"学号","姓名","性别","专业","学院","生日","籍贯"};//定义表格的列名称String comm[][] = new String[row][7];//row行,7列res.next();//游标回到第一个记录的位置for(int i=0;i<row;i++) {comm[i][0]=res.getString("STUDENTID"); //从数据库中获取STUDENTIDcomm[i][1]=res.getString("NAME");comm[i][2]=res.getString("SEX");comm[i][3]=res.getString("CLASS"); comm[i][4]=res.getString("DEPARTMENT");comm[i][5]=res.getString("BIRTHDAY");comm[i][6]=res.getString("NATIVE_PLACE");res.next(); }JTable jTable=new JTable(comm,arr);jTable.setPreferredScrollableViewportSize(new Dimension(800,200));//设置可滚动视图的大小JScrollPane jScrollPane=new JScrollPane(jTable);f.add(jScrollPane,BorderLayout.CENTER);//将滚动条放到窗体f .setBounds(200, 25, 961, 745);f .setTitle("学生管理系统");f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);Toolkit tk = Toolkit.getDefaultToolkit(); //更改任务栏图标Image img = tk.getImage("image/湖南科技大学图标.png"); //所需要的图标路径f.setIconImage(img);f.setVisible(true);//设置窗体可见f.validate();//设置组件可见f.pack();//自动调整组建大小使每个组键都能显示conn.close();}
数据库中student_information表中内容:
查询结果:
删除
btnNewButton_6_1为“确认”按钮。确认按钮监听事件
btnNewButton_6_1.addActionListener(e->{ //删除String a = textField_23_1_1.getText(); //学号int n=0;if(textField_23_1_1.getText().trim().equals("")) //如果从textField_23_1_1获取的内容为空JOptionPane.showMessageDialog(null,"请输入学号!"); //输出"请输入学号!"else {try {n=Select.student_select_6(a); //调用包中Select查询类} catch (Exception e2) {e2.printStackTrace();}if(n==0) {JOptionPane.showMessageDialog(null,"没有该学号!"); }else if(n ==1) {try {Delect.student_delect(a); //调用包中Delect删除类JOptionPane.showMessageDialog(null,"删除成功!");} catch (Exception e1) {e1.printStackTrace();} }}});
Delect.student_delect(a); //调用包中Delect删除类
java连接数据库的删除操作
public static void student_delect(String a) throws Exception{ //删除Connection conn=null;Class.forName("com.mysql.cj.jdbc.Driver");try {conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student/*数据库名*/?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8 ","root/*账户*/","root/*密码*/");}catch (SQLException e){e.printStackTrace();}String sql = "delete from student_information where STUDENTID="+a+""; //删除语句Statement stmt = conn.createStatement();stmt.executeUpdate(sql);stmt.close();conn.close();}
更改
btnNewButton_6为“确认”按钮。确认按钮监听事件
btnNewButton_6.addActionListener(e->{ //修改数据int n=0;String a = textField_23_1.getText(); //学号String b = textField_24.getText(); //姓名String c = (String) comboBox_4_1.getSelectedItem(); //性别String d = textField_2_1.getText(); //班级编码String f = textField_4_1.getText(); //生日String g = textField_5_1.getText(); //籍贯String h = textField_3_1.getText(); //院系编码if(textField_23_1.getText().trim().equals(""))JOptionPane.showMessageDialog(null,"请输入学号!"); else {try {n=Select.student_select_6(a);} catch (Exception e2) {e2.printStackTrace();}if(n==0) {JOptionPane.showMessageDialog(null,"没有该学号!"); }else if(n==1){try {if(textField_24.getText().trim().equals("")||textField_2_1.getText().trim().equals("")||textField_4_1.getText().trim().equals("")||textField_5_1.getText().trim().equals("")||textField_3_1.getText().trim().equals(""))JOptionPane.showMessageDialog(null,"有未输入信息!");else {Update.student_Update(a,b,c,d,f,g,h); //调用包中Update修改类JOptionPane.showMessageDialog(null,"修改成功!");}} catch (Exception e1) {e1.printStackTrace();} }} });
Update.student_Update(a,b,c,d,f,g,h); //调用包中Update修改类
java连接数据库的修改操作
public static void student_Update(String a,String b,String c,String d,String f,String g,String h) throws Exception{ //信息修改Connection conn=null;Class.forName("com.mysql.cj.jdbc.Driver");try {conn = DriverManager.getConnection(""jdbc:mysql://127.0.0.1:3306/student/*数据库名*/?useUnicode=true&characterEncoding=UTF-8&userSSL=false&serverTimezone=GMT%2B8 ","root/*账户*/","root/*密码*/");}catch (SQLException e){e.printStackTrace();}String sql = "update student_information set NAME='"+b+"',SEX='"+c+"',CLASS='"+d+"',DEPARTMENT='"+h+"',BIRTHDAY='"+f+"', NATIVE_PLACE='"+g+"' where STUDENTID="+a+"";Statement stmt = conn.createStatement();stmt.executeUpdate(sql);stmt.close();conn.close();}
监听事件
按钮监听事件
btnNewButton.addActionListener(e->{ });
回车监听事件
//登录界面监听“密码”键盘输入文本框passwordField.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) {if((char)e.getKeyChar()==KeyEvent.VK_ENTER) { //键盘输入为回车键}}}
其余代码操作
更改任务栏图标
Toolkit tk = Toolkit.getDefaultToolkit(); //更改任务栏图标Image img = tk.getImage("image/大学图标.png"); //所需要的图标路径frame.setIconImage(img); //frame为所设置的窗口
所需要更改的部分为getImage中你的图片路径,而我是在中Project创建了一个image文件夹,将图片放至在此文件夹中。
按钮透明化
btnNewButton.setContentAreaFilled(false); //除去默认的背景填充,“登录”按钮
HNUST Java 数据库系统课程设计:学生管理系统相关推荐
- Java web 课程设计——图书馆管理系统(SSM)
题目要求 本网上图书馆系统应实现图书网上检索.预约和续借功能: 系统管理:定义读者类别并设置参数,添加.修改和删除读者信息. 图书续借和预约:实现图书的续借.预约等功能. 图书检索:按书名或作者等信息 ...
- 《学生宿舍管理系统》计算机毕业设计|java毕业设计|课程设计|学生管理|宿舍管理|就寝管理|学生日常管理|
<学生宿舍管理系统> 项目含有源码.配套开发软件.软件安装教程.项目发布教程 技术路线: 该项目采用技术swing,开发工具eclipse 主要功能: 房间管理:主要实现对房间信息的删除. ...
- 查询学生选修课程管理系统java_JAVA数据库课程设计学生选课管理系统的
<JAVA数据库课程设计学生选课管理系统的>由会员分享,可在线阅读,更多相关<JAVA数据库课程设计学生选课管理系统的(59页珍藏版)>请在人人文库网上搜索. 1.一.课程设计 ...
- 签到考勤java课设_Java程序设计课程设计学生考勤系统Word版
<Java程序设计课程设计学生考勤系统Word版>由会员分享,可在线阅读,更多相关<Java程序设计课程设计学生考勤系统Word版(6页珍藏版)>请在人人文库网上搜索. 1.传 ...
- 课程设计————学生信息管理系统(包含历代思路和代码)
课程设计----学生管理系统(包含历代思路和代码) 一.前言 学生信息管理系统是我第一个独立完成的比较长的代码,也算是花费了一些心血,这个系统是我一点点把它从几百行的代码逐渐优化到上千行,功能从简单到 ...
- 大学生课程设计 ------ Java Web课程设计(学生成绩管理系统03)
大学生课程设计 ------ Java Web课程设计(学生成绩管理系统03) Java Web课程设计(代码+课程报告) ---------------------我是分割线------------ ...
- java学籍管理系统 课程设计,Java课程设计---学生学籍管理系统
Java课程设计---学生学籍管理系统 设计报告设计报告 课题名称学生学籍管理系统 学院 专业班级计算机应用技术 091 学号 学生 指导教师 2011 年 7 月 7 日 1 学生 指导教师 课题名 ...
- 大学生课程设计 ------ Java Web课程设计(学生成绩管理系统01)
大学生课程设计 ------ Java Web课程设计(学生成绩管理系统01) Java Web课程设计(代码+课程报告) 课程作业效果如下: 学生1:后台实现.数据库设计.前端后台整合 学生2:前端 ...
- java web期末课程设计 学生成绩管理系统(mysql,jstl+el,Javabean)+增删改查,session域+servlet(基础易理解)
学生成绩管理系统 一.实验目的 为了更好的学习理解JavaWeb,创建了此系统.此系统可以帮助学习Java web基础,特别是javaweb入门,此系统使用大部分Java web基础知识.Java w ...
- java查询学生信息_分别显示女生_女生学生基本信息的代码_java课程设计学生信息管理系统_毕业论文.doc...
java课程设计学生信息管理系统_毕业论文 学 号: 课 程 设 计 题 目学生信息管理系统学 院计算机科学与信息工程学院专 业金融信息化服务外包班 级学生姓名指导教师 2015年12月28日 课程设 ...
最新文章
- VMware vCenter Converter Standlone迁移手册
- 大数据风控-反欺诈之黑卡与养卡
- 乐鑫代理启明云端用图文带你一分钟快速了解ESP32-S3的功能特性:支持AI加速,更好的应用于图像、语音等识别,集成Wi-Fi + Bluetooth LE 5.0和高达44 个可编程 GPIO 管脚
- 2017.3.23下午
- 57 FI配置-财务会计-固定资产-资产数据传输-定义传输日期和附加参数
- webpack的多文件打包问题
- python动态爱心代码_python 动态绘制爱心的示例
- 网上开店,网店系统选择的那些事
- AspxGridView 排序分组刷新DetailRow的问题
- 随机身份证号码计算年龄
- 同源性 相似性 一致性
- Maven常用命令_飘云羽逸_新浪博客
- [适合小白的Linu基础入门教程一
- Gary Marcus:AI 可以从人类思维中学习的11个启示
- 最新yar扩展安装和使用
- python模拟登录钉钉,Python—实现钉钉后台开发,
- 【运维心得】你不知道,运维也要写代码(3)
- 本科生掀起“科研热”?该校本科生连发SCI,其中2篇顶刊
- CISCO思科考试考生注册指导手册
- Element table各种合并单元格