C++项目开发实现图书管理系统

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

一、需求分析

1.可以实现添加一条新的图书信息(图书名,图书编号,图书价格,图书作者)
2.可以查看全部图书条目
3.可以删除指定的某条图书记录

二、系统设计

2.1系统功能介绍

1.添加新图书模块:该模块可以实现将新图书信息录入到系统并将图书信息保存到文件中。
2.浏览全部图书模块:可以通过该模块获取文件中全部图书信息,确定图书是否存在,及方便删除。
3.删除图书模块:可以根据图书在文件中的记录号删除某条图书记录。

2.2系统预览

主界面

添加新图书界面

浏览全部图书条目

三、代码设计

3.1 图书头文件

#define NUM1 128
#define NUM2 50
class CBook{
 
public:
    CBook(){}
    CBook(char* cName,char*cIsbn,char* cPrice,char* cAuthor);
    ~CBook(){}
public:
    char* GetName();//获取图书名称
    void SetName(char* cName);//设置图书名称
    char* GetIsbn();//获取图书ISBN编号
    void SetIsbn(char* clsbn);//设置图书ISBN编号
    char* GetPrice();//获得图书价格
    void SetPrice(char* cPrice);//设置图书价格
    char* GetAuthor();//获得图书作者信息
    void SetAuthor(char* cAuthor);//设置图书作者信息
    void WriteData();
    void DeleteData(int iCount);
    void GetBookFromFile(int iCount);
protected:
    char m_cName[NUM1];
    char m_cIsbn[NUM1];
    char m_cPrice[NUM2];
    char m_cAuthor[NUM2];
};

3.2 类中成员函数实现

#include "Book.h"
#include <string>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <stdio.h>
using namespace std;
CBook::CBook(char* cName, char*cIsbn, char* cPrice, char* cAuthor){
    strncpy_s(m_cName,cName,NUM1);
    strncpy_s(m_cIsbn, cIsbn, NUM1);
    strncpy_s(m_cPrice, cPrice, NUM2);
    strncpy_s(m_cAuthor, cAuthor, NUM2);
}
 
char* CBook::GetName(){
    return m_cName;
}
 
void CBook::SetName(char* cName){
    strncpy_s(m_cName, cName, NUM1);
}
 
char* CBook::GetIsbn(){
    return m_cIsbn;
}
 
void CBook::SetIsbn(char* cIsbn){
    strncpy_s(m_cIsbn, cIsbn, NUM1);
}
 
char* CBook::GetPrice(){
    return m_cPrice;
}
 
void CBook::SetPrice(char*cPrice){
    strncpy_s(m_cPrice, cPrice, NUM2);
}
 
char* CBook::GetAuthor(){
    return m_cAuthor;
}
 
