zoukankan      html  css  js  c++  java
  • 结构体 图书管理系统

      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
  • 相关阅读:
    Thinkphp中自己组合的数据怎样使用框架的分页
    CI框架不能有Index控制器
    购物车,修改数量错误
    TypeError: 'stepUp' called on an object that does not implement interface HTMLInputElement.
    OAuth2.0
    通过控制面板查看时间日志
    js再学习笔记
    Thinkphp验证码异步验证第二次及以后验证,验证错误----待解决
    cookie&&session再理解笔记
    markdown语法学习笔记
  • 原文地址:https://www.cnblogs.com/greenaway07/p/11509508.html
Copyright © 2011-2022 走看看