<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了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++專案開發全程實錄》修改
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45