数据库课程设计之学生信息管理系统_第1页
数据库课程设计之学生信息管理系统_第2页
数据库课程设计之学生信息管理系统_第3页
免费预览已结束,剩余37页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库原理课程设计报告题目:学生信息管理系统学生姓名:穆岭(徐清锋、冉丽华)学号:0908060070班级:计科092院系:计算机科学与信息学院专业年级:计算机科学与技术2009级2011年12月22日一、需求分析需包含内容为:(1)问题描述: 学生信息的管理是学校很重要的一项工作, 而人工管 理学生信息的话,无疑是一个很费时费力的事情,而且效率不高,容易出 错,往往是学校进行学生工作的一个瓶颈问题,有一个学生信息管理的系 统就能够帮助学校更好完成学生信息管理的工作,降低管理成本。所以我 们组编写了一个学生信息管理系统,使其在学生管理工作中发挥更大的作 用。(2)系统功能描述: 本系统是一个学

2、生信息管理系统,主要管理学生的基本信息,课程信 息,以与学生选课成绩信息等,登录的模块有两种登录类型,分别是管理 员登录和学生登录,如果是管理员登录的话,进入管理员界面,要求管理 员界面中可以信息的学生基本信息、课程基本信息和学生选课成绩信息的 管理设置;还有信息查询,在这块儿中可以进行学生基本信息的查询,课 程信息的查询,以与选课成绩信息的查询;除此之外,要求设一个用户维 护模块,在这个模块中管理员可以添加管理员用户或者是学生用户,可以 修改密码, 并且能够切换用户登录; 接着是帮助, 帮助中显示系统的版本; 最后要求有一个推出系统按钮。如果是学生登录,那么学生可以进行学生 信息的维护,可以

3、进行登录密码的修改,基本信息的修改,以与切换用户 登录;可以进行学生基本信息的查询,学生课程学习的查询,学生选课成 绩信息的查询。接着是帮助,帮助中显示系统的版本;最后要求有一个推 出系统按钮。其详细的操作框架流程在下面的图中可以见到。舸匙I険蓟B3员録、C;就用户* 操作流程框图:w血儒 寵堆p A丫、.希翌排息I厂一、亡腿1 严盼j衽歸叭丄用丹录 oSiWgt J知絢貞丿sm 魁认.' 'F 存储的数据信息:User表(用户名,密码,用户类型标识),用于存储登录用户信息;Student表(学号,姓名,性别,出生日期,电话,QQ号,专业,班级,家庭地址),用于存储学生基本信息

4、;Course表(课程号,课程名,先行课,学分,教师姓名),用于存储课程基本信息;SC表(学号,课程号,成绩,绩点),用于存储学生选课成绩信息。(3)有何安全性与完整性方面的要求。安全性:如果是管理员登录系统:可以进行管理设置,包括(设置学生的基本信息、设置课程信息、设置学生成绩信息),设置各种信息的时候有添加,删除和修改等相应功能,然后是信息查询,包括(查询学生基 本信息,查询课程信息、查询学生成绩信息) ,用户的维护,包括(添加 用户,修改用户密码,切换用户登录) ,帮助,退出系统。如果是学生登 录系统:可以修改自己的基本信息,修改个人登录密码,切换用户登录, 同样可进行信息查询,包括(查

5、询学生基本信息,查询课程信息、查询学 生成绩信息),查看帮助,退出系统。完整性: 主要是在删除学生信息和课程信息的时候如果在选课信息中 存在选课成绩信息的话,那么就不能直接进行相应信息的删除,在开发中 要给出相应的信息提示,在进行各种添加、和更新操作之前也有进行相应 的判断,如果原来的信息中已经有了所要添加的该条信息, 怎不能添添加, 并给出相应的提示,如果不存在所要更新的信息的时候也不能进行更新, 并给出相应的提示。具体的完整性约束在编程中具体给出。二、概念结构设计画出系统整体的 E-R 模型;并对模型中所出现的实体与属性等信息加 以说明。概念模型物理模型三、逻辑结构设计(1 )模式设计:按

