帮助文档 学生成绩管理系统文档.docx
《帮助文档 学生成绩管理系统文档.docx》由会员分享,可在线阅读,更多相关《帮助文档 学生成绩管理系统文档.docx(20页珍藏版)》请在冰豆网上搜索。
帮助文档学生成绩管理系统文档
软件工程
题目:
学生成绩管理系统
学院:
数信学院
专业:
软件专业
班级:
08级软件班
组名:
第四组
组成员:
周昊颖(组长)赵亚慧陈艳华郝梦洁
指导教师:
完成日期:
目录
一、绪论
1、引言
1.1编写目的
该系统的编写目的是提高学生成绩管理的工作效率,使人们从乏味的数据登记和统计工作中解脱出来,保证工作的准确率,为老师及同学提供充足的信息和快捷的查询手段。
数据库作为计算机应用的一部分,对学生成绩查询进行管理具有手工管理无法比拟的优点,例如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长等。
这些优点能够极大地提高学生成绩查询和管理的效率。
1.2项目背景
目前国内一些科研、企事业单位均已经开始应用计算机进行数据类管理,实践表明计算机管理能提高工作效率。
与此类似,今年来许多学校也都逐渐应用计算机来进行学生成绩的管理。
为响应国家提高人口素质的号召,许多学校每年都在扩招,这在一定程度学校的成绩管理带来许多不便:
每个学期要登记考试成绩,学期结束要进行相应的统计。
因为工作强度大,所以需要有一种管理方便、错误率小的管理方法来取代人工管理,而应用计算机管理是最有效的途径。
2、任务描述
2.1目标
学生成绩管理系统为老师及同学提供充足的信息和快捷的查询手段。
学生成绩管理系统涉及不同类别的用户,分别为学生、教师和管理员。
学生只能对系统的信息进行查询和反馈。
而老师则可以对信息进行录入和修改,并根据相关信息对学生的成绩进行求平均值、排序和求总和等相关的操作,但是不能对系统进行管理和进行系统权限的分配。
管理员账户则拥有教师和学生拥有的全部权限。
2.2运行环境
软件环境:
WindowsXP操作系统
硬件环境:
内存1G,硬盘100G配置以上的计算机
3、数据描述
3.1输入收据
用户名:
000密码:
000权限:
用户
用户名:
111密码:
111权限:
管理员
3.2输出数据
权限是学生:
进入学生成绩查询界面进行操作
权限是教师:
进入教师管理界面进行操作
权限是管理员:
进入管理员管理界面进行操作
4、功能要求
学生成绩管理系统主要应用于学校。
通过调查,通用的学生成绩管理系统包括学生信息管理、教师信息管理、成绩管理等功能。
在系统设计的时候,需要遵循以下原则。
(1)良好的人机界面。
(2)方便的数据查询。
(3)在相应的权限下,增添、修改和删除数据方便。
二、需求分析
1、需求调查
1.1组织机构调查
曾经调查某一个学校的教务管理人员了解相关学生管理的知识,根据其提供的内容进行分析总结
2、功能需求
2.1功能划分
经过分析,学生成绩管理系统所必备的功能应当有登录系统、系统管理、教师管理和学生管理等,其中每个功能都由若干相关联的子功能模块组成。
2.2功能描述
(1)“登录系统”模块完成以下功能:
►系统对登录人员的身份进行验证。
►当前系统权限设置。
(2)“管理员管理”模块完成以下功能:
►管理员进入系统程序可以添加、删除管理员及修改当前管理员密码。
►管理员可以添加、删除用户,修改用户密码。
►管理员可以执行系统所具有的所有操作功能
(3)“教师管理”模块完成以下功能:
►成绩的添加,修改和查询。
►成绩的排序、统计等操作。
(4)“学生管理”模块完成以下功能:
►查询个人成绩、个人基本信息
3、数据描述
3.1数据库描述
学生成绩管理系统中的实体包括:
学生、课程、用户,这些实体组成的E-R图如下:
4、性能需求
4.1数据精确度
登录系统的时间不超过20秒
4.2时间特性:
响应时间:
2秒
更新处理时间:
2秒
数据转换与传输时间:
视操作系统和计算机而异
4.3适应性:
学生成绩管理系统适应性强,可以在所有Windows操作系统
5、运行需求
5.1用户界面
界面由MicrosoftVisualStudio2010设计实现,完全基于windows兼容的桌面平台
5.2硬件接口
本系统要求运行计算机具有数据库服务器
5.3基本要求
建议环境
1)操作系统:
windows系列
2)数据库管理系统:
VF数据库
3)开发工具:
MicrosoftVisualFoxpro
软件需求:
操作系统WINDOWS2000AdvanceServer以上;数据库服务器端软件MicrosoftVisualFoxpro
硬件需求:
,P43.0GXeonCPU/1G内存/360G(10K)SCSI硬盘的服务器,P3以上微机的客户机,P43.0GXeonCPU/1G内存/36G(10K)RAID硬盘的数据库服务器
三、总体设计
1、总体结构和模块外部设计
1.1功能结构
根据业务流程和数据流程画出总体功能结构图如下图所示:
1.2模块设计
管理员模块可以调用教师模块和学生模块。
教师模块可以调用学生模块。
学生模块属于底层模块不可以调用任何模块。
1.3总体结构设计
备注:
箭头表示调用关系
3、数据库设计
3.1逻辑设计
SC表:
记录学生的学号、课程号和成绩
字段名
数据类型
含义说明
空值情况
sno
char
学号
不为空
cno
char
课程号
不为空
grade
float
成绩
可为空
Student表:
描述学生的基本信息例如学号、姓名、性别、年龄和系别等
字段名
数据类型
含义说明
空值情况
sno
char
学号
不为空
sname
char
姓名
可为空
sex
char
成绩
可为空
age
int
年龄
可以为空
dept
char
系别
可以为空
Course表:
记录了每一门课程的信息如课程号、课程名、先修课程号和学分
字段名
数据类型
含义说明
空值情况
cno
char
课程号
不为空
cname
char
课程名
可为空
pre
char
先修课程
可为空
xuefen
float
学分
可以为空
4、外部接口设计
4.1用户界面:
界面布局,显示宽度、颜色等如下图所示:
5、出错处理设计
5.1出错输出信息
出错后弹出错误提示对话框
5.2出错处理对策:
出错后弹出出错提示对话框确定后重新改正输入的内容继续执行。
如果出现严重的错误则需要重新启动学生成绩管理系统以便继续进行工作。
四、详细设计
1、代码设计
学号设计含义:
前两位代表入学年份,其后两位是所在系,在后两位代表本人学号,如070101
2、程序设计
2.1、逐个模块给出以下说明:
●管理员模块功能
●输入项目:
输入管理员的账户、密码并选择管理员权限
●输出项目:
管理员的管理页面,可对整个系统的任何一个模块中的任何一项进行添加、修改和查询
●教师管理模块的功能
●输入项目:
教师的账户、密码并选则教师权限
●输出项目:
教师的管理页面,可以对学生进行相关的操作
●学生管理模块的功能
●输入项目:
输入学生的账户、密码并选择学生权限
●输出项目:
学生的管理页面,学生可以查询自己的相关信息
2.3、接口
●限制条件:
同一种权限内的用户名和密码必须是唯一的。
五、系统实现
该系统新建了几个类命名空间以减少相同代码的重复编写,例如数据库的连接、数据的读入和数据的现实等。
以下是改学生管理系统实现的部分代码,其中加粗的为自己编写,其余的为系统自动生成,编程语言使用的是C#语言。
(1)数据库连接的实现:
publicSqlConnectionconndatabase()
{
stringmySqlConnectionString=(@"
DataSource=localhost;
PersistSecurityInfo=False;
IntegratedSecurity=SSPI;
InitialCatalog=stu_Data");
SqlConnectionmySqlConnection=newSqlConnection(mySqlConnectionString);
try
{mySqlConnection.Open();
}
catch
{
MessageBox.Show("打开数据库失败","提示");
}
returnmySqlConnection;}
(2)系统的登录实现:
privatevoidbutton1_Click(objectsender,EventArgse)
{
myClass.BaseClassmyLoginIni=newmyClass.BaseClass(textBox1.Text.Trim(),comboBox1.Text.Trim());
stringsqlString=@"selectuser,passwordfromLoginTestwherequanxian='"+comboBox1.Text.Trim()+"'";
SqlDataReadermyDataReader=myBaseClass.myRead(sqlString);
while(myDataReader.Read())
{if(myDataReader.GetValue(0).ToString()==textBox1.Text.Trim())
{if(myDataReader.GetValue
(1).ToString()==textBox2.Text.Trim())
{myDataReader.Close();
this.Visible=false;
switch(comboBox1.SelectedIndex)
{case0:
{myStudentInfoAdmin.ShowDialog();
break;};
case1:
{myTeacherInfoAdmin.ShowDialog();
break;
};
case2:
{myAdmin.ShowDialog();
break;}}
this.Close();
return;
}
else
{MessageBox.Show("密码错误!
","提示");
textBox2.Text="";
textBox2.Focus();
return;}
}else
{textBox1.Focus();
continue;}
}
MessageBox.Show("输入的用户名错误","提示");
textBox1.Text="";
textBox1.Focus();
return;
}
privatevoidbutton2_Click(objectsender,EventArgse)
{This.Close();}
privatevoidForm1_Load(objectsender,EventArgse)
{comboBox1.SelectedIndex=0;}
privatevoidbutton3_Click(objectsender,EventArgse)
{this.Hide();
Admin.Show();
}
(1)基本功能函数的实现:
构造函数用来传递用户名和权限
publicBaseClass(stringstruserName,stringtrquanxian)
{
userName=struserName;
quanxian=strquanxian;}
将查到的值显示出来
publicvoidShowDataGrid(stringsqlStr,DataGridViewmyDataGridView)
{SqlDataAdaptermySqlDataAdapter=newqlDataAdapter(sqlStr,link.conndatabase());
DataSetmyDataSet=newDataSet();
mySqlDataAdapter.Fill(myDataSet);
myDataGridView.DataSource=myDataSet.Tables[0].DefaultView;
myDataGridView.Visible=true;
}
读入数据的操作
publicSqlDataReadermyRead(stringsqlString)
{
SqlCommandmySqlCommand=newSqlCommand(sqlString,link.conndatabase());
SqlDataReadermyDataReader=mySqlCommand.ExecuteReader();
returnmyDataReader;
}
(2)删除用户函数的实现:
publicbooldeUser(stringsqlString,ComboBoxmyComboBox)
{inti;
for(i=0;i{if(myComboBox.Text==myComboBox.Items[i].ToString())
{SqlDataReadermyDataReader=myBaseClass.myRead(sqlString);
MessageBox.Show("删除成功","提示");
myComboBox.Text="";
returntrue;
}}
MessageBox.Show("不存在此用户","提示");
myComboBox.Text="";
myComboBox.Focus();
returnfalse;}}
(3)修改用户密码的实现:
publicvoidPassRevi(TextBoxTextBox1,TextBoxTextBox2,TextBoxTextBox3)
{stringsqlString=@"selectpassword
fromLoginTestwhereuser='"+myClass.BaseClass.userName+"'andquanxian='"+myClass.BaseClass.quanxian
+"'";
SqlDataReadermyDataReader=myBaseClass.myRead(sqlString);
while(myDataReader.Read())
{
if(myDataReader.GetValue(0).ToString()==myTextBox1.Text.Trim())
{
if(myTextBox2.Text.Trim()==TextBox3.Text.Trim())
{
stringsqlString1=(@"updateLoginTest
setpassword='"+myTextBox2.Text.Trim()
+"'whereuser='"+myClass.BaseClass.userName
+"'andquanxian='"+myClass.BaseClass.quanxian+"'");
SqlDataReadermyDataReader1=myBaseClass.myRead(sqlString1);
MessageBox.Show("修改成功","提示");
TextBox2.Text="";
TextBox3.Text="";
TextBox1.Text="";
return;
}
else
{
MessageBox.Show("前后密码不一致","提示");
TextBox2.Text="";
TextBox2.Focus();
TextBox3.Text="";
return;
}
}
else
{
MessageBox.Show("初始密码错误","提示");
TextBox1.Text="";
TextBox1.Focus();
return;}}}}
(4)添加学生信息的实现:
privatevoidbutton3_Click(objectsender,EventArgse)
{if(textBox2.Text.Trim()==""||textBox3.Text.Trim()==""||textBox5.Text.Trim()==""||textBox6.Text.Trim()=="")
{MessageBox.Show("输入信息不能为空","警告");
return;
}
if(textBox5.Text.Trim().Length>0)
{try{
Convert.ToInt32(textBox5.Text.Trim());}
catch
{MessageBox.Show("输入年龄类型错误","警告");
textBox5.Text="";
textBox5.Focus();
return;
}
if(Convert.ToInt32(textBox5.Text.Trim())>120||Convert.ToInt32(textBox5.Text.Trim())<1)
{MessageBox.Show("输入年龄超出范围","警告");
textBox5.Text="";
textBox5.Focus();
return;}
}
stringsqlString1=@"
select*fromStudentwhereno='"+textBox2.Text.Trim()+"'";
SqlDataReadermyDataReader=myBaseClass.myRead(sqlString1);
if(myDataReader.HasRows)
{MessageBox.Show("此学号已经存在","提示");
textBox2.Text="";
textBox2.Focus();
return;
}
stringsqlString=(@"
insertintoStudent(sno,sname,age,sex,dept)
values('"+textBox2.Text.Trim().ToString()+"','"
+textBox3.Text.Trim().ToString()+"','"
+textBox5.Text.Trim().ToString()+"','"
+textBox6.Text.Trim().ToString()+"',");
switch(comboBox1.SelectedIndex)
{
case0:
{sqlString+="'男'";break;};
case1:
{sqlString+="'女";break;};
}
sqlString+=")";
sqlString+=(@"
insertintoLoginTest(user,password,quanxian)
values('"+textBox2.Text.Trim().ToString()+"','"+textBox2.Text.Trim().ToString()+"','学生)");
SqlDataReadermyDataReader1=myBaseClass.myRead(sqlString);
MessageBox.Show("添加成功","提示");
textBox2.Text="";
textBox3.Text="";
textBox5.Text="";
textBox6.Text="";
myItemsAddClass.ItemsAdd("学号","Student",comboBox3);
return;
}
(5)学生信息查询实现
privatevoidbutton1_Click(objectsender,EventArgse)
{
stringsqlString=(@"
selectStudent.sno,sname,sex,age,deptfromStudent");
myBaseClass.ShowDataGrid(sqlString,dataGridView1);
}
六、系统测试
1、测试方案:
采用黑盒测试中等价类划分的方法进行学生管理系统的功能进行测试。
由于很多的模块测试用的方法基本相同,所以在文档中只写出了部分的测试项目和测试用例,其他的就一带略过。
2、测试项目说明
2.1测试项目名称及测试内容
(1)登录测试
输入一个有效的用户;
用户名错误;
密码错误
(2)添加学生信息测试
年龄大于200
输入已经存在的学生信息
不输入信息就保存
输入不存在的正确的学生信息
2.2测试用例
输入:
用户为1密码111,权限管理员
输出:
用户名错误
输入:
用户名0001,密码222,权限管理员
输出:
密码错误
输入:
用户名111,密码111,权限管理员
输出:
进入页面
七、设计总结
这次完成的这个学生成绩管理系统确实给我们组成员留下了很深的印象,也让我更深刻的认识到了动手的必要性。
一方面,这次的这个作业锻炼了我们的动手能力和动脑能力,使自己可以在电脑前静下心来认真的思考学习,领会老师讲过的设计思想,从而锻炼自己编程的能力。
虽然平时也会写些小的程序,但都达不到锻炼自己的目的,往往由于过于急躁而放弃,但是,这次我们强迫自己必须静下心一点点做成了,有一种成就感。
但更多的是锻炼了自己的思维能力和动手能力和分析解决问题的能力。
另一方面,我们体会最深的那就是一个我们必须学会调试自己的程序,当遇到输出结果和预想的有出入是,自己经过思考一点一点的去调试自己的程序,找出问题的所在,然后静下心慢慢的解决它,我觉得这是一个程序员必须具备的能力。
出错了并不可怕,要自己一点一点的解决。
另外,在做之前,一定要先明白目的,这样设计起来才有根据,设计出来的系统才能是正确的
还有就是好多以前没学过的东西自己一定要努力的看,