欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年03月12日 10:36:03   作者:小凡大帝  
這篇文章主要為大家詳細介紹了C++項目開發(fā)實現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++實現(xiàn)圖書管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

一、需求分析

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

二、系統(tǒng)設計

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

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

2.2系統(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控制臺程序
根據(jù)《C++項目開發(fā)全程實錄》修改

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++中Overload,Override,Hide之間的區(qū)別

    C++中Overload,Override,Hide之間的區(qū)別

    重載overload,這個概念是大家熟知的。在同一可訪問區(qū)內(nèi)被聲名的幾個具有不同參數(shù)列的(參數(shù)的類型、個數(shù)、順序不同)同名函數(shù),程序會根據(jù)不同的參數(shù)列來確定具體調(diào)用哪個函數(shù),這種機制就是重載
    2013-09-09
  • Matlab繪制雨云圖的方法詳解

    Matlab繪制雨云圖的方法詳解

    這篇文章主要介紹了如何利用Matlab實現(xiàn)雨云圖的繪制,文中的示例代碼講解詳細,對我們學習Matlab有一定的幫助,需要的可以參考一下
    2022-05-05
  • c++ 動態(tài)內(nèi)存分配相關總結

    c++ 動態(tài)內(nèi)存分配相關總結

    這篇文章主要介紹了c++ 動態(tài)內(nèi)存分配相關的相關資料,幫助大家更好的理解和學習和使用c++,感興趣的朋友可以了解下
    2021-02-02
  • VC++實現(xiàn)模擬漢諾塔效果

    VC++實現(xiàn)模擬漢諾塔效果

    本文給大家分享的是一則使用vc++實現(xiàn)模擬漢諾塔效果的代碼,代碼實現(xiàn)起來很簡單,主要是漢諾塔算法的思路要正確,正在練習漢諾塔的小伙伴也可以來看看,希望大家能夠喜歡。
    2015-03-03
  • C++深度優(yōu)先搜索的實現(xiàn)方法

    C++深度優(yōu)先搜索的實現(xiàn)方法

    這篇文章主要介紹了C++深度優(yōu)先搜索的實現(xiàn)方法,是數(shù)據(jù)結構中非常重要的一種算法,需要的朋友可以參考下
    2014-08-08
  • C語言詳細分析不同類型數(shù)據(jù)在內(nèi)存中的存儲

    C語言詳細分析不同類型數(shù)據(jù)在內(nèi)存中的存儲

    使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么
    2022-08-08
  • C++讀取文本文件中的漢字亂碼情況原因及解決

    C++讀取文本文件中的漢字亂碼情況原因及解決

    本文介紹簡體中文Windows操作系統(tǒng)中,C++讀取文本文件中的漢字亂碼情況原因及解決,文中通過代碼和圖文給大家介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • Qt QImage和QPixmap使用與區(qū)別

    Qt QImage和QPixmap使用與區(qū)別

    Qt中QImage類封裝了對于一般圖像像素級的操作,圖像顯示則使用QPixmap,本文主要介紹了Qt QImage和QPixmap使用與區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 手把手教你用C語言實現(xiàn)三子棋

    手把手教你用C語言實現(xiàn)三子棋

    三子棋是黑白棋的一種。三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。這篇文章就教你如何用C語言實現(xiàn)三子棋的功能
    2021-08-08
  • C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)詳解

    這篇文章主要為大家介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12

最新評論