求大佬帮忙指出这个代码中的数据结构设计和类的设计,可以加QQ私聊964178147

#include
#include
#include
#include
#include <stdlib.h>
using namespace std;
const int Reader=100;
const int Maxb=100;
const int Bor=5;
class Student
{
private:
int tag;
int number;
char name[10];
int borbook[Bor];
public:
Student() { }
char *getname()
{
return name;
}
int gettag()
{
return tag;
}
int getnumber()
{
return number;
}
void setname(char *na)
{
strcpy(name,na);
}
void delbook()
{
tag=1;
}
void addStudent(int n,char *na)
{
tag=0;
number=n;
strcpy(name,na);
for(int i=0; i<Bor; i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0; i<Bor; i++)
{
if (borbook[i]0)
{
borbook[i]=bookid;
return;
}
}
}
int retbook(int bookid)//还书操作
{
for(int i=0; i<Bor; i++)
{
if(borbook[i]bookid)
{
borbook[i]=0;
return 1;
}
}
return 0;
}
void output()//读出读者信息
{
cout << setw(5) << number <<setw(10) << name<<“借书编号:[”;
for(int i=0; i<Bor; i++)
if(borbook[i]!=0)
cout << borbook[i] << “|”;
cout << “]”<<endl;
}
};
class RData
{
private:
int top; //读者记录指针
Student read[Reader];
public:
RData() //构造函数,将Student.txt读到read[]中
{
Student s;
top=-1;
fstream file(“Student.txt”,ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close();
}
void clear()
{
top=-1;
}
int addStudent(int n,char *na)//查找是否存在
{
Student *p=equal(n);
if (p
NULL)
{
top++;
read[top].addStudent(n,na);
return 1;
}
return 0;
}
Student *equal(int Studentid)//按编号查找
{
for (int i=0; i<=top; i++)
if (read[i].getnumber()Studentid &&
read[i].gettag()0)
{
return &read[i];
}
return NULL;
}
void output()
{
for (int i=0; i<=top; i++)
read[i].output();
}
void Studentdata();//读者库维护
~RData() //析构函数,将read[]写到Student.txt文件中
{
fstream file(“Student.txt”,ios::out);
for (int i=0; i<=top; i++)
if (read[i].gettag()0)
file.write((char *)&read[i],sizeof(read[i]));
file.close();
}
};
void RData::Studentdata()
{
char choice;
char rname[20];
int Studentid;
Student *r;
while (choice!=‘0’)
{
cout<<" ┏━━━━━━━━━━━━━┓\n";
cout<<" ┃ 读 者 维 护 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃1.新 增 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃2.更 改 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃3.删 除 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃4.查 找 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃5.显 示 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃6.全 删 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃0.退出 ┃\n";
cout<<" ┗━━━━━━━━━━━━━┛\n";
cin >> choice;
switch (choice)
{
case ‘1’:
cout << “输入读者编号:”;
cin >> Studentid;
cout << “输入读者姓名:”;
cin >> rname;
addStudent (Studentid,rname);
break;
case ‘2’:
cout << “输入读者编号:”;
cin >> Studentid;
r=equal(Studentid);
if (r
NULL)
{
cout << " 该读者不存在 “<<endl;
break;
}
cout << “输入新的姓名:”;
cin >> rname;
r->setname(rname);
break;
case ‘3’:
cout << " 输入读者编号:”;
cin >> Studentid;
r=equal(Studentid);
if (r
NULL)
{
cout <<" 该读者不存在" << endl;
break;
}
r->delbook();
break;
case ‘4’:
cout << “读入读者编号:”;
cin >> Studentid;
r=equal(Studentid);
if (r
NULL)
{
cout <<“该读者不存在”<< endl;
break;
}
r->output();
break;
case ‘5’:
output();
break;
case ‘6’:
clear();
break;
default:
cout<<“退出:\n”;
system(“cls”);
break;
}
}
}
class Book
{
private:
int tag;
int number;
char name[20];
int onshelf;
public:
Book() {}
char *getname()
{
return name;
}
int getnumber()
{
return number;
}
int gettag()
{
return tag;
}
void setname(char na[])
{
strcpy(name,na);
}
void delbook()
{
tag=1;
}
void addbook(int n,char *na)
{
tag=0;
number=n;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if(onshelf
1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void output()//输出图书
{
cout << setw(6) << number << setw(18) << name << setw(10)
<<(onshelf1? “在架”:“已借”) <<endl;
}
};
class BDatabase
{
private:
int top;
Book book[Maxb]; //图书记录
public:
BDatabase()//构造函数,将book.txt读到book[]中
{
Book b;
top=-1;
fstream file(“book.txt”,ios::in);
while (1)
{
file.read((char *)&b,sizeof(b));
if (!file) break;
top++;
book[top]=b;
}
file.close();
}
void clear()
{
top=-1;
}
int addbook(int n,char *na)
{
Book *p=equal(n);
if (NULL
p)
{
top++;
book[top].addbook(n,na);
return 1;
}
return 0;
}
Book *equal(int bookid)
{
for (int i=0; i<=top; i++)
if (book[i].getnumber()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();
void output()
{

    for (int i=0; i<=top; i++)
        if (book[i].gettag()==0)
            book[i].output();
}
~BDatabase()//析构函数,将book[]写到book.txt文件中
{
    fstream file("book.txt",ios::out);
    for (int i=0; i<=top; i++)
        if (book[i].gettag()==0)
            file.write((char *)&book[i],sizeof(book[i]));
    file.close();
}

};
void BDatabase::bookdata()
{
char choice;
char bname[40];
int bookid;
Book *b;
while (choice!=‘0’)
{

    cout<<"                     ┏━━━━━━━━━━━━━┓\n";
    cout<<"                     ┃      图书 维 护          ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃1.新 增                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃2.更 改                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃3.删 除                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃4.查 找                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃5.显 示                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃6.全 删                   ┃\n";
    cout<<"                     ┃━━━━━━━━━━━━━┃\n";
    cout<<"                     ┃0.退出                    ┃\n";
    cout<<"                     ┗━━━━━━━━━━━━━┛\n";
    cin >> choice;
    switch (choice)
    {
    case '1':
        cout << "输入图书编号:"<<endl;
        cin >> bookid;
        cout << "输入图书书名:"<<endl;
        cin >> bname;
        addbook(bookid,bname);
        break;
    case '2':
        cout << "输入图书编号:"<<endl;
        cin >> bookid;
        b=equal(bookid);
        if (b==NULL)
        {
            cout << " 该图书不存在 "<<endl;
            break;
        }
        cout << "输入新的书名:"<<endl;
        cin >> bname;
        b->setname(bname);
        break;
    case '3':
        cout <<" 读入图书编号:"<<endl;
        cin >> bookid;
        b=equal(bookid);
        if (b==NULL)
        {
            cout <<" 该图书不存在" << endl;
            break;
        }
        b->delbook();
        break;
    case '4':
        cout << " 读入图书编号:"<<endl;
        cin >> bookid;
        b=equal(bookid);
        if (b==NULL)
        {
            cout <<" 该图书不存在"<< endl;
            break;
        }
        b->output();
        break;
    case '5':
        output();
        break;
    case '6':
        clear();
        break;
    default:
        cout<<"退出\n";
        system("cls");
        break;
    }
}

}
int main()
{
char choice;
int bookid,Studentid;
RData StudentDB;
Student *r;
BDatabase BookDB;
Book *b;
while(choice!=‘0’)
{
cout<<" ┏━━━━━━━━━━━━━┓\n";
cout<<" ┃ 图 书 管 理 系 统 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃1.借书 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃2.还书 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃3.图书维护 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃4.读者维护 ┃\n";
cout<<" ┃━━━━━━━━━━━━━┃\n";
cout<<" ┃0.退出 ┃\n";
cout<<" ┗━━━━━━━━━━━━━┛\n";
cin >> choice;
switch (choice)
{
case ‘1’:
system(“cls”);
cout <<" 借书 读者编号:";
cin >>Studentid;
cout <<" 图书编号: “;
cin >>bookid;
r=StudentDB.equal(Studentid);//按编号查找
if (NULLr)
{
cout <<" 不存在该读者,不能借书"<< endl;
break;
}
b=BookDB.equal(bookid);
if (b
NULL)
{
cout <<” 不存在该图书,不能借书"<< endl;
break;
}
if (b->borrowbook()0)
{
cout << " 该图书已借出,不能借书"<< endl;
break;
}
r->borrowbook(b->getnumber());
system(“cls”);
break;
case ‘2’:
system(“cls”);
cout<<“还书\n 读者编号:”;
cin >>Studentid;
cout << " 图书编号:";
cin >>bookid;
r=StudentDB.equal(Studentid);
if (r
NULL)
{
cout <<" 不存在该读者,不能还书" << endl;
break;
}
b=BookDB.equal(bookid);
if (b==NULL)
{
cout <<" 不存在该图书,不能还书" <<endl;
break;
}
b->retbook();
r->retbook(b->getnumber());
break;
case ‘3’:
system(“cls”);
BookDB.bookdata();
break;
case ‘4’:
system(“cls”);
StudentDB.Studentdata();
break;
default:
cout<<“退出\n”;
}
}
}

作者:落辰哀
来源:CSDN
原文:https://blog.csdn.net/lcamisak/article/details/76531819
版权声明:本文为博主原创文章,转载请附上博文链接!@TOC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图书馆流通管理软件 作为面向对象程序设计的第一步,在实际系统,识别对象和是很重要的。在这里,我们以图书馆流通管理系统为例,介绍识别对象与的一般方法。 1、对象和的识别 在一个信息系统内识别对象最简单也是最主要的方法是对具体事物的属性和功能进行分析,一旦识别到一个对象,就能识别出相同型的所有对象,把它们归纳为。 图书馆流通系统内,有书、读者、借书证、管理人员、借书还书行为等对象和事件,他们分别各是一个群体。例如每个图书馆都有几万甚至几十万册图书,每册图书都是一个对象,它们形成图书(在此暂时用Item款目表示)。相应的,在图书流通系统内,还可以得到以下: 读者(Reader),在图书馆注册的每位借书人都是一个读者的对象; 图书借阅信息(Loan),每次发生借书行为,都产生一个借阅信息的对象; 管理人员(Manager),是借书还书行为的操作人。 借书证对象虽然是实实在在的对象,但每位读者对应一本借书证,且只需要知道其编号,因此不需要另外定义,只作为读者的一个数据成员。 同一个信息系统,从不同的角度分析,或根据要的不同,有不同的侧重面,这样建立的对象模型不同,可能得出的分方法也不同。 2、对象属性的识别 每个对象的情况称为对象的属性,同型的对象具有共同的属性,只是每个对象的属性值不一定相同。属性是对一个对象状态的描述,如“在馆图书”,从流通管理的角度来看,应包含书名Title、作者名Author、分号IndexCode、册数Number、条码号BarCode等属性。 其它的属性如下: 读者,包含姓名Name、职务Position、年龄Age、借书证编号Code等。一个读者允许借阅若干册书,在此用一个Item的数组items保存相应信息。另外对读者所借书册数要统计,定义一个计数的成员Counter; 图书借阅信息,包含所借书item、借书人reader、借书操作员manager等; 管理人员,包含姓名Name、年龄Age、工号Code等; 管理人员只有在发生借书行为时才作为操作人员记录下来,可以作为借书信息的一个数据成员记录备查,程序未定义其对象。 同一个(对象),从不同的角度分析,或根据要的不同,描述它的属性也可能不一致。 3、对象功能的确定 对象的功能指为了达到目的必须执行的动作,或是对象对所发生事件的反应。功能也可称为对象的操作。 在图书馆流通管理系统内,图书应包含为各属性赋值(Set…)的操作、读取条码(GetCode)和显示图书基本信息(Show)的操作,另外还定义了缺省构造函数和拷贝构造函数。 读者,需定义为各属性赋值(Set…)的操作、读取借书证号的操作,借书和还书需要向所借书数组或减少书,定义AddBook和DelBook两个操作,还有显示所借书的操作ShowBooks。 4、对象和的标记 在这里采用科德(Coad)定义的面向对象方法的描述符号,这一方法是Peter Coad和Ed YourDon于1990年提出的,这一方法的优点是图形简单、易于理解和掌握,但对和对象属性的访问权限无法进行有效的描述。 科德标记法,使用一个圆角矩形表示,矩形内部分为三个部分,上部写名,部写属性(数据成员),下部表示该的操作(函数成员)。对象是的实例,在科德标记法,在相应标记外一个圆角矩形框表示对象,并将矩形内部的表示名的地方写上对象名,如图4.15。 科德表示法可形象地用扑克牌示意图来表示。如图4.16,一个可能有0个或1个2个3个甚至更多对象,但没有实例化以前,它们在图上只画一个圆角矩形,就像一叠扑克牌,只看见最上面的一张牌;当把这叠牌散开时,它们是若干个对象,就像被实例化了。 科德标记法还有表示连接的符号,如图4.17,一个带线段的半圆弧表示A是通用,B是特殊间带空心三角形的线段表示A包含B即整体与部分的关系,间带实心箭头的线段表示A向B发送消息,一段实线表示对象之间的连接线。 根据上面对的图书馆流通管理系统的分析,在图4.18,用科德标记法表示Item, Reader, Manager, Loan四个,它们的数据成员及其型、函数成员的原型都在图标出,但无法标出它们的访问权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值