数据库课程设计之学生信息管理系统_第1页
数据库课程设计之学生信息管理系统_第2页
数据库课程设计之学生信息管理系统_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、登录密码的修改,基本信息的修改,以 及切换用户登录;可以进行学生基本信息的查询,学生课程学习的查询,学生选 课成绩信息的查询。接着是帮助,帮助中显示系统的版本;最后要求有一个推出 系统按钮。其详细的操作框架流程在下面的图中可以见到。操作流程框图:曲甦信息_ 产瞬聲7登哗兰星榨息I厂、赶 細貞J翅躺魁罠/a甑縫 i粵碍认菅腔翅录厂I邮崩息、*认融 J 存储的数据信息:User表(用户名,密码,用户类型标识),用于存储登录用户信息;Student表(学号,姓名,性别,出生日期,电话, QQ号,专业,班级,家庭地 址),用于存储学生基本信息;Course表(课程号,课程名,先行课,学分,教师姓名),

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

5、助,退出系统。完整性:主要是在删除学生信息和课程信息的时候如果在选课信息中存在选 课成绩信息的话,那么就不能直接进行相应信息的删除, 在开发中要给出相应的 信息提示,在进行各种添加、和更新操作之前也有进行相应的判断, 如果原来的 信息中已经有了所要添加的该条信息, 怎不能添添加,并给出相应的提示,如果 不存在所要更新的信息的时候也不能进行更新, 并给出相应的提示。具体的完整 性约束在编程中具体给出。、概念结构设计I Cent ifi er l QiSI.0Cpi ) Variabledura iters(20)<!a>sx-aneVar i ablechirazterE(.30)S

6、tKVariaMechiraitftsrEGO)birllttlVu-iaalechurai:t»TE矶Variablechira:ter5sceptVariablechirazterE©)cl u sVar i ahlechil"*.: tersCM)Variablechira.:terECEO)S txdiTlt画出系统整体的E-R模型;并对模型中所出现的实体及属性等信息加以说明概念模型Cjio电 cLar机亡t吐占 12DJdjmHie41 1 4.LJL-C 吐皿 鈕 1让创 GO) G)Vwi thl 电 cltflrirtiirs GO) credit

7、FloatV*ri ible ctaracterE (20)物理模型三、逻辑结构设计(1) 模式设计:按系统整体 E-R模型,写出关系模式;并利用数据字典加 以描述。(如每个关系模式有何属性、属性的类型、属性值的长度、是否可取空 值、是否为主码、有何约束条件等信息);本系统的设计中主要涉及到四个表, 分别是User表、Student表,Course表, SC表,在这四个表中,User表用于存储用户信息,Stude nt表存储学生信息表, Course表存储课程信息,SC表存储学生选课的成绩信息。这四个表的结构如下: User 表属性名存储代码类型长度是否可为空主键否备注用户名un ameVAR

8、CHAFI 20否是用户登录名密码用户类型标识upass bsVARCHAFINTI 30否否用户登录密码 用于标识是管理员 还是学生Student 表属性名存储代码类型长度是否可为空主键否备注学号 姓名sno sn ameVARCHAVARCHAIR 20R 20否否是学生学号学生姓名性别 出生日期sex birthVARCHAIDATER 2否性别出生日期电话telVARCHAIR 20联系电话QC号 专业qq sdeptVARCHAIVARCHAR 20R 20否QC号码 学生所在专业班级classVARCHAR 20否所在班级家庭地址addressVARCHAIR 50学生家庭地址Co

9、urse 表属性名存储代码类型长度是否可为空主键否|备注课程号enoVARCHAIR 20否是课程编号课程名 先行课cn ame epnoVARCHAIVARCHAIR 20R 20否课程名 先行课程学分creditFLOAT否学分教师姓名tn ameVARCHAIR 20否教师姓名SC表属性名存储代码类型长度是否可为空主键否|备注学号snoVARCHaR 20否是学号课程号enoVARCHAR 20否是课程编号成绩 绩点grade poi ntFLOATFLOAT课程成绩 课程绩点(2) 子模式设计:即针对自己的设计模块的应用需定义什么样的视图表结构;并利用数据字典加以描述。由于在查询学生成

