实验要求叙述
系统需求分析
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生
的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
系统功能分析
本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统
的主要功能有:
学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。
学生流动情况的输入,包括:转系、休学、复学、退学、毕业。
奖惩情况的输入。
学生个人情况查询和修改,包括流动情况和奖罚情况。
系统功能模块设计(划分)
根据系统功能要求可以将系统分解成几个模
块来分别设计应用程序界面,如图 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->{
//监听内容