基于C#NET和SQLServer的数据库应用系统开发实训报告Word文档下载推荐.docx
《基于C#NET和SQLServer的数据库应用系统开发实训报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于C#NET和SQLServer的数据库应用系统开发实训报告Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
1.1功能需求分析
根据数据库中存储的数据对登录的用户账号进行验证,再进行判断是否授予访问权限。
管理员可以根据需要,对学生的基本信息进行查看、添加、修改以及删除,详细操作如下:
(1)添加学生信息的功能主要包括对学生信息的输入,包括待输入学生的学号、姓名、年龄、性别、专业名。
(2)查询学生信息的功能就是对已经添加的学生信息按学号进行查看,有利于管理者对学校学生信息的了解。
(4)删除学生信息的功能是将整个系统的学生信息进行按学号进行删除。
(5)修改学生信息的功能是输入要修改学生的学号分别修改学号、姓名、年龄、性别、所在学院和专业名。
管理员可以根据需要,对课程的基本信息进行查看、添加、修改以及删除,详细操作如下:
(1)课程信息的全部查询和按条件查询;
(2)课程信息的添加和删除.在数据库中要进行学生信息的编写包括学生的基本信息:
学号、姓名、性别、出生日期和所在系;
(3)课程基本信息:
课程名、课程号、先行课和学分;
(4)用户信息:
用户名、用户密码和权限。
学生根据自己的需要,对学生基本信息进行查看具体功能有
(1)对课程表的查看、打印。
(2)对自己信息的修改。
为了编程的方便关系名和属性名通常用英文命名,下面是用英文命名的关系模式:
Course(courseid,coursename,ecourse,coursepno);
SC(stuid,courseid,grade);
Student(sno,sName,sex,Birthday,sDept,remark)
User(uname,upass,qx)
1.2性能需求分析
a)稳定性:
软件应具备长期持续工作的能力。
b)安全性:
有良好的用户身份认证体制和灵活的密码更改模块。
c)实用性:
用户界面做到直观、友好,业务人员只需经过简单培训即可操作。
d)可靠性:
采用良好的操作软件和数据库,确保数据的一致性和完整性,并使软件免受病毒感染。
1.3业务流程的分析
通过业务流程的分析将业务流程逻辑与实现各业务的应用分离、协调流程参与者的相互关系、集成内部和外部资源以及监控和分析流程性能,实现对业务流程整个生存周期的控制。
它负责解释流程建模工具定义的业务流程逻辑,把任务分派给执行者,并根据任务执行的返回结果决定下一步的任务,控制并协调各种复杂工作流程的执行并且同步各个客户端的反应,根据组织机构模型中所定义的岗位分派策略获取实际的执行者,并同时获得所需的组织信息。
本软件的业务流程是:
用户登录软件前首先判断用户名和密码是否正确,如果不正确就停留在登录界面重新输入;
如果输入的信息正确就可以顺利的进入服务器端进行软件管理。
1.3.1软件数据流图
数据流图(DFD)是一种描述数据流和加工的图形表示。
当数据输入到软件后,经过一系列变换(加工),最后输出新的数据。
所以它服务于两个目的:
(1)指明数据在软件中移动时如何被变换;
(2)描述对数据流进行变换的功能(和子功能)。
图1.1软件数据流图
1.3.2软件数据字典
数据字典最重要的用途是作为分析阶段的工具。
在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。
数据字典是关于数据的信息集合,也就是对数据流图中包含的所有元素定义的集合。
经过上述软件功能分析和需求总结,考虑到将来功能上的扩展,设计如下面所示的数据项和数据结构。
(1)学生信息
包括的数据项有:
学生姓名、学生学号、学生性别、学生生日、专业名称
(2)管理员信息
账号名、登录密码、权限
1.4数据需求分析
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的各种实体,以及它们之间的关系。
根据上面的设计规划出的实体有:
学生实体、管理员实体、课程实体
a)学生实体属性图:
课程
B)课程信息实体属性
C)管理员信息实体属性
2软件的设计
软件的数据库设计
从软件的稳定性方面考虑,本软件使用SQLServer2005数据库软件。
结合需求分析中的E-R图,设计了各数据表。
学生表结构
列名
数据类型
长度
是否允许为空值
默认值
说明
sno
char
10
否
无
主键
sname
8
sex
2
是
birthday
smalldatetime
4
sdept
varchar
26
课程表结构
cno
cname
30
precro
credit
tinyint
1
用户表结构
uname
upass
3软件的实现
在数据库中的配置
创建表:
进入SQLServerStudio中,在“对象资源管理器”窗口中展开“数据库”结点,再在展开所选择的具体数据库结点OnlineCS,右击“表”结点,在弹出的快捷菜单中选择“新建表”命令,此时将进入表设计器,即可进行表的定义;
建完表之后,还要创建列名,设置数据类型,设置列是否允许为空。
在表设计器的“列名”列中输入学生表的所有列名;
在”数据类型”列中选择相应的数据类型;
在“允许空”列中设置个列是否可以为空,允许就打勾,不允许就不打;
并且还要设置主键,主键的确定是唯一可以确定一个元组和其他元组不同的属性组。
学生表、课程表、用户表和学生课程表都是由以上方法创建的。
考虑到不同用户的登录界面不同因此要进行权限的设置如:
学生登录时出现的是学生的登录界面,老师登录时出现的是老师的登录界面这样就防止了学生会篡改自己的信息,造成了信息的不安全性。
在创建完表以后要对表中的列进行数据类型、数据长度、是否允许空值等方面的设置。
要注意的是在学生表中对Brithday的设置事日期时间型在User表中对权限的设置是tinyint,在SC表中grade的数据类型的设置要设为smallint其他的根据实际情况来选择数据的类型和长度。
注意在是否允许空值这一方面,主键是不允许有空值出现的不然会报错。
由于用户需要登录到数据库中因此要在服务器的安全性里添加用户,在数据库中的安全性中添加用户最后在每个表中右键单击属性设置每个登录的权限,综合考虑各方面的需求jwgl的用户允许所有的权限,dl的权限为Update和select,student的权限为Update
设置好权限后数据库的任务就完成了,接下来的任务就是运用C#.net来进行编程,用来连接数据库。
在Onlinecs中添加应用<
addname="
jwgl"
connectionString="
DataSource=.;
InitialCatalog=OnlineCS;
PersistSecurityInfo=True;
UserID=jwgl;
Password=123"
/>
在登录窗体的后台程序上加上publicstaticstringsqlconn=System.Configuration.ConfigurationManager.ConnectionStrings["
dl"
].ConnectionString;
和usingSystem.Data.SqlClient;
以调用数据库。
3.1管理员登陆界面和设计
对登录窗体的设置首先右击Onlinecs单击添加Windows窗体命名为loginfrm.cs在其中增加用户名框,密码框和两个按钮,在后台的程序中要注意由于是不同的权限登录因此要通过一个if语句来进行跳转:
privatevoid按条件查询ToolStripMenuItem_Click(objectsender,EventArgse)
{
antiaojianchaxunkechengtjcxkc=newantiaojianchaxunkecheng();
tjcxkc.Show();
this.Hide();
}
privatevoid添加课程ToolStripMenuItem_Click(objectsender,EventArgse)
tianjiakechengtjkc=newtianjiakecheng();
tjkc.Show();
privatevoid删除课程ToolStripMenuItem_Click(objectsender,EventArgse)
shanchukechengsckc=newshanchukecheng();
sckc.Show();
privatevoid按条件查询ToolStripMenuItem1_Click(objectsender,EventArgse)
antiaojianchaxunxueshengxinxintjcxxs=newantiaojianchaxunxueshengxinxin();
tjcxxs.Show();
privatevoid查询所有ToolStripMenuItem1_Click(objectsender,EventArgse)
chaxunsuoyouxueshengxinxicxsyxsxx=newchaxunsuoyouxueshengxinxi();
cxsyxsxx.Show();
privatevoid查询所有ToolStripMenuItem_Click(objectsender,EventArgse)
chaxunsuoyoukechengcxsykc=newchaxunsuoyoukecheng();
cxsykc.Show();
privatevoid删除学生信息ToolStripMenuItem_Click(objectsender,EventArgse)
shanchuxueshengxinxiscxsxx=newshanchuxueshengxinxi();
scxsxx.Show();
privatevoid添加学生信息ToolStripMenuItem_Click(objectsender,EventArgse)
tianjiaxueshengxinxitjxsxx=newtianjiaxueshengxinxi();
tjxsxx.Show();
privatevoid课程信息查询ToolStripMenuItem_Click(objectsender,EventArgse)
privatevoid打印课程表ToolStripMenuItem_Click(objectsender,EventArgse)
kechengbaobiaobaobiao=newkechengbaobiao();
baobiao.Show();
privatevoid打印学生表ToolStripMenuItem_Click(objectsender,EventArgse)
xueshengbaobiaostudent=newxueshengbaobiao();
student.Show();
privatevoid查询登录信息ToolStripMenuItem_Click(objectsender,EventArgse)
gengxinstudentstudent1=newgengxinstudent();
student1.Show();
privatevoid更新课程信息ToolStripMenuItem_Click(objectsender,EventArgse)
gengxincoursecourse=newgengxincourse();
course.Show();
privatevoid输入学生成绩ToolStripMenuItem_Click(objectsender,EventArgse)
shuruxueshengchengjisr=newshuruxueshengchengji();
sr.Show();
}
3.2信息查询模块
privatevoidbutton1_Click(objectsender,EventArgse)
kch=textBox1.Text;
kechenghaochaxunkccx=newkechenghaochaxun();
kccx.Show();
privatevoidbutton2_Click(objectsender,EventArgse)
kcm=textBox2.Text;
kechengmingchaxunkcmcx=newkechengmingchaxun();
kcmcx.Show();
publicstaticinti=0;
publicstaticintLastNum=0;
publicstaticstringsqlconn=System.Configuration.ConfigurationManager.ConnectionStrings["
publicDataSetdsResult(intcurrentIndex)
SqlConnectionconn=newSqlConnection(sqlconn);
intpagesize=1;
stringstrcmd="
select*fromcoursewherecoursenamelike'
%"
+antiaojianchaxunkecheng.kcm+"
%'
"
;
SqlDataAdapterda=newSqlDataAdapter(strcmd,conn);
DataSetds=newDataSet("
course"
);
da.Fill(ds,currentIndex,pagesize,"
returnds;
publicintMax()
conn.Open();
selectcount(*)fromcoursewherecoursenamelike'
SqlCommandcmd=newSqlCommand(strcmd,conn);
returnint.Parse(cmd.ExecuteScalar().ToString());
privatevoidkechengmingchaxun_Load(objectsender,EventArgse)
LastNum=Max();
textBox1.Text=LastNum.ToString();
if(LastNum>
0)
DataSetdsNew=dsResult(0);
this.textBox2.Text=dsNew.Tables[0].Rows[0][0].ToString();
this.textBox3.Text=dsNew.Tables[0].Rows[0][1].ToString();
this.textBox4.Text=dsNew.Tables[0].Rows[0][2].ToString();
this.textBox5.Text=dsNew.Tables[0].Rows[0][3].ToString();
antiaojianchaxunkecheng.kcm=dsNew.Tables[0].Rows[0][0].ToString();
i=0;
DataSetdsnew=dsResult(i);
this.textBox2.Text=dsnew.Tables[0].Rows[0][0].ToString();
this.textBox3.Text=dsnew.Tables[0].Rows[0][1].ToString();
this.textBox4.Text=dsnew.Tables[0].Rows[0][2].ToString();
this.textBox5.Text=dsnew.Tables[0].Rows[0][3].ToString();
antiaojianchaxunkecheng.kcm=dsnew.Tables[0].Rows[0][0].ToString();
i-=1;
if(i>
=0)
this.textBox2.Text=dsnew.Tables[0].Rows[0][1].ToString();
this.textBox3.Text=dsnew.Tables[0].Rows[0][2].ToString();
this.textBox4.Text=dsnew.Tables[0].Rows[0][3].ToString();
this.textBox5.Text=dsnew.Tables[0].Rows[0][4].ToString();
else
i+=1;
MessageBox.Show("
这已经是第一条记录了!
privatevoidbutton3_Click(objectsender,EventArgse)
if(i<
=(LastNum-1))
这已经是最后一条记录了!
privatevoidbutton4_Click(objectsender,EventArgse)
DataSetdsnew=dsResult(LastNum-1);
antiaojianchaxunkecheng.kcm=dsnew.Tables[0].Rows[0][0].