10、绩信息的时候要查询学生学号、姓名、课程号、课程名、 学分、成绩、绩点、联系电话,这就需要涉及到三个表的连接,为了查询的方便, 所以在进行设计的时候创建了一个 Stu_Cou_SC视图表,表结构为Stu_Cou_SC视 图(学号,姓名,课程号,课程名,学分,成绩,绩点魚系电话)Stu_Cou_SC属性名存储代码类型长度是否可为空主键否备注学号 姓名sno sn ameVARCHAVARCHAR 20R 20否否是学生学号学生姓名课程号cnoVARCHAR 20否是课程编号课程名cn ameVARCHAR 20否课程名学分creditFLOAT学分成绩 绩点grade poi ntFLOATFLO

11、AT成绩 绩点联系电话telVARCHAR 20联系电话(3)画出系统功能模块图,并对各功能模块进行简单介绍在登录模块中,设置了两种登录类型,一种是管理员登录,一种是学生登录。,信息维护信扈查饲,厂一4竽土登录 用广登录帮助尸O退出;O/管理设置,JW息查询営理员登录用户维护k鄢助PI退岀这两种登录有着不同的使用权限。管理员登录系统可以进行管理设置,信息 查询和用户维护等操作,学生登录系统可以进行信息维护和信息查询等。设贵学生信息更新寻生星本信息删祿学生基本佶惠殊加课程信息、 删瞎慄程信息话加咸鏡佶息J*"V删除嵌强信息在管理设置模块中,用户可以进行学生信息的设置、课程信息设置、选课

12、成绩信息的设置,在各个信息的设置中都可以进行添加、 更新和删除操作。信亀査询:酋洞磴蛭時舄在信息查询模块中,用户可以进行学生基本信息查询,课程信息查询以及学生选课成绩信息的查询。在各个查询中又设置有精确查询和模糊查询,使其查询更智能化。茹加管理员由户用户维护藩加寧生用户/幅改密码1切换舟户登录帮助黄于退出X.-逼岀扇级在用户维护模块中,可以进行添加用户,修改用户登录密码,切换用户登录功能。 修改逾码T腫改个人甚本信息信息维护切换登录用户_?、在学生登录后的信息维护模块中,学生统一可以修改登录密码,修改个人基本信息,和切换用户登录四、数据库的物理设计在本系统的数据库设计阶段,我们为其建立了下面的

13、三个索引字段,分别是基于Stude nt表建立的Stus no以sno为升序索引,基于 Course表建立的Coucno以 eno为升序索引,和基于SCS建立的SCn以sno为升序,以cno为降序的索引。对 应的T-SQI语句如下:/ * 创建索引字段 */DROP INDEX Student . Stusno ;CREATE INDEX Stusno ON Student ( sno ASC);DROP INDEX Course . Coucno ;CREATE INDEX Coucno ON Course ( cno ASC);DROP INDEX SC. SCno;CREATE INDE

14、X SCno ON SC( sno ASC, cno DESC);五、数据库设计实现及运行(1) 数据库的创建T-SQL语句:CREATE DATABASE SIMS;(2) 数据表的创建T-SQL语句:/* 用户表 */DROP TABLE User ;CREATE TABLE User (uname VARCHAR( 20) NOT NULL,upass VARCHAR( 30) NOT NULL,bs INTNOT NULL);/* 学生表 */DROP TABLE Student ;CREATE TABLE Student (snoVARCHAR( 20)PRIMARY KEY,sna

15、meVARCHAR( 20)NOT NULL,sexVARCHAR( 2)NOT NULL,birthDATE,telVARCHAR( 20),qqVARCHAR( 20),sdeptVARCHAR( 20)NOT NULL,classVARCHAR( 20)NOT NULL,addressVARCHAR( 50);/* 课程表 */DROP TABLE Course ;CREATE TABLE Course (cnoVARCHAR( 20)PRIMARY KEY,cnameVARCHAR( 20)NOT NULL,cpnoVARCHAR( 20),creditFLOAT NOT NULL,t

16、nameVARCHAR( 20)NOT NULL);/* 成绩表 */DROP TABLE SC;CREATE TABLE SC(snoVARCHAR( 20),cnoVARCHAR( 20),gradeFLOAT ,pointFLOAT ,PRIMARYKEY( sno , cno ),ForeignKEY ( sno ) REFERENCESStudent( sno ),ForeignKEY ( cno ) REFERENCESCourse( cno );(3) 视图的创建T-SQL语句:/* 创建 Stu_Cou_SC 视图 */ DROP VIEW Stu_Cou_SC;CREATE

17、VIEWStu_Cou_SC(sno,sname,cno,cname,credit,grade,point,tel)ASSELECT s.sno,sname,FROMStudent s,CourseWHEREs.sno=sc.snoc .cno,cname,credit,grade,point,tel c,SC scAND c .cno=o;4)各模块中的功能实现a)功能界面(截图);管理员登录模块功能截图用户登录添加学生信息更新学生信息r繹寒学生信息1确走b;删除学生信息信息查询 查询学信息精确查询模糊查询用户维护添加用户修改密码帮助切换用户登录弹出登录窗体选择学生登录学生登录功能截图信息维

