溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)

發(fā)布時間:2022-03-14 09:21:19 來源:億速云 閱讀:168 作者:iii 欄目:開發(fā)技術

這篇“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”文章吧。

一、需求分析

1.可以實現(xiàn)添加一條新的圖書信息(圖書名,圖書編號,圖書價格,圖書作者)
2.可以查看全部圖書條目
3.可以刪除指定的某條圖書記錄

二、系統(tǒng)設計

2.1系統(tǒng)功能介紹

1.添加新圖書模塊:該模塊可以實現(xiàn)將新圖書信息錄入到系統(tǒng)并將圖書信息保存到文件中。
2.瀏覽全部圖書模塊:可以通過該模塊獲取文件中全部圖書信息,確定圖書是否存在,及方便刪除。
3.刪除圖書模塊:可以根據(jù)圖書在文件中的記錄號刪除某條圖書記錄。

2.2系統(tǒng)預覽

主界面

C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)

添加新圖書界面

C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)

瀏覽全部圖書條目

C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)

三、代碼設計

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 類中成員函數(shù)實現(xiàn)

#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主函數(shù)代碼

#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 << "*圖書管理系統(tǒng)*" << 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 << " 共有頁數(shù)" << iPage << " ";
    cout << " 當前頁數(shù)" << 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("圖書管理系統(tǒng)");
    mainloop();
}

【注】開發(fā)環(huán)境為VS2013控制臺程序

以上就是關于“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關的知識內(nèi)容,請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI