#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <windows.h>
using namespace std;
HANDLE consolehwnd; //定义颜色句柄
class PublicDate
{
public:
int year;
int month;
int day;
void GetDate(){
cout<<year<<"/"<<month<<"/"<<day;
}
BOOL IsAdate(string s); //判断输入日期格式
};
class bookinfo
{
public:
long nid; //编号
string bookname; //书名
string authorname; //作者名分类号
string ClassNo; //分类号
string Publishers; //出版社
PublicDate bookDate; //出版时间
float bookPrice; //价格
};
class Library
{
public:
void BookSort(int nContent);
void SortBook();
void DelBook();
void EditBook();
BOOL KMP(string s0,string t0); //KMP算法匹配
void ShowBookSearch(int nContent,int nWay);
void HowToSearch(int nContent);
void SearchBook();
void ShowBook();
string loginCheck; //保存的登录号
vector<bookinfo> book; //一本书
BOOL login(); //登陆
BOOL strcomp(string s1,string s2); //比较字符串
BOOL IsNumber(string s); //判断是否为数字
void AddBook(); //添加图书
void EditLoginNum(){cout<<"输入新的登录号:";cin>>loginCheck;}; //修改登录号
void BookOperation(); //图书操作
};
BOOL PublicDate::IsAdate(string s)
{
if (s.length()!=10)
return FALSE;
if(s.at(4)!='/')
return FALSE;
if(s.at(7)!='/')
return FALSE;
int i;
for (i=0;i<4;i++)
{
if (s.at(i)<'0'||s.at(i)>'9')
return FALSE;
}
int nGang=0;
for (int j=5;j<s.length();j++)
{
if ('/' == s.at(j))
{
nGang++;
continue;
}
if (s.at(j) >= '0' && s.at(j) <= '9')
continue;
return FALSE; //非法字符
if (nGang>1)
return FALSE;
}
char s1[4],s2[2],s3[2];
s1[0]=s.at(0);s1[1]=s.at(1);s1[2]=s.at(2);s1[3]=s.at(3);
s2[0]=s.at(5);s2[1]=s.at(6);
s3[0]=s.at(8);s3[1]=s.at(9);
year=atoi(s1);
month=atoi(s2);
day=atoi(s3);
if (year<=1860||year>2010||month<1||month>12||day<1||day>31)
{
return FALSE;
}
return TRUE;
}
BOOL Library::IsNumber(string s)
{
if (s.length()==0)
return FALSE;
int l=s.length();
char ch=s.at(0);
if (l==1)
{
if (ch < '0' || ch > '9')
return FALSE; //非法字符
else
return TRUE;
}
if (l>1)
{
int nDot = 0;
//数值只能是0到9及小数点组成
if (ch=='-')
{
ch=s.at(1);
if (ch < '0' || ch > '9')
return FALSE; //非法字符
for (int i = 1; i < l; i++)
{
char ch = s.at(i);
if ('.' == ch)
//小数点
{
nDot++;
continue;
}
if (ch >= '0' && ch <= '9')
//数字
continue;
return FALSE; //非法字符
}
if (nDot > 1)
return FALSE;
//小数点多于两个
else if (0 == nDot)
return TRUE;
//整数
else if (1 == nDot)
return TRUE;
}
else
for (int i = 0; i < l; i++)
{
char ch = s.at(i);
if ('.' == ch)
//小数点
{
nDot++;
continue;
}
if (ch >= '0' && ch <= '9')
//数字
continue;
return FALSE; //非法字符
}
if (nDot > 1)
return FALSE;
//小数点多于两个
else if (0 == nDot)
return TRUE;
//整数
else if (1 == nDot)
return TRUE;
//浮点数
return FALSE; //未知错误
}
return FALSE; //未知错误
}
BOOL Library::strcomp(string s1,string s2)
{
int m=s1.length();
int n=s2.length();
if (m!=n)
return false;
BOOL flag=true;
for (int i=0;i<m;i++)
{
if(s1.at(i)!=s2.at(i))
{
flag=false;
break;
}
}
return flag;
}
BOOL Library::login()
{
consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); //句柄初始化
SetConsoleTextAttribute(consolehwnd,10);
ifstream fin;
fin.open("book.dat");
if(!fin)
{
//不存在数据
cout<<"欢迎使用图书管理系统!您是第一次使用本系统!\n";
SetConsoleTextAttribute(consolehwnd,12);
cout<<"系统初始登陆号为:007!"<<"(请记住您的登录号,登录号可以修改!)\n";
loginCheck="007";
SetConsoleTextAttribute(consolehwnd,10);
}
else
{
//存在数据.....
string strtemp;
int iTotal;
fin>>strtemp>>loginCheck>>strtemp>>iTotal;
fin>>strtemp>>strtemp>>strtemp>>strtemp>>strtemp>>strtemp>>strtemp;
// ID | 书名 | 作者 | 分类号 | 单位 | 时间 | 价格 |
while (iTotal>0)
{
bookinfo bookTemp;
fin>>bookTemp.nid>>bookTemp.bookname>>bookTemp.authorname;
fin>>bookTemp.ClassNo>>bookTemp.Publishers;
PublicDate dateTemp;
string strTemp;
fin>>strTemp;
while(!dateTemp.IsAdate(strTemp))
{
//只是为了赋值
}
bookTemp.bookDate=dateTemp;
fin>>bookTemp.bookPrice;
book.push_back(bookTemp);
iTotal--;
}
fin.close();
}
string loginNum; //输入的登录号
int nCount=0;
do
{
cout<<"请输入登录号(共三次机会):";
cin>>loginNum;
nCount++;
}while (!strcomp(loginNum,loginCheck)&&nCount<3);
cout<<endl;
if (nCount=3&&!strcomp(loginNum,loginCheck))
return false;
else
return true;
}
void Library::ShowBook()
{
cout<<"*****************************************************************************\n";
cout<<" 编号 | 书名 | 作者 | 分类 | 单位 | 时间 | 价格 |\n";
cout<<"*****************************************************************************\n";
cout.setf(ios::right); //设置对齐方式为left
cout.width(10); //设置宽度为12,不足用空格填充
for (int i=0;i<book.size();i++)
{
cout.setf(ios::left);
cout.width(10);
cout<<book[i].nid<<"|";
cout.setf(ios::left);
cout.width(10);
cout<<book[i].bookname<<"|";
cout.setf(ios::left);
cout.width(10);
cout<<book[i].authorname<<"|";
cout.setf(ios::left);
cout.width(10);
cout<<book[i].ClassNo<<"|";
cout.setf(ios::left);
cout.width(10);
cout<<book[i].Publishers<<"|";
book[i].bookDate.GetDate();
cout<<"|";
cout.setf(ios::left);
cout.width(10);
cout<<book[i].bookPrice<<"|\n";
cout<<"*****************************************************************************\n";
}
cout<<endl;
}
void Library::SearchBook()
{
cout<<"选择查询内容:1 按书名查询 2 按作者名查询\n";
char cTemp[10];
cin>>cTemp;
while (!IsNumber(cTemp)||((atof(cTemp)!=1)&&(atof(cTemp)!=2))){
cout<<"输入错误!请重新输入!\n";
cout<<"选择查询内容:1 按书名查询 2 按作者名查询\n";
cin>>cTemp;
}
switch (atoi(cTemp))
{
case 1:HowToSearch(1);break;
case 2:HowToSearch(2);break;
}
}
void Library::BookOperation()
{
char choice[10];
int irun=1;
do
{
cout<< "\n图书操作: 1 添加图书 2 全体列表 3 查询图书 \n";
cout<< " 4 修改图书 5 删除图书 6 排序列表 \n";
cout<< " 7 返回上一级操作 \n";
cin>>choice;
while (!IsNumber(choice)||((atof(choice)-1!=0)
&&(atof(choice)-2!=0)&&(atof(choice)-3!=0)
&&(atof(choice)-4!=0)&&(atof(choice)-5!=0)
&&(atof(choice)-6!=0)&&(atof(choice)-7!=0))){
cout<<"输入错误!请重选编号!\n\n\n";
cout<< "图书操作: 1 添加图书 2 全体列表 3 查询图书 \n";
cout<< " 4 修改图书 5 删除图书 6 排序列表 \n";
cout<< " 7 返回上一级操作 \n";
cin>>choice;
}
switch (atoi(choice))
{
case 1:AddBook();break;
case 2:cout<<"\n\n列表如下:\n";ShowBook();break;
case 3:SearchBook();break;
case 4:EditBook();break;
case 5:DelBook();break;
case 6:SortBook();break;
case 7:return;
}
} while (irun);
}
void Library::AddBook()
{
char cTemp[10];
cout<<"输入本次添加书本的总数:";
cin>>cTemp;
while (!IsNumber(cTemp)||(atof(cTemp)-atoi(cTemp)!=0)){
cout<<"输入错误!请重新输入!\n";
cout<<"输入本次添加书本的总数:";
cin>>cTemp;
}
int iTotal=atoi(cTemp);
for (int i=0;i<iTotal;i++)
{
bookinfo bookTemp;
cout<<"\n----请输入本次添加的第"<<i+1<<"本书的信息----\n";
cout<<"书名:";
cin>>bookTemp.bookname;
cout<<"作者名:";
cin>>bookTemp.authorname;
cout<<"图书分类号:";
cin>>bookTemp.ClassNo;
cout<<"出版单位:";
cin>>bookTemp.Publishers;
cout<<"出版时
没有合适的资源?快使用搜索试试~ 我知道了~
c/c++语言图书管理系统代码(演示、C++)
共7个文件
dat:1个
dsw:1个
plg:1个
4星 · 超过85%的资源 需积分: 13 86 下载量 153 浏览量
2010-12-13
13:37:20
上传
评论 6
收藏 29KB RAR 举报
温馨提示
去年帮人写的课程作业,纯c++语言 功能包括:图书录入、列出;保存、输出;信息浏览、检索 ========= 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:1.图书信息录入功能(图书信息用文件保存)——输入。2.图书信息浏览功能——输出。3.查询或排序功能:——算法:a按书名查询 b按作者名查询.
资源推荐
资源详情
资源评论
收起资源包目录
Library.rar (7个子文件)
Library.ncb 65KB
Library.opt 88KB
Library.dsw 537B
book.dat 308B
Library.dsp 3KB
Library.cpp 21KB
Library.plg 1KB
共 7 条
- 1
资源评论
- 200O2013-09-08非常不错的资源,简单易懂。
- whatlovenba2013-04-03功能实现的太少了。
- fuqing7076243712012-12-01虽然看不懂,,但是有启发
gudufuyun
- 粉丝: 80
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功