您好,登錄后才能下訂單哦!
這篇“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”文章吧。
一、需求分析
1.可以實現(xiàn)添加一條新的圖書信息(圖書名,圖書編號,圖書價格,圖書作者)
2.可以查看全部圖書條目
3.可以刪除指定的某條圖書記錄
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控制臺程序
以上就是關于“C++項目開發(fā)如何實現(xiàn)圖書管理系統(tǒng)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關的知識內(nèi)容,請關注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。