18、护科韵佶息幵发信息查询b) 功能界面简单描述;首先是运行程序,进入用户登录界面,登录是要进行身份验证,在这登 录过程系统会通过数据库中的User表存储的数据进行验证,并判断用标识检查登录的类型。当登录的类型是管理员登录时,登录成功后会进入管理员操作界面,在 管理员登录界面中,管理员可以进行管理设置,如:设置学生基本信息,设置 课程信息,设置成绩信息,每个设置都有相应的添加、更新、删除操作;接 着是信息查询,在这儿可以查询学生的基本信息,查询课程信息,查询成绩 信息,在每一种查询中都分别设置有精确查询和模糊查询等操作,模糊查询 使得查询在查询的时候更加方便;还有就是用户维护操作,这里面管理员可

19、以添加用户,修改登录密码,切换用户登录,最后是帮助中的关于和系统的 退出。当登录类型为学生登录时,登录成功后会进入学生操作界面,在此界面 中学生可以在信息维护下修改登录密码,更新个人基本信息,切换用户登录; 然后也可以查询学生基本信息,查询课程信息,查询成绩信息,同样查询中 也设置有精确查询和模糊查询;最后也有帮助中的关于和系统的退出。在界面的操作过程中,对一些在操作中可能是操作失误导致的错误进行 了相应的提示,比如成绩的输入必须是字符型数字,出生日期是格式应为 yyyy-MM-dd格式,如果输入格式不对,给出相应的提示,操作人员在给出 对应的正确操作,这使得该系统变得更加智能化。c) T-S

20、QL语句与宿主语言嵌套使用代码段/*JAVA数据库的连接程序*/private static fin al Stri ng DBDRIVER =com.microsoft.sqlserver.jdbc.SQLServerDriver" ;private static final String DBURL = "jdbc:sqlserver:/localhost:1433;"+ "DatabaseName=SIMS "private static final String DBUSER = "sa"private static

