• 沒有找到結果。

個人管理子系統

在文檔中 ASP.NET實作網路虛擬社群 (頁 89-112)

3.5 各區說明

3.5.4 個人管理子系統

小說管理:可管理使用者所投稿的作品

圖 78 小說管理畫面

檔 名 novel_editor.aspx 使用資料表 NOVELTITLE

使 用 變 數

lblno.Text = Request.Cookies["id"].Value;抓取使用者編號的 COOKIE 程 式 流 程

1. 使用 lblno.Text 去 NOVELTITLE 讀取屬於該使用者的小說投稿

SelectCmd2 = "Select * From NOVELTITLE Where novel_ed_no = " + lblno.Text ; 並將 SQL 命命交給 DataGrid 顯示

2. 此網頁使用 DataGrid,顯示部分較簡單,但功能較多

(1) 〔編輯〕按鈕會導引到〔接續小說〕的網頁(詳見系統維護手冊 4.1.2) (2) 〔設定〕按鈕按下後可修改小說標題及簡介,此為 DataGrid 內建的功能

3. (3) 〔新增小說〕按鈕會導引到新增小說的頁面(詳見系統維護手冊 4.1.1) (4) 〔刪除小說〕按鈕會導引到刪除小說的頁面(詳見系統維護手冊 4.1.1)

修改小說:修改現有章回的內容

圖 79 修改小說畫面

檔 名 novel_update.aspx

使用資料表 NOVELDATA NOVELTITLE 使 用 變 數

lblno.Text = Request.Cookies["id"].Value;網址列變數,紀錄小說章回編號 lbltitle.Text = Request.Params["txtTitle_id"] ; 網址列變數,紀錄小說標題編號

程 式 流 程

1. 使用 lblno.Text 及 lbltitle.Text 索引出現在正要編輯的小說章回內容

SelectCmd2 = "select * from NOVELDATA Where novel_parent = " + lbltitle.Text + " and novel_data_chap = " + lblnum.Text ;

然後將資料顯示在 HTML 部分表單的 TXTBOX 中 txtName.Text = reader2["novel_data_name"].ToString() ; txtData.Text = reader2["novel_data"].ToString() ;

2. 在表單部分可直接修改內容及連載狀況(已完結 / 未完結),修改後按〔修改完成〕按鈕 則會呼叫 btnSend_Click 副程式

3. btnSend_Click 副程式:

(1) 更新 NOVELDATA 資料表中的內容

UpdateCmd = "UpDate NOVELDATA Set novel_data_name = '" + novel_data_name + "', novel_data = '" + novel_data + "' Where novel_parent = '" + lbltitle.Text + "' and

novel_data_chap = '" + lblnum.Text + "'";

(2) 更新 NOVELTITLE 資料表中的連載狀況

UpdateCmd = "Update NOVELTITLE Set novel_state = '" + state + "' Where novel_id = " + lbltitle.Text ;

(3) 顯示更新完成提醒,使用者也可以在此頁繼續修改

lblShow.Text = "<font size=2 color=ff0000>資料更新完成</font>" ; 4. 此頁面作的工作不複雜,主要是右方選單可讓使用者直接點選要修

改哪一章

(1) 從 NOVELDATA 資料表讀出小說章回編號及小說章回標題 selectcmd3 = "Select novel_data_chap,novel_data_name From NOVELDATA Where novel_parent = " + lbltitle.Text + " Order By novel_data_chap Asc";

(2) 依序將小說章回標題製作成超連結,並將目前這一章顯示為橘 色

上傳圖畫:分為傳資料及傳圖

"Select * From painter Where mem_no=" + lblno.Text;

有則將畫的數量+1,沒有則新增此筆資料 (2) 新增資料到 draw_data

InsertCmd = "Insert Into

