结构体 图书管理系统

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <string>
  4 #include <cstring>
  5 #include <fstream>
  6 #include <iomanip>
  7 #include <ctype.h>
  8 using namespace std;
  9 //定义结构体
 10 struct perbook{
 11     double price;
 12     char name[50];
 13     char isbn[15];
 14 }book[155];
 15 int cnt=0; 
 16 int ok=0;
 17 char title1[10],title2[10];    
 18 char Name[10],Isbn[10],Price[10];
 19 
 20 //1读入文件   T(n)=O(n) S(1) 
 21 void Input(){
 22     int i=0;
 23     fstream infile;
 24     infile.open("book.txt",ios::in);
 25     if(!infile){
 26         cout<<"打开失败!
"<<endl;
 27         exit(1);
 28     } 
 29     else{
 30         infile>>title1;
 31         cout<<"正在载入 "<<title1<<" 中——————"<<endl;
 32         infile>>Name>>Isbn>>Price;
 33         while(!infile.eof()){
 34             infile>>book[i].isbn>>book[i].name>>book[i].price;
 35             //    cout<<i<<" : "<<left<<setw(15)<<book[i].isbn<<setw(50)<<book[i].name<<"	"<<left<<setw(5)<<book[i].price<<endl;
 36             i++;
 37         }
 38     }
 39     cnt=i;//    cout<<"i="<<i<<endl;
 40     infile.close();
 41     cout<<"=========== 读入成功!=========
"<<endl;
 42     ok=1;
 43 }
 44 
 45 //2输出信息 T(n)=O(n) S(1) 
 46 void Output(){
 47     if(!ok){
 48         cout<<"		当前未录入图书信息,请先录入。
"<<endl; 
 49         exit(0);
 50     }
 51     else{
 52         cout<<title1<<endl;
 53         cout<<"位置	"<<left<<setw(15)<<Name<<"	"<<left<<setw(50)<<Isbn<<"	"<<left<<setw(5)<<Price<<endl;
 54         for(int i=0;i<cnt;i++)
 55         {
 56             cout<<i+1<<"	"<<left<<setw(15)<<book[i].isbn<<setw(50)<<book[i].name<<"	"<<left<<setw(5)<<book[i].price<<endl;
 57         }
 58         cout<<"		==========输出完毕=========
"<<endl; 
 59     }
 60 }
 61 
 62 //3计算图书总数 T(n)=O(1) S(1) 
 63 void Count(){
 64      cout<<"当前共有图书"<<cnt<<"本~
";
 65 }
 66 
 67 //4书名查找   T(n)=O(n) S(1) 
 68 void Locate(){
 69     char find[20];
 70     bool okk=false;
 71     cout<<"请输入书名: ";
 72     cin>>find;
 73     cout<<"位置	"<<left<<setw(15)<<Name<<"	"<<left<<setw(50)<<Isbn<<"	"<<left<<setw(5)<<Price<<endl;
 74     for(int i=0;i<cnt;++i)
 75     {
 76         if(strcmp(find,book[i].name)==0){
 77             cout<<i+1<<"	"<<left<<setw(15)<<book[i].isbn<<setw(50)<<book[i].name<<"	"<<left<<setw(5)<<book[i].price<<endl;
 78             okk=true;
 79         }
 80     }
 81     
 82     if(!okk)
 83     {
 84         cout<<"=====查无此书~对不起======
";
 85     }
 86     else{
 87         cout<<"=========以上是为您搜索到的同名图书。=========
"; 
 88     }
 89      
 90 }
 91 //5位置查找  T(n)=O(1) S(1) 
 92 void Get(){
 93     int finds;
 94     cout<<"请输入书的位置: ";
 95     cin>>finds;
 96     if(finds>=cnt)
 97     {
 98         cout<<"该位置不存在图书!请检查后重试
";
 99         exit(0); 
100     }
101     cout<<left<<setw(15)<<Name<<"	"<<left<<setw(50)<<Isbn<<"	"<<left<<setw(5)<<Price<<endl;
102     cout<<left<<setw(15)<<book[finds-1].isbn<<setw(50)<<book[finds-1].name<<"	"<<left<<setw(5)<<book[finds-1].price<<endl;
103     cout<<"=========以上是为您搜索到的同位图书。=========
"; 
104 }
105 //6指定位置插入图书信息  T(n)=O(n) S(1) 
106 void Insert(){
107     int locality;
108     struct perbook newbook;
109     cout<<"请输入您要插入的图书的位置:";
110     cin>>locality; cout<<endl; 
111     cout<<"请输入该图书的ISBN号:";
112     cin>>newbook.isbn; cout<<endl; 
113     cout<<"请输入该图书的书名:";
114     cin>>newbook.name; cout<<endl; 
115     cout<<"请输入该图书的单价:";
116     cin>>newbook.price; cout<<endl; 
117     cnt++; 
118     //先把后面的图书向后挪一位
119     for(int i=cnt-1;i>=locality-1;i--)
120     {
121         struct perbook temp;
122         temp=book[i];
123         book[i+1]=temp;
124     }
125     //插入新图书 
126     book[locality-1]=newbook;
127     cout<<"==========新图书信息插入成功======
";
128     
129 }
130 //7指定位置删除图书信息 T(n)=O(n) S(1) 
131 void Delete(){
132     int locality;
133     cout<<"请输入您要删除的图书的位置:";
134     cin>>locality;
135     cout<<endl;
136     for(int i=locality;i<cnt;i++)
137     {
138         book[i-1]=book[i];
139     }
140     cnt--; 
141     cout<<"==========图书信息删除成功======
";
142 }
143 //8根据定价排序  T(n)=O(nlogn) S(1) 
144 void Qsort(int low, int high){
145     if (high <= low) return;
146     int i = low;
147     int j = high + 1;
148     int key = book[low].price;
149     while (true)
150     {
151         while (book[++i].price < key)
152         {
153             if (i == high){
154                 break;
155             }
156         }
157         while (book[--j].price > key)
158         {
159             if (j == low){
160                 break;
161             }
162         }
163         if (i >= j) break;
164        perbook temp = book[i];
165        book[i] = book[j];
166        book[j] = temp;
167     }
168     perbook temp = book[low];
169     book[low] = book[j];
170     book[j] = temp;
171     Qsort(low, j - 1);
172     Qsort( j + 1, high);
173     
174 }
175 //9 求价格最高的图书信息 T(n)=O(n) S(1) 
176 void Max()
177 {
178     double expensive=0;
179     int exp[155];
180     int expcnt=0;
181     memset(exp,0,sizeof(exp)); 
182     for(int i=0;i<cnt;i++)
183     {
184         if(book[i].price>expensive)
185         {
186             expensive=book[i].price;
187             memset(exp,0,sizeof(exp));
188             expcnt=0;
189             exp[expcnt++]=i;
190         }
191         else if(book[i].price==expensive)
192         {
193             exp[expcnt++]=i;
194         }    
195     }
196     cout<<"位置	"<<left<<setw(15)<<Name<<"	"<<left<<setw(50)<<Isbn<<"	"<<left<<setw(5)<<Price<<endl;
197     for(int i=0;i<expcnt;i++)    
198         cout<<exp[i]<<"	"<<left<<setw(15)<<book[exp[i]].isbn<<setw(50)<<book[exp[i]].name<<"	"<<left<<setw(5)<<book[exp[i]].price<<endl;
199     cout<<"		==========输出完毕=========
"<<endl; 
200 }
201 
202 //10 逆序存储图书信息 T(n)=O(n) S(1) 
203 void Inverse()
204 {
205     if(!ok)
206     {
207         cout<<"		当前未录入图书信息,请先录入。
"<<endl; 
208         exit(0);
209     }
210     for(int i=0;i<cnt/2;i++)
211     {
212         perbook temp;
213         temp=book[i];
214         book[i]=book[cnt-i-1];
215         book[cnt-i-1]=temp;
216     }
217     cout<<"===========逆序存储成功===========
";
218     //是否需要查看逆序存储结果
219     cout<<"是否需要查看逆序存储结果?请输入(Y/N):";
220     char op;
221     cin>>op;
222     op=toupper(op);
223     if(op=='Y')
224     {
225         Output();
226     }
227     else{
228         cout<<"您已安全结束本次操作!
";
229     }
230     
231 } 
232 int main(){  
233     int op;
234     while(1){
235         cout<<"
=========================欢迎使用北林图书信息管理系统(beta 1.0)=======================
";
236         cout<<"=======================请根据对应编号输入数字并按回车即可执行功能=======================
";
237         cout<<"		1.导入图书信息文件		2.输出所有图书信息
";
238         cout<<"		3.获取图书总数			4.输入书名获取位置及其他图书信息
";
239         cout<<"		5.输入图书位置获取图书信息	6.插入新的图书信息
";
240         cout<<"		7.输入图书位置删除图书信息	8.根据价格升序重排图书信息
";
241         cout<<"		9.求价格最高的图书信息		10.逆序存储图书信息
";
242         cout<<"		11.退出
"<<endl;
243         cout<<"输入命令数字:";
244         cin>>op;
245         cout<<endl;
246         switch(op){
247             case 1:Input();break;//输入 
248             case 2:Output();break;//输出 
249             case 3:Count();break;//返回计数 
250             case 4:Locate();break;//书名查找 
251             case 5:Get();break;//位置查找 
252             case 6:Insert();break;//插入 【beta1.0采用结构体数组】 
253             case 7:Delete();break;//删除 
254             case 8:{
255                         Qsort(0,cnt-1);
256                         cout<<"======================排序成功===============
"; }break; //价格排序 【beta1.0采用快速排序】 
257             case 9:Max();break;//最高价格 
258             case 10:Inverse();break;    //倒序存储    
259             case 11:cout<<"	退出成功,再见~";exit(0);
260         }
261     }
262     return 0;
263 }
View Code
原文地址:https://www.cnblogs.com/greenaway07/p/11509508.html