分散式資料庫系統—商旅預定系統的實現(6)

來源:互聯網
上載者:User
資料介面實作類別的構建

        針對用戶端的需求,在介面實作類別的操作大體分為兩個部分:事務相關操作和資料維護的相關操作。

    class ReservationRemoteServiceImpl : MarshalByRefObject, IReservationRemoteService    {        private static List<Reservation> list;//儲存所有的關於Flight的資訊        private Hashtable TransactionBackupHashTable;//Key為tansaction 的編號,value就是list        private Boolean m_hasControlled = false;//沒人去佔領這個資料類        public Boolean hasControlled        {            get            {                return m_hasControlled;            }            set            {                m_hasControlled = value;            }        }

介面實作類別的資料聲明結構

         在介面實作類別中,需要暴露給用戶端的用public標示,其他的用private標示,這樣很好的保護了介面實作類別的內部結構,提高了代碼的安全性。

         通過使用泛型類List<T>來儲存資料實體,而Hashtable則使用其key和Value這一特性,來備份資料集合,此次設計中key為事務編號,而List<T>則相應儲存到Value中去,不僅方便儲存而且方便尋找。

        #region 事務的相關操作        /// <summary>        /// 開始一個事務        /// </summary>        /// <param name="xid"></param>        public void BeginTransaction(String xid)        {            if (!TransactionBackupHashTable.ContainsKey(xid))//如果不包含該ID下的事務,則備份                Backup(xid);        }        /// <summary>        /// 提交事務        /// </summary>        /// <param name="xid"></param>        public void CommitTransaction(String xid)        {            if (TransactionBackupHashTable.ContainsKey(xid))//如果包含該ID下的事務                Override(xid);        }        /// <summary>        /// 復原事務        /// </summary>        /// <param name="xid"></param>        public void RollBack(String xid)        {            if (TransactionBackupHashTable.ContainsKey(xid))//如果包含該ID下的事務                Recover(xid);        }        /// <summary>        /// 備份資料,且為每一個事務進行備份        /// </summary>        /// <param name="xid">事務編號</param>        private void Backup(String xid)        {            TransactionBackupHashTable.Add(xid, list);        }        /// <summary>        /// 根據事務的編號恢複資料        /// </summary>        /// <param name="xid"></param>        private void Recover(String xid)        {            list = (List<Reservation>)TransactionBackupHashTable[xid];        }        /// <summary>        /// 如果執行成功,根據事務的編號進行覆蓋        /// </summary>        /// <param name="xid"></param>        private void Override(String xid)        {            TransactionBackupHashTable.Clear();        }        #endregion

相關事務操作的方法實現

本次設計只是實現了資料集合的簡單增刪改查等操作,具體方法實現如下:

        public Reservation searchReservation(String CustName)//搜尋客戶的預訂資訊        {            for (int i = 0; i < list.Count; i++)//遍曆所有car中的資料                if (list[i].CustName == CustName) //搜尋到需要的資料                {                    return list[i];                }            return null;        }

尋找方法的實現

        /// <summary>        /// 插入新的資料        /// </summary>        /// <param name="locationString">地名</param>        /// <param name="price">價格</param>        /// <param name="numRooms">汽車數目</param>        /// <returns></returns>        public Boolean insertCar(String locationString, int price, int numCars)        {            for (int i = 0; i < listCar.Count; i++)//遍曆所有hotel中的資料                if (listCar[i].location == locationString) //搜尋到需要的資料                {                    return false;//有重複則撤銷此次操作                }            Car enetity = new Car();            enetity.location = locationString;            enetity.price = price;            enetity.numCars = numCars;            enetity.numAvail = 0;            listCar.Add(enetity);            return true;        }

插入方法的實現

    插入的方法首先需要遍曆List<T>,查看是否有重複的資料主關鍵字,如果已經存在則返回插入失敗,不能進行資料插入。通過建立新的資料類型並插入到List<T>中來完成資料的添加。

        /// <summary>        /// 根據地名刪除汽車的相關資訊        /// </summary>        /// <param name="locationString"></param>        /// <returns></returns>        public Boolean deleteCar(String locationString)        {            for (int i = 0; i < listCar.Count; i++)//遍曆所有Car中的資料                if (listCar[i].location == locationString) //搜尋到需要的資料                {                    listCar.RemoveAt(i);                    return true;//刪除成功                }            return false;//沒有找到,刪除失敗        }

資料的刪除結構

刪除操作也是通過迴圈遍曆List<T>來尋找對象資料欄位相等的欄位來完成刪除的。

       //建立唯一的索引值 格式為:001,002,003        public String GenerateID()        {            String idString = null;            if (list.Count + 1 < 10)                idString = "00"+(list.Count + 1).ToString();            else if (list.Count + 1 < 100 && list.Count + 1>=10)                idString = "0" + (list.Count + 1).ToString();            else                idString = (list.Count + 1).ToString();            int flag = 1;//標誌位            int increment = list.Count + 1;//索引值建立的原始量            while (true)            {                for (int i = 0; i < list.Count; i++)                    if (list[i].resvKey == idString)                    {                        flag = 0;//搜尋到了相同索引值的資料                        break;                    }                if (flag == 0)                {                    //如果搜尋到了相同索引值的資料,則需要重新計算索引值                    increment += 1;                    if (increment + 1 < 10)                        idString = "00" + (increment + 1).ToString();                    else if (list.Count + 1 < 100 && list.Count + 1 >= 10)                        idString = "0" + (increment + 1).ToString();                    else                        idString = (increment + 1).ToString();                }                else//索引值建立沒有產生重複跳出                    break;                flag = 1;//還原            }            return idString;        }

產生資料主關鍵字的方法結構

 

    在某些表中,資料需要主關鍵字來維護,而主關鍵字的值通過客戶自己來添加很可能會造成關鍵字重複,破壞資料唯一性。通過建立一個主關鍵字編號產生函數來建立主關鍵字,則不會產生重複資料。具體實現過程如下:

    本次設計的主關鍵字格式為三位元字,不足三位的前面補零,例如6號表示為006,17號表示為017。本次設計的基本原則就是遞增式的增加,初始化的時候首先按照資料集合中的集合總數加1改編為資料主關鍵字,如果在資料庫中已經存在,那麼把把數值加1再次改變成標準格式到資料集合中尋找,如此直到迴圈一遍後都不會產生重複,那麼這個就為合法的主關鍵字。

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.