數(shù)據(jù)庫課程設計-報告_第1頁
數(shù)據(jù)庫課程設計-報告_第2頁
數(shù)據(jù)庫課程設計-報告_第3頁
數(shù)據(jù)庫課程設計-報告_第4頁
數(shù)據(jù)庫課程設計-報告_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、 數(shù)據(jù)庫課程設計設計報告起止日期: 2015 年 10月 26日 至 2015 年 11月 5 日專業(yè)計算機信息管理準考證號0545152250341學生姓名吳恒知目 錄一、背景1二、系統(tǒng)分析11. 需求分析12開發(fā)及運行環(huán)境1三、數(shù)據(jù)庫設計11功能模塊設計(增加三行說明,效果如圖1所示)12數(shù)據(jù)庫設計23主要模塊功能實現(xiàn)33.1 數(shù)據(jù)庫連接33.2 登陸功能43.3 首頁顯示73.4發(fā)帖功能11四、課程設計中遇到的問題、解決方法、收獲和總結(jié)13校園網(wǎng)一、背景在信息化時代,通過網(wǎng)絡信息交流溝通非常快捷;同時,網(wǎng)站作為網(wǎng)絡資源的重要形式是備受學生歡迎的獲取信息的渠道。因此可以通過建立大學生活網(wǎng),

2、來解決困擾大學生的問題。通過本網(wǎng)站,學生可以轉(zhuǎn)讓閑置物品或作為微商在網(wǎng)站上創(chuàng)業(yè);可以獲取學校周邊的旅游景點、美食小吃的信息以及同學的評論;可以發(fā)表在學習上遇到的問題尋求解決辦法或是分享自己的學習經(jīng)驗。二、系統(tǒng)分析1. 需求分析網(wǎng)絡交流成為當下交際的重要方式;用戶可以在網(wǎng)站發(fā)布學習、生活的狀態(tài)與同學進行交流。在校學生離校時有很多閑置物品,扔了可惜;本網(wǎng)站提供了二手轉(zhuǎn)賣功能模塊,為轉(zhuǎn)讓閑置物品提供方便。同時也為在校創(chuàng)業(yè)的微商們提供方便的校內(nèi)銷售、推廣平臺。2開發(fā)及運行環(huán)境本系統(tǒng)采用SQLsever+Javaweb聯(lián)合編程,具體開發(fā)環(huán)境如下數(shù)據(jù)庫環(huán)境:Sql2012Javaweb開發(fā)環(huán)境:my ec

3、lipse10Web應用服務器:Tomcat 6.0運行環(huán)境如下:Jdk版本7.0以上、tomcat6.0以上三、數(shù)據(jù)庫設計校園網(wǎng)用戶管理員注冊、登錄發(fā)帖、回帖查找、刪除刪帖加精1功能模塊設計本網(wǎng)站角色分為用戶和管理員,用戶有登錄、注冊、發(fā)帖、回帖等主要功能,還有查找和刪除等輔助功能。而管理員有權利刪除不符合規(guī)定的帖子、回帖,也可以對比較好的帖子進行加精處理。圖1功能模塊設計2數(shù)據(jù)庫設計根據(jù)需求分析,設計User_info、topic_info、Relation_info、Followup_info表表1 User_info字段名稱數(shù)據(jù)類型長度約束含義IdInt32主鍵IdNamenchar(

4、10)10姓名PassWordnchar(10)10密碼Portraitvarchar(50)50頭像RegistTimetime(7)7時間statusint32狀態(tài)mottonvarchar(MAX)Max座右銘表2 topic_info字段名稱數(shù)據(jù)類型長度約束含義TopicIdInt32主鍵帖子IdAuthorIdInt32外鍵IdTitlevarchar(50)10標題Contentnvarchar(MAX)10內(nèi)容PublishTimedate50發(fā)表時間Themenchar(10)7主題statusint32狀態(tài)表3 Relation_info字段名稱數(shù)據(jù)類型長度約束含義Relat

