【正文】
:(1)按照新聞?lì)悇e分頁(yè)顯示新聞; (2)按照日期分頁(yè)顯示新聞。6.系統(tǒng)用戶管理功能:(1)系統(tǒng)用戶信息的錄入,包括用戶名和密碼等信息;(2)系統(tǒng)用戶信息的修改;(3)系統(tǒng)用戶信息的刪除。我們根據(jù)這些功能,設(shè)計(jì)出系統(tǒng)的功能模塊,如圖1所示。后臺(tái)系統(tǒng) 提供數(shù)據(jù)新聞?lì)悇e管理前臺(tái)系統(tǒng)數(shù)據(jù)庫(kù)基本信息發(fā)布新聞圖片發(fā)布新聞查詢管理發(fā)表網(wǎng)友評(píng)論圖2 新聞發(fā)布及管理系統(tǒng)的功能模塊關(guān)系圖在本系統(tǒng)中,用戶管理模塊的功能比較簡(jiǎn)單。Admin用戶可以創(chuàng)建用戶、修改和刪除用戶;普通用戶則只能修改自己的用戶名和密碼。系統(tǒng)用戶信息管理修改Admin用戶的密碼創(chuàng)建、修改、刪除普通用戶信息修改自身的Admin用戶普通用戶圖3 用戶管理功能模塊的關(guān)系圖第三節(jié) 系統(tǒng)流程分析為了使讀者進(jìn)一步了解本實(shí)例系統(tǒng)的設(shè)計(jì),本小節(jié)將對(duì)系統(tǒng)進(jìn)行流程分析。身份認(rèn)證可以分為以下兩個(gè)過(guò)程:(1)確認(rèn)用戶是否是有效的系統(tǒng)用戶。第1個(gè)過(guò)程決定用戶能否進(jìn)入系統(tǒng)。本系統(tǒng)分為前臺(tái)系統(tǒng)和后臺(tái)系統(tǒng)兩個(gè)部分。后臺(tái)系統(tǒng)的流程分析如圖4所示。開(kāi)始用戶登錄失敗重試管理所有用戶的信息管理新聞?lì)悇e,發(fā)布信息,所有新聞信息的管理管理自己的信息新聞發(fā)布,自己發(fā)布的新聞的管理Admin普通用戶圖4 后臺(tái)系統(tǒng)的流程分析第三章 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)這一章將介紹系統(tǒng)的數(shù)據(jù)庫(kù)表結(jié)構(gòu)和創(chuàng)建表的腳本。創(chuàng)建數(shù)據(jù)庫(kù)的腳本代碼如下:CREATE DATABASE newsGO可以在SQL查詢分析器中執(zhí)行該語(yǔ)句,創(chuàng)建數(shù)據(jù)庫(kù)。下面分別介紹這些表的結(jié)構(gòu)。表1表Category的結(jié)構(gòu)編號(hào)字段名稱數(shù)據(jù)結(jié)構(gòu)說(shuō)明1CateIdint新聞?lì)悇e編號(hào)2CateNamevarchar (50)新聞?lì)悇e名稱所謂標(biāo)識(shí)列,就是可以惟一標(biāo)識(shí)一行記錄的列,在表中不會(huì)存在兩條標(biāo)識(shí)列相同的記錄。有的程序設(shè)計(jì)人員習(xí)慣于直接使用名稱字段作為標(biāo)識(shí)列,例如表Category中的CateName字段。在系統(tǒng)中,CateId字段對(duì)于用戶來(lái)說(shuō)是透明的,用戶感覺(jué)不到它的存在,也無(wú)法對(duì)其進(jìn)行修改。表2表News的結(jié)構(gòu)編號(hào) 新聞編號(hào)2Titlevarchar(100)Contenttext新聞內(nèi)容4提交時(shí)間5Postervarchar(50)提交人6CateIdint新聞?lì)悇e編號(hào)7Attpicbit是否有圖片標(biāo)記(0沒(méi)有;1有)8Readcountint閱讀次數(shù)在SQL2000中,可以使用char、varchar和text等3種數(shù)據(jù)類型存儲(chǔ)非Unicode字符數(shù)據(jù)。如果需要存儲(chǔ)的數(shù)據(jù)很大,則可以使用text數(shù)據(jù)類型,例如表News中的Content字符,因?yàn)樾侣剝?nèi)容的數(shù)據(jù)量通常會(huì)超過(guò)8000個(gè)字符。3.網(wǎng)友評(píng)論信息表Discuss網(wǎng)友評(píng)論信息表Discuss用來(lái)保存網(wǎng)友對(duì)新聞的評(píng)論信息,結(jié)構(gòu)如表3所示。idvarchar(20)評(píng)論人名稱3Posttimesinaildatetime提交時(shí)間4NewsldServerdatetime數(shù)據(jù)類型用于存儲(chǔ)從1753年1月1日到9999年12月31日的日期和時(shí)間數(shù)據(jù),精確到3.33ms;smalldatetime數(shù)據(jù)類型用于存儲(chǔ)從1900年1月1日到2079年6月6日的日期和時(shí)間數(shù)據(jù),精確到分鐘。4..用戶信息表Users用戶信息表Users用來(lái)保存用戶的基本信息,結(jié)構(gòu)如表8.4所示。UserIdUserNameUserPwdEnameEmail1.創(chuàng)建表Category,它的代碼如下:USE newsGOCREATE TABLE Category( CateId Int IDENTITY PRIMARY KEY, CateName Varchar(50) NOT NULL)GO在使用CREATE TABLE指令創(chuàng)建表時(shí),應(yīng)該注意使用PRIMARY KEY關(guān)鍵字定義表的主鍵。2.創(chuàng)建表News,它的代碼如下:USE newsGOCREATE TABLE News( Id Int IDENTITY PRIMARY KEY, Title Varchar(100) NOT NULL, Content Text, PostTime Datetime, Poster Varchar(50), CateId Int, Attpic Int DEFAULT 0, ReadCount Int DEFAULT 0)GO在使用CREATE TABLE指令創(chuàng)建表時(shí),應(yīng)該注意使用NOT NULL關(guān)鍵字定義表的未空字段。例如,表News中的Title字段將不能為空,否則在新聞列表中將出現(xiàn)一個(gè)空行。3.創(chuàng)建表Discuss,它的代碼如下:USE newsGOCREATE TABLE Discuss ( Id Int IDENTITY PRIMARY KEY, UserId Varchar(20), Posttime Smalldatetime, Content Varchar(4000), NewsId Int )GO在使用CREATE TABLE指令創(chuàng)建表時(shí),通??梢允褂肐DENTITY關(guān)鍵字與PRIMARY KEY關(guān)鍵字相結(jié)合,創(chuàng)建標(biāo)識(shí)字段。程序員在編寫程序的過(guò)程申,無(wú)需考慮標(biāo)識(shí)字段的值。Admin39。11111139。39。39。在執(zhí)行這些腳本之前,請(qǐng)確定數(shù)據(jù)庫(kù)news已經(jīng)存在,否則會(huì)產(chǎn)生錯(cuò)誤。第四章 目錄結(jié)構(gòu)與通用模塊第一節(jié) 目錄結(jié)構(gòu) 在運(yùn)行實(shí)例時(shí),需要將web目錄復(fù)制到IIS/PWS的根目錄下,例如目錄下包含下面兩個(gè)子目錄:images用于存儲(chǔ)上傳的新聞圖片;pic用于存儲(chǔ)網(wǎng)頁(yè)中的圖片文件;其他ASP和HTM文件都保存在web目錄下。1.,因?yàn)樵诤芏嗑W(wǎng)頁(yè)中都有連接數(shù)據(jù)庫(kù)的操作,這樣可以避免重復(fù)編程。server=(local)。PWD=yourpassword。如果不是,則中斷執(zhí)行;如果是,則不執(zhí)行任何操作,直接進(jìn)入包含它的網(wǎng)頁(yè)。所以在修改和刪除新聞時(shí),需要判斷當(dāng)前用戶是否是Admin或指定新聞的作者。根據(jù)新聞編號(hào)讀取新聞信息 set rsNews = () sql = SELECT * FROM News WHERE Id= amp。判斷用戶權(quán)限,是否可以維護(hù)新聞,管理員可以編輯所有新聞,編輯者只能修改自己的新聞 If rsNews(Poster) Session(UserName) Then 不是Admin或新聞的作者,無(wú)權(quán)修改! End If End If End If%如果當(dāng)前用戶是Admin,;否則,程序?qū)⒏鶕?jù)參數(shù)Id讀取新聞信息,并將Poster字段的值與當(dāng)前用戶名進(jìn)行比較。例如,選中正文abc,然后選擇“楷體”、“1號(hào)字”,將生成如下代碼:font[space]face=楷體_GB2312font[space]size=1abc/font/font [space]是自定義的符號(hào),因?yàn)榭崭裨谵D(zhuǎn)換成HTML格式時(shí),將被替換為“amp。在顯示新聞內(nèi)容時(shí),程序?qū)?huì)自動(dòng)將[space]轉(zhuǎn)換為空格。相關(guān)代碼如下:字體amp。SELECT onChange=var c=[].value。39。font[space]face=39。39。/font39。font[space]face=39。39。/font39。FONTSIZE: 9pt39。當(dāng)下拉菜單的選擇發(fā)生變化時(shí),將觸發(fā)onChange事件,程序中直接定義了對(duì)應(yīng)的JavaScript代碼。,如果它不為空,則將其替換為如下代碼:().text=39。+c+39。+().text+39。也就是在它的兩側(cè)添加字體標(biāo)識(shí)font和/font。font[space]face=39。39。/font在添加和修改新聞內(nèi)容的網(wǎng)頁(yè)中,必須將表單定義為myform,輸入新聞內(nèi)容的滾動(dòng)文本框定義為txtcontent,否則此功能將無(wú)法實(shí)現(xiàn)。錄入新聞?lì)悇e和新聞內(nèi)容后。 1.顯示新聞?lì)悇e鏈接 ,每個(gè)新聞?lì)悇e只顯示最新的10條新聞。為了解決這個(gè)問(wèn)題,本實(shí)例使用書(shū)簽來(lái)定義新聞?lì)悇e的位置,書(shū)簽格式為a類別編號(hào)。下面的代碼將在網(wǎng)頁(yè)中生成所有新聞?lì)悇e的鏈接,每個(gè)鏈接都指相應(yīng)新聞?lì)悇e的書(shū)簽。% 39。按順序讀取所有新聞?lì)悇e,保存在記錄集rsCate中 sql = SELECT * FROM Category ORDER BY CateId Set rsCate = (sql) 39。每個(gè)新聞?lì)悇e標(biāo)題被定義為一個(gè)書(shū)簽,名為 a類別編號(hào)% a href=a%=cid%font style=39。color:black39。書(shū)簽是網(wǎng)頁(yè)中被標(biāo)記的位置或被標(biāo)記的選中文本。在本例中,因?yàn)闀?shū)簽位置是動(dòng)態(tài)變化的,所以需要使用代碼定義,方法如下:a name=書(shū)簽名/a 2.“新聞管理”鏈接系統(tǒng)管理員Admin或其他用戶可以通過(guò)“新聞管理”a href=font color=red style=39。新聞管理/font/a 3.顯示各新聞?lì)悇e中的最新新聞 ,并將3天內(nèi)的新聞使用new圖片標(biāo)記。這部分代碼如下:% 39。按順序讀取所有新聞?lì)悇e,保存在記錄集rsCate中 sql = SELECT * FROM Category ORDER BY CateId Set rsCate = (sql) 39。每個(gè)新聞?lì)悇e標(biāo)題被定義為一個(gè)書(shū)簽,名為 a類別編號(hào)% a href=a%=cid%font style=39。color:black39。39。nbsp。TEXTDECORATION: none39。將指針移至開(kāi)始位置,分別顯示每個(gè)分類中的新聞 If = False Then End If 39。變量t用來(lái)記錄 t = 0 39。100%39。顯示新聞?lì)悇e,并設(shè)置書(shū)簽 td bgcolor=ceceffa name=aamp。/aamp。==amp。 39。nbsp。生成另一個(gè)表格,用于顯示新聞標(biāo)題 table width=39。 border=0 cellspacing=0 cellpadding=0 39。 cid amp。計(jì)數(shù) t = t + 1 39。顯示新聞標(biāo)題及鏈接, trtd width=39。a onClick=39。39。?id= + cstr(rs(id)) + 39。如果新聞中有圖片,則在標(biāo)題中顯示(附圖) If rs(Attpic) Then (附圖) End If /a 39。pic/39。最新的新聞!39。顯示新聞提交的時(shí)間 td width=39。( + CStr(rs(Posttime)) + )/td/tr End If Loop /table 39。nbsp。nbsp。nbsp。生成“更多新聞”鏈接, a target=39。 href=39。更多新聞.../a/p /td/tr/table/td/table loop % 因?yàn)樵诘趌步中已經(jīng)將各新聞?lì)悇e的標(biāo)題讀取到記錄集rsCate中。請(qǐng)參照注釋理解。對(duì)于需要登陸才能察看的網(wǎng)頁(yè)可以在網(wǎng)頁(yè)的最前端加上如下代碼:!include file=””這樣為登陸的用戶將看到如下界面:第三節(jié) 設(shè)計(jì)管理界面 管理界面的功能是對(duì)新聞?lì)悇e和新聞提供管理界面,只有有權(quán)限的用戶才能進(jìn)入管理界面。 。!include file=!include file= (2)顯示新聞?lì)悇e鏈接,每個(gè)新聞?lì)悇e只顯示最新的20條新聞。定義變量 Dim iflag,sql_where 39。設(shè)置SQL語(yǔ)句, sql = SELECT * FROM Category ORDER BY CateId Set rsCate = (sql) 39。?flag=%=cid%39。TEXTDECORATION: none。%=stitle%/font/a % Loop%,參數(shù)flag表示新聞?lì)悇e。(3)顯示管理鏈接,將根據(jù)用戶類型顯示管理鏈接,包括“更改密碼”、“類別管理”、“用戶管理”