图书库存管理系统

1.追加图书记录
2.删除图书记录
3.显示所有图书记录
4.查询图书
5.图书入库
6.图书销售
7.批量导入图书记录
8.导出图书记录
9.按书号排序
10.删除全部图书记录
0.退出
  1 //C++ 同学交流群373239689
  2 //我的网站 rvfu.me
  3 //个人公众号 rvfu98
  4 #include <iostream>
  5 #include <fstream>
  6 #include <cstdlib>
  7 #include <iomanip>
  8 #include <cstring>
  9 using namespace std;
 10 
 11 class Book
 12 {
 13     char bookNo[20], bookName[20];
 14     int Num;
 15 public:
 16     Book(char *nop =NULL, char *nap =NULL, int n =0)
 17     {
 18         if(nop)strcpy(bookNo, nop);
 19         if(nap)strcpy(bookName, nap);
 20         Num = n;
 21     }
 22     void Show()
 23     {
 24         cout << left << setw(20) << bookNo << left << setw(20) << bookName << left << setw(20) << Num << endl;
 25     }
 26     void Print(ofstream &out)
 27     {
 28         out << left << setw(20) << bookNo << left << setw(20) << bookName << left << setw(20) << Num << endl;
 29     }
 30     void setInfo(char *nop, char *nap, int n)
 31     {
 32         strcpy(bookNo, nop);
 33         strcpy(bookName, nap);
 34         Num = n;
 35     }
 36     void setNum(int n)
 37     {
 38         Num = n;
 39     }
 40     int getNum()
 41     {
 42         return Num;
 43     }
 44     friend class bookList;
 45 };
 46 class bookList
 47 {
 48     Book *Books;
 49     int curLen, maxLen;
 50 public:
 51     bookList(int len =20)
 52     {
 53         maxLen = len;
 54         curLen = 0;
 55         Books = new Book[maxLen];
 56     }
 57     ~bookList()
 58     {
 59         delete []Books;
 60     }
 61     void appendBook(char *nop, char *nap, int n)
 62     {
 63         if(curLen == maxLen)
 64         {
 65             Book *newBooks = new Book[maxLen+10];
 66             for(int i=0; i<curLen; i++)
 67                 *(newBooks+i)=*(Books+i);        //简单的浅拷贝
 68             delete []Books;
 69             Books = newBooks;
 70             maxLen += 10;
 71         }
 72         getBooks(curLen++).setInfo(nop, nap, n);
 73     }
 74     int isIn(char *bkNo)
 75     {
 76         for (int i=0; i<curLen; i++)
 77         {
 78             if(strcmp(getBooks(i).bookNo,bkNo)==0) return i;
 79         }
 80         return -1;
 81     }
 82     Book & getBooks(int i)
 83     {
 84         return *(Books+i);
 85     }
 86     void deleteBook(char *bkNo)
 87     {
 88             for (int i=isIn(bkNo); i<curLen-1; i++)
 89              *(Books+i) = *(Books +i +1);    //curLen 控制长度,最后一个不用管,有新数据时会将其覆盖
 90             curLen--;
 91     }
 92     void sortBooks()
 93     {
 94         int min;
 95         Book temp;
 96 
 97         for (int i=0; i<curLen-1; i++)
 98         {
 99             min = i;
100             for (int j=i+1; j<curLen; j++)
101                 if(strcmp(getBooks(min).bookNo, getBooks(j).bookNo)==1) min = j;
102             if (min != i)
103             {
104                 temp = getBooks(min);
105                 getBooks(min) = getBooks(i);
106                 getBooks(i) = temp;
107             }
108         }
109         cout << "按书号的升序排列了图书" << endl;
110     }
111     void showAll()
112     {
113         for (int i =0; i<curLen; i++)
114             getBooks(i).Show();
115     }
116     int curBookLen()
117     {
118         return curLen;
119     }
120     void setCurBookLen(int len)
121     {
122         curLen = len;
123     }
124     void initBookList()
125     {
126         readFromFile("bookdata.txt");
127     }
128     void readFromFile(char *filename)
129     {
130         int len;
131         char bkNo[20],bkName[20];
132         int Num;
133         ifstream infile(filename);
134         infile >> len;
135         for (int i=0; i<len; i++)
136         {
137             infile >> bkNo >> bkName >> Num;
138             appendBook(bkNo, bkName, Num);
139         }
140         infile.close();
141         cout << "从文件插入了" << len << "条记录" << endl;
142     }
143     void writeToFile(char *filename)
144     {
145         ofstream outfile(filename);
146         outfile << curLen << endl;
147         for (int i=0; i<curLen; i++)
148             getBooks(i).Print(outfile);
149         outfile.close();
150         cout << "向文件输出了" << curLen << "条记录" << endl;
151     }
152 };
153 void appendRecord(bookList &booksObj)
154 {
155     char bkNo[20], bkName[20];
156     int Num;
157 
158     cout << "    请输入新增书籍的书号、书名和数量:  ";
159     cin >> bkNo >> bkName >> Num;
160     booksObj.appendBook(bkNo, bkName, Num);
161 }
162 
163 void delRecord(bookList &booksObj)
164 {
165     char bkNo[20];
166     cout << "    请输入您要删除的书号:  ";
167     cin >> bkNo;
168     if (booksObj.isIn(bkNo) >-1) booksObj.deleteBook(bkNo);
169     else cout << "您要删除的书不存在" << endl;
170 }
171 
172 void showAll(bookList &booksObj)
173 {
174     booksObj.showAll();
175 }
176 
177 void query(bookList &booksObj)
178 {
179     char bkNo[20];
180     int i;
181 
182     cout << "请输入书号:  ";
183     cin >> bkNo;
184     if ((i=booksObj.isIn(bkNo))>-1)
185     {
186         cout << "该书为";
187         booksObj.getBooks(booksObj.isIn(bkNo)).Show();
188     }
189     else
190         cout << "没有该图书!" << endl;
191 }
192 
193 void addBooks(bookList &booksObj)
194 {
195     int i,Num, number;
196     char bkNo[20];
197 
198     cout << "请输入您要入库的书的书号和数量:  ";
199     cin  >> bkNo >> number;
200     if((i=booksObj.isIn(bkNo)) > -1)
201     {
202         Num = booksObj.getBooks(i).getNum();
203         booksObj.getBooks(i).setNum(Num+number);
204     }
205     else
206     {
207         cout << "该书不存在,请增加一条记录" << endl;
208         appendRecord(booksObj);
209     }
210 }
211 
212 void sellBooks(bookList &booksObj)
213 {
214     int i, Num, sell;
215     char bkNo[20];
216 
217     cout << "请输入您要销售书的书号、数量:  " << endl;
218     cin >> bkNo >> sell;
219 
220     if((i=booksObj.isIn(bkNo)) > -1)
221     {
222         Num = booksObj.getBooks(i).getNum();
223         if(Num<sell) cout << "库存不足" << endl;
224         else
225         {
226             booksObj.getBooks(i).setNum(Num-sell);
227             cout << "销售了" << sell << "本书" << endl;
228         }
229     }
230     else     cout << "该书不存在,请增加一条记录" << endl;
231 }
232 
233 void appendFromTxtFile(bookList &booksObj)
234 {
235     char filename[20];
236 
237     cout << "请输入文件名: ";
238     cin >> filename;
239     booksObj.readFromFile(filename);
240 }
241 
242 void writeToTxtFile(bookList booksObj)
243 {
244     char filename[20];
245 
246     cout << "请输入文件名:  ";
247     cin >> filename;
248     booksObj.writeToFile(filename);
249 }
250 
251 void sortByNo(bookList &booksObj)
252 {
253     booksObj.sortBooks();
254 }
255 
256 void deleteAll(bookList &booksObj)
257 {
258     booksObj.setCurBookLen(0);
259 }
260 
261 char Quit(bookList &booksObj)
262 {
263     char flag;
264 
265     cout << "Are you sure to quit? input y or n  :";
266     cin >> flag;
267     if(flag == 'y') booksObj.writeToFile("bookdata.txt");
268     return flag;
269 }
270 
271 int menu_select()
272 {
273     char *menu[11] = {
274         "1.    追加图书记录",
275         "2.    删除图书记录",
276         "3.    查询所有图书记录",
277         "4.    查询图书",
278         "5.    图书入库",
279         "6.    图书销售",
280         "7.    批量导入图书",
281         "8.    导出图书记录",
282         "9.    按书号排序",
283         "10.   删除全部图书记录",
284         "0.    退出"
285     };
286     int choice;
287     do{
288         system("cls");
289         cout << "                                图书库存管理系统" << endl << endl;
290         cout << "                       =================================" << endl;
291         for(int i=0; i<11; i++)
292             cout << "                             " << menu[i] << endl;
293         cout << "                       =================================" << endl;
294         cout << "请输入选择: ";
295         cin >> choice;
296     }while(choice<0 || choice>10);
297     return choice;
298 }
299 
300 int main()
301 {
302     bookList booksObj;
303     int sel;
304     booksObj.initBookList();
305 
306     for (;;)
307     {
308         switch(sel=menu_select())
309         {
310             case 1:appendRecord(booksObj);system("pause");break;
311             case 2:delRecord(booksObj);system("pause");break;
312             case 3:showAll(booksObj);system("pause");break;
313             case 4:query(booksObj);system("pause");break;
314             case 5:addBooks(booksObj);system("pause");break;
315             case 6:sellBooks(booksObj);system("pause");break;
316             case 7:appendFromTxtFile(booksObj);system("pause");break;
317             case 8:writeToTxtFile(booksObj);system("pause");break;
318             case 9:sortByNo(booksObj);system("pause");break;
319             case 10:deleteAll(booksObj);system("pause");break;
320             case 0:
321                 if(Quit(booksObj) != 'y') continue;
322         }
323         if(sel == 0) break;
324     }
325     return 0;
326 }

 

posted @ 2017-05-26 10:08  rvfu98  阅读(863)  评论(0)    收藏  举报