5、ionIdInt32主鍵關系IdUserIdInt32外鍵主用戶oUserIdInt32外鍵次用戶RelationTypeInt 32關系類別CreatTimetime(7)7時間表4 Followup_info字段名稱數(shù)據(jù)類型長度約束含義 followIdInt32主鍵回帖IdtopicIdint32外鍵帖子idFollowContentnvarchar(MAX)max回帖內(nèi)容FollowTimetime(7)7時間statusint32狀態(tài)3主要模塊功能實現(xiàn)3.1 數(shù)據(jù)庫連接本網(wǎng)站采用sqlsever數(shù)據(jù)庫,數(shù)據(jù)庫連接核心代碼如下package com.collegelife.connec

6、tion;import java.sql.*;public class ConnectionManager private static final String driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" private static final String url="jdbc:sqlserver:/localhost:1433;DatabaseName=collegelife_DB"private static final String userName = "sa"

7、;private static final String pwd = "123"private static Connection con;/public ConnectionManager() try Class.forName(driver); catch (ClassNotFoundException e) e.printStackTrace();public static Connection getConnection()try con = DriverManager.getConnection(url,userName,pwd); catch (SQLExcep

8、tion e) e.printStackTrace();return con;public void close()try con.close(); catch (SQLException e) e.printStackTrace();public static void main(String args) ConnectionManager cm = new ConnectionManager();System.out.println(cm.getConnection()+"數(shù)據(jù)庫連接正常!");3.2 登陸功能用戶將登錄請求發(fā)給服務器,loginservlet接收請求后

9、,現(xiàn)使用setCharacterEncoding()方法將頁面發(fā)送過來的參數(shù)改成utf-8編碼格式,然后使用getParameter()方法獲取頁面?zhèn)鬟^來的用戶名和密碼,然后創(chuàng)建UserOpr的對象uo,然后調(diào)用UserOpr里的verify(String id,String pwd)方法,最后進入數(shù)據(jù)庫查詢用戶名若不存在則返回flag=1,用戶界面顯示不存在該用戶;若存在該用戶,則比對密碼是否正確,若不正確則返回flag=2,用戶界面顯示密碼錯誤;若密碼正確則成功登錄,并跳轉(zhuǎn)到主頁上。登陸界面如圖所示: 關鍵代碼如下:Servlet:package com.collegelife.servl

10、et;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import com.collegelife.opr.UserOpr;public class LoginServlet exte