void CBook::SetAuthor(char* cAuthor){
    strncpy_s(m_cAuthor, cAuthor, NUM2);
}
 
 
void CBook::WriteData()
{
    ofstream ofile;
    ofile.open("book.dat", ios::binary | ios::app);
    try
    {
        ofile.write(m_cName, NUM1);
        ofile.write(m_cIsbn, NUM1);
        ofile.write(m_cPrice, NUM2);
        ofile.write(m_cAuthor, NUM2);
    }
    catch (...)
    {
        throw "file error occurred";
        ofile.close();
    }
    ofile.close();
}
void CBook::GetBookFromFile(int iCount)
{
    char cName[NUM1];
    char cIsbn[NUM1];
    char cPrice[NUM2];
    char cAuthor[NUM2];
    ifstream ifile;
    ifile.open("book.dat", ios::binary);
    try
    {
        ifile.seekg(iCount*(NUM1 + NUM1 + NUM2 + NUM2), ios::beg);
        ifile.read(cName, NUM1);
        if (ifile.tellg()>0)
            strncpy_s(m_cName, cName, NUM1);
        ifile.read(cIsbn, NUM1);
        if (ifile.tellg()>0)
            strncpy_s(m_cIsbn, cIsbn, NUM1);
        ifile.read(cPrice, NUM2);
        if (ifile.tellg()>0)
            strncpy_s(m_cIsbn, cIsbn, NUM2);
        ifile.read(cAuthor, NUM2);
        if (ifile.tellg()>0)
            strncpy_s(m_cAuthor, cAuthor, NUM2);
    }
    catch (...)
    {
        throw "file error occurred";
        ifile.close();
    }
    ifile.close();
}
void CBook::DeleteData(int iCount)
{
    long respos;
    int iDataCount = 0;
    fstream file;
    fstream tmpfile;
    ofstream ofile;
    char cTempBuf[NUM1 + NUM1 + NUM2 + NUM2];
    file.open("book.dat", ios::binary | ios::in | ios::out);
    tmpfile.open("temp.dat", ios::binary | ios::in | ios::out | ios::trunc);
    file.seekg(0, ios::end);
    respos = file.tellg();
    iDataCount = respos / (NUM1 + NUM1 + NUM2 + NUM2);
    if (iCount < 0 && iCount > iDataCount)
    {
        throw "Input number error";
    }
    else
    {
        file.seekg((iCount)*(NUM1 + NUM1 + NUM2 + NUM2), ios::beg);
        for (int j = 0; j<(iDataCount - iCount); j++)
        {
            memset(cTempBuf, 0, NUM1 + NUM1 + NUM2 + NUM2);
            file.read(cTempBuf, NUM1 + NUM1 + NUM2 + NUM2);
            tmpfile.write(cTempBuf, NUM1 + NUM1 + NUM2 + NUM2);
        }
        file.close();
        tmpfile.seekg(0, ios::beg);
        ofile.open("book.dat");
        ofile.seekp((iCount - 1)*(NUM1 + NUM1 + NUM2 + NUM2), ios::beg);
        for (int i = 0; i<(iDataCount - iCount); i++)
        {
            memset(cTempBuf, 0, NUM1 + NUM1 + NUM2 + NUM2);
            tmpfile.read(cTempBuf, NUM1 + NUM1 + NUM2 + NUM2);
            ofile.write(cTempBuf, NUM1 + NUM1 + NUM2 + NUM2);
        }
    }
    tmpfile.close();
    ofile.close();
    remove("temp.dat");
}

3.3主函数代码

#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <fstream>
#include "Book.h"
 
#define CMD_COLS 80
#define CMD_LINES 25
using namespace std;
 
void SetScreenGrid();
void ClearScreen();
void SetSysCaption();
void SetSysCaption(const char *pText);
void ShowWelcome();
void ShowRootMenu();
void WaitView(int  iCurPage);
void WaitUser();
void GuideInput();
int GetSelect();
long GetFileLength(ifstream & ifs);
void ViewData(int iSelPage);
void DeleteBookFromFile();
void mainloop();
 
void SetScreenGrid()
{
    char sysSetBuf[80];
    sprintf_s(sysSetBuf, "mode con cols=%d lines=%d", CMD_COLS, CMD_LINES);
    system(sysSetBuf);
}
void ClearScreen()
{
    system("cls");
}
void SetSysCaption()
{
    system("title Sample");
}
void SetSysCaption(const char *pText)
{
    char sysSetBuf[80];
    sprintf_s(sysSetBuf, "title %s", pText);
    system(sysSetBuf);
}
void ShowWelcome()
{
    for (int i = 0; i<7; i++)
    {
        cout << endl;
    }
    cout << setw(40);
    cout << "**************" << endl;
    cout << setw(40);
    cout << "*图书管理系统*" << endl;
    cout << setw(40);
    cout << "**************" << endl;
}
void ShowRootMenu()
{
    cout << setw(40);
    cout << "请选择功能:" << endl;
    cout << endl;
    cout << setw(38);
    cout << "1 添加新书" << endl;
    cout << endl;
    cout << setw(38);
    cout << "2 浏览全部" << endl;
    cout << endl;
    cout << setw(38);
    cout << "3 删除图书" << endl;
}
 
 
void WaitView(int  iCurPage)
{
    char buf[256];
    gets_s(buf);
    if (buf[0] == 'q')
        system("exit");
    if (buf[0] == 'm')
        mainloop();
    if (buf[0] == 'n')
        ViewData(iCurPage);
}
void WaitUser()
{
    int iInputPage = 0;
    cout << "enter返回主菜单,q退出" << endl;
    char buf[256];
    gets_s(buf);
    if (buf[0] == 'q')
        system("exit");
}
void GuideInput()
{
    char inName[NUM1];
    char inIsdn[NUM1];
    char inPrice[NUM2];
    char inAuthor[NUM2];
 
    cout << "输入书名" << endl;
    cin >> inName;
    cout << "输入ISDN" << endl;
    cin >> inIsdn;
    cout << "输入价格" << endl;
    cin >> inPrice;
    cout << "输入作者" << endl;
    cin >> inAuthor;
    CBook book(inName, inIsdn, inPrice, inAuthor);
    book.WriteData();
    cout << "Write Finish" << endl;
    WaitUser();
}
 
