资源描述
软件体系结构课程设计汇报
学院:扬州大学广陵学院
班级:软件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.经验教训
在做这个课程设计之前,我认为这个过程并不会很复杂,因为只是做一个简单学生考试系统。做了以后才发觉其实一个系统分析和设计还是一件比较繁琐复杂工作,要设计出符合要求系统,必需要反复讨论、设计来不停完善系统。我们做是在线考试系统分析和设计,先是总结了一下我们学校在线考试系统情况,然后又上网搜集了部分材料,才形成了现在模型。在这段时间里,才发觉要做出一个简单系统也是需要很长时间,因为你会碰到多种多样问题,甚至有些问题不是简单代码犯错,比如是部分变量类型不正确也会造成系统运行犯错,而且这些问题是极难去发觉。所以在开发过程中我们必需要有严谨思维和认真态度去完成它。
经过这次课程设计,也让我讲书本上知识和实际相联络起来,让理论上系统分析设计不那么抽象,可能对考试也有一定帮助。
展开阅读全文