21、 final String DBPASS= ""/ 密码为空private Connection conn = null ;public DatabaseConnection() try ClassforName (DBDRIVER); catch (ClassNotFoundException e) JOptionPane.showMessageDialog (null , e.getMessage();try conn = DriverManager. getConnection (DBURL, DBUSER, DBPASS; catch (SQLException e

22、) JOptionPane. showMessageDialog (null , e.getMessage();public Connection getConnection() return this .conn ;public void close() if (this .conn != null ) try this .conn.close(); catch (SQLException e) JOptionPane. showMessageDialog (null , e.getMessage();/*添加用户登录查询块*/dbconn = new DatabaseConnection(

23、); / 初始化连接类conn = dbconn .getConnection(); /获得连接Stri ng sql = "SELECT un ame,upass,bs FROM User WHERE un ame=? AND bs=?" PreparedStatement pstmt = null ;try pstmt = conn .prepareStatement(sql);pstmt.setStri ng(1, getName();pstmt.set In t(2, user .getBs();ResultSet rs = pstmt.executeQuery()

24、;user .set Un ame (null );user .setUpass(null );user .setBs(2);while (rs.next() user .setUname(rs.getString(1);user .setUpass(rs.getStri ng(2);user .setBs(rs.getl nt(3); catch (SQLException e) JOptionPane.showMessageDialog(this , e.getMessage(); fin ally if (conn != null ) dbconn .close();/*添加登录用户信息

25、*/PreparedStatement pstmt = null ;ResultSet rs = null ;String sql1 = "SELECT * FROM User WHERE uname=? AND bs=?" try pstmt = conn .prepareStatement(sqll);pstmt.setStri ng(1, user name);pstmt.set In t(2, user .getBs();rs = pstmt.executeQuery();if (!rs. next()Stri ng sql3 = "INSERT INTO

26、 User(u name,upass,bs) VALUES(?,?,?)" int i=0;pstmt = conn .prepareStateme nt(sql3);pstmt.setStri ng(1, user name);pstmt.setStri ng(2, passl);pstmt.setInt(3, user .getBs();i = pstmt.executeUpdate();if(i>0)JOptionPane.showMessageDialog (this ,"用户添加成功”); jTextFieldl .setText( null );jPass

27、wordFieldl .setText( null );jPasswordField2 .setText( null );jRadioButton1 .setSelected( false );jRadioButton2 .setSelected( false );this .setVisible( false );else JOptionPane.showMessageDialog (this ,"用户添加失败");else /在数据表中找到了改用户请使JOptionPane.showMessageDialog(this ,"对不起,该用户名已经存在, 用其他用

28、户名!");this .jPasswordFieldl .setText( null );this .jPasswordField2 .setText( null ); catch (SQLException e1) JOptionPane.showMessageDialog(this ,"用户添加失败,数据库操作异常: "+e1.getMessage(); fin ally if (conn != null ) dbconn .close();/*修改用户登录密码*/Stri ng sqll = "SELECT * FROM User WHERE un

29、 ame=? AND upass=?”; try pstmt = conn .prepareStatement(sql1);pstmt.setStri ng(1, un ame);pstmt.setStri ng(2, passtr);rs = pstmt.executeQuery();if (!rs. next()JOptionPane.showMessageDialog (this ,"密码修改失败,输入的旧密码不 正!");else Stri ng sql2 = "Update User SET upass=? WHERE un ame=? AND upas

30、s=? int i=0;pstmt = conn .prepareStateme nt(sql2);pstmt.setStri ng(1, passl);pstmt.setStri ng(2, un ame);pstmt.setStri ng(3, passtr);i = pstmt.executeUpdate();if(i>0)JOptionPane. showMessageDialog (this ,"密码修改成功"); jPasswordFieldl .setText( null );jPasswordField2 .setText( null );jPassw

31、ordField3 .setText( null );this .setVisible( false );else JOptionPane.showMessageDialog (this ,"密码修改失败"); catch (SQLException e1) JOptionPane.showMessageDialog(this ,"密码修改失败,数据库操作异常: "+e1.getMessage(); fin ally if (conn != null ) dbconn .close();/*添加学生基本信息块*/String sqll = "S

32、ELECT * FROM Student WHERE sno=?" ResultSet rs= null ;try PreparedStatement pstmt = null ;pstmt = conn .prepareStatement(sql1);pstmt.setString(1, stu .getSno();rs = pstmt.executeQuery(); catch (SQLException e) JOptionPane. showMessageDialog (this,"查询时发生异常为:” +e.getMessage();try if (rs.next

33、() JOptionPane.showMessageDialog (this ,"该学号的学生已经存在, 请使用其 他学号! ”); else Stri ng sql2 = "INSERT INTO Stude nt "+ "(s no,sn ame,sex,birth,tel,qq,sdept,class,address)"+ "VALUES(?,?,?,?,?,?,?,?,?)"pstmt = conn .prepareStateme nt(sql2); pstmt.setStri ng(1, pstmt.setStri

34、 ng(2, pstmt.setStri ng(3, pstmt.setDate(4, pstmt.setStri ng(5, pstmt.setStri ng(6, pstmt.setStri ng(7, pstmt.setStri ng(8, pstmt.setStri ng(9,PreparedStatement pstmt = null ;stu .getS no ();stu .getS name();stu .getSex();new java.sql.Date( stu .getBirth().getTime();stu .getTel();stu.getQq();stu .ge

35、tSdept();stu .getSclass();stu .getAddress();if (pstmt.executeUpdate() > 0) JOptionPane. showMessageDialog (this ,"学生信息添加成功!");this .setVisible( false ); catch (SQLException e) JOptionPane.showMessageDialog(this,"学生信息添加失败!插入异常为:"+e.getMessage();/*更新学生信息*/String sqll = "SEL

36、ECT * FROM Student WHERE sno=?" PreparedStatement pstmt = null ;try pstmt = conn .prepareStatement(sqll);pstmt.setString(1, stu .getSno();ResultSet rs = pstmt.executeQuery();if (!rs. next() JOptionPane.showMessageDialog (this ,"不存在该学号的学生!不能进行删除操作! ”); else /该课程的数据存在,进行删除操作String sql2 = &qu

37、ot;DELETE FROM Student WHERE sno=?"pstmt = conn .prepareStateme nt(sql2);pstmt.setStri ng(1, stu .getS no ();if (pstmt.executeUpdate() > 0) JOptionPane.showMessageDialog (this , "OK!删除成功!"); catch (SQLException e) JOptionPane.showMessageDialog(this ,"删除失败! "+e.getMessage(

38、);/*删除学生信息*/String sqll = "SELECT * FROM Student WHERE sno=?"PreparedStatement pstmt = null ;try pstmt = conn .prepareStatement(sqll);pstmt.setString(1, stu .getSno();ResultSet rs = pstmt.executeQuery();if (!rs. next() JOptionPane.showMessageDialog(this ,"不存在这个学号的学生,请重新输入学号! ”); else

39、stu.setS name(rs.getStri ng(2);stu .setSex(rs.getStri ng(3);stu .setBirth(rs.getDate (4);stu.setTel(rs.getStri ng(5);stu.setQq(rs.getStri ng(6);stu .setSdept(rs.getStri ng( 7);stu .setSclass(rs.getStri ng(8);stu .setAddress(rs.getStri ng(9);flag = true ; catch (SQLException e) JOptionPane.showMessag

40、eDialog(this , "SQL异常:"+ e.getMessage(),"错误提示 ”,JOptionPane.ERROR_MESSAGEString sqll = "SELECT * FROM Student WHERE sno=?"PreparedStatement pstmt =null ;try pstmt = conn .prepareStatement(sql1);pstmt.setString(1, stu .getSno();ResultSet rs = pstmt.executeQuery();all = new Ar

41、rayList<Student>();while (rs.next() stu = new Student();String sno = rs.getString(1);String sname = rs.getString(2);String sex = rs.getString(3);Date birth = null ;try birth = new SimpleDateFormat( "yyyy-MM-DD" ).parse(rs .getStri ng(4); catch (ParseException e) JOptionPane. showMess

42、ageDialog (this ,"查询得到的日期格式不符合”+ e.getMessage();String tel = rs.getString(5);String qq = rs.getString(6);String sdept = rs.getString(7);String sclass = rs.getString(8);String addr = rs.getString(9);stu.setS no(sno);stu.setS name(s name);stu.setSex(sex);stu.setBirth(birth);stu.setTel(tel);stu.se

43、tQq(qq);stu.setSdept(sdept);stu .setSclass(sclass);stu .setAddress(addr);all .add(stu);if (all .size() = 0) JOptionPane.showMessageDialog (this ,"没有查询到相关的数据!n"); else if (all .size() > 0) /*这段是对查询的结果进行显示的代码,这里省略*/ catch (SQLException e) JOptionPane.showMessageDialog(this ,"查询学生记录失败

44、!查询异常:"+ e.getMessage(); fin ally if (conn != null ) dbconn .close();/*使用模糊查询方式查询学生基本信息*/Stri ng sql2 = "SELECT * FROM Stude nt WHERE sno LIKE ? OR sn ame LIKE ? OR sdept LIKE ? OR class LIKE ?"PreparedStatement pstmt = null ;try pstmt = conn .prepareStatement(sql2);pstmt.setStri ng(1

45、,pstmt.setStri ng(2,pstmt.setStri ng(3,pstmt.setStri ng(4,"%""%""%""%"+ keyword + + keyword + + keyword + + keyword +"%"); "%");"%");"%");ResultSet rs = pstmt.executeQuery(); all = new ArrayList<Student>();while (r

46、s.next() stu = new Student();/注意这个句子不能放到外面去,每次都必须重新产生一个对象String sno = rs.getString(1);String sname = rs.getString(2);String sex = rs.getString(3);Date birth = null ;try birth = new SimpleDateFormat( "yyyy-MM-DD" ).parse(rs.getStri ng(4); catch (ParseException e) JOptionPane. showMessageDialog (this ,"查询得到的日期格式不符合”+ e.getMessage();String tel = rs.getString(5);String qq = rs.getString(6);String sdept = rs.getString(7);String sclass = rs.getString(8);String addr

温馨提示

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

评论

0/150

提交评论