新聞管理系統的設計-軟件工程課程設計報告及新聞發(fā)布管理系統設計報告書_第1頁
新聞管理系統的設計-軟件工程課程設計報告及新聞發(fā)布管理系統設計報告書_第2頁
新聞管理系統的設計-軟件工程課程設計報告及新聞發(fā)布管理系統設計報告書_第3頁
新聞管理系統的設計-軟件工程課程設計報告及新聞發(fā)布管理系統設計報告書_第4頁
新聞管理系統的設計-軟件工程課程設計報告及新聞發(fā)布管理系統設計報告書_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

評分:軟件工程課程設計報告新聞管理系統的設計專業(yè)_計算機科學與技術_姓名____班級__學號___完成日期__指導教師_1題目新聞管理系統設計與實現2系統分析2.1問題定義為了實現網站新聞的動態(tài)管理,使得對信息的管理更加及時、高效,提高工作效率同時隨著Internet的普及,越來越多的企業(yè)建立了自己的WWW網站,企業(yè)通過網站可以展示產品,發(fā)布最新動態(tài),與用戶進行交流和溝通,與合作伙伴建立聯系,以及開展電子商務等。其中新聞管理系統是構成企業(yè)網站的一個重要組成部分,它擔負著雙層作用,一方面可以用來動態(tài)發(fā)布有關新產品或新開發(fā)項目,另一方面又可以及時向顧客公告企業(yè)經營業(yè)績、技術與研發(fā)進展、特別推薦或優(yōu)惠的工程項目、產品和服務,從而吸引顧客,擴大顧客群。2.2可行性分析通用的新聞管理系統對于快速建設新聞類網站可以起到事半功倍的效果,它能夠減少投資成本,使企業(yè)和個人不需要什么專業(yè)的技術就可以輕松架設屬于自己的網站,市場發(fā)展前景廣闊。一個優(yōu)秀的新聞管理系統對于促進我國互聯網產業(yè)的發(fā)展,提高我國的網絡化建設水平等方面,具有長期的經濟效益和社會利益?zhèn)鹘y的網站新聞管理方式有兩種,一是靜態(tài)HTML頁面,更新信息時需要重新制作頁面然后上傳頁面并修改相應鏈接,這種方式因為效率太低已不多用。二是基于ASP和腳本語言,將動態(tài)網頁和數據庫結合,通過應用程序來處理新聞,這是目前較為流行的做法。但是由于ASP本身的局限性使得系統有一些不可克服的缺陷,而采取了ASP.NET技術的系統性能上有了很大的改善,其主要表現在以下幾方面:

1.由于ASP頁面每次打開都必須經過先編譯后解釋的過程,所以頁面在反復打開時速度沒有任何提升,而ASP.NET頁面只需要一次編譯后不需要重新編譯,直到該頁面被修改或Web應用程序重新啟動。這使得在多次訪問時速度有了極大的提升。

2.由于ASP沒有提供任何輸出數據為內容的元件,所以在使用ASP撰寫數據庫頁面時只能借助ADO的RecordSet對象逐筆讀取記錄,而ASP.NET通過ADO.NET提供的DataGrid等數據庫元件可以直接和數據庫聯系。

3.ASP.NET支持應用程序的實時更新。管理員不必關掉網絡服務器或者甚至不用停止應用程序的運行就可以更新應用文件。應用程序文件永遠不會被加鎖,因此甚至在程序運行時文件就可以被覆蓋。當文件更新后,系統會溫和地轉換到新的版本。

4.ASP.NET采取"code-behind"方式編寫代碼使得代碼更易于編寫,結構更清晰,降低了系統的開發(fā)與維護的復雜度和費用。作為微軟.NET戰(zhàn)略的重要組成部分,ASP.NET引入了許多激動人心的新技術。這些具有革新意義的新特性,必將使其得到廣泛的支持和應用。中國互聯網絡中心的最新調查結果顯示,在網民最常使用的網絡服務中瀏覽新聞占據第一位,使用率為67.9%。因此一個完整健全的新聞管理系統對企業(yè)或對個人都是有其顯著的作用,為其他各方面的發(fā)展都起到了很大的推動效果,無需過于擔憂系統的開發(fā)成本在其經濟效益之上。該新聞管理系統可以使企業(yè)通過網站可以展示產品,發(fā)布最新動態(tài),與用戶進行交流和溝通,與合作伙伴建立聯系,以及開展電子商務等,其中包括新聞的動態(tài)更新,新聞的檢索,熱點問題追蹤,行業(yè)信息,供應信息,需求信息的發(fā)布等,又可以作為公司的活動年表向社會公布,它及時向顧客公告企業(yè)經營業(yè)績,技術與研發(fā)進展,特別推薦或優(yōu)惠的工程項目,產品和服務,從而吸引顧客,建立并保持顧客的忠誠度。2.3需求分析2.3.1功能需求分析新聞管理信息系統對企業(yè)加強新聞管理有著極其重要的作用,就一般的大型企業(yè)來說,它的設計內容非常復雜而且繁多,比如擁有新聞計算功能,新聞統計功能,報表輸出功能等等,針對公司需要而言,確定了新聞管理系統的設計方案,該新聞管理系統的主要功能實現如下:·····新聞發(fā)布管理·····新聞類別管理·····新聞評論管理·····新聞閱讀查詢·····用戶管理2.3.2數據需求分析根據對新聞管理工作的調查和用戶需求分析,該系統的數據流圖如圖1.1所示。用戶設定新聞設定用戶設定新聞設定SHAPE1.1系統的數據流圖新聞發(fā)布及管理系統用戶使用流程如圖1.2所示,分為系統管理員使用流程和客戶端用戶使用流程。流程一登錄新聞管理系統登錄新聞管理系統創(chuàng)建新聞一級分類創(chuàng)建新聞二級分類發(fā)布管理新聞內容流程二閱讀新聞內容閱讀新聞內容發(fā)布新聞評論1.2用戶使用流程2.3.3性能要求分析該新聞管理系統達到以下四個方面的系統功能特點1)操作簡單、界面友好:完全控件式的頁面布局,使得新聞的錄入工作更簡便;許多選項包括新聞類別、來源部門等只需要點擊鼠標就可以完成;另外,跟蹤出現的提示信息也讓用戶隨時清楚自己的操作情況。

