数据库技术课程设计任务书
一、设计题目:网上书店
二、设计目的
1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。
2.培养学生综合运用所学知识独立完成课题的能力。
3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。
4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。
5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。
三、设计要求
1.可组成设计小组,小组成员分工协作完成。要求每个成员有自己相对独立的模块,同时要了解其他组员完成的内容。
2.查阅相关资料,自学具体课题中涉及到的新知识。
3.采用结构化、模块化程序设计方法,功能要完善,界面要美观。
4.所设计的系统原则上要能够运行无误,结果准确。
5.按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”20磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。
四、设计内容
1.实现用户登陆
2.实现用户注册
3.实现分类浏览
4.查看图书介绍
5.客户订单管理
6.新书入库
7库存管理
五、课程设计工作量
由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。
六、课程设计工作计划
20xx年6月11日,指导教师讲课,学生根据题目准备资料;
20xx年6月12日,设计小组进行总体方案设计和任务分工;
20xx年6月13日~20xx年6月15日,每人完成自己承担的程序模块并通过独立编译;
20xx年6月18日~20xx年6月21日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;
20xx年6月22日,验收,撰写报告,答辩及总结。
第二篇:web课程设计报告--网上书店
《ASP.NET课程设计》
题目:网上书店管理系统
院、 系: 计算机信息与技术系
学科专业: 计算机科学与技术
学 号:
学生姓名:
指导教师:
20xx年06月7日
目录
一、课程设计题目 .................................................................................... 2
二、需求分析 ............................................................................................ 2
三、概要设计 ............................................................................................ 2
四、详细设计 ............................................................................................ 5
五、运行结果 ............................................................................................ 7
六、课程设计总结 .................................................................................. 19
1
一、 课程设计题目
《网上书店管理系统》
二、 需求分析
随着人类经济高速发展,计算机的应用及普及到经济和社会生活的各个领域。使原本的旧的管理方法越来越不适应现在社会的发展。许多人还停留在以前的跑书店买需要的图书。这大大地阻碍了人类经济的发展。为了适应现代社会人们高度强烈的时间观念,网上书店为大家带来了极大的方便。我所开发的这个网站所采用的是当前较为流行的软件Visual Studio2010作为实现,以数据库SQL Server 2005作为系统的后台操作。 《网上书店管理系统》系统特点:
1 先进的购书流程
引入购物车购物方式,把记录客户所有的购书临时信息写入数据库表中,订单结束后,自动清除相关数据,客户不用再担心订购时临时数据的丢失,确保客户购书准确无误。
2 科学的书店管理模式
通过完善的信息发布系统,客户可以及时得到书店最新图书的相关信息,掌握行业动向;后台结构化管理模式,涵盖了栏目设置、图书资料编辑、用户管理、订单管理、基础信息管理等等,为书店的电子化管理提供了一套良好的管理模式。 3 人性化的操作界面
一个网站,能否吸引顾客的经常光顾,界面的美观也显得非常重要。本书店系统经过精心打造,同时也可根据书店客户的品味专门订制,让书店的设计充分体现电子商务时期的时尚、大众化。
4 完善的在线帮助
提供详细的在线帮助信息,如交款方式、退换图书原则、交易条款等。帮助用户了解购书流程,清楚书店在退换图书等各方面的原则及条款。 三、 概要设计
1. 系统设计思想
2
(1) 书店前台 功能强大 、操作方便
前台作为与用户直接交互的界面,在考虑功能的同时,也考虑了操作的简洁和方便性,目的是让大多数不在懂电脑操作的客户,也能轻松的享受电子商务给他们带来的便利。
(2) 书店后台
本系统后台管理在考虑书店管理操作简便的同时,提供了强大的书店管理模式。它包括用户资料管理,图书分类管理,图书资料管理,订单管理,图片管理,图书推荐管理,图书打折管理、物流管理、版权信息等等。
2. 系统结构设计
前台:用户注册—>用户登录—>查看图书信息—>添加图书到购物车—>在线支付
后台:管理员登录—>订单管理、图书管理、会员管理、物流管理、图片管理—>退出
3. 系统功能模块
根据系统功能分析,可以画出系统的功能模块图,系统模块图如下图所示,
图3-1和图3-2分别为前台和后台的功能结构图。
图3-1 前台系统功能结构图
3
4. 数据库的设计
1 数据库需求分析
在网上书店系统中,数据库应当解决如下需求。 ● 保存注册用户的个人信息,包括联系资料等。
● 保存图书信息,包括书名、价格、作者、图片等信息。 ● 保存购物车的详细信息
● 保存购书信息,包括用户ID、图书ID、数量、总价等。 ● 保存订单信息,包括日期、支付方式、是否确认等。
2 数据库结构分析设计
得到上面的数据项和数据结构以后,就可以设计出能够满足用户需求的数据表,以及它们之间的关系,为后面的逻辑结构设计打下基础。分析此系统的需求,可以得到数据库关系图,如图5-1所示
图3-2 后台系统功能结构图
4
图5-1 数据库关系图
3 数据库逻辑设计
数据库的概念结构设计完毕后,可以将上面的数据库概念结构转化为某种数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。如图5-2所示
图5-2 数据库表
四、 详细设计
5
通过以上的系统需求分析和系统总体设计,就已经有了一个网上系统的大体轮廓了
1、前台主要功能包括
注册/登录、购物车、联系方式、图书查询、图书分类浏览、图书展示、打折专区、热门推荐、精品推荐、在线帮助功能等等。
2、书店系统前台设计的特色
(1) 购物车
每个注册的用户,都拥有一个属于自已的购物车管理界面,客户可以轻松的查看购物车中的图书。本系统充分考虑到了本模块对于客户的重要性,所以界面尽量做的简捷,采用开放式结构,一目了然,方便客户轻松掌控自已的信息。
(2) 购书的详细过程
会员注册-->选择图书-->放入购物车-->去下订单
购物车与下订单:
推出了全新的网上商务理念,这也是本系统与其他书店较大的不同的地方之一。
(3) 灵活多样的图书展示区
网站前台图书显视栏目分为以下几种方式:
(1)精品推荐 (2) 图书打折区 (3)热销图书 (4)图书分类
(4) 详细的用户帮助信息
主要包括交款方式、退换图书原则、配送信息和交易条款的信息。
3、系统提供完善的系统管理
在主页的管理入口,点击进入。出现验证管理员窗口,输入用户名和密码,进入系统管理器。后台分为订单管理、图书管理、用户管理、管理员帐号管理、物流管理和图片管理。
(1) 订单管理模块主要实现的是对订单信息的审核,如果订单信息不合格,可以进行删除。此模块中加入了订单的搜索,以便查看特定订单的信息。可以更改订单的状态:是否已确认、是否已付款、是否已发货和是否已归档。
(2) 图书管理是对图书信息进行管理,添加或删除图书信息,也可对图书信息进行修改。动态添加图书信息,信息内容要求完善。
6
(3) 用户管理和管理员帐号管理可以添加、删除用户和管理员帐号,可以对用户和管理员进行统一的管理。
(4) 物流管理模块主要实现的是支付方式管理、配送方式管理、配送地点管理
(5) 图片管理模块主要实现的是图书和图书类别相关图片的添加和删除。 五、 运行结果
1. 首页设计和编码
如图6-1所示,为网上书店首页,主要向用户展示各种图书信息。
图6-1 网上书店首页
数据库连接代码 public SqlConnection GetConnection() {
string myStr = ConfigurationManager.
AppSettings["ConnectionString"].ToString();
SqlConnection myConn = new SqlConnection(myStr);
return myConn;
}
7
登录判定
当用户进行添加图书到购物车、在线充值、在线付款、修改个人信息等操作时,程序需要验证用户是否已经登录作为前提条件,如果用户没有登录,则不应该访问这些页面,因此需要制作一个判断用户是否登录并加以处理的模块。 /// <summary>
/// 判断用户是否存在
/// </summary>
/// <param name="P_Str_Name">会员登录名</param>
/// <param name="P_Str_Password">会员登录密码</param>
/// <returns></returns>
public int UserExists(string P_Str_Name, string P_Str_Password) {
SqlConnection myConn = dbObj.GetConnection();
SqlCommand myCmd = new SqlCommand("Pr_UserExists", myConn); myCmd.CommandType = CommandType.StoredProcedure;
//添加参数
SqlParameter Name = new SqlParameter("@Name", SqlDbType.VarChar, 50); Name.Value = P_Str_Name;
myCmd.Parameters.Add(Name);
SqlParameter Password = new SqlParameter("@Password", SqlDbType.VarChar,
50);
Password.Value = P_Str_Password;
myCmd.Parameters.Add(Password);
SqlParameter returnValue = myCmd.Parameters.Add("returnValue",
SqlDbType.Int, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
//执行过程
myConn.Open();
try {
myCmd.ExecuteNonQuery();
8
}
catch (Exception ex) {
throw (ex);
}
finally {
myCmd.Dispose();
myConn.Close();
}
int P_Int_returnValue = Convert.ToInt32(returnValue.Value.ToString());
return P_Int_returnValue;
}用户界面的设计
用户注册代码 /// <summary>
/// 向用户表中插入信息
/// </summary>
/// <param name="P_Str_Name">会员名</param>
/// <param name="P_Bl_Sex">性别</param>
/// <param name="P_Str_Password">密码</param>
/// <param name="P_Str_TrueName">真实姓名</param>
/// <param name="P_Str_Questions">找回密码问题</param>
/// <param name="P_Str_Answers">找回密码答案</param>
/// <param name="P_Str_Phonecode">电话号码</param>
/// <param name="P_Str_Emails">E_Mail</param>
/// <param name="P_Str_City">会员所在城市</param>
/// <param name="P_Str_Address">会员详细地址</param>
/// <param name="P_Str_PostCode">邮编</param>
/// <param name="P_Flt_AdvancePayment">预付金额</param>
/// <param name="P_Date_LoadDate">登录日期</param>
public int AddUInfo(string P_Str_Name, bool P_Bl_Sex, string P_Str_Password, 9
string P_Str_TrueName, string P_Str_Questions, string P_Str_Answers, string P_Str_Phonecode, string P_Str_Emails, string P_Str_City, string P_Str_Address, string P_Str_PostCode)
{
SqlConnection myConn = dbObj.GetConnection();
SqlCommand myCmd = new SqlCommand("Pr_InsertUInfo", myConn);
myCmd.CommandType = CommandType.StoredProcedure;
//添加参数
SqlParameter Name = new SqlParameter("@Name", SqlDbType.VarChar, 50); Name.Value = P_Str_Name;
myCmd.Parameters.Add(Name);
SqlParameter sex = new SqlParameter("@sex", SqlDbType.Bit, 1);
sex.Value = P_Bl_Sex;
myCmd.Parameters.Add(sex);
SqlParameter Password = new SqlParameter("@Password", SqlDbType.VarChar,
50);
Password.Value = P_Str_Password;
myCmd.Parameters.Add(Password);
SqlParameter TrueName = new SqlParameter("@TrueName", SqlDbType.VarChar, 50);
TrueName.Value = P_Str_TrueName;
myCmd.Parameters.Add(TrueName);
SqlParameter Questions = new SqlParameter("@Questions",
SqlDbType.VarChar, 50);
Questions.Value = P_Str_Questions;
myCmd.Parameters.Add(Questions);
SqlParameter Answers = new SqlParameter("@Answers", SqlDbType.VarChar,
50);
Answers.Value = P_Str_Answers;
myCmd.Parameters.Add(Answers);
10
SqlParameter Phonecode = new SqlParameter("@Phonecode",
SqlDbType.VarChar, 20);
Phonecode.Value = P_Str_Phonecode;
myCmd.Parameters.Add(Phonecode);
SqlParameter Emails = new SqlParameter("@Emails", SqlDbType.VarChar, 50); Emails.Value = P_Str_Emails;
myCmd.Parameters.Add(Emails);
SqlParameter City = new SqlParameter("@City", SqlDbType.VarChar, 50); City.Value = P_Str_City;
myCmd.Parameters.Add(City);
SqlParameter Address = new SqlParameter("@Address", SqlDbType.VarChar, 200);
Address.Value = P_Str_Address;
myCmd.Parameters.Add(Address);
SqlParameter PostCode = new SqlParameter("@PostCode", SqlDbType.Char,
10);
PostCode.Value = P_Str_PostCode;
myCmd.Parameters.Add(PostCode);
SqlParameter MemberId = myCmd.Parameters.Add("@MemberId",
SqlDbType.BigInt, 8);
MemberId.Direction = ParameterDirection.Output;
//执行过程
myConn.Open();
try {
myCmd.ExecuteNonQuery();
}
catch (Exception ex) {
throw (ex);
}
finally {
11
myCmd.Dispose();
myConn.Close();
}
return Convert.ToInt32(MemberId.Value.ToString());
}
用户登录 protected void btnLoad_Click(object sender, EventArgs e) {
Session["UID"] = null;
Session["Username"] = null;
if (txtName.Text.Trim() == "" || txtPassword.Text.Trim() == "") {
Response.Write("<script>alert('登录名和密码不能为空!');
location='javascript:history.go(-1)';</script>");
}
else {
if (txtValid.Text.Trim() == lbValid.Text.Trim()) {
int P_Int_IsExists = uiObj.UserExists(txtName.Text.Trim(),
txtPassword.Text.Trim());
if (P_Int_IsExists == 100) {
DataSet ds = uiObj.ReturnUIDs(txtName.Text.Trim(),
txtPassword.Text.Trim(), "UserInfo");
Session["UID"] = Convert.ToInt32(ds.Tables["UserInfo"].
Rows[0][0].ToString());
Session["Username"]
ds.Tables["UserInfo"].Rows[0][1].ToString();
Response.Redirect("index.aspx");
}
else {
Response.Write("<script>alert('您的登录有误,请核对后再重新登
录!');
12 =
location='javascript:history.go(-1)';</script>");
}
}
else {
Response.Write("<script>alert('请正确输入验证码!');
location='javascript:history.go(-1)';</script>");
}
}
}
购物车代码 /// <summary>
/// 向购物车中添加信息
/// </summary>
/// <param name="P_Int_BookID">图书编号</param>
/// <param name="P_Flt_MemberPrice">会员价格</param>
/// <param name="P_Int_MemberID">会员编号</param>
public void AddShopCart(int P_Int_BookID, float P_Flt_MemberPrice, int P_Int_MemberID)
{
SqlConnection myConn = dbObj.GetConnection();
SqlCommand myCmd = new SqlCommand("Pr_InsertShopCart", myConn); myCmd.CommandType = CommandType.StoredProcedure;
//添加参数
SqlParameter BookID = new SqlParameter("@BookID", SqlDbType.BigInt, 8); BookID.Value = P_Int_BookID;
myCmd.Parameters.Add(BookID);
SqlParameter MemberPrice = new SqlParameter("@SumPrice", SqlDbType.Float,
8);
MemberPrice.Value = P_Flt_MemberPrice;
13
myCmd.Parameters.Add(MemberPrice);
SqlParameter MemberID = new SqlParameter("@MemberID", SqlDbType.BigInt,
8);
MemberID.Value = P_Int_MemberID;
myCmd.Parameters.Add(MemberID);
//执行过程
myConn.Open();
try {
myCmd.ExecuteNonQuery();
}
catch (Exception ex) {
throw (ex);
}
finally {
myCmd.Dispose();
myConn.Close();
}
}
/// <summary>
/// 显示购物车中的信息
/// </summary>
/// <param name="P_Str_srcTable">信息表名</param>
/// <param name="gvName">控件名</param>
/// <param name="P_Int_MemberID">会员编号</param>
public void SCIBind(string P_Str_srcTable, GridView gvName, int P_Int_MemberID) {
SqlConnection myConn = dbObj.GetConnection();
SqlCommand myCmd = new SqlCommand("Pr_GetShopCart", myConn); myCmd.CommandType = CommandType.StoredProcedure;
14
//添加参数
SqlParameter MemberID = new SqlParameter("@MemberID", SqlDbType.BigInt,
8);
MemberID.Value = P_Int_MemberID;
myCmd.Parameters.Add(MemberID);
//执行过程
myConn.Open();
try {
myCmd.ExecuteNonQuery();
}
catch (Exception ex) {
throw (ex);
}
finally {
myCmd.Dispose();
myConn.Close();
}
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds = new DataSet();
da.Fill(ds, P_Str_srcTable);
gvName.DataSource = ds.Tables[P_Str_srcTable].DefaultView;
gvName.DataBind();
}
/// <summary>
/// 返回合计总数的Ds
/// </summary>
/// <param name="P_Str_srcTable">信息表名</param>
/// <param name="P_Int_MemberID">员工编号</param>
/// <returns>返回合计总数的Ds</returns>
public DataSet ReturnTotalDs(int P_Int_MemberID, string P_Str_srcTable) { 15
SqlConnection myConn = dbObj.GetConnection();
SqlCommand myCmd = new SqlCommand("Pr_TotalInfo", myConn); myCmd.CommandType = CommandType.StoredProcedure;
//添加参数
SqlParameter MemberID = new SqlParameter("@MemberID", SqlDbType.BigInt, 8);
MemberID.Value = P_Int_MemberID;
myCmd.Parameters.Add(MemberID);
//执行过程
myConn.Open();
try {
myCmd.ExecuteNonQuery();
}
catch (Exception ex) {
throw (ex);
}
finally {
myCmd.Dispose();
myConn.Close();
}
SqlDataAdapter da = new SqlDataAdapter(myCmd);
DataSet ds = new DataSet();
da.Fill(ds, P_Str_srcTable);
return ds;
}后台管理界面的设计
2. 管理员登录后台代码
protected void btnLogin_Click(object sender, EventArgs e) {
if (txtAdminName.Text.Trim() == "" || txtAdminPwd.Text.Trim() == "") {
Response.Write("<script>alert('登录名和密码不能为空!');
16
location='javascript:history.go(-1)';</script>");
}
else {
if (txtAdminCode.Text.Trim() == Session["Valid"].ToString().Trim()) {
int P_Int_IsExists = mcObj.AExists(txtAdminName.Text.Trim(),
txtAdminPwd.Text.Trim());
if (P_Int_IsExists == 100) {
DataSet ds = mcObj.ReturnAIDs(txtAdminName.Text.Trim(),
txtAdminPwd.Text.Trim(), "AInfo");
Session["AID"] =
Convert.ToInt32(ds.Tables["AInfo"].Rows[0][0].ToString());
Session["Aname"] = ds.Tables["AInfo"].Rows[0][1].ToString();
Response.Write("<script language=javascript>
window.open('AdminIndex.aspx');window.close();</script>");
}
else {
Response.Write("<script>alert('您输入的用户名或密码错误,
请重新输入!');location='javascript:history.go(-1)';</script>");
}
}
else {
Response.Write("<script>alert('验证码输入有误,
请重新输入!');location='javascript:history.go(-1)';</script>");
}
}
}
3. 后台设计
后台的设计主要分为6大块:订单管理、管理员管理、会员管理、物流管理、图书管理和图片管理。
17
1) 订单管理模块主要实现的是对订单信息的审核,如果订单信息不合格,可以进行删除。此模块中加入了订单的搜索,以便查看特定订单的信息。可以更改订单的状态:是否已确认、是否已付款、是否已发货和是否已归档。
2) 管理员管理和会员管理模块的主要实现的是管理员和用户的添加、修改和删除。
3) 物流管理模块主要实现的是支付方式管理、配送方式管理、配送地点管理。 4) 图书管理模块主要实现的是图书和图书类别信息的添加、修改和删除。
5) 图片管理模块主要实现的是图书和图书类别相关图片的添加和删除。
如图6-2所示,为后台图书管理页面,管理员可以查看图书相关信息,可以对图书进行信息修改和删除操作。
图6-2 图书管理页面
如图6-3所示,为后台订单管理页面,管理员可以对定单进行核实,也可以删除相应的订单信息。
18
图6-3 订单管理页面
如图6-3所示,为图片管理页面,管理员可以进行图片的上传和删除操作。
图6-3 图片管理页面
六、 课程设计总结
经过一周的紧张设计与开发,我的课程设计基于 ASP.NET的网上书店管理系统基本开发完成了。 通过本系统的开发使我所学的专业知识得到了综合的运
19
用,对以前很多抽象、枯燥的理论知识加深了理解,同时也使我学会了利用结构化程序设计思想开发网上书店管理系统,并用模块化方法加以实现。通过本次的系统开发,我深刻地认识到信息系统开发的每一步都是以上一步为基础的。因此每一步文档的编写都必须正确、完整,否则就会给下一步的工作带来不必要的麻烦,加大工作量。因为系统是为用户服务的,所以要充分了解用户的需求,考虑用户的特点和使用方面的习惯,以协调人机关系。在系统实施中应结合各方面的要求,尽可能选择自己熟悉的程序设计语言。系统测试中要根据实际情况设计有效的测试方法。 在系统设计过程中,从用户的角度出发,在系统的可用性和易用性上做了很多功夫,力求能达到最好的效果。但由于我的编程实现能力和课程设计的时间都有限,所以还有很多功能需要改进,希望以后在这一方面会有更大的进步。
20