数据库课程设计文档模板.docx
数 据 库 课 程 设 计题 目:学生学籍管理系统 院 系: 专 业:网络工程专业 班 级: 学 号: 姓 名: 指导老师: 2012年12月20日33 / 33计算机系课程设计任务书课程名称:数据库原理及应用课程设计题目学生学籍管理系统学 号:姓名:指导老师:专业班级: 设计时间:设计目的学生学籍管理系统被广泛应用于各类学校的学生学籍管理工作中,要求其具有实用性强、使用方便、效率高和安全可靠等特点。本管理系统正是围绕以上几个方面进行开发的,在开发过程中充分考虑到本系统的应用特点,并进行了大量的检验,证明其的确达到了设计的要求,是一个已具备了实际应用能力的软件。本文主要论述学生学籍管理系统的开发过程,在涉及到C#及SQL中的部分知识以举例的方式进行讲解实施阶段(1)建立学生档案,设计学生入学、管理及查询界面。(2)设计学生各学期、学年成绩输入及查询界面,并打印各项报表。(3)根据各年度总成绩,查询、输出学生学籍管理方案(优秀、合格、试读、退学)。(4)毕业管理。(5)系统维护。教师评语备注目录1需求分析41.1 用户需求41.2 系统功能的设计和划分41.3 数据字典51.3.1 数据项51.3.2 数据结构72概念结构设计72.1数据流图72.2 系统E-R图83逻辑结构设计93.1 关系模型94软件设计104.1 物理结构设计104.1.1数据库物理设计的内容和方法:104.1.2关系模式存取方法选择:104.1.3数据的存放位置:104.1.4评价物理结构:114.2 功能实现114.3 sql115编码实现(代码和界面)145.1登陆界面145.2主界面。5.3查询界面245.4学生入学界面265.5 学生信息界面6.心得体会33课程设计报告1需求分析1.1 用户需求本系统是针对高等院校的学生学籍管理,因此学籍管理系统的用户包括系统管理员、教师和学生。主要涉及系部信息、班级信息、任课教师信息、学生信息、课程信息以及选课记录和成绩等多种数据信息。实现的具体功能如下:l 学生基本信息管理系统管理员负责对各种基本信息的录入、修改、删除等操作。l 课程信息管理学生对所选课程的查询操作。l 教师信息管理系统管理员负责对教师各种基本信息的录入、修改、删除等操作;教师可以查看自己的基本信息。l 老师教学管理查询老师所上课程以及上课地点。l 学生选课管理查询学生所选课程以及所选课程的分数1.2 系统功能的设计和划分根据系统功能的需求分析和高等院校学籍管理的特点,经过模块化的分析得到如下图1-1所示的系统功能模块结构图。基本信息录入学籍管理系统学生学籍管理毕业学生管理成绩管信息理课程信息管理基本信息删除基本信息修改基本信息录入基本信息修改基本信息录入基本信息删除基本信息修改学生学籍删除基本信息删除户图 1-1 系统功能模块图1.3 数据字典1.3.1 数据项数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果,数据字典是对系统所用到的所有表结构的描述,学籍管理的主要数据见下表。Student表如下:表 1-2 学生基本信息表序号字段别名数据类型数据长度码1SNo学号Varchar50Y2Sname姓名Varchar50N3SAge年龄Int4N4SGender性别Nchar2NAdress地址NChar50Ntelephone电话Char20N5SDepartmentId课程号Int8N6SEnterYear入学时间Varchar10NCourse表如下:表 1-3 课程表序号字段别名数据类型数据长度码1Cno课程号Varchar50Y2Cname课程名nVarchar50N3CTime学分Varchar50N4CXQ教师号Varchar50N Department表如下:表 1-4 教师信息表序号字段别名数据类型数据长度码1DepartmentId专业号Int4Y2Department专业名nvarchar50N Student_course表如下:表 1-6 学生选课表序号字段别名数据类型数据长度码1Sno学号Varchar20Y/W2Cno课程号Varchar203Score成绩Varchar20N user教课:表 1-7 用户表序号字段别名数据类型数据长度码1UserName用户名Varchar20Y2PassWord密码Varchar20N1.3.2 数据结构数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或若干个数据项和数据结构混合组成。经过数据项和用户需求的分析,对本系统一共分了5个组,具体如下表所示:表 1-9 数据结构表数据结构名含义说明组成部分学生信息管理描述学生基本信息学号+姓名+性别+出生日期+入学时间课程信息管理描述课程基本信息课程号+课程名 +教师号成绩信息管理描述学生成绩信息课程号+课程名+姓名+成绩+学分毕业学生管理描述毕业学生基本信息学号+姓名+性别2概念结构设计概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成独立于具体DBMS的概念模型。2.1数据流图数据流图表达了数据和处理的关系,根据用户的需求分析和高校学籍管理系统的需求,得出如下图2-1所示的学籍管理数据流图。图 2-1 学籍管理系统数据流图2.2 系统E-R图1 对于学生信息管理,我们可以将学生实体抽象出来,如图2-2所示 : 学生性别姓名:课程号年龄地址入学时间电话学号2. 课程实体E-R图 课程课程名课程号课程学期 课程学年 3.专业E-R图专业专业号专业名4课程成绩E-R图:课程成绩课程号学号成绩3逻辑结构设计逻辑结构设计就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。设计逻辑结构一般分为3步进行:(1)将概念结构转换为一般的关系、网状、层次模型;(2)将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换;(3)对数据模型进行优化。3.1 关系模型将概念结构设计阶段设计好的基本E-R图转换为关系模型,如下所示:1.学生(学号,姓名,性别,出生年月,系别,入学年份,课程号)2.课程(课程号,课程名,课程学期,课程学年)3.专业(专业号,专业名)4.成绩(课程号,学生号,成绩)4软件设计4.1 物理结构设计4.1.1数据库物理设计的内容和方法:不同的数据库产品所提供的物理环境、存取方法和存储结构有很大差别,能供设计人员使用的设计变量、参数范围也很不相同,因此没有通用的物理设计方法可遵循,只能给出一般的设计内容和原则。希望设计优化的物理数据库结构,使得在数据库上运行的各种事务响应时间小、存储空间利用率高、事务吞吐率大。为此,首先对要运行的事务进行的各种事务获得选择物理数据库设计所需要的参数。其次,要充分了解所用RDBMS的内部特征,特别是系统提供的存取方法和存储结构。4.1.2关系模式存取方法选择:该设计选用了唯一索引跟非唯一索引。由于考虑到要经常对学生信息表、选课表、教师表和课程表进行查询,而学生信息表的学号必须唯一,因此为它建立唯一索引,其它表就建立非唯一索引以提高查询效率。脚本如下:create unique index sno on student (Sno)create index sno on student_course(Sno)create index cno on course(cno)4.1.3数据的存放位置:为了提高系统性能,数据库设计可根据用户需求将数据的易变部分与稳定部分、经常存取部分和存取频率低部分分开存放,以加快存取速度,这在多用户环境下特别有效;还可以将日志文件与数据库对象(表、索引等)放在不同的磁盘上,以改进系统的性能。4.1.4评价物理结构:根据对数据库的权衡,对经常查询的表创建索引能大大提高时间效率;对基本表进行规范化,减少数据冗余以及存储空间的占用;对数据库创建触发器,数据的增删改都能自动地进行同步,减少维护的负担;根据不同用户的需求,数据库还可以更改数据存放位置,实现更合理的方案。4.2 功能实现完成数据库的物理设计之后,设计人员就要用RDBMS提供的数据定义语言和其他实用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以接受的源代码,再经过调试产生目标模式。然后就可以组织数据入库,最后就在此基础上编写各个表相关的触发器和存储过程。4.3 SQL界面4.3.1abo.course表4.3.2abo. Department表4.3.dbo.student4. 4.dbo.student-course4. 5. SysUser5编码实现(代码和界面)5.1登陆界面代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;using System.IO;using System.Xml;using System.Collections;using StudentManager.DbLayer;namespace StudentManager public partial class FormLogin : Form public FormLogin() InitializeComponent(); public static bool isValidate=false; / <summary> / “登录”按钮单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void buttonLogin_Click(object sender, EventArgs e) /1 构造查询语句,形如:" select * from SysUser where UserName = '张三' and Password = '123456' " string sql = "" sql += "select * from SysUser where UserName = " sql += SqlStringConstructor.GetQuotedString(this.textBoxUserName.Text); sql += " and Password = " sql += SqlStringConstructor.GetQuotedString(this.textBoxPwd.Text); /2 查询数据 Database db = new Database(); DataRow row = db.GetDataRow(sql); /3 根据查询结果,判断用户是否合法 if (row != null) FormLogin.isValidate = true; (FormMain)this.MdiParent).ChangeMenuStatus(); this.Close(); else MessageBox.Show("对不起,您输入的用户名或者密码错误!"); / <summary> / “窗口加载”事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void FormLogin_Load(object sender, EventArgs e) this.Height = 380; /从文件“Database.config”中,读取数据库配置参数 XmlDocument xdc = new XmlDocument(); try /读取XML文档格式的Database.config文件中,连接字符串数据 xdc.Load("Database.config"); string conString = xdc.ChildNodes1.ChildNodes0.Attributes"value".Value; ArrayList arr = new ArrayList(); arr.AddRange(conString.Split('','='); catch / <summary> / “退出”按钮单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void buttonExit_Click(object sender, EventArgs e) this.Close(); / <summary> / “配置”按钮单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void buttonConfig_Click(object sender, EventArgs e) /*if (this.buttonConfig.Text = "服务器配置 ") this.textBoxUserName.Focus(); this.buttonConfig.Text = "服务器配置 " this.Height = 380; else this.textBoxServer.Focus(); this.buttonConfig.Text = "服务器配置 " this.Height = 544; */ / <summary> / “配置确定”单击按钮 / </summary> / <param name="sender"></param> / <param name="e"></param> private void buttonConfigOk_Click(object sender, EventArgs e) /将用户输入的配置参数,保存到当前目录下“Database.config”文件中 StreamWriter writer = new StreamWriter("Database.config", false, System.Text.Encoding.Default); writer.WriteLine("<?xml version="1.0" encoding="utf-8" ?>"); writer.WriteLine("<configuration>"); string conStr = "<DBConnectionString value="" /* conStr += "server=" + textBoxServer.Text + "" conStr += "database=" + this.textBoxDbName.Text + "" conStr += "user id=" + this.textBoxDbUser.Text + "" conStr += "pwd=" + this.textBoxDbPwd.Text; conStr += ""/>"*/ writer.WriteLine(conStr); writer.WriteLine("</configuration>"); writer.Close(); Database db = new Database(); db.Open(); /*this.buttonConfig.Text = "服务器配置 " this.Height = 380;*/ / <summary> / “配置重置”单击按钮 / </summary> / <param name="sender"></param> / <param name="e"></param> private void buttonConfigReset_Click(object sender, EventArgs e) /把各项内容清空 /*this.textBoxServer.Text = "" this.textBoxDbName.Text = "" this.textBoxDbUser.Text = "" this.textBoxDbPwd.Text = "" this.textBoxServer.Focus();*/ 5.2主界面代码:using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace StudentManager public partial class FormMain : Form public FormMain() InitializeComponent(); / <summary> / 窗体加载事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void FormMain_Load(object sender, EventArgs e) /1 弹出登录窗口 FormLogin f = new FormLogin(); /得到一个登录窗口对象 f.MdiParent = this; /使登录窗口成为主窗口的子窗口 f.Show(); /弹出登录窗口 /2 使菜单项实效 this.menuStripMain.Enabled = false; / <summary> / “退出”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 退出ToolStripMenuItem_Click(object sender, EventArgs e) this.Close(); / <summary> / “登录”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void toolStripMenuItem2_Click(object sender, EventArgs e) FormLogin f = new FormLogin(); f.MdiParent = this; f.Show(); / <summary> / “入学”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 入学ToolStripMenuItem_Click(object sender, EventArgs e) FormStudentAdd f = new FormStudentAdd(); f.MdiParent = this; f.Show(); / <summary> / 更改菜单的状态 / </summary> public void ChangeMenuStatus() if (FormLogin.isValidate) this.menuStripMain.Enabled = true; else this.menuStripMain.Enabled = false; / <summary> / “修改”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void toolStripMenuItem1_Click(object sender, EventArgs e) FormStudentUpdate f = new FormStudentUpdate(); f.MdiParent = this; f.Show(); / <summary> / “毕业”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 毕业ToolStripMenuItem_Click(object sender, EventArgs e) FormStudentDelete f = new FormStudentDelete(); f.MdiParent = this; f.Show(); / <summary> / “查询”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 查询ToolStripMenuItem_Click(object sender, EventArgs e) FormStudentSearch f = new FormStudentSearch(); f.MdiParent = this; f.Show(); / <summary> / “课程录入”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 课程录入ToolStripMenuItem_Click(object sender, EventArgs e) FormCourseAdd f = new FormCourseAdd(); f.MdiParent = this; f.Show(); / <summary> / “成绩查询”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 成绩查询SToolStripMenuItem_Click(object sender, EventArgs e) FormScoreSearch f = new FormScoreSearch(); f.MdiParent = this; f.Show(); / <summary> / “成绩录入”菜单项单击事件 / </summary> / <param name="sender"></param> / <param name="e"></param> private void 成绩录入ToolStripMenuItem_Click(object sender, EventArgs e) FormScoreImport f = new FormScoreImport(); f.MdiParent = this; f.Show(); private void 入学ToolStripMenuItem1_Click(object sender, EventArgs e) FormStudentAdd f = new FormStudentAdd(); f.MdiParent = this; f.Show(); private void 查询ToolStripMenuItem1_Click(object sender, EventArgs e) FormStudentSearch f = new FormStudentSearch(); f.MdiParent = this; f.Show(); private void 修改ToolStripMenuItem_Click(object sender, EventArgs e) FormStudentUpdate f = new FormStudentUpdate(); f.MdiParent = this; f.Show(); private void 毕业ToolStripMenuItem1_Click(object sender, EventArgs e) FormStudentDelete f = new FormStudentDelete(); f.MdiParent = this; f.Show(); private void 课程输入ToolStripMenuItem_Click(object sender, EventArgs e) FormCourseAdd f = new FormCourseAdd(); f.MdiParent = this;