数据库课程设计

更新时间:2024-05-23 01:21:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数据库原理与技术课程设计

题 目: 教务处管理系统

学生姓名: 秦健 学号: 20131401 学生姓名: 郑玉 学号: 20131409 学生姓名: 黄政斌 学号: 20132286 学生姓名: 张东东 学号: 20130534 学生姓名: 王弟凯 学号: 20132285 指导教师: 张 辉

所在单位: 西南科技大学理学院

完成日期 2015年12月28日

《数据库原理与技术课程设计》任务书

一、课程设计的目的

《数据库原理与技术课程设计》是信息与技术科学专业(本科)培养方案要求的重要实践性环节之一,是学习完《数据库原理与技术》、《C语言程序设计》以及《面向对象的程序设计》等专业课程后进行的一次综合实践练习。其目的在于:配合《数据库原理与技术》课程的教学,使学生能巩固和加深对数据库基础理论和基本知识的理解;掌握使用数据库进行软件设计的基本思想和方法;提高学生运用数据库理论解决实际问题的能力;培养学生调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。

二、课程设计的内容及要求

内容:用一种高级语言和当前流行的数据库管理系统相结合,完成一个小型管理系统的设计与开发。所设计的小型管理系统应使用数据库系统作为数据管理工具,包括基本的输入输出、查询、插入、删除等基本功能。根据课程设计2周时间的安排选择适当大小的设计课题,课题的选择可以是实际问题,也可以是虚构的问题。根据题目的基本需求,画出系统结构图,并对数据库进行详细设计,编写程序,同时写出关于本数据库管理系统的报告书。

要求:

(1) 要求学生按照《数据库原理与技术》、《C语言程序设计》以及《面向对象的程序设计》等课程相关知识以及《数据库原理与技术课程设计》教学大纲完成一个数据库设计,并撰写相应的课程设计报告。

(2)提交课程设计报告。

要求完成课程设计报告大约15页-20页,包括相应的设计文档、核心代码、测试过程分析与运行结果等。一组同学共同完成基本的分析与设计工作,另外每个人必须至少独立完成一个功能模块设计与实现,并写入课程设计报告中。

三、课程设计时间

课程设计时间为2周

四、课程设计分组

四人一组

五、课程设计的成果和形式

1.报告一篇

建议论文按下列的提纲书写 2.符合设计要求的数据库应用系统一个

指导教师签字:

年 月 日

目 录

1 系统需求分析 ........................................................

1.1 需求描述 ......................................................... 1.2 数据流图 ........................................................ 1.3 数据词典 ........................................................

2 数据库概念结构设计 .................................................

2.1 E-R图 ...........................................................

3 数据库逻辑结构设计 .................................................

3.1 初始关系模式 ..................................................... 3.2 规范化处理 .......................................................

4 数据库物理结构设计 .................................................

4.1 索引设计 .........................................................

5 数据库实现 ..........................................................

5.1 关键代码 .........................................................

6 应用程序设计部分 ...................................................

6.1 数据录入、修改、删除功能设计 .....................................

7 系统测试 ............................................................

7.1 功能设计 .........................................................

参考文献 ................................................................ 附录 ....................................................................

教务处管理系统分析

随着科学技术、管理方法的不断进步,传统的办公方式、方法和手段已经不能适应现代化管理的需要,作为培养高质量合格人才为宗旨的高等学校,总是走在科技的最前沿,教务管理的计算机化已成为高校管理现代化、决策科学化的一个重要环节。开发功能完善及安全可靠的管理系统可以大大提高学校资源的利用率,及时准确地获取需要的信息,充分发挥人员的工作潜力。本教务处管理系统可以从四个子系统对教务处信息进行管理,分别是学院管理系统,教师管理系统,辅导管理系统,学生管理系统,可分别对不同身份的登陆者,提供信息查询,信息更新等功能。

目的及意义

这次的课程设计是在学习完《数据库原理》基础上进行的一次系统性的训练,既是对所学知识的巩固,也是对自己综合运用所学知识解决实际问题的一次锻炼。教务处管理系统的主要目的是为了方便不同身份的登陆者对信息进行录入、修改、查询,提高学校的工作效率。这一系统的开发成功,解决了手写速度慢、容易出错的现状。学校作为一个独立的机构,各个方面的构成比较负责,本系统从不同身份登录者的角度,建立不同的子系统,共同构成了高校的教务管理系统,很大程度的提高了信息录儒,查询,更新等功能的一体化和共享。

系统需求分析

需求描述

