C++实现图书信息管理系统

本文实例为大家分享了C++实现图书信息管理系统的具体代码,供大家参考,具体内容如下

1.题目:

类型有:编号:ISBN
书名:name
价格:price

完成如下的功能:

①录入:从键盘输入(或从文件读入)图书(或学生)信息表的各个数据元素;
②查找:可按不同属性查找所有等于给定值的数据元素,找到并返回它们在表中的位序;
③插入:在表中第i(1=<i<=N+1)个位置插入一个新元素;
④删除:可删除表中第i(1=<i<=N)个位置上的元素;
⑤输出:依次打印表中的各个元素的值;
⑥排序:可按某属性对表中的元素进行排序。(可选)

2.实现方式:单链表(带头节点)

3.代码实现:

#include <iostream>
#include <string>
using namespace std;

struct Node
{
    int ISBN;//编号
    string name;//书名
    float price;//定价
    Node *next;
};

//操作类
class Link
{
private:
    int number;//图书数量
    Node *head;
public:
    Link(int a):number(a){}
    ~Link(){delete head;}
    void create_node();//创建
    void select();//功能选择
    int find_node(int i);//按照编号查找
    int find_node(string n);//按照书名查找
    int find_node(float p);//按照价格查找
    int insert_node(int pos);//插入
    int delete_node(int d);//删除
    int mod_node(int d);//修改
    void sort_node_ISBN();//按照编号排序
    void sort_node_price();//按照价格排序
    int get_node();//计数总数
    void print();//打印操作
};

void Link::create_node()
{
    Node *pnew;
    head = new Node;
    //cout<<"请按顺序输入图书的ISBN,书名,定价";
    head->ISBN = 0;
    head->name = 'n';
    head->price = 0;
    head->next = NULL;
    Node *ptemp = head;
    for(int i=0;i<number;i++)
    {
        pnew = new Node;
        cout<<endl;
        cout<<"请按顺序输入图书的ISBN,书名,定价:";
        cin>>pnew->ISBN>>pnew->name>>pnew->price;
        pnew->next = NULL;
        ptemp->next = pnew;
        ptemp = pnew;
    }
}

//按编号查找
int Link::find_node(int i)
{
    Node *ptemp = head->next;
    for(int count = 0;count<number;count++)
        {
            if(ptemp->ISBN == i)//按编号查找图书
            {
                cout<<"图书的编号为:"<<ptemp->ISBN<<"     书名为:"<<ptemp->name<<"       定价为:"<<ptemp->price<<endl;
                return 1;
            }
            ptemp = ptemp->next;
        }
        return 0;
}

//按照书名查找
int Link::find_node(string n)
{
    Node *ptemp = head->next;
    for(int count=0;count<number;count++)
        {
            if(ptemp->name == n)
            {
                cout<<"图书的编号为:"<<ptemp->ISBN<<"     书名为:"<<ptemp->name<<"       定价为:"<<ptemp->price<<endl;
                return 1;
            }
            ptemp = ptemp->next;
        }
        return 0;
}

//按照价格查找
int Link::find_node(float p)
{
    Node *ptemp = head->next;
    for(int count=0;count<number;count++)
        {
            if(ptemp->price == p)
            {
                cout<<"图书的编号为:"<<ptemp->ISBN<<"     书名为:"<<ptemp->name<<"       定价为:"<<ptemp->price<<endl;
                return 1;
            }
            ptemp = ptemp->next;
        }
    return 0;
}

//插入
int Link::insert_node(int pos)
{
    if((pos > number)||(pos<0))
    {
        cout<<"插入位置错误!"<<endl;
        return 0;
    }
    else
    {
        Node *ptemp = head,*pnew;
        for(int i=0;i<pos-1;i++)
        {
            ptemp = ptemp->next;
        }
        pnew = new Node;
        cout<<"请按顺序输入图书的ISBN,书名,价格:";
        cin>>pnew->ISBN>>pnew->name>>pnew->price;
        pnew->next = ptemp->next;
        ptemp->next = pnew;
        number += 1;
    }
    return 1;

}

//删除
int Link::delete_node(int d)
{
    if((d > number)||(d<0))
    {
        cout<<"删除位置错误!"<<endl;
        return 0;
    }
    else
    {
        Node *ptemp = head,*pdelete;
        for(int i=0;i<d-1;i++)
        {
            ptemp = ptemp->next;
        }
        pdelete = ptemp->next;
        ptemp->next = pdelete->next;
        delete pdelete;
        number -= 1;
    }
    return 1;
}

