SQLServer数据库课程设计报告

武汉工业学院

 《数据库系统》

课 程 设 计 说 明 书

        设计题目:选课管理系统

                 姓    名     陶向东      

                 学    院_数学与计算机学院_

                 专    业    计算机类     

                 学    号   100511726      

                 指导教师     李禹生       

                    2012 年 6 月 8 日

一、读书笔记

1)SQL数据库的实际应用

SQL包括了所有对数据库的操作,主要是由4个部分组成:   

1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。   

2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。   

3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。   

4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。

在如今的互联网系统中 主要存在B-S模式和C-S模式,B-S模式指的是浏览器服务器模式,C-S模式指的是客户服务器模式。两者的相同部分就是SERVER服务器,SERVER服务器是指的专用计算机,它拥有大容量存储设备和高性能计算功能,用于存储复杂的用户数据,这些复杂臃繁的数据以关系模型存储也就是二维表的形式存储,各二维表之间以相同的字段形成联系,这样存储的好处是具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。在这些专用计算机运行着位于用户与操作系统之间的一层数据管理软件。数据库管理系统和操作系统一样是计算机的基础软件,也是一个大型复杂的软件系统,其主要功能包括数据定义,数据组织、存储和管理,数据操纵功能,数据库的事务管理和运行管理,DBMS与另一个DBMS或文件系统的数据转换功能,异构数据库之间的互访和互操作功能等。而数据库系统是指的在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员构成。

2)SQL数据库的安全性

计算机系统的三类安全性问题

1.所谓计算机系统安全性,是指为计算机系统建立和采用的各种安全保护措施,以保护计算机系统中的硬件、软件、及数据,防止其偶然或恶意的原因是系统遭到破坏,数据遭到更改或泄露等。

2.技术安全:计算机系统中采用具有一定安全性的硬件、软件来实现对计算机系统及其所存数据的安全保护,当计算机系统受到无意或恶意的攻击时仍能保证系统正常运行,保证系统内的数据不增加、不丢失、不泄露。

3.管理安全:由于管理不善导致的计算机设备和数据介质的物理破坏、丢失等软硬件意外故障以及场地的意外事故等安全问题。

4.政策法律:政府部门建立的有关计算机犯罪、数据安全保密的法律准则和政策法规、法令。

    ②数据库安全性控制

    1.用户标识与鉴别:用户标识、口令。

    2.存取控制:定义用户权限,并将用户权限登记到数据字典中、合法权限检查。

③、自主存取控制(DAC)方法:

1.授权与回收:GRANT语句, GRANT SELECT ON TABALE SC TO PUBLIC;//把对表SC的查询权限授予所有用户;REVOKE语句,REVOKE SELECT ON TABLE SC FROM PUBLIC;//收回所有用户对表SC的查询权限;创建数据模式的权限,

 CREATE USER <user name>

[WITH][DBA|RESOURCE|CONNECT];

 2.数据库角色:角色创建,给角色授权,将一个角色授权给其他角色或用户,角色权限收回。

④、强制存取控制(MAC)方法。

3)SQL数据库的设计

1.数据库设计:对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各个用户的应用需求,包括信息管理要求和数据操作要求。

2.数据库设计的特点:数据库建设的基本规律:“三分技术,七分管理,十二分基础数据”;机构(数据)设计和行为(处理)设计相结合。

3.数据库设计方法:计算机的基础知识,软件工程的原理和方法,程序设计的方法和技巧,数据库的基本知识,数据库设计技术,应用领域知识。

4.数据库设计的基本步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行和维护。

4)SQL作为后台数据库与前台开发工具的结合

    前台开发工具用于做前台页面,设计出可视化的图形界面,使不同权限的用户都便于操作整个系统。而前台页面与后台数据库连接最关键的地方则在于SQL语句。各种开发语言都提供了其连接数据库的类,通过这些类的相应方法实现连接数据库、对数据源的各种操作,包括查询、插入、删除、更新操作、返回操作结果等。当点击图形界面相应的控件时,通过监听触发产生相应的SQL语句,然后执行SQL语句将返回的结构显示在图形界面上。

5)SQL查询命令的应用

