數(shù)據(jù)庫(kù)學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)報(bào)告.doc
《數(shù)據(jù)庫(kù)學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)報(bào)告.doc》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《數(shù)據(jù)庫(kù)學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)報(bào)告.doc(27頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
洛 陽(yáng) 理 工 學(xué) 院課 程 設(shè) 計(jì) 報(bào) 告 課程名稱(chēng) 數(shù)據(jù)庫(kù)課程設(shè)計(jì) 設(shè)計(jì)題目 學(xué)生成績(jī)查詢(xún)系統(tǒng) 專(zhuān) 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級(jí) B100506 學(xué) 號(hào) B10050634 姓 名 孫帥杰 完成日期 2013年1月6號(hào) 課 程 設(shè) 計(jì) 任 務(wù) 書(shū)設(shè)計(jì)題目: 學(xué)生成績(jī)管理系統(tǒng) 設(shè)計(jì)內(nèi)容與要求: 設(shè)計(jì)內(nèi)容:教務(wù)員可以輸入學(xué)生、教師、班級(jí)、課程信息,一個(gè)班級(jí)只屬于一個(gè)專(zhuān)業(yè),一個(gè)學(xué)生只屬于一個(gè)班級(jí)。教務(wù)員負(fù)責(zé)輸入每個(gè)專(zhuān)業(yè)、每個(gè)班級(jí)需要學(xué)習(xí)哪些課程,指定課程的任課教師。一個(gè)教師可以教授多個(gè)班的多門(mén)課程。教師可以查看學(xué)習(xí)該課程的學(xué)生名單。課程結(jié)束后,教師可以錄入課程成績(jī)。課程分兩類(lèi),必修課和選修課。學(xué)生可以選修課程,每學(xué)期幾門(mén)。學(xué)生可以查看自己各門(mén)課程的成績(jī)。學(xué)生還可以進(jìn)行評(píng)教,給老師打分。系統(tǒng)管理員可以輸入教室信息,并結(jié)合班級(jí)、課程、教室信息實(shí)現(xiàn)自動(dòng)排課。設(shè)計(jì)要求:要求完成需求分析,寫(xiě)出功能需求和數(shù)據(jù)需求描述;在需求分析的基礎(chǔ)上完成數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)、物理結(jié)構(gòu)設(shè)計(jì);用C#語(yǔ)言,完成管理系統(tǒng)的部分程序模塊的界面設(shè)計(jì)。 指導(dǎo)教師: 陶 榮 2012年12月28日課 程 設(shè) 計(jì) 評(píng) 語(yǔ) 成績(jī): 指導(dǎo)教師: 年 月 日 目 錄1.緒論11.1 設(shè)計(jì)目的11.2 開(kāi)發(fā)工具選擇11.3 開(kāi)發(fā)環(huán)境11.4 本報(bào)告的主要內(nèi)容12.需求分析12.1 系統(tǒng)需求簡(jiǎn)介13.總體設(shè)計(jì)23.1 設(shè)計(jì)概述23.2 系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分23.3 系統(tǒng)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)43.4 邏輯結(jié)構(gòu)設(shè)計(jì)74.主程序設(shè)計(jì)104.1 登錄系統(tǒng)104.2 學(xué)生信息查詢(xún)、保存、及修改124.3 用戶(hù)管理185.設(shè)計(jì)總結(jié)與心得體會(huì)226.參考文獻(xiàn)23 1.緒論1.1 設(shè)計(jì)目的本課程設(shè)計(jì)的目的是使學(xué)生能熟練掌握簡(jiǎn)單的簡(jiǎn)單Windows窗體應(yīng)用程序的設(shè)計(jì)和ADO.net的應(yīng)用,希望通過(guò)本次課程設(shè)計(jì)鍛煉學(xué)生使用C#語(yǔ)言解決實(shí)際問(wèn)題的能力。1.2 開(kāi)發(fā)工具選擇本系統(tǒng)后臺(tái)數(shù)據(jù)庫(kù)采用Microsoft SQL Server 數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)系統(tǒng)在安全性、準(zhǔn)確性和運(yùn)行速度方面有絕對(duì)的優(yōu)勢(shì),并且處理數(shù)據(jù)量大,效率高;前臺(tái)采用Microsoft 公司的Visual Studio 2010作為主要開(kāi)發(fā)工具,可與SQL Server 2008數(shù)據(jù)庫(kù)無(wú)縫鏈接。1.3 開(kāi)發(fā)環(huán)境系統(tǒng)開(kāi)發(fā)平臺(tái):Microsoft Visual Studio2010系統(tǒng)開(kāi)發(fā)語(yǔ)言:C#數(shù)據(jù)庫(kù)管理軟件:SQL Server 20081.4 本報(bào)告的主要內(nèi)容本報(bào)告詳細(xì)的介紹了學(xué)生成績(jī)管理系統(tǒng)的開(kāi)發(fā)過(guò)程,主要涉及到的工作如下:系統(tǒng)的需求分析、系統(tǒng)的總體設(shè)計(jì)、系統(tǒng)的概念設(shè)計(jì)、系統(tǒng)各模塊的詳細(xì)設(shè)計(jì)、系統(tǒng)運(yùn)行與測(cè)試。 2.需求分析2.1系統(tǒng)需求簡(jiǎn)介(1)系統(tǒng)目標(biāo)1.根據(jù)查詢(xún)條件實(shí)現(xiàn)學(xué)生信息的查詢(xún)2.學(xué)生選課信息查詢(xún)、成績(jī)信息的查詢(xún)3.學(xué)生信息、課程信息、成績(jī)信息的增加、刪除、修改4.對(duì)基本信息完成增加、刪除、修改時(shí),需注意表與表之間的關(guān)聯(lián)(2)功能需求分析本系統(tǒng)的功能需求分析如下:1.學(xué)生信息查詢(xún):學(xué)生可以根據(jù)學(xué)號(hào)、姓名、專(zhuān)業(yè)進(jìn)行查詢(xún).2.學(xué)生信息管理:主要是用于學(xué)生信息更新、插入、刪除;3.學(xué)生成績(jī)錄入:用于學(xué)生成績(jī)管理,錄入學(xué)生成績(jī),也可以更新;(3)性能需求分析1.登錄、用戶(hù)界面需求:簡(jiǎn)潔、易懂、易用、友好的用戶(hù)界面。2.安全保密性需求:只有憑借用戶(hù)名和密碼登陸系統(tǒng),才能進(jìn)行信息的管理等。 3.總體設(shè)計(jì)3.1設(shè)計(jì)概述根據(jù)需求把整個(gè)系統(tǒng)分化成不同的模塊,每個(gè)模塊完成一個(gè)特定的子功能。把這些模塊結(jié)合起來(lái)組成一個(gè)整體。逐一實(shí)現(xiàn)各個(gè)功能。3.2系統(tǒng)總體結(jié)構(gòu)及功能模塊劃分經(jīng)過(guò)對(duì)系統(tǒng)的需求分析,學(xué)生信息管理系統(tǒng)主要?jiǎng)澐譃槿齻€(gè)部分:學(xué)生信息查詢(xún),學(xué)生信息管理,學(xué)生成績(jī)錄入三個(gè)功能模塊。系統(tǒng)的總體結(jié)構(gòu)如圖3-1所示。學(xué)生成績(jī)錄入學(xué)生信息管理學(xué)生信息管理系統(tǒng)學(xué)生信息查詢(xún) 圖3-1 系統(tǒng)的總體結(jié)構(gòu)示意圖(1)學(xué)生信息查詢(xún)模塊學(xué)生信息查詢(xún)學(xué)號(hào)查詢(xún)姓名查詢(xún)學(xué)生信息查詢(xún):學(xué)生可以根據(jù)本人學(xué)號(hào)、姓名進(jìn)行信息查詢(xún)。學(xué)生信息查詢(xún)模塊結(jié)構(gòu)如圖3-2所示。 圖3-2 學(xué)生信息管理模塊結(jié)構(gòu)示意圖(2)學(xué)生信息管理模塊學(xué)生信息管理:主要是用于學(xué)生信息更新、插入、刪除。學(xué)生管理模塊結(jié)構(gòu)如圖3-3所示?;拘畔浫氤煽?jī)錄入基本信息更新成績(jī)更新學(xué)生信息刪除學(xué)生信息錄入學(xué)生信息管理學(xué)生信息更新圖3-3 學(xué)生信息管理模塊結(jié)構(gòu)示意圖3.3系統(tǒng)數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)根據(jù)對(duì)數(shù)據(jù)項(xiàng)與數(shù)據(jù)結(jié)構(gòu)的分析,設(shè)計(jì)出能夠滿(mǎn)足系統(tǒng)需求的各種實(shí)體,及它們之間的關(guān)系,為后面的邏輯結(jié)構(gòu)設(shè)計(jì)打下基礎(chǔ)。(1)系統(tǒng)E-R圖系統(tǒng)E-R圖可以將各個(gè)實(shí)體之間的關(guān)系顯示出來(lái),將各個(gè)實(shí)體間的屬性依賴(lài)表示明白。 教師與課程之間的關(guān)系:教師與課程之間是m: n的關(guān)系,即一個(gè)老師能教多門(mén)課程,一門(mén)課程可以由多個(gè)老師講授。 圖3-4教師與課程實(shí)體圖 學(xué)生與教師之間的關(guān)系:學(xué)生與教師之間是n:m的關(guān)系,即一名老師可以教授多個(gè)學(xué)生,而一個(gè)學(xué)生可以由多個(gè)教師來(lái)教。 圖3-5教師與學(xué)生的實(shí)體圖 學(xué)生與課程之間的關(guān)系:學(xué)生與課程之間是n:m的關(guān)系,即一個(gè)學(xué)生可以選修多門(mén)課程,一門(mén)課程可以被多個(gè)學(xué)生選學(xué)。 圖3-6學(xué)生與課程的實(shí)體圖 學(xué)生與成績(jī)之間的關(guān)系是n:m的關(guān)系: 圖3-7學(xué)生與成績(jī)的實(shí)體圖 管理員與用戶(hù)的關(guān)系: 圖3-8管理員與用戶(hù)的實(shí)體圖圖3-9學(xué)生成績(jī)管理全局E-R 圖3.4 邏輯結(jié)構(gòu)設(shè)計(jì)(1)將E-R圖轉(zhuǎn)化為關(guān)系模型為:管理員(用戶(hù)名,密碼)學(xué)生(學(xué)號(hào),姓名,性別,系名,專(zhuān)業(yè),出生日期)教師(教師號(hào),姓名,性別,院系,聯(lián)系電話(huà))課程(課程號(hào),課程名,學(xué)分,教師)成績(jī)(學(xué)號(hào),課程號(hào),姓名,課程名,成績(jī),授課老師)管理(教師號(hào),學(xué)號(hào),密碼)教授(教師號(hào),課程號(hào),課程名)選修(學(xué)號(hào),課程號(hào),成績(jī))講授(教師號(hào),課程號(hào)) (2)將以上數(shù)據(jù)關(guān)系模型進(jìn)行優(yōu)化處理得關(guān)系模型:學(xué)生信息(學(xué)號(hào),姓名,性別,系名,專(zhuān)業(yè),出生日期)教師信息(教師號(hào),姓名,性別,院系,聯(lián)系電話(huà))管理員信息(用戶(hù)名,密碼,用戶(hù)級(jí)別)課程表(課程號(hào),課程名,學(xué)分,教師)成績(jī)表(學(xué)號(hào)、課程號(hào)、成績(jī))(3)物理模型設(shè)計(jì) 學(xué)生信息表具體有學(xué)號(hào),姓名,性別,系名,專(zhuān)業(yè),出生日期,如表3-1所示 表3-1學(xué)生信息表字段類(lèi)型長(zhǎng)度約束索引學(xué)號(hào)字符型8主鍵約束有姓名字符型10性別字符型2系名字符型20專(zhuān)業(yè)數(shù)值型20出生日期字符型8 教師信息具體有教師號(hào),姓名,性別,院系,專(zhuān)業(yè),聯(lián)系電話(huà),如表3-2所示 表3-2教師信息表字段類(lèi)型長(zhǎng)度約束索引教師號(hào)字符型8主鍵約束有姓名字符型10性別字符型2院系字符型20專(zhuān)業(yè)數(shù)值型20聯(lián)系電話(huà)字符型11 管理員信息具體有用戶(hù)名、密碼、用戶(hù)級(jí)別,如表3-3所示字段類(lèi)型長(zhǎng)度備注用戶(hù)名字符型8學(xué)號(hào)、教師號(hào)密碼字符型6用戶(hù)級(jí)別字符型10一般操作員/系統(tǒng)管理員 表3-3管理員信息表 課程表信息具體有課程號(hào),課程名,學(xué)分,教師,如表3-4所示 表3-4課程表信息字段類(lèi)型長(zhǎng)度約束索引課程號(hào)字符型10主鍵約束有課程名字符型30學(xué)分字符型2教師字符型10 成績(jī)表具體有學(xué)號(hào),課程號(hào),成績(jī),如表3-5所示 表3-5成績(jī)表字段類(lèi)型長(zhǎng)度約束索引學(xué)號(hào)字符型8主鍵有課程號(hào)字符型10主鍵有成績(jī)數(shù)值型5 4.主程序設(shè)計(jì)4.1 登錄系統(tǒng)namespace CourseDesign public partial class LoginForm : Form #region 屬性 / / 是否登錄 / private bool _isLogin = false; public bool IsLogin get return _isLogin; set _isLogin = value; /用于記錄當(dāng)前登錄用戶(hù)名; private static string _currentUser; public static string CurrentUser get return _currentUser; /用于記錄當(dāng)前登錄用戶(hù)密碼; private static string _currentPsw; public static string CurrentPsw get return _currentPsw; #endregion public LoginForm() InitializeComponent(); this.labelInfo.Text = ; this.txtBoxUser.Text = admin; this.txtBoxPsw.Text = 0; /登錄 private void btnOK_Click(object sender, EventArgs e) if (txtBoxUser.Text.Trim() = ) this.labelInfo.Text = 請(qǐng)輸入您的用戶(hù)名!; else if (txtBoxPsw.Text.Trim() = ) this.labelInfo.Text = 請(qǐng)輸入您的密碼!; /MessageBox.Show(請(qǐng)輸入您的密碼, 錯(cuò)誤提示:, MessageBoxButtons.OK, MessageBoxIcon.Warning); else Command com = new Command(); string str = select * from UserInfo where userId = + txtBoxUser.Text.ToString() + ; DataTable table = com.GetDataSet(str); if (table.Rows.Count 0) _currentUser = txtBoxUser.Text; _currentPsw = txtBoxPsw.Text; IsLogin = true; this.Close(); else this.labelInfo.Text = 密碼錯(cuò)誤!; txtBoxPsw.Text = ; /取消 private void btnCencle_Click(object sender, EventArgs e) this.Close(); /重置 private void btnReset_Click(object sender, EventArgs e) txtBoxUser.Text = ; txtBoxPsw.Text = ; private void txtBoxUser_Click(object sender, EventArgs e) this.labelInfo.Text = ; private void txtBoxPsw_Click(object sender, EventArgs e) this.labelInfo.Text = ; 圖4-1用戶(hù)登錄界面4.2 學(xué)生信息查詢(xún)、保存、及修改namespace CourseDesign public partial class frmViewInfo : Form #region 屬性 private DBHelper.TypeOfOperationForBill _mOperTypeOfBill = DBHelper.TypeOfOperationForBill.nNull; public DBHelper.TypeOfOperationForBill OperTypeOfBill get return _mOperTypeOfBill; set _mOperTypeOfBill = value; / private bool _isNew = false; public bool IsNew get return _isNew; set _isNew = value; private bool _isModified = false; public bool IsModified get return _isModified; set _isModified = value; #endregion public frmViewInfo(DBHelper.TypeOfOperationForBill OperType) _mOperTypeOfBill = OperTypeOfBill; InitializeComponent(); SetFromText(); public virtual void SetFromText() if (OperTypeOfBill = TypeOfOperationForBill.nView) this.Text = 查看學(xué)生信息; else this.Text = 編輯學(xué)生信息; /添加 private void toolStripBtnAdd_Click(object sender, EventArgs e) /this.dataGridViewInfo.Rows.Add(); /_isNew = true; Command com = new Command(); string strClass = select classId from ClassInfo where className = + dataGridViewInfo.CurrentRow.Cellsclassid.Value.ToString() + ; string dtClass = com.GetScalar(strClass).ToString(); string strdept = select sdeptNo from Sdept where name = + dataGridViewInfo.CurrentRow.CellsSdept.Value.ToString() + ; string dtDept = com.GetScalar(strdept).ToString(); string str = select * from StudentInfo where stuNum = + dataGridViewInfo.CurrentRow.CellsstuNum.Value.ToString() + ; DataTable dtable = com.GetDataSet(str); if (dtable.Rows.Count 0) dataGridViewInfo.Rows.Clear(); SelectStudentInfo(); MessageBox.Show(數(shù)據(jù)添加成功!); else MessageBox.Show(信息填寫(xiě)不完整!請(qǐng)補(bǔ)充完整!); else MessageBox.Show(該學(xué)生已存在,請(qǐng)審核信息!); protected virtual void frmViewInfo_Load(object sender, EventArgs e) this.dataGridViewInfo.Rows.Clear(); this.dataGridViewInfo.Columns.Clear(); /this.dataGridViewInfo.EditMode = DataGridViewEditMode.EditOnEnter; DataGridViewColumn col = null; col = new DataGridViewTextBoxColumn(); col.Name = stuNum; col.HeaderText = 學(xué)號(hào); this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = name; col.HeaderText = 姓名; this.dataGridViewInfo.Columns.Add(col); DataGridViewComboBoxColumn col0 = new DataGridViewComboBoxColumn(); col0.FlatStyle = FlatStyle.Flat; col0.HeaderText = 性別; col0.Name = sex; col0.Items.Add(男); col0.Items.Add(女); this.dataGridViewInfo.Columns.Add(col0); col = new DataGridViewTextBoxColumn(); col.Name = birthday; col.HeaderText = 出生年月; this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = nation; col.HeaderText = 民族; this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = address; col.HeaderText = 籍貫; this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = phone; col.HeaderText = 聯(lián)系電話(huà); this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = classid; col.HeaderText = 班級(jí); this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = intoSchoolDate; col.HeaderText = 入學(xué)時(shí)間; this.dataGridViewInfo.Columns.Add(col); col = new DataGridViewTextBoxColumn(); col.Name = Sdept; col.HeaderText = 系別; this.dataGridViewInfo.Columns.Add(col); /刪除 private void toolStripBtnDelete_Click(object sender, EventArgs e) Command com = new Command(); if (dataGridViewInfostuNum, dataGridViewInfo.CurrentRow.Index.Value != null) string numRow = dataGridViewInfo.CurrentRow.CellsstuNum.Value.ToString(); string str = delete from StudentInfo where stuNum = + dataGridViewInfo.CurrentRow.CellsstuNum.Value.ToString() + ; if (MessageBox.Show(你確定刪除學(xué)號(hào)為: + numRow + 的學(xué)生么?, 提示, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK) string strScore = select * from ScoreInfo where stuNo = + dataGridViewInfo.CurrentRow.CellsstuNum.Value.ToString() + ; DataTable dt = com.GetDataSet(strScore); if (dt.Rows.Count 0) MessageBox.Show(請(qǐng)先刪除該學(xué)生的成績(jī)!); else if (com.ExecuteCommand(str) 0) /dataGridViewInfo.Rows.Clear(); /SelectStudentInfo(); dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow); MessageBox.Show(刪除成功!); else if (MessageBox.Show(該數(shù)據(jù)行為空,是否刪除該行?, 提示, MessageBoxButtons.OKCancel, MessageBoxIcon.Question) = DialogResult.OK) dataGridViewInfo.Rows.Remove(dataGridViewInfo.CurrentRow); MessageBox.Show(刪除成功!); / / 查詢(xún)學(xué)生信息 / public void SelectStudentInfo() Command com = new Command(); string str = select s.stuNum,s.name,s.sex ,s.birthday ,s.nation,s.address,s.phone,c.className,s.intoSchoolDate,sd.name from StudentInfo s,ClassInfo c,Sdept sd + where s.classid = c.classID and s.Sdept = sd.sdeptNo; DataTable dt = com.GetDataSet(str); for (int i = 0; i dt.Rows.Count; i+) dataGridViewInfo.Rows.Add(); for (int k = 0; k dt.Columns.Count; k+) dataGridViewInfo.Rowsi.Cellsk.Value = dt.Rowsik.ToString(); dataGridViewInfo.Rowsi.Tag = false; /保存 private void toolStripBtnSave_Click(object sender, EventArgs e) Command com = new Command(); for (int i = 0; i 0) dataGridViewInfo.Rows.Clear(); SelectStudentInfo(); MessageBox.Show(數(shù)據(jù)修改成功!); else MessageBox.Show(數(shù)據(jù)修改失敗!); 圖4-2查看學(xué)生信息 圖4-3學(xué)生信息顯示4.3 用戶(hù)管理namespace CourseDesign public partial class FormPassword : Form public FormPassword() InitializeComponent(); this.btnOk.Click += new System.EventHandler(this.btnOk_Click); protected void btnOk_Click(object sender, EventArgs e) if (txtBoxOldPsw.Text = null | txtBoxOldPsw.Text.Trim() = ) MessageBox.Show(請(qǐng)輸入舊密碼!。, 提醒, MessageBoxButtons.OK, MessageBoxIcon.Information); return; if (txtBoxNewPsw.Text = null | txtBoxNewPsw.Text.Trim() = | txtBoxEnterPsw.Text = null | txtBoxEnterPsw.Text.Trim() = ) MessageBox.Show(請(qǐng)輸入新密碼!。, 提醒, MessageBoxButtons.OK, MessageBoxIcon.Information); return; string currPwd = LoginForm.CurrentPsw; if (currPwd = txtBoxOldPsw.Text.Trim() if (isSame()- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)庫(kù) 學(xué)生 成績(jī)管理系統(tǒng) 課程設(shè)計(jì) 報(bào)告
鏈接地址:http://m.appdesigncorp.com/p-6492766.html