《JAVA数据库学生成绩管理系统实验报告.pdf》由会员分享,可在线阅读,更多相关《JAVA数据库学生成绩管理系统实验报告.pdf(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实训报告 实训名称:学生成绩管理系统 系(部):专业班级:学生姓名:学 号:指导教师:完成日期:南京铁道职业技术学院目 录 装订线 Java 访问并处理数据库的设计与实现 1 实训概述 南京铁道职业技术学院浦口校区 2013 级网络 L1301 班于大二上学期组织了为期一周的 Java 实训,本次实训的课题是“学生成绩管理系统”。通过综合实训,掌握运用 Java 语言基本知识和技能、JAVA 的基本语法与 JDBC 数据库技术的应用;进一步熟悉 Oracle 数据库的数据库管理(数据库的创建、应用)。表的创建、修改、删除,约束及关系等、数据的查询处理(insert、update、delete、
2、select 语句等技术。2 Java 访问并处理数据库的课题描述 2.1 课题简介 经过分析,我们使用 Java 开发工具,利用其提供的各种面向对象的开发工具,Java?技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。使用的数据库是Oracle,Oracle 数据库功能强大,学习起来也不难,然后,对初始原型系统进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。通过实训,我们掌握运用 Java 语言知识和技能,运用 JAVA 的基本语法与JDBC 数据库技术的应用,完成对甲骨
3、文数据库的数据库管理、例如表的设计(表的创建、修改、删除,字段的默认值、约束及关系等)、数据的查询处理(insert、update、delete、select 语句的应用)等技术;并能结合数据库应用技术和 jdbc 进行小型数据库管理系统的开发。2.2 模块简介 管理员模块功能需求:管理员身份登陆系统后,可以对学生信息进行添加、修改和查询等操作,对学生进行添加、修改和查询功能操作,还可以修改管理员的登录密码。学生模块功能需求:学生信息管理系统中需要在学生登录或验证身份后,,可以自行完成学生个人信息的查询,也可以进行修改和删除个人信息、修改学生密码等操作。2.3 数据库结构设计 数据表设计 定义
4、每个表的数据类型以及字段限制,使数据库达到一定的完整性.每个表的物理设计如下:1.表 admin 保存用户的个人信息 用户信息表主要是用来保存管理员用户的基本信息,包括管理员的ID和管理员的登录密码,只有符合这两个字段的格式要求,才能登录成功,结构表如下:表 4-2 管理员信息表 字段名 类型 空值 约束条件 管理员 ID number(10)not null 主键 登录密码 varchar2(10)not null 2.表 student 保存学生基本信息,结构表如下:表 4-5 学生信息表 字段名 类型 空值 约束条件 学号 number(10)not null 主键 姓名 varchar
5、2(20)not null 性别 varchar2(3)年龄 number(2)登录密码 varchar2(10)not null 逻辑结构是独立于任何一种数据模型的信息结构。逻辑结构的任务是把概念结构设计阶段设计好的基本E-R 图转化为宜选用的 DBMS 所支持的数据模型相符合的逻辑结构,并对其进行优化。流程图层次设计 图的格式如下所示:开始 图 1 管理员对学生信息管理系统局部 E-R 图 数据流图是结构化系统分析的主要工具,它表示了系统内部信息的流向,并表现系统的逻辑处理功能。2.4 系统功能层次图 学生信息管理系统是一个典型的数据库开发应用程序,系统是和数据库相结合.,进入系统,有两个
6、用户,分别是普通学生、和管理员。进入登录页面 选择权限(例如管理员)添加按钮 查找按钮 删除按钮 返回 添加一个学生信息,包括 ID,姓名,年龄,性别 查找数据库中一个学生信息,包括 ID,姓名,年龄,性别 删除一个学生信息,包括他的ID,姓名,年龄,性别 结束 选择要实现的按钮 1.添加 2.查询 3.删除 3 系统模块的详细设计 本学生信息管理系统主要模块,即用户登录模块、用户操作模块。用户操作模块又分为学生操作模块、管理员操作模块。下面将显示系统的主要功能模块。3.1 登录模块设计 学生信息管理系统前台登陆模块可以勾选管理员身份信息,代表以管理员身份进入。不勾选即为普通学生身份登录。3.
7、2 管理员模块设计 学生信息管理系统前台登陆模块只有一个登陆窗口分为学生、管理员两个级别登陆,系统在后台程序有自动限制设置,可以自动识别登陆者的限制。其系统登陆模块算法如下:1 判断是否勾选管理员身份;2 输入用户名和密码;3 判断用户名和密码是否匹配;(1)若提示输入信息错误,则重新输入;学生信息管理系统 登陆管理 学生登录 管理员登录 查询信息 增加学生 修改密码 查找学生 删除学生 修改学生 图 2 学生信息管理系统功能层次图(2)否则以管理员身份进入系统。添加学生信息功能 学生信息管理系统对学生信息的管理非常重要,其中对信息的录入是系统最为关键的地方,以往我们管理学生信息的时候都是手工
8、操作,而随社会不断发展的今天计算机的应用已全部取带了手工操作的方法,利用计算机可以方便的录入各类信息,进行高效的管理.学生信息的录入就是利用计算机通过程序读入数据库,录入学生信息模块算法描述如下:1.管理员登陆后,录入学生信息管理界面;2.单击增加学生按钮,键入学生 ID;3.当录入学号已经存在,提示该学生信息已存在,请重新输入;4.否则学生信息添加成功。查找学生信息功能 学生信息管理系统对查询学生信息管理也很重要,方法和增添学生信息类似,也同样是利用计算机通过程序读入数据库,查询学生信息模块算法描述如下:1.管理员登陆后,点击查询学生;2.当录入学生信息不存在时,提示没有该学生信息,重新输入
9、;3.当录入学生 ID 已经存在,提示该学生信息存在,显示学生信息;删除学生信息功能 学生选课模块主要是给删除学生信息的功能,本功能主要由管理员进入数据库,然后学生管理系统,其删除学生信息模块算法描述如下:1管理员成功登陆;2点击删除学生;3输入学生相关信息,如学生 ID;4.如该学生不存在,则提示信息不存在,否则删除该学生。修改学生信息功能 此信息修改模块主要是给学生和管理员建立信息库,方便管理员查询操作,信息修改模块算法描述如下:1管理员成功登陆;2点击修改学生信息;3输入学生的编号;4编号为空,重新输入;5输入不为数字,重新输入;6输入正确,进入修改页面进行相关修改。3.3 学生模块设计
10、 查看学生个人信息功能 学生信息管理系统方便了学生查看自己的学籍信息,如果学校由于疏忽输入了错误信息,自己可以查看并且及时通知学校管理员,及时修改,减少不必要的麻烦.此信息查询模块主要是方便学生查询操作,信息查询模块算法描述如下:1 学生成功登陆;2点击查询学生信息;3输入学生的编号;4编号为空,重新输入;5输入不为数字,重新输入;6输入正确,进入信息查询页面进行相关修改。修改学生登录密码功能 学生可以进入学生管理系统进行登录密码的修改 1.学生成功登陆;2单击修改密码;3输入旧密码、新密码确认后,若旧密码正确则修改成功,则提示重新输入旧密码;4提交修改完成修改。4 程序运行与测试 impor
11、t java.awt.*;import import javax.swing.*;/登录窗口 public class LoginFrame extends JFrame private JCheckBox c;private JButton loginBtn,resetBtn;private JTextField nameInput;private JPasswordField pwdInput;private AdminDao adminDao=new AdminDao();private StudentDao studentDao=new StudentDao();public Logi
12、nFrame()/初始化窗口本身 Dimension d=Toolkit.getDefaultToolkit().getScreenSize();int width=d.width;int height=d.height;/设置坐标为 400-400 宽为 300 高为 200 setBounds(width/2-200,height/2-100,400,200);setTitle(登录界面);/设置窗口为不可缩放 setResizable(false);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);init();event();private
13、void event()/为按钮添加事件处理 resetBtn.addMouseListener(new MouseAdapter()/监听鼠标单击事件 Override public void mouseClicked(MouseEvent e)System.exit(0););loginBtn.addMouseListener(new MouseAdapter()Override public void mouseClicked(MouseEvent e)/获取用户输入的值 String username=nameInput.getText().trim();String password
14、=pwdInput.getText().trim();/判断是否勾选了管理员多选框 if(c.isSelected()/从管理员表中检测数据 Admin a=adminDao.findAdminByName(username);/如果 a 不为 null 说明用户输入的管理员是存在的 if(a=null)/说明此管理员不存在 JOptionPane.showMessageDialog(null,用户名或密码不正确,提示信息,JOptionPane.WARNING_MESSAGE);else /管理员存在 /密码正确/密码不正确 if(a.getPassword().equals(passwor
15、d)/后台保存的密码和用户从客户端输入的密码是一样的 JOptionPane.showMessageDialog(null,登录成功,提示信息,JOptionPane.WARNING_MESSAGE);/关闭当前的登录窗口 /开启管理员界面 new AdminFrame(a.getUsername().go();else JOptionPane.showMessageDialog(null,用户名或密码不正确,提示信息,JOptionPane.WARNING_MESSAGE);else /从普通用户表中检测数据 Student s=studentDao.findStudentByStudent
16、Id(username);if(s=null)JOptionPane.showMessageDialog(null,用户名或密码不正确,提示信息,JOptionPane.WARNING_MESSAGE);else if(s.getPassword().equals(password)JOptionPane.showMessageDialog(null,登录成功,提示信息,JOptionPane.WARNING_MESSAGE);new StudentFrame(s,null).go();else JOptionPane.showMessageDialog(null,用户名或密码不正确,提示信息
17、,JOptionPane.WARNING_MESSAGE););public void init()/初始化窗口内部的组件 Container container=getContentPane();/组件放到哪个位置由用户自己来制定 container.setLayout(null);JLabel title=new JLabel(用 户 登 录);title.setFont(new Font(楷体,0,32);title.setBounds(110,5,200,33);container.add(title);JLabel nameLabel=new JLabel(用户名:);nameLab
18、el.setBounds(70,55,60,30);container.add(nameLabel);nameInput=new JTextField();nameInput.setBounds(130,60,150,20);/设置提示内容 nameInput.setToolTipText(此处写登录用户名);container.add(nameInput);JLabel pwdLabel=new JLabel(密 码:);pwdLabel.setBounds(70,80,60,30);container.add(pwdLabel);pwdInput=new JPasswordField();
19、pwdInput.setBounds(130,85,150,20);pwdInput.setToolTipText(此处写密码);container.add(pwdInput);c=new JCheckBox(管理员);c.setBounds(68,115,70,30);container.add(c);loginBtn=new JButton(登录);loginBtn.setBounds(140,115,60,30);container.add(loginBtn);resetBtn=new JButton(取消);resetBtn.setBounds(215,115,60,30);conta
20、iner.add(resetBtn);public void go()setVisible(true);public static void main(String args)new LoginFrame().go();package c/和管理员相关的数据库操作 public class AdminDao /根据用户名查找指定管理员 public Admin findAdminByName(String username)Admin admin=null;Connection conn=null;PreparedStatement pstat=null;ResultSet rs=null;t
21、ry conn=ConnectionFactory.getConnection();String sql=select username,password from admin where username=?;pstat=conn.prepareStatement(sql);pstat.setString(1,username);rs=pstat.executeQuery();/如果查不到任何数据 下方 while 内部的代码不会执行 while(rs.next()/如果能执行到这个地方 说明指定管理员是存在的 admin=new Admin();admin.setUsername(user
22、name);admin.setPassword(rs.getString(password);catch(Exception e)/TODO:handle exception e.printStackTrace();finally ConnectionFactory.close(rs,pstat,conn);return admin;public static void main(String args)AdminDao().findAdminByName(admi).getPassword();import javax.swing.JOptionPane;/添加学生 public class
23、 AddStudentFrame extends JFrame private AdminFrame admin;private JPanel p1,p2,p3,p4,p5;private JLabel idLbl,nameLbl,ageLbl,genderLbl;private JTextField idInput,nameInput,ageInput,genderInput;private JButton submitBtn,cancelBtn;private StudentDao studentDao=new StudentDao();public AddStudentFrame(Adm
24、inFrame admin)this.admin=admin;setTitle(添加学生);setResizable(false);setBounds(400,100,300,400);init();event();private void init()Container container=getContentPane();container.setLayout(new GridLayout(5,1);p1=new JPanel();p1.setLayout(null);idLbl=new JLabel(学籍号:);idLbl.setBounds(50,30,50,20);idInput=n
25、ew JTextField();idInput.setBounds(100,30,120,20);p1.add(idLbl);p1.add(idInput);container.add(p1);p2=new JPanel();p2.setLayout(null);nameLbl=new JLabel(姓名:);nameLbl.setBounds(50,10,50,20);nameInput=new JTextField();nameInput.setBounds(100,10,120,20);p2.add(nameLbl);p2.add(nameInput);container.add(p2)
26、;p3=new JPanel();p3.setLayout(null);ageLbl=new JLabel(年龄:);ageLbl.setBounds(50,10,50,20);ageInput=new JTextField();ageInput.setBounds(100,10,120,20);p3.add(ageLbl);p3.add(ageInput);container.add(p3);p4=new JPanel();p4.setLayout(null);genderLbl=new JLabel(性别:);genderLbl.setBounds(50,10,50,20);genderI
27、nput=new JTextField();genderInput.setBounds(100,10,120,20);p4.add(genderLbl);p4.add(genderInput);container.add(p4);p5=new JPanel();p5.setLayout(null);submitBtn=new JButton(确定);submitBtn.setBounds(130,10,60,20);cancelBtn=new JButton(取消);cancelBtn.setBounds(195,10,60,20);p5.add(submitBtn);p5.add(cance
28、lBtn);container.add(p5);private void event()/设置当前窗口的关闭操作 /此处可自定义窗口关闭时所作操作 this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)/将之前传递过来的那个管理窗口设置为可用 if(admin!=null)admin.setEnabled(true);/释放当前窗口 /取消按钮的操作 cancelBtn.addMouseListener(new MouseAdapter()Override public void mo
29、useClicked(MouseEvent e)if(admin!=null)admin.setEnabled(true);/确定按钮的操作 submitBtn.addMouseListener(new MouseAdapter()public void mouseClicked(MouseEvent e)/接受用户在客户端输入的值 /正则表达式 String studentId=idInput.getText().trim();String studentName=nameInput.getText().trim();String age=ageInput.getText().trim();
30、String gender=genderInput.getText().trim();Student s=new Student();/注意别输入了已存在的学籍号 s.setStudentid(Long.parseLong(studentId);s.setStudentName(studentName);s.setPassword(studentId);s.setAge(Integer.parseInt(age);s.setGender(gender);/将获得值封装成 Student 对象调用指定方法存储到数据库 boolean result=studentDao.addStudent(s)
31、;if(result)JOptionPane.showMessageDialog(null,添加成功!);if(admin!=null)admin.setEnabled(true);else JOptionPane.showMessageDialog(null,添加失败,请检查学籍号是否已存在!););public void go()setVisible(true);public static void main(String args)new AddStudentFrame(null).go();;public class FindStudentFrame extends JFrame pr
32、ivate StudentDao studentDao=new StudentDao();private JLabel idLbl,nameLbl;private JTextField idInput,nameInput;private JButton findBtn,cancelBtn;public FindStudentFrame()setTitle(查找学生);setBounds(405,100,200,390);setResizable(false);init();event();private void init()Container container=getContentPane
33、();container.setLayout(new GridLayout(3,1);JPanel p1=new JPanel();p1.setLayout(null);idLbl=new JLabel(学籍号:);idLbl.setBounds(20,55,50,20);idInput=new JTextField();idInput.setBounds(73,55,100,20);p1.add(idLbl);p1.add(idInput);container.add(p1);JPanel p2=new JPanel();p2.setLayout(null);nameLbl=new JLab
34、el(姓名:);nameLbl.setBounds(20,55,50,20);nameInput=new JTextField();nameInput.setBounds(73,55,100,20);p2.add(nameLbl);p2.add(nameInput);container.add(p2);JPanel p3=new JPanel();p3.setLayout(null);findBtn=new JButton(搜索);findBtn.setBounds(60,30,60,20);cancelBtn=new JButton(取消);cancelBtn.setBounds(123,3
35、0,60,20);p3.add(findBtn);p3.add(cancelBtn);container.add(p3);private void event()this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)findBtn.addMouseListener(new MouseAdapter()public void mouseClicked(MouseEvent e)String idStr=idInput.getText().trim();String nameStr=nam
36、eInput.getText().trim();Long studentId=null;String studentName=null;if(idStr.length()!=0)/如果 id 有值 studentId=Long.parseLong(idStr);if(nameStr.length()!=0)studentName=nameStr;List students=studentDao.findStudentByConditions(studentId,studentName);/将查询的结果传递给显示界面 new ShowResultFrame(students).go();publ
37、ic void go()setVisible(true);public static void main(String args)new FindStudentFrame().go();public class ShowResultFrame extends JFrame private List students;private StudentDao studentDao=new StudentDao();public ShowResultFrame(List students)setTitle(查询结果);if(students.size()0)setBounds(100,100,300,
38、60*students.size();else setBounds(100,100,300,150);this.students=students;init();private void init()Container container=getContentPane();container.setLayout(new GridLayout(students.size(),2);/遍历集合 将集合中的每一条数据显示到当前容器里面 if(students.size()=0)container.add(new JLabel(暂无记录!);else for(Student stu:students)
39、JLabel l=new JLabel(stu.getStudentName();final Student s=stu;l.addMouseListener(new MouseAdapter()public void mouseClicked(MouseEvent e)if(e.getClickCount()=2)new StudentFrame(s,null).go(););l.setBorder(BorderFactory.createLineBorder(new Color(253,253,187);JButton b=new JButton(删除);final Long studen
40、tId=stu.getStudentid();b.addMouseListener(new MouseAdapter()public void mouseClicked(MouseEvent e)int choose=JOptionPane.showConfirmDialog(null,确定删除?);/判断用户点击的是否是确定按钮 if(choose=JOptionPane.OK_OPTION)students.remove(s);new ShowResultFrame(students).go();studentDao.deleteStudentById(studentId););conta
41、iner.add(l);container.add(b);private void event()this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)public void go()setVisible(true);public static void main(String args)public class StudentFrame extends JFrame private JPanel p1,p2,p3,p4,p5,p6;private JLabel idLbl,pwdLb
42、l,nameLbl,ageLbl,genderLbl;private JTextField idInput,nameInput,ageInput,genderInput;private JPasswordField pwdInput;private Student student;private JButton modifyPwdBtn,submitBtn,exitBtn;private String nPassword;private StudentDao dao=new StudentDao();/student 记录当前登录的用户 nPassword 记录修改以后的密码 public S
43、tudentFrame(Student s,String nPassword)this.student=s;this.nPassword=nPassword;/初始化的时候获取当前用户的密码 setTitle(学生信息);setResizable(false);setBounds(400,100,300,400);/默认关闭行为 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);init();event();public void go()setVisible(true);private void init()Container container=
44、getContentPane();container.setLayout(new GridLayout(6,1);p1=new JPanel();p1.setLayout(null);idLbl=new JLabel(学籍号:);idLbl.setBounds(50,30,50,20);idInput=new JTextField();/需要将数字类型转换为字符串类型+/字符串类型-数字类型 parseInt parseLong idInput.setText(student.getStudentid()+);/设置学籍号不可修改/idInput.setEnabled(false);idInp
45、ut.setEditable(false);/idInput.setDisabledTextColor(new Color(255,255,255);idInput.setDisabledTextColor(Color.black);idInput.setBounds(100,30,120,20);p1.add(idLbl);p1.add(idInput);container.add(p1);p2=new JPanel();p2.setLayout(null);pwdLbl=new JLabel(密 码:);pwdLbl.setBounds(50,30,50,20);pwdInput=new
46、JPasswordField();if(nPassword=null)/代表从登录界面过来的 pwdInput.setText(student.getPassword();else /如果有新密码 说明是从修改密码那个窗口跳回来的 pwdInput.setText(nPassword);pwdInput.setEditable(false);pwdInput.setDisabledTextColor(Color.black);pwdInput.setBounds(100,30,120,20);modifyPwdBtn=new JButton(修改);modifyPwdBtn.setBounds
47、(225,30,60,20);p2.add(pwdLbl);p2.add(pwdInput);p2.add(modifyPwdBtn);container.add(p2);p3=new JPanel();p3.setLayout(null);nameLbl=new JLabel(姓 名:);nameLbl.setBounds(50,30,50,20);nameInput=new JTextField();nameInput.setText(student.getStudentName();nameInput.setBounds(100,30,120,20);p3.add(nameLbl);p3
48、.add(nameInput);container.add(p3);p4=new JPanel();p4.setLayout(null);ageLbl=new JLabel(年 龄:);ageLbl.setBounds(50,30,50,20);ageInput=new JTextField();ageInput.setText(student.getAge()+);ageInput.setBounds(100,30,120,20);p4.add(ageLbl);p4.add(ageInput);container.add(p4);p5=new JPanel();p5.setLayout(nu
49、ll);genderLbl=new JLabel(性 别:);genderLbl.setBounds(50,30,50,20);genderInput=new JTextField();genderInput.setText(student.getGender();genderInput.setBounds(100,30,120,20);p5.add(genderLbl);p5.add(genderInput);container.add(p5);p6=new JPanel();p6.setLayout(null);submitBtn=new JButton(确认);submitBtn.set
50、Bounds(150,30,60,20);exitBtn=new JButton(取消);exitBtn.setBounds(215,30,60,20);p6.add(submitBtn);p6.add(exitBtn);container.add(p6);private void event()modifyPwdBtn.addMouseListener(new MouseAdapter()public void mouseClicked(MouseEvent e)/设置之前的窗口无效 /弹出修改密码窗口 new ModifyPwdFrame(StudentFrame.this).go();)