SQL提供select语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。分为:1.单表查询2.连接查询3.嵌套查询4.集合查询。

6)SQL在VB、ASP或其他自选语言中的实际应用

SQL在C#中的实际应用:

首先实现对数据库的连接,必须创建一个字符型的连接语句:

String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

然后创建一个SqlConnection类对象实现对数据库的连接

SqlConnection myCon = new SqlConnection(ConnectionString);

通过事件产生SQL语句,string selectSQL = "select SNO 学号,SNAME 姓名,SSEX 性别,SAGE 年龄,U_STUDENTS.CID 班号,MAJOR 专业,CLASS 班级,DEPARTMENT 系别 from   dbo.U_STUDENTS,dbo.U_CLASSES

where dbo.U_STUDENTS.CID=dbo.U_CLASSES.CID and SNO='" + textBox6.Text + "'";

然后创建SqlCommand对象,SqlCommand myCom = new SqlCommand();

执行SQL语句,实现对数据源的各种操作,然后返回操作结果。

二、系统分析    

1开发背景

     学生选课管理系统的设计为选课及成绩管理提供了一个良好的工具,此系统要帮助学校管理学生选课成绩管理。使学生课程成绩更便于管理。

2需求分析(功能需求分析,数据流程分析即数据流图等)

     学生选课管理系统的设计为选课及成绩管理提供了一个良好的工具,此系统基本实现了设计的要求,即登录系统(通过用户名和密码),管理(录入、查询、修改和删除)学生、课程基本资料,管理(录入、查询、修改和删除)学生所选课程成绩,修改用户密码等功能。在此基础上,我还对系统进行了改进,特别是加强了查询的功能,使我们能更直观、有效地查询到我们想要的数据。

 

三、系统设计      

1系统总体结构

系统的模块划分为如图所示,分别为:用户登录、学生信息管理、课程信息管理、选课成绩管理、用户管理5个模块。每个模块负责相应的功能。系统采用ADO.NET技术实现对数据库的访问操作,使用SQL Server 2005作为后台数据库。

① 用户登录模块

提供用户登录界面,输入用户名,密码进行登录。

②学生信息管理模块

学生信息管理模块,用于管理学生的基本信息,所包括的字段有:学号、姓名、性别、年龄、班级号,提供对学生信息的录入、查询、修改和删除的操作。

③课程信息管理模块

课程信息管理模块用于管理课程的信息,所包含的字段有:课程号、课程号、学分和教师,提供对课程信息的录入、查询、修改和删除的操作。

④选课成绩管理模块

选课成绩管理模块用于管理学生的选课与成绩,所包含的字段有:学号、课程号和成绩,提供对选课成绩信息的录入、查询、修改和删除的操作。

⑤用户管理模块

用户管理模块用于用户账号和密码的管理,其功能包括添加用户,注销用户和修改密码。

2数据库结构设计

①数据库列表:

②数据库E-R图

 

③数据库表单

创建“USERS”并添加各字段,如图所示:

创建“U_STUDENTS”并添加各字段,如图所示:

创建“U_COURSES”并添加各字段,如图所示:

创建“U_SCORES”并添加各字段,如图所示:

创建“U_CLASSES”并添加各字段,如图所示:

④主要查询功能的SQL语句:

查询学生信息

按学号查找

select SNO 学号,SNAME 姓名,SSEX 性别,SAGE 年龄,U_STUDENTS.CID 班号,MAJOR 专业,CLASS 班级,DEPARTMENT 系别 from dbo.U_STUDENTS,dbo.U_CLASSES where dbo.U_STUDENTS.CID=dbo.U_CLASSES.CID and SNO='" + textBox6.Text + "'";

按姓名查找

select SNO 学号,SNAME 姓名,SSEX 性别,SAGE 年龄,U_STUDENTS.CID 班号,MAJOR 专业,CLASS 班级,DEPARTMENT 系别 from dbo.U_STUDENTS,dbo.U_CLASSES where dbo.U_STUDENTS.CID=dbo.U_CLASSES.CID and SNAME='" + textBox7.Text + "'

