高级数据库技术--学生考试管理系统.doc_第1页
高级数据库技术--学生考试管理系统.doc_第2页
高级数据库技术--学生考试管理系统.doc_第3页
高级数据库技术--学生考试管理系统.doc_第4页
高级数据库技术--学生考试管理系统.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1.设计目的和任务12.开发环境22.1硬件环境22.2软件环境23.设计题目33.1题目名称33.2题目详细描述33.3功能要求34.相关技术及知识点65.数据库设计95.1系统总体结构95.2管理系统表关系95.3表详细信息106.设计与实现136.1登陆界面136.2 新用户注册146.3教师界面14高级数据库技术(ADO.NETXML)课程设计报告1.设计目的和任务本次期末大作业采用课程设计的形式进行,作为高级数据库技术(ADO.NET&XML)课程的期末考核。要求综合运用ADO.NET相关知识,设计一个具有实用夹着的学生考试管理系统,并撰写课程设计报告。其目的和任务是:(1) 巩固和加深学生对本课程基本知识的理解和掌握;(2) 掌握C#编程和ADO.NET程序调试的基本技能;(3) 掌握设计ADO.NET应用软件的基本思路和方法;(4) 提高运用ADO.NET解决实际问题的能力;(5) 培养撰写设计报告的能力。2.开发环境2.1硬件环境计算机2.2软件环境XP操作系统;Microsoft SQL Server 2005;Microsoft Visual Studio 2005;3.设计题目3.1题目名称学生考试管理系统3.2题目详细描述1.登录界面2.新用户注册:学员、教员3.教师管理界面4.管理员管理界面5.学生在线考试3.3功能要求登录窗口:功能:1,用户对应权限登录。分教员,学生,管理员。根据选择的权限进入相应的界面。2,输入用户名框非空,密码框非空,权限选择判断。3,新学员用户注册。注册后需管理员激活才能登录。教师窗口:菜单项:一,试题管理子菜单:1,增加试题。功能:增加试题2,查询试题。功能:按科目查询试题,并选择类型来查询试题,本系统中默认两种类型的试题,即选择题和填空题。3,试题列表。功能:按难度以及试题类型,查询试题列表。并可增加,修改试题各属性。二,考试管理子菜单:1,生成试卷功能: (1),开始选题窗体:用户输入试卷名,进入选题窗体。 (2),选题窗体: 按难度以及试题类型选择试题列表,右击将此题选入此次试卷。 提示:你已选择1题。 显示当前试卷号,已选择题号。 按钮:结束选题。2,试卷管理功能:(1)查询所有试卷列表。 (2)激活或冻结试卷。三,成绩管理功能:按试卷名查寻成绩。要算出平均分,并对及格(=60)以及优秀的学生(=85)比例进行统计。 表格格式为:学生名,成绩 文本框显示平均分, 文本框显示及格率和优秀率四,学生评价查看 教师在下拉框中选择某份试题, 可以看到所有考试过此试卷的学生对此试卷的评价和意见。五,窗口。 功能:显示当前窗口。六,帮助子菜单:关于。功能:显示动画。管理员窗口菜单项:一,用户管理子菜单:1,新建用户。(1)功能:新建学员用户。(2)功能:新建教员用户。2,查询及修改学员。功能:(1)按用户名模糊查询学员。 (2)右键修改学员状态。 (3)右键删除学员。3,用户信息列表。 (1)学员信息列表。 功能:按性别查询学员列表。并可增加,修改学员各属性。 (2)教员信息列表。 功能:按性别查询教师列表。并可增加,修改教师各属性。4,窗口。 功能:显示当前窗口。5,帮助。子菜单:关于。功能:倒计时。学员窗口一 维护个人信息 对个人信息进行查询, 修改二:在线答题。功能:(1)可以选择已激活试卷答题。 (2)在线评分。 (3)保存考试成绩可供教师查询。三:学生评价 学生评价此次考试的难度,与大纲符合程度,为教师以后出试卷提供参考 具体设计可以学生在下拉框中选择本次考试的一个难度, 并在文本框中输入一个主观意见。4.相关技术及知识点ADO.NET提供了多种对象模型,比较典型的以下有五种,它们全部归类System.Data.SqlClient名称空间下。4.1 SqlConnection对象ADO.NET使用SqlConnection对象与SQL Server进行连接。连接字符串的常用形式有两种:1.使用Windows集成安全身份认证, 例如:string connectionString =IntegratedSecurity=SSPI;Database=MyDatabase.mdf;Server=localhost;2.在连接字符串中指定服务器名、用户id、用户口令、数据库名等信息。 例如:string connectionString = server=localhost; uid=sa; pwd=123; database=MyDatabase.mdf;然后通过连接字符串直接创建SqlConnection对象,如SqlConnection conn = new SqlConnection(connectionString);4.2 SqlCommand对象在ADO.NET中,有两种操作数据库的方式:1.无连接的方式;2.保持连接的方式。不论哪种都可以通过SqlCommand对象提供的方法传递对数据库操作的命令,并返回命令执行结果。在保持连接的方式下操作数据库的一般步骤为:1.创建SqlConnection的实例;2.创建SqlCommand的实例;3.打开连接;4.执行命令;5.关闭连接。SqlCommand对象提供了多种完成对数据库操作的方法。常用有:1.ExecuteNonQuery该方法执行SQL语句的结果,但不返回命令执行的表数据,仅返回操作所影响的行数。2.ExecuteReaderExecuteReader方法提供了只向前的、顺序的快速读取数据库中数据的方法。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();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 DataColumn1;/dt是一个DataTable对象key0 = dt.Columns0;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中的某个表中。4.6 DataViewDataView就时数据视图,为数据库结构提供了外模式的实现。同时DataView也可以为窗体控件和Web控件提供数据绑定功能,在每一个DataTable中内建了一个DataView为:DataTable.DefaultView();创建DataViewDataView sortedView=new DataView(dataTable);对DataView进行排序dataTable.DefaultView.sort=lastName;dataTable.DefaultView.sort=lastName,FirstName DESC;4.7 更新DB在DataSet中,每一个DataTable对应着一个DataAdapter,DataAdapter.Update()时,DataTable自动更新。4.8 事务tx=conn.BeginTransaction(IsolationLevel.Serializable);invDA.SelectCommand.Transaction=tx;5.数据库设计5.1系统总体结构系统总体结构设计采用了MVC的思想。根据面向对象分析阶段中类划分结果,规划界面类、控制类、实体类及调用关系。在面向对象分析阶段,我们把类大体上分成了界面和实体两类。但是,为了提高代码的易维护性、易读性,增加类内部的纯度、类之间调用的灵活性,我们把控制代码另封装为一个类,即控制类,使系统中类之间的调用关系如下图所示:界面实体类数据库控制类控制类jdbcjdbc5.2管理系统表关系5.3表详细信息5.3.1管理员表Admin详细信息图5.3.1管理员表Admin详细信息5.3.2学生表Student详细信息图5.3.2学生表Student详细信息5.3.3 年级表Grade详细信息5.3.3 年级表Grade详细信息5.3.4 班级表Class详细信息5.3.4 班级表Class详细信息5.3.5状态表UserState详细信息5.3.5状态表UserState详细信息5.4 程序实现: private void tsmiAddStuUser_Click(object sender, EventArgs e) AddStudentForm addStudentForm = new AddStudentForm(); addStudentForm.MdiParent = this; addStudentForm.Show(); private void tsmiaddNewTeacher_Click(object sender, EventArgs e) AddTeacherForm addTeacherForm = new AddTeacherForm(); addTeacherForm.MdiParent = this; addTeacherForm.Show(); using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Text;using System.Windows.Forms;namespace MySchool public partial class AddStudentForm : Form public AddStudentForm() InitializeComponent(); / / 确认增加用户 / / / private void btnAddStuUserOK_Click(object sender, EventArgs e) if (IsValidate()/输入验证成功 Student student = new Student();/新建学员对象student student.LoginId = txtStuName.Text.Trim();/以下依次给student属性set值 student.LoginPwd = txtStuPwd.Text.Trim(); student.UserStateId = rdoStatusIn.Checked ? (int)rdoStatusIn.Tag :(int) rdoStatusOut.Tag;/条件表达式,选择活动状态,返回活动状态Id student.ClassId = ClassDao.GetClassId(cboClass.Text);/通过班级名获得班级编号 student.StudentNO = txtStuNO.Text.Trim(); student.StudentName = txtStuRealName.Text.Trim(); student.Sex = rdoStuMale.Checked ? rdoStuMale.Text : rdoStuFemale.Text; student.Phone = txtStuTel.Text.Trim(); student.Email = txtStuEmail.Text.Trim(); StudentDAO.AddStudent(student);/增加新学员 txtStuName.Text = ;/增加成功清空输入框 txtStuPwd.Text = ; txtStuConfirmPwd.Text = ; txtStuRealName.Text = ; txtStuNO.Text = ; txtStuTel.Text = ; txtStuEmail.Text = ; / / 关闭按钮 / / / private void btnAddStuUserCancel_Click(object sender, EventArgs e) this.Close(); / / 界面加载时给年级框赋值 / / / private void AddStudentForm_Load(object sender, EventArgs e) List list=new List();/新建List list=GradeDao.GradeList();/得到所有年级的list foreach (Grade grade in list) /遍历list,给年级下拉框cboGrade赋值 this.cboGrade.Items.Add(grade.GradeName); / / 当年级下拉框变动时,动态给班级下拉框对应赋值 / / / private void cboGrade_SelectedIndexChanged(object sender, EventArgs e) cboClass.ResetText();/重置cboClass使之非选。 cboClass.Items.Clear();/清空cboClass原有下拉选项 string gradeName = this.cboGrade.Text;/获取年级 int gradeId = GradeDao.GetGradeIdByName(gradeName);/通过年级名获取年级编号 List list2 = new List();/新建Class集合list2 list2 = ClassDao.FindClassByGradeId(gradeId);/通过年级编号查找班级,并返回班级的集合 foreach (Class class1 in list2)/遍历list2给cblClass赋值 this.cboClass.Items.Add(class1.ClassName); / / 输入验证 / / private bool IsValidate() if (txtStuName.Text = ) MessageBox.Show(请输入用户名,输入提示,MessageBoxButtons.OK,MessageBoxIcon.Information); txtStuName.Focus(); return false; else if (txtStuPwd.Text = ) MessageBox.Show(请输入密码, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtStuPwd.Focus(); return false; else if (!txtStuPwd.Text.Equals(txtStuConfirmPwd.Text) MessageBox.Show(两次密码输入不一致, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtStuConfirmPwd.Focus(); return false; else if (!rdoStatusIn.Checked& !rdoStatusOut.Checked) MessageBox.Show(请选择状态, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return false; else if (txtStuRealName.Text = ) MessageBox.Show(请输入学员姓名, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtStuRealName.Focus(); return false; else if (txtStuNO.Text = ) MessageBox.Show(请输入学号, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtStuNO.Focus(); return false; else if (!rdoStuMale.Checked&!rdoStuFemale.Checked) MessageBox.Show(请选择性别, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return false; else if (cboGrade.Text = ) MessageBox.Show(请选择年级, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); cboGrade.Focus(); return false; else if (cboClass.Text = ) MessageBox.Show(请选择班级, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); cboClass.Focus(); return false; else return true; namespace MySchool public partial class AddTeacherForm : Form public AddTeacherForm() InitializeComponent(); / / 确认增加教员 / / / private void btnAddTeaUserOK_Click(object sender, EventArgs e) if (IsValidate()/输入验证成功 Teacher teacher = new Teacher();/新建教员对象teacher teacher.LoginId = txtTeaName.Text.Trim();/以下依次给teacher属性set值 teacher.LoginPwd = txtTeaPwd.Text.Trim(); /teacher.UserStateId = rdoStatusIn.Checked ? (int)rdoStatusIn.Tag : (int)rdoStatusOut.Tag;/条件表达式,选择活动状态,返回活动状态Id teacher.TeacherName = txtTeaName.Text.Trim(); teacher.Sex = rdoTeaMale.Checked ? rdoTeaMale.Text : rdoTeaFemale.Text; teacher.Brithday = txtTeaBrithday.Text.Trim(); TeacherDao.insertNewTeacher(teacher);/增加新教员 txtTeaName.Text = ;/增加成功清空输入框 txtTeaPwd.Text = ; txtTeaConfirmPwd.Text = ; txtTeaBrithday.Text = ; / / 输入验证 / / private bool IsValidate() if (txtTeaName.Text = ) MessageBox.Show(请输入用户名, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtTeaName.Focus(); return false; else if (txtTeaPwd.Text = ) MessageBox.Show(请输入密码, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtTeaPwd.Focus(); return false; else if (!txtTeaPwd.Text.Equals(txtTeaConfirmPwd.Text) MessageBox.Show(两次密码输入不一致, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtTeaConfirmPwd.Focus(); return false; else if (!rdoTeaMale.Checked & !rdoTeaFemale.Checked) MessageBox.Show(请选择性别, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); return false; if (txtTeaBrithday.Text = ) MessageBox.Show(请输入生日, 输入提示, MessageBoxButtons.OK, MessageBoxIcon.Information); txtTeaBrithday.Focus(); return false; else return true; private void btnAddTeaUserCancel_Click(object sender, EventArgs e) this.Close(); private void AddTeacherForm_Load(object sender, EventArgs e) using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Text;using System.Windows.Forms;namespace MySchool public partial class FindStudentForm : Form public FindStudentForm() InitializeComponent(); /根据查询条件填充 private void FillListView() string userState;/用户状态 string studentName = txtFindStudentName.Text.Trim();/用户名 Student student = new Student();/建立student对象 List list = new List();/建立list集合 student.StudentName = studentName;/把用户名set给student对象 list = StudentDAO.selectStuByName(student);/通过studentName找出学员 LvStudentList.Items.Clear();/清空LvStudent选项内容 foreach(Student stu in list)/遍历student集合 userState = (stu.UserStateId = 1) ? 活动 : 非活动;/如果student状态属性为,返回“活动”。 /创建一个ListView项 ListViewItem lviSrudent = new ListViewItem(stu.LoginId); /将studentId放在Tag中 lviSrudent.Tag = (int)stu.StudentId; /向ListView中添加一个新项 LvStudentList.Items.Add(lviSrudent); /向当前项增加子项 lviSrudent.SubItems.AddRange(new string stu.StudentName.ToString(), stu.StudentNO.ToString(),userState ); /遍历结束 / / 查找学员按钮 / / / p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论