int GetSelect()
{
    char buf[256];
    gets_s(buf);
    return atoi(buf);
}
long GetFileLength(ifstream & ifs)
{
    long tmppos;
    long respos;
    tmppos = ifs.tellg();//获得当前位置
    ifs.seekg(0, ios::end);
    respos = ifs.tellg();
    ifs.seekg(tmppos, ios::beg);//恢复当前位置
    return respos;
}
 
 
void ViewData(int iSelPage = 1)
{
    int iPage = 0;
    int iCurPage = 0;
    int iDataCount = 0;
    char inName[NUM1];
    char inIsbn[NUM1];
    char price[NUM2];
    char inAuthor[NUM2];
    bool bIndex = false;
    int iFileLength;
    iCurPage = iSelPage;
    ifstream ifile;
    ifile.open("book.dat", ios::binary);//|ios::nocreate
    iFileLength = GetFileLength(ifile);
    iDataCount = iFileLength / (NUM1 + NUM1 + NUM2 + NUM2);
    if (iDataCount >= 1)
        bIndex = true;
    iPage = iDataCount / 20 + 1; //每页20条记录
 
 
    ClearScreen();
 
    cout << " 共有记录" << iDataCount << " ";
    cout << " 共有页数" << iPage << " ";
    cout << " 当前页数" << iCurPage << " ";
    cout << " n显示下一页 m返回" << endl;
    cout << setw(5) << "Index";
    cout << setw(22) << "Name" << setw(22) << "Isbn";
    cout << setw(15) << "Price" << setw(15) << "Author";
    cout << endl;
    try
    {
        ifile.seekg((iCurPage - 1) * 20 * (NUM1 + NUM1 + NUM2 + NUM2), ios::beg);
        if (!ifile.fail())
        {
            for (int i = 1; i<21; i++)
            {
                memset(inName, 0, 128);
                memset(inIsbn, 0, 128);
                memset(price, 0, 50);
                memset(inAuthor, 0, 50);
                if (bIndex)
                    cout << setw(3) << ((iCurPage - 1) * 20 + i);
                ifile.read(inName, NUM1);
                cout << setw(24) << inName;
                ifile.read(inIsbn, NUM1);
                cout << setw(24) << inIsbn;
                ifile.read(price, NUM2);
                cout << setw(12) << price;
                ifile.read(inAuthor, NUM2);
                cout << setw(12) << inAuthor;
                cout << endl;//一条纪录
                if (ifile.tellg()<0)
                    bIndex = false;
                else
                    bIndex = true;
            }
        }
    }
    catch (...)
    {
        cout << "throw file exception" << endl;
        throw "file error occurred";
        ifile.close();
    }
    if (iCurPage<iPage)
    {
        iCurPage = iCurPage + 1;
        WaitView(iCurPage);
    }
    else
    {
        WaitView(iCurPage);
    }
    ifile.close();
}
 
 
void DeleteBookFromFile()
{
    int iDelCount;
    cout << "Input delete index" << endl;
    cin >> iDelCount;
    CBook tmpbook;
    tmpbook.DeleteData(iDelCount);
    cout << "Delete Finish" << endl;
    WaitUser();
}
void mainloop()
{
    ShowWelcome();
    while (1)
    {
        ClearScreen();
        ShowWelcome();
        ShowRootMenu();
        switch (GetSelect())
        {
        case 1:
            ClearScreen();
            GuideInput();
            break;
        case 2:
            ClearScreen();
            ViewData();
            break;
        case 3:
            ClearScreen();
            DeleteBookFromFile();
            break;
        }
    }
}
void main()
{
 
    SetScreenGrid();
    SetSysCaption("图书管理系统");
    mainloop();
}