11、nds HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException doPost( request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException /1.接收表單參數(shù) 2.登錄驗證 3.保存結(jié)果(session)

12、 4.返回頁面HttpSession session=request.getSession(); /創(chuàng)建Sessionrequest.setCharacterEncoding("utf-8");String userid=request.getParameter("userid"); String pwd= request.getParameter("password"); String result="" /創(chuàng)建UserOpr的對象 UserOpr uo=new UserOpr(); int flag=uo.ve

13、rify(userid, pwd); if( flag=1)result="用戶名不存在"session.setAttribute("ResultInfo",result );/將數(shù)據(jù)保存到Sessionresponse.sendRedirect("MyJsp.jsp");/頁面重定向else if(flag=2)result="密碼錯誤"session.setAttribute("ResultInfo",result );/將數(shù)據(jù)保存到Sessionresponse.sendRedirect(

14、"MyJsp.jsp");/頁面重定向else if(flag=3)session.setAttribute("ResultInfo",result );/將數(shù)據(jù)保存到Sessionresponse.sendRedirect("index.jsp");/頁面重定向 UserOpr * 用戶名不存在:flag=1; * 密碼錯誤: flag=2; * 驗證通過: flag=3.public int verify(String id,String pwd)int flag=-1;sql = "select * from user

15、_info where id=? " try psmt = con.prepareStatement(sql);psmt.setString(1,id);/執(zhí)行SQLResultSet rs= psmt.executeQuery();/查詢/判斷if(rs.next()if(rs.getString("password").trim().equals(pwd) flag=3;elseflag=2;else flag=1; catch (SQLException e) e.printStackTrace(); return flag;3.3 首頁顯示用戶成功跳轉(zhuǎn)到主

16、界面后,將用戶id保存到session,然后到數(shù)據(jù)庫中查找該id的好友,SQL語句如下:select * from dbo.user_info ,(select ouserid from dbo.user_info join dbo.relation_info on dbo.user_info.Id=dbo.relation_info.userId where id=?)as a where dbo.user_info.Id = a.ouserid在頁面里新建UserOpr對象uo,調(diào)用UserOpr里的List()方法,新建ArrayList<user>來承載從數(shù)據(jù)庫中查詢到的用

17、戶列表,通過循環(huán)將每一用戶數(shù)據(jù)轉(zhuǎn)儲到ArrayList中,在頁面里先判斷l(xiāng)ist是否為空,若為空則不進入下一步的循環(huán),若list不為空,則進入循環(huán),通過for循環(huán)遍歷整個好友列表,為每個好友分配一個div同時設置id,針對不同位置的div添加不同的樣式,然后獲取好友的頭像作為div的背景圖片,獲取座右銘的值并賦給div的title。當用戶數(shù)遍滑過該div時,觸發(fā)jQuery hover事件,在該div旁邊生成另一個div,同時獲取title值,并入顯示在div中。關鍵代碼如下:UserOpr:public ArrayList<User> list() /獲取所有的好友sql = &

18、quot;select * from dbo.user_info ,"sql+=" (select ouserid from dbo.user_info join dbo.relation_info on dbo.user_info.Id=dbo.relation_info.userId where Name='iven')"sql+=" as a where dbo.user_info.Id = a.ouserid"ArrayList<User> list = new ArrayList<User>()

19、;try psmt = con.prepareStatement(sql);ResultSet rs = psmt.executeQuery();while(rs.next()User u = new User();u.setName(rs.getString("name");u.setPortrait(rs.getString("portrait");String m;if(rs.getString("motto")=null) m="這個人很懶什么都沒寫"elsem=rs.getString("mot

20、to");u.setMotto(m);/u.setMotto(rs.getString("motto");list.add(u); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return list;Index.jsp <%/調(diào)用UseOpr方法list(),獲取數(shù)據(jù)表數(shù)據(jù)UserOpr uo=new UserOpr();ArrayList<User> list=uo.list();/通過循環(huán)顯示好友if(list!=null)int i=

21、1;for(User u:list) %> <div id="facewall<%=i%>" > <a href="#" title="<%=u.getMotto()%>"> <div class="cover"> </div> <img src="images/<%=u.getPortrait() %>"> </a> </div> <%i+; %><%

22、 %> </div>在頁面里新建TopicOpr對象to,調(diào)用TopicOpr里的List()方法,新建ArrayList<topc>來承載從數(shù)據(jù)庫中查詢到的帖子列表,通過循環(huán)將每一帖子數(shù)據(jù)轉(zhuǎn)儲到ArrayList中,然后釋放ResultSet對象rs,在頁面里先判斷l(xiāng)ist是否為空,若為空則不進入下一步的循環(huán),若list不為空,則進入循環(huán),通過for循環(huán)遍歷整個帖子列表,再在頁面里通過循環(huán)顯示, 關鍵代碼如下:topicOpr:public class TopicOpr public ArrayList<Topic> list()Connection

23、 con=null;PreparedStatement stmt=null;ResultSet rs =null;ArrayList<Topic> list = new ArrayList<Topic>();trycon=ConnectionManager.getConnection();String sql = "select top 8 Title,Name,portrait,Content,PublishTime,Theme from topic_info,user_info " ;sql+="where topic_info.Aut

24、horId=user_info.id order by topic_info.publishtime desc"stmt =con.prepareStatement(sql);rs=stmt.executeQuery();while(rs.next()Topic t = new Topic();t.setTitle(rs.getString("Title");t.setUserName(rs.getString("Name");t.setPortrait(rs.getString("portrait");t.setconte

25、nt(rs.getString("Content");t.setPublishTime(rs.getString("PublishTime");t.setTheme(rs.getString("Theme");list.add(t);catch(Exception ex)ex.printStackTrace();return null;finallyif (rs!=null)tryrs.close();rs=null;catch (Exception ex) ex.printStackTrace();return list; Inde

26、x.jsp<div id="container"> <%/調(diào)用TopicOpr方法list(),獲取數(shù)據(jù)表數(shù)據(jù)TopicOpr to=new TopicOpr();ArrayList<Topic> list2=to.list();/通過循環(huán)顯示帖子if(list2!=null)for(Topic t:list2) %> <div class="content"> <div class="content_img"><img src="images/<%=t

27、.getPortrait() %>"></div> <div class="content_txt"> <p class="content_title"><%=t.getTitle() %></p> <div class="content_label"> <div class="content_triangelleft"></div> <p><%=t.getTheme() %>

28、;</p> <div class="content_triangelright"></div> </div> <article><%=t.getcontent() %> </article> <div class="content_bottmer"> <div class="content_id"><img src="images/user.png"> <p><%=t.getUs

29、erName() %></p></div> <div class="content_time"><img src="images/time.png"> <P><%=t.getPublishTime() %></P></div> </div> </div> </div><% %> </div>3.4發(fā)帖功能用戶進入發(fā)帖界面后頁面顯示一個表單,由用戶填寫標題和內(nèi)容,用戶點擊發(fā)表后,頁面將表單內(nèi)容以p

30、ost的方式發(fā)送給服務器,Topicservlrt繼承HttpServlet類,重寫dopost()方法,通過setContentType()和request.setCharacterEncoding();將表單里的參數(shù)規(guī)范為utf-8編碼格式,新建Data對象data和SimpleDateFormat對象sdf,最后獲取系統(tǒng)時間并用對象sdf里的format()的方法將其規(guī)范為yyyy-MM-dd格式。接收表單參數(shù)txt和tit,將接收到的表單參數(shù)和獲取到的并規(guī)范過的系統(tǒng)時間封裝為一個Topic對象,調(diào)用TopicOpr里的publish(Topic topic)方法,將topic對象里的數(shù)

31、據(jù)寫入SQL語句,再在數(shù)據(jù)庫里執(zhí)行,將數(shù)據(jù)插入。若插入成功則方法返回true,若插入異常,則返回falseTopicservlet:package com.collegelife.servlet;import java.io.IOException;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.ser

32、vlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.collegelife.model.Topic;import com.collegelife.opr.TopicOpr;public class TopicServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOExcept

33、ion doPost(request, response);public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException response.setContentType("text/html;charset=UTF-8");request.setCharacterEncoding("utf-8");Date date = new Date();SimpleDateFormat sdf = ne

34、w SimpleDateFormat("yyyy-MM-dd");String strCurrentTime=sdf.format(date);/接收表單參數(shù)PrintWriter out = response.getWriter();String txt=request.getParameter("txt");String tit=request.getParameter("tit");/3.將接收到的表單參數(shù)封裝為一個Topic對象Topic topic=new Topic();topic.setcontent(txt);topi

35、c.setTitle(tit);topic.setPublishTime(strCurrentTime);TopicOpr to=new TopicOpr();if(to.publish(topic)out.print("<script type='text/javascript'>alert('發(fā)表成功!')</script>");elseout.print("<script type='text/javascript'>alert('發(fā)表失??!')</sc

36、ript>");response.setHeader("refresh", "2;URL=index.jsp");/延遲兩秒跳轉(zhuǎn)TopicOprpublic boolean publish(Topic topic)Connection con=null;PreparedStatement stmt=null; int row = 0; try con=ConnectionManager.getConnection();String sql = "insert into topic_info(AuthorId,Title,Cont

37、ent,PublishTime,Theme,status) values('11',?,?,?,'我在校園',1)" stmt = con.prepareStatement(sql); stmt.setString(1, topic.getTitle(); stmt.setString(2, topic.getcontent(); stmt.setString(3, topic.getPublishTime();/執(zhí)行SQLrow = stmt.executeUpdate(); catch (SQLException e) e.printStackTr

38、ace(); return row>0?true:false;四、課程設計中遇到的問題、解決方法、收獲和總結(jié)通過這一階段的數(shù)據(jù)庫課程設計鍛煉,我遇到的問題與排、查解決過程如下:用戶登錄時瀏覽器報500錯誤,同時my eclipse 的console界面顯示SQL用戶”sa”登錄失敗。經(jīng)檢查,SQLsever數(shù)據(jù)庫正常,將useropr里的SQL語句復制到SQLsever查詢分析器里,運行正常。數(shù)據(jù)庫驅(qū)動ConnectionManager里,用戶名和密碼全部正確。最后在my eclipse里運行了ConnectionManager,console報錯說缺少包庫。在libraries里發(fā)現(xiàn)原來的jdbc包的路徑是u盤的,由于我當時沒有插優(yōu)盤,導致找不到該jdbc,我將jdbc復制到工程文件夾

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論