asp.net课程设计报告——网上购书系统
学院:XXXX
专业:XXXX
班级:XXX
姓名:XXX
一、项目背景
从第一台电脑的诞生就注定要改变整个人类的生活方式。Internet在全球的普及使得改变人类生活成为现实。我们传统的生活方式大多都是身体力行的,无论是买东西,和人打交道等等。在取得同样目标的前提下,我们或许早就厌烦了每件事情都必需要自己亲力亲为的方式。互联网,让我们有了第二种选择。从前我们读书看书都必须要有书本才行,而且是要纸质书本。这就给我们带来了很多问题了。纸质书无论是数量上还是质量上有可能都无法完全满足所有人的需要。另一方面,纸质书是一种实物,因此,纸质书容易破损、丢失,而且购物、转借都必须像其他事情一样亲力亲为,这对于现在高节奏的生活方式无疑是一个累赘。那么是否有种更简便的方式呢?现在我们知道那就是网上书店了。自从internet在世界上开始流行,其后,又随着通信技术,网络技术,安全技术等新技术的不断出现,使得我们生活在网上都成了可能。书籍永远是人类进步的阶梯。在各种各样的购物网站的不断涌现,网上购书网站也如雨后春笋般出现了。因为网上书店有着与传统购书很大的优势。网上书店最大的功能就是方便了读者更好的购书。由于互联网的存在,使得网上的信息的全面性,因此读者可以在网上书店中快速准确的找到自己所需要的书籍,而非在传统购书中要到处跑书店所带来的繁琐。网上书店中读者可以很容易的找到自己所需要的书籍,同样这相对于自己跑大书店然后慢慢找要省时间的多。另一方面就是网上书店可以在线购买,这同样比传统购书的现金支付要方便的多。从这么多方面来看,我们认识到了网上书店最大的优势就是便利。
确定系统目标
本系统需要实现的目标简要概括如下:
(1)用户管理功能。提供基本的用户注册和登录功能。对于非注册用户,只能浏览、搜索书籍,不能查看用户信息,使用购物车等功能;对于注册用户,除了非注册用户功能外,还可以使用购物车,订单管理,用户信息修改,发表评论等。
(2)书籍管理功能。所有人员可以浏览书籍,搜索书籍。注册用户可以在购物车中增删书籍;管理员可以增加、更新、删除书籍信息。
(3)购物车功能。购物车方便了用户的购买行为。可以一次添加多种商品,统一结算等。
(4)订单处理。注册用户确认购物后的一种凭证。用户可以查看所有的订单情况。
(5)管理员功能。这里管理员也充当了商家的功能。可以查看、修改图书信息,删除图书。对书籍的全部操作,对评论,订单,库存等的操作等。
二、系统可行性研究
(1)技术可行性
网上购书系统已得到了大量应用,有许多可供参考的成功系统。从技术角度考虑,此信息系统开发可行。本系统的界面操作都较为简洁、方便,完全可以满足一般人群的操作需求。不用太多的计算机知识,友好的图形和提示可以上新手尽快上手。
(2)经济可行性
从绪论中的可以看到,网上书店与传统书店相比具有十分明显的优势,从计划到系统实现,我们所使用的所有技术都是免费开源的。从硬件角度来看,一个小型的网上书店只需要一台较好的windows作为服务器就可以满足要求,可以说运行的成本是十分低廉的;但同时带来的效益完全可以有利可图。因此经济上也是可行的。
(3)操作可行性
本系统的界面操作都较为简洁、方便,完全可以满足一般人群的操作需求。不用太多的计算机知识,友好的图形和提示可以上新手尽快上手。
(4)其他方面
在其他方面,如是否符合当地法律法规,利益冲突等方面都是可行的。
综上所述,本购书系统中技术上、经济上、操作上和其他方面都是可行的,因此,继续本系统的分析论述。
三、系统业务流程的调查和分析
业务流程图是一种描述系统内各单位、人员之间业务关系、作业顺序和管理信息流向的图表,利用它可以帮助分析人员找出业务流程中的不合理流向。业务流程图表示业务的流向。
图1 系统业务流程图
数据流程图(DFD)是一种能全面地描述信息系统逻辑模型的主要工具,它可以用少数几种符号综合的反映出信息在系统中的流动、处理和存储情况。数据流程图是表示操作或数据的方向。数据流分析是从现在业务中抽取由计算机自动或半自动完成的那一部分活动的过程。
顶层数据流程图主要介绍了整个系统的运行边界,如图3-9所示,展现了在线购书系统的数据数据需求和生成数据的功能。
四、系统设计
系统总体结构设计
系统总体结构设计是根据信息分析数据流程图的结果,按照结构化的系统设计方法而进行的。结构化设计的基础是模块化。在线购书系统的功能结构图如图4-1所示:
图10 系统功能结构图
对该功能结构图的具体论述如下:
(1)用户管理模块
1 用户注册,登录:用户需输入基本的用户名和密码,还可再完善输入其他电话,电子邮件,住址等信息
2 用户信息修改:用户可以修改自己的个人信息和密码及其他相关信息;
3 用户信息查看:会员可以查看自己的个人信息。
4 用户查看订单:用户可以查看已经生成的订单信息,并进行一些操作
5 发表评论:用户可以对书籍发表评论信息。
(2)书籍管理模块
①书籍浏览:用户可以对所有书籍进行浏览
②书籍更新:只有管理员可以对所有书籍进行添加、删除、更新等操作
③书籍搜索:可以输入查询条件退书籍进行搜索
(3)购物车模块
①更新购物车:用户可以查看购物车中的书籍信息,并可以添加和删除购物车中书籍。
②查看购物车:用户可以随时查看购物车中的信息,包括书籍信息,价格信息等
③生成订单:用户可以确定购物中需购物的书籍,然后下订单,生成订单信息。
(4)管理员模块
①用户管理:对用户的信息进行审核,对不符合者进行删除,也可以根据客户的需要对它的基本信息进行修改;
②库存管理:可以查看各书籍的库存量,并可以随时更新库存信息。
③订单处理:对用户的订单进行处理。
④评论管理:对用户的评论信息的一些操作
五、系统实现
下面将按不同的模块功能来具体展示系统的实现与调试。
主页面设计
本页面主要通过Gridview控件和热区实现了用户的可以直接进行的一些基本操作,如可以通过设计的热区直接跳转到登录页面、购物车页面、订单提交页面、留言页面等,而且管理员也可直接登录,对数据库进行操作等。
主页面
后台模块主要页面:
管理员登录页面如图所示:
管理员登录
若登录成功,直接跳转到图书管理页面,可以对图书进行增、删、改等操作:
登录成功
通过对书号检索,判断添加图书或增加图书数量
增加图书数量
增加图书
此功能的主要代码实现为:
protected void btnSeek_Click(object sender, EventArgs e)
{ string cmdtext = "select * from v_book where BookISBN='" + txbISBN.Text + "'";
DataTable dt = DataConn.ReturnTable(cmdtext); ;
if (dt.Rows.Count > 0)
{
Panel3.Visible = true;
Panel2.Visible = false;
lblBookName.Text = dt.Rows[0]["BookName"].ToString();
lblPublisher.Text = dt.Rows[0]["PublisherName"].ToString();
lblAuthor.Text = dt.Rows[0]["BookAuthor"].ToString();
}
}
protected void btnAddQuantity_Click(object sender, EventArgs e)
{
string cmdtext = "update t_book set quantity=quantity+" + txbBookAmount.Text + "where BookISBN='" + txbISBN.Text + "'";
if (DataConn.ExectuteNonQuery(cmdtext).ToString() == "1")
{
Response.Write("");
}
}
protected void btnUploadImage_Click(object sender, EventArgs e)
{
if (FileUploadImage.HasFile)
{
if (ViewState["filename"] != null)
{
System.IO.File.Delete(Server.MapPath(ViewState["filename"].ToString()));
}
Random r = new Random(DateTime.Now.Millisecond);
string filename = @"~\bookimage\" + DateTime.Now.ToString("yyyyMMddhhmmss") + r.Next(1000, 10000).ToString() + ".jpg";
ViewState["filename"] = filename;
FileUploadImage.SaveAs(Server.MapPath(filename));
bookImage.ImageUrl = filename;
}
}
protected void btnAddBook_Click(object sender, EventArgs e)
{
string cmdtext = "insert into t_book (bookName,publisherID,CategoryID,BookImage,Quantity,AddDate,Commend,bookIS BN) values (@bookName,@publisherID,@CategoryID,@BookImage,@Quantity,@AddDate,@Co
mmend,@bookISBN)";
SqlParameter p1 = new SqlParameter("@bookName", txbBookName.Text);
SqlParameter p2 = new SqlParameter("@publisherID", ddlPublisher.SelectedValue);
SqlParameter p3 = new SqlParameter("@CategoryID", ddlBOokType.SelectedValue);
SqlParameter p4 = new SqlParameter("@BookImage", ViewState["filename"].ToString().Remove(0, 12));
SqlParameter p5 = new SqlParameter("@Quantity", int.Parse(txbQuantity.Text));
SqlParameter p6 = new SqlParameter("@AddDate", DateTime.Now);
SqlParameter p7 = new SqlParameter("@Commend", RadioButtonList1.SelectedValue);
SqlParameter p8 = new SqlParameter("@bookISBN", txbISBN.Text);
if (DataConn.ExectuteNonQuery(cmdtext, p1, p2, p3, p4, p5, p6, p7, p8).ToString() == "1")
{
Response.Write("");
}
}
}
普通用户登录模块:
登录不成功时提示信息:
未注册时点击“注册”按钮进行注册:
跳转到注册新用户页面:
书籍模块:
书籍浏览
点击各个书籍类目可以进入到各自的书籍详情,例如:
书籍浏览
购物车模块:
用户浏览书籍,并选择想要购买的书籍添加到购物车中,在购物车中,用户可以随时查看自己购物车的最新购物情况,包括书籍,价格,数量,总价等基本信息;并且用户可以动态更新购物数量;对于不需要的书籍可以直接在购物车中清空;同时在购物车中提供返回购物和结算的功能:
浏览购物车
购物车主要代码实现:
private void AddBook(string BookID)
{
string cmdtext = "select * from v_book where BookID=" + BookID;
if (FindProfileByBookID(BookID.ToString()))
{
for (int i = 0; i < Profile.ShopCart.BookID.Count; i++)
if (Profile.ShopCart.BookID[i].ToString() == BookID)
Profile.ShopCart.BookAmout[i] = (int)(Profile.ShopCart.BookAmout[i]) + 1;
}
else
{
DataTable dt = DataConn.ReturnTable(cmdtext);
DataRow dr = dt.Rows[0];
Profile.ShopCart.BookID.Add(dr["BookID"]);
Profile.ShopCart.BookName.Add(dr["BookName"]);
Profile.ShopCart.ListPrice.Add(dr["ListPrice"]);
Profile.ShopCart.UnitPrice.Add(dr["UnitPrice"]);
Profile.ShopCart.BookAmout.Add(1);
}
}
private void BindShopCart()
{
DataTable dt1 = CreateShopTable();
gvShopCart.DataSource = dt1;
gvShopCart.DataBind();
}
private DataTable CreateShopTable()
{
DataTable dt1 = new DataTable();
DataColumn dc1 = new DataColumn("BookID");
dt1.Columns.Add(dc1);
dc1 = new DataColumn("BookName");
dt1.Columns.Add(dc1);
dc1 = new DataColumn("ListPrice");
dt1.Columns.Add(dc1);
dc1 = new DataColumn("UnitPrice");
dt1.Columns.Add(dc1);
dc1 = new DataColumn("BookAmout");
dt1.Columns.Add(dc1);
double totleprice1 = 0, totleprice2 = 0, PremiumP rice = 0;
for (int i = 0; i < Profile.ShopCart.BookID.Count; i++)
{
DataRow row = dt1.NewRow();
row["BookID"] = Profile.ShopCart.BookID[i];
row["BookName"] = Profile.ShopCart.BookName[i];
row["ListPrice"] = Profile.ShopCart.ListPrice[i];
row["UnitPrice"] = Profile.ShopCart.UnitPrice[i];
row["BookAmout"] = Profile.ShopCart.BookAmout[i];
totleprice1 = totleprice1 + double.Parse(Profile.ShopCart.ListPrice[i].ToString()) * int.Parse(Profile.ShopCart.BookAmout[i].ToString());
totleprice2 = totleprice2 + double.Parse(Profile.ShopCart.UnitPrice[i].ToString()) * int.Parse(Profile.ShopCart.BookAmout[i].ToString());
dt1.Rows.Add(row);
}
PremiumPrice = totleprice1 - totleprice2;
Profile.ShopCart.TotlePrice = totleprice2.ToString();
Profile.ShopCart.PremiumPrice = PremiumPrice.ToString();
lbltotleprice.Text = "商品的总价为" + totleprice2 + ",比市场价优惠了" + PremiumPrice + "元";
return dt1;
}
bool FindProfileByBookID(string BookID)
{
for (int i = 0; i < Profile.ShopCart.BookID.Count; i++)
if (Profile.ShopCart.BookID[i].ToString() == BookID)
return true;
return false;
}
protected void btnClearBook_Click(object sender, EventArgs e)
{
for (int i = 0; i < gvShopCart.Rows.Count; i++)
{
CheckBox cboxselect = gvShopCart.Rows[i].FindControl("cboxSelectd") as CheckBox;
if (cboxselect.Checked == true)
{
string bookID = gvShopCart.Rows[i].Cells[1].Text;
DeleteBookByID(bookID);
}
}
BindShopCart();
}
private void DeleteBookByID(string bookID)
{
for (int i = 0; i < Profile.ShopCart.BookID.Count; i++)
if (Profile.ShopCart.BookID[i].ToString() == bookID)
{
Profile.ShopCart.BookID.RemoveAt(i);
Profile.ShopCart.BookName.RemoveAt(i);
Profile.ShopCart.BookAmout.RemoveAt(i);
Profile.ShopCart.ListPrice.RemoveAt(i);
Profile.ShopCart.UnitPrice.RemoveAt(i);
break;
}
}
protected void btnShopcart_Click(object sender, EventArgs e)
{
Profile.ShopCart.BookID.Clear();
Profile.ShopCart.BookName.Clear();
Profile.ShopCart.BookAmout.Clear();
Profile.ShopCart.ListPrice.Clear();
Profile.ShopCart.UnitPrice.Clear();
BindShopCart();
Response.Redirect(@"~\Default2.aspx");
}
protected void btnCal_Click(object sender, EventArgs e)
{
for (int i = gvShopCart.Rows.Count-1; i >= 0; i--)
{
TextBox tbxBookAmout = gvShopCart.Rows[i].FindControl("txbBookAmout") as TextBox;
if (Profile.ShopCart.BookAmout[i].ToString() != tbxBookAmout.Text)
{
Profile.ShopCart.BookAmout[i] = int.Parse (tbxBookAmout.Text);
if (tbxBookAmout.Text == "0")
{
Profile.ShopCart.BookID.RemoveAt(i);
Profile.ShopCart.BookName.RemoveAt(i);
Profile.ShopCart.BookAmout.RemoveAt(i);
Profile.ShopCart.ListPrice.RemoveAt(i);
Profile.ShopCart.UnitPrice.RemoveAt(i);
}
}
}
BindShopCart();
}
protected void btnContinue_Click(object sender, EventArgs e)
{
Response.Redirect(@"~\Default2.aspx");
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
Response.Redirect(@"~\Submit.aspx");
}
}
用户点击“结算”按钮,即对该购物车中的书籍进行整批或单个下单,进入确认订单环节:
结算
用户填写完订单信息后,点击“确认购买”填写个人信息:
确认购买
点击“确认地址”进入提交订单页面:
提交订单
点击提交订单进入订单生成页面:
生成定单
评论模块:
登录用户可以对某一购买过的书籍进行评论,且只能评论一次:
对所买书籍评论
不允许多次评论
没买图书的用户不允许评论
留言模块:
点击留言按钮即可进行留言:
留言
查看新闻模块:
可以通过左侧连接点击查看新闻消息、通知及优惠:
查看新闻
查看通知
查看优惠
六、心得体会:
课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程,随着科学技术发展的日新月异,应用平台开发已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在。
回顾起此次网站制作和课程设计,从网站制作到最后的课程设计报告可以说是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学的知识,而且学到了很多书本上没有学过的知识,通过这次的网站制作和课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识远远是不够的,只有把所学的理论知识与实践结合起来,从理论中的出结论,才能真正为社会服务,从而提高自己的动手能力和独立思考能力。在制作过程中遇到问题,同时再设计过程中发现自己的不足之处,对以前所学知识理解的不够深刻,掌握的不够牢固,通过这次的设计制作之后,一定把以前所学的知识重新温故。
课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不可少的过程。“千里之行始于足下”,通过这次的课程设计,我深深体会到这句千古名言的真正含义,我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次网上书店系统设计,我在多方面都有所提高,通过这次设计,综合运用本专业所学课程的理论和巩固与扩充了数据库等课程所学的内容。
最后,特别要感谢老师不辞辛苦的热心指导与耐心地的帮助,我才能够完成本网站的制作,真的是非常感谢老师您。由于个人能力有限,在设计过程中难免出现错误,还希望老师您多多指教,我十分乐意接受您的批评与指正。