数据库应用课设090502209.docx
《数据库应用课设090502209.docx》由会员分享,可在线阅读,更多相关《数据库应用课设090502209.docx(14页珍藏版)》请在冰点文库上搜索。
数据库应用课设090502209
数据库应用课设090502209
武汉工业学院
2011-2012学年第1学期
《数据库应用系统设计》
考核报告
课题:
学生成绩管理系统
学生学号:
090502209
学生姓名:
王红波
所在班级:
信管二班
任课教师:
林菁老师
一综述
项目题目
学生成绩管理系统
开发环境
数据库的设计选用的为微软的MicrosoftSQLServer2005,开发环境采用的为VisualStudio2008。
二需求分析
1.问题陈述
为了达到对多数据表进行操作,我们创建学生成绩表、学生基本信息表和学生课程表、以及管理员四表。
然后建立关联,即学生成绩表与学生基本信息表进行关联,学生成绩表与学生课程表进行关联,与此同时,还有一张用户表记录此管理系统的用户。
2.ER图
学生成绩管理系统整体ER图
院系
爱好
ID
学生基本信息
姓名
性别
必修
学生成绩
成绩
课程代号
学号
课程名
课程代号
课程
通过
3.总体结构模块图。
三系统设计
1.数据库逻辑设计
首先新建学生基本信息表,包括学号,姓名,性别,院系,专业,爱好字段,其相应的二维关系表如下图所示:
最后将数据库建立关联:
学生成绩表与基本信息表建立关联
(C.学号-->J.学号)。
学生成绩表与课程表建立关联
(C.课程代号-->K.课程代号)。
在这三个表中课程代号,学号为关键字且没有重复,在这三个表中各字段的关系为:
为所有的关系都达到BCNF范式,我们把表分为两个关系模式,一个关系模式为K(课程代号,课程名,学分,是否必修,前驱课程,后续课程),一个关系模式为J(学号,姓名,性别,院系,专业,爱好)。
一个关系模式为C(学号,课程代号,成绩)
删除
添加
学生管成绩理系统
修改
成绩表,基本信息表,课程表
成绩表,基本信息表,课程表
成绩表,基本信息表,课程表
成绩表,基本信息表,课程表
登录框
按学号
按学号
按学号
查询
按学号
用户密码
错误
学生成绩管理系统顶层数据流
1.1整体数据流图
四系统实施及编程
以下主要讲解系统管理和成绩管理模块:
登陆界面:
验证用户名密码的格式和正确性从略
“添加用户”
主要代码:
privatevoidbtnYes_Click(objectsender,EventArgse)
{
stringuserName=txtName.Text;
stringpassword=txtPwd.Text;
stringleibie="";
if(radioButton1.Checked)leibie=radioButton1.Text;
elseleibie=radioButton2.Text;
stringconnString="DataSource=localhost;InitialCatalog=MySchool;UserID=sa";
SqlConnectionconnection=newSqlConnection(connString);
//获取用户名和密码匹配的行的数量的SQL语句
stringsql=String.Format("selectcount(*)fromyonghuwhereuserName='{0}'andpassword='{1}'andleibie='{2}'",userName,password,leibie);
try
{
connection.Open();//打开数据库连接
SqlCommandcommand=newSqlCommand(sql,connection);//创建Command对象
intnum=(int)command.ExecuteScalar();//执行查询语句,返回匹配的行数
if(num>0)
{
if(leibie==radioButton1.Text)
{
//如果有匹配的行,则表明用户名和密码正确
//MessageBox.Show("欢迎进入成绩管理系统!
","登录成功",MessageBoxButtons.OK,MessageBoxIcon.Information);
From1mainForm=newFrom1();//创建主窗体对象
mainForm.Show();//显示窗体
this.Visible=false;//登录窗体隐藏
}
else
{
MessageBox.Show("欢迎进入成绩管理系统!
","登录成功",MessageBoxButtons.OK,MessageBoxIcon.Information);
MainFrmmainForm=newMainFrm();//创建主窗体对象
mainForm.Show();//显示窗体
this.Visible=false;//登录窗体隐藏
}
}
else
{
MessageBox.Show("您输入的用户名或密码错误!
","登录失败",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message,"操作数据库出错!
",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
}
finally
{
connection.Close();//关闭数据库连接
}
}
privatevoidbtnCancel_Click(objectsender,EventArgse)
{
txtName.Text="";
txtPwd.Text="";
txtName.Focus();
}
成绩查询:
课程查询:
查找功能代码:
privatevoidselect_course_Load(objectsender,EventArgse)
{
//TODO:
这行代码将数据加载到表“mySchoolDataSet6.CourseMsg”中。
您可以根据需要移动或移除它。
this.courseMsgTableAdapter.Fill(this.mySchoolDataSet6.CourseMsg);
GetAllInfo(strSql1);
}
privatevoidGetAllInfo(strings)
{
mycon=newSqlConnection(strCon);
myda=newSqlDataAdapter(s,mycon);
myds=newDataSet();
myda.Fill(myds);
dataGridView1.DataSource=myds.Tables[0];
}
SqlConnectionmycon;
SqlDataAdaptermyda;
DataSetmyds;
stringstrCon="DataSource=localhost;InitialCatalog=MySchool;UserID=sa";
stringstrSql1="SelectCourseIDas课程号,CourseNameas课程名,CourseClassas课程类别,Requiredas必修,Creditas学分,PrelectionCreditas理论学时,ExperimentCreditas实验学时fromCourseMsg";
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringFindSql=string.Format("SelectCourseIDas课程号,CourseNameas课程名,CourseClassas课程类别,Requiredas必修,Creditas学分,PrelectionCreditas理论学时,ExperimentCreditas实验学时fromCourseMsgwhereCourseID='{0}'orCourseName='{1}'",textBox2.Text,textBox1.Text);
GetAllInfo(FindSql);
}
按姓名查询:
学生成绩管理:
度取窗体时,同时读取数据库数据:
privatevoidselect_score_Load(objectsender,EventArgse)
{
//TODO:
这行代码将数据加载到表“mySchoolDataSet7.ScoreMsg”中。
您可以根据需要移动或移除它。
this.scoreMsgTableAdapter.Fill(this.mySchoolDataSet7.ScoreMsg);
GetAllInfo(strSql1);
}
privatevoidGetAllInfo(strings)
{
mycon=newSqlConnection(strCon);
myda=newSqlDataAdapter(s,mycon);
myds=newDataSet();
myda.Fill(myds);
dataGridView1.DataSource=myds.Tables[0];
}
SqlConnectionmycon;
SqlDataAdaptermyda;
DataSetmyds;
stringstrCon="DataSource=localhost;InitialCatalog=MySchool;UserID=sa";
stringstrSql1="SelectStudentMsg.StudentNoas学号,CourseMsg.CourseIDas课程号,StudentMsg.StudentNameas姓名,CourseMsg.CourseNameas课程名,Scoreas成绩fromScoreMsg,StudentMsg,CourseMsgwhereStudentMsg.StudentNo=ScoreMsg.StudentNoandCourseMsg.CourseID=ScoreMsg.CourseID";
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringFindSql=string.Format("SelectStudentMsg.StudentNoas学号,StudentMsg.StudentNameas姓名,CourseMsg.CourseIDas课程号,CourseMsg.CourseNameas课程名,Scoreas成绩fromScoreMsg,StudentMsg,CourseMsgwhere(StudentMsg.StudentNo='{0}'orCourseMsg.CourseID='{1}'orStudentMsg.StudentName='{2}'orCourseMsg.CourseName='{3}')andStudentMsg.StudentNo=ScoreMsg.StudentNoandCourseMsg.CourseID=ScoreMsg.CourseID",textBox3.Text,textBox4.Text,textBox1.Text,textBox2.Text);
GetAllInfo(FindSql);
}
}
五系统调试、结果分析
1.输入用户名和密码,进入学生成绩管理系统的功能选择。
2.点击”添加学生成绩”标签到记录的添加界面,输入要添加的学生记录。
点击”返加菜单”标签返加到功能界面。
(打开数据表,添加成功)
3点击”按姓名查询”标签到查询记录的界面,输入要查询的姓名。
4点击”按课程查询”标签到查询记录的界面,输入要查询的课程名。
5.点击”学生成绩管理”标签到修改记录的界面,输入要删除的学生学号,可以直接在数据表中修改。
点击”返加菜单”标签返加到功能界面。
(打开数据表,修改或者查询成功)
6.验证结束,运行正常。
(以上只是我负责的功能模块)
六实验总结
这次试验是我和杜芊锐同学合作完成的,她负责管理员那一块的功能实现,我负责登陆和学生界面那一块功能的实现。
一开始的需求分析是我们一起讨论后决定的。
最后虽然做出来了,但是整个系统还是有很多不足之处。
这是由于我们知识的缺乏所导致的,以后再只是更加完善之后再做修改。
通过本次数据库系统应用的课程实践环节不仅加强了对C#这门面向对象语言的灵活应用及知识点的理解,而且熟练了对数据库MicrosoftSQLSever2005以及对MicrosoftVisualStudio2010的各项操作。
同时也很大程度上提高了自己的动手能力和独立思考能力,更学会了如何与小组成员团结合作共同完成本软件的开发工作。
本实例分别从数据库设计以及应用程序设计的角度详细描述了如何开发图书借阅管理系统应用程序。
从本实例中我学到了各种控件包括Label,Textbox,ComboBox,Button,RichTextBox,DataGrideView,FormStatus,toolScrip,ToolScripButton,DateTimePicker,ToolScripMenuItem,TabControl等的使用方法。
该实例采用MicrosoftVisualStudio2010以及MicrosoftSQLSever2005开发,由于C/S架构的应用程序多偏重于操作,因而需要充分考虑用户的需要,尽可能在界面中提供完善的功能,并且能够降低用户的操作难度。
本系统采用三层架构的编程思想,通常意义上的三层架构就是将整个业务应用划分为:
表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
为区分层次的目的即为了“高内聚,低耦合”。
各层的作用如下:
数据访问层主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。
业务逻辑层主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑的处理。
表示层位于最外层(最上层),离用户最近。
用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
在前面建立的数据访问以及业务逻辑处理的那些类库提供了我们在应用程序中大部分的操作方法,我们在后面的窗体中主要应相应功能调用相对应的方法就可以了,不需要再多写繁杂的程序,提高了代码的重用性。
三层架构的编程思想为今后的大型程序开发打下了良好的基础。