6、系统整体E-R模型,写出关系模式;并利用数据字典加以描述。(如每个关系模式有何属性、属性的类型、属性值的长度、 是否可取空值、是否为主码、有何约束条件等信息);本系统的设计中主要涉与到四个表,分别是User表、Student 表,Course表,SC表,在这四个表中,User表用于存储用户信息,Student表存储学生信息表,Course表存储课程信息,SC表存储学生选课的成绩信息。这四个表的结构如下:User 表属性名存储代码类型长度是否可为空主键否备注用户名un ameVARCHAR20否是用户登录名密码upassVARCHAR30否用户登录密码用户类型标识bsINT否用于标识是管理员还是

7、学生Stude nt表属性名存储代码类型长度是否可为空主键否备注学号snoVARCHAR20否是学生学号姓名sn ameVARCHAR20否学生姓名性别sexVARCHAR2否性别出生日期birthDATE出生日期电话telVARCHAR20联系电话QQ号qqVARCHAR20QQ号码专业sdeptVARCHAR20否学生所在专业班级classVARCHAR20否所在班级家庭地址addressVARCHAR50学生家庭地址Course表属性名存储代码类型长度是否可为空主键否备注课程号enoVARCHAR20否是课程编号课程名cn ameVARCHAR20否课程名先行课epnoVARCHAR20

8、先行课程学分creditFLOAT否学分教师姓名tn ameVARCHAR20否教师姓名SC表属性名存储代码类型长度是否可为空主键否备注学号snoVARCHAR20否是学号课程号enoVARCHAR20否是课程编号成绩gradeFLOAT课程成绩绩点pointFLOAT课程绩点(2)子模式设计:即针对自己的设计模块的应用需定义什么样的视图 表结构;并利用数据字典加以描述。由于在查询学生成绩信息的时候要查询学生学号、姓名、课程号、课 程名、学分、成绩、绩点、联系电话,这就需要涉与到三个表的连接,为 了查询的方便,所以在进行设计的时候创建了一个Stu_Cou_SC视图表,表结构为Stu_Cou_S

9、C视图(学号,姓名,课程号,课程名,学分,成绩,绩点,联系 电话)Stu_Cou_SC属性名存储代码类型长度是否可为空主键否备注学号snoVARCHAR20否是学生学号姓名sn ameVARCHAR20否学生姓名课程号enoVARCHAR20否是课程编号课程名cn ameVARCHAR20否课程名学分creditFLOAT学分成绩gradeFLOAT成绩绩点pointFLOAT绩点联系电话telVARCHAR20联系电话(3)画出系统功能模块图,并对各功能模块进行简单介绍学生登录用户登录管理良登录在登录模块中,设置了两种登录类型,一种是管理员登录,一种是学生登录信息维护信息査诃O退岀用户登录管

10、理设羞管理员登录用户维护<这两种登录有着不同的使用权限。管理员登录系统可以进行管理设置,信息查询和用户维护等操作,学生登录系统可以进行信息维护和信息查询 等。漳加字主基亦信息 谟置宁土悟息更祐亨土星本営息删除学主基本信息 瘁加浮禮f自 管俚设$J设遥课程信息,更新课程信息删呼课程恒息'.添加威締信息谡HE应缰信息更新威猜馆扈 Y删除咸绩信息在管理设置模块中,用户可以进行学生信息的设置、课程信息设置、选课成绩信息的设置,在各个信息的设置中都可以进行添加、更新和删除操作信息査谊否伺半牛宰本信息携徐海苜洵独照学号和肆程与査冏憤制査询在信息查询模块中,用户可以进行学生基本信息查询,课程信

