zoukankan      html  css  js  c++  java
  • 基于TXT文本的简单图书管理系统

      1
    ////////////////////////////////////////////////////////////////////////////////////// 2 3 //SqList.h 顺序表数据结构C++类定义(基类) 4 5 ////////////////////////////////////////////////////////////////////////////////////// 6 //#ifndef MYHEAD_H 7 // #define MYHEAD_H 8 // #include"myhead.h" 9 //#endif 10 typedef int Status; 11 #define LIST_MAX_SIZE 10 12 #define LISTINCREMENT 3 //顺序表使用的一些常量说明 13 #define ERROR 0 14 #define OK 1 15 ////////////////////////////////////////////////////////////////////////////////////// 16 #include<assert.h> 17 //顺序表数据结构C++声明(基类) 18 template <typename ElemType> 19 class SqList 20 { 21 public: 22 23 int n; 24 25 int bin_Search(ElemType key); //有序顺序表折半查找 26 27 void clear(); //把顺序表置空 28 29 Status deleteElem(int i, ElemType& e); //删除第i个元素 30 31 Status getElem(int i, ElemType& e); //取第i个元素 32 33 int getLength(); //求顺序表中元素的个数 34 35 int getListSize(); //取顺序表空间的大小 36 37 Status insert(int i, ElemType e); //在第i个元素之前插入一个元素 38 39 bool isEmpty(); //判断顺序表是否置空 40 41 int locateElem(ElemType e, Status(*compare)(ElemType, ElemType)); //查找第1个与e满足compare()关系的元素的序号 42 43 Status nextElem(ElemType e, ElemType& next_e); //返回某元素的后继 44 45 SqList<ElemType> operator =(SqList <ElemType> rightL);//重载赋值运算符的定义 46 47 Status priorElem(ElemType e, ElemType& prior_e);//返回某元素的前驱 48 49 int sequentialSearch(ElemType e);//在顺序表中查找某元素 50 51 52 //******************************系统自动调用构造函数及析构函数声明************************************// 53 54 SqList(); 55 56 virtual ~SqList(); 57 58 SqList(const SqList<ElemType>& otherL); //顺序表拷贝初始化构造函数 59 60 void SqList<ElemType>::input(); 61 62 void SqList<ElemType>::display() const; 63 64 void SqList<ElemType>::randSqList(); 65 66 //**************************求并、交、差集****************************************// 67 68 //求两顺序表的并集 69 void unionSet(SqList <ElemType> firstL, SqList <ElemType> secondL); 70 71 72 protected: 73 ElemType *elem; 74 int listSize; 75 //int n; 76 }; 77 78 /////////////////////////////////////////////////////////////////////////////////// 79 80 //顺序表数据结构C++类的实现 81 82 ////////////////////////////////////////////////////////////////////////////////// 83 84 //折半查找 85 template <typename ElemType> 86 int SqList<ElemType>::bin_Search(ElemType key) 87 { 88 int low, mid, high; 89 low = 0, high = n - 1; 90 while (low <= high) 91 { 92 mid = (low + high) / 2; 93 if (elem[mid] == key) 94 return mid + 1; 95 else if (elem[mid]<key) 96 low = mid + 1; 97 else 98 high = mid - 1; 99 } 100 return 0; 101 } 102 103 //把顺序表置空 104 template <typename ElemType> 105 void SqList<ElemType>::clear() 106 { 107 n = 0; 108 } 109 110 //删除第i个元素 111 template <typename ElemType> 112 Status SqList<ElemType>::deleteElem(int i, ElemType& e) 113 { 114 115 if (i<1 || i>n) return ERROR; 116 e = elem[i - 1]; 117 for (int j = i + 1; j <= n; ++j) 118 elem[j - 2] = elem[j - 1]; 119 --n; 120 return OK; 121 } 122 123 //取第i个元素 124 template <typename ElemType> 125 Status SqList<ElemType>::getElem(int i, ElemType& e) 126 { 127 if (i<1 || i>n) 128 return ERROR; 129 e = elem[i - 1]; 130 return OK; 131 } 132 133 //求顺序表中元素个数 134 template <typename ElemType> 135 int SqList<ElemType>::getLength() 136 { 137 return n; 138 } 139 140 //取顺序表存储空间的大小 141 template <typename ElemType> 142 int SqList<ElemType>::getListSize() 143 { 144 return listSize; 145 } 146 147 //在第i个元素之后插入一个元素 148 template <typename ElemType> 149 Status SqList<ElemType>::insert(int i, ElemType e) 150 { 151 ElemType *newbase; 152 153 if (i<0 || i>n + 1) return ERROR; 154 155 if (n >= listSize) 156 { 157 newbase = new ElemType[listSize + LISTINCREMENT]; 158 assert(newbase != 0); 159 for (int j = 1; j <= n; ++j) 160 newbase[j - 1] = elem[j - 1]; 161 162 delete[] elem; 163 elem = newbase; 164 listSize += LISTINCREMENT; 165 } 166 for (int j = i+1; j+1<n-1; j++) 167 elem[j+1] = elem[j]; 168 elem[i] = e; 169 ++n; 170 return OK; 171 } 172 //判断顺序表是否为空 173 template <typename ElemType> 174 bool SqList<ElemType>::isEmpty() 175 { 176 return n ? false : true; 177 } 178 179 //查找第i个与额满足compare()关系的元素 180 template <typename ElemType> 181 int SqList<ElemType>::locateElem(ElemType e, Status(*compare)(ElemType, ElemType)) 182 { 183 int i = 1; 184 for (i = 1; i <= n && !(*compare)(elem[i - 1], e); ++i); 185 186 if (i <= n) 187 return i; 188 else 189 return 0; 190 } 191 192 //返回某元素的后继 193 template <typename ElemType> 194 Status SqList<ElemType>::nextElem(ElemType e, ElemType& next_e) 195 { 196 int i = locateElem(e, equal); 197 if (i<1 || i == n) 198 return ERROR; 199 else 200 getElem(i + 1, next_e); 201 return OK; 202 } 203 204 //重载赋值运算符的定义 205 template <typename ElemType> 206 SqList<ElemType> SqList<ElemType>::operator=(SqList<ElemType>rightL) 207 { 208 if (this != &rightL) 209 { 210 if (listSize<rightL.listSize) 211 { 212 delete[] elem; 213 elem = new ElemType[rightL.listSize]; 214 assert(elem != 0); 215 listSize = rightL.listSize; 216 } 217 n = rightL.n; 218 for (int i = 1; i <= n; ++i) 219 elem[i - 1] = rightL.elem[i - 1]; 220 } 221 return *this; 222 } 223 224 //返回某元素的前驱 225 template <typename ElemType> 226 Status SqList<ElemType>::priorElem(ElemType e, ElemType& prior_e) 227 { 228 int i = locateElem(e, equal); 229 230 if (i <= 1) 231 return ERROR; 232 else 233 getElem(i - 1, prior_e); 234 return OK; 235 } 236 237 //在顺序表中顺序查找某元素 238 template <typename ElemType> 239 int SqList<ElemType>::sequentialSearch(ElemType key) 240 { 241 for (int i = 1; i <= n; && key != elem[i - 1]; ++i); 242 243 if (i <= n) 244 return i; 245 else 246 return 0; 247 } 248 249 //**************************系统自动调用初始化构造函数****************************// 250 251 //构造函数 252 template <typename ElemType> 253 SqList<ElemType>::SqList() 254 { 255 elem = new ElemType[LIST_MAX_SIZE]; 256 assert(elem != 0); 257 listSize = LIST_MAX_SIZE; 258 n = 0; 259 } 260 261 //顺序表析构函数 262 template <typename ElemType> 263 SqList<ElemType>::~SqList() 264 { 265 delete[] elem; 266 } 267 268 //顺序表初始化构造函数 269 template <typename ElemType> 270 SqList<ElemType>::SqList(const SqList<ElemType>& otherL) 271 { 272 elem = new ElemType[otherL.listSize]; 273 assert(elem != 0); 274 listSize = otherL.listSize; 275 n = otherL.n; 276 for (int i = 1; i <= n; ++i) 277 elem[i - 1] = otherL.elem[i - 1]; 278 } 279 280 ////////////////////////////////////////////////////////////////////////////////////// 281 282 //输入顺序表 283 template <typename ElemType> 284 void SqList<ElemType>::input() 285 { 286 cout << "请输入顺序表元素的个数:"; 287 cin >> n; 288 cout << "请输入顺序表:"; 289 for (int i = 0; i<n; ++i) 290 cin >> elem[i]; 291 } 292 293 294 // 输出顺序表 295 296 template <typename ElemType> 297 void SqList<ElemType>::display() const 298 { 299 cout << "当前顺序表有" << n << "个元素,分别为:" << endl; 300 for (int i = 1; i <= n; ++i) 301 cout << "[" << i << "] "; 302 cout << endl; 303 for (int i = 1; i <= n; ++i) 304 cout << " " << elem[i - 1] << " "; 305 cout << endl; 306 cout << endl; 307 } 308 309 310 //随机生成顺序表 311 312 template <typename ElemType> 313 void SqList<ElemType>::randSqList() 314 { 315 srand((unsigned)time(NULL)); 316 317 cout << "用以下随机数作为当前顺序表的元素:" << endl; 318 319 for (int i = 0; i<listSize; i++) 320 { 321 elem[i] = rand() % 100 + 1; 322 cout << elem[i] << " "; 323 n++; 324 } 325 cout << endl; 326 // cout<<endl<<"输出随机生成的顺序表,"; 327 /*for(int i=1;i<=n;++i) 328 cout<<"["<<i<<"] "; 329 cout<<endl; 330 for(int i=1;i<=n;++i) 331 cout<<" "<<elem[i-1]<<" "; 332 cout<<endl;*/ 333 //display( ); 334 } 335 336 337 //////////////////////////////////////////////////////////////////////////////// 338 339 //功能:判断两整数是否相等 340 //输入:函数的值参a和b为需要比较的两个整数 341 //输出:若a等于b,函数的返回值为OK;否则为ERROR 342 Status equal(int a, int b) 343 { 344 if (a == b) 345 return OK; 346 else 347 return ERROR; 348 } 349 350 //功能:判断一个整数是否大于另一个整数 351 //输入:函数的值参a和b为需要比较的两个整数 352 //输出:若a大于b,函数的返回值为OK;否则为ERROR 353 Status great(int a, int b) 354 { 355 if (a>b) 356 return OK; 357 else 358 return ERROR; 359 } 360 361 //功能:判断一个整数是否小于另一个整数 362 //输入:函数的值参a和b为需要比较的两个整数 363 //输出:若a小于b,函数的返回值为OK;否则为ERROR 364 Status small(int a, int b) 365 { 366 if (a<b) 367 return OK; 368 else 369 return ERROR; 370 } 371 372 ////////////////////////////////////////////////////////////////////////////////////// 373 374 //求两顺序表的并集 375 template <typename ElemType> 376 void SqList <ElemType>::unionSet(SqList <ElemType> firstL, SqList <ElemType> secondL) 377 { 378 ElemType e; 379 SqList <ElemType> thirdL(firstL); 380 381 for (int i = 1; i <= secondL.getLength(); ++i) 382 { 383 cout << thirdL.n << endl; 384 secondL.getElem(i, e); 385 if (!firstL.locateElem(e, equal)) 386 { //++thirdL.n; 387 thirdL.insert(thirdL.n + 1, e); 388 } 389 } 390 thirdL.display(); 391 }
    //派生图书信息类
    #include"Sqlist.h"
    #include<string>
    #include <sstream>
    #include <strstream>
    using namespace std;//用string必带
    enum book
    {
        children_book,
        learn_book,
        tool_book,
        story_book,
        Science_book
    };
    struct Book_data
    {
        int ID;
        string name;
        double price;
        book type;
        bool borrow;
    };
    class Dc_wr
    {
    private:    static int n;
    public:
        static bool  Write_dc(string a,string b)//追加
        {
            ofstream f1(b, ios::app);
            if (!f1)
                return false;//打开文件失败则结束运行
            f1 << a << endl;//使用插入运算符写文件内容
            f1.close();//关闭文件
            n++;
            return true;
        }
        static bool  Write_fg(string a, string b)//覆盖
        {
            ofstream f1(b);
            if (!f1)
                return false;//打开文件失败则结束运行
            f1 << a << endl;//使用插入运算符写文件内容
            f1.close();//关闭文件
            n++;
            return true;
        }
        static bool  Read_dc(string &a,string b)
        {
            ifstream f1(b);
            if (!f1)
            {
                f1.close();
                return false;
            }
            f1 >> a;
            f1.close();
            return true;
        }
        static bool  Read_zline(string &a, int b,string c)
        {
            ifstream f1(c);
            if ((!f1) && b <= n)
            {
                f1.close();
                return false;
            }
            for (int i = 1; i <= b; i++)
                f1 >> a;
            f1.close();
            return true;
    
        }
        static bool Read_star(string &a, int b)//程序开始时取出文本指定行数据返回字符串
        {
            string c;//接受不要的行字符串
            ifstream f1("library.txt");
            for (int i = 1; i <= b; i++)
            {
                if (i == b)
                {
                    f1 >> c;
                    if (c != "")
                    {
                        a = c;
                        f1.close();
                        return true;
                    }
                    else
                    {
                        f1.close();
                        return false;
                    }
                }
                f1 >> c;
                if (c == "")
                {
                    f1.close();
                    return false;
                }
            }
            f1.close();
            return false;
        }
        static bool Del(int b)
        {
            string a;
            ofstream f2("library(复本).txt", ios::app);
            if (!f2)
                return false;
            ifstream f1("library.txt");
            if (!f1)
                return false;
            for (int i=0; ;i++)
            {
                f1 >> a;
                if (i == b)
                    continue;
                if (a == "#")
                {
                    f2 << a;
                    break;
                }
                f2 << a;
            }
            f2.close();
            f1.close();
            ofstream f3("library.txt", ios::trunc);
            ifstream f4("library.txt(复本).txt");
            for (;;)
            {
                f4 >> a;
                f3 << a;
                if (a == "#")
                    break;
            }
        
        }
        static bool  txt_to_txt(string b, string c, bool s)//用b覆盖c 清空b s为假添加#结束标记
        {
            string a;
            ofstream f2(c, ios::trunc);//of写  if读  ios::trunc清空原文本后打开
            ifstream f1(b);
            for (;;)
            {
                f1 >> a;
                if (a == "#")//遇到结束标记则关闭
                    break;
                if (a == "")//读出字符串为空则关闭
                    break;
                a = a + '
    ';//换行
                f2 << a;
            }
            f2.close();
            if (!s)//根据参数判断是否给予结束标记
            {
                Dc_wr::Write_dc("#", c);
            }
            return true;
        }
    
    };
    class Book_in :public  SqList<Book_data>
    {
    public:
        ~Book_in()
        {
    
            Class_totxt();
            Dc_wr::Write_dc("#", "library(复本).txt");//加上结束标记方便下一次程序对文本读取
        }
        int Find_book(int ID);
        int Find_book(string name);
        bool Add_book(Book_data e,bool a);
        string Record_tostring(Book_data e);
        void  txt_toclass();
        void  Out_book(int i);
        void  Borrow_book();
        void Class_totxt();
        void Return_book();
        void Change_book();
    };
    
    
    bool Book_in::Add_book(Book_data e, bool a)//把e添加到类  如果a为真则添加到存本
    {
        if (a)
        {
            string record = Record_tostring(e);
            Dc_wr::Write_dc(record, "library.txt");
            cout << record << "添加到文本成功" << endl;
        }
        string record = Record_tostring(e);
        if (insert(n, e))
        {
            cout << record << "填加到class成功" << endl;
            return true;
        }
        else
            return false;
    }
    string Book_in::Record_tostring(Book_data e)
    {
        string chge;
        strstream change;
        string record = "";
        change << e.ID;
        change >> chge;
        record = record + chge + "|" + e.name;
        strstream change3;
        change3 <<e.price;
        change3 >> chge;
        record = record + "|" + chge;
        switch (e.type)
        {
        case children_book:record = record + "|" + "1"; break;
        case learn_book:record = record + "|" + "2"; break;
        case tool_book:record = record + "|" + "3"; break;
        case story_book:record = record + "|" + "4"; break;
        case Science_book:record = record + "|" + "5"; break;
        default:
            break;
        };
        if (e.borrow)
        record = record + "|" + "1"; 
        else
        record = record + "|" + "2";
        return record;
    }
    void Book_in::txt_toclass()
    {
        int x, y;
        Book_data e;//把分割好的字符串转化为相应的类型赋值成为一个Bool_data类型
        for (int p=1;;p++)//p控制接受输出字符串的数组
        {
            int i = 0;
            string a;
            string data[5];
            Book_data check;
            if (!Dc_wr::Read_star(a, p))
                return;
            //if (a == "#")
            //    return;
            for each (char b in a)//利用for each取出字符串存放在数组
            {
                if (i == 5)//1个Book_data中有5值
                    break;
                if (b != '|')
                {
                    data[i] = data[i] + b;
                }
                else
                {
                    i++;
                }
            }
            //对应的数据类型转换
            stringstream f1;
            f1 << data[0];
            f1 >> e.ID;
    
            e.name = data[1];
    
    
            stringstream f2;
            f2 << data[2];
            f2 >> e.price;
    
            stringstream f3;
            f3 << data[3];
            f3 >> x;
            switch (x)
            {
            case 1: e.type = children_book; break;
            case 2: e.type = learn_book; break;
            case 3: e.type = tool_book; break;
            case 4: e.type = story_book; break;
            case 5: e.type = Science_book; break;
            default:
                break;
            }
    
            stringstream f4;
            f4 << data[4];
            f4 >> y;
            switch (y)
            {
            case 1: e.borrow = true; break;
            case 2: e.borrow = false; break;
            default:
                break;
            }
            //对应的数据类型转换
            if (check.ID == e.ID)
                return;
           Add_book(e, false);//把Book_data 填加到类
           check = e;
        }
    }
    void Book_in::Out_book(int i)
    {
            cout << elem[i].ID << "   " << elem[i].name << "   " << elem[i].price << "   ";
            switch (elem[i].type)
            {
            case children_book:cout << "儿童类" << "      "; break;
            case learn_book:cout << "学习类" << "       "; break;
            case tool_book:cout << "工具类" << "      "; break;
            case story_book:cout << "小说类" << "      "; break;
            case Science_book:cout << "科学类" << "      "; break;
            default:
                break;
            };
            if (elem[i].borrow)
                cout << "被借阅" << endl;
            else
                cout << "未被借阅" << endl;
    }
    int Book_in::Find_book(int ID)
    {
        for (int i = 0; i <=n - 1;i++)
        {
            if (elem[i].ID == ID)
            {
                Out_book(i);
                return i;
            }
        }
        cout << "没有找到相关书籍" << endl;
        return -1;
    }
    int Book_in::Find_book(string name)
    {
        for (int i = 0; i <= n - 1; i++)
        {
            if (elem[i].name == name)
            {
                Out_book(i);
                return i;
            }
        }
        cout << "没有找到相关书籍" << endl;
        return -1;
    }
    void Book_in::Borrow_book()
    {
        int ID;
        int i;
        char t;
        p:
        cout << "请输入书籍ID" << endl;
        cin >> ID;
        i = Find_book(ID);
        if (i+1)
        {
            if (!elem[i].borrow)
            {
                cout << "该书现在可以借出" << endl;
                cout << "是否借书?(y or anykey)" << endl;
                cin >> t;
                if (t == 'y')
                    elem[i].borrow = true;
                cout << "OK" << endl;
            }
            else
                cout << "该书现在已经被借走" << endl;
        }
        else
        {
            cout << "没有找到请重新输入" << endl;
            goto   p;
        }
    }
    void Book_in::Class_totxt()
    {
        Book_data e;
        string a;
        for (int i = 1; i <= n; i++)
        {
            getElem(i, e);
            a=Record_tostring(e);
            if (i == 1)
                Dc_wr ::Write_fg(a, "library(复本).txt");//第一行覆盖原文本
            else
                Dc_wr ::Write_dc(a, "library(复本).txt");//追加
        }
    }
    void Book_in::Return_book()
    {
        int ID;
        int i;
        cout << "请输入书籍ID" << endl;
        cin >> ID;
        i = Find_book(ID);
        if (i + 1)
        {
            elem[i].borrow = false;
            cout << "已完成还书!" << endl;
        }
    }
    void Book_in::Change_book()
    {
        int ID;
        int change;
        int i;
        cout << "请你输入你要修改书的ID" << endl;
        cin >> ID;
        i = Find_book(ID);
        if (i + 1)
        {
            cout << "找到图书!" << endl;
        }
        else
        {
            cout << "未找到图书" << endl;
            return;
        }
        cout << "请输入要修改的项:"<<"1.ID" << "    2.书名"<< "   3.价格"<< "   4.书类"<< "   5.是否被借阅"<<"6.删除整个书的信息"<< endl;
        cin >> change;
        switch (change)
        {
        case 1:
        {
            int a;
            cout << "请输入你要改的ID" << endl;
            cin >> a;
            elem[i].ID = a;
            cout << "修改成功!" << endl;
        }; break;
        case 2:
        {
            string a;
            cout << "请输入你要改的书名" << endl;
            cin >> a;
            elem[i].name = a;
            cout << "修改成功!" << endl;
        }; break;
        case 3:
        {
            int a;
            cout << "请输入你要改的价格" << endl;
            cin >> a;
            elem[i].price = a;
            cout << "修改成功!" << endl;
        }; break;
        case 4:
        {
            int a;
            string  c[] = { "儿童类", "学习类", "工具类", "小说类", "科学类" };
            cout << "请输入你要修改的书的类别(1." << c[0] << "   2." << c[1] << "   3." << c[2] << "   4." << c[3] << "   5." << c[4] << endl;
            cin >> a;
            switch (a)
            {
            case 1: elem[i].type = children_book; break;
            case 2: elem[i].type = learn_book; break;
            case 3: elem[i].type = tool_book; break;
            case 4: elem[i].type = story_book; break;
            case 5: elem[i].type = Science_book; break;
            default:
                break;
            }
            cout << "修改成功!" << endl;
        }; break;
        case 5:
        {
            if (elem[i].borrow)
                elem[i].borrow = false;
            else
                elem[i].borrow = true;
            cout << "修改成功!" << endl;
        }
        case 6:
        {
            Book_data a;
            deleteElem(i+1, a);
            cout << "修改成功!" << endl;
        }
        default:
            break;
        }
    }
    //mian  
    #include<iostream>
    #include<fstream>
    //#include"Query_sequence.h"
    #include"Book_information.h"
    using namespace std;
    int Dc_wr::n = 0;
    int Menu()
    {
        int choice;
        system("cls");
        cout << "****************************************************图书管理系统****************************************************" << endl;
        //cout << "①⑧⑨⑩" << endl;
        cout << "▓ ①增加图书                                                                                                      ▓" << endl;
        cout << "▓ ②查看现有图书                                                                                                  ▓" << endl;
        cout << "▓ ③借书                                                                                                          ▓" << endl;
        cout << "▓ ④还书                                                                                                          ▓" << endl;
        cout << "▓ ⑤修改图书                                                                                                      ▓" << endl;
        cout << "▓ ⑥查找书籍                                                                                                      ▓" << endl;
        cout << "****************************************************图书管理系统****************************************************" << endl;
        cout << "请选择:";
        cin >> choice;
        return choice;
    }
    void Add(Book_in& library)
    {
        Book_data a;
        //Book_data b;
        //Book_data c;
        book type;
        int  b;
        string o;
        string  c[] = { "儿童类", "学习类", "工具类", "小说类", "科学类" };
        cout << "请输入ID" << endl;
        cin >> a.ID;
        cout << "请输入书名" << endl;
        cin >> a.name;
        cout << "请输入书的价格" << endl;
        cin >> a.price;
    book_type_xuanz:
        cout << "请输入数的类别(1." << c[0] << "   2." << c[1] << "   3." << c[2] << "   4." << c[3] << "   5." << c[4] << endl;
        cin >> b;
        switch (b)
        {
        case 1: a.type = children_book; break;
        case 2: a.type = learn_book; break;
        case 3: a.type = tool_book; break;
        case 4: a.type = story_book; break;
        case 5: a.type = Science_book; break;
        default:cout << "选择错误!请重新选择" << endl; goto book_type_xuanz;
        };
        getchar();
        cout << "书是否被借出(n OR y)" << endl;
        cin >> o;
        if (o == "n")
            a.borrow = false;
        else
            a.borrow = true;
        library.Add_book(a, true);
        //a.ID = 1;
        //a.borrow = false;
        //a.name = "first";
        //a.price = 12;
        //a.type = tool_book;
        //b.ID = 2;
        //b.borrow = false;
        //b.name = "scend";
        //b.price = 13;
        //b.type = learn_book;
        //c.ID = 3;
        //c.borrow = true;
        //c.name = "third";
        //c.price = 14;
        //c.type = story_book;
        //library.Add_book(a,true);
        //library.Add_book(b,true);
        //library.Add_book(c,true);
    }
    int main()
    {
        Book_in library;//一个图书类
        int choice;//用户菜单选择
        Book_data h;
        Dc_wr::txt_to_txt("library(复本).txt", "library.txt",true);//以复本覆盖存本
        library.txt_toclass();//根据存本提出字符串转化为类
        start:
        choice=Menu();
        switch (choice)
        {
        case 1:
        {
            for (char m = 'y'; m != 'n';)
            {
                Add(library);
                getchar();
                cout << "是否继续添加?(n OR y)" << endl;
                    m=getchar();
            }
    
        }
            break;
        case 2:
        {
            if (library.n == 0)
            {
                cout << "" << endl;
            }
            cout << "ID" << "     " << "书名" << "    " << "价格" << "   " << "类型" << "       " << "是否被借阅" << endl;
            for (int i = 0; i <=library.n - 1; i++)
                  library.Out_book(i); 
        }; break;
        case 3:
        {
            library.Borrow_book();
        }
            ; break;
        case 4:
        {
            library.Return_book();
        }
            ; break;
        case 5:
        {
            library.Change_book();
        }
            ; break;
        case 6:
        {
            int p;
            int ID;
            string name;
            cout << "通过ID查找输入1 通过书名查找输入2" << endl;
            cin >> p;
            if (p == 1)
            {
                cout << "请输入ID" << endl;
                cin >> ID;
                cout << "相关信息" << endl;
                library.Find_book(ID);
            }
            else
            {
                cout << "请输入书名" << endl;
                cin >> name;
                cout << "相关信息" << endl;
                library.Find_book(name);
            }
    
        }
        default:
            break;
        };
        char k;
        cout << "是否继续选择?(anykey or y)" << endl;
        cin >> k;
        if (k == 'y')
            goto start;
        system("pause");
        return 0;
    }
  • 相关阅读:
    多重背包POJ1276不要求恰好装满 poj1014多重背包恰好装满
    哈理工1053完全背包
    求最小公倍数与最大公约数的函数
    Bus Pass ZOJ 2913 BFS 最大中取最小的
    POJ 3624 charm bracelet 01背包 不要求装满
    HavelHakimi定理(判断一个序列是否可图)
    z0j1008Gnome Tetravex
    ZOJ 1136 Multiple BFS 取模 POJ 1465
    01背包 擎天柱 恰好装满 zjut(浙江工业大学OJ) 1355
    zoj 2412 水田灌溉,求连通分支个数
  • 原文地址:https://www.cnblogs.com/cyh1282656849/p/5644060.html
Copyright © 2011-2022 走看看