一、系統功能設計和數據庫設計
1、系統功能設計和數據庫設計
1.1 系統功能設計
網絡在線投票系統實現的功能比較簡單,具體如下:
◎投票項目的管理;
◎添加投票的項目;
◎刪除投票的項目;
◎對項目進行投票;
◎查看項目的投票情況。
1.2 數據庫設計
本系統的數據庫設計比較簡單,只需要存儲投票的信息即可。在SQL Server 2000中創建一個數據庫,名稱為“WebVoteDB”,並在該數據庫中創建投票項目表Votes。其中“VoteID”字段存儲投票項目ID;“Item”字段存儲投票項目的名稱;“VoteCount”字段存儲每個項目的票數。創建投票項目表Votes的操作界面如圖1所示。
投票項目表Votes需要存儲投票項目名稱及其票數,表的字段說明如表1所示。
圖1 創建投票項目表Votes的操作界面
表1 Votes表
字 段 名
數 據 類 型
字 段 說 明
鍵 引 用
備 注
TreeID
int
投票項目ID
PK
主鍵(自動增一)
Item
varchar(200)
投票項目的名稱
VoteCount
int
票數
在線投票功能是網站應用程序最常用的功能之一,也是網站應用程序開發常用的功能模塊。當網站的管理員或用戶提出一些新的想法與建議或者出現一種新產品時,他們可能需要通過用戶或者客戶的投票方式來確定這些新的想法、建議或者新的產品是否滿足用戶或者客戶的需求,另外,網站還可以通過網站在線投票功能做一些實際性的調查工作。本章介紹的網絡在線投票系統還以直觀的圖形化界面顯示投票信息,而且還可以及時查看投票的情況。
二、投票系統實現
創建好系統所需要的數據庫之後,網絡在線投票系統的具體實現可以分為下面3個部分:
(1)存儲過程的實現部分;
(2)數據庫訪問層的實現部分;
(3)功能頁面的實現部分。
下面將詳細介紹上述3個部分的具體實現方法。首先在Microsoft Visual Studio .NET 2005中創建一個Web站點,名稱為“WebVote”。
2.1 存儲過程設計
在數據庫WebVoteDB中創建存儲過程PR_GetVotes、Pr_GetSingleVote、Pr_AddVote、Pr_UpdateVote和Pr_DeleteVote。其中:
Pr_GetVotes 從投票項目表Votes中獲取所有投票項目的信息;
Pr_GetSingleVote 從投票項目表Votes中獲取某一條投票項目的信息;
Pr_AddVote 添加一條新記錄到投票項目表Votes中;
Pr_UpdateVote 更新參與投票項目的票數;
Pr_DeleteVote 從投票項目表Votes中獲取刪除一條投票項目信息。
以上各存儲過程的程序代碼如下:
/* 存儲過程Pr_GetVotes */
CREATE PROCEDURE Pr_GetVotes
AS
SELECT * FROM Votes ORDER BY VoteID
/* 存儲過程Pr_GetSingleVote */
CREATE PROCEDURE Pr_GetSingleVote
(@VoteID int)
AS
SELECT Votes.* FROM Votes WHERE VoteID = @VoteID
/* 存儲過程Pr_AddVote */
CREATE PROCEDURE Pr_AddVote(@Item varchar(100))
AS
INSERT INTO Votes(Item,ItemCount) VALUES(@Item,0) RETURN @@Identity
/* 存儲過程Pr_UpdateVote */
CREATE PROCEDURE Pr_UpdateVote (@VoteID int)
AS
UPDATE Votes SET VoteCount = VoteCount + 1
WHERE VoteID = @VoteID
/* 存儲過程Pr_DeleteVote */
CREATE PROCEDURE Pr_DeleteVote (@VoteID int)
AS
DELETE Votes
WHERE VoteID = @VoteID
2.2 數據庫訪問層設計
在應用程序WebVote中添加訪問投票表Votes的類Vote,該類封裝對投票項目表Votes中記錄的選擇、添加、修改和刪除的方法。其中:
方法GetVotes() 從投票項目表Votes中獲取所有投票項目的信息;
方法AddVote(String sItem) 添加一條新記錄到投票項目表Votes中;
方法UpdateVote(int nVoteID) 更新參與投票項目的票數;
方法DeleteVote(int nVoteID) 從投票項目表Votes中獲取刪除一條投票項目信息。
類Vote的程序設計代碼如下:
public class Vote
{
public SqlDataReader GetVotes()
{
//定義類SQLHelper
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
//定義保存從數據庫獲取的結果的DataReader
SqlDataReader dr = null;
try
{ //執行存儲過程
sqlHelper.RunProc("Pr_GetVotes", out dr);
}
catch (Exception ex)
{ //拋出執行數據庫異常
SystemError.CreateErrorLog(ex.Message);
throw new Exception(ex.Message, ex);
}
//返回從數據庫獲取的結果
return (dr);
}
public int AddVote(String sItem)
{ //定義類SQLHelper
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
//創建訪問數據庫的參數
SqlParameter[] paramList = {
sqlHelper.CreateInParam("@Item", SqlDbType.VarChar,100,sItem)
};
try
{ //執行存儲過程
return (sqlHelper.RunProc("Pr_AddVote", paramList));
}
catch (Exception ex)
{ //拋出執行數據庫異常
SystemError.CreateErrorLog(ex.Message);
throw new Exception(ex.Message, ex);
}
}
public void UpdateVote(int nVoteID)
{ //定義類SQLHelper
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
//創建訪問數據庫的參數
SqlParameter[] paramList = {sqlHelper.CreateInParam("@VoteID", SqlDbType.Int, 4,nVoteID)};
try
{ //執行存儲過程
sqlHelper.RunProc("Pr_UpdateVote", paramList);
}
catch (Exception ex)
{ //拋出執行數據庫異常
SystemError.CreateErrorLog(ex.Message);
throw new Exception(ex.Message, ex);
}
}
public void DeleteVote(int nVoteID)
{ //定義類SQLHelper
SQLHelper.SQLHelper sqlHelper = new SQLHelper.SQLHelper();
//創建訪問數據庫的參數
SqlParameter[] paramList = {
sqlHelper.CreateInParam("@VoteID", SqlDbType.Int, 4,nVoteID)
};
try
{ //執行存儲過程
sqlHelper.RunProc("Pr_DeleteVote", paramList);
}
catch (Exception ex)
{ //拋出執行數據庫異常
SystemError.CreateErrorLog(ex.Message);
throw new Exception(ex.Me