添加学生记录

 selectSQL = "select SNO 学号,SNAME 姓名,SSEX 性别,SAGE 年龄,U_STUDENTS.CID 班号,MAJOR 专业,CLASS 班级,DEPARTMENT 系别 from dbo.U_STUDENTS,dbo.U_CLASSES where dbo.U_STUDENTS.CID=dbo.U_CLASSES.CID and SNAME='" + textBox7.Text + "'";

修改学生记录

update dbo.U_STUDENTS set SNAME='"+textBox2.Text+"',SSEX='"+textBox3.Text+"',SAGE='"+textBox4.Text+"',CID='"+textBox5.Text+"' where SNO='"+textBox1.Text+"'";

删除学生记录

delete from dbo.U_STUDENTS where SNO='"textBox1.Text + '";

查询课程信息

selectSQL = "select CNO 课程号,COURSE 课程名,CREDIT 学分,TEACHER 教师 from dbo.U_COURSES where CNO='" + textBox4.Text + "'";(按课程号查询)

select CNO 课程号,COURSE 课程名,CREDIT 学分,TEACHER 教师 from dbo.U_COURSES where COURSE='" + textBox5.Text + "'";(按课程名查询)

删除课程信息

delete from dbo.U_COURSES where CNO='" +textBox1.Text + "'

修改课程记录

"update dbo.U_COURSES set COURSE='" + textBox2.Text + "',CREDIT='" + textBox3.Text + "',TEACHER='" + textBox6.Text + "' where CNO='" + textBox1.Text + "'";

添加课程记录

insert into dbo.U_COURSES(CNO,COURSE,CREDIT,TEACHER)values('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox6.Text + "')";

查询选修课成绩

select dbo.U_STUDENTS.SNO 学号,dbo.U_STUDENTS.SNAME 姓名,dbo.U_COURSES.CNO 课程号,dbo.U_COURSES.COURSE 课程名,dbo.U_COURSES.TEACHER 教师,dbo.U_SCORES.SCORE 成绩 from

dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES

where dbo.U_STUDENTS.SNO=dbo.U_SCORES.SNO and dbo.U_COURSES.CNO=dbo.U_SCORES.CNO";

3开发方案的选择(主要是前端开发平台的选择与方案的比较)

     前台开发方案主要有两种大方向:主要存在B-S模式和C-S模式,B-S模式指的是浏览器服务器模式,C-S模式指的是客户服务器模式。

     B-S模式可以选择ASP、JSP、PHP等通过浏览器解析运行网页文件来实现相应功能。

     C-S模式可选前台开发语言较多,主要有:JAVA,C#,C++等,通过窗体来实现相应功能。

四、系统实施

选课成绩模块的设计与实现(模块功能、运行界面、源代码)

1.运行界面:

2.源代码

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace Project2

