实验八数据库应用系统.docx
- 文档编号:27468879
- 上传时间:2023-07-01
- 格式:DOCX
- 页数:30
- 大小:2.60MB
实验八数据库应用系统.docx
《实验八数据库应用系统.docx》由会员分享,可在线阅读,更多相关《实验八数据库应用系统.docx(30页珍藏版)》请在冰豆网上搜索。
实验八数据库应用系统
实验八开发数据库应用系统
1.实验目的
●利用SQLServe作为后台数据库,使用C#作为前台开发语言,通过ADO.NET数据库访问技术,构建一个应用系统,实现对数据库的连接以及数据查询、修改和更新等操作。
2.实验任务与要求
A学生成绩管理系统
(一)系统功能分析
学生成绩管理系统的总体任务是实现学生课程信息处理的系统化、规范化和自动化。
该系统要实现的主要功能有:
(1)用户登录管理
完成用户信息的确认,确保只有合法的用户才能使用本系统。
(2)基本信息管理
完成学生信息、课程信息的管理。
(3)成绩信息管理
包括学生选课信息管理以及选课信息的查询统计。
其中,选课信息的查询统计包括:
按学号查询、按课程查询等。
(二)系统功能模块设计
按
(一)给出的各项功能,系统的功能模块划分如下:
(1)用户登录模块(UserLogin.cs)
(2)基本信息管理模块
a.学生信息管理模块(frmStudent.cs)
b.课程信息管理模块
(3)选课信息管理模块
a.学生选课信息管理模块
b.选课信息统计模块
◆按学号查询模块(frmQuerySno.cs)
◆按课程查询模块
(三)数据库设计
数据库结构的设计直接影响到应用系统的效率以及实现的效果。
合理的数据库结构可以提高数据存储的效率,确保数据的完整性和一致性。
本系统直接采用实验一的学生-课程数据库。
(请自行检查student、sc和course表的主码和外码是否已设置好)
在学生-课程数据库中增加一个用户表。
createtableusers
(UserIDnvarchar(8)notnullprimarykey,
UserNamenvarchar(20),
Passwordnvarchar(8)
)
(四)设置数据库结构
(1)设置SQLServer登录帐号
按实验七的方法,在服务器的“安全性”中新建SQLServer验证的帐号applogin,默认数据库为学生-课程数据库。
(2)在学生-课程数据库的“安全性”中设置用户applogin的数据库成员角色身份为db_owner。
(3)创建视图(1个)
--显示学生成绩信息的视图
createviewview_stu_grade
as
selectstudent.snoasstudentsno,sname,sex,dept,o,cname,grade,credit
fromstudent,sc,course
wherestudent.sno=sc.snoando=o
(4)创建存储过程(3个)
--向学生表插入数据
createprocInsertStudent
@Snochar(8),@Snamechar(8),@Ageint,@Sexchar
(2),@Deptvarchar(50)
as
deletefromstudentwhereSno=@Sno
insertintostudent
values(@Sno,@Sname,@Age,@Sex,@Dept)
--更新学生表的数据
createprocUpdateStudent
@Snochar(8),@Snamechar(8),@Ageint,@Sexchar
(2),@Deptvarchar(50)
as
Updatestudent
setsno=@Sno,sname=@Sname,age=@Age,sex=@Sex,dept=@Dept
whereSno=@Sno
--删除Student表的数据
createprocDeleteStudent
@Snochar(8)
as
deletefromstudent
wheresno=@Sno
(五)系统实现过程
以下内容在VisualStudio2010平台中完成。
(1)创建项目,命名为StuGrade。
(2)创建系统的主窗口
更改窗体frmMain的标题:
在窗体设计视图的下方空白处点击右键,
选择“属性”,在属性列表中修改原标题为“学生成绩管理系统”
(2)创建公共类
为项目StuGrade添加一个公共类DataBase,保存为文件DataBase.cs。
该类的功能是实现对学生-成绩数据库的存取。
DataBase.cs的代码如下。
(绿色字体为注释,红色字体为需要理解含义的代码)
//引入需要使用的系统包
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Data;
usingSystem.Data.SqlClient;
namespaceStuGrade
{
classDataBase
{
SqlConnectionSqlConn=newSqlConnection();//定义一个数据库连接对象
//SQLServer验证登录。
如果失败,请检查登录名app的属性,是否具有dbo权限
stringsConn="Server=ASUS-PC;InitialCatalog=sales;UserID=applogin;Password=app";
publicvoidOpen()//实现连接数据库并打开连接操作
{
SqlConn.ConnectionString=sConn;
if(SqlConn==null)
{
SqlConn=newSqlConnection(sConn);
}
if(SqlConn.State==ConnectionState.Closed)
SqlConn.Open();
}
publicvoidClose()//实现关闭数据库连接操作
{
if(SqlConn!
=null)
{
SqlConn.Close();
}
}
//RunSelectSQL是重载方法,根据需要实现SELECT查询语句,返回数据视图或者结果集。
publicDataViewRunSelectSQL(stringsqlstr)
{
this.Open();
DataSetds=newDataSet();
SqlDataAdapterada=newSqlDataAdapter(sqlstr,SqlConn);
ada.Fill(ds);
returnds.Tables[0].DefaultView;
}
publicDataSetRunSelectSQL(stringsqlstr,boolb)
{
this.Open();
DataSetds=newDataSet();
SqlDataAdapterada=newSqlDataAdapter(sqlstr,SqlConn);
ada.Fill(ds);
returnds;
}
publicSqlConnectionGetConnection()//获取数据库的连接
{
if(SqlConn==null)
SqlConn=newSqlConnection(sConn);
returnSqlConn;
}
}
}
(3)创建用户登录窗体
用户登录窗口包括的控件有:
Label1:
学生成绩管理系统
Label2:
用户姓名
Label3:
密码
输入用户名和密码的两个文本框(TextBox)分别命名为txtUserName和txtPwd。
其中文本框txtPwd的PasswordChar属性设置为*,表示无论用户在文本框键入什么字符,都显示为星号。
两个命令按钮(Button)分别命名为btnLogin和btnCancel。
“确定”按钮对应的代码为:
(双击“确定”按钮即可添加代码;而要编辑代码时,右键点击“确定”按钮,选择“查看代码”)
privatevoidbtnLogin_Click(objectsender,EventArgse)
{
DataBasedb=newDataBase();//创建一个DataBase对象,负责连接数据库
stringstr;
if((txtUserName.Text.Trim()=="")||(txtPwd.Text.Trim()==""))
{
MessageBox.Show("请输入用户名和密码。
",this.Text,MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
try
{
str="SelectUserID,UserName,Passwordfrom[Users]whereUserName='"+
txtUserName.Text.Trim()+"'andPassword='"+txtPwd.Text.Trim()+"'";
if(db.RunSelectSQL(str).Count>=1)//如果用户名和密码正确
{
frmMainobj=newfrmMain();//生成系统主窗口
obj.Show();//显示系统主窗口
this.Hide();//隐藏登录窗口
}
else
{
MessageBox.Show("用户名或密码有错误。
",this.Text,MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
catch
{
MessageBox.Show("数据库服务器连接失败。
",this.Text,MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
db.Close();
db=null;
}
}
“取消”按钮对应的代码为:
privatevoidbtnCancel_Click(objectsender,EventArgse)
{
this.Close();//关闭此窗口
}
修改项目的启动窗口,双击Program.cs,找到Application.Run()代码,修改为UserLogin,意为运行系统时首先打开UserLogin窗体(登录界面)。
设置好之后保存,请点击工具栏上的绿色三角迎按钮,运行系统,测试是否能正确登录,进入学生成绩管理系统的主界面。
接下来,完成剩下的步骤。
(4)创建学生信息管理窗体
新建如下窗体,命名为frmStudent.cs。
其中,五个文本框TextBox分别命名为:
txtSno,txtSname,txtSex,txtAge,txtDept。
第一行命令按钮分别命名为:
btnFirst,btnPrev,btnNext,btnLast,btnExit。
第二行命令按钮分别命名为:
btnAdd,btnDelete,btnUpdate,btnSave,btnCancel。
frmStudent.cs的代码如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Data.SqlClient;
namespaceStuGrade
{
publicpartialclassfrmStudent:
Form
{
intiCurrentRow;
DataViewmyDataView=newDataView();
DataRowViewmyRow;
publicfrmStudent()
{
InitializeComponent();
}
privatevoidfrmStudent_Load(objectsender,EventArgse)
{
LoadDataSet();
if(myDataView.Count>0)
{
iCurrentRow=0;
showData();
btnSave.Enabled=false;
btnCancel.Enabled=false;
}
else
{
iCurrentRow=-1;
btnAdd.PerformClick();
}
}
//装载Student表的所有记录
publicvoidLoadDataSet()
{
DataBasedb=newDataBase();
myDataView=db.RunSelectSQL("SELECT*FROMStudent");
db.Close();
}
//把表中的当前记录显示在窗体控件上
privatevoidshowData()
{
if(myDataView.Count>0)
{
myRow=myDataView[iCurrentRow];
//SELECT*FROMStudent
this.txtSno.Text=myRow["Sno"].ToString();
this.txtSname.Text=myRow["Sname"].ToString();
this.txtSex.Text=myRow["Sex"].ToString();
this.txtAge.Text=myRow["Age"].ToString();
this.txtDept.Text=myRow["Dept"].ToString();
}
else
{
this.txtSno.Text="";
this.txtSname.Text="";
this.txtSex.Text="";
this.txtAge.Text="";
this.txtDept.Text="";
//设置按钮状态
this.btnFirst.Enabled=false;
this.btnPrev.Enabled=false;
this.btnNext.Enabled=false;
this.btnLast.Enabled=false;
this.btnAdd.Enabled=false;
this.btnDelete.Enabled=false;
this.btnUpdate.Enabled=false;
this.btnSave.Enabled=true;
this.btnCancel.Enabled=true;
this.txtSno.Focus();
}
}
privatevoidtextBox3_TextChanged(objectsender,EventArgse)
{
}
privatevoidbtnFirst_Click(objectsender,EventArgse)
{
iCurrentRow=0;
btnFirst.Enabled=false;
btnPrev.Enabled=false;
btnNext.Enabled=true;
btnLast.Enabled=true;
showData();
}
privatevoidbtnPrev_Click(objectsender,EventArgse)
{
btnNext.Enabled=true;
btnLast.Enabled=true;
iCurrentRow=iCurrentRow-1;
if(iCurrentRow<0)
{
iCurrentRow=0;
btnPrev.Enabled=false;
btnFirst.Enabled=false;
}
showData();
}
privatevoidbtnNext_Click(objectsender,EventArgse)
{
btnPrev.Enabled=true;
btnFirst.Enabled=true;
iCurrentRow=iCurrentRow+1;
if(iCurrentRow>myDataView.Count-1)
{
iCurrentRow=myDataView.Count-1;
btnNext.Enabled=false;
btnLast.Enabled=false;
}
showData();
}
privatevoidbtnLast_Click(objectsender,EventArgse)
{
iCurrentRow=myDataView.Count-1;
btnLast.Enabled=false;
btnNext.Enabled=false;
btnFirst.Enabled=true;
btnPrev.Enabled=true;
if(iCurrentRow>0)
showData();
}
privatevoidbtnExit_Click(objectsender,EventArgse)
{
this.Close();
}
privatevoidbtnAdd_Click(objectsender,EventArgse)
{
this.txtSno.Text="";
this.txtSname.Text="";
this.txtSex.Text="";
this.txtAge.Text="";
this.txtDept.Text="";
//设置按钮状态
this.btnFirst.Enabled=false;
this.btnPrev.Enabled=false;
this.btnNext.Enabled=false;
this.btnLast.Enabled=false;
this.btnAdd.Enabled=false;
this.btnDelete.Enabled=false;
this.btnUpdate.Enabled=false;
this.btnSave.Enabled=true;
this.btnCancel.Enabled=true;
this.txtSno.Focus();
}
privatevoidbtnDelete_Click(objectsender,EventArgse)
{
if(MessageBox.Show("确定要删除该记录吗?
","确认信息",MessageBoxButtons.OKCancel,MessageBoxIcon.Question)==DialogResult.Cancel)
{
return;
}
DataBasedb=newDataBase();
try
{
db.Open();
SqlCommandcmd=newSqlCommand("DeleteStudent",db.GetConnection());
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@Sno",SqlDbType.Char,8).Value=txtSno.Text;
cmd.ExecuteNonQuery();
db.Close();
db=null;
MessageBox.Show("删除记录成功。
");
if(iCurrentRow>0)
iCurrentRow=iCurrentRow-1;
else
iCurrentRow=0;
LoadDataSet();
showData();
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbtnUpdate_Click(objectsender,EventArgse)
{
DataBasedb=newDataBase();
try
{
db.Open();
SqlCommandcmd=newSqlCommand("UpdateStudent",db.GetConnection());
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("@Sno",SqlDbType.Char,8).Value=txtSno.Text;
cmd.Parameters.Add("@Sname",SqlDbType.Char,8).Value=txtSname.Text;
cmd.Parameters.Add("@Age",SqlDbType.Int).Value=txtAge.Text;
cmd.Parameters.Add("@Sex",SqlDbType.Char,2).Value=txtSex.Text;
cmd.Parameters.Add("@Dept",SqlDbType.NVarChar,50).Value=txtDept.Text;
cmd.ExecuteNonQuery();
db.Close();
db=null;
LoadDataSet();
MessageBox.Show("更新记录成功。
");
}
catch(Exceptionex)
{
MessageBox.Show(ex.Message);
}
}
privatevoidbtnSave_Click(objectsender,EventArgse)
{
DataBasedb
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 数据库 应用 系统