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

      1 #include <iostream>
      2 #include <fstream>
      3 #include <iomanip>
      4 #include <string>
      5 #include <cstring>
      6 #define ERROR 0
      7 #define OK 1
      8 #define MaxSize 1000000
      9 using namespace std;
     10 typedef int Status;
     11 typedef struct
     12 {
     13     string no;
     14     string name;
     15     int price;
     16 }ElemType;
     17 typedef struct
     18 {
     19     ElemType *elem;
     20     int length;
     21 }SqList;
     22 SqList L;
     23 
     24 Status InitList(SqList &L)//顺序表初始化 
     25 {
     26     L.elem=new ElemType[MaxSize];
     27     if(!L.elem) return ERROR;
     28     
     29     L.length=0;
     30     return OK;
     31 }
     32 
     33 void Menu()//菜单选项 
     34 {
     35     cout<<endl;
     36     cout<<"               1.从文件中读入数据到顺序表"<<endl;
     37     cout<<"               2.遍历顺序表"<<endl;
     38     cout<<"               3.查找"<<endl;
     39     cout<<"               4.插入"<<endl;
     40     cout<<"               5.删除"<<endl;
     41     cout<<"               6.修改"<<endl;
     42     cout<<"               7.排序:对图书价格升序排列"<<endl;
     43     cout<<"请选择功能选项:";
     44 }
     45 
     46 Status ReadFromFile(SqList &L,char *filename)//1.从文件读入数据到顺序表 
     47 {
     48     ifstream infile(filename,ios::in);
     49     if(!infile) return ERROR;
     50     
     51     while(!infile.eof())
     52     {
     53         infile>>L.elem[L.length].no;
     54         infile>>L.elem[L.length].name;
     55         infile>>L.elem[L.length].price;
     56         L.length++;
     57     }
     58     infile.close();
     59     return OK;
     60 }
     61 
     62 Status ListPrint(SqList &L)//2.遍历顺序表输出 
     63 {
     64     if(!L.length) return ERROR;
     65     
     66     cout<<left<<setw(18)<<"ISBN"<<left<<setw(24)<<"书名"<<"定价"<<endl;
     67     for(int i=0;i<=L.length-1;i++) cout<<left<<setw(18)<<L.elem[i].no<<left<<setw(24)<<L.elem[i].name<<left<<setw(24)<<L.elem[i].price<<endl;
     68     
     69     return OK;
     70 }
     71 
     72 int LocateElem(SqList &L,string s)//3.查找,返回元素位置序号 
     73 {
     74     for(int i=0;i<=L.length-1;i++) if(L.elem[i].name==s || L.elem[i].no==s) return i+1;
     75     return 0;
     76 }
     77 
     78 Status ListInsert(SqList &L,int i,ElemType e)//4.插入元素 
     79 {
     80     if(i<1 || i>L.length+1) return ERROR;
     81     if(L.length==MaxSize) return OK;
     82     for(int k=0;k<=L.length-1;k++) if(L.elem[k].no==e.no && L.elem[k].name==e.name && L.elem[k].price==e.price) return ERROR; 
     83     
     84     for(int j=L.length-1;j>=i-1;j--) L.elem[j+1]=L.elem[j];
     85     L.elem[i-1]=e;
     86     L.length++;
     87     return OK;
     88 }
     89 
     90 Status ListDelete(SqList &L,string s)//5.删除元素 
     91 {
     92     int i=LocateElem(L,s);
     93     if(!i) return ERROR;
     94     
     95     i--;
     96     for(int j=i;j<=L.length-1;j++) L.elem[j]=L.elem[j+1];
     97     L.length--;
     98     return OK;
     99 } 
    100 
    101 Status ListChange(SqList &L,string s,ElemType e)//6.修改元素 
    102 {
    103     int i=LocateElem(L,s);
    104     if(!i) return ERROR;
    105     
    106     i--;
    107     L.elem[i]=e;
    108     return OK;
    109 }
    110 
    111 int Partition(SqList &L,int left,int right)//快速排序,对图书价格升序排列
    112 {
    113     ElemType Temp=L.elem[left];
    114     int temp=L.elem[left].price;
    115     while(left<right)
    116     {
    117         while(left<right && L.elem[right].price>=temp) right--;
    118         L.elem[left]=L.elem[right];
    119         while(left<right && L.elem[left].price<=temp) left++;
    120         L.elem[right]=L.elem[left];
    121     }
    122     L.elem[left]=Temp;
    123 
    124     return left;
    125 }
    126 void QSort(SqList &L,int left,int right)
    127 {
    128     int pivotloc=0;
    129     if(left<right)
    130     {
    131         pivotloc=Partition(L,left,right);//移动并获取枢轴位置
    132         QSort(L,left,pivotloc-1);//递归左子序列
    133         QSort(L,pivotloc+1,right);//递归右子序列
    134     }
    135 }
    136 
    137 int main()
    138 {
    139     int f=InitList(L);
    140     if(!f) 
    141     {
    142         cout<<"顺序表初始化失败!"<<endl;
    143         return 0;
    144     }
    145     else
    146     {
    147         cout<<"顺序表初始化成功!"<<endl; 
    148     }
    149     
    150     Menu();
    151     int choose;
    152     while(cin>>choose)
    153     {
    154         if(choose==1)
    155         {
    156             int ans=ReadFromFile(L,"afile.txt");
    157             if(!ans) cout<<"读入数据失败,文件不能被打开!"<<endl;
    158             else cout<<"读入数据成功!"<<endl; 
    159         }
    160         else if(choose==2)
    161         {
    162             int ans=ListPrint(L);
    163             if(!ans) cout<<"顺序表中没有元素!"<<endl;
    164         }
    165         else if(choose==3)
    166         {
    167             cout<<"请输入要查找的书名或其ISBN"<<endl;
    168             string s;
    169             cin>>s;
    170             
    171             int ans=LocateElem(L,s);
    172             if(!ans) cout<<"未找到该元素!"<<endl;
    173             else cout<<"该元素位置序号为"<<ans<<endl; 
    174         }
    175         else if(choose==4)
    176         {
    177             cout<<"请输入要插入的位置(1=<插入位置<=length+1)"<<endl;
    178             int pos;
    179             cin>>pos; 
    180             cout<<"请输入要插入的元素信息"<<endl;
    181             ElemType e;
    182             cin>>e.no>>e.name>>e.price;
    183             
    184             int ans=ListInsert(L,pos,e);
    185             if(!ans) cout<<"元素插入失败,请检查插入位置是否合法,元素是否已经存在,或空间是否已满!"<<endl;
    186             else cout<<"元素插入成功!"<<endl; 
    187         }
    188         else if(choose==5)
    189         {
    190             cout<<"请输入要删除书籍的ISBN"<<endl;
    191             string s;
    192             cin>>s;
    193             
    194             int ans=ListDelete(L,s);
    195             if(!ans) cout<<"元素删除失败,请检查该元素是否存在!"<<endl;
    196             else cout<<"元素删除成功!"<<endl;
    197         }
    198         else if(choose==6)
    199         {
    200             cout<<"请输入要修改书籍的ISBN"<<endl;
    201             string s;
    202             cin>>s;
    203             cout<<"请输入想要修改成的元素信息!"<<endl;
    204             ElemType e;
    205             cin>>e.no>>e.name>>e.price;
    206             
    207             int ans=ListChange(L,s,e);
    208             if(!ans) cout<<"元素修改失败,请检查该元素是否存在!"<<endl;
    209             else cout<<"元素修改成功!"<<endl;
    210         }
    211         else if(choose==7)
    212         {
    213             QSort(L,0,L.length-1);
    214             cout<<"元素按价格升序排序成功!"<<endl;
    215 
    216             int ans=ListPrint(L);
    217             if(!ans) cout<<"顺序表中没有元素!"<<endl;
    218         }
    219         else cout<<"输入错误,请重新输入!"<<endl;
    220         
    221         Menu();
    222     }
    223         
    224     return 0;
    225 }

    完。

  • 相关阅读:
    css中盒模型的理解与整理
    Java从入门到精通——数据库篇Mongo DB GridFS文件系统
    Java从入门到精通——数据库篇Mongo DB 导出,导入,备份
    Java从入门到精通——数据库篇Mongo DB 安装启动及配置详解
    MySQL基于mysqldump快速搭建从库
    Linux下C语言操作MySQL数据库
    html dl dt dd 标签语法与使用
    人的一切痛苦,本质上都是对自己的无能的愤怒
    游泳健康好处多
    从疲劳到猝死只需6步!
  • 原文地址:https://www.cnblogs.com/redblackk/p/9670490.html
Copyright © 2011-2022 走看看