祝您有个好心情。。
问题:
图书借阅系统 要求: l 设计一个类book,数据成员有书名name,编号no,作者author; l 设计一个类reader,数据成员有学号number,姓名name,借书证号no; l 每位读者最多借5本书;输入学生学号,可显示学生姓名和学生的借书情况; l 实现学生还书功能; l 图书信息、读者信息和借阅信息均存于数据文件中。
1,请将 reader.txt,books.txt,yuedu.txt这三个文本文档添加到D盘中。。程序运行时会出现一个temp.txt文档,它也会动添加到D盘中的。。。
books.txt
1 JAVA基础入门 孙鑫 2 计算机组成原理 百中英 3 C语言程序设计 谭浩强 4 C++程序语言设计 刘怀亮 5 ASP.net3.5 刘好增 6 C#程序设计 孙鑫 7 大学英语 陈美 8 哲学与儒学 张世高 9 计算机仿真 周才根 10 MSDN自学教程 唐仕喜
reader.txt
1 zhangyongbin 111111 2 leiyu 22222 3 fanyouyu 3333333
yuedu.txt
1 1 2 3 4 99 2 2 3 4 5 99 3 3 4 5 99 源代码:
包括:books.h books.cpp reader.h reader.cpp 学生信息管理系统.cpp
books.h中的代码:
#ifndef xxx #define xxx class books{ private: int no;//定义了一个书本的编号 char name[20];//定义了书本的名称 char author[20];//定义了书本的作者 public: void showbooks(int i);//用来显示数据库中所有的书本 }; #endif
books.cpp 中包括:
#include"books.h" #include<fstream.h> #include<stdlib.h> #include<string.h> #include<iostream.h> #include<iomanip.h> void books::showbooks(int i) { int no1; char name1[20]; char author1[20]; //char temp[80]; int temp1; ifstream ifp("D:\\books.txt",ios::in); if(!ifp.is_open()) { cout<<"找不到图书数据库"<<endl; exit(1); } for(temp1=1;temp1<i;temp1++)//跳过之前的书对象的信息 { ifp>>no1; ifp>>name1; ifp>>author1; } ifp>>no; ifp>>name; ifp>>author; cout<<"图书编号:"<<setw(5)<<no; cout<<" 图书名:"<<setw(20)<<name; cout<<setw(10)<<" 图书作者:"; cout<<setw(10)<<author<<endl; ifp.close(); }
reader.h 中包括:
#include"books.h" #ifndef xx #define xx class reader:public books{ private: bool Is_reader;//用于表示学生是否有过借阅的经历 int all;//显示学生已经借阅了多少本书籍 int number;//显示学生的学号 char name[20];//显示学生的姓名 char no[10];//显示学生的借书证号 books bks[5];//显示学生的借阅的书名的对象数组 public: void Get_number(int number);//获取 int Get_all();//获取学生当前一共借了多少本书 bool Get_Isreader();//用来显示学生是不是第一次借阅书籍。true为不是,false为是。 void show_personal_information();//用来显示学生的基本信息 void show_personal_jieyue();//用来显示用户的借阅书本的信息 void Addbooks();//用来增加书本 void Delbooks();//用来减少书本 }; #endif
reader.cpp 中包括:
#include"reader.h" #include<fstream> #include<iostream> #include<stdlib.h> #include<string> using namespace std; void reader::Get_number(int number) { this->number=number; this->all=0; this->Is_reader=false;
} int reader::Get_all() { return this->all; } bool reader::Get_Isreader() { return this->Is_reader; } void reader::show_personal_information() {
int temp=0; int number1; char name1[20]; char no1[10]; ifstream irfp("D:\\reader.txt",ios::in); if(!irfp.is_open()) { cout<<"没有发现用户数据库"<<endl; cout<<"你还没有借书"<<endl; exit(1); } while(!irfp.eof()) { irfp>>number1; irfp>>name1; irfp>>no1; if(number1==this->number) { this->Is_reader=true; number=number1; strcpy(name,name1); strcpy(no,no1); cout<<"学生信息为:"<<endl; cout<<"学号: "<<number<<" 姓名: "<<name<<" 证件编号: "<<no<<endl; temp=1; break; } } if(temp==0) { cout<<"你还没有借书记录"<<endl; } irfp.close(); } void reader::show_personal_jieyue() { int out=0; int books[5];//用来放五本书的序号 int temp; int number1; ifstream iyfp("D:\\yuedu.txt",ios::in); if(!iyfp.is_open()) { cout<<"没有发现用户阅读数据库"<<endl; cout<<"你还没有借书阅读的记录"<<endl; exit(1); } while(!iyfp.eof()) { int i=0; int j=0; iyfp>>number1; iyfp>>temp; while(temp!=99) { books[i]=temp; i++; iyfp>>temp; } if(number1==this->number) { this->Is_reader=true; for(j=0;j<i;j++) { bks[j].showbooks(books[j]); } out=1; this->all=i;//对读者的对象变量进行赋值 int loo; loo=5-all; cout<<"你目前所借的书籍数目有:"<<i<<"本!!!"<<"您需要还"<<this->all<<"书!!! "<<" 您还能借"<<loo<<"本!!!"<<endl; break; } i=0; for(int jj=0;jj<5;jj++) { books[jj]=0; } } if(out==0) cout<<"您还没有借阅书籍"<<endl; iyfp.close(); }
void reader::Addbooks() { bool pub=false; bool rr=false; int bianhao; string str; int kk[5];
ifstream ifp("D:\\books.txt",ios::in); if(!ifp.is_open()) { cout<<"找不到图书数据库"<<endl; exit(1); } //显示您能借到的书籍 cout<<"目前您能借到的书籍为:"<<endl; while(getline(ifp,str)) { cout<<str<<endl; } ifp.close();
//如果你是第一次借书的话,那么我得把你的信息加到我的数据库中 if(this->Is_reader==false) { ofstream ofp("D:\\reader.txt",ios::out|ios::app); if(!ofp.is_open()) { cout<<"没有找到文件"<<endl; } cout<<endl<<"由于您是第一次登入到盐城师范学院图书馆,所以请先输入您的个人信息"<<endl; //this->Is_reader=true; pub=true; this->all=0; ofp<<'\n'; ofp<<this->number; ofp<<" "; cout<<"请输入您的姓名:"<<endl; cin>>this->name; ofp<<this->name; ofp<<" "; cout<<"请输入您的借书证号"<<endl; cin>>this->no; ofp<<this->no; ofp.close(); }
//进行借书的过程 cout<<endl<<"请输入你想借的书籍的编号:"<<endl; cin>>bianhao; ifstream temp_yuedusource("D:\\yuedu.txt",ios::in); ofstream temp_tempsource("D:\\temp.txt",ios::out); if(!temp_yuedusource.is_open()) { cout<<"没有发现文件"<<endl; return; } int temp_number; int ss; int i=0;
while(temp_yuedusource>>temp_number) {
temp_yuedusource>>ss; while(ss!=99) { kk[i]=ss; i++; temp_yuedusource>>ss; } if(temp_number==number) { pub=true; rr=true; kk[i]=bianhao; kk[i+1]=99; break; } kk[i]=99; //当没有在yuedu.txt中找到读者的记录的时候 temp_tempsource<<temp_number; temp_tempsource<<'\n'; i=0; while(kk[i]!=99) { temp_tempsource<<kk[i]; temp_tempsource<<" "; i++; } temp_tempsource<<kk[i]; //回复初始状态 i=0; for(int j=0;j<5;j++) { kk[j]=0; } temp_tempsource<<'\n'; }
//将记录的后面部分写入零时book文件中 string std; while(getline(temp_yuedusource,std)) { temp_tempsource<<std; temp_tempsource<<'\n'; } //将添加的一行添加到yuedu.txt文件中
if(rr==true||pub==true) { //无论你是否为第一次添加到数据库,你都要将你的学号添加到零时阅读文件中 temp_tempsource<<this->number; temp_tempsource<<'\n'; //当你是第一次添加数据的时候,不能用kk这个数字来添加零时阅读文件 if(Is_reader==false) { temp_tempsource<<bianhao; temp_tempsource<<" "; temp_tempsource<<99;
} //如果你不是第一次添加阅读数据的时候,就要用到kk来添加数的编号 else {
i=0; while(kk[i]!=99) { temp_tempsource<<kk[i]; temp_tempsource<<" "; i++; } temp_tempsource<<99;
} temp_tempsource.close(); temp_yuedusource.close(); //// } ofstream aa("D:\\yuedu.txt",ios::in); ifstream bb("D:\\temp.txt",ios::out); if((!aa.is_open())||(!bb.is_open())) { cout<<"没有发现文件"<<endl; return; } //将零时文件从新写入到yuedu.txt文件中 string qq; while(getline(bb,qq)) { aa<<qq; aa<<'\n'; } cout<<"添加书籍成功"<<endl; aa.close(); bb.close(); }
void reader::Delbooks() { int kk[5];//用来存放书的编号 bool rr=false;//若为true则你输入的学号存在我的yuedu.txt文件中 int bianhao;//用来存放你想要删除的书的编号 cout<<endl<<"请输入那本你要还书的编号"<<endl; cin>>bianhao; ifstream temp_yuedusource("D:\\yuedu.txt",ios::in); ofstream temp_tempsource("D:\\temp.txt",ios::out); if(!temp_yuedusource.is_open()) { cout<<"没有发现文件"<<endl; return; } //将yuedu.txt中的内容填入到文件temp.txt文件中 int temp_number; int ss; int i=0; while(temp_yuedusource>>temp_number) {
temp_yuedusource>>ss; while(ss!=99) { kk[i]=ss; i++; temp_yuedusource>>ss; } //你的学号在我的yuedu.txt文件中 if(temp_number==number) { rr=true; kk[i]=99; break; } kk[i]=99;
//当没有在yuedu.txt中还没有到读者的记录的时候,继续读下一行来判断,但是要把我现在读的这行记录写到temp.txt文件中 temp_tempsource<<temp_number; temp_tempsource<<'\n'; i=0; while(kk[i]!=99) { temp_tempsource<<kk[i]; temp_tempsource<<" "; i++; } temp_tempsource<<kk[i]; //回复初始状态 i=0; for(int j=0;j<5;j++) { kk[j]=0; } temp_tempsource<<'\n'; } if(rr==true) { //将记录的后面部分写入零时book文件中 string std; while(getline(temp_yuedusource,std)) { temp_tempsource<<std; temp_tempsource<<'\n'; }
//用来将你输入要还得数的编号从我的记录中删除 int x=0,y=0; for(x=0;kk[x]!=99;x++) { if(kk[x]==bianhao) { y=1;break; }
} if(y==0) { cout<<"您输入的图书编号,不在你的图书阅读的列表中"<<endl; return; } int z=0; for(z=x;kk[z]!=99;z++) { kk[z]=kk[z+1]; } //运用kk数组将学生的新纪录添加到temp.txt的末尾 temp_tempsource<<temp_number; temp_tempsource<<'\n'; i=0; while(kk[i]!=99) { temp_tempsource<<kk[i]; temp_tempsource<<" "; i++; } temp_tempsource<<99; temp_tempsource.close(); temp_yuedusource.close();
//将我的temp.txt文件返回到我的yuedu.txt文件中
ofstream aa("D:\\yuedu.txt",ios::in); ifstream bb("D:\\temp.txt",ios::out); if((!aa.is_open())||(!bb.is_open())) { cout<<"没有发现文件"<<endl; return; } //temp.txt中的文件一行一行的复制到yuedu.txt文件中 string qq; while(getline(bb,qq)) { aa<<qq; aa<<'\n'; } cout<<"删除书籍成功"<<endl; aa.close(); bb.close();
} else cout<<"没有发现你有阅读的信息!请确认你是否借过书!!!!"<<endl;
}
学生信息管理系统.cpp中包括:
#include<iostream.h> #include<string.h> #include<fstream.h> #include<stdlib.h> #include"reader.h" #include"books.h" void read_need() { cout<<"首先欢迎您进入本图书系统"<<endl; cout<<"每个同学只能借五本书,超过五本就不能再借了,须及时还书才能继续借书"<<endl; cout<<"每本书都有时间限制,你必须在一个月内还书,超过一个月你可以续借,但是超过两个月,我们就将于你罚钱"<<endl; } void Look_books() { int i=1; books Shu[10]; cout<<"本图书目前一共有十本书,分别为:"<<endl; for(i=0;i<10;i++) { Shu[i].showbooks(i+1);//用书这个对象数组中的每一个对象,对每个对象进行访问他的showbooks对象函数 } } void Personal_infomation() { int num; cout<<"请输入您的学号"<<endl; cin>>num; reader reader_temp; reader_temp.Get_number(num); reader_temp.show_personal_information(); reader_temp.show_personal_jieyue(); } void reader_Addbooks() { int temp_all; int num; int pp; cout<<"请输入您的学号"<<endl; cin>>num; reader reader_temp; reader_temp.Get_number(num); reader_temp.show_personal_information(); reader_temp.show_personal_jieyue(); temp_all=reader_temp.Get_all(); pp=5-temp_all; if(pp>0) { reader_temp.Addbooks();
} else cout<<endl<<"您已经借书超过五本,请及时还书!!!"<<endl; } void reader_Delbooks() { int num; cout<<"请输入您的学号"<<endl; cin>>num; reader reader_temp; reader_temp.Get_number(num); reader_temp.show_personal_information(); if(!reader_temp.Get_Isreader()) { cout<<"您没有借书,当然不需要还书"<<endl; return; } reader_temp.show_personal_jieyue(); reader_temp.Delbooks(); } void main() { int out=1; int choose; for(;;) { cout<<"欢迎来到盐城师范学院图书管理系统"<<endl; cout<<"1 借阅须知"<<endl; cout<<"2 图书馆珍藏书籍"<<endl; cout<<"3 学生个人信息查询"<<endl; cout<<"4 学生借书"<<endl; cout<<"5 学生还书"<<endl; cout<<"6 退出本系统"<<endl; cout<<"请选择"<<endl; cin>>choose; switch(choose) { case 1: cout<<endl; system("cls"); read_need(); break; case 2: cout<<endl; system("cls"); Look_books(); break; case 3: cout<<endl; system("cls"); Personal_infomation(); break; case 4: cout<<endl; system("cls"); reader_Addbooks(); break; case 5: cout<<endl; system("cls"); reader_Delbooks(); break; case 6: out=0; break; } if(out==0) break; } }
|
请发表评论