数据库技术课程设计
题目: 姓名:
学号:
班级:
时间:
目 录
1. 需求分析 .................................................................................................... 1
1
1.1仓库管理系统的功能分析 ........................................................................ 1
1.2仓库管理系统的功能图 ............................................................................ 2
2. 概念结构设计 ............................................................................................. 3
3. 逻辑结构设计 ............................................................................................. 5
4. 数据库设计 ................................................................................................. 5
4.1数据库和各表的创建 ................................................................................ 6
4.1.1数据表结构设计 ................................................................................. 6
4.1.2创建数据表SQL脚本 ........................................................................ 7
4.1.3数据表快照 ...................................................................................... 10
4.2系统功能实现 ........................................................................................ 13
5. 设计总结 .................................................................................................. 14
参考文献 ........................................................................................................ 15
2
仓库管理系统
摘要:仓库管理是与我们日常生活息息相关的问题,随着改革开放的不断深入,经济飞速的发展,企业要想生存、发展,要想在激烈的市场竞争中立于不败之地,没有现代化的管理是万万不行的,仓库管理的全面自动化、信息化则是其中极其重要的部分。仓库管理信息系统正是基于这样的需求背景下研制开发的。
本文按照软件工程思想和管理信息系统的开发步骤,设计并实现了一个仓库管理信息系统。以系统开发过程为主线,介绍了系统从需求分析,逻辑设计,总体设计,详细设计以及系统测试、实施各阶段的主要内容和成果,包括系统结构图、业务流程图、数据流程图、E-R模型、物理表实现及其关系、功能模块、界面设计等等。最后对实现系统的优缺点进行了分析,提出了今后进一步完善系统的方向和方法。
设计实现的管理系统能够正确有效地完成仓库管理的日常入库出库等工作,极大提高了管理工作的效率和正确性,并能够根据需求进行灵活的查询,完成数据查询等功能;系统与数据库管理系统结合,提供了功能较为强大的数据查询功能,防止了越权操作、误操作,;系统界面友好,操作简单,效率高易掌握。最后,该系统是典型的管理信息系统(MIS),其设计开发过程具有通用性,对类似工作的开展具有借鉴意义。
关键词:管理员;一般用户;进出货查询;修改;删除。
1. 需求分析
通过对武汉市部分超市仓库管理进行调研、分析开发本系统的目的在于代替手工管理、统计报表等工作,具体要求包括:
数据录入:录入商品信息、供货商信息、入库信息、出库信息等信息; 数据修改:修改商品信息、供货商信息、帐号等信息;
统计数据:统计仓库里面的商品的数量,种类;
数据查询:输入查询条件,就会得到想要的查询结果。
1.1仓库管理系统的功能分析
仓库管理系统的主要功能是:
1)业务处理
|- 出库登记
1
|- 入库登记
2)基本资料
|- 货品类别 |- 货品资料 |- 库存变动类型 |- 供货单资料
3)系统维护
|- 密码修改 |- 操作人员管理 |- 数据清理
4)统计报表
|- 货物入库报表 |- 货物出库报表
1.2仓库管理系统的功能图
根据以上需求分析,仓库管理系统功能如图1-1所示。
2
2.概念结构设计
仓库管理信息系统可以划分的实体有:货物信息实体、货物入库记录信息实体、货物出库记录信息实体,用E-R图一一描述这些实体。
1)货物信息实体及属性E-R图如图2-1所示:
3
2)货物入库记录信息实体及属性E-R图如图……
3)货物出库记录信息实体系统E-R图如图……
4
3.逻辑结构设计
对仓库管理系统E-R图分析,结合各实体属性E-R图,考虑各图之间的关系,本系统的逻辑关系结构根据用户的要求设计该仓库管理系统共使用了四张表,分别是商品信息表(Goods)、进出货类型表(Record)、员工信息表(User1)以及用户登陆信息表(Users)。(说明:“#”表示主键,下划线表示外键)
E-R图转换成关系模式。
User1 (员工号#, 姓名, 密码, 住址, 性别, 电话)
Goods (货号#,货名,单价,生产数量,生产商)
Record (货号,日期,用户名#,进出货产品数量,管理员) Users (用户名,密码#)
4.数据库设计
数据库管理系统选用SQL Server 2005,根据仓库管理系统的功能分析及逻辑关系模式在SQL Server中创建了一个名为“CKGL”的数据库,并在给数据库中一共创建了4张表,包括用户登录表、仓库数据表“Goods”、仓库出入信息表“Record”。在“Users”中包括2个字段,其中“用户名”字段用于存储用户注册及登陆的用户名;“密码”字段用于存储登陆的密码。在表“Goods”包括五个字段,其中“货号”字段用于存储货物的编号;“货名”字段用于存储货物的名称;“单价”字段用于存储货物的单价;“生产商”字段用于存储货物的生产商;“产品数量”字段用于存储货物的产品数量。在表“Record”中包括五个字段,其中,“日期”字段用于存储进出货日期;“货号”字段用于存储进出货货号;“产品数量”字段用于存储进出货产品数量;“用户名”字段用于存储进出货用户名;“进出货类型”字段用于存储进出货类型。在表“User1”中包括六个字段名,其中“员工号”字段用于存储员工工号;“姓名”字段用于存储员工姓名;“密码号”字段用于存储员工密码;“住址”字段用于存储员工住址;“性别”字段用于存储员工性别;“电话”字段用于存储员工电话。
4.1数据库和各表的创建
4.1.1数据表结构设计
1) 货物信息表:
5
2)货物出入库表:
3)员工信息表:
go
create table Users (
用户名 char(16), 密码 int ,
用户类型 varchar(10) ) go
insert into Users(用户名,密码,用户类型) values('Manager',123456,'System')
insert into Users(用户名,密码,用户类型) values('User',456789,'User')
go
create table User1
6
(
员工号 int ,
姓名 char(8),
密码 int references Users(密码),
住址 char(30),
性别 char(2),
电话 int
)
go
insert into User1(员工号,姓名,密码,住址,性别,电话)values(1001,'张三',123456,'湖北','男',1010110)
insert into User1(员工号,姓名,密码,住址,性别,电话)values(1002,'李四',123456,'湖北','男',1010120)
go
create table Goods
(
货号 int ,
货名 char(50),
单价 int,
生产商 char(100),
产品数量 int
)
go
insert into Goods(货号,货名,单价,生产商,产品数量)values(1,'红塔山香烟',10,'红塔山集团',200)
insert into Goods(货号,货名,单价,生产商,产品数量)values(2,'红星二锅头',3,'京酒厂',100)
insert into Goods(货号,货名,单价,生产商,产品数量)values(3,'六神花露水',4,'六神花露水厂',600)
go
create table Record
(
日期 datetime,
货号 int,
产品数量 int,
用户名 char(16),
进出货类型 char(4)
)
4.1.3数据表快照
上述脚本形成的表在SQL Server 2005中,如下图所:
7
8
各表间的关系图如图:
9
4.2系统功能实现
要实现需求分析中系统各功能,需要设计一些存储过程、触发器及相应的查询语句。…
1.添加仓库商品信息存储过程:
CREATE PROCEDURE 商品管理
@huohao int
AS
SELECT Goods.货号,货名,单价,生产商,产品数量
FROM Goods JION Recard ON Goods.货号=Recard.货号
WHERE 货号=@huohao
GO
10
2. 删除、更新仓库商品记录触发器:
CERATE TRIGGER CKGL ON Goods
FOR DELETE, UPDATE
AS
DECLARE @huohao int
SELECT @huohao=货号 FROM DELETE
SELETE @huohao=货号 FROM UPDATE
GO
5.设计总结
经过了这次仓库管理系统的课程设计我们团对从中学到了很多,同时明白了做一个小型软件的步骤和流程.如何让自己设计的软件运用到具体的实际工作中,这是一个关键的环节.还有就是程序设计和运行测试中遇到的问题该如何解决,从解决问题中我也学到了许多平时课本上所没有的知识.当然,能够完成这个仓库管理系统我们团队每个人很有成就感。
运用到的开发工具和软件技术:
此系统结合货物仓库管理的要求,对C#程序设计、SQL语言的学习和应用,主要完成货物仓库管理系统的需求分析,系统的数据库设计和实现,系统的表单设计,主控程序设计,并由此设计了数据库结构和应用程序。系统运行结果证明,我们团队设计的货物仓库管理系统基本可以满足仓库管理者完成仓库管理的日常工作,包括材料的入库,出库以及库存材料信息的管理维护等
软件还需要哪些改进:
在编写源程序代码的过程中对语言的运用还需要提高,应使写出来的程序更加简洁,易读懂,更加满足实际工作的需要.要想使做出来的程序更好的利用还需
11
根据实际需要在今后的运用中不断的改进和完善。我们的仓库管理系统还是有很多的缺陷,有很多的漏洞,在实际运用方面还是有一些欠缺,其中的有些环节还不是很明确,不是很系统,只是一些编写技术的拼凑,所以离实际运用还是有一些距离。但是一些的基本功能我们还是实现了的,只是细节上还有不足,需要我们再进一步学习的基础上,再去完善,再去改进。
我们的管理系统其中还是有优点的,其中的职能体现和仓库管理中应该出现的管理功能都有实现,货物的进出管理,管理人员的管理都有很细的划分,代码的编写完全按照写程序的要求去写的,因此,代码的编写没有任何问题,只是精简程度上还不够,所以在这方面我们会去改进,我相信通过以后更加系统的学习,我们的仓库管理系统会运用到实际中去。
参考文献
[1] H.E.S.Said.T.Tan and K.Baker.Personal identification based on
handwriting [J] .Pattern Recognition, 33:149-160, Jan. 2000
[2]王珊,萨师煊.数据库系统概论(第四版).北京:高等教育出版社,2006.5
[3] 高金兰.鲁立.数据库原理与SQL Server应用
[4]张跃廷,苏宇,贯伟红。ASP.NET程序开发范例宝典
12
目录
1. 设计目的和任务 ....................................................... 1
2.开发环境 .............................................................. 1
2.1硬件环境 ......................................................... 1
2.2软件环境 ......................................................... 1
3.设计题目 .............................................................. 1
3.1题目名称 ......................................................... 1
3.2题目详细描述 ..................................................... 1
3.3功能要求 ......................................................... 2
4.相关技术及知识点 ...................................................... 3
4.1 SqlConnection对象 ............................................... 3
4.2 SqlCommand对象 .................................................. 3
4.3 SqlDataAdapter对象 .............................................. 4
4.4 DataTable对象 ................................................... 4
4.5 DataSet对象 ..................................................... 5
5.设计与实现 ............................................................ 6
5.1登录界面 ......................................................... 6
5.2教师管理界面 ..................................................... 7
5.3管理员管理界面 .................................................. 12
5.4学生考试界面 .................................................... 14
6.总结 ................................................................. 18
7.参考资料 ............................................................. 19
《高级数据库技术(ADO.NET&XML)》课程设计报告
1.设计目的和任务
综合运用ADO.NET 相关知识,设计一个具有实用价值的学生考试管理系统。
(1)巩固和加深对本课程基本知识的理解和掌握;
(2)掌握C#编程和ADO.NET程序调试的基本技能;
(3)掌握设计ADO.NET应用软件的基本思路和方法;
(4)提高运用ADO.NET解决实际问题的能力;
(5)培养撰写设计报告的能力。
2.开发环境
2.1硬件环境
笔记本电脑
硬件概要
CPU
主板
内存
显卡
英特尔 Genuine Intel(R) CPU T2130 @ 1.86GHz Wistron - 英特尔 945PM (Calistoga-PM) + ICH7-M/U 金士顿 2G DDR2-SDRAM 666 MHz nVIDIA GeForce Go 7200 (G72) 希捷 120GB 英特尔 82801GB ICH7 - High Definition Audio [B0] 英特尔 PRO/Wireless 3945ABG Network Connection (HP - RoW) 主硬盘 声卡 网卡
2.2软件环境
Microsoft Windows XP操作系统;
Microsoft SQL Server 2005;
Microsoft Visual Studio 2005;
3.设计题目
3.1题目名称
学生考试管理系统
3.2题目详细描述
1、登录界面
-1-
《高级数据库技术(ADO.NET&XML)》课程设计报告
2、新用户注册
3、教师管理界面
4、管理员管理界面
5、学生在线考试
3.3功能要求
登录界面
功能:
1) 用户对应相应的权限进行登录,分教员、学生、管理员。登录后根据选择的 权限进入相应的界面;
2) 输入用户名框非空,密码框非空,权限选择判断;
3) 新学员用户注册。注册后需管理员激活才能登录。
教师管理界面
功能(按菜单项说明):
1) 试题管理,子菜单如下:
增加试题;
查询试题:按科目查询试题;
试题列表:按难度查询试题列表,并可增加、修改试题。
2) 考试管理,子菜单如下:
生成试卷;
试卷管理:查看试卷信息、激活/取消试卷。
3) 成绩管理,按试卷名查寻成绩。要算出平均分。
管理员管理界面
功能(按菜单项说明):
1) 用户管理,子菜单如下:
新建用户:新建学员用户,新建教员用户。
查询及修改学员。
用户信息列表,包括查询以及教员学员信息
2) 题库管理,管理试题库
学生在线考试
1) 维护个人信息 对个人信息进行查询, 修改
-2-
《高级数据库技术(ADO.NET&XML)》课程设计报告
2)在线答题。
功能:可以选择已激活试卷答题。
在线评分。
保存考试成绩可供教师查询。
4.相关技术及知识点
ADO.NET提供了多种对象模型,比较典型的以下有五种,它们全部归类System.Data.SqlClient名称空间下。
4.1 SqlConnection对象
ADO.NET使用SqlConnection对象与SQL Server进行连接。连接字符串的常用形式有两种:
1.使用Windows集成安全身份认证, 例如:string connectionString
="IntegratedSecurity=SSPI;Database=MySchool.mdf;Server=localhost;";
2.在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。 例如:string connectionString = "server=localhost; uid=sa; pwd=123;
database=MySchool.mdf";
然后通过连接字符串直接创建SqlConnection对象,如SqlConnection conn = new
SqlConnection(connectionString);
4.2 SqlCommand对象
在ADO.NET中,有两种操作数据库的方式:
1.无连接的方式;
2.保持连接的方式。
不论哪种都可以通过SqlCommand对象提供的方法传递对数据库操作的命令,并返回命令执行结果。 在保持连接的方式下操作数据库的一般步骤为:
1.创建SqlConnection的实例;
2.创建SqlCommand的实例;
3.打开连接;
4.执行命令;
5.关闭连接。
SqlCommand对象提供了多种完成对数据库操作的方法。常用有:
-3-
《高级数据库技术(ADO.NET&XML)》课程设计报告
1.ExecuteNonQuery
该方法执行SQL语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。
2.ExecuteReader
ExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。
3.ExecuteScaler()
该方法用于执行SELECT查询,得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
4.3 SqlDataAdapter对象
SqlDataAdapter对象通过无连接的方式完成数据库和本地DataSet之间的交互。使用这种方式操作数据库的一般步骤为:
1.创建SqlConnection的实例;
2.创建SqlDataAdapter的实例,需要的话,根据select语句生成其他SQL语句;
3.创建DataSet的实例;
4.使用Fill方法将数据库中的表填充到DataSet的表中;
5.利用DataGridView或者其他控件对象编辑或显示数据;
6.需要的话,使用Update方法更新数据库。
SqlDataAdapter对象通过SelectCommand、InsertCommand、UpdateCommand和DeleteCommand属性为后台数据库提供对应的操作命令,并传递需要的参数。一般情况下,只需要提供SELECT语句和连接字符串创建SqlDataAdapter对象,然后利用SqlCommandBuilder对象生成InsertCommand、UpdateCommand和DeleteCommand属性。
4.4 DataTable对象
ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。DataTable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。可以直接将数据从数据库填充到DataTable对象中,也可以将DataTable对象添加到现有的DataSet对象中。在断开连接的方式下,DataSet对象提供了和关系数据库一样的关系数据模型,代码中可以直接访问DataSet对象中的DataTable对象,也可以添加、删除DataTable对象。
1. 创建DataTable对象
可以通过以下两种方式创建DataTable对象:
1) 通过DataTable类的构造函数创建DataTable对象,例如:
DataTable table = new DataTable();
-4-
《高级数据库技术(ADO.NET&XML)》课程设计报告
2) 通过DataSet的Tables对象的Add方法创建DataTable对象,例如:
DataSet dataset = new DataSet();
DataTable table = dataset.Tables.Add("MyTableName");
2. 在DataTable对象中添加列
在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column属性中的Add方法。添加后的每一列都是一个DataColumn对象。
3. 设置DataTable对象的主键
关系数据库中的表一般都有一个主键,用来惟一标识表中的每一行记录。通过DataTable对象的PrimaryKey属性可以设置Datatable的主键。主键可以是一个或者多个DataColumn对象组成的数组。例如:
DataColumn[] key = new DataColumn[1];//dt是一个DataTable对象
key[0] = dt.Columns[0];
dt.PrimaryKey = key;
4. 在DataTable对象中创建行
DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对象添加到表中
5. 将SQL Server数据库中的表填充到DataTable中
除了可以直接创建DataTable对象的行列信息外,也可以通过DateAdapter对象的Fill方法将SQL Server数据库中的表填充到DataTable对象中。
4.5 DataSet对象
1. 创建DataSet对象
使用创建的DataSet对象可以完成各种数据操作,利用向导生成的数据库数据源是一个强类型的DataSet以及一对或多对强类型的DataTable和TableAdapter的组合。类型化的DataSet是一个生成的类,是从.NET Framework的一般DataSet类衍生来的,但提供了已定义的架构以及特定于该架构的属性和方法。同时,对于DataSet中的每个表,还生成了特定于该DataSet的附加衍生类,而且每个类都为相关的表提供了特定的架构、属性和方法。
当然,也可以直接创建一般的DataSet对象,例如:
DataSet myDataset = new DataSet();
2. 填充DataSet对象
创建DataSet后,就可以使用SqlDataAdapter对象把数据导入到DataSet对象中,比如通过Fill方法将数据填充到DataSet中的某个表中。
-5-
《高级数据库技术(ADO.NET&XML)》课程设计报告
5.设计与实现
(包括每个设计点的文字描述,图表,关键代码) (该说明在最终报告里面要删除!)
5.1登录界面
在登录界面(图5-1)用户对应相应的权限选择用户类型进行登录,分教员、学生、管理员。登录后根据选择的权限进入相应的界面。输入用户名框非空,密码框非空,权限选择判断;登录界面还有新用户注册,同样是选择不同用户类型进行注册。注册后需管理员激活才能登录。还有一个就是找回密码,用户通过输入用户名和姓名等信息找回密码。
图5-1
登录界面代码:
if (ValidateInput()) // 验证输入成功
{
string message = "";
// 验证输入的密码
if (loginBll.ValidateUser(txtLoginId.Text.Trim(), txtLoginPwd.Text, cboLoginType.Text, ref message)) {
// 记录登录用户名和登录类型
UserHelper.loginId = txtLoginId.Text;
UserHelper.loginType = cboLoginType.Text;
if (cboLoginType.Text == "教师")
-6-
《高级数据库技术(ADO.NET&XML)》课程设计报告
{
// 创建教员主窗体对象
TeacherForm teacherForm = new TeacherForm();
// 显示窗体
teacherForm.Show();
}
else if (cboLoginType.Text == "学生")
{
StudentForm studentForm = new StudentForm();
studentForm.Show();
}
else
{
AdminForm adminForm = new AdminForm();
adminForm.Show();
}
// 登录窗体隐藏
this.Visible = false;
}
5.2教师管理界面
在教师管理界面(图5-2)中有以下菜单和按钮:
*选择题目(图5-3):右键选择题目加入到新建的试卷中;
*成绩管理(图5-4)选择不同的试卷进行查询,读取数据到DataSet,然后用DataSet中数据计算该试卷的平均分;也可以直接修改DataSet中表的数据,然后保存。
增加试题:先输入好题目,然后提交,将数据插入数据库中;
还有一些其它的功能,查询试题:按科目查询试题;试题管理:按难度查询试题列表,并可增加、修改试题。试题列表,按难度查询试题列表,并可增加、修改试题然后保存,将数据保存到数据库;
-7-
《高级数据库技术(ADO.NET&XML)》课程设计报告
图5-2
图5-3
-8-
《高级数据库技术(ADO.NET&XML)》课程设计报告
图5-4
教师管理界面代码:
// 点击时,打开新增试题窗体
private void tsmiAddQuestion_Click(object sender, EventArgs e)
{
// 创建窗体对象
AddQuestionForm addQuestionForm = new AddQuestionForm(); // 设置 MDI 主窗体
addQuestionForm.MdiParent = this;
// 显示窗体
addQuestionForm.Show();
}
// 点击菜单中的“帮助”->”关于”,以模式窗口显示 About 窗体 private void tsmiAbout_Click(object sender, EventArgs e)
{
AboutForm aboutForm = new AboutForm();
aboutForm.MdiParent = this;
aboutForm.Show(); // 以模式窗口显示
}
// 窗体加载事件处理
private void TeacherForm_Load(object sender, EventArgs e)
{
// 设置状态栏标签显示的文字
lblTeacher.Text = string.Format("教员{0}登录了!", UserHelper.loginId); }
-9-
《高级数据库技术(ADO.NET&XML)》课程设计报告
private void TeacherForm_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
private void btnSearchQuestion_Click(object sender, EventArgs e)
{
CheckTitles CT = new CheckTitles();
CT.Show();
}
private void btnQuestionList_Click(object sender, EventArgs e)
{
// 创建窗体对象
TestList tForm = new TestList();
// 设置 MDI 主窗体
tForm.MdiParent = this;
// 显示窗体
tForm.Show();
}
选择题目代码:
//选择题目窗口
private void TestList_Load(object sender, EventArgs e)
{
dataSet=getDataSetBll.GetAllQuestion(ref dataAdapter);
dataSet2 = getDataSetBll.GetSelectedQuestion(ref dataAdapter2, ExamId);
dgvTest.DataSource =dataSet.Tables["Question"];
txtExamName.Text = CreateTestForm.ExamName;
ExamId = CreateTestForm.ExamId;
}
//刷新
private void button1_Click_1(object sender, EventArgs e)
{
dataSet.Tables["Question"].Clear();
dgvTest.DataSource = getDataSetBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter); }
//将选中的题目加入试卷中
private void tsmAddQuestion_Click(object sender, EventArgs e)
{
string message="";
int sum = dgvTest.SelectedCells.Count;
for (int i = 0; i < sum;i++)
{
string QuestionId = dgvTest.SelectedCells[i].Value.ToString();
message = createTestBll.AddQuestion(ExamId, QuestionId, ref ExamSum);
}
-10-
《高级数据库技术(ADO.NET&XML)》课程设计报告
txtExamSum.Text = ExamSum.ToString();
MessageBox.Show(message);
}
//将选中的题目从试卷中删除
private void tsmDeleteQuestion_Click(object sender, EventArgs e)
{
string message="";
int sum = dgvTest.SelectedCells.Count;
for (int i = 0; i < sum; i++)
{
string QuestionId = dgvTest.SelectedCells[i].Value.ToString();
message = createTestBll.DeleteQuestion(ExamId, QuestionId, ref ExamSum); }
txtExamSum.Text = ExamSum.ToString();
MessageBox.Show(message);
}
//已选择题目列表
private void btn_Click(object sender, EventArgs e)
{
dataSet2.Tables["Question"].Clear();
dataSet2 = getDataSetBll.GetSelectedQuestion(ref dataAdapter2,ExamId); dgvSelectedQuestion.DataSource = dataSet2.Tables["Question"];
}
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
成绩管理代码:
//成绩管理的窗口
private void TestGradeManageForm_Load(object sender, EventArgs e)
{
ExamId = cboExamId.Text.ToString();
dataSet = getDataSetBll.GetScore(ref dataAdapter,ExamId);
//加载examId
foreach (DataRow row in dataSet.Tables["Score"].Rows)
{
foreach(string item in cboExamId.Items)
{
if (item.ToString().Equals(row["examId"].ToString()))
goto con; }
cboExamId.Items.Add(row["examId"].ToString());
con: ;
-11-
《高级数据库技术(ADO.NET&XML)》课程设计报告
}
dgvScore.DataSource = dataSet.Tables["Score"];
}
private void btnSearch_Click(object sender, EventArgs e)
{
//查询成绩
ExamId = cboExamId.Text.ToString();
dataSet.Tables["Score"].Clear();
dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId);
dgvScore.DataSource = dataSet.Tables["Score"];
int sum = 0,i=0,avgScore=0;
foreach (DataRow row in dataSet.Tables["Score"].Rows)
{
sum += int.Parse(row["scorevalue"].ToString());
i++;
}
if(i!=0)
avgScore = sum / i;
txtAvgScore.Text = avgScore.ToString();
}
//刷新
private void btnRefresh_Click(object sender, EventArgs e)
{
dataSet.Tables["Score"].Clear();
dataSet = getDataSetBll.GetScore(ref dataAdapter, ExamId);
}
//保存
private void btnSave_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("确定");
if (result == DialogResult.OK)
{ SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet, "Score");
}
}
5.3管理员管理界面
管理员管理界面(图5-5):通过选择不同的菜单和按钮进入不同的界面,用户管理,其中有新建用户(新学员用户,新建教员用户)。
查询及修改学员(图5-6):用DataSet读取数据到DataGridView。 用户信息列表,包括查询
-12-
《高级数据库技术(ADO.NET&XML)》课程设计报告
以及教员学员信息。 题库管理,管理试题库 。
图5-5
图5-6 学员信息界面代码:
//学员窗口
private void TestList_Load(object sender, EventArgs e) {
dataSet=StudentListBll.GetAllQuestion(ref dataAdapter); dgvTest.DataSource = dataSet.Tables["Student"];
-13-
《高级数据库技术(ADO.NET&XML)》课程设计报告
}
//刷新
private void button1_Click(object sender, EventArgs e)
{
dataSet.Tables["Student"].Clear();
dataAdapter.Fill(dataSet, "Student");
}
//保存
private void button2_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("确定");
if (result == DialogResult.OK)
{
SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(dataSet, "Student");
}
}
//按性别查询
private void cboDifficulty_SelectedIndexChanged(object sender, EventArgs e)
{
dataSet.Tables["Student"].Clear();
dgvTest.DataSource = StudentListBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(), ref dataAdapter); }
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
5.4学生考试界面
学生在线考试界面(图5-8):通过选择不同的菜单和按钮进入不同的界面:
在线答题界面(图5-9):可以选择已激活试卷答题。
还有维护个人信息 :对个人信息进行查询,修改 ;在线评分。保存考试成绩可供教师查询。
-14-
《高级数据库技术(ADO.NET&XML)》课程设计报告
图5-8
图5-9
学生在线考试界面代码:
public partial class StudentForm : Form
{
public StudentForm()
{
InitializeComponent();
}
private void tsbOnlineAnswer_Click(object sender, EventArgs e)
-15-
《高级数据库技术(ADO.NET&XML)》课程设计报告
{
SelectExamForm sExamForm = new SelectExamForm();
sExamForm.MdiParent = this;
sExamForm.Show();
}
private void tsbOnlineAnswer_Click(object sender, EventArgs e)
{
AnswerQuestionForm aQuestionForm = new AnswerQuestionForm(); aQuestionForm.MdiParent = this;
aQuestionForm.Show();
}
回答问题界面代码:
//“答题卡”按钮
private void btnAnswerCard_Click(object sender, EventArgs e)
{
AnswerCardForm answerCardForm=new AnswerCardForm();
answerCardForm.Show();
}
//窗体加载事件
private void AnswerQuestionForm_Load(object sender, EventArgs e)
{
dataSet = getDataSetBll.ExamLoad(ref dataAdapter, ref ExamId); //将题目放入strExam中
foreach (DataRow row in dataSet.Tables["Question"].Rows)
{
strExam[j, 0] = row["Question"].ToString();
strExam[j, 1] = row["OptionA"].ToString();
strExam[j, 2] = row["OptionB"].ToString();
strExam[j, 3] = row["OptionC"].ToString();
strExam[j, 4] = row["OptionD"].ToString();
strExam[j, 5] = row["Answer"].ToString();
j++;
}
lblQuestion.Text += Convert.ToString(questionIndex + 1);
DisplayQuestion(questionIndex);
} //显示题目及选项
public void DisplayQuestion(int i)
{ txtQuestion.Text = strExam[i,0];
rdoA.Text = rdoA.Text+strExam[i,1];
rdoB.Text = rdoB.Text+strExam[i,2];
rdoC.Text = rdoC.Text+strExam[i,3];
rdoD.Text = rdoD.Text+strExam[i,4];
} //“下一题”按钮事件,为studentAnswers数组赋值
-16-
《高级数据库技术(ADO.NET&XML)》课程设计报告
private void btnNext_Click(object sender, EventArgs e)
{
lblQuestion.Text = "问题";
rdoA.Text = "A.";
rdoB.Text = "B.";
rdoC.Text = "C.";
rdoD.Text = "D.";
if (questionIndex < QuizHelper.questionNum)
{
QuizHelper.studentAnswers[questionIndex] = GetStudentAnswer();
}
questionIndex++;
rdoA.Checked = false;
rdoB.Checked = false;
rdoC.Checked = false;
rdoD.Checked = false;
if (questionIndex > j-1)
{
MessageBox.Show("试题已答完,你可以点击<答题卡>按钮进行查看", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
lblQuestion.Text += Convert.ToString(questionIndex + 1);
DisplayQuestion(questionIndex);
}
//记时器控件的Tick事件
private void tmrCostTime_Tick(object sender, EventArgs e)
{
int minute;
int second;
if (QuizHelper.remainSeconds > 0)
{
QuizHelper.remainSeconds--;
minute = QuizHelper.remainSeconds / 60;
second = QuizHelper.remainSeconds % 60;
lblTimer.Text = string.Format("{0:00}:{1:00}", minute, second);
}
else
{
tmrCostTime.Stop();
MessageBox.Show("时间到了,该交卷了!","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
QuizResultForm quizResultForm=new QuizResultForm();
quizResultForm.MdiParent=this.MdiParent;
-17-
《高级数据库技术(ADO.NET&XML)》课程设计报告
quizResultForm.Show();
this.Close();
}
}
//判断用户选择的答案
public string GetStudentAnswer()
{
string answer = "";
if (rdoA.Checked)
{
answer = "A";
}
else if (rdoB.Checked)
{
answer = "B";
}
else if (rdoC.Checked)
{
answer = "C";
}
else if (rdoD.Checked)
{
answer = "D";
}
else
{
MessageBox.Show("请选择一项答案");
}
return answer;
}
6.总结
这次实验开发的是一个小型的学生考试管理系统。由于第一次做这样的学生考试管理系统,所以做起来困难重重,很多东西需要我们去发掘,就算是借一本书看完它,我们还是会发现还有很多知识没有吃透,这需要我们不断的实践,不断地自学习,不断地发现问题去思考问题并且解决问题。本次课程设计主要的还是使用了这学期所学的ADO.NET知识和上学期学的SQL查询知识。本次程序开发主要是用了清明的三天假期时间,总体使用时间为五天。本次课程设计有不少的收获,其中也有一些问题。本次课程设计中我是先画了一个流程图,画出要用到的每个界面,以及这些界面上要实现的功能,然后我是就开始写程序,设计中我遇到了各种各种各样的问题,我就使用联机帮助文档查找我要资料,基本上都可以解决的,还有一些找不到的我就到网络上去找,我是一边写程
-18-
《高级数据库技术(ADO.NET&XML)》课程设计报告
序一边查询各种各样的资料,慢慢的把课程设计做完了。
经过不断地测试,不断地改进,其中还是发现了不少问题,第一次做这些工作,没有任何经验,甚至无从下手,从中也学到了一些代码的写法,为什么要这样写,通过和同学的讨论,找到一些书本上没有的方法,如使用三层结构时要读取数据,一般使用DataSet会比较好,读取数据后放到DataSet中,然后返回DataSet,在表示层要读取或者写入数据时,直接在DataSet中进行,在最后再将数据保存到数据库中,这样在三层结构中不用传递太多的参数,一般只要传递一个DataSet就可以了,使代码更加的简单、思路更加的清晰,但是在实现登录和注册时,就不要用DataSet了。DataSet是线程安全的,也就是没有并发的可能性,所有的写操作必须是同步的,也就是所有的请求都会排好队逐个执行。但可以使用不同的dataset分别访问同一个数据库实现并发。还有怎样从数据库中将数据提取出来放到一个文本框或者标签内,这些东西是组成界面的东西,虽然小,但是可以体现整个软件的水平,其实并不需要建多少数据库的表,写多少复杂的存储过程,是不是用了数据库函数,触发器等等,但是至少要弄明白这些东西如果操作,清晰思路才能将功能分清晰。比如,我在做读取数据库中题目时就遇到了问题,不能将题目读出来,我用各种语句去写,但是也不行,而且做起来很是麻烦,思路也不清晰,后来我把有些要做的数据处理直接在读取数据时,在SQL语句中实现了,这样不但代码简单了,而且思路也是清晰了。
经过一段时间的学习与实践,学生考试管理系统基本上开发好了。该系统具备了:登录界面,新用户注册,教师管理界面,管理员管理界面,学生在线考试 。该学生考试管理系统使用三层结构进行开发的,三层结构的好处就是使程序员能更加清晰的开发程序,别人看时,也会比较容易的看懂。作为一个学生考试管理系统,本系统所提供的功能的确太少了一些,仅仅只实现了一些基本的功能,有很多地方还有待扩展和改良。
人如果没有自信,没有目标,没有信心就不可能把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标,大学毕业出去即是面临找工作,从学习这个专业,到以后做这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们以后的工作需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想。
7.参考资料
Glenn Johnson,《ADO.NET 2.0 高级编程》,清华大学出版社,20xx年5月
-19-
湖北文理学院程序设计课程设计报告项目名称仓库管理系统学生姓名张三学号20xx19xx17班级物联网1311日期20xx19xx17…
数据库课程设计报告(仓库管理系统)三概要设计3.1ER图和相关说明类别(类别编号,类别名称,上级类别)仓库(仓库编号,隶属单位,备…
数据库技术课程设计题目姓名学号班级时间目录1需求分析1111仓库管理系统的功能分析112仓库管理系统的功能图22概念结构设计33逻…
数据库技术课程设计题目姓名学号班级时间目录1需求分析1111仓库管理系统的功能分析112仓库管理系统的功能图22概念结构设计33逻…
目录一课程设计的目的及要求1二课程设计的任务1三课程设计题目1四课程设计的内容及主要步骤1五课程设计总结4一课程设计的目的及要求在…
四川理工学院课程设计书学院计算机学院专业物联网工程20xx1班课程RFID原理及应用题目基于射频识别技术的仓库管理系统教师何志勇学…
数据库技术课程设计题目姓名学号班级时间目录1需求分析1111仓库管理系统的功能分析112仓库管理系统的功能图22概念结构设计33逻…
数据库课程设计报告(仓库管理系统)三概要设计3.1ER图和相关说明类别(类别编号,类别名称,上级类别)仓库(仓库编号,隶属单位,备…
湖北文理学院程序设计课程设计报告项目名称仓库管理系统学生姓名张三学号20xx19xx17班级物联网1311日期20xx19xx17…
高级语言程序设计课程设计报告设计题目图书管理系统专业计算机科学与技术班级姓名学号20xx年6月5日目录1设计目的32设计思想33类…
计算机工程学院Project2GUISQL20xx实习报告选题名称专业计算机科学与技术软件工程方向班级软件1092姓名王伟剑学号1…