基于ASP.NET和Sql Server实现的读书平台网站

Resurgam

发布日期: 2019-03-19 10:29:13 浏览量: 1747
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

1 课程设计目的

综合运用软件工程思想、面向对象分析和设计方法、ASP.NET、数据库等基础知识,完成一个B/S架构的Web应用程序,掌握应用ASP.NET技术开发中小型网站的相关知识和技术。

2 课程设计内容

针对一个咸鱼读书网系统项目需求,利用数据库管理系统(Microsoft Sql Server 2012),构建项目数据库系统。利用 Visual Studio 集成开发环境,采用ASP.NET技术、C#语言、WEB Forms窗体设计技术、LINQ数据访问技术、三层架构等,完成系统界面设计和功能开发,并对系统进行功能测试。

3 课程设计工具和平台

  • Microsoft Sql Server 2012

  • Microsoft Visual Studio 2013

  • Windows 7操作系统

  • PC机一台

  • 实验/课程设计项目指导书和相关参考书籍,网络资源等

4 项目开发步骤

逻辑层的逻辑判断和数据层的部分判断。大致有用户登录信息的匹配,用户注册是否重复,用户留言是否多次对同一本留言,按时间或者评分对图书的排序,评分的计算方法,留言内容的写入。

一开始的时候只想到数据层访回图书类组给逻辑层,但是没想到当查询数量为空时的返回值,所以当时我就走去在数据层自己写几个关于结果为空时的返回函数,这也是分工前对自己的需求不明确导致后来大家都有点乱和耽误了进度。

4.1 需求分析(功能模块分析与数据库设计)

4.1.1 系统功能分析

从实体类中得知类的类名和有关的数据类型,完成以下逻辑功能。

当进入页面的导航栏有三个有关按序查书的功能

  • 读书:按数据库的默认查询排序

  • 最新书籍:按图书的上传时间排序(由大到小)

  • 精彩书籍:按图书的评分排序(由高到低)

其中首页中的图书显示也是根据这两个排序取靠前几个来完成展示:最新书籍的六本流水形式展示的图书是按照最新书籍的类组的前六个类组显示,同理,精彩图书则按照精彩书籍的类组的前三个类组显示。

用户登录与留言评分

在查询书本信息之前需要登录用户,评论的信息将会存到一个表中,如果重复评论打分一本书则会出现相应的提示。

图书信息

通过页面反馈ISBN码进行图书信息查询,获得图书类,图片显示和作品简介都是以文件路径的形式在数据库储存,所以获取之后还要进行一番读文件流。

按需查询书籍

通过LINQ进行模糊查询,自动适应书名、作者或者ISBN的关键字查询功能。

4.1.2 数据库和表设计

建立构建数据库:主要有书籍信息表,留言表和用户表。

书籍信息表:书名,作者,出版社,时间,页数,价格,ISBN,图片地址,评分,简介地址。

字段名 数据类型 备注
BookName varchar(50) 主键
Writer varchar(50)
PublishingHouse varchar(50)
Time date
Page int
price float
ISBN char(15)
Photo varchar(500)
Score float
Introduction varchar(500)

留言表:有ISBN码标识所留言的书本,留言板会显示用户名,留言信息,时间和打分分数,最后在设置一个自增的number,如果没有这个自增number作为主键。起初使用UserID为主键,可能所有书都存在都一表中,所以写留言到数据库留言表的时候,会发生主键冲突,所以设置这个自增量number。

字段名 数据类型 备注
ISBN char(40)
UserID char(5)
TextContent char(100)
PostTime date
Score float
number int 主键

用户表:用户的账号和密码,其中可填写Email。

字段名 数据类型 备注
UserID char(5) 主键
PassWord char(15)
Email char(20) 允许为空

