C++项目开发如何实现图书管理系统
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇"C++项目开发如何实现图书管理系统"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
千家信息网最后更新 2025年01月18日C++项目开发如何实现图书管理系统
这篇"C++项目开发如何实现图书管理系统"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C++项目开发如何实现图书管理系统"文章吧。
一、需求分析
1.可以实现添加一条新的图书信息(图书名,图书编号,图书价格,图书作者)
2.可以查看全部图书条目
3.可以删除指定的某条图书记录
二、系统设计
2.1系统功能介绍
1.添加新图书模块:该模块可以实现将新图书信息录入到系统并将图书信息保存到文件中。
2.浏览全部图书模块:可以通过该模块获取文件中全部图书信息,确定图书是否存在,及方便删除。
3.删除图书模块:可以根据图书在文件中的记录号删除某条图书记录。
2.2系统预览
主界面
添加新图书界面
浏览全部图书条目
三、代码设计
3.1 图书头文件
#define NUM1 128#define NUM2 50class 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#include #include #include #include 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#include #include #include #include #include #include "Book.h" #define CMD_COLS 80#define CMD_LINES 25using 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 > 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++项目开发如何实现图书管理系统"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
图书
系统
信息
管理系统
管理
内容
模块
开发
价格
作者
文件
输入
项目
项目开发
C++
浏览
代码
函数
功能
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
成立网络安全领导小组
网络安全的相关对策
小型网络技术供应商家
移动终端软件开发实践总结
校园食堂智慧管理软件开发价格
软件开发用苹果合适吗
网络安全手抄报ok
财务管理系统数据库课程设计概述
哈尔滨市公安局网络安全
2014网吧服务器配置
何为地形图数据库
网络安全设备检测有哪些
公共数据集网络安全
联机服务器管理指令集
邮件服务器未配置spf策略
网络安全投标需要什么资质吗
华为手机微服务器降温
数据库表领域
晚清数据库
网络安全司法解释
5g手机网络安全先行
温州生活缴费软件开发团队
采用什么规格的服务器管理
现有主流数据库都有哪些
育碧服务器安全吗
什么叫计算机和网络技术
程序员就是软件开发嘛
我的世界仙仙中世纪服务器
软件开发企业零基预算
金牛云网络技术有限公司