资源描述
软件体系构造课程设计报告
学院:扬州大学广陵学院
班级:软件81301班
学号:
姓名:顾秀坚
07月07日
目录
1.背景 3
2.开发环境 3
3.系统设计 4
3.1系统需求分析 4
3.2数据库需求分析 4
3.3系统可行性分析 4
4.数据库设计 6
5.代码设计 6
5.1数据库操作公共类 6
5.2Web.config 8
5.3登录界面Default.aspx.cs 9
5.4考试页面ViewGrade.aspx.cs 10
5.5成绩显示页面GridView.aspx.cx 12
6.运营界面截图 13
7.经验教训 15
1.背景
随着社会不断发展,对劳动者和技术人员知识和能力水平规定越来越高。考试作为衡量人能力重要手段之一,在当代生活中地位进一步提高,并进一步到社会各个方面。各种各样学历考试、资格证书考试层出不穷。同步,Internet技术发展使得考试技术手段和载体发生了革命性变化,使得考试突破了时间和空间限制。
各大学校已经开始采用课程上机考核方式,老式考试系统已经不能满足咱们了,必要要改革,因而在线考试系统应运而生了。咱们在保持原有绝大某些功能前提下,不但需发完善原有功能,加入许多新功能,使得题目管理,上机考试,试卷评分,考试分析更加以便完善。
2.开发环境
硬件环境:PC机一台,台式电脑
软件环境:Microsoft visual studio ,Microsoft SQL Server
3.系统设计
3.1系统需求分析
老式考试规定教师刻试卷、印试卷、安排考试、监考、收集试卷、评改试卷、讲评试卷和分析试卷。这是一种漫长而复杂过程,已经越来越不适应当代教学需要。基于Web在线考试系统可以发挥网络优势,建立大型、高效、共享题库和实现随时随处考试,减少考试成本,减少人为干扰,减轻教师承担,节约人力、物力和财力。
3.2数据库需求分析
针对普通考试系统需求,设计如下所示数据项和数据构造:
成绩表信息:学号,课程名,成绩
题库表信息:课程名,题号,题目,类型,分数,选项1,选项
2,选项3,选项4,解答
学生表信息:学号,姓名,密码
本系统应当建立一种稳定后台数据库系统,通过该数据库管理整个考试系统所需信息(顾客信息、试题信息、试卷信息、考试信息等)。
3.3系统可行性分析
3.3.1规定与目的:
n 系统重要功能即学生管理、试卷管理、题库管理、成绩 管理等
n 数据库可并发访问并具备较大吞吐量
n 顾客必要有登陆密码,具备较好安全保密性
n 系统界面具备一定人性化和美观.
n 开发成员各尽其责,有良好合伙精神
n 分享开发环境软件及项目有关资料,节约项目成本并提高开发效率
3.3.2可行性研究办法
在学生和教师里使用问卷调查办法,完善可行性方案。拟定软件运营平台:win98\win7\xp\win等。在运营时可以直观浏览、查询和掌握学生考试状况和成绩信息,解决了老式考试中弊端:工作量大、错误率高等。
3.3.3决定可行性重要因素
资金充分、技术能力强、开发人员恒心和决心、合伙精神
3.3.4技术可行性
软件方面,网络化考试需要各种软件环境都已具备,数据库服务器方面则有SQL Server,均可以解决大量数据,同步保持数据完整性并提供许多高档管理功能。其灵活性、安全性和易用性为数据库编程提供了良好条件。因而,系统软件开发平台已成熟可行。
硬件方面,科技飞速发展今天,硬件更新速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统需要。
3.3.5经济可行性
资金流出,将来可以用带来效益来平衡。
4.数据库设计
成绩表
题库表
学生表
5.代码设计
5.1数据库操作公共类
类DBHelper.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class DBHelper
{
public DBHelper()
{
}
public static DataSet GetDataSet(string sql)
{
SqlConnection conn = new SqlConnection(GetConnStr());
SqlDataAdapter da = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
public static SqlDataReader GetReader(string sql)
{
SqlDataReader dr = null;
SqlConnection conn = new SqlConnection(GetConnStr());
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
try
{
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
conn.Close();
}
return dr;
}
public static int ExecScalar(string sql)
{
int ret;
SqlConnection conn = new SqlConnection(GetConnStr());
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
try
{
ret = (int)cmd.ExecuteScalar();
}
finally
{
conn.Close();
}
return ret;
}
public static int ExecSql(string sql)
{
int ret;
SqlConnection conn = new SqlConnection(GetConnStr());
SqlCommand cmd = new SqlCommand(sql,conn);
conn.Open();
try
{
ret = cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
return ret;
}
public static String GetConnStr()
{
return System.Configuration.ConfigurationSettings.AppSettings["DB"];
}
}
5.2Web.config
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<appSettings>
<add key ="DB" value="server=(local);uid=sa;pwd=123456;database=demo"/>
</appSettings>
</configuration>
5.3登录界面Default.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class _Default :System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
if (!IsPostBack)
{
lstLesson.DataSource = DBHelper.GetDataSet("select distinct 课程名 from 题库");
lstLesson.DataTextField = "课程名";
lstLesson.DataBind();
}
}
protected void LinkButton1_Click(object sender,EventArgs e)
{
}
protected void InkEnter_Click(object sender,EventArgs e)
{
string sql,stuName,stuNo,lesson;
stuNo = txtNo.Text.Trim();
lesson = lstLesson.SelectedValue;
sql = String.Format("select * from 学生where 学号 ='{0}' and 密码='{1}'",stuNo,txtPwd.Text.Trim());
SqlDataReader dr = DBHelper.GetReader(sql);
if (!dr.Read())
{
Response.Write("<script>alert('登录失败,请检查学号和密码与否对的!')</script>");
return;
}
else
{
stuName = dr["姓名"].ToString();
}
sql = String.Format("select count(*) from 成绩 where 学号 = '{0}' and 课程名='{1}'",stuNo,lesson);
int ret = DBHelper.ExecScalar(sql);
if (ret > 0)
{
Response.Write("<script>alert('你已经参加过这门课考试!')</script>");
return;
}
Session["stuNo"] = stuNo;
Session["stuName"] = stuName;
Session["lesson"] = lesson;
Response.Redirect("exam.aspx");
}
protected void lstLesson_SelectedIndexChanged(object sender,EventArgs e)
{
}
}
5.4考试页面ViewGrade.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class Exam :System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
if (Session["stuNo"] == null || Session["stuNo"].ToString() == "")
{
Response.Redirect("Default.aspx");
}
lblLesson.Text = Session["lesson"].ToString();
lblName.Text = Session["stuName"].ToString();
lblNo.Text = Session["stuNo"].ToString();
SqlDataReader dr = DBHelper.GetReader("select * from 题库a where 课程名 = '" + lblLesson.Text + "'Order By 题号’");
int num = 1;
while(dr.Read())
{
Literal Literal1 = new Literal();
Literal1.Text = num.ToString() + "." + dr["题目"].ToString() + "(" + dr["分数"].ToString() + "分)<br>";
PlaceHolder1.Controls.Add(Literal1);
ListControl list;
if (dr["类型"].ToString() == "单选")
{
list = new RadioButtonList();
}
else
{
list = new CheckBoxList();
}
list.Items.Add(Server.HtmlEncode(dr["选项1"].ToString()));
list.Items.Add(Server.HtmlEncode(dr["选项2"].ToString()));
list.Items.Add(Server.HtmlEncode(dr["选项3"].ToString()));
list.Items.Add(Server.HtmlEncode(dr["选项4"].ToString()));
PlaceHolder1.Controls.Add(list);
num = num + 1;
}
dr.Close();
}
protected void btnSubmit_Click(object sender,EventArgs e)
{
string sql,answer;
SqlDataReader dr = DBHelper.GetReader("select * from 题库where 课程名 ='" + lblLesson.Text + "'Order By 题号’");
int j = 0;
int sum = 0;
while (dr.Read())
{
ListControl list = (ListControl)PlaceHolder1.Controls[2*j+1];
answer = "";
for (int i = 0;i < list.Items.Count;i++)
{
if (list.Items[i].Selected)
answer+=(i+1).ToString();
}
if (answer == dr["解答"].ToString())
sum = sum + Convert.ToInt32(dr["分数"].ToString());
j=j+1;
}
sql=String.Format("insert into 成绩(学号,课程名,成绩) values ('{0}','{1}','{2}')",lblNo.Text,lblLesson.Text,sum.ToString());
DBHelper.ExecSql(sql);
Response.Redirect("viewGrade.aspx");
}
}
5.5成绩显示页面GridView.aspx.cx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class viewGrade :System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
if(Session["stuNo"]==null || Session["stuNo"].ToString()=="")
{
Response.Redirect("Default.aspx");
}
lblName.Text="姓名:" + Session["stuName"].ToString();
lblNo.Text="学号:"+ Session["stuNo"].ToString();
dg.DataSource=DBHelper.GetDataSet("select 课程名,成绩 from 成绩 where 学号= '"+ Session["stuNo"].ToString()+"'");
dg.DataBind();
}
}
protected void dg_SelectedIndexChanged(object sender,EventArgs e)
{
}
}
6.运营界面截图
登录界面截图
考试页面截图
成绩显示页面截图
7.经验教训
在做这个课程设计之前,我觉得这个过程并不会很复杂,由于只是做一种简朴学生考试系统。做了之后才发现其实一种系统分析和设计还是一件比较繁琐复杂工作,要设计出符合规定系统,必要要重复讨论、设计来不断完善系统。咱们做是在线考试系统分析和设计,先是总结了一下咱们学校在线考试系统状况,然后又上网收集了某些材料,才形成了当前模型。在这段时间里,才发现要做出一种简朴系统也是需要很长时间,由于你会遇到各种各样问题,甚至有些问题不是简朴代码出错,例如是某些变量类型不对的也会导致系统运营出错,并且这些问题是很难去发现。因此在开发过程中咱们必要要有严谨思维和认真态度去完毕它。
通过这次课程设计,也让我授课本上知识和实际相联系起来,让理论上系统分析设计不那么抽象,也许对考试也有一定协助。
展开阅读全文