{

    public partial class Form5 : Form

    {

        public Form5()

        {

            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)

        {

            if (textBox1.Text == "" || textBox3.Text == "")

            {

                MessageBox.Show("必须填写学号和课程号!填完修改信息再按修改按钮!");

                return;

            }

            string UpdateSQL = "update dbo.U_SCORES set SCORE='" + textBox5.Text + "' where SNO='"+textBox1.Text+"' and CNO='"+textBox3.Text+"'";

            ExcuteSQL(UpdateSQL);

            MessageBox.Show("修改成功!");

        }

        private void button4_Click(object sender, EventArgs e)

        {

            Form2 form2 = new Form2();

            this.Hide();

            form2.Show();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            if (textBox1.Text == "" && textBox3.Text == "")

            {

                MessageBox.Show("学号和课程号是必填项,请填完后再单击添加按钮!");

                return;

            }

            string InsertSQL = "insert into dbo.U_SCORES(SNO,CNO,SCORE)values('"+textBox1.Text+"','"+textBox3.Text+"','"+textBox5.Text+"')";

          

            ExcuteSQL(InsertSQL);

            MessageBox.Show("添加成功!");

        }

        private void button3_Click(object sender, EventArgs e)

        {

            if (textBox1.Text == "" && textBox3.Text == "")

            {

                MessageBox.Show("必须填写学生学号和课程号,请填完后再单击删除按钮!");

                return;

            }

            string DeleteSQL = "delete from dbo.U_SCORES where SNO='"+textBox1.Text+"' and CNO='"+textBox3.Text+"'";

            ExcuteSQL(DeleteSQL);

            MessageBox.Show("删除成功!");

        }

        private void Display()

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            SqlCommand myCom = new SqlCommand();

            myCom.CommandType = CommandType.Text;

            string comstr = "select U_STUDENTS.SNO,U_STUDENTS.SNAME,U_COURSES.CNO,U_COURSES.COURSE,U_SCORES.SCORE from dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES where U_STUDENTS.SNO=U_SCORES.SNO and U_COURSES.CNO=U_SCORES.CNO";

            myCom.CommandText = comstr;

            myCom.Connection = myCon;

            SqlDataReader myReader = myCom.ExecuteReader();

            myReader.Read();

            textBox1.Text = myReader.GetString(0);

            textBox2.Text = myReader.GetString(1);

            textBox3.Text = myReader.GetInt16(2).ToString();

            textBox4.Text = myReader.GetString(3);

            textBox5.Text = myReader.GetInt32(4).ToString();

            myReader.Close();

            myCon.Close();

        }

        private void ExcuteSQL(string SQL)

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            SqlCommand myCom = new SqlCommand();

            myCom.CommandType = CommandType.Text;

            myCom.CommandText = SQL;

            myCom.Connection = myCon;

            myCom.ExecuteNonQuery();

            myCon.Close();

        }

        private void textBox3_TextChanged(object sender, EventArgs e)

        {

        }

        private void Form5_Load(object sender, EventArgs e)

        {

            Display();

        }

        private void button6_Click(object sender, EventArgs e)

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            string selectSQL = "select dbo.U_STUDENTS.SNO 学号,dbo.U_STUDENTS.SNAME 姓名,dbo.U_COURSES.CNO 课程号,dbo.U_COURSES.COURSE 课程名,dbo.U_COURSES.TEACHER 教师,dbo.U_SCORES.SCORE 成绩 from dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES where dbo.U_STUDENTS.SNO=dbo.U_SCORES.SNO and dbo.U_COURSES.CNO=dbo.U_SCORES.CNO";

            SqlCommand myCom = new SqlCommand();

            SqlDataAdapter myadpt = new SqlDataAdapter(selectSQL, myCon);

            DataSet dataset = new DataSet();

            dataGridView1.DataSource = dataset;

            dataset.Clear();

            myadpt.Fill(dataset);

            dataGridView1.DataSource = dataset.Tables[0].DefaultView;

            myCon.Close();

        }

        private void button5_Click(object sender, EventArgs e)

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            if (textBox6.Text ==""||textBox7.Text =="")

            {

                MessageBox.Show("学生学号和课程名都不能为空,请填完后再单击查找按钮!");

                return;

            }

            else

            {

                string selectSQL = "select dbo.U_STUDENTS.SNO 学号,dbo.U_STUDENTS.SNAME 姓名,dbo.U_COURSES.CNO 课程号,dbo.U_COURSES.COURSE 课程名,dbo.U_COURSES.TEACHER 教师,dbo.U_SCORES.SCORE 成绩 from dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES where dbo.U_STUDENTS.SNO=dbo.U_SCORES.SNO and dbo.U_COURSES.CNO=dbo.U_SCORES.CNO and dbo.U_STUDENTS.SNO='" + textBox6.Text + "' and dbo.U_COURSES.COURSE='" + textBox7.Text + "'";

                SqlCommand myCom = new SqlCommand();

                SqlDataAdapter myadpt = new SqlDataAdapter(selectSQL, myCon);

                DataSet dataset = new DataSet();

                dataGridView1.DataSource = dataset;

                dataset.Clear();

                myadpt.Fill(dataset);

                dataGridView1.DataSource = dataset.Tables[0].DefaultView;

                myCon.Close();

            }

        }

        private void textBox6_TextChanged(object sender, EventArgs e)

        {

        }

        private void button7_Click(object sender, EventArgs e)

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            if (textBox6.Text == "")

            {

                MessageBox.Show("学生学号不能为空,请填完后再单击查找按钮!");

                return;

            }

            else

            {

                string selectSQL = "select dbo.U_STUDENTS.SNO 学号,dbo.U_STUDENTS.SNAME 姓名,dbo.U_COURSES.CNO 课程号,dbo.U_COURSES.COURSE 课程名,dbo.U_COURSES.TEACHER 教师,dbo.U_SCORES.SCORE 成绩 from dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES where dbo.U_STUDENTS.SNO=dbo.U_SCORES.SNO and dbo.U_COURSES.CNO=dbo.U_SCORES.CNO and dbo.U_STUDENTS.SNO='" + textBox6.Text + "'";

                SqlCommand myCom = new SqlCommand();

                SqlDataAdapter myadpt = new SqlDataAdapter(selectSQL, myCon);

                DataSet dataset = new DataSet();

                dataGridView1.DataSource = dataset;

                dataset.Clear();

                myadpt.Fill(dataset);

                dataGridView1.DataSource = dataset.Tables[0].DefaultView;

                myCon.Close();

            }

        }

        private void button8_Click(object sender, EventArgs e)

        {

            String ConnectionString = "Data Source=localhost;Initial Catalog=students;Persist Security Info=True;User ID=sa;Password=txd100511726";

            SqlConnection myCon = new SqlConnection(ConnectionString);

            myCon.Open();

            if (textBox7.Text == "")

            {

                MessageBox.Show("课程号不能为空,请填完后再单击查找按钮!");

                return;

            }

            else

            {

                string selectSQL = "select dbo.U_STUDENTS.SNO 学号,dbo.U_STUDENTS.SNAME 姓名,dbo.U_COURSES.CNO 课程号,dbo.U_COURSES.COURSE 课程名,dbo.U_COURSES.TEACHER 教师,dbo.U_SCORES.SCORE 成绩 from dbo.U_STUDENTS,dbo.U_COURSES,dbo.U_SCORES where dbo.U_STUDENTS.SNO=dbo.U_SCORES.SNO and dbo.U_COURSES.CNO=dbo.U_SCORES.CNO and dbo.U_COURSES.COURSE='" + textBox7.Text + "'";

                SqlCommand myCom = new SqlCommand();

                SqlDataAdapter myadpt = new SqlDataAdapter(selectSQL, myCon);

                DataSet dataset = new DataSet();

                dataGridView1.DataSource = dataset;

                dataset.Clear();

                myadpt.Fill(dataset);

                dataGridView1.DataSource = dataset.Tables[0].DefaultView;

                myCon.Close();

            }

        }

        private void textBox1_TextChanged(object sender, EventArgs e)

        {

        }

    }

}

