武汉软件工程职业学院
应用软件课程总结报告
2014-2015学年度第 一 学期
题目: 供求信息网的建设
姓名: 罗小婷
班级: 网络1201
系部: 计算机学院
指导教师: 张松慧
日期:2014 年 11 月 11 日
目录
一、供求信息网综述 1
1、系统需求说明书 1
2、 系统开发的必要性 1
3、系统开发的可行性 1
4、 系统的应用场合 2
5、 系统的价值所在 2
二、供求信息网的系统设计 3
1、系统的结构框架 3
2、系统采用的技术 3
3、 各功能模块的流程 5
4、系统的数据结构 5
三、数据库设计 5
1、数据库E-R图 5
2、各表的结构设计 7
3、表的字段类型 8
4、各表的关系 9
5、数据库的设计依据 10
四、系统的开发实现 10
1、首页代码(主页) 10
2、发布免费信息页面代码 22
五、总结 23
六、参考文献 24
供求信息网可以为政府、公司及个人提供所需的信息,给公司及个人的自主管理带来很大的方便。本网站提供免费的信息发布平台、推荐的企业广告信息平台,方便每个使用者发布信息。管理员在后台对用户发布的信息进行审核,使得信息质量得到了提高。供求信息网,全面为公司及个人服务,为每一个人的生活、工作、学习带来便利。使得个人及企业更好、更方便的对供求信息进行浏览、查询、发布、和获取,以更好的满足个人及企业对供求信息不断增长的需求,本次课程设计特构建供求信息网。本次开发的供求信息网站是关于人们生活中遇到的公寓信息、求职信息、招聘信息、家教信息、车辆信息等进行设计,为人们的生活、学习、工作带来方便。
随着Internet的发展日新月异,网站已成为政府、企事业单位信息化建设中的重要组成部分。为了满足现代城市企业和城市居民的生活,,工作以及学习的需求,有必要开发一个供求信息网络平台,对于开发一个能够为企业和用户提供综合信息服务的供求信息网站无疑是一个发展良机。一方面供求信息网能够为企业节省大量人力资源,企业不再需要大量的业务人员去跑市场,从而间接为企业节约了成本;另一方面,供求信息网能够收集大量供求信息,将会有大量用户访问网站,有助于提高企业的知名度,同时缓解城市的就业压力。由于供求网站有大量的最新信息,无论是单位还是个人每天都要进行获取信息的操作,供求信息网发挥着着强大的作用。
3.1技术可行性
ASP.作为网站开发语言,适合大型项目的开发。相对于PHP,ASP执行效率远远高于PHP,在配置方面与JSP相比,ASP显得十分简单。ASP跨平台性非常好,它几乎可以支持目前流行的所有操作系统及数据库平台。PHP支持多种Web服务器,数据库方面采用小巧且功能强大的SQL SERVER数据库,配合服务器,能最大效率的发挥系统的功能。从技术这一方面来讲,我觉得自己完全可以利用ASP进行本次网站开发。
3.2经济可行性分析
随着因特网的发展日新月异,无论是国外还是国内,网站已成为政府、公司、企事业单位信息化建设中的重要组成部分。由于供求信息网站有大量的最新信息,无论是企业还是个人每天都会进行搜索信息、获取信息及发布信息等。在进行不同人群社会调查以问卷的方式询问人们平常上网的主要活动及主要目的是什么的时候,大约72%的人们填写的答案是查阅资料,还有将近50%的人们是发布信息。可见,不管是企业还是个人更加倾向于在网络上获取所需要的信息。在生活节奏快的今天,工作的人们通过网络获取信息及发布信息,能够大大节约个人的时间及提高企业的工作效率,减少不必要时间的浪费。
3.3管理可行性分析
首先,供求信息是每一个人都会关注的问题,网络普及每天上网搜集自己需要息的人非常多。开发这样的一个供求信息网站,只需要几人完成,不需要花费额外的费用。
其次,分析系统的运行和维护费用,主要包括软硬件设施、人员费用、材料费用等。这项设计由自己开发,所以相比一个大型的软件开发费用,是比较低廉的,维护方面,也是可以几个人完成。这样的网站可以为人们带来方便,对有些信息收取一定费用的同时大多数信息免费为人们开放,势必会有很好的经济效益和社会效益。因此,从经济角度来讲,开发这样的网站具有可行性。
现今是互联网信息飞速发展的时代,供求信息网的应用是极其广泛的,应用场合也是十分常见的。例如,房主需要招租,房客需要租房;企业需要招聘员工,人们需要寻找工作;家长需要家教,家教需要工作等等。供求信息网普遍应用在人们的生活、工作、学习之中,在现代生活中充当着不可或缺的作用。
5.1 人们的贴心网
给人们提供了一个方便快捷发布信息的平台,推出的信息发布设置了招聘、求职、公寓、家教等栏目。即使不注册也可以将自己的信息发布在供求信息网上,让信息畅通天下。
5.2 企业与商家的信息港
供求信息网为本地教育、房产、供求信息、人才招聘等行业提供了大型的信息平台。为企业、商家提供了一个精巧的小网站,注册一个会员,就可以将自己的机构介绍、产品照片、人才招聘等相关信息刊登在这个小网站上,并在供求信息网上显示,以便网民的浏览与了解。
5.3 生活宝库
供求信息网提供了生活中各方面的生活信息,包括房产、招聘、求职、家教、车辆等各方面的信息,以及企业日常管理中的细节与制度等。
5.4. 沟通桥梁
供求信息网,方便快捷,可以在就爱吧中发布你所感兴趣的话题,大家参与讨论,互相沟通。
2.1Asp.Net
ASP.NET[1] 是.NET FrameWork的一部分,是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们。 指 Active Server Pages(动态服务器页面) ,运行于 IIS(Internet Information Server 服务,是Windows开发的Web服务器)之中的程序 。
因为ASP .NET是基于通用语言的编译运行的程序,其实现完全依赖于虚拟机,所以它拥有跨平台性,ASP .NET构建的应用程序可以运行在几乎全部的平台上。其中大致分为以微软.NET Framework为基础使用IIS做为Web 服务器承载的微软体系,以及使用Mono为基础框架运行在Windows或Linux上的开源体系。
asp.net使运行一些很平常的任务如表单的提交客户端的身份验证、分布系统和网站配置变得非常简单。例如asp.net页面构架允许你建立你自己的用户分界面,使其不同于常见的VB-Like界面。
asp.net使用一种字符基础的,分级的配置系统,虚拟服务器环境和应用程序的设置更加简单。因为配置信息都保存在简单文本中,新的设置有可能都不需要启动本地的管理员工具就可以实现。这种观念使asp.net的基于应用的开发更加具体和快捷。一个asp.net的应用程序在一台服务器系统的安装只需要简单的拷贝一些必须的文件,不需要系统的重新启动,一切就是这么简单。
2.2 sql server 2008
SQL Server 2008 在Microsoft的数据平台上发布,可以组织管理任何数据。可以将结构化、半结构化和非结构化文档的数据直接存储到数据库中。可以对数据进行查询、搜索、同步、报告和分析之类的操作。数据可以存储在各种设备上,从数据中心最大的服务器一直到桌面计算机和移动设备,它都可以控制数据而不用管数据存储在哪里。
SQL Server 2008 允许使用 Microsoft .NET 和Visual Studio开发的自定义应用程序中使用数据,在面向服务的架构(SOA)和通过 Microsoft BizTalk Server 进行的业务流程中使用数据。信息工作人员可以通过日常使用的工具直接访问数据。
SQL Server 2008出现在微软数据平台愿景上是因为它使得公司可以运行他们最关键任务的应用程序,同时降低了管理数据基础设施和发送观察和信息给所有用户的成本。
这个平台有以下特点:
· 可信任的——可以以很高的安全性、可靠性和可扩展性来运行他们最关键任务的应用程序。
· 高效的——可以降低开发和管理他们的数据基础设施的时间和成本。
· 智能的——提供了一个全面的平台,可以在用户需要的时候给他发送观察和信息。
类
1.1免费供求信息实体E-R图
1.2收费供求信息实体E-R图
1.3网站后台用户实体E-R图
1.4网站后台用户登录入职实体E-R图
2.1 tb_info表结构设计
列名 | 数据类型 | 长度及精度 | 是否允许空值 | 说明 |
ID | Int | × | 信息ID自动编号,为Primary Key | |
type | Varchar | 50 | × | 信息类型 |
title | Varchar | 50 | × | 信息标题 |
info | Varchar | 500 | × | 信息内容 |
linkman | Varchar | 50 | × | 联系人 |
tel | Varchar | 50 | × | 电话 |
checkState | bit | × | 审核状态 | |
date | datetime | × | 信息发布日期 | |
2.2 tb_Power表结构设计
列名 | 数据类型 | 长度及精度 | 是否允许空值 | 说明 |
ID | Int | × | ID编号,为Primary Key | |
sysName | Varchar | 50 | √ | 管理员名称 |
SysPwd | Varchar | 50 | √ | 管理员密码 |
2.3 tb_LeaguerInfo表结构设计
列名 | 数据类型 | 长度及精度 | 是否允许空值 | 说明 |
ID | Int | × | 信息ID自动编号,为Primary Key | |
type | Varchar | 50 | × | 信息类型 |
title | Varchar | 50 | × | 信息标题 |
info | Varchar | 500 | × | 信息内容 |
linkMan | Varchar | 50 | × | 联系人 |
tel | Varchar | 50 | × | 联系电话 |
showday | datetime | × | 信息有效截止日期 | |
date | datetime | × | 信息发布日期 | |
checkState | bit | √ | 是否为推荐信息 | |
2.4 tb_PowerLog表结构设计
列名 | 数据类型 | 长度及精度 | 是否允许空值 | 说明 |
ID | Int | × | ID编号,为Primary Key | |
sysName | Varchar | 50 | √ | 管理员名称 |
SysPwd | Varchar | 50 | √ | 管理员密码 |
2.5 sysdiagrams表结构设计
列名 | 数据类型 | 长度及精度 | 是否允许空值 | 说明 |
name | nvarchar | 128 | × | |
principal_id | int | × | ||
diagram_id | int | √ | ||
version | int | 500 | √ | |
definition | varbinary | MAX | × | |
3.1 tb_info表的字段类型
3.2 tb_Power表的字段类型
3.3 tb_LeaguerInfo的字段类型
3.4 tb_PowerLog表的字段类型
3.5 sysdiagrams表的字段类型
数据库是用于前台检索信息所要用的,所要检索的信息全部包含在后台所要设计的数据表中。管理员通过操作后台数据库可以更改一些信息,将一些有用信息进行审核显示到前台,同时将一些不合格的或者垃圾信息进行删除。
public partial class _Default : System.Web.UI.Page
{
Operation operation = new Operation();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
dlZP.DataSource = operation.SelectLeaguerInfo(true, "招聘信息", 6);
dlZP.DataBind();
dlGY.DataSource = operation.SelectLeaguerInfo(true, "公寓信息", 6);
dlGY.DataBind();
dlJJ.DataSource = operation.SelectLeaguerInfo(true, "家教信息", 6);
dlJJ.DataBind();
dlCL.DataSource = operation.SelectLeaguerInfo(true, "车辆信息", 6);
dlCL.DataBind();
}
}
protected void dlZP_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("ShowPage/webQZ.aspx");
}
protected void Button2_Click(object sender, EventArgs e)
{
Response.Redirect("ShowPage/webCL.aspx");
}
protected void Button3_Click(object sender, EventArgs e)
{
Response.Redirect("ShowPage/webGY.aspx");
}
protected void Button4_Click(object sender, EventArgs e)
{
Response.Redirect("ShowPage/webJJ.aspx");
}
}
1.1招聘信息页面代码(分页)
public partial class webZP : System.Web.UI.Page
{
Operation operation = new Operation();
static string infoType = "";
static string infoKey = "";
static PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
infoType = "招聘信息";
infoKey = Convert.ToString(Session["key"]);
this.DataListBind();
dlCharge.DataSource = operation.SelectLeaguerInfo(true, infoType);
dlCharge.DataBind();
Session["key"] = null;
}
}
///
/// 将数据绑定到DataList控件
///
public void DataListBind()
{
pds = operation.PageDataListBind(infoType, infoKey, Convert.ToInt32(lblCurrentPage.Text), 10);
lnkBtnFirst.Enabled = true;
lnkBtnLast.Enabled = true;
lnkBtnNext.Enabled = true;
lnkBtnPrevious.Enabled = true;
if (lblCurrentPage.Text == "1")
{
lnkBtnPrevious.Enabled = false;
lnkBtnFirst.Enabled = false;
}
if (lblCurrentPage.Text == pds.PageCount.ToString())
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
lblSumPage.Text = pds.PageCount.ToString();
dlFree.DataSource = pds;
dlFree.DataKeyField = "id";
dlFree.DataBind();
}
protected void lnkBtnFirst_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = "1";
DataListBind();
}
protected void lnkBtnPrevious_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();
DataListBind();
}
protected void lnkBtnNext_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();
DataListBind();
}
protected void lnkBtnLast_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = lblSumPage.Text;
DataListBind();
}
}
1.2求职信息页面代码(分页)
public partial class ShowPage_webQZ : System.Web.UI.Page
{
Operation operation = new Operation();
static string infoType = "";
static string infoKey = "";
static PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
infoType = "求职信息";
infoKey = Convert.ToString(Session["key"]);
this.DataListBind();
dlCharge.DataSource = operation.SelectLeaguerInfo(true, infoType);
dlCharge.DataBind();
Session["key"] = null;
}
}
///
/// 将数据绑定到DataList控件
///
public void DataListBind()
{
pds = operation.PageDataListBind(infoType, infoKey, Convert.ToInt32(lblCurrentPage.Text), 10);
lnkBtnFirst.Enabled = true;
lnkBtnLast.Enabled = true;
lnkBtnNext.Enabled = true;
lnkBtnPrevious.Enabled = true;
if (lblCurrentPage.Text == "1")
{
lnkBtnPrevious.Enabled = false;
lnkBtnFirst.Enabled = false;
}
if (lblCurrentPage.Text == pds.PageCount.ToString())
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
lblSumPage.Text = pds.PageCount.ToString();
dlFree.DataSource = pds;
dlFree.DataKeyField = "id";
dlFree.DataBind();
}
protected void lnkBtnFirst_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = "1";
DataListBind();
}
protected void lnkBtnPrevious_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();
DataListBind();
}
protected void lnkBtnNext_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();
DataListBind();
}
protected void lnkBtnLast_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = lblSumPage.Text;
DataListBind();
}
}
1.3家教信息页面代码(分页)
public partial class ShowPage_webJJ : System.Web.UI.Page
{
Operation operation = new Operation();
static string infoType = "";
static string infoKey = "";
static PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
infoType = "家教信息";
infoKey = Convert.ToString(Session["key"]);
this.DataListBind();
dlCharge.DataSource = operation.SelectLeaguerInfo(true, infoType);
dlCharge.DataBind();
Session["key"] = null;
}
}
///
/// 将数据绑定到DataList控件
///
public void DataListBind()
{
pds = operation.PageDataListBind(infoType, infoKey, Convert.ToInt32(lblCurrentPage.Text), 10);
lnkBtnFirst.Enabled = true;
lnkBtnLast.Enabled = true;
lnkBtnNext.Enabled = true;
lnkBtnPrevious.Enabled = true;
if (lblCurrentPage.Text == "1")
{
lnkBtnPrevious.Enabled = false;
lnkBtnFirst.Enabled = false;
}
if (lblCurrentPage.Text == pds.PageCount.ToString())
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
lblSumPage.Text = pds.PageCount.ToString();
dlFree.DataSource = pds;
dlFree.DataKeyField = "id";
dlFree.DataBind();
}
protected void lnkBtnFirst_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = "1";
DataListBind();
}
protected void lnkBtnPrevious_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();
DataListBind();
}
protected void lnkBtnNext_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();
DataListBind();
}
protected void lnkBtnLast_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = lblSumPage.Text;
DataListBind();
}
}
1.4公寓信息页面代码(分页)
public partial class ShowPage_webGY : System.Web.UI.Page
{
Operation operation = new Operation();
static string infoType = "";
static string infoKey = "";
static PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
infoType = "公寓信息";
infoKey = Convert.ToString(Session["key"]);
this.DataListBind();
dlCharge.DataSource = operation.SelectLeaguerInfo(true, infoType);
dlCharge.DataBind();
Session["key"] = null;
}
}
///
/// 将数据绑定到DataList控件
///
public void DataListBind()
{
pds = operation.PageDataListBind(infoType, infoKey, Convert.ToInt32(lblCurrentPage.Text), 10);
lnkBtnFirst.Enabled = true;
lnkBtnLast.Enabled = true;
lnkBtnNext.Enabled = true;
lnkBtnPrevious.Enabled = true;
if (lblCurrentPage.Text == "1")
{
lnkBtnPrevious.Enabled = false;
lnkBtnFirst.Enabled = false;
}
if (lblCurrentPage.Text == pds.PageCount.ToString())
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
lblSumPage.Text = pds.PageCount.ToString();
dlFree.DataSource = pds;
dlFree.DataKeyField = "id";
dlFree.DataBind();
}
protected void lnkBtnFirst_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = "1";
DataListBind();
}
protected void lnkBtnPrevious_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();
DataListBind();
}
protected void lnkBtnNext_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();
DataListBind();
}
protected void lnkBtnLast_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = lblSumPage.Text;
DataListBind();
}
}
1.5车辆信息页面代码(分页)
public partial class ShowPage_webCL : System.Web.UI.Page
{
Operation operation = new Operation();
static string infoType = "";
static string infoKey = "";
static PagedDataSource pds = new PagedDataSource();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
infoType = "车辆信息";
infoKey = Convert.ToString(Session["key"]);
this.DataListBind();
dlCharge.DataSource = operation.SelectLeaguerInfo(true, infoType);
dlCharge.DataBind();
Session["key"] = null;
}
}
///
/// 将数据绑定到DataList控件
///
public void DataListBind()
{
pds = operation.PageDataListBind(infoType, infoKey, Convert.ToInt32(lblCurrentPage.Text), 10);
lnkBtnFirst.Enabled = true;
lnkBtnLast.Enabled = true;
lnkBtnNext.Enabled = true;
lnkBtnPrevious.Enabled = true;
if (lblCurrentPage.Text == "1")
{
lnkBtnPrevious.Enabled = false;
lnkBtnFirst.Enabled = false;
}
if (lblCurrentPage.Text == pds.PageCount.ToString())
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
lblSumPage.Text = pds.PageCount.ToString();
dlFree.DataSource = pds;
dlFree.DataKeyField = "id";
dlFree.DataBind();
}
protected void lnkBtnFirst_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = "1";
DataListBind();
}
protected void lnkBtnPrevious_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) - 1).ToString();
DataListBind();
}
protected void lnkBtnNext_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = (Convert.ToInt32(lblCurrentPage.Text) + 1).ToString();
DataListBind();
}
protected void lnkBtnLast_Click(object sender, EventArgs e)
{
lblCurrentPage.Text = lblSumPage.Text;
DataListBind();
}
}
public partial class InfoAdd : System.Web.UI.Page
{
Operation operation = new Operation();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void imgBtnAdd_Click(object sender, ImageClickEventArgs e)
{
operation.InsertInfo(DropDownList1.Text, txtTitle.Text.Trim(), txtInfo.Text.Trim(), txtLinkMan.Text.Trim(), txtTel.Text.Trim());
WebMessageBox.Show("信息发布成功!", "Default.aspx");
}
}
2、管理员登录页面代码
public partial class Logon : System.Web.UI.Page
{
Operation operation = new Operation();
Random random = new Random();
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
lblCheckCode.Text = random.Next(1000, 9999).ToString();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
if (lblCheckCode.Text.Trim() != txtCheckCode.Text.Trim())
{
WebMessageBox.Show("输入验证码不正确!", "Logon.aspx");
}
if (operation.Logon(txtUser.Text, txtPwd.Text).Tables[0].Rows.Count > 0)
{
Session.Add("UserName", txtUser.Text.Trim());
Response.Redirect("BackGround/Default.aspx");
}
else
{
WebMessageBox.Show("用户名称或密码不正确!", "Logon.aspx");
}
}
protected void ImageButton2_Click(object sender, ImageClickEventArgs e)
{
}
}
通过《asp.net项目开发》课程的理论学习和上机实验的实践,这次课程设计是对我们所学知识的一个系统考察,基本掌握了一个管理信息系统的开发流程和步骤,具备了初步设计一个管理信息系统的能力本次开发的供求信息网站。在网站开发过程中,我尝到了开发网站那让人又痛苦又快乐的感受:问题不断的出现,又不断的得到解决,一步一步的前进。随着系统的逐步完善,我对以前所学知识的领悟得到了提升,能力得到了提高,所学的知识得到了综合运用。同时也明白了团队合作的重要性,以及精髓所在。
这次做课程设计的经历也会使我终身受益,我感受到做设计是一件应该真真正正用心去做的事情,是真正的自己学习的过程和研究的过程,没有学习就不可能有研究的能力,没有自己的研究就不会有所突破。相信这次课程设计的经历将会激励着我在以后的学习和生活中继续进步。
[1] 赛奎春,顾彦玲. ASP.NET项目开发全程实录(第3版). 北京:清华大学出版社 2011
[2] wangixaolong. 大众供求信息网的设计与开发 2013
[3]孙文博.基于ASP.NE供求信息网设计与实现 2011
[4]张领.asp.net 项目开发全程实录[M].清华大学出版社 2008.
[5]戴宗友,张伍荣,杨辉.C#程序设计实训[M].清华大学出版社 2009.
[6]伍俊良.C#程序应用与开发教程[M].机械工业出版社 2009.
[7]康祥顺,张小刚,刘亮.C#程序案例开发集锦[M].电子工业出版社 2008.
本文来源:https://www.2haoxitong.net/k/doc/a7f00d81856a561253d36f45.html
文档为doc格式