学校作为一个独立的机构,信息量繁多,传统的人工录入等方式工作量大,容易出错,信息的传递过程缓慢,工作效率低,不同身份的人员之间信息之间的共享存在很大的问题。学校的各个机构相互独立却又相互联系,这就需要一个比较复杂的教务处管理系统,将各个机构联系起来,实现信息的查询,更新等功能。本教务处管理系统由用户登录界面及与之相对应的四个子系统界面构成,分别是学院管理系统、教师管理系统、辅导员管理系统和学生管理系统。比如管理者可以登录相应的账号,实现管理员信息的修改,以及学院和专业信息的管理。各个系统之间相互关联,功能层层递进,学生管理系统所实现的功能是最多也是最繁杂的。教务管理实现计算机化,使不同身份的登陆者在一个平台上实现信息的查询更新等功能,能够使学校的工作提升一个大台阶。

功能设置

本教务处管理系统,从不同登陆者的角度,由四个子系统构成和一个登陆界面构成,为管理员,教师,辅导员,学生提供了不同的信息操作权限,点击注销按钮均可返回界面上一状态,具体为

(一)登陆界面:

登录功能:登录界面上显示名称为教务管理系统,登录框中人员选项下拉框中可选择(1.管理员 2.教师 3.辅导员4.学生),输入登录账号及密码点击登陆进入到相应的子系统页面分别为(管理员—>学院管理系统(系统界面1), 教师—>教师管理系统(系统界面2),辅导员—>辅导管理系统(系统界面3),学生—>学生管理系统(系统界面4))。或者退出当前页面,出现特殊情况,会弹出相应的错误提示框。若教务处中无相关账号则输出“教务处系统中无相关账号!”,若账号和密码不对应则输出“密码错误!”

(二)学院管理系统:初始状态显示登入的管理者基本信息(管理员号,管理员姓名,

管理员性别,管理员年龄,管理员联系方式,管理学院号)。

查询功能:管理学院时,根据学院信息表,显示该管理员管理学院的学院编号,学院名,教师人数,辅导员人数,学生人数。管理专业时,根据专业信息表,显示该管理学院的全部专业专业编号,专业名,专业人数,专业班级数,学院名。

修改功能:管理员只能更改自己的基本信息,提交时,检查输入是否有误,若有错则弹出错误对话框,指明何处有误;若无错则更新后退出更改界面,并自动刷新系统该管理员基本信息。

(三)教师管理系统:初始状态显示登入的教师基本信息(教师号,教师姓名,教师性别,教师年龄,教师联系方式,所在学院号)。

查询功能:可实现的查询功能分别是教授课程、授课成绩、学生查询。教授课程查询时,根据选课信息表显示该教师授课的课程号,课程名,课程学时,课程学分,学院号,授课教师号。查询授课成绩时,根据选课信息表显示该教师授课的全部学生的学生号,学生名,学生专业,课程名,课程成绩按照选课课程分组显示。进行学生查询时,可由学生姓名查找到该学生的学号、学生专业、选课课程,课程成绩,若无该学生或者该生并未选择该教师课程,则弹出提示框“未找到该生!”

修改功能:可更改该教师基本信息,实现选定学生的成绩修改

(四)辅导管理系统:初始状态显示该辅导员的辅导员号,辅导员姓名,辅导员性别,

辅导员年龄,辅导员联系方式,所在院系号,管理专业号。