11、息查询 以与学生选课成绩信息的查询。在各个查询中又设置有精确查询和模糊查 询,使其查询更智能化。源加用户用户碓护J_ L M J幅改客码V 切恤用户登录荼于.退岀遍出索统'歳升苣理帀用户疥加学生用户在用户维护模块中,可以进行添加用户,修改用户登录密码,切换用户登录功能。僱改密玛僅改个人基本信息信息维护I切鮭录用户J、在学生登录后的信息维护模块中,学生统一可以修改登录密码,修改个人基本信息,和切换用户登录 四、数据库的物理设计在本系统的数据库设计阶段,我们为其建立了下面的三个索引字段,分别是基于Stude nt表建立的Stus no以sno为升序索引,基于Course表建立的Coucno

12、以eno为升序索引,和基于 SC表建立的SCno以sno为升序, 以eno为降序的索引。对应的T-SQL语句如下:/*创建索引字段*/DROP INDEX Stude nt.Stus no;CREATE INDEX Stus no ON Stude nt(s no ASC);DROP INDEX Course.Couc no;CREATE INDEX Couc no ON Course(c no ASC);DROP INDEX SC.SC no;CREATE INDEX SCno ON SC(s no ASC,c no DESC);五、数据库设计实现与运行(1) 数据库的创建T-SQL 语句:

13、CREATE DATABASE SIMS;(2) 数据表的创建T-SQL 语句:/* 用户表 */DROP TABLE User;CREATE TABLE User(uname VARCHAR(20) NOT NULL, upass VARCHAR(30) NOT NULL, bs INT NOT NULL);/* 学生表 */DROP TABLE Student;CREATE TABLE Student(snoVARCHAR(20)PRIMARY KEY,snameVARCHAR(20)NOT NULL,sexVARCHAR(2)NOT NULL,birthDATE,telVARCHAR(2

14、0),qqVARCHAR(20),sdeptVARCHAR(20)NOT NULL,classVARCHAR(20)NOT NULL,addressVARCHAR(50);/* 课程表 */DROP TABLE Course;CREATE TABLE Course(cnoVARCHAR(20) PRIMARY KEY,cname VARCHAR(20) NOT NULL, cpno VARCHAR(20) ,credit FLOAT NOT NULL, tname VARCHAR(20) NOT NULL);/* 成绩表 */DROP TABLE SC;CREATE TABLE SC(snoV

15、ARCHAR(20),cnoVARCHAR(20),gradeFLOAT,pointFLOAT,PRIMARY KEY(sno,cno),Foreign KEY (sno) REFERENCES Student(sno),Foreign KEY (cno) REFERENCES Course(cno);(3) 视图的创建T-SQL 语句:/* 创建 Stu_Cou_SC 视图 */DROP VIEW Stu_Cou_SC;CREATE VIEWStu_Cou_SC(sno,sname,cno,cname,credit,grade,point,tel)ASSELECT s.sno,sname,o

16、,cname,credit,grade,point,telFROM Student s,Course c,SC scWHERE s.sno=sc.sno AND o=o;(4) 各模块中的功能实现a) 功能界面(截图) ; 管理员登录模块功能截图 用户登录添加学生信息更新学生信息删除学生信息信息查询查询学信息精确查询模糊查询用户维护添加用户修改密码帮助科咅匀彳言亀幵发切换用户登录弹出登录窗体选择学生登录学生登录功能截图信息维护信息查询b)功能界面简单描述;首先是运行程序,进入用户登录界面,登录是要进行身份验证, 在 这登录过程系统会通过数据库中的 User表存储的数据进行验证,并判 断用标识检

17、查登录的类型。当登录的类型是管理员登录时,登录成功后会进入管理员操作界面,在管理员登录界面中,管理员可以进行管理设置,如:设置学生基本信息,设置课程信息,设置成绩信息,每个设置都有相应的添加、 更新、删除操作;接着是信息查询,在这儿可以查询学生的基本信息, 查询课程信息,查询成绩信息,在每一种查询中都分别设置有精确查 询和模糊查询等操作,模糊查询使得查询在查询的时候更加方便;还 有就是用户维护操作,这里面管理员可以添加用户,修改登录密码, 切换用户登录,最后是帮助中的关于和系统的退出。当登录类型为学生登录时,登录成功后会进入学生操作界面,在此界面中学生可以在信息维护下修改登录密码,更新个人基本

