C#语言学生成绩管理系统
摘 要
此次的数据库程序设计主要的目的是对数据库系统原理的理论学习,通过上机的实践方式将理论知识与实践有效的结合在一起,从而进行巩固了所学的相关知识。在实验的过程中,我们主要是利用相关的数据库知识进行,创建数据库和创建相关表,并对相关表进行增删改查等相关操作的设定,还对有些用户进行权限的设定。通过这次实践有效的巩固了课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定的实际问题,为了建立一个关系数据库信息管理系统,必须的经过系统调研、需求分析等相关操作。
关键词:数据库,程序设计,操作
1引言
数据库原理及应用是计算机及其相关学科的一门重要的学科基础课程,也是计算机软件科学与技术的重要分支。本课程设计的目的在于通过对一个小型数据库管理系统的综合设计过程,强化学生对于计算机系统软件的设计能力,提高学生的综合素质,并进行通过课程设计进一步加强学生对于所学的知识进行理解,以及对数据库的全面、深刻认识。通过我们所学的知识来完成相关的课程设计。
2学生成绩管理系统
2.1学生成绩管理系统的需求分析
2.2学生成绩管理系统的基本E-R图
2.3 简单介绍本系统实现内容
该学生成绩管理系统,实现简单的用户信息修改、数据管理,数据查询,并能实现简单的数据统计。
(1) 用户密码登录界面
在界面上会出现两个选择项,管理员登录和老师学生登录。如果用户是管理员则进入下一个管理员登陆界面,进行输入账户密码,然后就进入查询界面;如果选择的老师学生登陆系统则就会跳入下一个界面进行填写账号,密码,选择你的登录身份是老师还是学生,如果选择的身份是老师,就进入老师查询界面;如果选择学生就进入学生的查询界面。
(2) 查询界面
这个界面主要是进行调用数据库里面事先建立学生成绩表,所以在由管理员或老师进行查询时直接进行调用。
2.4 数据库逻辑结构
数据关系模型:
在本课程设计中,存在六个实体(学生,教师,管理员,成绩,密码表一,密码表二),一个联系(查询),在学生实体中,学号作为其关键字;在教师的实体中,教师的工号作为其主码;在管理员的实体中,管理员的工号作为主码;在成绩的实体中,学生的学号作为它的主码;
其中两个密码表的实体中,账号作为他们的关键字。
学生(学号,姓名,性别,年龄)
管理员(工号,姓名,性别,联系方式)
老师(工号,姓名,性别,课程名,联系方式)
学生(学号,姓名,性别,系名,班级号码,联系方式)
密码表一(账号,密码)
密码表二(账号,密码)
我们采用卡片的形式书写数据字典,每一张卡片上保存描述一个数据元素的信息,这种做法较好的实现了上述要求,特别是更新修改起来很方便,能够单独处理每个数据元素的信息,描述,定义,位置。
教师基本信息表:
学生成绩基本信息表:
学生基本信息表:
管理员的基本信息表:
密码表一的基本信息表:
密码表二的基本信息表:
建立信息系学生的试图,并要求进行修改和插入操作时,仍需要保证有信息系的学生。从六个表中进行选择学生证所需信息,以便对试图以外的数据进行保密,简化了查询操作,并保证了数据的逻辑独立性。
源代码如下:
create view IS_student
AS
select sno,sname,ssex
from student
where sdept = IS
with check option
--建立教师表中的课程为高等数学的试图
create view teacher_S1(tnumber,tname,tcourse)
as
select teacher.tnumber,tname,tcourse
from teacher,grade
where teacher.tcourse = grade.scourse and
tcourse = 高等数学
在进行查询的过程中进行设定权限,使得每个角色进行的操作都是不一样的,就像管理员能够拥有所有的权限,能够进行访问所有的表,老师的权限比管理员的权限少可以仅可以查询老师表,学生表和成绩表;而学生的权限只能进行查询成绩表。
源代码如下:
/创建教师并且分配权限/
create role 老师一
create role 老师二
create role 老师三
create role 老师四
grant select,update,insert,delete
on grade
to 老师一,老师二,老师三,老师四
grant update
on enter1
to 老师一,老师二,老师三,老师四
/创建学生并且分配权限/
create role 学生一
create role 学生二
create role 学生三
create role 学生四
grant select
on grade
to 学生一,学生二,学生三,学生四
grant update
on enter2
to 学生一,学生二,学生三,学生四
/创建管理并且分配权限/
create role 管理一
grant select,update,insert,delete
on grade
to 管理一
grant select,update,insert,delete
on teacher
to 管理一
grant select,update,insert,delete
on student
to 管理一
grant select,update,insert,delete
on enter1
to 管理一
grant select,update,insert,delete
on enter2
to 管理一
--删除触发器
drop trigger tri_update_Grade
--建立触发器,在修改表grade时进行响应
create trigger tri_update_Grade
on grade for update
as
print the table was updated
--建立触发器,在修改表password1时进行响应
create trigger tri_update_password1
on enter1 for update
as
print the table was updated
--建立触发器,在修改表password2时进行响应
create trigger tri_update_password2
on enter2 for update
as
print the table was updated
--建立触发器,在修改表eacher时进行响应
create trigger tri_update_teacher
on teacher for update
as
print the table was updated
--建立触发器,在修改表student时进行响应
create trigger tri_update_student
on student for update
as
print the table was updated
--建立触发器,在修改表leader时进行响应
create trigger tri_update_leader
on leader for update
as
print the table was updated
--建立触发器,禁止删除分数低于60分的学生
create trigger tri_del_grade
on grade for delete
as
if exists(select *
from SC
where grade < 60)
rollback
3 结论
通过设计本次的数据库程序,帮助我们充分的理解我们所学的数据库操作系统的相关知识,也进行了巩固这些知识。这次的实践课题围绕着我们学生的学习日常,可以让我们所学的数据库知识更加贴近我们的生活,从而体现了数据库知识对现实生活的作用,进而使我们更加深入的了解数据库操作系统和提高我们对数据库的学习兴趣。在这次实习的过程中我们也对学生的成绩查询系统进行了更加充分的了解,能够更加全面的知道成绩查询系统与数据库之间的联系,提高我们的相关知识和促进我们对数据库的学习。
在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费力的事情,因此分析和规划代码是很重要的,最重要的要把逻辑结构写好,这样就不会出现大问题,写代码就要先找到核心的内容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。
通过这次程序设计,让我初步的学会了如何去整理和处理相关的知识,进一步的提升自己的学习能力,由于知识不足,这个程序编写的不是很尽如人意,但融入了自己的心血,就觉得是最好的,所以在以后还是需要较多的努力的,还是会在以后的学习过程中不断提高和改进。
参考文献
【1】 萨师煊 王珊.数据库系统概论[M].北京:高等教育出版社,2000.2
【2】 求是科技 Delpji7数据库开发技术与工程实践 [S].北京:人民邮电出版社,2004.4
【3】 施伯乐.数据库系统教程[M].北京 高等教育出版社 2008.
【4】 程志云.数据库原理与SQL Serever2005应用教程[M].北京 机械工业出版社 2006.
【5】 苗雪兰.数据库技术及应用[M].北京 机械工业出版社 2006.
【6】 李春葆,曾平.数据库原理与应用[M]. 北京 清华大学出版社 2006.
【7】 王小玲.数据库应用基础教程[M].北京 中国铁道出版社 2008.
附 录
数据库
--创建密码表
CREATE TABLE enter1
(
id CHAR(20)PRIMARY KEY,
password CHAR(40) NOT NULL
);
--创建密码表
CREATE TABLE enter2
(
id CHAR(20)PRIMARY KEY,
password CHAR(40) NOT NULL
);
--创建学生表
CREATE TABLE student
(
sno CHAR(20) PRIMARY KEY,
sname CHAR(10),
ssex CHAR(4) NOT NULL,
sdpt CHAR(20) NOT NULL,
sclass CHAR(50),
sphone CHAR(30),
);
--创建教师表
CREATE TABLE teacher
(
tnumber CHAR(20) PRIMARY KEY ,
tname CHAR(10),
tsex CHAR(10)
tcourse CHAR(10
tphone CHAR(10),
);
--创建成绩表
CREATE TABLE grade
(
sno CHAR(20) PRIMARY KEY ,
sname CHAR(10),
sdept CHAR(10),
scour CHAR(10),
sgrade CHAR(10),
);
--创建管理员表
CREATE TABLE leader
(
lnumber CHAR(20) PRIMARY KEY ,
lname CHAR(10),
lsex CHAR(10),
lphone CHAR(10),
);
--权限设置
create role 老师一;
create role 老师二;
create role 老师三;
create role 老师四;
grant select,update,insert,delete
on grade to 老师一,老师二,老师三,老师四;
grant update
on enter1 to 老师一,老师二,老师三,老师四;
create role 学生一;
create role 学生二;
create role 学生三;
create role 学生四;
grant select
on grade to 学生一,学生二,学生三,学生四;
grant update
on enter2 to 学生一,学生二,学生三,学生四;
create role 管理一;
grant select,update,insert,delete
on grade to 管理一;
grant select,update,insert,delete
on teacher to 管理一;
grant select,update,insert,delete
on student to 管理一;
grant select,update,insert,delete
on enter1 to 管理一;
grant select,update,insert,delete
on enter2 to 管理一 ;
--触发器
drop trigger tri_update_Grade
create trigger tri_update_Grade
on grade for update
as
print 'the table was updated';
create trigger tri_update_password1
on enter1 for update
as
print 'the table was updated' ;
create trigger tri_update_password2
on enter2 for update
as
print 'the table was updated';
create trigger tri_update_teacher
on teacher for update
as
print 'the table was updated';
create trigger tri_update_student
on student for update
as
print 'the table was updated';
create trigger tri_update_leader
on leader for update
as
print 'the table was updated';
create trigger tri_del_grade
on grade for delete
as
if exists(select *
from SC
where grade < 60)
rollback
;
后台
private void Form2_Load(object sender, EventArgs e)
{
string _sql = "select tnumber as'tnumber',tname as'tname',tsex as'tsex',tcourse as'tourse',tphone as'tphone'from teacher";
SqlConnection conn = new SqlConnection(connStr);
SqlDataAdapter sda = new SqlDataAdapter(_sql, conn);
DataSet ds = new DataSet();
sda.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;
}
private void MakeSqlStr()
{
//清空上次查询的字符串
sql= "";
if (textBox1.Text.Trim() != string.Empty)
{
sql = "and tnumber like '%" + textBox1.Text.Trim() + "%'";
}
}
private void button1_Click(object sender, EventArgs e)
{
Form5 f5 = new Form5();
f5.Show();
this.Close();
}
private void button2_Click(object sender, EventArgs e)
{
string sql = "select count (*) from enter1 where id=@id and password=@password";
SqlCommand Mycomm = new SqlCommand(sql,connStr);
SqlParameter para1 = new SqlParameter("@id", SqlDbType.NVarChar, 20);
para1.Value = textBox1.Text.Trim();
SqlParameter para2 = new SqlParameter("@password", SqlDbType.NVarChar, 10);
para2.Value = textBox2.Text.Trim();
Mycomm.Parameters.Add(para1);
Mycomm.Parameters.Add(para2);
connStr.Open();
int i = Convert.ToInt32(Mycomm.ExecuteScalar());
connStr.Close();
if (i > 0)
{
// Choose chooseForm = new Choose();
//chooseForm.Show();
Form3 f3= new Form3();
f3.Show();
this.Close();
}
else
{
MessageBox.Show("id或密码错误,请重新输入");
}
}