数据库原理与应用课程设计报告.docx
- 文档编号:9154359
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:63
- 大小:552.41KB
数据库原理与应用课程设计报告.docx
《数据库原理与应用课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据库原理与应用课程设计报告.docx(63页珍藏版)》请在冰豆网上搜索。
数据库原理与应用课程设计报告
一、学生信息管理系统概述
学生信息管理系统主要用来管理学生基本信息。
本系统是一个简单的学生信息管理系统,系统管理的信息主要是学生基本信息。
系统的目的是有效地处理学生信息,同时为用户提供信息检索、信息修改和删除功能。
1.1系统的任务
学生信息管理系统是学校有效管理学生的重要工具,它的任务主要有以下几项:
◆登陆系统:
负责管理学生信息的管理员的登陆;学生登录
◆查询全部学生:
可以查询数据库中已存在的全部学生的信息;
◆根据学号查询:
可以根据学生的学号来查询该学号学生的信息;
◆新增学生信息:
可以在此系统中新增学生的信息;
◆修改学生信息:
可以在此系统中根据学生编号来修改已存在的学生的信息;
◆删除学生信息:
可以在此系统中根据学生编号来删除已存在的学生的信息。
◆学生查询信息:
学生查询自己的信息
1.2系统的目标
学生信息管理系统是学校管理学生的有效方法,也是学生学生查询信息的有效途径。
一个好的学生信息管理系统应具有以下这些目标:
◆能够管理所有学生的信息。
◆能够快速地进行学生的各类信息查询和编辑。
◆减少学校管理学生的工作任务,降低管理成本。
二、系统需求分析
2.1系统需求
根据以上对学生信息管理系统的任务和目标的分析,学生信息管理系统的具体需求如下:
(1)学生信息:
学号、姓名、密码、班级、成绩、联系方式;
(2)学生能查自己的学生信息;
(3)管理员拥有所有权限,可以查询所有学生信息,根据学号查询特定学生的信息,可以新增学生信息,可以根据编号修改特定学生信息,可以根据编号删除学生信息。
2.2数据字典
根据系统需求分析,利用表格方式设计的数据字典如下:
1)数据项
数据字典的数据项如表所示:
属性名
存储代码
类型
宽度
主码
含义
备注
编号
uid
整型
11
是
系统设置自动增长的唯一编号
非空、唯一
姓名
uname
字符
20
否
姓名
非空
密码
upwd
字符
20
否
登陆系统的密码
真正姓名
urealname
字符
20
否
真实姓名
邮箱
umobil
字符
15
否
邮箱
2)数据结构
数据字典的数据结构如表所示。
结构名称
存储名称
组成
备注
学生表
Students
编号、学号、姓名、密码、班级、成绩、联系方式
永久存储
管理员表
Manager
账号,密码
永久存储
3)状态图
三、概念结构设计
.根据需求分析得到的具体要求,绘制E—R图如下。
图1-学生E-R图
图2-管理员E-R图
四、逻辑结构设计
1.根据系统的概念结构,其逻辑结构设计如下:
学生(编号,学号,姓名,密码,班级,成绩,联系方式)
2.根据系统的逻辑结构和应用需求,其外模式的视图设计如下:
管理员视图(编号,学号,姓名,密码,出生日期,学院,专业,邮箱)
学生视图(编号,学号,姓名,密码,出生日期,学院,专业,邮箱)
3.根据上述的转换结果,在对关系模式中数据进行规范化处理后,得到了符合第三范式的关系模式如下:
学生:
{编号,学号,姓名,密码,学院,专业,邮箱}
4.满足3NF:
学生表(Student)中的属性有编号(No),学号(SNo),姓名(Sname),密码(Spwd),班级(Sclass),成绩(Sscore),联系方式(Sphone)
Student(U1,F1)
U1={sid,sname,sgender,sbirthday,smobil,smil,sacademy,smajor}
五、物理结构设计
(1)主要是设计表结构。
一般地,实体对应于表,实体的属性对应于表的列,实体之间的关系成为表的约束。
逻辑设计中的实体大部分可以转换成物理设计中的表,但是它们并不一定是一一对应的。
(2)对表结构进行规范化处理(第三范式)。
(3)表汇总
表名
功能说明
表A
记录学生的基本信息
表B
记录管理员的基本信息
表A
表名
学生表
列名
类型
宽度
规则
编号
Int
10
非空、唯一、自动增长
学号
Int
10
非空
姓名
varchar
10
非空
密码
varchar
10
学生登陆时使用
学院
varchar
10
专业
varchar
10
s注:
(1)该表存放全校所有学生的基本信息,每个学生产生一条记录。
表B
表名
管理员表
列名
类型
宽度
规则
账号
varchar
10
非空、唯一
密码
varchar
20
非空
注:
该表存放所有的管理员信息,每个管理员产生一条记录。
六、数据保护设计
1.防止用户直接操作数据库的方法
采用用户标识和鉴别检测机制。
即:
用户进入系统时必须首先输入用户的帐号和密码,然后系统对其进行鉴别,通过系统鉴别后才能使用系统资源。
七、系统测试
1测试方法
测试,通常有两种方式:
单元测试和组装测试。
对本系统着重单元测试。
单元测试中通常使用白盒测试法,也就是根据程序的内部处理逻辑来设计测试用例。
白盒测试法主要的方法有:
语句覆盖,条件覆盖,判定覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖。
本系统根据白盒测试法来设计测试用例。
2测试用例
2.1登录功能测试
表1 登录测试
测试用例
1
描述
测试登录
测试方法
输入一个正确的用户名及密码和一个错误的用户名及密码;分别用管理员账号和学生账号登陆
期望结果
正确的登录成功,错误的用户名提示错误
测试结果(如图)
正确
2.2查询全部学生数据功能测试
表2 查询数据测试表
测试用例
2
描述
测试全部查询学生信息功能
测试方法
点击查询全部学生信息
期望结果
符合查询条件的数据被成功输出
测试结果(如图)
正确
2.3学号查询指定学生数据功能测试
表3 查询数据测试表
测试用例
3
描述
测试查询指定学号学生信息
测试方法
输入要查询的学生的学号,并查询它
期望结果
符合查询条件的数据被成功输出
测试结果(如图)
正确
2.4增加学生信息功能测试
表4 增加数据测试
测试用例
4
描述
测试增加学生信息
测试方法
输入学生信息
期望结果
输入信息成功加入数据库中
测试结果(如图)
正确
2.5删除学生信息功能测试
表5 删除数据测试表
测试用例
5
描述
测试删除数据
测试方法
选中需要删除的数据,并删除它
期望结果
数据被从数据库中成功删除
测试结果(如图)
正确
八、运行管理与维护说明
(1)转储和恢复。
DBA需要定期定时有计划的对数据库及其日志文件进行备份,从而确保发生故障时,利用后备副本,可以把数据库恢复到一致状态,并尽量减少数据库的损失。
(2)安全性控制。
随着系统运行,应用环境会发生变化,对安全性的要求会改变,用户的密级也随之改变。
因此,需要DBA根据实际情况修改原有的安全性控制。
(3)完整性控制。
在系统运行过程中,对实体、参照和用户定义等完整性的要求会发生改变。
因此需要DBA根据实际情况修改原有的完整性控制。
(4)性能维护。
性能维护是对系统性能的监督、分析和改进。
监督系统运行,并对监测数据进行分析,从而找出改进系统性能的方法。
同时综合运行管理和评价的改进建议,对系统进行调整和改进。
(5)重组与重构。
随着系统运行,对元组的添加、删除和修改等更新操作,会降低数据库存储空间的利用率和数据的存取效率,使数据库的性能下降。
因此,需要对数据库进行重组。
重组通常不需要改变逻辑结构和物理结构;如果需要添加新实体,或者实体之间的联系发生了变化,则需要重构数据库的逻辑结构和物理结构。
显然重构数据库可能会导致数据库数据丢失。
九、SQL语句及关键Java代码
1.工具使用:
数据库:
MySQL及其可视化工具NavicatforMySQL
数据表:
Students,Manager
2.SQL创建表
客户端java程序编写:
Netbeans
3.登陆界面代码
(1)登录
//StudentMain.java
packagenewpackage;
importjava.awt.*;
importjavax.swing.*;
importjava.awt.event.*;
importjava.sql.*;
importjavax.swing.UIManager;
publicclassStudentMainextendsJFrameimplementsActionListener
{
JLabelLtitle,Lname,Lpassword;
JButtonBlogin,Bexit,Lregister;
JTextFieldTFname;
JPasswordFieldTFpassword;
GridBagLayoutgbl;
GridBagConstraintsgbc;
GridLayoutgl;
Fontf1,f2,f3;
JPanelp1,p2;
Connectioncon;
PreparedStatementstat;
Statementstmt;
ResultSetrs;
publicStringname;
publicStudentMain(booleanflag)
{
//booleanf=f
super("学生信息管理系统");
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f1=newFont("����",1,25);
f2=newFont("����",1,20);
f3=newFont("����",1,18);
Ltitle=newJLabel("学生管理系统",JLabel.CENTER);
Ltitle.setVerticalAlignment(JLabel.CENTER);
Lname=newJLabel("用户名",JLabel.CENTER);
Lpassword=newJLabel("密码",JLabel.CENTER);
Lregister=newJButton("注册");
Ltitle.setFont(f1);
Lname.setFont(f2);
Lpassword.setFont(f2);
Lregister.setFont(f2);
TFname=newJTextField(15);
//TFname.setBounds(0,0,150,40);
TFname.setFont(f2);
TFpassword=newJPasswordField(15);
TFpassword.setFont(f2);
TFpassword.setEchoChar('*');
Blogin=newJButton("登录");
Blogin.setFont(f2);
Bexit=newJButton("退出");
Bexit.setFont(f2);
p1=newJPanel();
p2=newJPanel();
gbl=newGridBagLayout();
gbc=newGridBagConstraints();
gl=newGridLayout(3,1);
p1.setLayout(gbl);
gbc.fill=GridBagConstraints.NONE;
gbc.insets=newInsets(0,0,11,10);
gbc.anchor=GridBagConstraints.CENTER;
gbc.gridwidth=1;
gbl.setConstraints(Lname,gbc);
p1.add(Lname);
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbc.anchor=GridBagConstraints.LINE_START;
gbl.setConstraints(TFname,gbc);
p1.add(TFname);
gbc.gridwidth=1;
gbc.anchor=GridBagConstraints.CENTER;
gbl.setConstraints(Lpassword,gbc);
p1.add(Lpassword);
gbc.gridwidth=GridBagConstraints.REMAINDER;
gbc.anchor=GridBagConstraints.CENTER;
gbl.setConstraints(TFpassword,gbc);
p1.add(TFpassword);
p2.setLayout(newFlowLayout(FlowLayout.CENTER,20,0));
p2.add(Blogin);
p2.add(Bexit);
p2.add(Lregister);
this.setLayout(gl);
this.add(Ltitle);
this.add(p1);
this.add(p2);
Blogin.addActionListener(this);
Bexit.addActionListener(this);
Lregister.addActionListener(this);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-365)/2,(screenSize.height-449)/2,550,350);
this.setVisible(flag);
}
publicvoidactionPerformed(ActionEventae)
{
if(ae.getActionCommand()=="退出")
System.exit(0);
if(ae.getActionCommand()=="登录")
{
name=TFname.getText();
Stringpassword=TFpassword.getText();
if(name.equals("")||password.equals(""))
JOptionPane.showMessageDialog(null,"用户名或者密码不能为空!
");
else{
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/mydb","root","721789");
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECT*FROMuseinfo");
booleanisfind=false;
while(rs.next())
{
if(name.equals(rs.getString
(2)))
{
isfind=true;
if(password.equals(rs.getString(3)))
{
this.dispose();
newFunction(name);
TFname.setText("");
TFpassword.setText("");
}
else
{
JOptionPane.showMessageDialog(null,"密码错误");
}
break;
}
}
if(isfind==false)
{
JOptionPane.showMessageDialog(null,"不存在请注册");
}
con.close();
}catch(Exceptione)
{
System.out.println("Error"+e.getMessage());
}
}
}
if(ae.getActionCommand()=="注册")
{
newAddUser();
}
}
publicstaticvoidmain(String[]args){
//TODOcodeapplicationlogichere
try
{
UIManager.setLookAndFeel(newcom.sun.java.swing.plaf.windows.WindowsLookAndFeel());
}
catch(Exceptione)
{
}
newStudentMain(true);
}
}
(2)注册
//AddUserGUI
//AddUser.java
packagenewpackage;
importjava.awt.*;
importjava.sql.*;
importjavax.swing.*;
importjava.awt.event.*;
publicclassAddUserextendsJFrameimplementsActionListener{
JLabellname,lpassword,lrealname,lmobil;
JTextFieldfname,frealname,fmobil;
JButtonok,quit;
JPasswordFieldfpassword;
Connectioncon;
PreparedStatementstat;
Statementstmt;
ResultSetrs;
AddUser()
{
super("增加用户信息");
this.setLayout(null);
lname=newJLabel("姓名");
lname.setBounds(20,20,50,25);
fname=newJTextField();
fname.setEditable(true);
fname.setBounds(90,20,120,25);
lpassword=newJLabel("密码");
lpassword.setBounds(20,55,50,25);
fpassword=newJPasswordField();
fpassword.setEchoChar('*');
fpassword.setEditable(true);
fpassword.setBounds(90,55,120,25);
lrealname=newJLabel("真实名字");
lrealname.setBounds(20,90,50,25);
frealname=newJTextField();
frealname.setEditable(true);
frealname.setBounds(90,90,120,25);
lmobil=newJLabel("手机");
lmobil.setBounds(20,125,50,25);
fmobil=newJTextField();
fmobil.setEditable(true);
fmobil.setBounds(90,125,120,25);
ok=newJButton("确定");
ok.setBounds(40,180,50,25);
quit=newJButton("放弃");
quit.setBounds(120,180,60,25);
this.add(lname);
this.add(fname);
this.add(lpassword);
this.add(fpassword);
this.add(lrealname);
this.add(frealname);
this.add(lmobil);
this.add(fmobil);
this.add(ok);
this.add(quit);
ok.addActionListener(this);
quit.addActionListener(this);
this.setVisible(true);
DimensionscreenSize=Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-350)/2,(screenSize.height-450)/2,260,280);
}
publicvoidactionPerformed(ActionEventae)
{
if(ae.getActionCommand()=="放弃")
this.dispose();
if(ae.getActionCommand()=="确定")
{
Stringname=fname.getText();
Stringpassword=fpassword.getText();
Stringrealname=frealname.getText();
Stringmobil=fmobil.getText();
if(name.equals("")||password.equals("")||realname.equals("")||mobil.equals(""))
JOptionPane.showMessageDialog(null,"有空!
");
else{
if((password.length()==6)&&(fmobil.getText().length()==11))
{
try{
con=DriverManager.getConnection("jdbc:
mysql:
//localhost:
3306/mydb","root","721789");
stat=con.prepareStatement("insertintouseinfovalues(?
?
?
?
)");
stat.setString(1,name);
stat.setString(2,password);
stat.setString(3,realnam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 原理 应用 课程设计 报告