学生信息管理系统课程设计报告

likai1010

贡献于2013-09-17

字数:34105 关键词: 报告

 学生信息管理系统——*** 数据库课程设计报告 -------学生信息管理系统 软件学院软件工程专业07级1班 姓名:*** 学号:*********** 任课教师:*** 实验教师:*** 助教:*** 学生信息管理系统——*** 目 录 一、系统开发平台 1 二、数据库规划 2 2.1 任务陈述 2 2.2 任务目标 2 三、系统定义 3 3.1 系统边界 3 3.2 用户视图 5 四、需求分析 7 4.1 用户需求说明 8 4.1.1 数据需求 8 4.1.2 事务需求 8 4.2 系统需求说明 11 五、数据库逻辑设计 13 5.1 ER图 13 5.2 数据字典 14 5.3 关系表 16 六、数据库物理设计 17 6.1 索引 17 6.2 视图 17 6.3 安全机制 18 6.4 其他 18 七、应用程序设计 19 7.1 功能模块 19 7.2 界面设计 20 7.3 事务设计 30 八、测试和运行 58 九、总结 65 学生信息管理系统——*** 9.1 系统优点 65 9.2 系统不足 65 9.3 系统改进 65 9.4 经验与收获 65 附. 参考文献 66 学生信息管理系统——*** 一、系统开发平台 1.1 题目:学生信息管理系统 学生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。系统采用Eclipse V3.2 JDK 1.6作为开发工具,Java为开发语言,采用Microsoft SQL Server 2000建立数据库,先在Microsoft SQL Server 2000中设计并制作各部分需要调用的数据库,并进行初始数据的输入,再进行界面的设计和事件代码的编写,在指导老师的帮助下,已经基本上成功地实现了设计要求。其中数据库设计和程序设计是系统的核心部分。通过对数据库的概念设计、逻辑设计、物理设计和系统的模块设计,使得系统界面简洁,功能明确,方便了工作人员的操作。 1.2 开发语言:Java 用Java做设计流程清晰、结构合理,有良好的可扩充性和耦合性。 1.3 开发工具:Eclipse V3.2 JDK 1.6 1.4 数据库:Microsoft SQL Server 2000 SQL Server 2000 Enterprise Edition则是一套完整的数据库和分析产品,具有高度可扩展性和可靠性,对市场的快速反应能力强,可以快速构建各种业务方案,且具有高度的安全性保障。 1.5 操作系统:Microsoft Windows XP 学生信息管理系统——*** 二、数据库规划 2.1 任务陈述 学[1] http://www.ahedu.cn 2006-5-24 17:26:54,《中学生成绩管理信息系统的设计》。 [2] 星尘工作室,《学生管理信息系统.NET(Smis.NET)开发文档》,2003。 生信息管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。随着学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。【1】面对庞大的信息量需要有学生管理系统来提高学生管理工作的效率。一个完善的学生信息管理系统能够极大地提高学生信息管理的效率,具有检索迅速、查找方便、可靠性高、存储量大、更新快、寿命长、成本低等优点。【2】 本学生信息管理系统包括学籍信息管理、院系信息管理、教师信息管理、课程信息管理、选课信息管理、授课信息管理、成绩信息管理七大模块。一共设置了三种用户身份,分别是Administrator用户、Teacher用户和Student用户。管理员可以拥有完全的权限管理系统,教师用户拥有修改、查看那自己所授课程和录入成绩的权限,而学生用户则拥有查询学籍信息、查询课程信息、选课、注销选课和查询成绩信息的权限。 2.2 任务目标 本系统主要可以实现以下任务目标: 1、系统可以准确地记录和查询学生信息,包括学生的姓名、用户名、密码、院系、专业、班级、入学时间、联系方式等。 2、系统可以对学校的院系情况进行管理,包括添加修改删除学院信息、添加修改删除某学院某专业信息等。 3、系统可以准确地记录和查询教师信息,包括教师的姓名、用户名、密码、院系、研究方向、入校时间、联系方式等。 学生信息管理系统——*** 4、系统可以对基础数据进行维护。 5、系统可以对开设的课程进行管理,包括课程信息的查询、添加、修改和删除,每门课程的状态分为选课阶段、已开课、统计成绩、公布成绩四种状态。 6、学生选课管理,学生只可以注销在选课阶段的课程,处于已开课、统计成绩、公布成绩的课程不可以注销。 7、成绩信息的录入和管理,系统可以自动计算每门课程学生的平均分并且可按照学生成绩排名。 8、系统可以提供强大数据统计、查询、报表生成以及打印等功能。 9、用户权限管理:本系统一共设置了三种用户身份,分别是Administrator用户、Teacher用户和Student用户。管理员可以拥有完全的权限管理系统,教师用户拥有修改、查看那自己所授课程和录入成绩的权限,而学生用户则拥有查询学籍信息、查询课程信息、选课、注销选课和查询成绩信息的权限。 10、异常处理。 三、系统定义 3.1 系统边界 系统边界描述数据库系统和企业信息系统的其他部分的接口,是信息系统内部构成元素与外部有联系实体之间的信息关系的描述与分割。它并不需要在它们之间划一条物理边界,而只需要弄清它们之间信息输入与输出的分割。 本数据库系统共包括学生信息、教师信息、课程信息、学院及专业信息、选课信息、授课信息及成绩信息八个模块。该信息系统的其他部分包括学生专业选择、教师配置、学生选课、学院设置、课程要求、具体教学等。 数据库系统的内部构成元素与外部其他部分之间的信息关系如下图所示: 学生信息管理系统——*** 学生信息 教师信息 课程信息 学院及专业信息 成绩信息 授课信息 选课信息 学生专业选择 学生选课 教师配置 学院设置 课程要求 具体教学 学生信息管理系统——*** 3.2 用户视图 3.2.1 学生(Student)用户视图 (1) 修改个人信息。 (2) 按课程名、课程号、专业、学分等信息查询课程,选课和查询已选课程。 (3) 注销选课(只能注销选课阶段的课程,已公布成绩的课程不可注销)。 (4) 成绩查询(教师公布成绩后学生方可查看到自己的成绩)。 3.2.2 教师(Teacher)用户视图 (1) 修改个人信息。 (2) 修改所授课程的信息(一名教师可教授多门课程)。 (3) 查看所授课程的学生选课情况。 (4) 录入、查看成绩(录入成绩的课程状态为“统计成绩” ,成绩录入的权限只有教师用户有)。 (5) 公布成绩(公布成绩后学生方可查看到自己的成绩)。 (6) 自动计算所授课程的选课人数、有成绩人数、平均成绩,且按成绩由高到低排序。 3.2.3 管理员(Administrator)用户视图 (1) 学生管理: 查询、添加、修改、删除学生信息。 (2) 教师管理: 查询、添加、修改、删除教师信息。 (3) 课程管理: 查询、添加、修改、删除课程信息。 (4) 选课管理: 查询选课信息,添加选课信息(修改选课信息权限只有学生用户有),修改选课状态(选课阶段、已开课、统计成绩、公布成绩、结束)。 (5) 授课管理: 查询、添加、修改授课信息。 (6) 专业管理: 学生信息管理系统——*** 添加、修改、删除专业信息。 (7) 学院管理: 添加、修改、删除学院信息。 (8) 管理员操作: 查询、添加、修改、删除管理员信息。 (9) 修改个人信息。 3.2.4 数据库系统多用户视图 管理员 教师 学生 学生信息管理系统——*** 四、需求分析 此学生管理信息系统的主要功能如下图所示: 学生管理信息系统 登录系统 学生用户 修改个人信息 课程查询 选课 注销选课 成绩查询 教师用户 修改个人信息 修改所授课程信息 查看学生选课信息 成绩录入 管理员用户 学生管理 教师管理 课程管理 选课管理 授课管理 专业管理 学院管理 管理员操作 退出系统 学生信息管理系统——*** 4.1 用户需求说明 4.1.1 数据需求 其中需求数据为: 1、 学生基本信息记录: 用户名、密码、姓名、院系、专业、班级、入学时间、手机号 2、 教师基本信息记录: 姓名、用户名、密码、院系、研究方向、入校时间、手机号 3、 管理员基本信息记录: 用户名、密码、姓名、权限等级、邮箱、手机号、注册日期 4、 课程基本信息记录: 课程号、课程名、所属专业、学分、备注 5、 学院及专业基本信息记录: 学院:学院名称、地址 专业:专业名称、所属学院 6、 选课信息管理: 选课:学生用户选定课程的课程号、课程名、开课专业、学分、详细信息 注销选课:学生用户注销选课的课程号、课程名、任课教师、学分、课程状态(只能注销状态为选课阶段的课程) 7、 授课信息管理: 课程号、课程名、教师号、教师姓名、选课人数 8、 成绩信息管理: 学生查看:课程号、课程名、任课教师、学分、状态、成绩 教师录入:所授课程、学号、成绩 教师查看:名次、学号、姓名、学院、专业、班级、入学年份、成绩、状态 4.1.2 事务需求 1、 数据录入: 学生信息管理系统——*** (1) 录入学生的基本信息: 学号、姓名、所属专业、班级、入学年份 (2) 录入学生的选课信息 (3) 录入教师的基本信息: 学工号、姓名、院系、研究方向、注册年份 (4) 教师录入学生的成绩信息: 选择所授课程后,录入学号、成绩 (5) 录入课程的基本信息: 课程号、课程名、开课专业、学分、详细信息 (6) 录入授课信息: 课程号、教师号 (7) 录入专业信息: 专业名、所属学院 (8) 录入学院信息: 学院名、地址 (9) 录入新管理员的基本信息: 管理员号、管理员姓名、权限设置(辅导员级、院级、校级、全局) 2、 数据更新/删除: (1) 学生个人信息的更新 (2) 学生注销选课信息 (3) 教师个人信息的更新 (4) 教师所授课程信息的更新 (5) 教师录入成绩的更新/ 删除 (6) 学生基本信息的更新/ 删除(管理员操作) (7) 教师基本信息的更新/ 删除(管理员操作) (8) 课程基本信息的更新/ 删除(管理员操作) (9) 选课状态的更新:分为选课阶段、已开课、统计成绩、公布成绩、结束(管理员操作) (10) 授课信息的更新(管理员操作) 学生信息管理系统——*** (11) 专业基本信息的更新/ 删除(管理员操作) (12) 学院基本信息的更新/ 删除(管理员操作) (13) 管理员个人信息的更新(管理员操作) (14) 新管理员基本信息的更新/ 删除(管理员操作) 3、 数据查看: 学生用户视图下: (1) 列出学生基本信息 (2) 按照课程号列出课程的课程号、课程名、开课专业、学分、详细信息 (3) 按照课程名列出所有课程的课程号、课程名、开课专业、学分、详细信息 (4) 按照开课专业列出所有课程的课程号、课程名、开课专业、学分、详细信息 (5) 按照学分列出所有课程的课程号、课程名、开课专业、学分、详细信息 (6) 列出所选课程的课程号、课程名、任课教师、学分、状态、成绩 教师用户视图下: (1) 列出教师基本信息 (2) 列出所授课程的基本信息 (3) 列出所授课程的学生选课信息:学号、姓名、专业、班级、入学年份、联系方式、成绩、状态 (4) 列出已录入成绩的学生名次、学号、姓名、学院、专业、班级、入学年份、成绩、状态,并按照成绩名次排序 管理员用户视图下: (1) 按照学号列出学生的学号、姓名、学院、专业、班级、入学年份、联系方式 (2) 按照姓名列出所有学生的学号、姓名、学院、专业、班级、入学年份、联系方式 (3) 按照专业列出所有学生的学号、姓名、学院、专业、班级、入学年份、联系方式 (4) 按照学院列出所有学生的学号、姓名、学院、专业、班级、入学年份、联系方式 (5) 按照学工号列出教师的学工号、姓名、学院、方向、注册年份、email、联系方式 (6) 按照姓名列出所有教师的学工号、姓名、学院、方向、注册年份、email、联系方式 (7) 按照学院列出所有教师的学工号、姓名、学院、方向、注册年份、email、联系方式 学生信息管理系统——*** (8) 按照方向列出所有教师的学工号、姓名、学院、方向、注册年份、email、联系方式 (9) 按照课程号列出课程的课程号、课程名、开课专业、学分、详细信息 (10)按照课程名列出课程的课程号、课程名、开课专业、学分、详细信息 (11)按照开课专业列出课程的课程号、课程名、开课专业、学分、详细信息 (12)按照学分列出课程的课程号、课程名、开课专业、学分、详细信息 (13)按照课程号列出选课信息:课程号、课程名、学号、学生姓名、教师号、教师姓名、状态、成绩 (14)按照学生学号列出选课信息:课程号、课程名、学号、学生姓名、教师号、教师姓名、状态、成绩 (15)按照教师学工号列出选课信息:课程号、课程名、学号、学生姓名、教师号、教师姓名、状态、成绩 (16)按照课程状态列出选课信息:课程号、课程名、学号、学生姓名、教师号、教师姓名、状态、成绩 (17)按照课程号列出授课信息:课程号、课程名、教师号、教师姓名、选课人数 (18)按照课程名列出授课信息:课程号、课程名、教师号、教师姓名、选课人数 (19)按照教师学工号列出授课信息:课程号、课程名、教师号、教师姓名、选课人数 (20)按照管理员号列出管理员的管理员号、姓名、权限、email、联系方式、注册日期 (21)按照姓名列出所有管理员的管理员号、姓名、权限、email、联系方式、注册日期 4.2 系统需求说明 该学生信息管理系统需要较强的数据处理功能,理论上应该能够容纳上万人的数据资料,并且在搜索方面理应具有较快的响应速度,能够处理多方面的数据请求。权限设置清晰明了,能够有效的防止越权操作。系统能够有效的处理各种异常,具有较好的健壮性。 学生信息管理系统——*** 4.2.1 初始数据库大小 (1) 大约有1400门课程,分属于约40个学院中,每个学院有10个以下的专业。 (2) 大约有2万名学生分布在各个学院,每个学院平均有500名学生。 (3) 大约有4000名教师分布在各个学院,每个学院平均有100名教师。 (4) 大约有120名管理员分布在各个学院,每个学院平均有3名管理员。 (5) 每名学生一学期平均选择5门课程。 (6) 每名教师平均所授课程为2门。 4.2.2 网络和共享需求 (1) 所有学院必须安全的和总部中央数据库网络互连 (2) 必须能够支持每个学院至少300名用户同时访问,需要考虑这么大数量并发访问的许可需求。 性能: 4.2.3 性能 高峰期:每年的1月、3月、6月、9月 (1) 单个记录查询时间少于1秒,高峰期少于5秒 (2) 多个记录查询时间少于5秒,高峰期少于10秒 (3) 更新/保存记录时间少于1秒,高峰期少于5秒 4.2.4 安全性 (1) 数据库必须有口令保护 (2) 每个用户分配特定的用户视图所应有的访问权限 (3) 用户只能在适合他们完成工作需要的窗口中看到需要的数据 4.2.5 备份和恢复 每天24点备份 4.2.6 用户界面 菜单驱动,联机帮助 4.2.7 法律问题 对用户信息管理,遵守法律 学生信息管理系统——*** 五、数据库逻辑设计 5.1 ER图【3】: 本系统的ER图如下: 实体: 联系: 属性: 课程 教师 学生 学院 专业 授课 选课 工作于 属于 包含 password name weight Tea-id name name enter-year direction email Stu-id password Cou-id enter-year phone name phone location class name state score m m n n m m [3] Abraham Silberschatz,Henry F.Korth,《数据库系统概念》,机械工业出版社,2008。 1 1 1 m 该ER图包括课程、教师、学生、学院、专业五个实体和授课、选课、工作于、属于、包含五个联系。 学生信息管理系统——*** 5.2 数据字典 5.2.1 从数据字典中抽取出来的系统实体描述: 实体 属性 描述 数据类型 和长度 主键 是否允许 空值 管理员 Admin_id 管理员用户名 Varchar 32 Admin_id 否 Password 密码 Varchar 32 否 Name 姓名 Varchar 32 否 Authority 权限等级 Int 4 否 Email 邮箱 Varchar 128 是 Phone 电话 Varchar 32 是 Regist_date 注册日期 Varchar 16 是 学生 Student_id 学生用户名 Varchar 32 Student_id 否 Password 密码 Varchar 32 否 Name 姓名 Varchar 32 否 College 学院 Varchar 128 否 Major 专业 Varchar 128 否 Class 班级 Varchar 10 否 Enter_year 入学日期 Varchar 16 否 Phone 电话 Varchar 32 是 教师 Teacher_id 教师用户名 Varchar 32 Teacher_id 否 Password 密码 Varchar 否 学生信息管理系统——*** 32 Name 姓名 Varchar 32 否 College 学院 Varchar 128 否 Direction 研究方向 Varchar 128 是 Enter_year 入校日期 Varchar 16 否 Email 邮箱 Varchar 128 是 Phone 电话 Varchar 32 是 课程 Couse_id 课程号 Varchar 10 Couse_id 否 Name 课程名 Varchar 128 否 Parent_major 所属专业 Varchar 128 否 Weight 学分 Float 8 否 Detail 描述 Varchar 1024 是 学院 Name 学院名称 Varchar 128 Name 否 Location 地址 Varchar 128 是 专业 Name 专业名称 Varchar 128 Name 否 Parent_college 所属学院 Varchar 128 否 5.2.2 从数据字典中抽取出来的联系的描述: 实体 多样性 联系 多样性 实体 教师 m 授课 n 课程 学生 m 选课 n 课程 教师 m 工作于 1 学院 学生 m 属于 1 专业 学院 1 包含 m 专业 学生信息管理系统——*** 5.3 关系表 该数据库关系图如下: 其中包含的联系有: 实体 联系 实体 教师 授课 课程 学生 选课 课程 教师 工作于 学院 学生 属于 专业 学院 包含 专业 学生信息管理系统——*** 六、数据库物理设计 6.1 索引 College数据库中的索引: 表名 主键 外键 课程 课程号 专业名 学生 学号 专业名 教师 教师号 学院名 学院 学院名 无 专业 专业名 学院名 管理员 管理员号 无 在表“学生”中,对主键学号做了索引,作为该表的主索引。每次改变学号,姓名几乎都要和其相对应,索引把表“学生”里姓名一列作为“学生”的二级索引。索引使“学生”中的学号一列按顺序排列,方便查找学生信息,为实现以下功能提供了方便: 查找学生基本信息以及修改学生基本信息; 向“学生”表里添加学生和删除学生信息也可以根据索引方便找到。 另外,在数据库的其他表中,由于其他表的信息量不如“学生”这么大,像“教师”、“管理员”等,这样建索引反而使效率提高不明显,又浪费空间,所以这些表中没有这样建索引,只有表“学生”中用到。 6.2 视图 此环节设计在数据库应用生命周期的需求分析和收集阶段标识的用户视图。通常,视图使用SQL或类似QBE的工具创建。例如,对软件学院的管理员: CREATE VIEW Student1_View AS SELECT student_id, name, major, class, enter_year, phone FROM student WHERE college = ‘软件学院’; 学生信息管理系统——*** 6.3 安全机制 6.3.1 系统安全 1、提供了充足的异常处理机制,能够捕获由各种错误引发的异常(如:越权操作、输入数据类型与数据库要求类型不一致、查询过程中出现的错误等等)。 2、系统登录时要凭用户名和口令进入,输入正确时才可以进入系统。用户需要选择自己的身份(学生、教师、管理员),若用户名和密码输入正确,系统可以打开符合该用户身份的操作界面。其他界面该用户没有权限访问。 6.3.2 数据安全 1、根据用户身份,用户进入不同的用户界面,即享有不同的权限,只有管理员才可以实现修改一些重要信息,以确保数据库不被随意更改,保证数据安全。 2、该学生系统共有三种身份:学生、教师、管理员。他们相应的权限如下: (1)学生:查看修改个人信息、查看课程信息、选课/注销选课(只有在选课阶段的课程才可以注销)、查看自己所选课程成绩(教师公布成绩后学生方可查看到自己的成绩)。 (2)教师:查看修改个人信息、查看修改所授课程信息(一名教师可教授多门课程)、查看所授课程的学生选课情况、成绩录入(录入成绩的课程状态为“统计成绩” ,成绩录入的权限只有教师用户有)、公布成绩(公布成绩后学生方可查看到自己的成绩)。 (3)管理员:添加删除修改查看学生信息、添加删除修改查看教师信息、添加删除修改查看课程信息、添加删除修改查看学院信息、添加删除修改查看专业信息、添加查看选课信息(修改选课信息权限只有学生用户有)、修改课程状态、添加修改查看授课信息、添加删除修改查看其他管理员信息、查看修改个人信息。 6.4 其他 规范化产生一个结构上一致且最小冗余的逻辑数据库设计,但是,规范化的数据库设计有时不能提供最大的处理效率。所以我们愿意接收规范化设计方面的一些损失而实现更好的性能。在该系统中,表“学生”中复制了表“专业”的“所属学院”一列,加快了检索速度,方便通过列“学院”来查询特定学院的学生,也方便形成某学院的视图。 学生信息管理系统——*** 七、应用程序设计 7.1 功能模块 该学生管理信息系统共有三个角色:学生、教师、管理员,各个角色实现的功能如下: 7.1.1 学生(Student)用户 (1)修改个人信息。 (2)按课程名、课程号、专业、学分等信息查询课程,选课和查询已选课程。 (3)注销选课(只能注销选课阶段的课程,已公布成绩的课程不可注销)。 (4)成绩查询(教师公布成绩后学生方可查看到自己的成绩)。 7.1.2 教师(Teacher)用户 (1)修改个人信息。 (2)修改所授课程的信息(一名教师可教授多门课程)。 (3)查看所授课程的学生选课情况。 (4)录入、查看成绩(录入成绩的课程状态为“统计成绩” ,成绩录入的权限只有教师用户有)。 (5)公布成绩(公布成绩后学生方可查看到自己的成绩)。 (6)自动计算所授课程的选课人数、有成绩人数、平均成绩,且按成绩由高到低排序。 7.1.3 管理员(Administrator)用户 (1)学生管理: 查询、添加、修改、删除学生信息。 (2)教师管理: 查询、添加、修改、删除教师信息。 (3)课程管理: 查询、添加、修改、删除课程信息。 (4)选课管理: 查询选课信息,添加选课信息(修改选课信息权限只有学生用户有),修改选课状态(选课阶段、已开课、统计成绩、公布成绩、结束)。 学生信息管理系统——*** (5)授课管理: 查询、添加、修改授课信息。 (6)专业管理: 添加、修改、删除专业信息。 (7)学院管理: 添加、修改、删除学院信息。 (8)管理员操作: 查询、添加、修改、删除管理员信息。 (9)修改个人信息。 7.2 界面设计 7.2.1 登录界面 用户在登录界面可以选择不同的角色,输入用户名和密码并经过系统验证后,可以进入相应角色的操作界面。 学生信息管理系统——*** 7.2.2 学生用户操作界面 (1)修改个人信息的界面。 (2)按课程名、课程号、专业、学分等信息查询课程,选课。 学生信息管理系统——*** (3)查询已选课程及成绩(教师公布成绩后学生方可查看到自己的成绩),注销选课(只能注销选课阶段的课程,已公布成绩的课程不可注销)。 (4)退出系统时的提示。 7.2.3 教师用户操作界面 (1)修改个人信息。 学生信息管理系统——*** (2)修改所授课程的信息(一名教师可教授多门课程)。下拉框中会显示当前所授课程,从中选择要修改的课程并输入新的课程信息。 学生信息管理系统——*** (3)查看所授课程的学生选课情况。 (4)录入、查看成绩(录入成绩的课程状态为“统计成绩” ,成绩录入的权限只有教师用户有),系统自动计算所授课程的选课人数、有成绩人数、平均成绩,且按成绩由高到低排序。 学生信息管理系统——*** (5)公布成绩(教师公布成绩后学生方可查看到自己的成绩)。 7.2.4 管理员用户操作界面 (1)学生管理:查询、添加、修改、删除学生信息。 学生信息管理系统——*** (2)教师管理:查询、添加、修改、删除教师信息。 (3)课程管理:查询、添加、修改、删除课程信息。 学生信息管理系统——*** (4)选课管理:查询选课信息,添加选课信息(修改选课信息权限只有学生用户有),修改选课状态(选课阶段、已开课、统计成绩、公布成绩、结束)。 (5)授课管理:查询、添加、修改授课信息。 学生信息管理系统——*** (6)专业管理:添加、修改、删除专业信息。 (7)学院管理:添加、修改、删除学院信息。 学生信息管理系统——*** (8)管理员操作:查询、添加、修改、删除管理员信息。 (9)修改个人信息。 学生信息管理系统——*** 7.3 事务设计 该系统中,所有关于查询的事务基本上都可以由Select语句实现,而更新的事务则用Update语句,删除的事务用Delete语句实现。【4】 7.3.1 管理员事务 有关管理员的事务包括管理员的添加、查询、删除、修改及身份验证等。具体实现代码如下: public ResultSet search(String target, String method) { if (method.equals("id")) return searchByID(target); else return searchByName(target); } public ResultSet searchLeisure() { sql = "select * from student where student_id not in(select student_id from selection)"; ResultSet rst = db.select(sql); return rst; } [4] 刘勇,周学军,《SQL Server 2000基础教程》,人民邮电出版社,2007。 public boolean add(Admin a) { sql = "insert into admin values(?,?,?,?,?,?,?)"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, a.getAdminID()); ps.setString(2, a.getPassword()); ps.setString(3, a.getName()); ps.setInt(4, a.getAuthority()); ps.setString(5, a.getEmail()); ps.setString(6, a.getPhone()); ps.setString(7, a.getRegisterDate()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; 学生信息管理系统——*** } } public boolean delete(String id) { sql = "delete from admin where admin_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(Admin a, String id) { sql = "update admin set admin_id=?, name=?, auth=? where admin_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, a.getAdminID()); ps.setString(2, a.getName()); ps.setInt(3, a.getAuthority()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean modify(String id, String email, String phone) { sql = "update admin set email=?, phone=? where admin_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, email); ps.setString(2, phone); ps.setString(3, id); ps.executeUpdate(); return true; } catch (SQLException e) { return false; 学生信息管理系统——*** } } public boolean changePass(String id, String pass) { sql = "update admin set password=? where admin_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, pass); ps.setString(2, id); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public Admin getAdminByID(String id) { Admin admin = new Admin(); sql = "select * from admin where admin_id='" + id + "'"; ResultSet rst = db.select(sql); try { if (rst.next()) { admin.setAdminID(rst.getString(1)); admin.setPassword(rst.getString(2)); admin.setName(rst.getString(3)); admin.setAuthority(rst.getInt(4)); admin.setEmail(rst.getString(5)); admin.setPhone(rst.getString(6)); admin.setRegisterDate(rst.getString(7)); db.close(); return admin; } else return null; } catch (SQLException e) { e.printStackTrace(); return null; } } public boolean check(String id, String pass) { sql = "select * from admin where admin_id='" + id + "' and password='" + pass + "'"; 学生信息管理系统——*** ResultSet rst = db.select(sql); try { if (rst.next()) { db.close(); return true; } else return false; } catch (SQLException e) { return false; } } public String authorityToString(int autho) { switch (autho) { case 0: return "未知"; case 4: return "全局"; case 3: return "校级"; case 2: return "院级"; case 1: return "辅导员级"; } return ""; } private ResultSet searchByID(String target) { sql = "select * from admin where admin_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByName(String target) { sql = "select * from admin where name='" + target + "'"; ResultSet rst = db.select(sql); return rst; } 7.3.2 学生事务 有关学生的事务包括根据学号/姓名/学院/专业/所选课程状态等信息分别添加、删除、修改、查询学生信息及身份验证等。具体实现代码如下: 学生信息管理系统——*** public ResultSet search(String target, String method) { if (method.equals("id")) return searchByID(target); else if (method.equals("name")) return searchByName(target); else if (method.equals("major")) return searchByMajor(target); else return searchByCollege(target); } public ResultSet searchLeisure() { sql = "select * from student where student_id not in(select student_id from selection)"; ResultSet rst = db.select(sql); return rst; } public boolean add(Student s) { sql = "insert into student values(?,?,?,?,?,?,?,?)"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, s.getStudentID()); ps.setString(2, s.getPassword()); ps.setString(3, s.getName()); ps.setString(4, s.getCollege()); ps.setString(5, s.getMajor()); ps.setString(6, s.getClassInfo()); ps.setString(7, s.getEnterYear()); ps.setString(8, s.getPhone()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean delete(String id) { sql = "delete from student where student_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); 学生信息管理系统——*** sql = "delete from selection where student_id=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, id); ps2.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(Student s, String id) { sql = "update student set student_id=?, name=?, college=?, major=?, class=?, enter_year=? where student_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, s.getStudentID()); ps.setString(2, s.getName()); ps.setString(3, s.getCollege()); ps.setString(4, s.getMajor()); ps.setString(5, s.getClassInfo()); ps.setString(6, s.getEnterYear()); ps.setString(7, id); ps.executeUpdate(); sql = "update selection set student_id=? where student_id='" + id + "'"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, s.getStudentID()); ps2.executeUpdate(); return true; } catch (SQLException e) { return false; } } public Student getStudentByID(String id) { Student student = new Student(); sql = "select * from student where student_id='" + id + "'"; ResultSet rst = db.select(sql); try { if (rst.next()) { student.setStudentID(rst.getString(1)); 学生信息管理系统——*** student.setPassword(rst.getString(2)); student.setName(rst.getString(3)); student.setCollege(rst.getString(4)); student.setMajor(rst.getString(5)); student.setClassInfo(rst.getString(6)); student.setEnterYear(rst.getString(7)); student.setPhone(rst.getString(8)); db.close(); return student; } else return null; } catch (SQLException e) { e.printStackTrace(); return null; } } public String getNameByID(String id) { sql = "select name from student where student_id='" + id + "'"; ResultSet rst = db.select(sql); String name = ""; if (rst != null) { try { if (rst.next()) name = rst.getString(1); } catch (SQLException e) { e.printStackTrace(); } } db.close(); return name; } public boolean modify(String id, String phone) { sql = "update student set phone=? where student_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, phone); ps.setString(2, id); ps.executeUpdate(); return true; 学生信息管理系统——*** } catch (SQLException e) { return false; } } public boolean changePass(String id, String pass) { sql = "update student set password=? where student_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, pass); ps.setString(2, id); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean check(String id, String pass) { sql = "select * from student where student_id='" + id + "' and password='" + pass + "'"; ResultSet rst = db.select(sql); try { if (rst.next()) { db.close(); return true; } else return false; } catch (SQLException e) { return false; } } public ResultSet getAllByCourseID(String target) { sql = "select student.student_id,student.name,student.college,student.major,student.class,student.enter_year,student.phone,selection.score,selection.status from student,selection where student.student_id=selection.student_id and course_id='" + target + "' and status<5 order by selection.score desc"; ResultSet rst = db.select(sql); return rst; } 学生信息管理系统——*** public ResultSet getAllOrderedByCourseID(String target) { sql = "select student.student_id,student.name,student.college,student.major,student.class,student.enter_year,selection.score,selection.status from student,selection where student.student_id=selection.student_id and course_id='" + target + "' and status between 3 and 4 order by selection.score desc"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByID(String target) { sql = "select * from student where student_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByName(String target) { sql = "select * from student where name='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByMajor(String target) { sql = "select * from student where major='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByCollege(String target) { sql = "select * from student where college='" + target + "'"; ResultSet rst = db.select(sql); return rst; } 7.3.3 教师事务 有关教师的事务包括根据教师号/姓名/学院/研究方向等条件添加、删除、查询、修改教师的信息。具体实现代码类似学生事务的实现。 7.3.4 课程事务 学生信息管理系统——*** 有关课程的事务包括根据课程号/课程名/开课专业/学分等条件添加、删除、查询、修改课程的信息。具体实现代码如下: public ResultSet search(String target, String method) { if (method.equals("id")) return searchByID(target); else if (method.equals("name")) return searchByName(target); else if (method.equals("major")) return searchByMajor(target); else return searchByCollege(target); } public boolean add(Course c) {//添加课程 sql = "insert into course values(?,?,?,?,?)"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, c.getCourseID()); ps.setString(2, c.getName()); ps.setString(3, c.getParentMajor()); ps.setFloat(4, c.getWeight()); ps.setString(5, c.getDetail()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean delete(String id) { sql = "delete from course where course_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); sql = "delete from selection where course_id=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, id); ps2.executeUpdate(); return true; } catch (SQLException e) { 学生信息管理系统——*** return false; } } public boolean update(Course c, String id) { sql = "update course set course_id=?, name=?, parent_major=?, weight=? where course_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, c.getCourseID()); ps.setString(2, c.getName()); ps.setString(3, c.getParentMajor()); ps.setFloat(4, c.getWeight()); ps.setString(5, id); ps.executeUpdate(); sql = "update selection set course_id=? where course_id='" + id+ "'"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, c.getCourseID()); ps2.executeUpdate(); return true; } catch (SQLException e) { return false; } } public Course getCourseByID(String id) { //通过课程ID查询课程 Course course = new Course(); sql = "select * from course where course_id='" + id + "'"; ResultSet rst = db.select(sql); try { if (rst.next()) { course.setCourseID(rst.getString(1)); course.setName(rst.getString(2)); course.setParentMajor(rst.getString(3)); course.setWeight(rst.getFloat(4)); course.setDetail(rst.getString(5)); db.close(); return course; } else return null; } catch (SQLException e) { e.printStackTrace(); 学生信息管理系统——*** return null; } } public String getNameByID(String id) { sql = "select name from course where course_id='" + id + "'"; ResultSet rst = db.select(sql); String name = ""; if (rst != null) { try { if (rst.next()) name = rst.getString(1); } catch (SQLException e) { e.printStackTrace(); } } db.close(); return name; } public int getCount(String id) {//选修某门课的学生人数 sql = "select count(student_id) from selection where course_id='" + id + "'"; ResultSet rst = db.select(sql); int count = 0; if (rst != null) { try { if (rst.next()) count = rst.getInt(1); } catch (SQLException e) { e.printStackTrace(); } } db.close(); return count; } public float getWeightByID(String id) {//通过课程ID查询课程学分 sql = "select weight from course where course_id='" + id + "'"; 学生信息管理系统——*** ResultSet rst = db.select(sql); float weight = 0; if (rst != null) { try { if (rst.next()) { weight = rst.getInt(1); } } catch (SQLException e) { db.close(); } } return weight; } public ResultSet getAll() { sql = "select * from course"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByID(String target) { sql = "select * from course where course_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByName(String target) { sql = "select * from course where name like '%" + target + "%'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByMajor(String target) { sql = "select * from course where parent_major='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByCollege(String target) { sql = "select * from course where weight='" + target + "'"; ResultSet rst = db.select(sql); return rst; 学生信息管理系统——*** } 7.3.5 学院事务 有关学院的事务包括根据学院名添加、删除、查询、修改学院的信息等。具体实现代码如下: public boolean add(College c) { sql = "insert into college values(?,?)"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, c.getName()); ps.setString(2, c.getLocation()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(College c, String name) { sql = "update college set name=?,location=? where name=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, c.getName()); ps.setString(2, c.getLocation()); ps.setString(3, name); ps.executeUpdate(); sql = "update student set college=? where college='" + name + "'"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, c.getName()); sql = "update major set parent_college=? where parent_college='" + name + "'"; PreparedStatement ps3 = db.getConnection().prepareStatement(sql); ps3.setString(1, c.getName()); ps3.executeUpdate(); sql = "update teacher set college=? where college='" + name + "'"; PreparedStatement ps4 = db.getConnection().prepareStatement(sql); ps4.setString(1, c.getName()); ps4.executeUpdate(); return true; 学生信息管理系统——*** } catch (SQLException e) { return false; } } public boolean delete(String name) { sql = "delete from college where name=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, name); ps.executeUpdate(); sql = "delete from student where college=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, name); ps2.executeUpdate(); sql = "delete from teacher where college=?"; PreparedStatement ps3 = db.getConnection().prepareStatement(sql); ps3.setString(1, name); ps3.executeUpdate(); sql = "delete from major where parent_college=?"; PreparedStatement ps4 = db.getConnection().prepareStatement(sql); ps4.setString(1, name); ps4.executeUpdate(); return true; } catch (SQLException e) { return false; } } public int getCount() { sql = "select count(*) from college"; ResultSet rst = db.select(sql); int count = 0; try { rst.next(); count = rst.getInt(1); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } 学生信息管理系统——*** db.close(); return count; } public ResultSet getAll() { sql = "select * from college"; ResultSet rst = db.select(sql); return rst; } public String getLocation(String name) { sql = "select location from college where name='" + name + "' "; ResultSet rst = db.select(sql); String location = ""; try { rst.next(); location = rst.getString(1).trim(); } catch (SQLException e) { e.printStackTrace(); return null; } db.close(); return location; } 7.3.6 专业事务 有关专业的事务包括根据专业名/所属学院等条件添加、删除、查询、修改专业信息等。具体实现代码如下: public boolean add(Major m) { sql = "insert into major values(?,?)"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, m.getName()); ps.setString(2, m.getParentCollege()); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean delete(String name) { sql = "delete from major where name=?"; 学生信息管理系统——*** try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, name); ps.executeUpdate(); sql = "delete from student where major=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, name); ps2.executeUpdate(); sql = "delete from course where parent_major=?"; PreparedStatement ps3 = db.getConnection().prepareStatement(sql); ps3.setString(1, name); ps3.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(Major m, String name) { sql = "update major set name=?,parent_college=? where name=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, m.getName()); ps.setString(2, m.getParentCollege()); ps.setString(3, name); ps.executeUpdate(); sql = "update student set major=? where major='" + name + "'"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, m.getName()); sql = "update course set parent_major=? where parent_major='" + name + "'"; PreparedStatement ps3 = db.getConnection().prepareStatement(sql); ps3.setString(1, m.getName()); ps3.executeUpdate(); return true; } catch (SQLException e) { return false; } } 学生信息管理系统——*** public ResultSet getMajorByParent(String parent) { sql = "select * from major where parent_college='" + parent + "'"; ResultSet rst = db.select(sql); return rst; } public int getCountByParent(String parent) {//返回某学院的专业数 sql = "select count(*) from major where parent_college='" + parent + "' group by parent_college"; ResultSet rst = db.select(sql); int count = 0; try { rst.next(); count = rst.getInt(1); } catch (SQLException e) { e.printStackTrace(); } db.close(); return count; } public ResultSet getAll() { sql = "select * from major"; ResultSet rst = db.select(sql); return rst; } public String getParent(String name) { sql = "select parent_college from major where name='" + name + "' "; ResultSet rst = db.select(sql); String parent = ""; try { rst.next(); parent = rst.getString(1).trim(); } catch (SQLException e) { e.printStackTrace(); return null; } db.close(); return parent; } 学生信息管理系统——*** 7.3.7 选课事务 有关选课的事务包括根据课程号/学号/课程的状态等条件进行选课、注销选课(只有在选课阶段的课程才可以注销,注销前要检测课程状态)、成绩查询(教师公布成绩后学生方可进行成绩查询)、成绩录入等。具体实现代码如下: public ResultSet search(String target, String method) { if (method.equals("course_id")) return searchByCourseID(target); else if (method.equals("student_id")) return searchByStudentID(target); else if (method.equals("teacher_id")) return searchByTeacherID(target); else return searchByStatus(target); } public boolean add(Selection s) { try { sql = "select * from selection where course_id='" + s.getCourseID() + "' and student_id='" + s.getStudentID() + "'"; ResultSet rst = db.select(sql); if (rst.next()) { db.close(); return true; } sql = "insert into selection values(?,?,?,?)"; PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, s.getCourseID()); ps.setString(2, s.getStudentID()); ps.setInt(3, s.getStatus()); ps.setFloat(4, 0); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean delete(String id) { 学生信息管理系统——*** sql = "delete from course where course_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); sql = "delete from selection where course_id=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, id); ps2.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(String method, String target, int toStatus) { if (method.equals("all")) sql = "update selection set status=?"; else if (method.equals("student")) sql = "update selection set status=? where student_id='" + target + "'"; else if (method.equals("course")) sql = "update selection set status=? where course_id='" + target + "'"; else if (method.equals("major")) sql = "update selection set status=? where student_id in (select student_id from student where major='" + target + "')"; else if (method.equals("course")) sql = "update selection set status=? where student_id in (select student_id from student where college='" + target + "')"; PreparedStatement ps; try { ps = db.getConnection().prepareStatement(sql); ps.setInt(1, toStatus); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } 学生信息管理系统——*** } public boolean updateScore(String courseID, String studentID, float score) { sql = "update selection set score=?,status=3 where course_id=? and student_id=?"; PreparedStatement ps; try { ps = db.getConnection().prepareStatement(sql); ps.setFloat(1, score); ps.setString(2, courseID); ps.setString(3, studentID); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean publishScore(String courseID) { sql = "update selection set status=4 where course_id=? and status=3"; PreparedStatement ps; try { ps = db.getConnection().prepareStatement(sql); ps.setString(1, courseID); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean addMore(String studentID, String[] courseID) { try { ResultSet rst = null; for (int i = 0; i < courseID.length; i++) { rst = null; sql = "select * from selection where course_id='" + courseID[i] + "' and student_id='" + studentID + "'"; rst = db.select(sql); 学生信息管理系统——*** if (rst.next()) { db.close(); continue; } sql = "insert into selection values(?,?,?,?)"; PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, courseID[i]); ps.setString(2, studentID); ps.setInt(3, 1); ps.setFloat(4, 0); ps.executeUpdate(); } return true; } catch (SQLException e) { return false; } } public boolean remove(String studentID, String[] courseID) { try { for (int i = 0; i < courseID.length; i++) { sql = "delete from selection where course_id=? and student_id=?"; PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, courseID[i]); ps.setString(2, studentID); ps.executeUpdate(); } return true; } catch (SQLException e) { return false; } } public boolean removeScore(String courseID, String[] stuID) { try { for (int i = 0; i < stuID.length; i++) { sql = "update selection set score=0,status=2 where course_id=? and student_id=?"; PreparedStatement ps = db.getConnection().prepareStatement(sql); 学生信息管理系统——*** ps.setString(1, courseID); ps.setString(2, stuID[i]); ps.executeUpdate(); } return true; } catch (SQLException e) { return false; } } public String statusToString(int sta) { switch (sta) { case 0: return "未知"; case 1: return "选课阶段"; case 2: return "已开课"; case 3: return "统计成绩"; case 4: return "发布成绩"; case 5: return "结束"; } return ""; } public int stringToStatus(String sta) { if (sta.equals("选课阶段")) return 1; if (sta.equals("已开课")) return 2; if (sta.equals("统计成绩")) return 3; if (sta.equals("发布成绩")) return 4; if (sta.equals("结束")) return 5; return 0; } 学生信息管理系统——*** public ResultSet getAll() { sql = "select * from selection"; ResultSet rst = db.select(sql); return rst; } public ResultSet getAllByStudent(String studentID) { sql = "select * from selection where student_id='" + studentID + "'"; ResultSet rst = db.select(sql); return rst; } public float getScore(String studentID, String courseID) { sql = "select score from selection where student_id='" + studentID + "' and course_id='" + courseID + "'"; ResultSet rst = db.select(sql); float score = 0; try { if (rst.next()) score = rst.getFloat(1); db.close(); } catch (SQLException e) { db.close(); return 0; } return score; } public int getCountByCourseID(String courseID) { sql = "select count(*) from selection where course_id='" + courseID + "' and status <5 group by course_id"; ResultSet rst = db.select(sql); int count = 0; try { if (rst.next()) count = rst.getInt(1); db.close(); } catch (SQLException e) { db.close(); return 0; } return count; } 学生信息管理系统——*** private ResultSet searchByCourseID(String target) { sql = "select * from selection where course_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByTeacherID(String target) { sql = "select * from selection where course_id in (select course_id from teach where teacher_id='" + target + "')"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByStudentID(String target) { sql = "select * from selection where student_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByStatus(String target) { sql = "select * from selection where status=" + this.stringToStatus(target); ResultSet rst = db.select(sql); return rst; } 7.3.8 授课事务 有关授课的事务包括根据教师号/课程号/课程名等条件进行添加、删除、修改、查询授课信息。具体实现代码如下: public boolean add(Teach t) { try { sql = "select * from teach where course_id='" + t.getCourseID() + "' and teacher_id='" + t.getTeacherID() + "'"; ResultSet rst = db.select(sql); if (rst.next()) return true; sql = "insert into teach values(?,?)"; PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, t.getCourseID()); ps.setString(2, t.getTeacherID()); 学生信息管理系统——*** ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean delete(String id) { sql = "delete from course where course_id=?"; try { PreparedStatement ps = db.getConnection().prepareStatement(sql); ps.setString(1, id); ps.executeUpdate(); sql = "delete from selection where course_id=?"; PreparedStatement ps2 = db.getConnection().prepareStatement(sql); ps2.setString(1, id); ps2.executeUpdate(); return true; } catch (SQLException e) { return false; } } public boolean update(String courseID, String teacherID) { PreparedStatement ps; sql = "update teach set teacher_id=? where course_id=?"; try { ps = db.getConnection().prepareStatement(sql); ps.setString(1, teacherID); ps.setString(2, courseID); ps.executeUpdate(); return true; } catch (SQLException e) { return false; } } public ResultSet getAll() { sql = "select * from teach"; ResultSet rst = db.select(sql); return rst; } 学生信息管理系统——*** public ResultSet getAllByTearcherID(String teacherID) { sql = "select course_id from teach where teacher_id='" + teacherID + "'"; ResultSet rst = db.select(sql); return rst; } public String getTeacherID(String courseID) { sql = "select teacher_id from teach where course_id='" + courseID + "' "; ResultSet rst = db.select(sql); String teacherID = ""; try { if (rst.next()) { teacherID = rst.getString(1).trim(); db.close(); return teacherID; } else return null; } catch (SQLException e) { e.printStackTrace(); return null; } } public String getCourseID(String teacherID) { sql = "select course_id from teach where teacher_id='" + teacherID + "' "; ResultSet rst = db.select(sql); String courseID = ""; try { rst.next(); courseID = rst.getString(1).trim(); } catch (SQLException e) { e.printStackTrace(); return null; } db.close(); return courseID; } public ResultSet search(String target, String method) { 学生信息管理系统——*** if (method.equals("course_id")) return searchByCourseID(target); else if (method.equals("teacher_id")) return searchByTeacherID(target); else return searchByName(target); } private ResultSet searchByCourseID(String target) { sql = "select * from teach where course_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByTeacherID(String target) { sql = "select * from teach where teacher_id='" + target + "'"; ResultSet rst = db.select(sql); return rst; } private ResultSet searchByName(String target) { sql = "select * from teach where course_id in (select course_id from course where name like '%" + target + "%')"; ResultSet rst = db.select(sql); return rst; } 学生信息管理系统——*** 八、测试和运行 1、登录时用户名或密码错误会出现提示。 2、查询课程时若未找到相应课程会有提示。 学生信息管理系统——*** 3、选定课程时会有相应提示。 4、注销课程时会有相应提示。 学生信息管理系统——*** 5、注销非选课阶段的课程时会有错误提示。 6、退出系统时会有提示。 学生信息管理系统——*** 7、教师修改课程信息时会有相应提示。 8、教师录入成绩时会有相应提示。 学生信息管理系统——*** 9、教师发布成绩时会有相应提示。 10、管理员添加查询修改删除学生信息时会有相应提示。 学生信息管理系统——*** 11、管理员添加查询修改删除课程信息时会有相应提示。 12、管理员查询添加选课信息、修改选课状态时会有相应提示。 学生信息管理系统——*** 13、管理员查询添加修改授课信息、专业信息、学院信息时会有相应提示。 14、管理员查询添加修改删除其他管理员信息及修改个人信息时会有相应提示。 学生信息管理系统——*** 九、总结 9.1 系统优点 1、软件功能齐全,在有限时间内将需求的功能完全实现。权限分配详细合理。学生、教师、管理员的功能特色鲜明设计合理,能够很好的满足实际操作需求。 2、界面清新大方,说明清晰,操作简单,容易上手。 3、数据库设计内容具体详细,条理清晰,关系明确,能够遵循数据库设计的准则来描述信息关系,可以稳定地为系统提供服务。 4、信息提示系统细致完善,对于用户可能发生的错误操作,给予错误信息提示。 9.2 系统不足 1、系统的稳定性不高,长时间的运行会导致程序的运行缓慢且影响软件的效率。 2、数据库的设计上仍然不尽如人意,某些信息的处理不够实际化。 9.3 系统改进 在表“选课”中加入“是否重修”一列,1表示重修,0表示非重修,以此来实现重修记录。 9.4 经验与收获 1、通过这次数据库课程设计,进一步了解了数据库内部的操作机制,熟练了自己在数据库编程方面的能力。 2、调试时可以用System.out.println输出变量的值以检验错误发生在什么地方,或者在某个语句下放入System.out.println(“············”)来检验程序是否执行到该语句。 3、写程序的时候不要只注重结果,更要注重过程,一个习惯早期容易形成,而要是到了后期就很难去改正,所以现在起就要有好习惯,要注重每一个小的细节。 学生信息管理系统——*** 附. 参考文献 [1] http://www.ahedu.cn 2006-5-24 17:26:54,《中学生成绩管理信息系统的设计》。 [2] 星尘工作室,《学生管理信息系统.NET(Smis.NET)开发文档》,2003。 [3] Abraham Silberschatz,Henry F.Korth,《数据库系统概念》,机械工业出版社,2008。 [4] 刘勇,周学军,《SQL Server 2000基础教程》,人民邮电出版社,2007。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ]
2 人已下载

下载文档

相关文档