高级数据库技术课程设计报告.docx
- 文档编号:24427645
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:27
- 大小:223.60KB
高级数据库技术课程设计报告.docx
《高级数据库技术课程设计报告.docx》由会员分享,可在线阅读,更多相关《高级数据库技术课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
高级数据库技术课程设计报告
高级数据库技术课程设计报告
1.设计目的和任务
综合运用ADO.NET相关知识,设计一个具有实用价值的学生考试管理系统。
(1)巩固和加深对本课程基本知识的理解和掌握;
(2)掌握C#编程和ADO.NET程序调试的基本技能;
(3)掌握设计ADO.NET应用软件的基本思路和方法;
(4)提高运用ADO.NET解决实际问题的能力;
(5)培养撰写设计报告的能力。
2.开发环境
2.1硬件环境
笔记本电脑
硬件概要
CPU英特尔GenuineIntel(R)CPUT2130@1.86GHz
主板Wistron-英特尔945PM(Calistoga-PM)+ICH7-M/U
内存金士顿2GDDR2-SDRAM666MHz
显卡nVIDIAGeForceGo7200(G72)
主硬盘希捷120GB
声卡英特尔82801GBICH7-HighDefinitionAudio[B0]
网卡英特尔PRO/Wireless3945ABGNetworkConnection(HP-RoW)
2.2软件环境
MicrosoftWindowsXP操作系统;
MicrosoftSQLServer2005;
MicrosoftVisualStudio2005;
3.设计题目
3.1题目名称
学生考试管理系统
3.2题目详细描述
1、登录界面
2、新用户注册
3、教师管理界面
4、管理员管理界面
5、学生在线考试
3.3功能要求
登录界面
功能:
1)用户对应相应的权限进行登录,分教员、学生、管理员。
登录后根据选择的
权限进入相应的界面;
2)输入用户名框非空,密码框非空,权限选择判断;
3)新学员用户注册。
注册后需管理员激活才能登录。
教师管理界面
功能(按菜单项说明):
1)试题管理,子菜单如下:
增加试题;
查询试题:
按科目查询试题;
试题列表:
按难度查询试题列表,并可增加、修改试题。
2)考试管理,子菜单如下:
生成试卷;
试卷管理:
查看试卷信息、激活/取消试卷。
3)成绩管理,按试卷名查寻成绩。
要算出平均分。
管理员管理界面
功能(按菜单项说明):
1)用户管理,子菜单如下:
新建用户:
新建学员用户,新建教员用户。
查询及修改学员。
用户信息列表,包括查询以及教员学员信息
2)题库管理,管理试题库
学生在线考试
1)维护个人信息对个人信息进行查询,修改
2)在线答题。
功能:
可以选择已激活试卷答题。
在线评分。
保存考试成绩可供教师查询。
4.相关技术及知识点
ADO.NET提供了多种对象模型,比较典型的以下有五种,它们全部归类System.Data.SqlClient名称空间下。
4.1SqlConnection对象
ADO.NET使用SqlConnection对象与SQLServer进行连接。
连接字符串的常用形式有两种:
1.使用Windows集成安全身份认证,例如:
stringconnectionString="IntegratedSecurity=SSPI;Database=MySchool.mdf;Server=localhost;";
2.在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。
例如:
stringconnectionString="server=localhost;uid=sa;pwd=123;database=MySchool.mdf";
然后通过连接字符串直接创建SqlConnection对象,如SqlConnectionconn=newSqlConnection(connectionString);
4.2SqlCommand对象
在ADO.NET中,有两种操作数据库的方式:
1.无连接的方式;
2.保持连接的方式。
不论哪种都可以通过SqlCommand对象提供的方法传递对数据库操作的命令,并返回命令执行结果。
在保持连接的方式下操作数据库的一般步骤为:
1.创建SqlConnection的实例;
2.创建SqlCommand的实例;
3.打开连接;
4.执行命令;
5.关闭连接。
SqlCommand对象提供了多种完成对数据库操作的方法。
常用有:
1.ExecuteNonQuery
该方法执行SQL语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。
2.ExecuteReader
ExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。
3.ExecuteScaler()
该方法用于执行SELECT查询,得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
4.3SqlDataAdapter对象
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.4DataTable对象
ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。
DataTable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。
可以直接将数据从数据库填充到DataTable对象中,也可以将DataTable对象添加到现有的DataSet对象中。
在断开连接的方式下,DataSet对象提供了和关系数据库一样的关系数据模型,代码中可以直接访问DataSet对象中的DataTable对象,也可以添加、删除DataTable对象。
1.创建DataTable对象
可以通过以下两种方式创建DataTable对象:
1)通过DataTable类的构造函数创建DataTable对象,例如:
DataTabletable=newDataTable();
2)通过DataSet的Tables对象的Add方法创建DataTable对象,例如:
DataSetdataset=newDataSet();
DataTabletable=dataset.Tables.Add("MyTableName");
2.在DataTable对象中添加列
在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column属性中的Add方法。
添加后的每一列都是一个DataColumn对象。
3.设置DataTable对象的主键
关系数据库中的表一般都有一个主键,用来惟一标识表中的每一行记录。
通过DataTable对象的PrimaryKey属性可以设置Datatable的主键。
主键可以是一个或者多个DataColumn对象组成的数组。
例如:
DataColumn[]key=newDataColumn[1];//dt是一个DataTable对象
key[0]=dt.Columns[0];
dt.PrimaryKey=key;
4.在DataTable对象中创建行
DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对象添加到表中
5.将SQLServer数据库中的表填充到DataTable中
除了可以直接创建DataTable对象的行列信息外,也可以通过DateAdapter对象的Fill方法将SQLServer数据库中的表填充到DataTable对象中。
4.5DataSet对象
1.创建DataSet对象
使用创建的DataSet对象可以完成各种数据操作,利用向导生成的数据库数据源是一个强类型的DataSet以及一对或多对强类型的DataTable和TableAdapter的组合。
类型化的DataSet是一个生成的类,是从.NETFramework的一般DataSet类衍生来的,但提供了已定义的架构以及特定于该架构的属性和方法。
同时,对于DataSet中的每个表,还生成了特定于该DataSet的附加衍生类,而且每个类都为相关的表提供了特定的架构、属性和方法。
当然,也可以直接创建一般的DataSet对象,例如:
DataSetmyDataset=newDataSet();
2.填充DataSet对象
创建DataSet后,就可以使用SqlDataAdapter对象把数据导入到DataSet对象中,比如通过Fill方法将数据填充到DataSet中的某个表中。
5.设计与实现
(包括每个设计点的文字描述,图表,关键代码)(该说明在最终报告里面要删除!
)
5.1登录界面
在登录界面(图5-1)用户对应相应的权限选择用户类型进行登录,分教员、学生、管理员。
登录后根据选择的权限进入相应的界面。
输入用户名框非空,密码框非空,权限选择判断;登录界面还有新用户注册,同样是选择不同用户类型进行注册。
注册后需管理员激活才能登录。
还有一个就是找回密码,用户通过输入用户名和姓名等信息找回密码。
图5-1
登录界面代码:
if(ValidateInput())//验证输入成功
{
stringmessage="";
//验证输入的密码
if(loginBll.ValidateUser(txtLoginId.Text.Trim(),txtLoginPwd.Text,cboLoginType.Text,refmessage))
{
//记录登录用户名和登录类型
UserHelper.loginId=txtLoginId.Text;
UserHelper.loginType=cboLoginType.Text;
if(cboLoginType.Text=="教师")
{
//创建教员主窗体对象
TeacherFormteacherForm=newTeacherForm();
//显示窗体
teacherForm.Show();
}
elseif(cboLoginType.Text=="学生")
{
StudentFormstudentForm=newStudentForm();
studentForm.Show();
}
else
{
AdminFormadminForm=newAdminForm();
adminForm.Show();
}
//登录窗体隐藏
this.Visible=false;
}
5.2教师管理界面
在教师管理界面(图5-2)中有以下菜单和按钮:
*选择题目(图5-3):
右键选择题目加入到新建的试卷中;
*成绩管理(图5-4)选择不同的试卷进行查询,读取数据到DataSet,然后用DataSet中数据计算该试卷的平均分;也可以直接修改DataSet中表的数据,然后保存。
增加试题:
先输入好题目,然后提交,将数据插入数据库中;
还有一些其它的功能,查询试题:
按科目查询试题;试题管理:
按难度查询试题列表,并可增加、修改试题。
试题列表,按难度查询试题列表,并可增加、修改试题然后保存,将数据保存到数据库;
图5-2
图5-3
图5-4
教师管理界面代码:
//点击时,打开新增试题窗体
privatevoidtsmiAddQuestion_Click(objectsender,EventArgse)
{
//创建窗体对象
AddQuestionFormaddQuestionForm=newAddQuestionForm();
//设置MDI主窗体
addQuestionForm.MdiParent=this;
//显示窗体
addQuestionForm.Show();
}
//点击菜单中的“帮助”->”关于”,以模式窗口显示About窗体
privatevoidtsmiAbout_Click(objectsender,EventArgse)
{
AboutFormaboutForm=newAboutForm();
aboutForm.MdiParent=this;
aboutForm.Show();//以模式窗口显示
}
//窗体加载事件处理
privatevoidTeacherForm_Load(objectsender,EventArgse)
{
//设置状态栏标签显示的文字
lblTeacher.Text=string.Format("教员{0}登录了!
",UserHelper.loginId);
}
privatevoidTeacherForm_FormClosed(objectsender,FormClosedEventArgse)
{
Application.Exit();
}
privatevoidbtnSearchQuestion_Click(objectsender,EventArgse)
{
CheckTitlesCT=newCheckTitles();
CT.Show();
}
privatevoidbtnQuestionList_Click(objectsender,EventArgse)
{
//创建窗体对象
TestListtForm=newTestList();
//设置MDI主窗体
tForm.MdiParent=this;
//显示窗体
tForm.Show();
}
选择题目代码:
//选择题目窗口
privatevoidTestList_Load(objectsender,EventArgse)
{
dataSet=getDataSetBll.GetAllQuestion(refdataAdapter);
dataSet2=getDataSetBll.GetSelectedQuestion(refdataAdapter2,ExamId);
dgvTest.DataSource=dataSet.Tables["Question"];
txtExamName.Text=CreateTestForm.ExamName;
ExamId=CreateTestForm.ExamId;
}
//刷新
privatevoidbutton1_Click_1(objectsender,EventArgse)
{
dataSet.Tables["Question"].Clear();
dgvTest.DataSource=getDataSetBll.GetQuestionByDifficulty(cboDifficulty.Text.Trim(),refdataAdapter);
}
//将选中的题目加入试卷中
privatevoidtsmAddQuestion_Click(objectsender,EventArgse)
{
stringmessage="";
intsum=dgvTest.SelectedCells.Count;
for(inti=0;i { stringQuestionId=dgvTest.SelectedCells[i].Value.ToString(); message=createTestBll.AddQuestion(ExamId,QuestionId,refExamSum); } txtExamSum.Text=ExamSum.ToString(); MessageBox.Show(message); } //将选中的题目从试卷中删除 privatevoidtsmDeleteQuestion_Click(objectsender,EventArgse) { stringmessage=""; intsum=dgvTest.SelectedCells.Count; for(inti=0;i { stringQuestionId=dgvTest.SelectedCells[i].Value.ToString(); message=createTestBll.DeleteQuestion(ExamId,QuestionId,refExamSum); } txtExamSum.Text=ExamSum.ToString(); MessageBox.Show(message); } //已选择题目列表 privatevoidbtn_Click(objectsender,EventArgse) { dataSet2.Tables["Question"].Clear(); dataSet2=getDataSetBll.GetSelectedQuestion(refdataAdapter2,ExamId); dgvSelectedQuestion.DataSource=dataSet2.Tables["Question"]; } privatevoidbutton3_Click(objectsender,EventArgse) { this.Close(); } 成绩管理代码: //成绩管理的窗口 privatevoidTestGradeManageForm_Load(objectsender,EventArgse) { ExamId=cboExamId.Text.ToString(); dataSet=getDataSetBll.GetScore(refdataAdapter,ExamId); //加载examId foreach(DataRowrowindataSet.Tables["Score"].Rows) { foreach(stringitemincboExamId.Items) { if(item.ToString().Equals(row["examId"].ToString())) gotocon;} cboExamId.Items.Add(row["examId"].ToString()); con: ; } dgvScore.DataSource=dataSet.Tables["Score"]; } privatevoidbtnSearch_Click(objectsender,EventArgse) { //查询成绩 ExamId=cboExamId.Text.ToString(); dataSet.Tables["Score"].Clear(); dataSet=getDataSetBll.GetScore(refdataAdapter,ExamId); dgvScore.DataSource=dataSet.Tables["Score"]; intsum=0,i=0,avgScore=0; foreach(DataRowrowindataSet.Tables["Score"].Rows) { sum+=int.Parse(row["scorevalue"].ToString()); i++; } if(i! =0) avgScore=sum/i; txtAvgScore.Text=avgScore.ToString(); } //刷新 privatevoidbtnRefresh_Click(objectsender,EventArgse) { dataSet.Tables["Score"].Clear(); dataSet=getDataSetBll.GetScore(refdataAdapter,ExamId); } //保存 privatevoidbtnSave_Click(objectsender,EventArgse) { DialogResultresult=MessageBox.Show("确定"); if(result==DialogResult.OK) {SqlCommandBuilderbuilder=newSqlCommandBuilder(dataAdapter); dataAdapter.Update(dataSet,"Score"); } } 5.3管理员管理界面 管理员管理界面(图5-5): 通过选择不同的菜单和按钮进入不同的界面,用户管理,其中有新建用户(新学员用户,新建教员用户)。 查询及修改学员(图5-6): 用DataSet读取数据到DataGridView。 用户信息列表,包括查询以及教员学员信息。 题库管理,管理试题库。 图5-5 图5-6 学员信息界面代码: //学员窗口 privatevoidTestList_Load(objectsender,EventArgse) { dataSet=StudentListBll.GetAllQuestion(refdataAdapter); dgvTest.DataSource=dataSet.Tables["Student"]; } //刷新 privatevoidbutton1_Click(objectsender,EventA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级 数据库技术 课程设计 报告