//修改
int Link::mod_node(int d)
{
    int aa;
    string bb;
    float cc;
    if((d > number)||(d<0))
    {
        cout<<"要修改的位置错误!"<<endl;
        return 0;
    }
    else
    {
        Node *ptemp = head->next;
        for(int i=0;i<d-1;i++)
        {
            ptemp = ptemp->next;
        }
        cout<<"要修改编号请输入0,要修改书名请输入1,要修改价格请输入2:";
        int k;
        cin>>k;
        switch(k)
        {
        case 0:
            cout<<"请输入要修改的编号:";
            cin>>aa;
            ptemp->ISBN = aa;
            cout<<endl;
            break;
        case 1:
            cout<<"请输入要更改的书名:";
            cin>>bb;
            ptemp->name = bb;
            cout<<endl;
            break;
        case 2:
            cout<<"请输入要更改的价格:";
            cin>>cc;
            ptemp->price = cc;
            cout<<endl;
            break;
        }
    }
    return 1;
}

//按编号排序
void Link::sort_node_ISBN()
{
    Node *ptemp = head->next,*pre;
    Node *pr = ptemp->next;
    ptemp->next = NULL;
    ptemp = pr;
    while(ptemp != NULL)
    {
        pr = ptemp->next;
        pre = head;
        while(pre->next != NULL && pre->next->ISBN > ptemp->ISBN)
        {
            pre = pre->next;
        }
        ptemp->next = pre->next;
        pre->next = ptemp;
        ptemp = pr;
    }
    Link::print();
}

//按照价格排序
void Link::sort_node_price()
{
    Node *ptemp = head->next,*pre;
    Node *pr = ptemp->next;
    ptemp->next = NULL;
    ptemp = pr;
    while(ptemp != NULL)
    {
        pr = ptemp->next;
        pre = head;
        while(pre->next != NULL && pre->next->price > ptemp->price)
        {
            pre = pre->next;
        }
        ptemp->next = pre->next;
        pre->next = ptemp;
        ptemp = pr;
    }
     Link::print();
}

//获取长度
int Link::get_node()
{
    return number;
}

//打印输出
void Link::print()
{
    Node *ptemp = head->next;
    for(int k=0;k<number;k++)
    {
        cout<<"图书编号:"<<ptemp->ISBN<<"       书名为:"<<ptemp->name<<"       价格为:"<<ptemp->price<<endl;
        ptemp = ptemp->next;
    }
}

//功能函数
void Link::select()
{
    int a;//ISBN
    string b;//书名
    float c;//定价
    int d;//位置
    int p;//选择功能
    cin>>p;
    switch(p)
    {
    case 0:
        cout<<"请输入图书的编号";
        cin>>a;
        if(this->find_node(a))
        {
            cout<<endl;
        }
        else
            cout<<"该图书不存在!"<<endl;
        break;
    case 1:
        cout<<"请输入图书的名字:";
        cin>>b;
        if(this->find_node(b))
        {
            cout<<endl;
        }
        else
            cout<<"该图书不存在!"<<endl;
        break;
    case 2:
        cout<<"请输入图书的价格:";
        cin>>c;
        if(this->find_node(c))
        {
            cout<<endl;
        }
        else
            cout<<"该图书不存在!"<<endl;
        break;
    case 3:
        cout<<"请输入要插入的位置:";
        cin>>d;
        if(this->insert_node(d))
        {
            cout<<"插入操作的结果为:"<<endl;
            this->print();//打印插入结果
        }
        break;
    case 4:
        cout<<"请输入要删除的位置:";
        cin>>d;
        if(this->delete_node(d))
        {
            cout<<"删除操作的结果为:"<<endl;
            this->print();//打印插入结果
        }
        break;
    case 5:
        cout<<"请输入要修改的图书的位置:";
        cin>>d;
        if(this->mod_node(d))
        {
            cout<<"修改后的结果为:"<<endl;
            this->print();
        }
        break;
    case 6:
        cout<<"按照图书的编号进行排序的结果为:"<<endl;
        this->sort_node_ISBN();
        break;
    case 7:
        cout<<"按照图书的价格进行排序的结果为:"<<endl;
        this->sort_node_price();
        break;
    case 8:
        cout<<"当前馆内的图书数量为:";
        cout<<this->get_node();
        break;
    }
}

int main()
{
    int sele=1;//功能选择
    int i;//最开始的数量
    cout<<"请输入你要输入的图书的数量:";
    cin>>i;
    Link l(i);
    l.create_node();
    cout<<endl;
    cout<<"0---------------------为查找(按编号)"<<endl;
    cout<<"1---------------------为查找(按书名)"<<endl;
    cout<<"2---------------------为查找(按定价)"<<endl;
    cout<<"3---------------------为插入"<<endl;
    cout<<"4---------------------为删除"<<endl;
    cout<<"5---------------------为修改"<<endl;
    cout<<"6---------------------为按照图书编号排序"<<endl;
    cout<<"7---------------------为按照图书的价格排序"<<endl;
    cout<<"8---------------------为显示当前馆内的图书总数"<<endl;
    cout<<"请输入要选择的功能:";
    while(sele == 1)
    {
        l.select();
        cout<<"是否要退出管理系统?(输入0退出、输入1继续)";
        cin>>sele;
        cout<<"请输入要选择的功能:";
    }
    cout<<"-----------已退出图书管理系统------------";
    return 0;
}