(2)即時可見:對新聞的處理(包括錄入、修改、刪除)將立即在主頁的對應欄目顯示出來,達到"即時發(fā)布、即時見效"的功能。(3)功能完善:包括常見網站的新聞管理的各個方面:新聞錄入、瀏覽、刪除、修改、檢索等各個方面,完整地實現了網站對即時新聞的管理要求。

(4)方便移植:針對不同的企業(yè),只需要稍作修改就可以開發(fā)出適合本企業(yè)特點的網站新聞管理系統!3系統設計3.1系統總體設計圖1.3系統功能模塊圖3.2系統功能模塊設計系統的主要功能是通過幾個功能模塊來實現的。具體的設計過程如下:

(1)系統登錄:該模塊負責將用戶分為普通用戶和注冊用戶來實現用戶權限的管理。

(2)新聞瀏覽:該模塊負責分頁列出網站所有新聞的信息,包括標題、類型、來源部門字段及發(fā)布日期,每條新聞的標題被做成一個超鏈接,點擊它們就能跳轉頁面進行新聞閱讀。

(3)新聞閱讀:在其他頁面中點擊標題鏈接即進入新聞閱讀頁面,此時,每條新聞的詳細信息將被取出,包括內容、標題、關鍵字等,并按照相對固定的格式放置在頁面的不同區(qū)域,所有新聞使用大致相同的頁面布局,只是各字段對應的內容不同而已,另外,頁面其它位置,可以動態(tài)放置其他元件,如網站標志logo、頁面廣告banner等鏈接圖片,這樣可以很容易地實現圖文并茂的閱讀效果。

(4)新聞查詢:該模塊提供了新聞查詢功能,輸入待查找的內容及選定分類信息可以快速地找到符合條件的新聞,并輸出查詢結果。

(5)新聞管理:該模塊負責分頁羅列登錄的注冊用戶曾發(fā)布過且未刪除的新聞信息,用戶可以對該條新聞進行刪除、修改。非新聞發(fā)布者除系統管理員外不具有對該條新聞的處理權限,所以不同用戶進入此頁面將顯示不同的內容。

(6)新聞錄入和修改:注冊用戶錄入一條新聞所需要的內容,包含標題、關鍵字、類型、來源部門、發(fā)布日期等,同時從登錄模塊得到用戶名,這些信息將被寫入數據庫中保存。該模塊還負責編輯狀態(tài)下的更新,這時,它將根據取得的Title字段值對頁面控件初始化。3.3數據庫設計3.3.1數據庫概念結構設計新聞實體信息ER圖新聞信息新聞信息新聞編號新聞題目新聞內容類別編號發(fā)布時間分類信息實體ER圖分類信息分類信息分類編號分類標題發(fā)布時間管理員實體ER圖管理員信息管理員信息用戶名密碼實體之間的聯系圖用戶用戶新聞信息分類信息閱讀分類mn1n操作管理員1n添加刪除修改3.3.2數據庫邏輯物理結構設計利用MicrosoftSQLServer2000建立數據庫及其存儲過程。這里給出必需的數據表。一是數據表新聞表News包含的字段有:編號、姓名、標題、關鍵字、內容、類型、來源部門和日期。字段說明如下:二是數據表用戶Reg包含的字段有:編號、姓名、密碼、所屬部門、電子郵箱和電話。字段說明如下:

