课 程 设 计 报 告
课程名称 数据库课程设计
设计题目 学生成绩管理系统
专 业 计算机科学与信息工程系
班 级 B110505
学 号 B********
姓 名
完成日期 2013年12月27日
课 程 设 计 任 务 书 |
设计题目:学生成绩管理系统
设计内容与要求: 1.学生信息按照行政班级组织; 2.提供学生成绩的查询功能,输入学生的学号或姓名,能查找出该生各学期各门课程的成绩。 3.能对成绩数据进行添加、删除、修改等基本操作。 4.用户权限控制,一般用户只能查询,管理员用户可以修改数据库的内容。 5.根据以上功能,设计数据结构和Windows UI界面,完成程序设计。 指导教师: 姬晓辉 2013 年 12 月 27 日 |
课 程 设 计 评 语 |
成绩: 指导教师:_______________ 年 月 日 |
1 概述
1.1设计要求
系统名称:学生成绩管理系统
使用语言:C#程序设计语言
使用软件:Microsoft SQL Server 2005、Microsoft Visual Studio 2005
针对给定的数据库应用问题-学生成绩管理系统,全面运用数据库原理课程所学知识,从系统需求分析着手,进行数据库的概念设计、逻辑设计、物理设计、系统的总体设计和模块设计、编程、调试,并在各个环节中提供相关的文档。
1.2技术要求
本系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改 、增加、删除,另外还考虑到用户登录的权限,针对学生信息和权限登录的学生成绩管理系统。
本系统主要包括教师管理、学生信息查询、添加、修改、删除等部分。其功能主要有:
学生信息按照行政班级组织;
提供学生成绩的查询功能,输入学生的学号或姓名,能查找出该生各学期各门课程的成绩。
能对成绩数据进行添加、删除、修改等基本操作,并能进行一般的统计计算(如计算学生的总分和平均分,课程的平均分等)
其它辅助管理功能,如统计具有各等级奖学金资格的人数。
用户权限控制,一般用户只能查询,管理员用户可以修改数据库的内容。
根据以上功能,设计数据结构和Windows UI界面,完成程序设计。
1.3开发环境及工具
本系统后台数据库采用Microsoft SQL Server 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2012作为主要开发工具,可与SQL Server 2005数据库无缝链接。系统开发语言选择C#.
1.4安全性
具有较高的安全性。系统对不同的用户提供不同的功能模块,只有具有高级权限的部门管理者或维护人员用户才能对用户和图书信息进行增加、修改和删除等管理,一般的读者用户只能查看图书信息和借阅情况。
还应具有一定的保护机制,防止系统被恶意攻击,信息被恶意修改和窃取。有完善的备份机制,如果系统被破坏应该能快速恢复。
2 需求分析
1.1 系统背景分析
随着电脑的普及,信息量的增大,现在几乎每个学校乃至每个教育机构也顺应时代的发展,纷纷抛弃繁琐的人工管理学生的成绩以及学生的信息的方式,而是采用各种管理软件进行管理。采用软件系统进行管理具有处理数据速度更快、信息量更多、更加准确、更加简便等特点。所以学生成绩管理系统成为学校和其他教育机构不可或缺的管理软件。
1.2系统目标
建立学生成绩数管理系统,数据信息文本文件存储,也可以采用数据库存储。
(1)学生信息按照行政班级组织;
(2)提供学生成绩的查询功能,输入学生的学号或姓名,能查找出该生各学期各门课程的成绩。
(3)能对成绩数据进行添加、删除、修改等基本操作,并能进行一般的统计计算(如计算学生的总分和平均分,课程的平均分等)
(4)其它辅助管理功能,如统计具有各等级奖学金资格的人数。
(5)用户权限控制,一般用户只能查询,管理员用户可以修改数据库的内容。
(6)根据以上功能,设计数据结构和Windows UI界面,完成程序设计。
1.3性能需求分析
(1)登录、用户界面需求:简洁、易懂、易用、友好的用户界面。
(2)安全保密性需求:只有凭借用户名和密码登陆系统,才能进行信息的管理等。
3总体设计
3.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;
3.2系统功能流程图
图3-1 系统功能流程图
3.3系统数据库概念结构设计
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。
图3-2系统E-R图结构
3.3.1系统E-R图
系统E-R图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。如图3-2系统E-R图结构。
3.3.2系统数据库的设计
综合以上分析,要实现上面的所有功能模块,主要设计表如下:
表3-1用户登录表
表3-2学生表
表3-3课程表
表3-4成绩表
表3-5教师表
3.4系统安全保密设计
系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对学生信息进行操作。
4详细设计
4.1系统程序流程图
程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。
图4-1系统总体流程图
4.2系统主要功能模块简介
4.2.1登陆界面
用户凭借用户名及密码登录,老师登录成功后可对学生信息进行操作及修改自己的登录密码,学生登录后可以查询自己的成绩、选课、修改密码。用户界面如图4-2 用户登录界面所示。
图4-2用户登录界面
4.2.2学生操作
1.学生个人成绩查询
学生登陆后,在主界面上学生可以点击查询学生个人成绩,来查看自己的各个科目的成绩,且只能查看不能修改如图4-3。
图4-3学生个人成绩查询界面
2.学生选课
学生登陆后,可以在主界面点击选课,可以选择自己想要学习的课程。在选课界面可以看到课程号、课程名、学分、学时。选课成功后系统将课程号和课程名加入到Grade表中,如图4-4。
图4-4学生选课界面
4.2.3教师操作
1.查询学生信息
教师登录后,可以在主界面点击查询学生信息进入到学生信息查询界面,登录时默认显示全体学生成绩表。在该界面上教师可以按学号查询学生成绩,还可按班级号查询该班级的学生信息,如图4-5。
图4-5学生信息查询
2.录入或修改学生成绩
教师登录后可以点击主界面上的录入或修改学生成绩,可以进行学生集成的录入或着修改操作。如果成绩已经存在在界面上输入信息时则进行修改操作,如果成绩不存在则进行的是录入操作,并将成绩写回数据库中Grade表中,如图4-6。
图4-6学生成绩录入或修改
4.2.4修改密码
用户登录后可以修改自己的登录密码,修改成功后并将新密码写回到数据库的Userinfo表中,修改界面如图4-7。
图4-7密码修改界面
5主要功能模块代码
5.1数据库创建代码
创建各种约束条件,来保证数据库的完整性操作。
创建数据库Grademanage
create database Grademanage
创建表Student
use Grademanage
create table Student
(
sno smallint primary key not null,
sname char(20) not null,
class char(20) not null,
sex char(10) not null,
birth datetime ,
addr char(25)
)
创建表Course
create table Course
(
cno smallint primary key not null,
cname char(10) not null,
ccredit int ,
ctime int
)
创建表Teacher
create table Teacher
(
tno smallint primary key not null,
tname char(10),
sex char(10),
birth datetime,
cno char(10)
)
创建表Userinfo
create table Userinfo
(
UserName char(10) not null,
UserPsw char(8) not null,
UserRole char(8)
)
创建表Grade
create table Grade
(cno smallint not null,
sno smallint not null,
grade smallint,
primary key(cno,sno),
foreign key(cno)references Course(cno),
foreign key(sno)references Student(Sno)
)
填充数据
insert into Userinfo values('李明','123456','学生')
insert into Userinfo values('张军','123456','教师')
insert into Userinfo values('黄涛','1','学生')
insert into Userinfo values('赵文','123','学生')
insert into Userinfo values('李庆','123','教师')
insert into Userinfo values('王山','abc','学生')
insert into Userinfo values('孙红','lb','学生')
insert into Course values(02001,'English',3,48)
insert into Course values(02002,'Com',4,36)
insert into Course values(02003,'Japnese',2,24)
insert into Course values(02004,'Database',3,48)
insert into Course values(02005,'Web',5,48)
5.2 C#主要代码
5.2.1登录
private void button1_Click(object sender, EventArgs e)
{
string str;
str = CheckSelect();
SqlConnection conn=new SqlConnection(DbUtil.ConnectString);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT UserRole FROM Userinfo where UserName='" + UserName.Text.ToString().Trim() + "' and UserPsw='" + UserPsw.Text.ToString().Trim() + "'and UserRole='" + str + "' ";//数据库执行语句
object val = cmd.ExecuteScalar();
if (val != null)
{
Main main = new Main();
main.UseRole = val.ToString().Trim();
main.UseName = UserName.Text.ToString().Trim();
main.Show();
this.Hide();
}
else
{
MessageBox.Show("输入的用户名或密码错误!", "登录提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
UserName.Focus();
}
MessageBox.Show(ex.Message);
if (conn.State == ConnectionState.Open)
conn.Close();
}
5.2.2成绩查询
private void button2_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(DbUtil.ConnectString);
//this.Conn = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
SqlCommand cmd = new SqlCommand();//创建数据库命令对象
cmd.Connection = conn;//执行命令需要的数据库连接
cmd.CommandText = "SELECT * FROM Grade where sno='" + textBox1.Text + "'";//数据库执行语句
SqlDataAdapter da = new SqlDataAdapter(cmd);//创建适配器
DataSet ds = new DataSet();//填充数据集
da.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];//绑定数据
textBox1.Text = "";
textBox1.Focus();
5.2.3成绩录入或修改
private void button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(DbUtil.ConnectString);
conn.Open();
SqlCommand cmd =new SqlCommand("delete from Grade where cno='" + textBox1.Text.Trim() + "'and sno='" + textBox2.Text.Trim() + "'",conn);
string SQL = "select * from Grade";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(SQL, conn);
da.Fill(ds, "Grade");
if (textBox1.Text.Trim() != "" || textBox2.Text.Trim() !="")
{
if(textBox3.Text.Trim() != "" || textBox4.Text.Trim()!="")
{
cmd.ExecuteNonQuery();
conn.Close();
DataTable table = ds.Tables["Grade"];
DataRow row = table.NewRow();//增加新数据行
TextBox[] data = new TextBox[] { textBox1, textBox2, textBox3, textBox4 };
int index = 0;
foreach (DataColumn column in table.Columns)
row[column] = data[index++].Text.Trim();
table.Rows.Add(row);//将新数据行添加到数据表中
dataGridView1.DataSource = table;//显示结果
SqlCommandBuilder builder = new SqlCommandBuilder(da);
da.Update(table);//将更改后的结果更新回数据源
conn.Close();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox1.Focus();
//DataSet.AcceptChanges();
MessageBox.Show("成绩录入或修改成功,请点击“录入或修改”按钮刷新并继续");
//DataSet.rej;
}}}
5.2.4选课
private void button1_Click_1(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.RowCount; i++)
{
if (dataGridView1.Rows[i].Cells[4].Value != null)
{
if (dataGridView1.Rows[i].Cells[4].Value.ToString() == "True")
{
SqlConnection conn = new SqlConnection(DbUtil.ConnectString);
string SQL = "select sno from Student where sname = '" + stuNum + "'";
conn.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(SQL,conn);
da.Fill(ds, "Student");
short valu =(short) ds.Tables["Student"].Rows[0]["sno"];
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "insert into Grade(cno,sno) values('" + dataGridView1.Rows[i].Cells[0].Value.ToString() + "','" + valu + "')";
int val = cmd.ExecuteNonQuery();
if (val > 0)
MessageBox.Show("选课成功");
else
if (conn.State == ConnectionState.Open)
conn.Close();
}
}
}
5.2.5修改密码
private void button1_Click_1(object sender, EventArgs e)
{
if (textBox1.Text.Trim() == textBox2.Text.Trim())
{
SqlConnection conn = new SqlConnection(DbUtil.ConnectString);
//this.Conn = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "update UserInfo SET UserPsw='" + textBox1.Text.ToString().Trim() + "' where UserName='"+psw+"'";
int val = cmd.ExecuteNonQuery();
if (val > 0)
{
MessageBox.Show("修改密码成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
else
MessageBox.Show("修改密码失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
if (conn.State == ConnectionState.Open)
conn.Close();
}
else if (textBox1.Text != textBox2.Text)
{
MessageBox.Show("错误!两次输入的密码不一致,请重新输入", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
textBox1.Text = "";
textBox2.Text = "";
textBox1.Focus();
} }
6设计总结
一个系统开发的过程中编码不是重要的,重要的是分析系统、建立起系统模型。在分析一个系统前,分析人员必须要对将要开发的系统所涉及到的各方面知识有一个认识,然后将系统的模型建立起来。而且一个成功的软件要符合用户的需要,要以用户为中心,开发出用户想要的软件,而不能自以为是、想当然的做。
在程序编写中,我认识到软件要有简便的界面,良好的程序风格。拥有这些条件,程序的可读性才会好,开发的复杂度才能大大减少,修改代码时更加容易下手。
我认为,所谓友好的界面,就是用户需要的界面,力求简便全面。所以设计一个界面时,开发人员必须要了解用户的想法,从用户的角度去设计,当然,开发不能全听用户的意见,在详细分析了系统后,开发人员可以向用户提出一些修改的意见,在双方多次交流后定出程序所需的功能,以决定界面的实现。
在编码中,良好的编程风格与习惯是提高工作效率的一个重要方面,而且良好的编程风格与习惯也是使软件便于维护的基础。那如何是良好的编程风格与习惯呢?我认为主要是程序的模块化、必要的注释。所谓模块化就是使程序的功能实现分成多个单独的功能模块,而不能在一大段代码中实现多个功能,如果这样做,别的人是非常难读懂你的程序。必要的注释,显而易见是要在程序的编写中加入对程序的说明,原因就是为了别人能读懂你的程序,过一段时间后你自己还能读懂自己的程序。
7体会与收获
经过一周的时间,在老师的指导下和同学们的帮助下成功的做出了学生成绩管理数据库。通过在这个数据库中建立的四个表,继而在这四个表的基础上做出的添加记录、用查询语句来查看记录,添加字段,创建自定义数据类型等操作来巩固了我们对数据库基本原理和基础理论的理解,掌握数据库应用系统设计开发的基本方法,进一步,提高了我们运用所学知识的能力
回顾此次学生管理数据库课程设计,至今仍感慨颇多,的确,从理论到实践,在这一周的日子里,可以说是苦多于甜,但是可以学到很多东西,同时不仅可以巩固以前所学过的知识,而且学到了书本上所没有学到的知识。通过这次课程设计使我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学到的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和思考的能力。在设计的过程中遇到问题,这毕竟第一次做的,难免会遇到各种各样的问题,同时在设计的过程中也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不有够牢固,比如主键约束,添加字段,创建自定义类型的一些只看书觉得没有问题的,但一做具体的操作就发现了问题。
知识的获得是无止境的,只要想学,只要行动,没有什么会难倒我们的。回首这一周的课程设计,尝尽酸甜苦辣同时也谢谢老师对我们的不懈帮助,谢谢学校给了我们这一次实践的机会,也谢谢同学们的关怀,这些美好的回忆将是我一生最在的财富。
参考文献
[1]王珊 萨师煊. 数据库系统概论.北京:高等教育出版社 2006
[2]杨开英.数据库系统概论.武汉:武汉理工大学出版社 2003.11
[3]耿国华.数据结构.北京:高等教育出版社 2011
[4]孙明丽 王斌sql server 2005数据库系统开发北京:人民邮电出版社 2007
[5]杨冬青 马秀莉 唐世渭.数据库系统概念.北京:机械工业出版社 2004
[6]苗雪兰.数据库系统原理及应用教程[M].北京: 机械工业出版社 2005
[7]陈世洪.SQL SERVER 2005管理,开发及应用实例.北京:人民邮电出版社 2005
[8]姜代红.数据库原理及应用实用教程.北京:清华大学出版社 2010
[9]周明扬.Visual C++程序设计教程.北京:机械工业出版社 2004
[10]苗雪兰.数据库系统原理及应用教程[M].北京:机械工业出版社 2007