查询功能:查询学生信息可分别用学生姓名和班级进行查询(只能查询该辅导员权限以内的信息,即查询权限该辅导员所管理的学院和专业。

删除功能:实现该辅导员所管理的学院和专业的学生移除,并删除移除学生的基本信息并更新学生信息表。

添加功能:实现新生录入,添加学生基本信息(学生号,学生姓名,学生性别,学生年龄,学生政治面貌,学生籍贯,学生出生年月,所在院系,就读专业,学生班级,学生联系方式,身份证号,银行卡号,宿舍号,登录密码)。并查看所在院系、和就读专业是否为该辅导员所在院系和管理专业。

(五)学生管理系统:初始状态显示该学生的基本信息(学生号,学生姓名,学生性

别,学生年龄,学生政治面貌,学生籍贯,学生出生年月,所在院系,就读专业,学生班级,学生联系方式,身份证号,银行卡号,宿舍号,选课数,修读学分(限制选课数在10门以内,对于课程分数低于60的课程不计入修读学分)

查询功能:可实现个人课程成绩和课程绩点的查询。 添加功能:可添加选课,由复选框列举出所有课程名,下拉表中包含该课程的所有授课教师名,对该生已选课程复选框失效或不可见,确认选课时,检查该生选课数是否达到了选课数上限,若是,则弹出错误提示框“选修课数超限!”若满足条件,显示该生选择课程信息课程号,课程名,课程学时,课程学分,学院号,授课教师号。

数据需求

管理者信息:管理员号,管理员姓名,管理员性别,管理员年龄,管理员联系方式,管理学院号。 教师信息:教师号,教师姓名,教师性别,教师年龄,教师联系方式,所在学院号。 辅导员信息:辅导员号,辅导员姓名,辅导员性别,辅导员年龄,辅导员联系方式,所在院系号,管理专业号。

学生信息:学生号,学生姓名,学生性别,学生年龄,学生政治面貌,学生籍贯,学生出生年月,所在院系,就读专业,学生班级,学生联系方式,身份证号,银行卡号,宿舍号,选课数,修读学分,课程成绩,课程绩点。

数据流图

数据流图是描述系统内部处理流程、用于表达软件系统需求模型的一种图形工具,这种表示法中用椭圆表示数据加工,用箭头表示数据流。本教务处管理系统的数据流图如下: 1. 登录界面数据流图

2. 管理员界面数据流图

3. 教师界面数据流图

4. 辅导员界面数据流图

5. 学生界面数据流图

数据字典

数据流图是结构化分析中不可缺少的有力工具,它描述了系统的分解,即系统由哪些部分组成,各部分之间有什么联系等。但是,它还不能完整地表达一个系统的全部逻辑特征,特别是有关数据的详细内容。因此,仅仅一套数据流图并不能构成系统说明书,只有对图中出现的每一个成分都给出详细定义以之后,才能全面地描述一个系统。对数据流、数据存储和数据处理的详细描述,需要用数据字典(DD)。它包括数据项、数据结构、数据流、数据存储和处理过程的详细条目。数据字典中把数据的最小单位定义为数据项,而若干数据项可以组成一个数据结构。数据字典是通过以数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。

1.

(1)模块说明

模块名称:用户登陆系统 输入数据流:用户登陆信息

输出数据流:登陆成功|登陆失败

简要描述:主要负责不同用户的登陆,对其登陆信息进行验证。且不同用户具有不同的操作权限。

(2)主要数据流定义 数据流名称:登陆信息 位置:用户 登陆处理

定义:登陆信息=登录身份+登录账号+登录密码

说明:对于不同权限的用户具有不同的操作权,输入正确的用户名及密码,才可获得一定的操作权。

数据流名称:验证信息 位置:登陆处理 用户

定义:验证信息=『登陆成功|密码错误』

说明:告知用户登陆的情况,若成功,则进入操作界面。 2.

(1)模块说明

模块名称:学院管理系统 输入数据流:管理员信息 输出数据流:验证信息

简要描述:主要负责管理学院、管理专业,更改管理员信息。

(2)主要数据流定义

数据流名称:管理员基本信息 位置:用户 信息处理 定义:管理员基本信息=管理员号+管理员姓名+管理员性别+管理员年龄+管理员联系方式+管理学院号

说明:对不同管理员的信息修改 数据流名称:验证信息 位置:信息处理 用户

定义:验证信息=『修改成功|修改失败』

说明:只有输入了正确的管理员信息才能实现修改,否则提出验证提示。 3.

(1)模块说明

模块名称:教师管理系统 输入数据流:教师基本信息 输出数据流:验证信息

简要描述:主要查询教授课程、授课成绩、学生信息,更改学生成绩。 (2)主要数据流定义

数据流名称:教师基本信息 位置:用户 信息处理

定义:教师基本信息=教师号+教师姓名+教师性别+教师年龄+教师联系方式+所在学院号 说明:对不同教师的信息修改。 数据流名称:验证信息 位置:信息处理 用户

定义:验证信息=『修改成功|修改失败』

说明:只有输入了正确的教师信息才能实现修改,否则提出验证提示。 4.

(1)模块说明

模块名称:辅导员管理系统 输入数据流:辅导员信息 输出数据流:验证信息

简要描述:主要负责学生管理,新生的录入和学生的转专业,同时还能查询学生信息。 (2)主要数据流定义

数据流名称:辅导员基本信息 位置:用户 信息处理 定义:辅导员基本信息=辅导员号+辅导员姓名+辅导员性别+辅导员年龄+辅导员联系方式+所在院系号+管理专业号

说明:对不同辅导员信息的修改。 数据流名称:验证信息 位置:信息处理 用户

定义:验证信息=『修改成功|修改失败』

说明:只有输入了正确的辅导员信息才能实现修改,否则提出验证提示。 5.

(1)模块说明

模块名称:学生管理系统 输入数据流:学生信息 输出数据流:验证信息

简要描述:能够更新学生信息,选修所学课程,查询课程成绩和学分绩点 (2)主要数据流定义

数据流名称:学生基本信息 位置:用户 信息处理

定义:学生基本信息=学生号+学生姓名+学生性别+学生年龄+学生政治面貌+学生籍贯+

学生出生年月+所在院系+就读专业+学生班级+学生联系方式+身份证号+银行卡号+宿舍号+选课数+修读学分

说明:对于不同学生信息的修改。 数据流名称:验证信息 位置:信息处理 用户

定义:验证信息=『修改成功|修改失败』

说明:只有输入了正确的学生信息才能实现修改,否则提出验证提示。

数据库概念结构设计

概念模型

概念结构设计就是从现实概念中抽象出概念模型,即对信息世界建模,所以概念模型应该能方便、准确的表示信息世界中的常用概念。概念模型的表示方法最著名的是实体—联系方法(Entity-Relationship Approach),在该方法中实体型用矩形表示,矩形框内写明实体名;属性用椭圆表示,并用无向边将其与相应的实体连接起来;联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁表上联系的类型(1:1,1:n或n:m)。

设计概念结构通常有四类方法:自顶向下,自底向上,逐渐扩张以及混合策略。本学生信息管理系统采用的是自底向上的方法。即首先定义全局的概念结构的框架,然后逐步细化。根据自顶向下地进行需求分析然后再自底向上地进行概念设计。

E-R图表示概念模型

合成E-R图(分E-R图详见附录)

数据库逻辑结构设计

概念结构是独立于任何一种数据模型的信息结构。逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。

初始关系模式――― E-R 图向关系模型的转换

将E-R图转换为关系模型实际上就是将实体型、实体的属性和实体型之间的联系转换为关系模式,这种转换一般遵循的原则为:一个实体转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。在二元联系中,数据模型实体间的联系有一对一(1:1)、一对多(1:n)和多对多(m:n)三种。

两实体的联系为1:1,可将联系与任意一端对应的关系模式合并。具体做法是:将两个实体各用一个关系表示,然后将其中一个关系的关键字和联系的属性加入另一个关系的属性。一个关系的关键字存储在另一个关系中时,称为另一个关系的外键。

一个1:n联系可以与“1”端对应的关系模式合并。首先,一个实体用1个关系表示,然后将联系的属性和“n”端对应关系的键置于“1”端对应的关系中。

一个m:n转换为一个关系模式。多对多联系不能与任一端实体对应的关系模式合并,否则会引起插入异常和修改异常。联系本身的属性以及与该联系相连的实体的键都将转换为该关系的属性,关系的键是各实体键的组合。

I将图教务管理系统局部概念结E-R图转化成关系模型。

①登录表(登录身份,登录帐号,登录密码) 主键:登录帐号 外键:无

②管理员信息表(管理员号,管理员姓名,管理员性别,管理员年龄,管理员联系方式,管理学院号,登录密码) 主键:管理员号 外键:管理学院号

③学院信息表(学院编号,学院名,教师人数,辅导员人数,学生人数) 主键: 学院编号 外键:无

④专业信息表(专业编号,专业名,专业人数,专业班级数,学院号,学院名) 主键:专业编号 外键:学院号

⑤教师信息表(教师号,教师姓名,教师性别,教师年龄,教师联系方式,所在学院号) 主键:教师号 外键:学院号

⑥选课信息表(学生号,学生名,学生专业,课程号,课程名,课程学时,课程学分,授课教师号,课程成绩) 主键:学生号,课程号,授课教师号 外键:课程名

⑦辅导员信息表(辅导员号,辅导员姓名,辅导员性别,辅导员年龄,辅导员联系方式,所在院系号,管理专业号,登录密码) 主键:辅导员号 外键:学院号,管理专业号

⑧学生信息表(学生号,学生姓名,学生性别,学生年龄,学生政治面貌,学生籍贯,学生出生年月,所在院系,就读专业,学生班级,学生联系方式,身份证号,银行卡号,宿舍号,选课数,修读学分,学习绩点,登录密码) 主键:学号 外键:无

⑨课程信息表(课程号,课程名,课程学时,课程学分,学院号,授课教师号) 主键: 课程号, 授课教师号 外键:学院号

II各表之间的关系

管理员-1-管理-1-学院 学院-1-设置-n-专业 学院-1-配备-n-教师 教师-m-教授-n-课程 辅导员-1-管理-1-专业 专业-1-包含-n-班级

班级-1-拥有-n-学生 学生-1-选修-n-课程

规范化处理―――数据模型的优化

数据库德逻辑结构设计的结果不是唯一的。为了提高数据库应用系统的性能,还应该根据应用需要适当的修改,调整关系模式,这就是数据模型的优化。规范化理论为数据库设计人员判断关系模式的优劣提供了理论标准,可用来预测模式可能出现的问题,使数据库设计工作有了严格的理论基础。关系数据模型的优化通常以规范化理论为指导,方法为:

(1)确定数据依赖。分别写出每个关系内部属性的以及不同关系模式属性间的数据依赖。根据需求分析可知(列出部分函数依赖):

①登录表的数据依赖:{登录帐号->登录身份,登录帐号->登录名} 登录表属于BCNF

教师信息表和课程信息表属于BCNF,其数据依赖关系类似在此不再累述。

②学院信息表的数据依赖:{学院编号<->学院名,学院编号->教师人数,学院编号->辅导员人数,学院编号->学生人数}

学院信息表属于BCNF

专业信息表和辅导员信息表均也属于BCNF,其数据依赖关系类似在此不再累述。

③管理员信息表的数据依赖:{管理员号<->学院号,管理员号->管理员姓名,管理员号->管理员性别,管理员号->管理员年龄,管理员号->联系方式,管理员号->登录密码}

管理员信息表属于BCNF

学生信息表属于BCNF,其数据依赖关系类似在此不再累述。

④选课信息表的数据依赖:{学生号->学生名, 学生号->学生专业,课程号->课程名, 课程号->课程学时, 课程号->课程学分, 学生号,课程号->授课教师号, 学生号,课程号,授课教师号->课程成绩

}

选课信息表属于1NF

(2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。 (3)按照数据依赖的理论对关系模式逐一分析,考察是否存在部分函数依赖,传递函数依赖,根据各个函数依赖的依赖集可知各个关系模式没有部分函数依赖和传递函数依赖所以所有的关系模式都是属于3NF。不需要进一步,进行模式分解或合并。

此处仅需对选课信息表做向更高范式的转化,选课信息表其实就是综合学生信息表、课程表两表加上特有的属性”课程成绩”构成,所以可利用授课教师号和课程成绩将选课课程表划分为学生课程表和选修课程成绩表。

根据总体结构图设计各表的结构(这里仅列出选课信息表,其余表格详见附录): 1. 选课信息表

数据库物理结构设计

索引设计

数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法。所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。

为了设计数据库的物理结构,设计人员必须充分了解所用DBMS的内部特征;充分了解数据系统的实际应用环境,特别是数据应用处理的频率和响应时间的要求;充分了解外存储设备的特性。数据库的物理结构设计大致包括:确定数据的存取方法、确定数据的存储结构。

物理结构设计阶段实现的是数据库系统的内模式,它的质量直接决定了整个系统的性能。因此在确定数据库的存储结构和存取方法之前,对数据库系统所支持的事务要进行仔细分析,获得优化数据库物理设计的参数。

在创建索引的时候,一般遵循以下的一些经验性原则: l 在经常需要搜索的列上建立索引。 l 在主关键字上建立索引。

l 在经常用于连接的列上建立索引,即在外键上建立索引。

l 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。 l 在经常需要排序的列上建立索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询的时间。

l 在经常成为查询条件的列上建立索引。也就是说,在经常使用在WHERE子句中的列上面建立索引。

考虑到学生信息表和选课信息表经常用于查询、更新、添加和删除功能所以在学生信息表上建立学生号索引,在选修信息表上建立学生号、课程号、授课教师号索引

1.学生号索引:Create unique index student_sno on student(sno); 2.选课表索引:create index sc_sct on sc(sno,courseid,teacherid);

数据库实现

关键代码

Mysql核心代码:

Create database management-system;//创建数据库 Use management-system; 一.创建表

1.Create table student(Sno Char(8) primary key,Sname Char(8) Not null,Ssex Char(2) CHECK(Ssex in('男','女')),Sage Int CHECK(Sage>=18 AND Sage<=70),Spolitical Char(4) CHECK(Spolitical in('团员','党员','群众')),Sorigin Char(30) Not null,Sbirth Char(20) Not null,sdeptid char(10) not null,sdeptname Char(20) Not null,majorid char(10) not null,majorname Char(20) Not null,Sclassname Char(30) Not null,Sphone Char(11) Not null,Sidcard Char(20) Not null,Sbankcardid Char(30) Not null,Sdomitoryid Char(20) Not null,Scoursenum Int CHECK(Scoursenum>=0 AND Scoursenum<=10),Scredit float CHECK(Scredit>0),Sgrade NUMERIC(4,3) CHECK(Sgrade>=0 AND Sgrade<=5),Spassword Char(10) Not null,FOREIGN KEY (sdeptid) REFERENCES Sdept(sdeptid),FOREIGN KEY (majorid) REFERENCES Major(majorid));//创建学生表 Desc student;//查看学生表

Insert into student values('20131001','刘鹏','男',22,'团员','四川省成都市','19930101','01','理学院','1','信息与计算科学','1301','18380581546','460033199301012013','88888888','A621',7,'110',3.124,'1993'),

('20131002','张飞','男',22,'团员','海南省三亚市','19940201','01','理学院','1','信息与计算科学','1301','18380581888','460033199402012013','16688888','A621',6,'106',3.323,'1893'),

('20131003','陈浩南','男',22,'团员','海南省三亚市','19940101','02','计科学院','6','软件工程','1301','18380588888','460033199301012014','16888888','A321',6,'106',4.124,'1993'),

('20131004','赵斌','男',21,'团员','安徽芜湖','19950201','01','理学院','1','信息与计算科学','1301','18386581888','460044199502012013','16686888','A622',4,'110',2.323,'1893'),

('20131005','马超','男',22,'团员','四川绵阳','19941201','01','理学院','1','信息与计算科学','1301','18381661888','510033199412012013','16684588','A622',6,'108',3.563,'1893');

二.操作数据库 1.查询功能:

查看管理员信息:select Managerid ,Mname ,Msex ,Mage,Mphone ,sdeptid

From Manager;

查看学生信息:select * from student ; 2.添加功能:

添加学生信息:Insert into student values('20131009','关羽','男',22,'团员','四川省成都市','19951101','01','理学院','1','信息与计算科学','1301','18381661646','510033199511012013','44448888','A621',0,'0',0,'1993'); 查看插入的学生是否为辅导员管理的学生:

Select student.sdeptid,student.majorid,assistant.sdeptid,assistant.majorid From student,assistant

Where student.sdeptid=assistant.sdeptid and sno=?20131009?;

3.删除功能:

删除学生信息:delete from student where sno=?20131009?; 4.修改功能:

修改学分:(1).查看修改前学分:select scredit from student where sno=?20131002?;

(2).学分修改:

update student,sc,course

Set student.scredit=student.scredit+course.cousecredit

Where student.sno=sc.sno and sc.courseid=course.courseid and coursegrade>=60 and course.coursename=?随机过程?;

(3).查看修改后的学分:select scredit from student where sno=?20131002?;

修改绩点:(1).查看修改前绩点:select sgrade from student where sno=?20131002?;

(2).绩点修改:update student,sc,course

Set

student.sgrade=(student.scredit*student.sgrade+course.coursecredit*(coursegrade -50)/10)/(student.scredit+course.coursecredit)

Where student.sno=sc.sno and sc.courseid=course.courseid and coursegrade>=60 and course.coursename=?随机过程?;

(3).查看修改后绩点:select sgrade from student where sno=?20131002?;

5.特色功能 转专业: (1).查看转专业前的专业:select majorname from student where sno=?20131009?;

(2).专业修改:update student

Set majorname=(select majorname from major where majorid=?6?),sdeptname=(select sdeptname from major where majorid=?6?)

Where sno=?20131009?;

(3)查看转专业后的专业:select majorname from student where sno=?20131009?; (4)修改学院人数:update sdept,major

Set studentnum=studentnum-1

Where major.sdeptname=sdept.sdeptname and

majorid=(select majorid from student,major

Where student.majorname=major.majorname );

学生选课: (1).显示课程列表:select * from course;

(2).课程数:select count(courseid) from course;

(3).课程的所有老师:select teacherid,tname from teacher,course where teacher.teacherid=course.teacherid coursename=?近世代数?;

(4).显示该生选择选课信息:

Select * from course where coursename=?近世代数?; (5).更新学生选课数:update student,log_table

Set scoursenum=scoursenum+1

Where student.sno=log_table.username;

(6).更新选课表:Insert into SC values('20131001','刘鹏','信息与计算科学','003','数学分析',64,6,'100',90); 三.更改数据库

更改学生信息:update student,log_table

Set sname=?刘备?,ssex=?男?,sage=?21?,spolitical=?团员?,sorigin=?海南海口?,sbirth=?19960312?,sphone=?19880584459?,sidcard=?555451216565656562?,sbankcardid=?5555555555?,log_table.password=student.spassword=?1987? Where sno=?20131002?;

应用程序设计部分数据库实现

MFC核心代码:

一.主程序

// Registry Management System.cpp : Defines the class behaviors for the application. //整个应用程序app的源文件,也就相当于main函数所在的文件,程序从这里开始执行也从这里执行结束

#include \

#include \#include \#include \#include \#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CRegistryManagementSystemApp

BEGIN_MESSAGE_MAP(CRegistryManagementSystemApp, CWinApp) //{{AFX_MSG_MAP(CRegistryManagementSystemApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG

ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CRegistryManagementSystemApp construction

CRegistryManagementSystemApp::CRegistryManagementSystemApp() {

// TODO: add construction code here,

// Place all significant initialization in InitInstance }

/////////////////////////////////////////////////////////////////////////////

// The one and only CRegistryManagementSystemApp object

CRegistryManagementSystemApp theApp; CString Toperator; Log_Table logtable; Sdept_Table sdepttable; Major_Table majortable;

Manager_Table managertable; Teacher_Table teachertable; Assistant_Table assistanttable; Student_Table studenttable; Course_Table coursetable;

SC_Table sctables; vector ids; double upgrade; sttable addstuinfo;

///////////////////////////////////////////////////////////////////////////// // CRegistryManagementSystemApp initialization

BOOL CRegistryManagementSystemApp::InitInstance() {

AfxEnableControlContainer();

// Standard initialization

// If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need.

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL #else

Enable3dControlsStatic(); // Call this when linking to MFC statically #endif

CRegistryManagementSystemDlg dlg;//主对话框的生成

//m_pMainWnd = &dlg;//m_pMainWnd负责对主对话框操作完毕(domodal)后,停止所有线程(即domodal后面代码),如果需要执行后续代码则需要注释该语句

int nResponse = dlg.DoModal();//主对话框的模式显示,所有对话框均可使用Cdiag::ONOK()或者Cdiag::ONCANCEL()摧毁窗口

//摧毁窗口后的返回值为IDOK或者IDCANCEL(也就是确认信息还是取消信息)

//其实所有的非主对话框的操作以及各种显示均是嵌套在主对话框操作函数中执行的

if (nResponse == IDOK)//若注释m_pMainWnd该行语句,则可以对主对话框结束(退出)后到应用程序结束前进行处理

{ // TODO: Place code here to handle when the dialog is // dismissed with OK }

else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel AfxMessageBox(CString(\感谢您的使用\TION); }

// Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; }

二.ODBC连接

//在文档类中加入 //CDatabase类对象 CDatabase m_pdatabase;

//连接对象到一个数据源(没有密码),ODBC连接对话框将是中隐藏 m_pdatabase.Open(_T(“students”), FALSE, FALSE, _T(“ODBC; UID = Admin”)); //或者也可以显示ODBC对话框,请用户提供连接信息 m_pdatabase.Open(NULL); CDatabase m_pdatabase;

m_pdatabase.Open(_T(“students”), FALSE, FALSE, _T(“ODBC; UID=Admin”)); CRecordset Sample(&m_pdatabase);

Sample.Open(CRecordset::dynaset, _T(“Select name from students”));

三.插入功能

void CSampleView::OnAdd() {

//添加一条新记录 m_pSet->AddNew();

//对记录集中的m_id、m_name、m_department、m_age等赋值 m_pSet->m_id = “1009”; m_pSet->m_name = “Jack”; m_pSet->m_department = “3”; m_pSet->m_age = “20”; m_pSet->m_comment = “good”; //更新记录集,将新记录存入数据源 m_pSet->Update();

//刷新记录集,并使记录集指针回到第一条记录 }

四.删除功能

m_pSet->Requery();

void CSampleView::OnDelete() {

//删除当前记录

}

m_pSet->Delete(); //刷新记录集 m_pSet->Requery();

五.更改功能

void CSampleView::OnEdit() {

m_pSet->Edit();

m_pSet->m_id = m_newid; m_pSet->m_name = m_newname;

m_pSet->m_department = m_newdepartment; m_pSet->m_age = m_newage;

m_pSet->m_comment = m_newcomment; m_pSet->Update(); }

m_pSet->Open(); m_pSet->AddNew();

m_database.ExecuteSQL(“insert into class VALUES(?006?,?Mary?,?19?,?FEMALE?)”); m_pSet.Update();

m_pSet->Edit();

m_database.ExecuteSQL(“Delete from class WHERE Name = ?Mary?”); m_pSet.Update();

六.查询功能

m_pSet->Requery();

CString age1; CString comment1; age1 = _T(“”); comment = _T(“”);

pFX->SetFieldType(CFieldExchange::param); pFX->Text(pFX, _T(“[age]”), age1);

pFX->Text(pFX, _T(“[comment]”), comment1); m_pSet->m_strFilter = “age= ? AND comment = ?”; m_pSet->age = “21”; m_pSet->comment = “good”; m_pSet->Requery();

void CSampleView::OnInitialUpdate()

{ //为m_pSet赋予文档类下的记录集对象的指针 }

if(!m_pSet->IsOpen()) //用IsOpen函数检测记录集是否打开

m_pSet->Open();

m_pSet = &GetDocument()->m_sampleSet; CRecordView::OnInitialUpdate(); ResizeParentToFit();

m_pSet->MoveFirst(); while(!m_pSet->IsEOF()) { }

m_pSet->MoveFirst(); //遍历完成后,使记录集指针指向第一条记录

m_list.AddString(m_pSet->m_name); m_pSet->MoveNext();

系统测试

一.登录界面

登录功能: 1.用户登录

选择登录身份,输入登录账号与密码

点击登入

输入错误账号或密码并点击登入

点击退出按钮

二.学院管理系统

查询功能:

1.查询管理学院信息

点击管理学院信息按钮

2.查询学院专业信息

点击管理专业信息按钮

修改功能:

1.修改个人信息

输入更改信息并点击修改按钮

点击清空按钮

点击注销按钮

三.教师管理系统

查询功能:

1.查询教授课程信息

点击教授课程信息按钮

2.查询授课学生成绩

输入学生号点击查询信息按钮

修改功能:

1.修改个人信息

输入更改信息并点击修改按钮

2.录入学生成绩

选择已有成绩学生信息并点击录入成绩按钮

选择未有成绩学生信息并点击录入成绩按钮

选择旋转按钮调整分数

选择复选框可调整分数变动步长

录入完成分数后点击确定按钮返回教师界面

登录相应学生管理系统,该生成绩已被录入

(但是由于未及格所以修读学分和个人绩点并未改变)

选择另一学生对成绩进行录入

另一学生成绩修改前与成绩录入后(学分和绩点变化)

四.辅导员管理系统

查询功能:

1.查询学生信息

点击查询学生信息按钮

添加功能:

1.插入学生信息

点击查录入新生按钮

输入不属于该管理员管理学院学生信息并点击确定按钮

输入学生学院信息中无此专业并点击确定按钮

输入正确学生信息并点击确定按钮

被录入的新生可登陆学生管理系统

删除功能:

1.删除学生信息

选择学生信息并点击去除学籍按钮

修改功能: 1.学生转专业

输入正确学生号并点击转入按钮

录入一个新生,删去一个专业学生并转走一个专业学生

相关学院和专业人数减少1

五.学生管理系统

查询功能:

1.查询课程成绩

点击课程成绩按钮

2.查询个人绩点

点击个人绩点按钮

特色功能: 1.选课

点击可选课程按钮并选课

点击选修按钮

(选课数也相应修改,课程成绩为-1代表未录入成绩)

课程设计总结: 设计特点 本次课程设计参照了学校教务处管理系统的一些基本功能,利用模块化的思想,将大系统划分为各个独立的子系统,通过某些功能设计实现子系统之间的连接。除完成基本的添加、删除、修改与查询功能之外,还额外添加了许多其他功能,例如转专业,绩点计算,选课等丰富有趣的功能,实现了不同系统之间的数据连接与信息交流。本次设计界面友善,实现了多个窗口的调用与转换,不仅如此,还用到了各式各样的标准控件,增加了用户操作感,而又不影响后台数据库的稳定,实现了前台页面操作,后台系统响应的结合。本次设计的教务处管理系统充分利用了多个表实现数据库的不同类数据存储,并且利用数据库系统概论的知识消除冗余,进行规范化处理和完整性约束,还设置了登录身份保障了数据库的安全。本次课程设计利用了MFC中ODBC实现与数据库(数据源)的连接,利用MFC消息映射函数和消息响应机制的知识将mysql语言和C语言结合编程,最终实现了界面化的运行程序。 设计不足 本次课程设计存在一些问题,例如对于某些功能,如成绩修改功能设置不完善,教师只能对学生的成绩进行一次性修改以方便对修读学分和绩点的计算功能。另外本次教务处系统中对于某些子界面一些重复性的功能进行了适当的删除(例如辅导员管理系统和学生管理系统的用户信息修改功能的重复)使得整体功能不完整。 设计拓展 本次教务处管理系统还可增加银行卡余额查询、学生卡转账以及留言板等功能,还可加入实验室平台系统丰富用户与用户之间的通讯功能。 设计感悟 本次课程设计虽然比较复杂耗时,但是也让我们收获良多,一方面巩固了数据库的知识,另一方面又自学了Windows界面MFC编程和ODBC的知识,使得我们获得匪浅。不过,我们还应该倍加奋斗,自学攻艰,充分将所学习的理论知识用于实践,创造价值! 指导教师评语: 签名: 2014年12 月 19日

参考文献

[1] 萨师煊,王珊 数据库系统概论 北京:高等教育出版社,2006 [2] MFC标准控件使用 http://wenku.http://www.wodefanwen.com//link? url=1mbIfq_G7Ts

4yD4ITxYnERrOmaA_LTgS0BO4c1uzBAn9FoGRnKTU1iC RJbYf3V64yU0FTTz2gwAfoniFVjqmft7XcPhAx3Pjbv_2yA11Ksm

[3] 使用MFC_ODBC访问数据库http://www.docin.com/p-290541412.html

附录

㈠分E-R图

1. 登录系统ER图

2. 管理员ER图

3. 学院ER图

4. 教师ER图

5. 辅导员ER图

6. 学生ER图

7. 课程ER图

本文来源:https://www.bwwdw.com/article/vrt7.html

Top