1. 程式人生 > >程式設計要有面向物件的思想-卡片類

程式設計要有面向物件的思想-卡片類

這是老師佈置的一個作業:設計一個圖書卡片類,用來儲存圖書館卡片分類記錄。這個類的成員包括書名 、作者、館藏數量。至少提供兩個方法, store 方法表示書 的入庫處理, show 方法顯示圖書資訊。程式執行時,可以通過控制檯輸入入庫圖書的總數,根據這個總數建立 Card 物件陣列,然後輸 入圖書資料。

首先要明白,我們需要一個卡片類,類中,有三個屬性:書名,作者,官倉數量;還有兩個方法。首先來定義這個類:

 class Card
    {
        private string bookname;

        public string Bookname
        {
            get { return bookname; }
            set { bookname = value; }
        }
        private string bookauthor;

        public string Bookauthor
        {
            get { return bookauthor; }
            set { bookauthor = value; }
        }
        private int booknumb;

        public int Booknumb
        {
            get { return booknumb; }
            set { booknumb = value; }
        }
        //書的入庫處理
        public void Store(string pabookname,string pabookauthor,int pabooknumb)
        {
            this.Bookname = pabookname;
            this.Bookauthor = pabookauthor;
            this.Booknumb = pabooknumb;
        }
        //顯示圖書資訊
        public string Show(string pabookname)
        {
            if (Bookname == pabookname)
            {
                return Bookauthor + "," + Booknumb;
            }
            return "";
        }
    }

然後定義兩個方法

 //根據數的名稱獲取圖書其他資訊
        private static string[] GetBooks(string bookname,Card[] cards)
        {
            foreach (Card card in cards)
            {
                string bookinfo = card.Show(bookname);
                if (!string.IsNullOrEmpty(bookinfo))
                {
                    return bookinfo.Split(',');
                }               
            }
            return null;
        }
        //儲存圖書資訊
        private static Card[] SetBooks(int cardnumber)
        {
            Card[] cards = new Card[cardnumber];
            for (int i = 0; i < cards.Length; i++)
            {
                Console.WriteLine("請輸入第" + (i+1) + "本書的書名");
                string bookname = Console.ReadLine();
                Console.WriteLine("請輸入第" + (i+1) + "本書的作者");
                string bookauthor = Console.ReadLine();
                Console.WriteLine("請輸入第" + (i+1) + "本書的數量");
                int booknumb = Convert.ToInt32(Console.ReadLine());
                cards[i] = new Card();
                cards[i].Store(bookname, bookauthor, booknumb);
            }
            return cards;
        }
    }


最後在Main函式中編寫如下程式碼:

while (true)
            {
                Console.WriteLine("請輸入卡片數量");
                string cardnumb = Console.ReadLine();
                //判斷使用者輸入是否合法
                int numb;
                if (int.TryParse(cardnumb, out numb) == false)
                {
                    continue;
                }
                int cardnumber = Convert.ToInt32(cardnumb);
                //儲存圖書資訊
                Card[] cards= SetBooks(cardnumber);
                //根據輸入的書名顯示圖書資訊
                Console.WriteLine("請輸入您要查詢的圖書的名稱");
                string bookname=Console.ReadLine();
                string[] bookinfo;
                if ((bookinfo = GetBooks(bookname, cards)) != null)
                {
                    Console.WriteLine("此書的作者為:" + bookinfo[0] + ",數量為:" + bookinfo[1]);
                }
                Console.WriteLine("程式執行完畢,即將退出");
                Thread.Sleep(1000);
                break;
                
            }

上面的程式碼儘量講程式碼放在函式中,其實在這裡不是必須得,只是為了讓童鞋們養成這種習慣。另外希望大家慢慢培養面向物件程式設計的思想,也就是說在編寫程式碼時,首先要分析出有什麼物件,有幾個物件,物件之間的關係,物件有什麼成員,不要一上來就一大段程式碼,最後自己也看不懂了。