数据库学生成绩管理系统课程设计报告Word文件下载.docx
《数据库学生成绩管理系统课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据库学生成绩管理系统课程设计报告Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
Sex
Birthday
numeric
可为空
Address
Grade
Po;
itic
Cuture
Tel
Nchar
Cource
Cno
Score
User_name
20
User_Pswd
User_Type
int
(3)分析关系模式
对于关系模式Student(Sno|Sname|Sex|Age|Address|Grade|class|Tel|Politic|Cutui)假定姓名也具有唯一性,那么Student
就有两个码,这两个码都由单个属性组成,彼此不相交。
其它属性不存在对码的传递依赖与部分依赖,又因为Student中除学号、姓名外没有其它的因素,所以Student属于BCNF。
对
于关系模式Cource(|Sno|Cno|Sco0有两个码,这两个码都由单个属性组成,彼此不相交,其它属性不存在对码的传递依赖与部分依赖,又因为成绩中除学号、课程号外没有其它的决定因素,所以成绩属于BCNF。
对于关系模式User(|UserName|UserType|UserPswd|中,它只有一个码,这里没有任何属性对课程号部分依赖或传递依赖,同时用户名是唯一的决定因素,所以课程属于BCNF。
它和学生信息和成绩没有直接的联系,因此它是一张单独的表。
3.SQL语句
3.1创建表
学生表
createtableStudent
(
Snonchar(10)primarykey,
Snamenchar(10)notnull
Sexnchar(10)notnull
Agenumeric(10)
Addressnchar(10)
Classnchar(10)notnull
Gradenchar(10)notnull
Telnchar(10)notnull
Politicnchar(10)notnull
Cuturenchar(10)notnull)
成绩表
createtableExam
Snonchar(10)primarykey//主键约束
Cnonchar(10)Notnull
Scorenchar(10)foreignkey(Cno)referencesCourse//外键约束check(Score>
=0)//完整性约束)
用户表
createtableTeacher
Usernamenchar(10)notnull
UserPswdnchar(10)notnull
UserTypenchar(10)notnull)
3.2数据初始化将学生类别加入表Student中
insertintoStudent
values('
000'
'
张明'
M,'
'
哈'
尔滨'
计科一班'
大一'
,'
15880000'
'
无'
'
群众'
)
values('
001'
'
李三'
M'
长,'
春'
计科二班'
大三'
'
15233000'
.'
002'
王强'
哈,'
软件二班'
大二'
15850040'
)
003'
张雪'
F'
软件一班'
大一'
156809802'
群众’)
insertintoStudent
004'
李力'
太连'
15980000'
无'
insertintoStudentvalues('
005'
张小'
哈尔滨'
软件三班'
15884444'
5no
Shame
分
Age
Class
►
张明
M
17
哈尔填
软件一班
大一
001
李三
22
长春
软件二班
大三
002
王强
昭尔滨
大二
003
张雪
F
IS
004
李力
25
犬连
005
张小
15
跆尔滨
软件三班
丈一
NULL
ML
将考试类别加入Cource表中
insertintoCourcevalues('
000'
A-123'
85'
)insertintoCourcevalues('
001'
B-123'
77'
002'
C-123'
91'
003'
80'
004'
75'
)insertintoCource
005'
89'
000
A-123
85
8-123
77
C-123
91
A-L23
SO
B-123
7S
wsz
将课程加入User表中
insertintoUser
阿生'
921'
O'
insertintoUser
光光'
111'
1'
甜甜'
索引的使用
usestudent
createuniquenonclusteredindexindex_snoonStudent(sno)
触发器
createtriggerreminder
onstudent
afterinsert,update
asraiserror('
你在插入或修改学生的数据'
16,10)
droptriggerreminder'
select*
fromStudentwheresno=002
」结果|消扈
存储过程
createprocedureusp_getStudent
@namenchar(40)as
select*fromStudentwhereSname=@name
执行存储过程
tl26.studenl:
-SQLQueryS.sql*
executeusp_getStudent
表-dbo.Student
一i结果|j消息|
Sno1Sname
Sen
Address|Class
1
i0001
■1・1■EB1■■1
哙尔滨软件一班
4、SQ与C++吉合(可视化的界面管理)
1、准备创建好的数据库,创建数据源
在创建数据库的应用程序之前,必须有一个可供应用程序使用的数据库。
2、
(1)建立了数据库之后,必须配备ODBC数据源,使其指向刚刚建立的数据库。
选
择“控制面板”中“管理工具”下的“数据源(ODBC)”项。
双击ODBC图标,弹出“ODBC数据源管理器”对话框。
在这里用户可以设置ODBC数据源的一些信息,其中的“用户DSN”选项卡是用户定义的在本地计算机上使用的数据源名(DSN),
(2)为新的数据源选择数据库驱动程序。
由于使用的是Access数据库,所以选择DriverdoMicrosoftAccess(*mdb)选项,并单击“完成”按钮。
(3)“ODBCMicrosoftAccess安装”对话框中,为该数据源起一
个简短的名称。
本例为TeacherDB,可以在下一个编辑框中输入对该数据库的说明。
(4)指定数据库的位置。
单击“选择”按钮,然后指定所创建的Access数据库。
(5)单击“确定”按钮,刚才创建的用户数据源被添加在“用户DSN”选项卡的“用户数据源”列表框中。
3、创建MFCAppWizard应用程序
用MFCAppWizard(exe)创建一个对话框应用程序TeacherMIS。
为了使程序能支持数据库对象,在头文件stdafx.h中加入#include<
afxdb.h>
。
4.用ClassWizard为数据库中的每一个表映射一个记录集类
首先为表Users映射记录集类CUserSe。
打开项目工作区的ClassView选项卡,选择项目名称,右击,弹出快捷菜单,选择NewClass命令弹出的NewClass对话框,
输入记录集类名称CUserSet,并为其选择基类CRecordset单击0K按钮,弹出的DatabaseOptions对话框,为记录集类选择ODBC数据源TeacherDB,单击0K按钮,弹出SelectDatabaseTables寸话框,为记录集类选择数据库表Users,单击OK按钮,
即完成记录集类CUserSet的定义。
5、根据类属性之间的关系添加如下类:
I'
J&
J
(6)显示当前用户:
m_corr_user=login.GetUserNm();
(7)注销:
voidCTeacherMISDIg:
:
OnLogout()m_score.Close();
CDialog:
:
OnCancel();
CLoginDlglogin;
login.SetUser();
login.DoModal();
7、运行截图
(1)用户登录:
用户登录魂
(2)学生信息管理系统:
乂学生管浬'
言息苣理矣続■JLP••〔—
学生信息
学号
200923333
姓名
|舒适当前用户
|阿生
班级
191092
所在学f完
|计算机学院|
注硝
班级职务
性别,
禺G女
政治面貌
鮮介MJ
出生年:
1990▼]月:
I06工|
联系电话15S6S6332
刪除
退出
咸绩查询
学号雄S丨学院I性别J出生年月班级I毕业院校丨页治面貌
?
009...
2009.
2009...
2005...
算算算算
计计计计
男女女女
芋£
■亍芋
1950....
1990…
1983…
1990...
无无无无
1^1092
1310^
*众众介
•t^r
R•二eFTmTRRH
■--1■I---■I-■—r
iri
3、成绩管理系统:
学主成蓬
学号:
课程号:
成绩:
20092333T
课程号
成绩
12
55
添加修改
删除显示所有学生咸绩确定
5、设计中遇到的问题及心得
在设计中遇到的几个问题:
1、关系图的连接:
当数据库创建的时候没把他们的关系图连接起来,导致在投影时出问题,查询的时候也出现了错误
2、删除时错误:
在删除操作的时候,由于没考虑表之间的关系,和删除次序。
导致了一张表的数据元素删除了,而另外一张的任然存在。
3、对同一学生插入同一课程号:
刚开始的思想是使用notin进行判断该记录是否存在,再插入我用的下面的这句语句strSQL.Format("
insertintoSCVALUES('
%s'
)where'
notin(selectcnofromSCwhere'
=SNO)"
m_sno,m_cno,m_score,m_cno,m_sno);
结果未能实现禁止对对统一学生插入统一课程号。
几番周折后还是没能看出问题的所在。
一是我便自己写了一个判断的FindScore函数,来判断是否表中又该记录决定插入与否。
通过此函数也能解决这个问题。
这个学生成绩管理系统实现了管理的基本功能,此外我还添加了一些小的功能。
但是这个系统任然有些不足和漏洞,比如软件代码交冗余、效率不高等等随着学习的深入讲不断地完善它。
B@TescherMISclasses
*4CAboutDIg
1+CLoginDIg
:
+"
r;
CScore
l+-弋CScSet
CTeacherMISApp
i+"
CTeacherMISDlg
L+CTeacherSetl
1+"
r5CuserSet
+_jGlobals
6C++中实现对数据库的管理(及增加、删除、修改、查找、退出)
(1)增加:
voidCScore:
OnBUTTONAdd()
strSQL.Format("
insertintoScoreVALUES('
)"
m_sno,m_cno,m_score);
DoExecuteSQL(strSQL);
(2)删除:
CScore:
OnBUTTONDel()
deletefromScorewhereSNO='
andCNO='
"
m_sno,m_cno);
(3)修改:
OnBUTTONEdit()
UpdateScoreSETCNO='
SCORE='
wheresno='
andeno='
andscore='
m_cno,m_score,save_sno,save_cno,save_score);
DoExecuteSQL(strSQL);
(4)查找:
voidCSore:
OnBUTTONFind()strSQL.Format("
select**fromteacherswhere%s='
"
strField,m_FieldValue);
(5)退出:
OnCancel()
OnCancel();