南京航空航天大学
数据库课程设计报告
班 级
学 号
姓 名
指导老师
二零##年 五 月
一、摘要
运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
二、关键词:设计目的,设计要求,软件概要
三、正文
1.设计目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力。课程设计的目的:
1. 加深对数据库系统、软件工程、程序设计语言的理论知识的理解和应用水平;
2. 在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;
3. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增强动手能力;
4. 为毕业设计和以后工作打下必要基础。
2.设计要求
运用数据库基本理论与应用知识,在微机RDBMS(SQL Server)的环境上建立一个数据库应用系统。要求把现实世界的事物及事物之间的复杂关系抽象为信息世界的实体及实体之间联系的信息模型,再转换为机器世界的数据模型和数据文件,并对数据文件实施检索、更新和控制等操作。
1. 用E-R图设计选定题目的信息模型;
2. 设计相应的关系模型,确定数据库结构;
3. 分析关系模式各属于第几范式,阐明理由;
4. 设计应用系统的系统结构图,确定系统功能;
5. 通过设计关系的主码约束、外码约束和使用CHECK实现完整性控制;
6. 为参照关系设计插入、删除、修改触发器;
7. 实现应用程序设计、编程、优化功能;
8. 对系统的各个应用程序进行集成和调试,进一步优化系统功能、改善系统用户界面完成实验内容所指定的各项要求;
9. 分析遇到的问题,总结并写出课程设计报告;
10. 自我评价
3.软件定义:windowsXP系统
4.开发环境:Visual studio 20## C#,SQL Server 2005
四、概要设计
1.系统功能结构
五、详细设计
1.数据库设计
关系图
表:
1.课程表
CREATE TABLE `classes` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '键主',
`classname` char(255) NOT NULL COMMENT '课程名称',
`description` char(255) NOT NULL COMMENT '程描述课',
`id_teacher` bigint(20) DEFAULT NULL COMMENT '课授教师',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Table structure for `student_class`
-- ----------------------------
DROP TABLE IF EXISTS `student_class`;
2.用户表
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '键主',
`username` char(50) NOT NULL COMMENT '用户名',
`password` char(50) NOT NULL COMMENT '密码',
`type` smallint(5) NOT NULL COMMENT '类型 0管理员 1老师 2学生',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
3.选课表
CREATE TABLE `student_class` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`id_student` bigint(20) NOT NULL,
`id_class` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
1.主要功能模块设计
A登录模块设计:
public static User CheckLogin(string username, string password)
{
OdbcConnection connection = OpenDatabase();
User user = null;
string sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
OdbcCommand cmd = new OdbcCommand(sql, connection);
OdbcDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
user = new User();
user.UserId = reader.GetInt32(0);
user.Username = reader.GetString(1);
user.Type = (UserType)reader.GetInt32(3);
}
CloseDatabase(connection);
return user;
}
B开课信息模块
public static List GetTeacherClasses(User user)
{
OdbcConnection connection = OpenDatabase();
List classes = null;
string sql = string.Format("SELECT * FROM classes WHERE id_teacher = '{0}'", user.UserId);
OdbcCommand cmd = new OdbcCommand(sql, connection);
OdbcDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
classes = new List();
while (reader.Read())
{
Class tmp = new Class();
tmp.ClassId = reader.GetInt32(0);
tmp.ClassName = reader.GetString(1);
tmp.Description = reader.GetString(2);
classes.Add(tmp);
}
}
CloseDatabase(connection);
return classes;
}
C选课模块
public static void GetSelectClasses(User user, List classes)
{
OdbcConnection connection = OpenDatabase();
foreach (Class c in classes)
{
string sql = string.Format("SELECT * FROM student_class WHERE id_student = '{0}' AND id_class = '{1}'", user.UserId, c.ClassId);
OdbcCommand cmd = new OdbcCommand(sql, connection);
OdbcDataReader reader = cmd.ExecuteReader();
if (reader.HasRows) c.Select = true;
reader.Close();
cmd.CommandText = string.Format("SELECT * FROM users WHERE id = '{0}'", c.TeacherId);
reader = cmd.ExecuteReader();
if (reader.HasRows) c.TeacherName = reader.GetString(1);
}
CloseDatabase(connection);
}
D,选好后的选课模块
public static void UpdateSelectClasses(User user, List classes)
{
OdbcConnection connection = OpenDatabase();
foreach (Class c in classes)
{
if (c.Select == false)
{
string sql = string.Format("DELETE FROM student_class WHERE id_student = '{0}' AND id_class = '{1}'", user.UserId, c.ClassId);
OdbcCommand cmd = new OdbcCommand(sql, connection);
cmd.ExecuteNonQuery();
}
else
{
string sql = string.Format("SELECT * FROM student_class WHERE id_student = '{0}' AND id_class = '{1}'", user.UserId, c.ClassId);
OdbcCommand cmd = new OdbcCommand(sql, connection);
object o = cmd.ExecuteScalar();
if (o != null) continue;
cmd.CommandText = string.Format("INSERT INTO student_class (id_student, id_class) VALUES ('{0}', '{1}')", user.UserId, c.ClassId);
cmd.ExecuteNonQuery();
}
}
CloseDatabase(connection);
}
六、课程设计小结
通过本次课程设计,我学习到了很多实用的知识,由于之前对C#知识的不足,在课程设计中遇到很多困难,尤其是在数据库的连接上,最后在老师的帮助下才解决问题,随着一个个问题的解决,我学到了很多知识,熟练了对软件的使用,每做完一个模块时,都有一种成功的喜悦,体会到了学习的快乐,这次设计的软件非常不完善,我将继续努力学习C#.NET,将数据库与编程语言结合,争取在接下来的这个暑假能开发出一个完善的系统,掌握更多实用的东西。
本次课程设计让我有机会能把之前学的数据库知识系统的串联起来,尤其是对数据库的建立与操作都上了一个台阶,包括怎么建立更简洁,没有冗余而又很完备的数据库系统,怎么对数据库结构模型进行设计,主键外键的定义,更重要的是对前期概念模型,也就是E-R图的规划,深刻的体会到前期工作的重要性。只有正确详尽的对系统进行分析,才能更高效的完成系统的开发。
七、致谢
感谢老师和研究生在机房的指导,感谢韩羽佳,卜淼两位同学的帮忙,感谢国家,感谢党,感谢神!
八、参考文献
1.康莉 著《新手学Visual C# 20## 程序设计》电子工业出版社;
2.王珊 萨师煊 著《数据库系统概论》 高等教育出版社;
3.周峰 著《SQL Sever2005 中文版关系数据库基础与实践教程》;
4..徐国智 汪孝宣 著《SQL Sever数据库开发实例精粹》电子工业出版社;
5.周峰 李德路 王征 著《Visual C#.NET 2005中文版基础与实践教程》电子工业出版社;
6.王华杰 黄山 著《精通C#数据库编程》 科学出版社;
注:
1 公式要求:正文中可以用字母表示的符号请尽量不要用公式表示,公式大小为原大小的75%。如:
2 图表要求:通常图标题名称在下,表标题名称在上,文字大小比正文文字小一号,为六号字体,其中,图形为Word自带绘图工具绘制或者采用其它绘图工具(Visio,Matlab,SmartDraw等)绘制但另存为.emf,.wmf等矢量格式后插入;表格采用“三线表”的形式。如:
图1 支持持久性语言的虚拟表接口
表1 不同噪声事务到达概率下事务提交和中断的概率
3 页眉:奇数页页眉为“南京航空航天大学”,偶数页页眉为“现代数据库技术”,页脚统一为页码号。