【注】开发环境为VS2013控制台程序
根据《C++项目开发全程实录》修改

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

(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++顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下 图书信息表包括以下10项常用的基本操作:图书信息表的创建和输出.排序.修改.逆序存储.最贵图书的查找.最爱图书的查找.最佳位置图书的查找.新图书的入库.旧图书的出库.图书去重. 代码: #include<iostream> #include<iomanip> #include<string> using namespace std; //函数结果状态代码 #define OK 1 #def

  • C++实现图书管理系统

    闲来无事,用C++做了一个图书管理系统,主要有借书.还书.图书管理.用户管理等功能,主要用到的技术有容器和文件,以及类的封装 #include <iostream> #include <list> #include <algorithm> #include <string.h> #include <fstream> #include <stdlib.h> using namespace std; class Mybook; class

  • C++实现简单图书馆管理系统

    本文实例为大家分享了C++实现简单图书馆管理系统的具体代码,供大家参考,具体内容如下 写了一个小项目,图书馆系统,功能如下: 1,添加书籍2,删除书籍(可删除还没外借的书籍)3,读者借书4,读者还书5,按书籍登入号查看信息(每一本书的书籍登入号唯一,如有5本相同书名作者的书,那就有5个不同的书籍登入号)6,查询所有图书信息(可以直接查看到同本书在图书馆中的剩余和借出情况)7,查看指定读者的借书详情8,注册新读者9,查看所有书籍信息(可以详细到每个登入号和此登入号书籍的借阅情况:如谁借的,借阅日期

  • C++实现简单的图书管理系统

    今天再为大家介绍另一个常用的管理系统--图书管理系统,希望大家可以亲自动手实践一下,下面就与大家一起分享我的劳动成果. 图书信息包括:登录号.书名.作者名.分类号.出版单位.出版时间.价格等.试设计一图书信息管理系统,使之能提供以下功能: (1)图书信息录入功能(图书信息用文件保存) (2)图书信息浏览功能 (3)查询和排序功能:(至少一种查询方式)         .按书名查询         .按作者名查询 (4)图书信息的删除与修改 分享代码如下 #include<iostream.h>

  • 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++课程设计之图书馆管理系统的具体代码,供大家参考,具体内容如下 一.代码 #include<bits/stdc++.h> using namespace std; class Date {     int year,month,day; public:     Date(int x,int y,int z):year(x),month(y),day(z){}     Date(){year=month=day=0;}     void setDate(int x,int

  • C++实现小型图书管理系统

    本文实例为大家分享了C++实现小型图书管理系统的具体代码,供大家参考,具体内容如下 因为课程设计的原因,需要实现一个小型图书管理系统 包含功能: 问题描述: 设计一个系统,对图书信息进行管理,信息描述:有关该系统基本信息的描述,如:图书名称.图书编号.单价.作者.存在状态.借书人姓名.性别.学号等. 基本要求: 基本功能: 1.新进图书基本信息的输入.2.图书基本信息的查询.3.对撤消图书信息的删除.4.为借书人办理注册.5.办理借书手续(非注册会员不能借书).6.办理还书手续.7.统计图书库存

  • C++实现简易图书馆管理系统

    本文实例为大家分享了C++实现简易图书馆管理系统的具体代码,供大家参考,具体内容如下 思路 在本程序中共有四个类: book类:此类有书的基本信息:书名,编号,作者,价格等,和基本的get()和set()方法.类图如下: library类:此类中有一个存放的书的数组,并且可以对书进行,查询,借阅,归还,添加,等相关操作.类图如下: reader_infor类:此类中有读者的相关信息:名字,学号,年级,借书数量.和基本的get()和set()方法,类图如下: reader_admin类:此类中有一

  • C++实现图书管理系统最新版

    图书管理系统设计,供大家参考,具体内容如下 一.问题描述及功能要求 (1)图书信息录入功能(图书信息用文件保存) (2)图书信息浏览功能 (3)查询和排序功能:(至少一种查询方式) .按书名查询 .按作者名查询 (4)图书信息的删除与修改 二.代码实现 带有注释 废话不说,直接代码,欢迎指正. 大家CV可能有不兼容的情况,可以滴滴,尽可能解决问题地回复. #include<iostream> #include<stdio.h> #include <stdlib.h> #

随机推荐