三是權限表purview包括的字段有:權限ID,權限名稱,備注。字段說明如下:字段名數據類型說明purviewid自動編號權限IDpurviewname字符權限名稱note字符備注4結束語該新聞管理系統的開發(fā)難點主要是將各個模塊有機結合以及公共文件的使用,尤其是顯示前臺數據的時候,與顯示界面很好地融合也是比較困難的問題,需要細心地布置,通過這次軟件工程的課程設計,使我所學到的軟件工程、數據庫相關知識,進行了一次很好的綜合提煉,使我對數據庫的開發(fā)與應用有了更新的認識,這對我今后的工作和學習都是寶貴的經驗積累。新聞發(fā)布管理系統設計報告目錄第一章引言 11.1研究意義 11.2開發(fā)環(huán)境的搭建與開發(fā)工具 1第二章系統分析 22.1需求分析 22.2可行性分析 5第三章概要設計 53.1系統功能結構圖 53.2實體關系圖 63.3系統功能模塊設計 73.5數據庫設計 8第四章詳細設計 114.1目錄結構 114.2模塊劃分 124.3網站布局的設計 124.4用戶登錄與驗證 134.5用戶注冊的設計與實現 174.6用戶收藏新聞的設計寫實現 204.7后臺管理員的權限的設計 204.8新聞分類的設計與實現 214.9新聞列表的設計與實現 264.10新聞添加的設計與實現 294.11新聞詳細內容的設計與實現 304.12新聞評論的設計與實現 334.13首頁圖片輪換的設計與實現 344.14投票的設計與實現 344.14新聞搜索的設計與實現 35第五章網站測試 364.1頁面的測試 36第六章總結 46第一章引言1.1研究意義隨著互連網的進一步發(fā)展,網絡媒體在人們心中的地位進一步提高,新聞發(fā)布管理系統做為網絡媒體的核心系統,其重要性是越來越重要:一方面,它提供一個新聞管理和發(fā)布的功能;另一方面,現在的新聞發(fā)布要求實現與普通的用戶實現交互,用戶可以很方便地參加一些調查和相關新聞的評論,這一點也是其他一些媒體現在無法做到的(電視,電臺等)。新聞發(fā)布管理系統就是一個把雜亂無章的新聞信息有效得組織起來并以有序的方式呈現給前端客戶的一個信息系統,系統主要實現對新聞的分類,管理,檢索,瀏覽等一系列問題,從而為用戶提供一個美觀,大方,快速的前臺新聞閱讀界面。1.2開發(fā)環(huán)境的搭建與開發(fā)工具1.2.1本系統采用php+apache+mysql+PDO技術開發(fā),使用smarty模板引擎,將邏輯代碼與外在內容分離。Smarty是一個使用PHP寫出來的模板引擎,是目前業(yè)界最著名的PHP模板引擎之一。它分離了邏輯代碼和外在的內容,提供了一種易于管理和使用的方法,用來將原本與HTML代碼混雜在一起PHP代碼邏輯分離。簡單的講,目的就是要使PHP程序員同前端人員分離,使程序員改變程序的邏輯內容不會影響到前端人員的頁面設計,前端人員重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。DO擴展為PHP訪問數據庫定義了一個輕量級的、一致性的接口,它提供了一個數據訪問抽象層,這樣,無論使用什么數據庫,都可以通過一致的函數執(zhí)行查詢和獲取數據。1.2.2開發(fā)環(huán)境搭建WampServer,是在windows下將Apache+PHP+Mysql集成環(huán)境,擁有簡單的圖形和菜單安裝和配置環(huán)境。1.2.3ide的選擇Dreamweavercs5,所見即所得網頁編輯器。EclipsePHPStudio1.2.2是一個大型PHP項目開發(fā)編譯器,給予Eclipse底層開發(fā)而來,并且集成了JDK,免除處了安裝配置的麻煩,一次安裝即可使用無需配置。此編譯器為PHP編譯器,輔助PHP代碼的開發(fā)和調試,集成了代碼高亮,函數跟蹤,時時糾錯等功能。同時還增加了協作開發(fā)版本服務器功能:SVN,CVS。內嵌瀏覽器可以在調試簡單代碼時時瀏覽。1.2.4UML設計工具PowerDesigner是Sybase公司的CASE工具集,使用它可以方便地對管理信息系統進行分析設計,它幾乎包括了數據庫模型設計的全過程。利用PowerDesigner可以制作數據流程圖、概念數據模型、物理數據模型,可以生成多種客戶端開發(fā)工具的應用程序,還可為數據倉庫制作結構模型,也能對團隊設備模型進行控制。系統分析2.1需求分析2.1.1系統需求分析本系統設計的目的是將不同類型的新聞發(fā)布到網絡上,任何用戶都可以通過這個平臺來瀏覽新聞,用戶登錄后可以對新聞發(fā)表評論。管理員管理新聞,新聞欄目,用戶信息和評論。將系統需求總結,得出系統需求如下:系統用戶分為游客,已登錄用戶和管理員游客可以瀏覽新聞,但不能對新聞進行評論游客可以注冊,注冊后進行登錄可以獲得更多權限已經登錄用戶具有游客的所有權限已經登錄用戶可以對新聞進行評論已經登錄用戶可以對偏激的評論舉報只有超級管理員具有用戶所有的權限管理員可以對新聞進行管理管理員可以對新聞分類進行管理管理員可以對用戶進行管理管理員可以對評論進行管理2.1.2用例圖用例圖(UserCase)是被稱為參與者的外部用戶所能觀察到的系統功能的模型圖,呈現了一些參與者和一些用例,以及它們之間的關系,主要用于對系統、子系統或類的功能行為進行建模。新聞發(fā)布管理系統面向三類用戶:管理員,已經登錄用戶,游客,權限依次遞減。管理員管理員擁有最高權限,負責新聞發(fā)布管理系統的日常運行和維護,該系統給管理員的主要功能有:管理用戶,新聞分類管理,新聞管理,評論管理,管理員角色用例如圖2-1所示。圖2-1管理員角色用例圖2)已經登錄用戶已經登錄用戶是新聞發(fā)布管理系統的使用者。本系統為他們提供了以下主要功能:用戶登錄,瀏覽新聞,搜索新聞,發(fā)表新聞評論,舉報評論,參加投票、收藏新聞等。已經登錄用戶的角色用例圖如圖2-2所示圖2-2已經登錄用戶角色用例圖3)游客游客是任何能登錄到新聞發(fā)布管理系統的的人,但是沒有注冊,登錄驗證。所以權限最低。主要有以下幾個功能:注冊,登錄,瀏覽新聞,搜索新聞,參加投票。游客角色用例圖如圖2-3所示。圖2-3游客角色用例圖2.13數據流圖數據流圖從數據傳遞和加工的角度,以圖形的方式刻畫數據流從輸入到輸出的傳輸變換過程。數據流圖是結構化系統分析的主要工具,它表示了系統內部信息的流向,并表示了系統的邏輯處理的功能。數據流圖的基本圖形元素有4種,如圖2-4所示圖2-4數據流圖基本圖形符號根據調查材料,明確系統外部項,識別數據輸入的來源和輸出的去向,自頂向下逐層擴展整個系統的邏輯功能,畫出中層數據流圖。D1:用戶信息存儲,D2:評論信息存儲,D3:用戶收藏新聞信息存儲,D4:新聞信息存儲,D5:新聞分類信息存儲,D6:管理員信息存儲圖2-5數據流圖2.2可行性分析本系統屬于數據信息發(fā)布與管理系統類。用戶對功能上的要求不是很復雜。并且用php開發(fā),php簡單,功能強大。新聞發(fā)布管理系統后臺管理對新聞做了詳細的分類,前臺以分類形式顯示新聞的詳細信息,滿足了人們?yōu)g覽新聞時分類查看新聞信息的要求,前臺提供新聞搜索功能,方便瀏覽者查找新聞。新聞發(fā)布管理系統后臺由管理員進行管理維護,保證了安全性,所以本系統是十分可行的。概要設計3.1系統功能結構圖本系統的功能結構圖如圖3-1所示新聞發(fā)布管理系統登錄}注冊}.注銷友情鏈接管理新聞管理新聞發(fā)布管理系統登錄}注冊}.注銷友情鏈接管理新聞管理后臺評論管理前臺新聞顯示前臺新聞評論用戶管理新聞分類管理添加新聞分類刪除新聞分類修改新聞分類添加新聞修改新聞刪除新聞添加鏈接修改鏈接刪除鏈接查看評論刪除評論瀏覽新聞搜索新聞發(fā)表評論回復評論添加用戶刪除用戶圖3-1系統功能結構圖3.2實體關系圖實體關系圖:簡記E-R圖是指以實體、關系、屬性三個基本概念概括數據的基本結構,從而描述靜態(tài)數據結構的概念模式。管理員管理員賬號密碼管理員編號創(chuàng)建時間權限編號停用時間發(fā)布時間發(fā)布時間新聞類別分類名稱分類編號發(fā)布人新聞類別分類名稱分類編號發(fā)布人添加新聞新聞標題新聞新聞標題新聞內容所屬類別所屬類別所屬類別瀏覽瀏覽發(fā)表用戶評論所屬人編號發(fā)表用戶評論所屬人編號評論內容評論時間用戶編號用戶編號emailemail用戶名密碼用戶名密碼圖3-2新聞發(fā)布管理系統E-R圖3.3系統功能模塊設計本系統分為前臺和后臺兩大模塊,后臺是針對管理員設計的,后臺模塊主要負責用戶的管理,新聞的管理,新聞分類的管理,以及評論的管理。用戶管理包括對用戶的添加,刪除功能;新聞管理包括對新聞的添加,刪除和修改功能;新聞欄目管理包括對新聞分類的添加,刪除,修改功能;評論管理包括對評論的查找和刪除功能;該模塊的功能結構圖如圖3.3所示。前臺模塊針對游客和已登錄用戶而設計的,主要負責用戶的登錄,注冊和注銷功能以及新聞的瀏覽和對新聞發(fā)表評論的功能,其模塊功能圖如圖34所示。后臺添加用戶后臺添加用戶用戶管理用戶管理添加用戶添加用戶添加新聞添加新聞修改新聞新聞管理修改新聞新聞管理添加分類刪除新聞添加分類刪除新聞修改分類新聞分類管理修改分類新聞分類管理刪除分類刪除分類評論管理刪除評論評論管理刪除評論圖3-3新聞后臺功能模塊前臺前臺用戶登錄/注銷用戶注冊瀏覽功能瀏覽新聞發(fā)表評論搜索新聞收藏新聞圖3-4新聞前臺功能模塊3.5數據庫設計后臺用戶表:np_admin前臺用戶表:np_user系統基本配置表:np_config新聞基本表:np_newsbase新聞內容表:np_newscontent新聞分類表:np_newsclass新聞評論表:np_comment投票項目表:np_vote投票選項表:np_item友情鏈接表:np_link用戶收藏表:user_store連接數據用PDO封裝的pdo的類pdo.class.php<?php/*********pdo連接數據庫的簡單繼承封裝***********/classmypdoextendsPDO{private $dsn="mysql:host=localhost;dbname=newsphp";/******數據庫類型,ip,數據庫名*****/private $user="root";//用戶名private $pass="";/***構造函數,連接數據庫**/publicfunction__construct(){ try{PDO::__construct($this->dsn,$this->user,$this->pass,array(PDO::ATTR_PERSISTENT=>true,PDO::MYSQL_ATTR_INIT_COMMAND=>"SETNAMES'utf8';"));parent::setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);}catch(PDOException$e){$e->getMessage();}}/*******統計條數*****/publicfunctioncount_row($table){ $rs=$this->query("SELECT*FROM$table");$rs->fetch();return$rs->rowCount(); }?>第四章詳細設計4.1目錄結構網站總目錄前臺配置:網站后臺目錄4.2模塊劃分系統功能模塊的劃分,是在需求分析基礎上進行的,是把具有復雜功能的系統通過設計分解為具有基本獨立,功能簡單,易于實現等特點的多個功能模塊.模塊劃分的好處是,由于組成系統的模塊基本獨立,功能明確,因此便于模塊的獨立開發(fā)、維護和修改,而不會影響系統中的其他模塊.本系統主要分為前臺和后臺2大模塊前臺主要模塊1.1新聞瀏覽1.2新聞搜索1.3用戶登錄與注冊1.4發(fā)表評論1.5收藏文章后臺主要模塊2.1管理員權限2.2登錄,注冊2.3發(fā)表新聞2.4管理新聞2.4管理用戶2.5管理評論4.3網站布局的設計網站前臺使用css+div布局,css布局用到了960gridsystem,CSS框架能夠節(jié)省更多的開發(fā)時間,顯著提高工作效率。網站的首頁4.4用戶登錄與驗證前臺和后臺操作用到的基本代碼設計成函數,在action.php里Action.php代碼:<?phpsession_start();define("ALLPS","xu--");/*********顯示全部錯誤***********/error_reporting(E_ALL);ini_set("display_errors","on");/***********屏蔽警告和錯誤提示*******************//*error_reporting(E_ERROR);ini_set("display_errors","Off");*//********用戶登錄********/functionuser_login(){$db=newmypdo();$username=str_replace("","",$_POST['username']); $rs=$db->prepare("select*from`np_user`where`username`=?"); $rs->execute(array($username)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?md5($_POST['password'].ALLPS)==$row['password']:false;//驗證密碼 if($pass){ $_SESSION['uid']=$row['uid']; $_SESSION['shell']=md5($row['username'].$row['password'].ALLPS); $_SESSION['times']=time(); $rs=$db->prepare("UPDATE`newsphp`.`np_admin`SET`last_login`=?WHERE`id`=?"); $rs->execute(array(time(),$row['uid']));//更新登錄時間 return$row; }else{ session_destroy(); show_msg("index.php","用戶名或密碼錯誤"); } }/***********用戶權限判斷*************/functionuser_check($uid,$shell){ $db=newmypdo(); $rs=$db->prepare("select*from`np_user`where`uid`=?"); $rs->execute(array($uid)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?$shell==md5($row['username'].$row['password'].ALLPS):false;//驗證密碼 if($pass){ return$row; }else{ session_destroy(); }}/*******注銷********/functionlogout(){ session_destroy(); } /*******超時判斷*******/functiontimeout($long="3600"){ $new_time=time(); $onlinetime=$_SESSION['times']; if($new_time-$onlinetime>$long){ session_destroy(); header("Content-Type:text/html;charset=utf-8"); echo"登錄超時".'<ahref="index.php"target="_parent">返回登錄</a>'; exit(); }else{ $_SESSION['times']=time(); } } /*************PHP中文字符截取***************//*@paramstring$str要截取的字串*@paramint$start截取起始位置*@paramint$length截取長度*@paramstring$charsetutf-8|gb2312|gbk|big5編碼*@param$suffix是否加尾綴*/functioncutstr($str,$start=0,$length,$charset="utf-8",$suffix=true){if(function_exists("mb_substr")){if(mb_strlen($str,$charset)<=$length)return$str;$slice=mb_substr($str,$start,$length,$charset);}else{$re['utf-8']="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$re['gb2312']="/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";$re['gbk']="/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";$re['big5']="/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";preg_match_all($re[$charset],$str,$match);if(count($match[0])<=$length)return$str;$slice=join("",array_slice($match[0],$start,$length));}if($suffix)return$slice."…";return$slice;}/*******操作提示跳轉頁******/functionshow_msg($url,$show='操作已成功!',$open="self"){ $msg='<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htmlxmlns="/1999/xhtml"><head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <scripttype="text/javascript"> setTimeout("goto()",2000); functiongoto(){ '.$open.'.window.location="'.$url.'"; } </script> <title>管理區(qū)域</title> </head> <body> <divid="man_zone"> <tablewidth="40%"border="1"align="center"cellpadding="3"cellspacing="0"class="table"style="margin-top:100px;border-collapse:collapse;"> <tr> <thalign="center"style="background:#cef">信息提示</th> </tr> <tr> <td><p><fontcolor=#ff0000>'.$show.'</font><br/> 2秒后返回指定頁面!<br/> 如果瀏覽器無法跳轉,<ahref="'.$url.'"target="_'.$open.'">請點擊此處</a>。</p></td> </tr> </table> </div> </body> </html>'; echo$msg; exit(); } ?> 4.5用戶注冊的設計與實現前臺用戶注冊user_register.php<?phpinclude_once("global.php");/********用戶注冊***********/$db=newmypdo();if(isset($_POST['submit'])){$rs=$db->prepare("INSERTINTO`np_user`(`username`,`password`,`email`)VALUES(?,?,?)");$rs->execute(array($_POST['username'],md5($_POST['password'].ALLPS),$_POST['email']));show_msg("index.php","恭喜您,注冊成功,請登錄");}$smarty->display("user_register.html");?>用到jquery的插件validate,//JavaScriptDocument$(function(){ //自定義驗證 $.validator.addMethod("stringCheck",function(value,element){returnthis.optional(element)||/^[\u0391-\uFFE5\w]+$/.test(value);},"只能包括中文字、英文字母、數字和下劃線"); $("#reg").validate({ rules:{ username:{ required:true, minlength:5, stringCheck:true, remote:"user_ajax.php" }, password:{ required:true, minlength:5 }, email:{ required:true, email:true }, password2:{ required:true, minlength:5, equalTo:"#password" } }, messages:{ username:{ required:"請輸入用戶名", minlength:"用戶名太短了點", remote:"該用戶名已經被注冊了" }, password:{ required:"請輸入密碼名", minlength:"用戶密碼太短了點" }, email:{ required:"請輸入email", email:"email格式不正確哦" }, password2:{ equalTo:"請輸入相同的密碼" } }, errorElement:"em", success:function(em){ em.text("").addClass("success") } }) })調用的ajaxuser_ajax.php<?phpinclude_once('./common/pdo.class.php');session_start();$db=newmypdo();if(isset($_GET['username'])){//用戶名驗證$db=newmypdo();$rs=$db->prepare("SELECT*FROM`np_user`WHERE`username`=?");$rs->execute(array($_GET['username']));$row=$rs->fetch();if(is_array($row)){ echo"false"; }else{ echo"true"; }}if(!empty($_POST['vote_button'])){ foreach(array_filter($_POST['id'])as$id){ $rs_t=$db->prepare("UPDATE`newsphp`.`np_item`SET`hit`=hit+1WHERE`np_item`.`id`=?"); if(@$_COOKIE["$id"]!=$id){ $rs_t->execute(array($id)); setcookie($id,$id,time()+1800); } } }?>實現了如下效果:user_register.php4.6用戶收藏新聞的設計寫實現未完成4.7后臺管理員的權限的設計分五個等級:switch($row['mid']){ case"0": $rule="擁有所有權限"; $level="創(chuàng)始人"; break; case"1": $rule="擁有所有權限"; $level="超級管理員"; break; case"2": $rule="可以對新聞,評論進行管理"; $level="普通管理員"; break; case"3": $rule="可以管理新聞"; $level="新聞管理員"; break; case"4"; $rule="可以管理評論"; $level="評論管理員"; break;/***********用戶權限判斷*************/functionuser_check($uid,$shell,$mid="100"){ $db=newmypdo(); $rs=$db->prepare("select*from`np_admin`WHERE`id`=?"); $rs->execute(array($uid)); $row=$rs->fetch(); $us=is_array($row); $pass=$us?$shell==md5($row['username'].$row['password'].ALLPS):false;//驗證密碼 if($pass){ if($mid>=$row['mid']){//權限判斷 return$row; }else{ show_msg("admin_main.php","你沒用權限操作該頁面"); exit(); } }else{ show_msg("index.php","請先登錄"); exit(); }}4.8新聞分類的設計與實現本系統最難的地方,要實現無限分類先寫個無限分類的類,tree.class.php<?php/***通用無限分類*/classtree{public$data=array();public$cateArray=array();functionTree(){} /***********輸入類節(jié)點****************/functionsetNode($id,$parent,$value){$parent=$parent?$parent:0;$this->data[$id]=$value;$this->cateArray[$id]=$parent;} /*************獲取空值的節(jié)點樹array()******************/functiongetChildsTree($id=0){$childs=array();foreach($this->cateArrayas$child=>$parent){if($parent==$id){$childs[$child]=$this->getChildsTree($child);}}return$childs;} /**************獲得所有分類id**************/functiongetChilds($id=0){$childArray=array();$childs=$this->getChild($id);foreach($childsas$child){$childArray[]=$child;$childArray=array_merge($childArray,$this->getChilds($child));}return$childArray;} /************獲得所有父類id***********************/functiongetChild($id){$childs=array();foreach($this->cateArrayas$child=>$parent){if($parent==$id){$childs[$child]=$child;}}return$childs;}/********單線獲取父節(jié)點id************/functiongetNodeLever($id){$parents=array();if(key_exists($this->cateArray[$id],$this->cateArray)){$parents[]=$this->cateArray[$id];$parents=array_merge($parents,$this->getNodeLever($this->cateArray[$id]));}return$parents;} /*************用'|-'長度來表示類的深度***************/functiongetLayer($id,$preStr=' |-'){returnstr_repeat($preStr,count($this->getNodeLever($id)));} /**********獲得類的名稱***********/functiongetValue($id){return$this->data[$id];}//endfunc}/***********************************************使用方法$Tree=newTree("請選擇分類");//setNode(目錄ID,上級ID,目錄名字);$Tree->setNode(1,0,'目錄1');$Tree->setNode(2,1,'目錄2,1');print_r($Tree->getChildsTree(0));print_r($Tree->getChild(0));print_r($Tree->getLayer(2));$category=$Tree->getChilds();//遍歷輸出foreach($categoryas$key=>$id){echo$id.$Tree->getLayer($id,'-').$Tree->getValue($id)."<br>";}*/?>Admin_news_class.php列出分類的代碼:/********分類*********/$db=newmypdo();$rs=$db->query("SELECT*FROM`np_newsclass`");$tree=newtree();$row=$rs->fetch();do{$tree->setNode($row['class_id'],$row['f_id'],$row['name']); }while($row=$rs->fetch());$category=$tree->getChilds();實現增刪改很不容易:/***********修改分類******************/if(isset($_GET['up'])){$rs_f=$db->prepare("SELECT*FROM`np_newsclass`WHERE`class_id`=?");$rs_f->execute(array($_GET['class_id']));$row_f=$rs_f->fetch();}if(isset($_POST['up2'])){ $find=$tree->getChilds($_POST['class_id']);//查找更新類的自身子類的id if(!in_array($_POST['f_id'],$find)){//如果更新類的id在自身子類的id里,則不能移動到自身分類 if($_POST['f_id']==$_POST['class_id']){//不能移動到自身類 show_msg("admin_news_class.php","更新失敗,你本身已經是".$_POST['name']."類","self"); }else{ $rs_up=$db->prepare("UPDATE`np_newsclass`SET`f_id`=?,`name`=?WHERE`class_id`=?"); $rs_up->execute(array($_POST['f_id'],$_POST['name'],$_POST['class_id'])); show_msg("admin_news_class.php","更新成功","self"); } }else{ show_msg("admin_news_class.php","更新失敗,不能移動到自身子類","self");} }/**********刪除分類***************/if(isset($_GET['del'])){ $rs_s=$db->prepare("SELECT*FROM`np_newsclass`WHERE`f_id`=?"); $rs_s->execute(array($_GET['del'])); $row_s=$rs_s->fetch();if(is_array($row_s)){ show_msg("admin_news_class.php","刪除失敗,該分類下還有子分類,請手動刪除!","self"); }else{ $rs_del=$db->prepare("DELETEFROM`np_newsclass`WHERE`class_id`=?"); $rs_del->execute(array($_GET['del'])); $rs_s_n=$db->query("selectnidfromnp_newsbasewhereclass_id=$_GET[del]"); $row_s_n=$rs_s_n->fetch(); if(is_array($row_s_n)){ /**********刪除分類的新聞**********/ $rs_d_news=$db->prepare("DELETEFROM`np_newsbase`WHERE`class_id`=?"); $rs_d_news->execute(array($_GET['del'])); do{//$nid有很多個,一個類可能有多條新聞,所以要批量刪除新聞$nid=$row_s_n['nid']; $rs_del_c=$db->prepare("DELETEFROM`np_newscontent`WHERE`nid`=$nid"); $rs_del_c->execute(); }while($row_s_n=$rs_s_n->fetch()); } show_msg("admin_news_class.php","刪除成功","self"); } }/************添加分類***************/if(isset($_POST['name'])){ if($_POST['name']==""){ show_msg("admin_news_class.php","添加失敗,分類名不能為空!","self"); }else{$rs_add=$db->prepare("INSERTINTO`newsphp`.`np_newsclass`(`class_id`,`f_id`,`name`)VALUES(NULL,?,?)");$rs_add->execute(array($_POST['f_id'],$_POST['name']));show_msg("admin_news_class.php","添加分類成功","self");}}?>4.9新聞列表的設計與實現Admin_list_news.php<?phpinclude_once("admin_global.php");/******用戶權限判斷******/$attr=user_check($_SESSION['uid'],$_SESSION['shell'],3);/************新聞列表*************/$db=newmypdo();$total=$db->count_row("np_newsbase");page($total,20);$rs=$db->query("SELECT*FROM`np_newsbase`,`np_newsclass`WHERE`np_newsbase`.`class_id`=`np_newsclass`.`class_id`ORDERBY`date_time`DESClimit$start_page,$page_size");$row=$rs->fetch(PDO::FETCH_ASSOC);/****************刪除新聞*****************/if(isset($_GET['del'])&&is_numeric($_GET['del'])){ $sql_base="DELETEFROM`np_newsbase`WHERE`np_newsbase`.`nid`=?"; $rs_del=$db->prepare($sql_base); $rs_del->execute(array($_GET['del'])); $rs_del_c=$db->prepare("DELETEFROM`np_newscontent`WHERE`np_newscontent`.`nid`=?"); $rs_del_c->execute(array($_GET['del'])); /**********刪除投票*********/ $nid=$_GET['del']; $rs_v=$db->prepare("SELECT`voteid`FROM`np_vote`WHERE`nid`=?"); $rs_v->execute(array($nid)); $row_v=$rs_v->fetch(); if(is_array($row_v)){ $rs_del_v=$db->prepare("DELETEFROM`np_vote`WHERE`np_vote`.`voteid`=?"); $rs_del_v->execute(array($row_v['voteid'])); } show_msg("admin_list_news.php","刪除新聞成功","self"); }/****************批量刪除新聞*********************/if(!empty($_POST['delall'])&&!empty($_POST['delbox'])){ $delall=$_POST['delbox']; foreach($delallas$v){ $rs_del_n=$db->prepare("DELETEFROM`np_newsbase`WHERE`np_newsbase`.`nid`=?"); $rs_del_n->execute(array($v)); $rs_del_con=$db->prepare("DELETEFROM`np_newscontent`WHERE`np_newscontent`.`nid`=?"); $rs_del_con->execute(array($v)); } show_msg("admin_list_news.php","批量刪除新聞成功","self"); /********批量刪除投票********//*$rs_del_v=$db->prepare("");*/ }?><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><title>無標題文檔</title><linkhref="style/css/admin_right.css"rel="stylesheet"type="text/css"/><scripttype="text/javascript"src="style/js/jquery-1.4.2.js"></script><scripttype="text/javascript"src="style/js/admin_list_news.js"></script></head><body><tablewidth="800px"border="1"><tr><tdclass="nav">后臺>>新聞管理>>新聞列表</td></tr></table><br/><formaction=""method="post"id="form1"><tablewidth="800"border="1"><tr><td>id</td><td>新聞標題</td><td>所在欄目</td><td>發(fā)布時間</td><td>改刪</td></tr><?phpdo{?><trclass="last"><tdalign="left"><?phpecho$row['nid'];?></td><tdalign="left"><inputtype="checkbox"name="delbox[]"id="delbox[]"value="<?phpecho$row['nid'];?>"/><?phpecho$row['title'];?></td><tdalign="left"><?phpecho$row['name']?></td><tdalign="left"><?phpechodate("Y-m-dH:i:s",$row['date_time']);?></td><td><ahref="admin_modify_news.php?up=<?phpecho$row['nid']?>&class_id=<?phpecho$row['class_id']?>">修改</a>/<ahref="admin_list_news.php?del=<?phpecho$row['nid']?>"onclick="returnconfirm('是否刪除新聞?')">刪除</a></td><?php}while($row=$rs->fetch(PDO::FETCH_ASSOC));?></tr><tr><tdcolspan="5"><inputname="selectall"type="button"id="selectall"value="全選"/><inputtype="button"name="selectrev"id="selectrev"value="反選"/><inputtype="button"name="selectno"id="selectno"value="全不選"/><inputtype="submit"name="delall"id="delall"value="批量刪除"onclick="returnconfirm('是否刪除新聞?如果所刪新聞有投票,投票也會被刪除')"/><?phpecho$pagenav?></td></tr></table></form></body></html>4.10新聞添加的設計與實現用到了fckeditor<?phpinclude_once("admin_global.php");/******用戶權限判斷******/@$attr=user_check($_SESSION['uid'],$_SESSION['shell'],3);/************編輯器導入***************/include("fckeditor/fckeditor.php");$eBasePath=$_SERVER['PHP_SELF'];$eBasePath=dirname($eBasePath)."/fckeditor/";$ed=newFCKeditor('content');$ed->BasePath=$eBasePath;$ed->Width="98%";$ed->Height="350px";/**********分類列表**************/$db=newmypdo();$tree=newtree();$rs=$db->query("SELECT*FROM`np_newsclass`");while($row=$rs->fetch()){ $tree->setNode($row['class_id'],$row['f_id'],$row['name']); }$category=$tree->getChilds();/************添加新聞****************/if(isset($_POST['submit'])){if(substr_count($_POST['content'],"<img")==0){@$ifreg==null;}else{@$ifreg=$_POST['ifreg'];};$rs_add=$db->prepare("INSERTINTO`np_newsbase`(`nid`,`class_id`,`title`,`author`,`source`,`date_time`,`hite`,`ifreg`)VALUES(NULL,?,?,?,?,?,0,?);");$rs_add->execute(array($_POST['class_id'],$_POST['title'],$_POST['author'],$_POST['source'],$_POST['date_time'],@$ifreg));$nid=$db->lastInsertId();$rs_add_c=$db->prepare("INSERTINTO`np_newscontent`(`nid`,`keyword`,`content`)VALUES(?,?,?)");$rs_add_c->execute(array($nid,$_POST['keyword'],$_POST['content']));/*******添加投票******/if(!empty($_POST['vote'])&&!empty($_POST['item'])){ $rs_up=$db->prepare("INSERTINTO`np_vote`(`voteid`,`nid`,`vote`,`note`,`stop_time`,`vote_type`)VALUES(NULL,?,?,?,?,?)"); $row_up=$rs_up->execute(array($nid,$_POST['vote'],$_POST['note'],strtotime($_POST['stoptime']),$_POST['vote_type'])); $lastinsertid=$db->lastInsertId(); foreach(array_filter($_POST['item'])as$v){//array_filter()函數用回調函數過濾數組中的元素這里是去除空值 $rs_up_item=$db->prepare("INSERTINTO`newsphp`.`np_item`(`id`,`voteid`,`item`,`hit`)VALUES(NULL,?,?,0)"); $rs_up_item->execute(array($lastinsertid,$v)); } }show_msg("admin_add_news.php","添加新聞成功","self");}?>4.11新聞詳細內容的設計與實現要逆向列出當前新聞的所有父類,不好做<?phpinclude_once("global.php");/******顯示詳細新聞********/@$nid=(int)$_GET['nid'];if(isset($_GET['nid'])){ $rs=$db->prepare("SELECT*FROM`np_newsbase`,`np_newscontent`WHERE`np_newsbase`.`nid`=`np_newscontent`.`nid`AND`np_newsbase`.`nid`=?"); $rs->execute(array($nid)); $row=$rs->fetch(PDO::FETCH_ASSOC); $rs_hit=$db->prepare("UPDATE`newsphp`.`np_newsbase`SET`hite`=1+hiteWHERE`np_newsbase`.`nid`=?"); if(@$_COOKIE["$nid"]!=$nid)//防刷新計數 $rs_hit->execute(array($nid)); setcookie($nid,$nid,time()+1800); } $class_id=$row['class_id'];$smarty->assign("nid",$row['nid']);$smarty->assign("author",$row['author']);$smarty->assign("source",$row['source']);$smarty->assign("date_time",date("Y-m-dH:i:s",$row['date_time']));$smarty->assign("keywords",$row['keyword']);$smarty->assign("hite",$row['hite']);$smarty->assign("class_id",$row['class_id']);$smarty->assign("title",$row['title']);$smarty->assign("websitename",$row['title']);$smarty->assign("content",$row['content']);/**************顯示投票*********************/$rs_v=$db->prepare("select*fromnp_votewherenid=?");$rs_v->execute(array($nid));$row_v=$rs_v->fetchA

溫馨提示

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

評論

0/150

提交評論