数据结构实训——图书管理系统

来源:互联网 发布:rpc动态端口 编辑:程序博客网 时间:2024/05/01 23:38
/************************************************************ 版权所有 (C)** 文件名称: main.cpp* 文件标识:无* 内容摘要:函数文件* 其它说明:各个模块函数* 当前版本: V5.0* 作 者:程德泉* 完成日期: 20161227***********************************************************/#include "Library.h"int X[100];            //暂存数组int xer=0;             //暂存标记RecType R[MaxSize];    //哈希数组Book *H;               //图书链表int main(){    FILE *fpb1,*fpb2;             //文件指针    Book *p1,*p2,*s1;    H=Init_B();    fpb1=fopen("book.txt","rb");               //读方式打开图书文件    if(fpb1!=NULL)    {        p1=(Book *)malloc(sizeof(Book));        if(!p1) exit(1);        p1->next=NULL;        while(fread(p1,sizeof(Book),1,fpb1)==1)        {            if(H->next==NULL)            {                H->next=p1;                s1=p1;            }            else            {                s1->next=p1;                s1=p1;            }            p1=(Book *)malloc(sizeof(Book));            if(!p1) exit(1);            p1->next=NULL;        }    }       int m,n;    while(m!=0)    {        Face();        cin>>m;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;        if(m==1)        {            FaceBook();            cin>>n;            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;            switch(n)            {            case 1:                BookAdd(H);                break;           //增加图书            case 2:                    BookSearch(H);                break;        //查询图书            case 3:                BookDel(H);                break;           //删除图书            case 4:                BookPai(H);                break;           //排序图书                case 5:                BookChange(H);                break;//修改图书信息            case 0:                break;                       //退出图书管理,返回上一层菜单            }        }                else if(m==0)        {            cout<<endl<<"┅┅┅┅┅┅┅┅┅┅┅┅┅感谢使用本系统,再见!┅┅┅┅┅┅┅┅┅┅┅┅"<<endl;            fpb2=fopen("book.txt","wb");            for(p2=H->next; p2!=NULL; p2=p2->next)                fwrite(p2,sizeof(Book),1,fpb2);            fclose(fpb2);                                  exit(0);        }    }    return 0;}

Library.h

/************************************************************ 版权所有 (C)2016** 文件名称: Library.h* 文件标识:无* 内容摘要:函数文件* 其它说明:各个模块函数* 当前版本: V5.0* 作 者:程德泉* 完成日期: 20161227***********************************************************/#ifndef MY_H_FILE#define MY_H_FILE#include <iostream>using namespace std;#include <cstdlib>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fstream>#include <iomanip>#define MaxSize 100              //100条记录typedef char InfoType[10];typedef struct          //记录类型{    int key;        //关键字项} RecType;              //排序的记录类型定义//书的结构体typedef struct book{    float price;                //图书单价    char name[80];              //图书名    long num;                   //图书编号    char writername[20];        //作者姓名    char publish[40];           //出版社名称    struct book *next;          //结点指针} Book,*BookList;//界面void Face();void FaceBook();void FaceBookSearh();void FaceDu();void FaceDuSearh();//初始化Book *Init_B();                             //初始化图书链表int BookAdd(BookList &);                    //建立一个带头结点的链表用来存储图书信息//查询图书方式int BookSearch(BookList &);                 //图书查询菜单int Search_BookNum(BookList &);             //按编号查询int Search_BookName(BookList &);            //按书名查询int Search_BookWritername(BookList &);      //按作者名查询int Search_Publish(BookList &);             //按出版社查询int Search_AllB(BookList &);                //查询所有图书信息//删除图书int BookDel(BookList &);                    //以图书编号作为主键进行删除//修改图书信息int BookChange(BookList &);   //排序函数int BookPai(BookList &);void ShellSort(RecType [],int);//全局变量声明extern RecType R[MaxSize];extern int xer;extern int X[100];#endif

Library.cpp