在最后一天整合代码时发生一个关于图片的路径的问题,因为我在逻辑层写函数使用GridView控件调试数据,在GridView中图片路径使用“~\img\xxxx.jpg”带有波浪号形式的路径是可以在GridView中正确显示相对路径的图片,但在前端的src上就显示不了,得使用“\img\xxx.jpg”去掉“~”的形式才能正确找到相对路径的图片。

数据库导入关系和各表的主键设计

4.2 系统设计与实现

4.2.1 用户逻辑的实现

用户登录与注册的信息判断(ID和密码匹配,注册账号不重复)。

从数据库中通过LINQ 在表中查询是否存在匹配的信息,返回return或者false用户处理信息。相关代码如下:

  1. public class UserOperation
  2. {
  3. //登录操作
  4. public bool Sign_in(Customer register)
  5. {
  6. UserData user = new UserData();
  7. //判断登录是否成功
  8. if (user.JudgeUser(register))
  9. {
  10. return true;
  11. }
  12. else
  13. {
  14. return false;
  15. }
  16. }
  17. //注册操作
  18. public bool Sign_up(Customer register)
  19. {
  20. UserData user = new UserData();
  21. //账号或者密码不能为空
  22. if(String.IsNullOrEmpty(register.UserID) || String.IsNullOrEmpty(register.PassWord))
  23. {
  24. return false;
  25. }
  26. //当前账号不存在时
  27. if (user.JudgeRegister(register))
  28. {
  29. user.Add(register);
  30. return true;
  31. }
  32. else
  33. {
  34. }
  35. }

4.2.2 图书排序的实现

图书的排序(最新图书和精彩图书)

  1. //时间比较
  2. int CompareTime(BookMessage a, BookMessage b)
  3. {
  4. return b.Time.CompareTo(a.Time);
  5. }
  6. //评分比较
  7. int CompareScore(BookMessage a,BookMessage b)
  8. {
  9. return b.Score.CompareTo(a.Score);
  10. }

4.2.3 模糊查询的实现

模糊查询

相关代码如下:

  1. //模糊查询(ISBN,书名,作者)
  2. public IList<BookMessage> Fuzzy_Search(string text)
  3. {
  4. List<BookMessage> search_books = new List<BookMessage>(); //定义书本数组
  5. //根据书本的ISBN、书名、作者 关键字 进行查询
  6. var result = from r in BookDB.Book
  7. where (r.ISBN.Contains(text)) || (r.BookName.Contains(text)) || (r.Writer.Contains(text))
  8. select r;
  9. foreach(var r in result)
  10. {
  11. BookMessage bookmessage = new BookMessage();
  12. bookmessage.ISBN = r.ISBN; //ISBN
  13. bookmessage.BookName = r.BookName; //书名
  14. bookmessage.Writer = r.Writer; //作者
  15. bookmessage.Time = r.Time; //上传时间
  16. bookmessage.Page = r.Page; //页数
  17. bookmessage.PublishingHouse = r.PublishingHouse; //出版社
  18. bookmessage.Price = (float)r.price; //价钱 ??(不强转float报错)??
  19. bookmessage.Photo = r.Photo; //书本图片路径
  20. bookmessage.Introduction = r.Introduction; //简介
  21. bookmessage.Score = (float)r.Score; //评分默认为0
  22. search_books.Add(bookmessage); //增加这个书本到数组
  23. }
  24. return search_books; //返回书本BookMessage的数组
  25. }

4.2.4 留言评分的实现

发送留言以及分数计算

相关代码如下:

  1. //发送留言
  2. public void PostLWord(LWord lword)
  3. {
  4. string LwordContent = lword.Leave_word;
  5. float LwordScore = lword.Score;
  6. string LwordISBN = lword.Getbook.ISBN;
  7. string LwordUserID = lword.Getcustomer.UserID;
  8. string LwordEmai = lword.Getcustomer.Email;
  9. DateTime LwordPostTime = new DateTime();
  10. LwordPostTime = DateTime.Now;
  11. (new UserData()).PostLeaveWord(lword);
  12. (new BookData()).Average_Score((new BookData()).GetBook(LwordISBN)); //更新书本评分
  13. }
  14. //评分计算
  15. public void Average_Score(BookMessage book)
  16. {
  17. var result = from r in BookDB.LeaveWord
  18. where r.ISBN == book.ISBN
  19. select r;
  20. float sum = 0; //总分
  21. float aver; //平均分
  22. foreach(var r in result)
  23. {
  24. sum = sum + (float)r.Score;
  25. }
  26. aver = sum / (result.Count()); //算出平均分数
  27. //找出图书
  28. var result_book = from r in BookDB.Book
  29. where r.ISBN == book.ISBN
  30. select r;
  31. foreach(Book r in result_book)
  32. {
  33. r.Score = aver; //修改评分
  34. }
  35. BookDB.SubmitChanges();
  36. }

5 系统运行结果及测试分析

成功完成咸鱼读书网系统的开发,并对系统进行了功能测试,系统运行和测试结果如下:

留言系统能够正确录入数据库,但是时间获取失败。

按需查询排序能够正确显示:

原本打算读取文本在逻辑层完成,但是基于实力原因在相对路径问题上出现些解决不了的问题,在逻辑层的相关测试代码如下:

  1. // 读取书本简介文本转换string类型
  2. public string GetIntroductionByISBN(string isbn)
  3. {
  4. string content = "";
  5. BookMessage getbook = (new BookData()).GetBook(isbn); // 获取书本信息
  6. string filepath = getbook.Introduction; // 获取文本路径
  7. using (FileStream fs = new FileStream(filepath, FileMode.open, FileAccess.Read))
  8. {
  9. interface fsLen = (int)fsLen.Length;
  10. byte[] heByte = new byte[fsLen];
  11. int r = fsLen.Read(heByte, 0, heByte.Length);
  12. content = System.Text.Encoding.UTF8.GetString(heByte);
  13. }
  14. return content;
  15. }
  16. protected void Button1_Click(object sender, EventArgs e)
  17. {
  18. BookOperation introduction = new BookOperation();
  19. string i = introduction.GetIntroductionByISBN("9787510862885");
  20. Response.Write(i);
  21. }

不知道出于什么原因,相对路径是在IIS的路径下,但当这些代码在.aspx中写的时候,便能正确访问相对路径,最终我们将代码写在aspx以实现功能,其原因还在探讨。

6 总结和展望

这次的ASP.NET程序设计实训,虽然时间比较紧凑,却让我所学到了很多实际运用的技能和拓展了很多课外的知识,特别是我第一次用三层架构形式小组合作,虽然在结合功能那天我们出现了一些因为沟通的漏缺和主键的问题的Bug,但是我们都积极修改代码一起合作将网站以最好的形式展现,在修改的时候更能发现小组合作的重要性,只要沟通理解正确,他们在改前端或数据库的同时我只要知道哪个值需求有更改就去改哪个值和返回什么值,在这种合作的形式下很多Bug都修好了。

虽然这次的实训实现的功能未能如期实现,例如用户的收藏图书功能和管理员增删改图书的功能,因为这些代码在合并时都出现未能及时解决的Bug,这也是一种遗憾未能将我们的读书网以更好的形式展示,但是从中我也体会到合作成员之间明确的需求沟通重要性,在项目开始之前我们必须清楚自己需要什么参数,需要得到什么类型的值,需要返回什么类型的值等等。这些本来可以避免的问题最终还是出现了,经一事长一智,我相信通过本次三层架构的小组合作,在以后的合作实训项目会变得更好更清楚自己需要什么自己要做什么。

上传的附件 cloud_download 基于ASP.NET和Sql Server实现的读书平台网站.7z ( 16.49mb, 44次下载 )
error_outline 下载需要15点积分

发送私信

每个人最终和自己越长越像

16
文章数
15
评论数
最近文章
eject