资源描述
洛 阳 理 工 学 院
课 程 设 计 报 告
课程名称 高级语言C#课程设计
设计题目 学生信息管理系统
专 业 计算机科学和技术
班 级 B130506
学 号 B13050624
姓 名 张葵
完成日期 .12.31
课 程 设 计 任 务 书
设计题目: 学生信息管理系统
教务员能够输入学生、老师、班级、课程信息,一个班级只属于一个专业,一个学生只属于一个班级。教务员负责输入每个专业、每个班级需要学习哪些课程,指定课程任课老师。一个老师能够教授多个班多门课程。
老师能够查看学习该课程学生名单。课程结束后,老师能够录入课程成绩。
课程分两类,必修课和选修课。学生能够选修课程,每学期几门。学生能够查看自己各门课程成绩。学生还能够进行评教,给老师打分。
系统管理员能够输入教室信息,并结合班级、课程、教室信息实现自动排课。
指导老师: 张文学
年 12 月 27 日
课 程 设 计 评 语
成绩:
指导老师:_______________
年 12 月 31 日
目录
第 1 章 需求和可行性分析 3
1.1需求分析 3
1.1.1 功效需求 3
1.1.2性能需求 3
1.2可行性分析 4
1.2.1 技术可行性 4
1.2.2 经济可行性 4
第2章 系统设计概述 5
2.1 整体设计概述 5
2.1.1 设计步骤 5
2.1.2 设计思绪 6
2.2 功效模块介绍 6
2.2.1 学生信息模块 6
2.2.2 老师模块 7
2.2.3 教务员模块 8
2.2.4管理员登录 9
第3章 数据库搭建和实现 10
3.1数据库设计概述 10
3.2 E-R图设计 10
3.3 数据库表创建 12
3.3.1学生表创建 12
3.3.2 老师表创建 13
3.3.3 课程表创建 13
3.3.4成绩表创建 14
3.4存放过程创建 14
3.4.1 分配班级存放过程 14
3.4.2 班级信息存放过程 15
3.4.3 学生课程存放过程 15
3.4.4学生成绩存放过程 16
第4章 C#高级语言实现 17
4.1概述 17
4.2数据库连接 17
4.3 开始界面设计 18
4.4系统管理员 18
4.4.1 登录功效和界面 18
4.4.2 管理员显示界面 21
4.5学生功效介绍和实现 26
4.5.1 登录界面和功效实现 26
4.5.2 学生用户界面 27
第5章 结论 29
第6 章 谢辞 30
参考文件 31
第 1 章 需求和可行性分析
1.1需求分析
学生信息管理系统是一个教育单位不可缺乏部分,它内容对于学校决议者和管理者来说全部至关关键。学校管理人员能够经过电脑对学生信息进行有效管理,避免了以往人工管理复杂和耗时费力劳动,也大大能够降低管理人员工作量,能够有效节省学校开支。
1.1.1 功效需求
作为一个学生信息管理系统,必需要有管理人员能够进行对学生信息进
行有效管理,所以,系统必需预留一个管理员登录窗口和登录以后所能进行操作,在学生信息管理系统中,管理员含有最高权限,能够对学生、老师、班级、专业等等进行添加、删除、修改个查询。除了拥有管理员之外,还应该拥有教务处对学生进行管理,比如:对学生课程,成绩等等含有一定权限。另外,还应该有老师一个权限,老师在带完一门课以后能够对学生进行一个成绩录入和平时部署作业功效。最终是学生自己拥有功效,学生在考试结束后能够利用系统登录自己账户对成绩进行查询。
1.1.2性能需求
在学生信息管理系统中,要明确各类用户所能拥有最高权限,假如一旦权限问题搞错以后,整个系统就会变得没有价值。比如:学生只有对成绩查询功效,而不能对成绩拥有修改和删除和插入功效。老师只能够对学生进行成绩录入和平时部署作业,而不能删除学生个人信息等权限。
要设置不一样异常机制,这么不会因为用户错误操作而使得系统瞬时奔溃。我们要在代码中设置不一样异常抛出机制,这么就能够使得用户在进行了错误或违反规则操作以后,系统不会出现忽然停止运转。
1.2可行性分析
伴随计算机语言和数据服务不停发展,使得很多现实问题全部能够利用计算机来帮助人类实现轻巧,方便管理。在教育上,学生是一个庞大群体,所以技术人员早早就开始想措施处理这个问题,所以,现在对于学生信息管理多种语言全部能够编写出一套完整、可用学生信息管理系统。
1.2.1 技术可行性
在这套系统开发中,采取是开发语言是C#,软件是Visio Studio,C#是微软对问题处理方案。C#是一个最新、面向对象编程语言。它使得程序员能够快速地编写多种基于Microsoft .NET平台应用程序,Microsoft .NET提供了一系列工具和服务来最大程度地开发利用计算和通讯领域。
正是因为C#面向对象卓越设计,使它成为构建各类组件理想之选--不管是高级商业对象还是系统级应用程序。使用简单C#语言结构,这些组件能够方便转化为XML 网络服务,从而使它们能够由任何语言在任何操作系统上经过Internet进行调用。
最关键是,C#使得C++程序员能够高效开发程序,而绝不损失C/C++原有强大功效。因为这种继承关系,C#和C/C++含有极大相同性,熟悉类似语言开发者能够很快转向C#。
数据库采取是SQL ServerR2,这个SQL数据库版本是微软企业推出针对微软用户一个关系型数据库,语言简单,实用。和Visio Studio 结合相对简单实用。
1.2.2 经济可行性
现在伴随互联网络、计算机技术发展,数字城市成为目前热点话题。同时在国家政策给大力支持条件下,这些技术热点给社会产生了极大影响,不仅给生活、学习和管理带来了新体验,同时也带动了经济增加。
学生管理系统使用比较简单C#语言开发,而且现在中国学校和教育机构众多,很多地方全部需要用到这套学生信息管理系统,所以学生信息管理系统含有宽广市场前景和发展动力。
第2章 系统设计概述
2.1 整体设计概述
这套学生信息管理系统意在为用户提供愈加有效、方便和快捷学生管理系统。本套系统在结构上由数据库和高级语言两部分组成,数据库部分负责此套系统所要用到全部数据库表创建和所用到存放过程创建。C#部分是具体设计UI界面和具体逻辑实现,用户能够经过在自己电脑上点击UI上控件进行操作。
2.1.1 设计步骤
图 1 整体设计思绪图
2.1.2 设计思绪
这套学生信息管理系统是由数据库和业务逻辑层和UI层三部分组成,用户在UI层上进行操作,数据经过业务逻辑层数据传至数据库,对数据库中数据进行修改,在用户需要用到数据库中数据时,数据会从数据库中提出经过业务逻辑层上传至UI层,以供用户查阅和进行其它操作。业务逻辑层关键负责工作就是将UI传来数据进行分析,而且做出判定,然后依据判定出结果进行对数据库访问。数据库关键任务就是为系统提供数据存放。
2.2 功效模块介绍
以下会对本套系统中关键模块做一个简单介绍和分析。
2.2.1 学生信息模块
学生模块关键功效是对自己成绩能够有效进行查询和能够对老师做出有效评价在学期末。
每个学生只能够对自己成绩进行有效查询,在登录自己账户以后,其它同学成绩是不可见,这么也是起到了一个隐私保护作用,而且学生在登录自己账户以后没有成绩修改和添加和删除功效。
图2 学生用户登录
2.2.2 老师模块
老师在使用该系统时,关键任务是向学生下达作业任务和在期末考试结束以后给给学生录入成绩,使得学生能够经过自己账户登录该系统以后能够看到自己成绩。在录入成绩以后不能对学生成绩进行修改。
图3 老师用户登录
2.2.3 教务员模块
教务员使用该套系统关键目标是对教室进行管理,和能够依据各个班级具体课程情况对班级进行排课。
图 4 教务员登录
2.2.4管理员登录
管理员是此套系统拥有最高权限,她能够添加学生、老师和教务员信息,和进行修改和删除等等。
图 5 管理员登录
第3章 数据库搭建和实现
3.1数据库设计概述
数据库在现代系统开发中,起到了很关键作用。数据库能够对数据起到一个长久保留效果,而且能够利用终端随时随地经过网络来访问服务器,进而访问数据库,找到自己想要数据和信息。
3.2 E-R图设计
ER图在设计数据图时候起到了很关键作用,能够从ER图中清楚看到各个对象之间关系和它含有属性,所以,在创建数据库时候会愈加方便和得心应手。
图 6 学生ER图
图7 老师ER图
图 8 教务员ER图
图 9管理员ER图
图 10 班级ER图
图 11 课程ER图
图12 成绩ER图
3.3 数据库表创建
数据库中数据全部是经过表来进行存放,所以,要将数据存放到数据库中,必需将表结构进行合理化设计,ER图为表创建提供了良好理论支撑,现在在建表时候要考虑是数据存放大小,我们现在采取能够变换大小varchar()类型进行存放,这么不会造成内存无故浪费。
图 13 整体表创建
3.3.1学生表创建
学生表中关键是学生部分属性,比如学生学号,姓名,年纪和性别等等,在学生管理系统中,学号作为该表主键,设计以下:
图14 学生表创建
3.3.2 老师表创建
老师表中也是老师部分属性,比如教工号、姓名和教室名等等,教工号为主键,设计以下:
图 15 老师表创建
3.3.3 课程表创建
在课程表中,属性是相关课程部分信息,比如课程号、课程名和该课程课时和学分。课程号是主键,设计以下:
图16 课程表创建
3.3.4成绩表创建
在创建完学生表和课程表以后,需要一个成绩表来显示学生成绩信息,成绩要和学生个人和课程能够匹配上,在这里,需要设置学号和课程号为主键,而学生表中学号和课程表中课程号全部是外键,设计以下:
图17 成绩表创建
3.4存放过程创建
在使用数据库时候有时候不是一个表所能完成一项任务,我们往往会采取存放过程进行多表结合使用,比如:要查询某个专业下某个年级某个班一位同学信息而且把这些信息显示出来,这么就会包含到专业表、年级表、班级表和学生表。所以,在这个时候我们需要将多表进行结合使用,这里就会使用到存放过程。在本套系统中,我采取了多个存放过程来对学生信息进行管理。
图18 整体存放过程
3.4.1 分配班级存放过程
在分配班级时候要用到班级和专业两个表,所以要经过这两个表进行分配,从而确定某一个班是属于哪一个专业,代码以下:
USE [student_admin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CLASS_CHOOSE]
@pro varchar(20), @cla varchar(20)
as
select professional.专业名,class.班级号,course.课程名,course.课时数,course.学分
from professional,course,class
where professional.专业号 = class.专业号 and professional.专业名 = @pro and class.班级号 = @cla
3.4.2 班级信息存放过程
查询某一个班级信息功效,这个功效函数既能够在数据库中用存放过程实现也能够在C#中经过语言逻辑来实现,在这套系统中,我采取是利用在数据库中建立了通常班级信息存放过程来实现,在C#中经过调用该存放过程,然后向其中传输一个参数就能够实现。代码以下:
USE [student_admin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[class_message]
@classno varchar(20)
as
select 班级号,专业名,班主任,班长,人数
from class
where 班级号 = @classno
3.4.3 学生课程存放过程
学生课程信息不仅仅包含了学生类,而且还包含了课程类,我们需要将这两个表进行有效结合进行使用,在这套系统中我采取是利用在数据库中建立一个学生课程存放过程来显示学生课程信息,预留一个输入参数—学生学号,能够利用学号就能够查询到该学生课程信息。代码以下:
USE [student_admin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[student_course]
@courseno varchar(20)
as
select student.学号,student.姓名,student.班级号,course.课程名,grade.分数
from student,course,grade
where student.学号 = grade.学号 and course.课程号 = grade.课程号 and 课程名 = @courseno
3.4.4学生成绩存放过程
在学生管理系统中,很关键一环就是学生能够查看自己成绩,在这套系统中,采取也是在数据库中建立一个相关学生存放过程,是根据学号进行查询,在C#中,调用该存放过程,输入一个学号参数,便能够查询该学生成绩信息,预防查询了其它人成绩,起到隐私保护作用。代码以下:
USE [student_admin]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[student_grade]
@student_id varchar(20)
as
select student.学号,student.姓名,course.课程名,grade.分数, choose.选课名,grade.选修分数
from student,course,grade,choose
where student.学号 = grade.学号 and choose.选课号 = grade.选课号 and student.学号 = @student_id
第4章 C#高级语言实现
4.1概述
在数据库进行完设计以后,就要使用C#这种高级语言将她真正能够和用户产生联络,用户接触到是UI层面,所以我们任务就是经过UI层进行数据传输到业务逻辑层然后进行数据转化和业务逻辑实现。
4.2数据库连接
在本套系统中,连接数据库我采取是利用数据源来连接数据库,这么就能够将连接数据库字符串和commod全部封装在数据源中,为每个表全部创建好数据源和数据适配器,这么能够降低代码量,而且也会使得程序变得简练明了,在使用一个数据库中某一个表时候只需要创建一个该表数据适配器和一个共有dataset即可。关系图以下:
图19 数据源图示
4.3 开始界面设计
开始界面关键是让用户选择自己身份类型进行系统登录。假如用户选择是系统管理员登录方法,系统会自动进行页面跳转,跳转到系统管理员登录界面。
图 20 登录类型选择
4.4系统管理员
4.4.1 登录功效和界面
登录界面关键是让用户输入账号和密码进行登录,界面风格是一致,只是经过调用不一样数据库信息进行不一样登录。
图21 登录界面
用户在输入账号和密码时候,系统会调用数据中对应表进行查看是否和表中数据匹配,假如匹配则能够登录成功,不然不成功。假如登录成功,该账号和密码会被统计到当地文件中进行存放,以此达成下次登录时快捷和方便,代码以下:
private void button1_Click(object sender, EventArgs e)
{
//登Ì?录?到Ì?管¨¹理¤¨ª员¡ÀÌ?界?面?
string name = null;
string pass = null;
StringBuilder sname = new StringBuilder("管¨¹理¤¨ª账?号?='");
sname.Append(comboBox1.Text);
sname.Append("'");
if (comboBox1.Text != "")
{
try
{
DataRow[] row = table1.Select(sname.ToString());
row1 = row[0];
name = row1[0].ToString();
pass = row1[2].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
if (name == comboBox1.Text)
{
// MessageBox.Show(name);
if (textBox1.Text == pass)
{
//进?入¨?管¨¹理¤¨ª员¡ÀÌ?后¨®台¬¡§
admin_show a = new admin_show();
a.Show();
if (checkBox1.CanFocus)
{
if (File.Exists(txt))
{
String[] ss = { name, pass };
File.WriteAllLines(txt, ss);
}
else
{
File.Create(txt);
}
}
else
{
String[] ss = { "", "" };
File.WriteAllLines(txt, ss);
}
}
else
{
MessageBox.Show("没?有®D此ä?管¨¹理¤¨ª员¡À");
}
}
else //学¡ì生¦¨²进?入¨?
{
MessageBox.Show("账?号?和¨ª密¨¹码?不?匹£¤配?");
// label4.Text = "账?号?和¨ª密¨¹码?不?匹£¤配?,ê?请?重?新?输º?入¨?";
}
}
else
{
MessageBox.Show("请?输º?入¨?账?号?");
}
}
4.4.2 管理员显示界面
在管理员登录自己账号以后,能够对学生、老师、课程和班级进行查询,添加、删除、修改和保留。这套系统中,能够依据学号和姓名进行查找,输入学号或姓名,会深入调用数据库进行查询,假如数据库中有该组员信息,则会被现实在右边显示框中,在datagaridview中显示是该类组员全部数据信息。
在管理员查到组员信息以后,能够依据现在情况进行对组员信息进行对应操作,比如:有一个学生退学,管理员能够查询到该生以后将该生信息进行删除。假如有一个老师登录密码忘记了,管理员能够登录系统进行对该老师密码一个重置。
图22 管理员查询学生信息
根据学号查询学生信息代码以下:
private void button3_Click(object sender, EventArgs e)
{
//按ã¡ä学¡ì号?查¨¦找¨°
//StringBuilder stringBuilder = new StringBuilder();
if (comboBox1.Text.Length!=0)
{
DataRow[] row = dataset.Tables["student"].Select("学¡ì号?='" + comboBox1.Text.Trim()+"'");
try
{
datarow1 = row[0];
textBox5.Text = datarow1[0].ToString();
textBox6.Text = datarow1[1].ToString();
textBox7.Text = datarow1[2].ToString();
textBox8.Text = datarow1[3].ToString();
textBox9.Text = datarow1[4].ToString();
textBox10.Text = datarow1[5].ToString();
textBox11.Text = datarow1[6].ToString();
textBox12.Text = datarow1[7].ToString();
textBox13.Text = datarow1[8].ToString();
}catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
根据姓名查询学生信息代码以下:
private void button4_Click(object sender, EventArgs e)
{
//按ã¡ä姓?名?查¨¦找¨°
if (textBox1.TextLength != 0)
{
StringBuilder name = new StringBuilder("姓?名?='");
name.Append(textBox1.Text);
name.Append("'");
DataRow[] row = st_table.Select(name.ToString());
try
{
String str = row[0].ToString();
// DataRow[] row = dataset.Tables["admin"].Select(("姓?名?=" + textBox8.Text).ToString());
datarow1 = row[0];
textBox5.Text = datarow1[0].ToString();
textBox6.Text = datarow1[1].ToString();
textBox7.Text = datarow1[2].ToString();
textBox8.Text = datarow1[3].ToString();
textBox9.Text = datarow1[4].ToString();
textBox10.Text = datarow1[5].ToString();
textBox11.Text = datarow1[6].ToString();
textBox12.Text = datarow1[7].ToString();
textBox13.Text = datarow1[8].ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
添加学生信息代码:
private void button5_Click(object sender, EventArgs e)
{
//添¬¨ª加¨®
DataRow row = st_table.NewRow();
if (textBox5.Text == "")
row[0] = DBNull.Value;
else
row[0] = textBox5.Text.Trim();
if (textBox6.Text == "")
row[1] = DBNull.Value;
else
row[1] = textBox6.Text.Trim();
if (textBox7.Text == "")
row[2] = DBNull.Value;
else
row[2] = textBox7.Text.Trim();
if (textBox8.Text == "")
row[3] = DBNull.Value;
else
row[3] = textBox8.Text.Trim();
if (textBox9.Text == "")
row[4] = DBNull.Value;
else
row[4] = textBox9.Text.Trim();
if (textBox10.Text == "")
row[5] = DBNull.Value;
else
row[5] = textBox10.Text.Trim();
if (textBox11.Text == "")
row[6] = DBNull.Value;
else
row[6] = textBox11.Text.Trim();
if (textBox12.Text == "")
row[7] = DBNull.Value;
else
row[7] = textBox12.Text.Trim();
if (textBox13.Text == "")
row[8] = DBNull.Value;
else
row[8] = textBox13.Text.Trim();
try
{
st_table.Rows.Add(row);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
修改学生信息代码以下:
private void button6_Click(object sender, EventArgs e)
{
//修T改?
try
{
if (textBox5.Text == "")
datarow1[0] = DBNull.Value;
else
datarow1[0] = textBox5.Text.Trim();
if (textBox6.Text == "")
datarow1[1] = DBNull.Value;
else
datarow1[1] = textBox6.Text.Trim();
if (textBox7.Text == "")
datarow1[2] = DBNull.Value;
else
datarow1[2] = textBox7.Text.Trim();
if (textBox8.Text == "")
datarow1[3] = DBNull.Value;
else
datarow1[3] = textBox8.Text.Trim();
if (textBox9.Text == "")
datarow1[4] = DBNull.Value;
else
datarow1[4] = textBox9.Text.Trim();
if (textBox10.Text
展开阅读全文