draw_data(mem_no,mem_name,draw_title,draw_info,d

raw_type,draw_type_no,draw_no) Values(" + lblno.Text + ",'"+ lblname.Text +"','" +

picname.Text + "','" + describe_d + "','" + sel_type + "'," + sel_type_no + "," + getpiece + ")" ; 5. 資料增加完成,導引到 add_pic_2.aspx

Response.Redirect("add_pic_2.aspx?txtno=" + lblno.Text + "&txtpic=" + getpiece);

檔 名 add_pic_2.aspx 使用資料表 draw_data

使 用 變 數

lblno.Text = Request.Params["txtno"].ToString() ;網址列變數,紀錄會員編號 lblpic.Text = Request.Params["txtpic"].ToString() ;網址列變數,紀錄圖畫編號

程 式 流 程

1. 按下〔確定上傳〕按鈕之後,會開始傳圖。此部分呼叫 update_pic_Click 副程式 2. update_pic_Click 副程式:

(1) 使用 Get_File_Name 副程式更換原本的圖檔檔名 (2) 上傳大圖,將上傳的檔案儲存在伺服器端指定的資料夾下

txtFile.PostedFile.SaveAs(Server.MapPath(".") + "\\" + "images" + "\\" + filename) ; (3) 更新 draw_data 資料表中圖片路徑的欄位

UpdateCmd = "Update draw_data Set draw_path = '" + filename + "' Where mem_no = " + lblno.Text + " AND draw_no = " + lblpic.Text;

(4) 上傳縮圖,將上傳的檔案儲存在伺服器端指定的資料夾下

txtFile2.PostedFile.SaveAs(Server.MapPath(".") + "\\" + "images" + "\\" + filename) ; (5) 上傳完畢,顯示編輯區塊,如下圖,可以讓使用者再次確認剛剛的投稿

圖 81 確認上傳內容畫面

3. 〔修改要投稿的圖〕會呼叫 up_pic_Click_1 副程式,將剛才的傳大圖單再顯示

〔修改預覽用縮圖〕會呼叫 up_pic_Click_2 副程式,將剛才的傳縮圖單再顯示

〔確定完成〕會呼叫 ok_end 副程式,將投稿狀態設定為完成

UpdateCmd = "Update draw_data Set ok_flag = 1 Where mem_no=" + lblno.Text + " AND draw_no = " + lblpic.Text;

4. 回到圖畫管理頁面 Response.Redirect("draw_editor.aspx");

商店管理:使用者可在此管理自己的商品

SelectCmd = "Select mem_no,store_no From shop Where mem_no = " + lblno.Text ; 2. 有開過店就顯示商品管理清單

SelectCmd = "Select * From PRODUCTION Where store_no = " + lblstore_no.Text + " AND delete_flag != 2 ORDER BY pro_id desc";

3. 沒開過店則導引到開店申請(見系統維護手冊 4.3.1)

4. 〔刪除〕的功能會呼叫 DataList1_DeleteCommand 副程式,此副程式會將指定的商品單 獨顯示,並出現確認是否刪除的訊息

5. 〔確定〕按鈕會呼叫 btn_del 副程式 6. btn_del 副程式:

(1) 讀取商品價格及庫存數量

SelectCmd = "Select pro_prise,pro_count,delete_flag From PRODUCTION Where pro_id = "

+ lbltemp.Text;

(2) 計算回收的成本

return_money = "" + (int)reader["pro_prise"]*(int)reader["pro_count"]*0.3;

(3) 讀取使用者的存款

SelectCmd = "Select mem_money From MEMBER Where mem_no = " + lblno.Text ; (4) 將成本歸還給使用者

UpdateCmd = "Update MEMBER Set mem_money = " + mem_money + " Where mem_no =

" + lblno.Text ; (5) 從商品表刪除

if(delete_flag == 1)有人購買過就設定為不顯示,但物品資料保留

UpdateCmd = "Update PRODUCTION Set delete_flag = 2 Where pro_id = " + lbltemp.Text;

if(delete_flag == 0)若沒有人購買過則將物品刪除(因為有可能是傳錯的資料,預設為不保 留此資料)

DelCmd = "Delete From PRODUCTION Where pro_id = " + lbltemp.Text;

(6) 從購物車刪除此物品資料

DelCmd = "Delete From SHOPPING_CART Where pro_id = " + lbltemp.Text;

(7) 刪除完成,顯示成本回收量

lblerror.Text = "<br><br><font size=2 color=ff0000>刪除完成<br>您回收了" + return_money + "元,目前帝國幣存款為" + mem_money + "元<br><br><a href=store_editor.aspx>回商店管理</a></font>";

7. 〔補貨〕會將頁面導引到 store_item_add.aspx,見系統維護手冊 4.3.3〔補充商品〕

8. 〔修改圖片〕會將頁面導引到 store_edit_itempic.aspx,見系統維護手冊 4.3.4〔修改商品圖片〕

9. 〔商品狀態〕會呼叫 DataList1_EditCommand 副程式,出現狀態設定項 目

10. 〔確定〕按鈕會呼叫 btn_set 副程式 11. btn_set 副程式:

(1) 如果所選狀態不是〔無〕,則依照所選的項目更新商品狀態 if(radClass.SelectedItem.Text != "無")

UpdateCmd = "Update PRODUCTION Set item_set = '" + radClass.SelectedItem.Text + "' Where pro_id = " + lbltemp.Text;

如果選的是〔無〕則將原有的商品狀態清空

UpdateCmd = "Update PRODUCTION Set item_set = '' Where pro_id = " + lbltemp.Text;

12. 〔贈送商品〕會呼叫 DataList1_CancelCommand 副程式,出現贈送商品的功能選單

13. 〔確定〕按鈕會呼叫 btn_edit 副程式 14. btn_edit 副程式:

(1) 檢查對象姓名是否存在

SelectCmd = "Select mem_no From MEMBER Where mem_name = '" + txtName.Text + "'";

(2) 若存在,檢查物品是否可以送人

SelectCmd = "Select * From PRODUCTION Where pro_id = " + lbltemp.Text + " AND someone_puton_no = " + lblno.Text;

(3) 若可送人,新增一筆物品資料給收件者 InsertCmd = "Insert Into

MEM_ITEM(mem_no,pro_count,pro_id,total_use_times,gift_flag,buy_date,gift_say) Values("+ (int)reader["mem_no"] + ",1," + (int)reader2["pro_id"] + "," +

(int)reader2["pro_use_times"] + ",'不可',getdate(),'" + gift_say + "')" ; (4) 將庫存物品減去數量

UpdateCmd = "Update PRODUCTION Set pro_count = " + pro_count + ",delete_flag = 1 Where pro_id = " + lbltemp.Text + " AND someone_puton_no = " + lblno.Text;

(5) 贈送完成,導引回管理頁面 Response.Redirect("store_editor.aspx");

15. 此頁面功能有些多,是後來經使用者要求才追加的,例如贈送商品功能原本只有物品欄 才有。雖然功能多但並不複雜,只要注意物品的屬性欄位就可以了

上傳商品:設定商品資料

圖 83 上傳商品畫面

檔 名 store_item_new.aspx

使用資料表 PRODUCTION MEMBER shop 使 用 變 數

無網址列變數

程 式 流 程 1. 讀取使用者(店長)的商店編號及目前商品編號

SelectCmd = "Select store_no,product_num From shop Where mem_no = " + lblno.Text ;

SelectCmd = "Select mem_money From MEMBER Where mem_no = " + lblno.Text ;

(2) 必須確定存款多於必須支付的成本 if(mem_money > int.Parse(lbltotal.Text))

(3) 將商品〔基本資料〕存入 PRODUCTION 資料表 InsertCmd = "Insert Into

PRODUCTION(pro_no,pro_name,pro_synopsis,pro_prise,store_no,pro_count,realpro_path, someone_puton,someone_puton_no,pro_say) Values(" + lblpro_num.Text + ",'" +

txtpro_name.Text + "' , '" + txtpro_synopsis.Text + "' , '" + txtpro_prise.Text + "' , '" +

lblstore_no.Text + "' , '" + txtpro_count.Text + "' , '" + lblfile.Text + "','" + lblname.Text + "','"

+ lblno.Text + "','" + txtpro_say.Text + "')";

(4) 讀取各項設定值,將〔進階資料〕更新到 PRODUCTION 資料表

UpdateCmd = "Update PRODUCTION Set pro_limit_level = " + pro_limit_level +

",pro_limit_atri = " + pro_limit_atri + ", pro_limit_work = " + pro_limit_work +

",pro_use_kind = '" + pro_use_kind + "',pro_use_times = " + pro_use_times + ", pro_keep_kind = '" + pro_keep_kind + "',pro_keep_day = " + pro_keep_day + ", pro_limit_say = '" + pro_limit_say + "' Where store_no = " + lblstore_no.Text + " AND pro_no = " + lblpro_num.Text ;

註:會這麼做的原因之一是總共要存放的欄位有二十餘個,sql 指令太長會無法執行,原 因之二是不一定每項商品都會有進階的設定值

(5) 商品數量加一,最近上傳時間更新

UpdateCmd = "Update shop Set product_num = product_num + 1 ,new_item_date = getdate() Where store_no = " + lblstore_no.Text ;

(6) 店長支付成本

UpdateCmd = "Update MEMBER Set mem_money = " + mem_money + " Where mem_no =

" + lblno.Text ;

(7) 上傳完畢,顯示成功字樣及存款餘額

lblerror.Text = "<br><br><font size=2 color=ff0000>上傳完成^^。您支出了 " + lbltotal.Text + " 元,帝國幣存款剩餘 " + mem_money + " 元</font><br><br>";

4. (8) 詢問是否要上傳商品圖片(也可不傳),若要上傳則導引到 store_item_uppic.aspx,功 能同 4.3.4〔修改商品圖片〕

(9) 若店長存款不足,會顯示提醒訊息

lblShow2.Text = "存款不足,請回前一頁修改商品價錢及數量<br>" ;

5. 此頁功能理論不難,但商品屬性相當的多,故要小心對照。原本也是沒有這麼多屬性的,

是依照成員要求才加上,導致程式變得難寫很多

小說訂閱管理

圖 84 小說訂閱管理畫面 檔 名 mem_novel.aspx

使用資料表 MEM_NOVEL NOVELTITLE 使 用 變 數 無網址列變數

程 式 流 程 1. 從 MEM_NOVEL 資料表讀出訂閱資料

SelectCmd = "Select * From MEM_NOVEL,NOVELTITLE Where MEM_NOVEL.mem_no

= " + lblno.Text + " and MEM_NOVEL.novel_id = NOVELTITLE.novel_id";

2. 〔退定〕的功能會連結到 mem_novel_ed.aspx,詳見系統維護手冊 1.4〔小說訂閱〕

3. 此頁面顯示的部分較簡單,主要特點是只要作者有更新文章,就會在定閱的資料欄位紀 錄〔新〕的字樣,使用者在登入的狀況下閱讀過就會將〔新〕字銷去

個人資料:公告及個人設定

圖 85 個人資料畫面

檔 名 mem_wel.aspx 使用資料表

使 用 變 數 無網址列變數

程 式 流 程

1. 讀出會員資料,交給 Repeater 顯示

SelectCmd = "Select * From MEMBER,MEM_EXP Where mem_no = " + lblno.Text + "

AND MEMBER.mem_exp_level = MEM_EXP.mem_exp_level";

2. 檢查狀態設定(個人資料是否要在成員名單顯示) switch((int)reader["mem_express"])

3. 檢查資料設定是否通過審核

if((int)reader["mem_express"] == 2)若否,則讀取不通過原因,在 panel4 顯示 SelectCmd = "select * from MEM_LOCK Where mem_no = " + lblno.Text ; 4. 檢驗是否達升級標準

SelectCmd = "select * from MEM_EXP WHERE mem_exp_max <" + exp + " AND mem_exp_level > " + exp_set + " Order By mem_exp_level Desc";

5. 設定升級所需資訊,包括舊等級,以及可供選擇的新等級

SelectCmd = "select * from MEM_EXP WHERE mem_exp_max <" + exp + " AND mem_exp_level > " + lbllv.Text + " Order By mem_exp_level Desc";

圖 86 升級通知畫面

6. 判斷是否請假中

SelectCmd = "select * from MEM_LOG Where mem_no = " + lblno.Text;

若是,則顯示訊息

lblvoca.Text = "<center><font color=FF0000>您目前為請假狀態,請假期限至:" + reader["mem_voca_date"].ToString() + "</font></center>";

7. 〔確定升級〕的按鈕會呼叫 btn_update 副程式 8. btn_update 副程式:

(1) 更新等級

UpdateCmd = "UpDate MEMBER Set mem_exp_level = '" + level.SelectedItem.Value + "', mem_exp_set = '" + lbllvmax.Text + "' Where mem_no = " + lblno.Text ;

(2) 新等級人數加一

SelectCmd = "Select mem_level_num From MEM_EXP Where mem_exp_level = " + level.SelectedItem.Value ;

(3) 原等級人數減一

SelectCmd = "Select mem_level_num From MEM_EXP Where mem_exp_level = " + lbllv.Text ;

(4) 設定完成回到個人頁面

Response.Redirect("mem_wel.aspx");

9. 此頁功能多,程式碼也長,但不是很難

10. 個人設定的功能詳見系統維護手冊 4.5.1 ~ 4.5.5

物品欄:配合商店街購物所產生的物品欄

圖 87 物品欄畫面

檔 名 mem_item_list.aspx

使用資料表 MEM_ITEM PRODUCTION

使 用 變 數

lblpre.Text = Request.Params["txtPre"] ;網址列變數,用來紀錄頁數 程 式 流 程

1. 在登入時會計算物品數量以及收取租金,紀錄在 cookie,在此將 cookie 讀出並顯示 lblitem.Text = "*今日收取之租金為 " + Request.Cookies["item_money"].Value + " 元";

2. 處理物品過期的附註 (1) 讀出物品資料

SelectCmd = "Select item_id,pro_keep_day,buy_date,state_say From

MEM_ITEM,PRODUCTION Where mem_no = " + lblno.Text + " AND pro_keep_kind = '有' AND MEM_ITEM.pro_id = PRODUCTION.pro_id";

(2) 計算保存期限

EndDay = DateTime.Parse(reader["buy_date"].ToString());

Diff = Today - EndDay;

(3) 物品過期三天,必須刪除 if(Diff.TotalDays > ( (int)reader["pro_keep_day"] + 3) ) DelCmd = "Delete From MEM_ITEM Where item_id = " + (int)reader["item_id"] + " AND mem_no = " + lblno.Text;

(4) 物品已經過期的,設定附註提醒使用者

UpdateCmd = "Update MEM_ITEM Set state_say = '已超過保存期限,三天後自動刪除

',total_use_times = 0 ,gift_flag = '不可' Where item_id = " + (int)reader["item_id"] + " AND mem_no = " + lblno.Text;

3. 讀出物品資料,交給 DataList 顯示

SelectCmd = set_state();(使用換頁副程式,詳見系統維護手冊 7.1)

SelectCmd = set_state();(使用換頁副程式,詳見系統維護手冊 7.1)

在文檔中 ASP.NET實作網路虛擬社群 (頁 89-112)

相關文件