18、信息,切换用户登录;然后也可以查询学生基本信息,查询课程信息,查询 成绩信息,同样查询中也设置有精确查询和模糊查询;最后也有帮助中的关于和系统的退出在界面的操作过程中,对一些在操作中可能是操作失误导致的错 误进行了相应的提示,比如成绩的输入必须是字符型数字,出生日期 是格式应为 yyyy-MM-dd 格式,如果输入格式不对, 给出相应的提示, 操作人员在给出对应的正确操作,这使得该系统变得更加智能化。c)T-SQL 语句与宿主语言嵌套使用代码段/*JAVA 数据库的连接程序 */private static final String DBDRIVER = private static fina

19、l String DBURL = "jdbc:sqlserver:/localhost:1433;"+ "DatabaseName=SIMS "private static final String DBUSER = "sa"private static final String DBPASS = ""/ 密码为空private Connection conn =null ;public DatabaseConnection() try Class.forName (DBDRIVER); catch (ClassN

20、otFoundException e) JOptionPane. showMessageDialog (null , e.getMessage();try conn = DriverManager. getConnection (DBURL, DBUSER, DBPASS); catch (SQLException e) JOptionPane. showMessageDialog (null , e.getMessage();public Connection getConnection() return this .conn;public void close() if (this .co

21、nn != null ) try this .conn.close(); catch (SQLException e) JOptionPane. showMessageDialog (null , e.getMessage();/* 添加用户登录查询块 */dbconn = new DatabaseConnection(); / 初始化连接类conn=dbc onn. getC onn ecti on(); /获得连接Stri ng sql = "SELECT un ame,upass,bs FROM User WHEREun ame=? AND bs=?"Prepared

22、Statement pstmt =null ;try pstmt = conn .prepareStateme nt(sql);pstmt.setStri ng(1, getName(); pstmt.set In t(2, user.getBs();ResultSet rs = pstmt.executeQuery(); user.setUname( null );user.setUpass( null );user.setBs(2);while (rs.next() user.setU name(rs.getStri ng(1);user.setUpass(rs.getStri ng(2)

23、; user.setBs(rs.getl nt(3); catch (SQLException e) JOptionPane. showMessageDialog (this , e.getMessage(); fin ally if (conn != null ) dbc onn. close();/*添加登录用户信息*/PreparedStatement pstmt =null ;ResultSet rs = null ;Stri ng sqll = "SELECT * FROM User WHERE un ame=? AND bs=?"try pstmt = conn

24、 .prepareStateme nt(sql1);pstmt.setStri ng(1, user name);pstmt.set In t(2, user.getBs();rs = pstmt.executeQuery();if (!rs. next()String sql3 = "INSERT INTO User(uname,upass,bs)VALUES(?,?,?)"int i=0;pstmt = conn .prepareStateme nt(sql3);pstmt.setStri ng(1, user name);pstmt.setStri ng(2, pas

25、s1);pstmt.set In t(3,user.getBs();i = pstmt.executeUpdate();JOptionPane. showMessageDialog (this , " 用户添加 成功");jTextField1.setText( null );jPasswordField1.setText( null );jPasswordField2.setText( null ); jRadioButton1.setSelected(false );jRadioButton2.setSelected(false );this .setVisible(

26、false );else JOptionPane. showMessageDialog (this , " 用户添加失败");else / 在数据表中找到了改用户JOptionPane. showMessageDialog (this , " 对不起,该用 户名已经存在,请使用其他用户名! ");this .jPasswordField1.setText( null );this .jPasswordField2.setText( null ); catch (SQLException e1) JOptionPane. showMessageDialog

27、 (this , " 用户添加失败, 数 据库操作异常: "+e1.getMessage(); finally if (conn != null ) dbconn.close();/* 修改用户登录密码 */String sql1 ="SELECT * FROM User WHERE uname=?AND upass=?"try pstmt = conn.prepareStatement(sql1);pstmt.setString(1, uname);pstmt.setString(2, passtr);rs = pstmt.executeQuery()

28、;if (!rs.next()JOptionPane. showMessageDialog (this , " 密码修改失败 输入的旧密码不正! ");else String sql2 = "Update User SET upass=? WHEREuname=? AND upass=? int i=0;pstmt = conn.prepareStatement(sql2);pstmt.setString(1, pass1);pstmt.setString(2, uname);pstmt.setString(3, passtr);i = pstmt.execute

29、Update();if(i>0)(this ,"密码修改JOptionPane. showMessageDialog成功");jPasswordField1.setText(null );jPasswordField2.setText(null );jPasswordField3.setText(null );this .setVisible( false );else JOptionPane. showMessageDialog(this ,"密码修改失败");"密码修改失败,数 catch (SQLException e1) JOpt

30、ionPane. showMessageDialog (this ,据库操作异常:"+e1.getMessage(); fin ally if (conn != null ) dbc onn. close();/*添加学生基本信息块*/String sql1 = "SELECT * FROM Student WHERE sno=?"ResultSet rs= null ;try PreparedStatement pstmt =null ;pstmt = conn.prepareStatement(sql1);pstmt.setString(1, stu.getS

31、no();rs = pstmt.executeQuery(); catch (SQLException e) JOptionPane. showMessageDialog (this ," 查询时发生异常 为: "+e.getMessage();try if (rs.next() JOptionPane. showMessageDialog (this , " 该学号的学生 已经存在,请使用其他学号! "); else String sql2 = "INSERT INTO Student "+ "(sno,sname,sex

32、,birth,tel,qq,sdept,class,address) "+ "VALUES(?,?,?,?,?,?,?,?,?)"PreparedStatement pstmt =null ;pstmt = conn.prepareStatement(sql2);pstmt.setStri ng(1, stu.getS no ();pstmt.setString(2, stu.getSname();pstmt.setStri ng(3, stu.getSex();pstmt.setDate(4, new ja-pstmt.setStri ng(5, stu.get

33、Tel();pstmt.setStri ng(6, stu.getQq();pstmt.setStri ng(7, stu.getSdept();pstmt.setStri ng(8, stu.getSclass();pstmt.setStri ng(9, stu.getAddress();if (pstmt.executeUpdate() > 0) JOptionPane. showMessageDialog (this ,"学生信息添加成功!");this .setVisible( false ); catch (SQLException e) JOptionPa

34、ne. showMessageDialog (this ,"学生信息添加失败!插入异常为:"+e.getMessage();/*更新学生信息*/Stri ng sql1 = "SELECT * FROM Stude nt WHERE sn o=?"PreparedStatement pstmt =null ;try pstmt = conn .prepareStateme nt(sql1);pstmt.setStri ng(1, stu.getS no ();ResultSet rs = pstmt.executeQuery();if (!rs.next

35、() JOptionPane. showMessageDialog (this ,"不存在该学号的学生!不能进行删除操作!"); else /该课程的数据存在,进行删除操作Stri ng sql2 = "DELETE FROM Stude nt WHERE sn o=?"pstmt = conn .prepareStateme nt(sql2);pstmt.setStri ng(1, stu.getS no ();if (pstmt.executeUpdate() > 0) JOptionPane. showMessageDialog (this

36、, "OK !删除成功!"); catch (SQLException e) JOptionPane. showMessageDialog (this ,"删除失败!"+e.getMessage();/*删除学生信息*/String sqll = "SELECT * FROM Student WHERE sno=?"PreparedStatement pstmt = null ;try pstmt = conn .prepareStateme nt(sql1);pstmt.setStri ng(1, stu.getS no ();Re

37、sultSet rs = pstmt.executeQuery();if (!rs.next() JOptionPane. showMessageDialog (this ,"不存在这个学 号的学生,请重新输入学号!"); else stu.setS name(rs.getStri ng(2);stu.setSex(rs.getStr in g(3);stu.setBirth(rs.getDate(4);stu.setTel(rs.getStri ng(5);stu.setQq(rs.getStri ng(6);stu.setSdept(rs.getStri ng(7);s

38、tu.setSclass(rs.getStri ng(8);stu.setAddress(rs.getStri ng(9);flag = true ; catch (SQLException e) JOptionPane. showMessageDialog (this , "SQL 异常:"+e.getMessage(),"错误提示", JOptionPane. ERROR_MESSAGE;Stri ng sqll = "SELECT * FROM Stude nt WHERE sn o=?"nullPreparedStateme

39、nt pstmt = try pstmt = conn .prepareStateme nt(sql1);pstmt.setStri ng(1, stu.getS no ();ResultSet rs = pstmt.executeQuery();all = new ArrayListvStudent>();while (rs.next() stu = new Student();Stri ng sno 二 rs.getStri ng(1);Stri ng sn ame = rs.getStri ng(2);Str ing sex = rs.getStri ng(3);Date birt

40、h = null ;try birth = new SimpleDateFor-mat("yyyy-MM-DD").parse(rs.getStri ng( 4); catch (ParseException e) JOptionPane. showMessageDialog (this ,"查询得到的日期格式不符合"+ e.getMessage();Stri ng tel = rs.getStri ng(5);Str ing qq = rs.getStri ng(6);Stri ng sdept = rs.getStr in g(7);Stri ng

41、sclass = rs.getStri ng(8);Stri ng addr = rs.getStri ng(9);stu.setS no(sno);stu.setS name(s name);stu.setSex(sex);stu.setBirth(birth);stu.setTel(tel);stu.setQq(qq);stu.setSdept(sdept);stu.setSclass(sclass);stu.setAddress(addr);all.add(stu);if (all.size() = 0) JOptionPane. showMessageDialog (this ,&qu

42、ot;没有查询到相关的数据! n"); else if (all.size() > 0) /*这段是对查询的结果进行显示的代码,这里省略*/ catch (SQLException e) JOptionPane. showMessageDialog (this ,"查询学生记录失败!查询异常:"+ e.getMessage(); fin ally if (conn != null ) dbc onn. close();/*使用模糊查询方式查询学生基本信息*/Stri ng sql2 = "SELECT * FROM Stude nt WHERE s

43、no LIKE ? OR sn ame LIKE ? OR sdept LIKE ? OR class LIKE ?"PreparedStatement pstmt =null ;try pstmt = conn .prepareStateme nt(sql2);pstmt.setStri ng(1, "%" + keyword + "%");pstmt.setStri ng(2, "%" + keyword + "%");pstmt.setStri ng(3, "%" + keywo

44、rd + "%");pstmt.setStri ng(4, "%" + keyword + "%");ResultSet rs = pstmt.executeQuery();all = new ArrayListvStudent>();while (rs.next() stu = new Student();/注意这个句子不能放到外面去,每次都必须重新产生一个对象Stri ng sno 二 rs.getStri ng(1);Stri ng sn ame = rs.getStri ng(2);Str ing sex = rs.ge

45、tStri ng(3);Date birth =null ;try birth = new SimpleDateFor-mat("yyyy-MM-DD").parse(rs.getStri ng(4); catch (ParseException e) JOptionPane. showMessageDialog (this ,"查询得到的日期格式不符合"+ e.getMessage();Stri ng tel = rs.getStri ng(5);Str ing qq = rs.getStri ng(6);Stri ng sdept = rs.getStr in g(7);Stri ng sclass = rs.getStri ng(8);Stri ng addr = rs.getStri ng(9); stu.setS no(sno);stu.setS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论