【正文】
,不能對(duì)使用者的行程進(jìn)行很好的規(guī)劃和安排。該軟件的優(yōu)點(diǎn)如下: 1,將日歷和記事本集成到一款軟件上,讓用戶(hù)在記錄和查詢(xún)?nèi)罩镜臅r(shí)候也能方便得查閱日期情況。 本文介紹了 C/S 模式下的桌面日歷系統(tǒng)的設(shè)計(jì)以及開(kāi)發(fā)過(guò)程,主要 包括了以下幾個(gè)方面的內(nèi)容: 1,簡(jiǎn)要介紹 C和 SQL 知識(shí)。 計(jì)算機(jī)的發(fā)明應(yīng)用,被視為人類(lèi)的第三次重大的科學(xué)技術(shù)革命,是一次飛躍。 2 相關(guān)理論基礎(chǔ) 該系統(tǒng)采用的是 C/S 模式,設(shè)計(jì)平臺(tái)為 Visual Studio 2021 C,后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)為 SQL Server 2021。 但 C/S 模式也有一些缺點(diǎn),比如:客戶(hù)端需要安裝專(zhuān)門(mén)的客戶(hù)端軟件;維護(hù)和升級(jí)的成本很高;對(duì)客戶(hù)端的操作系統(tǒng)也有一定的限制。對(duì)于 C/C++用戶(hù)來(lái)說(shuō),最理想的解決方案無(wú)疑是在快速開(kāi)發(fā)的同時(shí)又可以調(diào)用底層平臺(tái)的所有功能。因?yàn)檫@種繼承關(guān)系, C與 C/C++具有極大的相似性,熟悉類(lèi)似語(yǔ)言的開(kāi)發(fā)者可以很快的轉(zhuǎn)向 C。 微軟稱(chēng) C是由 C 和 C++派生而來(lái) 的 一種 “簡(jiǎn)單、流行、面向?qū)ο?、?lèi)型安全 ”的 程序設(shè)計(jì)語(yǔ)言 , C意在綜合 Visual Basic 的 高效率和 C++的 強(qiáng)大功能。 C的弱點(diǎn) 首先,在大量的現(xiàn)有 Windows 平臺(tái)上, C 的程序還不能運(yùn)行,因?yàn)?C 程序需要 .NET運(yùn)行庫(kù)為基礎(chǔ),而 .NET運(yùn)行庫(kù)將作為新一代的 Windows( Whistler)的一 部分發(fā)行, 或以 Service Pack 的形式提交給 Windows Me 和 Windows 2021用戶(hù)。而 C 的鼓吹者目前只有名聲不佳的微軟,且只能運(yùn)行在 Windows 上。 SQL 通常使用于數(shù)據(jù)庫(kù)的通訊。使用 SQL 的常見(jiàn)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)有: Oracle、 Sybase、 Microsoft SQL Server、 Access、 Ingress 等等。 SQL Server 能 與 Microsoft 其他組件有機(jī) 地 結(jié)合,并充分利用它們提供的服務(wù)或功能 (如安全管理、事件日志、性能監(jiān)視器、內(nèi)存管理和異步 處理 等 ),從而增強(qiáng)了 SQL Server 數(shù)據(jù)庫(kù)系統(tǒng)的功能,同時(shí)占用較少的系統(tǒng)資源。 3 系統(tǒng)需求分析 用戶(hù)需求 該系統(tǒng)的用戶(hù)主要分為三種:未 登錄 用戶(hù)、 登錄 用戶(hù)、管理員。用戶(hù)當(dāng)點(diǎn)擊 “ 日志記錄 ” 或 “ 節(jié)日設(shè)置 ” 的時(shí)候,系統(tǒng)提示對(duì)話(huà)框顯示 “ 該用戶(hù)為未 登錄 用戶(hù) ” ,點(diǎn)擊確定按鈕后進(jìn)入 登錄 界面,輸入賬號(hào)和密碼后實(shí)現(xiàn)用戶(hù) 登錄 。 登錄 用戶(hù)可以在日歷主界面上點(diǎn)擊 “ 用戶(hù)信息 ” 進(jìn)入用戶(hù)注冊(cè)和信息界面,在用戶(hù)注冊(cè)界面可以實(shí)現(xiàn)注冊(cè)其他用戶(hù),可以查看其他已注冊(cè)用戶(hù)的基本信息,可以修改當(dāng)前 登錄 用戶(hù)的基本信息和密碼,可以對(duì)某用戶(hù)名進(jìn)行查找,但是不能刪除其他用戶(hù)或修改其他用戶(hù)的個(gè)人信息。 可以對(duì)數(shù)據(jù)庫(kù)進(jìn)行直接操作,可以查看其他用戶(hù)的資料等等。 因?yàn)樵撓到y(tǒng)為多用戶(hù)系統(tǒng),所有用戶(hù)資料均保存在數(shù)據(jù)庫(kù)內(nèi) ,所以要求數(shù)據(jù)庫(kù)安全性要高,運(yùn)行要穩(wěn)定,執(zhí)行速度快??蛻?hù)端程序由 Visual Studio 2021 C制作,用于與用戶(hù)交互;后臺(tái)數(shù)據(jù)庫(kù)使用 SQL 2021,由帶有邏輯結(jié)構(gòu)關(guān)聯(lián)的表組構(gòu)成。 該表分為 3 個(gè)字段,以 UserNumber 字段為主鍵分別與 UserInfo和 MsgInfo 表相關(guān)聯(lián) ,各字段的屬性和作用 如表 41 登錄 用戶(hù) 普通用戶(hù) 管理員 刪除用戶(hù)資料 修改用戶(hù)信息 注冊(cè)新用戶(hù) 使用日志記錄 使用節(jié)假日模塊 使用日志提醒 使用日歷主模塊 未 登錄 用戶(hù) 表 41:用戶(hù) 登錄 表 UserInfo—— 用戶(hù)基本信息表用于存儲(chǔ)用戶(hù)的基本信息,如年齡、 性別等。 字段名 字段類(lèi)型 是否主鍵 說(shuō)明 UserName varchar 否 定義用戶(hù)登錄 名 UserPwd varchar 否 定義用戶(hù) 登錄 密碼 UserNumber int 是 定義唯一標(biāo)識(shí)的用戶(hù)編號(hào) 字段名 字段類(lèi)型 是否主鍵 說(shuō)明 UserNumber int 是 唯一標(biāo)識(shí)的用戶(hù)編號(hào) UserAge int 否 定義用戶(hù)的年齡 UserSex int 否 定義用戶(hù)性別, 1 為男, 2 為女 UserAddress varchar 否 定義用戶(hù)的地址,允許為空 UserTel varchar 否 定義用戶(hù)的電話(huà)號(hào)碼,允許為空 UserEmail varchar 否 定義用戶(hù)的 EMail 地址,允許為空 字段名 字段類(lèi)型 是否主鍵 說(shuō)明 MsgID int 是 唯一標(biāo)識(shí)的用戶(hù)日志信息編號(hào) MsgInfoText varchar 否 定義用戶(hù)的日志信息內(nèi)容 MsgDateTime datatime 否 定義用戶(hù)的日志提醒時(shí)間 UserNumber int 是 唯一標(biāo)識(shí)的用戶(hù)編號(hào) UserLogin(用戶(hù) 登錄 表 )、 UserInfo(用戶(hù)基本信息表 )和 MsgInfo(日志信息表 )通過(guò) UserNumber(用戶(hù)編號(hào) )相關(guān)聯(lián),其中 UserLogin(用戶(hù) 登錄 表 )的 UserNumber為 PK(主鍵 ) , UserInfo(用戶(hù)基本信息表 )和 MsgInfo(日志信息表 )的 UserNumber為 FK(外鍵 )。如是有效用戶(hù)則顯示 “ 登錄 成功 ” 消息框,點(diǎn)擊 “ 確定后 ”登錄 到日歷主界面,并設(shè)置 username 為當(dāng)前 登錄 用戶(hù)名。 } else { if (連接數(shù)據(jù)庫(kù)并將用戶(hù)名和采用 MD5 加密后的密碼與數(shù)據(jù)庫(kù)中資料對(duì)比 == true) { (登錄 成功! )。 } else { (您輸入的密碼有錯(cuò)誤請(qǐng)重新輸入! )。 圖 43 注冊(cè)模塊界面 用戶(hù)注冊(cè)時(shí)根據(jù)用戶(hù)所填寫(xiě)的信息存入數(shù)據(jù)庫(kù)。合法的用戶(hù)個(gè)人資料保存在 UserInfo 表中,并使用 UserNumber 字段與 UserLogin 表相關(guān)聯(lián)。 用戶(hù)查詢(xún)可以根據(jù)輸入的用戶(hù)名查詢(xún)顯示出的用戶(hù),并將該用戶(hù)所在行選中。//實(shí)例化一個(gè) md5對(duì)像 // 加密后是一個(gè)字節(jié)類(lèi)型的數(shù)組,這里要注意編碼 UTF8/Unicode等的選擇 byte[] s = ((cl))。格式后的字符是小寫(xiě)的字母,如果使用大寫(xiě)( X)則格式后的字符是大寫(xiě)字符 pwd = pwd + s[i].ToString(X)。 if(數(shù)據(jù)庫(kù)中沒(méi)有找到該用戶(hù)名 amp。密碼長(zhǎng)度 = 6 amp。 性別選擇代碼 0) { 連接數(shù)據(jù)庫(kù) 。 該界面使用 C自帶的 MonthCalendar 控 件來(lái) 顯示每一年的日歷,將當(dāng)前的系統(tǒng)時(shí)間顯示在 Label 靜態(tài)文本框里,并根據(jù)數(shù)據(jù)庫(kù)中的節(jié)假日設(shè)置顯示選中日期的節(jié)日信息。 此模塊還根據(jù)當(dāng)前系統(tǒng)時(shí)間和當(dāng)前 登錄 用戶(hù)的日志信息來(lái)確定是否創(chuàng)建日志提醒窗體。 以下為部分偽代碼。 } if (日志信息不為空 ) { 以當(dāng)前 登錄 用戶(hù)名為參數(shù)創(chuàng)建 日志提醒模塊窗體 。 顯示窗體的生存時(shí)間 = true。 從數(shù)據(jù)庫(kù) MsgInfo 表中讀取選定日期的節(jié)假日信息 。 圖 45 日志記錄模塊界面 當(dāng)點(diǎn)擊 “ 添加 ” 按鈕時(shí),系統(tǒng)將用戶(hù)輸入的日志信息和選擇的提醒日期時(shí)間儲(chǔ)存到數(shù)據(jù)庫(kù)的 MsgInfo 表 中。 // Unicode 編碼,用于將用戶(hù)輸入的日志信息采用編碼形式儲(chǔ)存在數(shù)據(jù)庫(kù)中 設(shè)置字符串型 encode 存放編碼后的字符串 。 } 返回 encode。 } catch { 處理異常 。 } else { 連接數(shù)據(jù)庫(kù),根據(jù) MsgID 刪除日志信息 。 } } 日志提醒模塊 功能說(shuō)明:當(dāng)系統(tǒng)時(shí)間到達(dá)當(dāng)前 登錄 用戶(hù)設(shè)置的日志提醒時(shí)間時(shí),從數(shù)據(jù)庫(kù)的 MsgInfo 表中讀取出當(dāng)前 登錄 用戶(hù)的當(dāng)前系統(tǒng)時(shí)間的日志信息,并顯示在彈出的窗體中。 + msgid + 39。 //連接數(shù)據(jù)庫(kù)并執(zhí)行 sql語(yǔ)句 (, , sql)。 圖 46 節(jié)假 日模塊界面 當(dāng)用戶(hù)通過(guò)下拉列表框選擇好日期,并輸入節(jié)假日名稱(chēng)后點(diǎn)擊 “ 添加 ” 按鈕時(shí),系統(tǒng)將日期和節(jié)假日名稱(chēng)儲(chǔ)存到數(shù)據(jù)庫(kù)的 JInfo 表中。 int day = (())。 //如果 sql 語(yǔ)句執(zhí)行成功 if ((, , sql) 0) { (節(jié)假日添加成功?。?)。 } } 5 系統(tǒng)測(cè)試 測(cè)試環(huán)境 本系統(tǒng)測(cè)試環(huán)境 。 經(jīng)測(cè)試,系統(tǒng)在上述軟硬件環(huán)境下,對(duì)各模塊的功能均能測(cè)試通過(guò),各邏輯流程均符合設(shè)計(jì)需要。當(dāng)輸入信息與數(shù)據(jù)庫(kù)信息一致時(shí)才 登錄成功。因此,當(dāng)未 登錄 用戶(hù)點(diǎn)擊日歷主模塊上的 “ 日志記錄 ” 按鈕時(shí),系統(tǒng)提示用戶(hù)先 登錄 該系統(tǒng)才能訪(fǎng)問(wèn)日志模塊,如圖 52 所示。如只有管理員才能刪除用戶(hù)資料,如圖 54 所示;未 登錄 用戶(hù)不能修改和刪除資料; 登錄 用戶(hù)只能修改自己的資料而不能修改他人的等等。而空行卻帶入了空字段,導(dǎo)致程序錯(cuò)誤。 如:未選擇日志信息就點(diǎn) “ 刪除 ” 按鈕;輸入不合規(guī)范的節(jié) 假日名稱(chēng)等等。 另外還測(cè)試了,當(dāng)某用戶(hù) 登錄 該系統(tǒng)后,是否會(huì)提示其他用戶(hù)的 登錄 信息。但后來(lái)將日志信息采用 Unicode 編碼儲(chǔ)存后,該提醒模塊在測(cè)試時(shí)就出現(xiàn)了很多問(wèn)題,如直接顯示數(shù)據(jù)庫(kù)內(nèi)未進(jìn)行解碼的日志信息;不能正常刪除日志等。如果密碼以明文形式在數(shù)據(jù)庫(kù)中儲(chǔ)存,必定會(huì)對(duì)用戶(hù)的資料安全造成很大的隱患。 MD5 算法在密碼的安全方面提供了非常好的保障。計(jì)算機(jī)使用的缺省編碼方式就是計(jì)算機(jī)的內(nèi)碼。在使用 時(shí),定期對(duì)數(shù)據(jù)庫(kù) 進(jìn)行備份,以便數(shù)據(jù)庫(kù)發(fā)生錯(cuò)誤時(shí)將數(shù)據(jù)庫(kù)恢復(fù)到之前某一已知的正確狀態(tài),實(shí)現(xiàn)數(shù)據(jù)庫(kù)的再次正確使用。 個(gè)人感覺(jué)其中最大的收獲就是學(xué)習(xí) 如何在程序開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)問(wèn)題,查閱資料并解決問(wèn)題,養(yǎng)成獨(dú)立思考的能力。理論上明白的方法卻不知道該如何去實(shí)現(xiàn),今后要多加練習(xí)動(dòng)手能力。 [4] 前沿軟件研究室 ,鄭小平 .Visual C.NET 開(kāi)發(fā)實(shí)踐 [M].北京:人民郵電出版社,2021。 致 謝 本文是在張路橋老師的熱情關(guān)心和指導(dǎo)下完成的,他淵博的知識(shí)和嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)使我受益匪淺,對(duì)順利完成本課題起到了極大的作用。 關(guān)于學(xué)位論文使用權(quán)和研究成果知識(shí)產(chǎn)權(quán)的說(shuō)明: 本人完 全了解成都信息工程學(xué)院有關(guān)保管使用學(xué)位論文的規(guī)定,其中包括: ( 1)學(xué)校有權(quán)保管并向有關(guān)部門(mén)遞交學(xué)位論文的原件與復(fù)印件。 ( 5)學(xué)??梢怨紝W(xué)位論文的全部或部分內(nèi)容(保密學(xué)位論文在解密后遵守此規(guī)定)。and let them inscribe their laws on a column in front of the courtof the wardens of the agora, that they may be clear instructors ofthose who have business in the agora. Enough has been said in what haspreceded about the wardens of the city, and if anything seems to bewanting, let them municate with the guardians of the law, and writedow n the omission, and place on a column in the court of the wardensof the city the primary and secondary regulations which are laiddown for them about their office. After the practices of adulteration naturally follow the practicesof retail trade. Concerning these, we will first of all give a word ofcounsel and reason, and the law shall e afterwards. Retail trade ina city is not by nature intended to do any harm, but quite thecontrary。 or if, in consequence ofsome fate or necessity, the best women were pelled to followsimilar callings, then we should know how agreeable and pleasant allthese things are。 and in the second place, they must assign the occupationto that class of men whose corruption w ill be the least injury tothe state