3.模块功能

     点击“选课成绩管理”选项之后,进入第二个界面,在表中可以看到所有选修课程的信息,包括课学号、姓名、课程号、课程名和成绩。系统并提供选课信息的增、删、改和查找功能。查找功能有三种方式,一种是按学号号查找,一种是按课程号查找,一种是学号和课程号的综合查找,方便不同的用户需要。

五、总结(体会、经验与教训)

此次课程设计时间比较短,前两天基本上在由于前台用什么语言来实现,有着手通过java、C#等各种途径,相互比较后,觉得C#在做前台方面有优势,于是决定静下来用C#做前台了。于是我从开头开始学C#,一门全面的面向对象的编程语言。我从图书馆借了大量关于C#的书,开始看C#在数据库方面的应用。一边看一边做,从页面开始设计,先找到一些素材(图片,式样)。然后照着素材自己设计界面,一张张界面做出来了,然后在老师的指导下将这些页面链接起来,然后链接数据库,这是最关键的部分,同时也是最麻烦的部分,通过自己了解的深入,各个击破,逐步完成了自己最初的设想。

在开始的时候,总会遇到这样或那样的问题,在做的过程中,慢慢摸索和研究,把其中的一个个问题逐个解决。同时也提高了我的编程思想和独立解决问题的能力。

对于每一次课程设计,我都独立地去完成。这一次也不例外,这次课程就设计很好的提高了我动手实践的能力,在短时间内了解一门自己不了解的语言,并完成相应的设计,这无疑提高了自己的学习能力,把书本的知识转化为实际应用中去,丰富了自己的实践经验。

相关推荐