/************************************************************ 版权所有 (C)** 文件名称: Library.cpp* 文件标识:无* 内容摘要:函数文件* 其它说明:各个模块函数* 当前版本: V5.0* 作 者:程德泉* 完成日期: 20161227***********************************************************/#include "Library.h"/********************************************************** 功能描述:初试化图书链表* 输入参数:无* 输出参数:无* 返回值  :图书链表* 其它说明:无************************************************************/Book *Init_B()                  //初试化图书链表{    Book *H;    H=(Book *)malloc(sizeof(Book));    if(!H) exit(1);    H->next=NULL;    return H;}/********************************************************** 功能描述:图书编号排序* 输入参数:无* 输出参数:无* 返回值  :无* 其它说明:希尔排序算法************************************************************/void ShellSort(RecType R[],int n)   //希尔排序算法{    int i,j,gap;    RecType tmp;    gap=n/2;                //增量置初值    while (gap>0)    {        for (i=gap; i<n; i++) //对所有相隔gap位置的所有元素组进行排序        {            tmp=R[i];            j=i-gap;            while (j>=0 && tmp.key<R[j].key)//对相隔gap位置的元素组进行排序            {                R[j+gap]=R[j];                j=j-gap;            }            R[j+gap]=tmp;            j=j-gap;        }        gap=gap/2;  //减小增量    }}/********************************************************** 功能描述:新建图书* 输入参数:X[xer]-图书编号* 输出参数:是否成功增加* 返回值  :(1)* 其它说明:无************************************************************/int BookAdd(BookList &H)        //建立一个带头结点的链表用来存储图书信息{    int i=0;                    //统计要增加的图书量    Book *p,*q,*s;    p=(Book *)malloc(sizeof(Book));    if(!p) exit(1);    if(H->next==NULL)    {        cout<<"                        ○输入图书编号:";        cin>>p->num;        X[xer]=p->num;        if(p->num==0)           //退出"增加图书"        {            cout<<"                                                   共计"<<i<<"本图书入库!"<<endl;            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;            return 1;        }             cout<<"                        ○输入书名:";        cin>>p->name;        cout<<"                        ○输入图书价格:";        cin>>p->price;        cout<<"                        ○输入作者姓名:";        cin>>p->writername;        cout<<"                        ○输入出版社名称:";        cin>>p->publish;        p->next=NULL;        H->next=p;        q=p;        ++i;        cout<<endl<< X[xer];        xer++;    }    else    {        q=H;        while(q->next!=NULL)            q=q->next;        p->num=1;                      //进入循环的条件        p->next=NULL;    }    while(p->num!=0)                   //以图书编号作为判断链表是否结束    {        p=(Book *)malloc(sizeof(Book));        if(!p) exit(1);        cout<<"                        ○输入图书编号:";        cin>>p->num;        //希尔数组的加入        X[xer]=p->num;        if(p->num==0)                  //退出"增加图书"        {            cout<<"                                                    共计"<<i<<"本图书入库!"<<endl;            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;            break;        } for(s=H->next; s!=NULL; s=s->next)            if(p->num==s->num)            {                cout<<"                           ≮此编号已被注册!≯                           "<<endl;                cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;                return 1;            }        cout<<"                        ○输入书名:";        cin>>p->name;        cout<<"                        ○输入图书价格:";        cin>>p->price;        cout<<"                        ○输入作者姓名:";        cin>>p->writername;        cout<<"                        ○输入出版社名称:";        cin>>p->publish;        p->next=NULL;        q->next=p;        q=p;        ++i;        //希尔数组的加入        cout<<endl<< X[xer];        xer++;    }    return 1;}/********************************************************** 功能描述:查询图书* 输入参数:n-书的编号* 输出参数:查询的相应信息* 返回值  :(1)* 其它说明:按编号查询************************************************************///查询图书方式int Search_BookNum(BookList &H)             //按编号查询{    Book *p;    p=H->next;    long n;    int flag=0;    cout<<"                        ○输入要查询的书的编号:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(n==p->num)        {            if(flag==0)                cout<<endl<<"书名       编号        单价        作者        出版社       "<<endl;            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;            flag=1;            continue;        }    }    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    if(p==NULL&&flag==0)    {        cout<<"                        ※没有相关信息※!"<<endl;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}/********************************************************** 功能描述:查询图书* 输入参数:n-要查询的书名* 输出参数:要查询书的信息* 返回值  :(1)* 其它说明:按书名查询************************************************************/int Search_BookName(BookList &H)            //按书名查询{    Book *p;    p=H->next;    char n[80];    int flag=0;    cout<<"                           ○输入要查询的书名:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(strcmp(p->name,n)==0)        {            if(flag==0)                cout<<endl<<"书名       编号        单价        作者        出版社       "<<endl;            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;                  flag=1;            continue;        }    }    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    if(p==NULL&&flag==0)    {        cout<<"                          ※没有相关信息!※"<<endl;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}/********************************************************** 功能描述:查询图书* 输入参数:n-书的作者名* 输出参数:查询的相应信息* 返回值  :(1)* 其它说明:按作者名查询************************************************************/int Search_BookWritername(BookList &H)      //按作者名查询{    Book *p;    p=H->next;    int flag=0;    char n[30];    cout<<"                        ○输入要查询的书的作者名:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(strcmp(p->writername,n)==0)        {            if(flag==0)                cout<<endl<<"书名       编号        单价        作者        出版社     "<<endl;            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;                   flag=1;            continue;        }    }    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    if(p==NULL&&flag==0)    {        cout<<"                         ※没有相关信息!※"<<endl;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}/********************************************************** 功能描述:查询图书* 输入参数:n-书的出版社* 输出参数:查询的相应信息* 返回值  :(1)* 其它说明:按出版社查询************************************************************/int Search_Publish(BookList &H)             //按出版社查询{    Book *p;    p=H->next;    int flag=0;    char n[50];    cout<<"                           ○输入要查询的书的出版社名称:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(strcmp(p->publish,n)==0)        {            if(flag==0)                cout<<endl<<"书名       编号        单价        作者        出版社      "<<endl;            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;                      flag=1;            continue;        }    }    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    if(p==NULL&&flag==0)    {        cout<<"                         ※没有相关信息!※"<<endl;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}/********************************************************** 功能描述:查询图书* 输入参数:无* 输出参数:图书信息* 返回值  :(1)* 其它说明:显示所有信息************************************************************/int Search_AllB(BookList &H)               //查询所有图书信息{    Book *p;    p=H->next;    int i=0,flag=0;    for(; p!=NULL; p=p->next)    {        if(flag==0)            cout<<endl<<"书名       编号        单价        作者        出版社     "<<endl;        cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;          flag=1;        i++;    }    cout<<"                                                         共计"<<i<<"本书。"<<endl;    cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    return 1;}/********************************************************** 功能描述:查询图书选择模块* 输入参数:0-4* 输出参数:相应界面* 返回值  :(1)* 其它说明:0是退出************************************************************/int BookSearch(BookList &H){    int m;    while(m!=0)    {        FaceBookSearh();        cin>>m;        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;        switch(m)        {        case 1:            Search_BookName(H);            break;        //按书名查询        case 2:            Search_BookNum(H);            break;         //按编号查询        case 3:            Search_BookWritername(H);            break;  //按作者名查询        case 4:            Search_Publish(H);            break;         //按出版社查询        case 5:            Search_AllB(H);            break;            //查询所有图书信息        case 0:            break;                            //退出        }    }    return 1;}/********************************************************** 功能描述:删除图书* 输入参数:n-删除的书的编号* 输出参数:是否删除* 返回值  :(1)* 其它说明:按图书编号删除**********************************************************///删除图书int BookDel(BookList &H)                           //图书编号{    Book *p;    long n;    int flag=0;    p=H;    cout<<"                           ○输入要删除的书的编号:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(p->next!=NULL&&p->next->num==n)        {            p->next=p->next->next;            //删除语句            cout<<"                              √成功删除!"<<endl;            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;            flag=1;                                 break;        }    }    if(p==NULL&&flag==0)    {        cout<<"                               不存在此书!"<<endl;                   cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}/********************************************************** 功能描述:修改图书* 输入参数:修改的书的编号* 输出参数:是否修改成功* 返回值  :(1)* 其它说明:按图书编号修改************************************************************///修改图书信息int BookChange(BookList &H)                           //以图书编号进行修改{    Book *p;    long n;    int m=0;    p=H;    cout<<"                           ○输入要修改的书的编号:";    cin>>n;    for(; p!=NULL; p=p->next)    {        if(p->num==n)        {            m=1;             cout<<"以下为要修改的图书:"<<endl<<"书名       编号        单价        作者        出版社     "<<endl;            cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;                       cout<<"                       请输入相应修改数据"<<endl;            cout<<"                        ○输入编号:";            cin>>p->num;            cout<<"                        ○输入书名:";            cin>>p->name;            cout<<"                        ○输入图书价格:";            cin>>p->price;            cout<<"                        ○输入作者姓名:";            cin>>p->writername;            cout<<"                        ○输入出版社名称:";            cin>>p->publish;            cout<<"                              √成功修改!"<<endl;            cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;                                                  break;        }    }    if(p==NULL&&m==0)    {        cout<<"                               修改失败,没有这本书!"<<endl;           //没有这本书        cout<<"┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈"<<endl;    }    return 1;}\/********************************************************** 功能描述:实现编号排序* 输入参数:无* 输出参数:排序后的编号* 返回值  :(1)* 其它说明:希尔排序************************************************************/int BookPai(BookList &H){    Book *p;    p=H->next;    int i;    for(i=0; i<xer; i++)        R[i].key=X[i];    cout<<"排序前:"<<endl;    for(; p!=NULL; p=p->next)    {        cout<<endl<<"书名       编号        单价        作者        出版社     "<<endl;        cout<<" "<<p->name<<"  "<<setw(10)<<p->num<<setw(12)<<p->price<<setw(11)<<p->writername<<setw(13)<<p->publish<<endl;          }    ShellSort(R,xer);    cout<<"排序后编号:"<<endl;    for(i=0; i<xer; i++)        cout<<R[i].key<<endl;    return 1;}/********************************************************** 功能描述:欢迎界面* 输入参数:无* 输出参数:无* 返回值  :无* 其它说明:界面1************************************************************/void Face(){    system("color 74");    cout<<endl<<"   ——————————— 欢迎进入图书管理系统 —————————"<<endl;    cout<<endl<<"           ◥◤~~~~◥◤        ┏━━━━━━━━━━━━━━━━━━┓"<<endl;    cout<<"                                    ┃                                    ┃"<<endl;    cout<<"         ┃          ┃         ┃           ◆1◆ 管理图书           ┃"<<endl;cout<<"                                    ┃                                    ┃"<<endl;cout<<"           ≡━ ﹏ ━≡           ┃                                    ┃"<<endl;    cout<<"                                    ┃           ◆0◆ 退出系统           ┃"<<endl;    cout<<"         ┗━━┳∞┳━━┛         ┃                                    ┃"<<endl;    cout<<"             ┏┫ ┣┓             ┗━━━━━━━━━━━━━━━━━━┛"<<endl;    cout<<"                                             →请输入您的选择:";}/********************************************************** 功能描述:图书查询界面* 输入参数:无* 输出参数:无* 返回值  :无* 其它说明:界面2************************************************************/void FaceBookSearh(){    cout<<"                          ◢━━━━━━━━━━━◣"<<endl;    cout<<"                          ┃#欢迎进入图书查询系统#┃"<<endl;    cout<<"                          ◥━━━━━━━━━━━◤"<<endl;    cout<<"      ┌──────────────┐ "<<endl;    cout<<"      │ ① 按书名查询 ----- (NAM) #│ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ② 按编号查询 ----- (NUM) #│ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ③ 按作者名查询 --- (SEX) #│ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ④ 按出版社查询 --- (ALL) #│ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ⑤ 查询所有信息 --- (TIME)#│ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │  0. 退   出 ------- (ESC) #│ "<<endl;    cout<<"      └──────────────┘ "<<endl;    cout<<"                           →请在此输入您的选择:";}/********************************************************** 功能描述:图书管理界面* 输入参数:无* 输出参数:无* 返回值  :无* 其它说明:界面1************************************************************/void FaceBook(){    cout<<"                         ◢━━━━━━━━━━━◣"<<endl;    cout<<"                         ┃#欢迎进入图书管理系统#┃"<<endl;    cout<<"                         ◥━━━━━━━━━━━◤"<<endl;    cout<<"      ┌──────────────┐ "<<endl;    cout<<"      │ ① 增加图书 ----- (ADD) #  │ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ② 查询图书 ----- (SEA) #  │ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ③ 删除图书 ----- (DEL) #  │ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ④ 排序图书 ----- (SORT)#  │ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │ ⑤ 修改图书 ----- (CHAB)#  │ "<<endl;    cout<<"      ├──────────────┤ "<<endl;    cout<<"      │  0. 退   出 ----- (ESC) #  │ "<<endl;    cout<<"      └──────────────┘ "<<endl;    cout<<"                           →请在此输入您的选择:";}


运行结果:






0 0
原创粉丝点击