4.效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C++利用链表实现图书信息管理系统

    C++利用链表实现一个简单的图书信息管理系统,供大家参考,具体内容如下 (1)图书信息包括ISBN号.书名.作者名.价格和数量等: (2)系统的主要功能包括:图书信息的创建.输出图书信息.查询图书信息.增加图书信息.删除图书信息. #include <stdio.h> #include <stdlib.h> #include <string.h> //创建结构体及其成员 typedef struct Node { int num;//编号 char name[20];/

  • C++实现学生信息管理系统

    C++的课设作业,分享出来,希望给初学者一些帮助. 该系统主要用到C++的继承,虚函数.所有学生的信息保存在一个异质链表中,并且链表也进行了封装 课设题目 设计一个学生管理系统,要求如下: 1.学生来自英语系,数学系.计算机系: a) 每个学生的公共信息部分包括:学号.姓名.年龄.系别,高数成绩.英语成绩.体育成绩: b) 英语系学生有综合英语.口语等课程成绩: c) 数学系学生有实变函数.泛函分析.微分几何等课程成绩: d) 计算机系学生有计算机组成原理.计算机体系结构.汇编语言等课程成绩.

  • C++实现学生考勤信息管理系统

    学生考勤信息管理系统记录了学生的缺课情况,它包括: 缺课日期.第几节课.课程名称.学生姓名.学生学号.缺课类型(迟到.请假及旷课).系统具有以下功能: 1).录入学生的缺课记录: 2).修改某个学生的缺课记录: 3).查询某个学生的缺课情况: 4).统计 旷课学生姓名及旷课次数,按旷课次数由多到少排序: 5).统计 有学生旷课的课程及旷课人次(每次课时累加),按旷课人次由多到少排序: 重新修改了下,之前的4,5功能未实现. #include<iostream> #include<fstr

  • C++实现简单的职工信息管理系统

    功能主模块描述 模块一:增加人员函数Add():增加职工基本信息. 模块二:删除人员函数Delete():删除指定的职工的基本信息以及薪酬. 模块三:修改人员函数Modify():修改指定的职工基本信息. 模块四:查询职工信息函数Search():查询指定的职工信息以及薪酬. 模块五:排序职工信息函数Sort():职工信息排序功能实现 模块六:基础数据设置函数Set():设置五类职位的基本薪酬. 模块七:数据存盘,载入函数Save()以及Load():储存职工基本信息,薪酬以及五类职位的基本薪酬

  • C++实现高校人员信息管理系统

    高校人员信息管理系统设计,供大家参考,具体内容如下 一.问题描述及功能要求 1.问题描述 某高校有四类员工:教师.实验员.行政人员,教师兼行政人员:共有的信息包括:编号.姓名.性别.年龄等.其中,教师还包含的信息有:所在系部.专业.职称:实验员还包含的信息由:所在实验室.职务:行政人员还包含的信息有:政治面貌.职称等. 2.功能要求 (1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复

  • C++学生信息管理系统

    本文实例为大家分享了C++学生信息管理系统源码,供大家参考,具体内容如下 1. tea_list.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include"teacher.h" int sq_tea ; PTEA head = NULL ; FILE *fp ; int tea_llopen(const char* path)//打开文件 { fp=fopen(path,&q

  • C/C++实现图书信息管理系统

    本文实例为大家分享了c/c++实现图书信息管理系统的具体代码,供大家参考,具体内容如下 程序流程图 源代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> #include <windows.h> #define N 100 struct type{ char ISBN[N];//ISBN编号(一般为13位) char bookName[N

  • C++使用文件实现学生信息管理系统

    C++实现文件实现学生信息管理系统,供大家参考,具体内容如下 功能如下: 添加学生信息(学生添加完成将直接保存进文件) 成绩信息(c语言,大学英语,高等数学) 个人信息(姓名.性别.学号.年龄) 显示学生信息 查询学生信息 按学号查询 按名字查询 按学号删除学生信息 修改学生信息 按学号对学生进行排序 类的设计: 表示成绩的Score类: class Score{ public: float cLauage;//c语言成绩 float math;//高数成绩 float english;//英语

  • C++实现景区信息管理系统

    本文实例为大家分享了C++实现景区信息管理系统的具体代码,供大家参考,具体内容如下  1.1 建立主程序应用菜单选项 主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误. 1.2 导游线路图的创建级景区分布图的输出 用邻接链表存储景点分布图的信息,(带权无向)图的邻接链表.输出景区景点分布图(邻接矩阵).图中边的权值∞用32767表示. 1.3  输出导游线路图 景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一

  • C++实现简单的信息管理系统

    本文为大家分享C++实现简单的信息管理系统,小编之前在学习的时候也要做一些管理系统,在网上查了许多资料,现在我把资料分享给大家,希望能够帮助到大家. #include <stdio.h> #include <stdlib.h> #include "file.h" void savaList(Node *head)/**把用户录入的数据存储到文件里面去方便下次读取*/ { FILE *fp=fopen("data\\data.txt" ,&qu

随机推荐