最基本的BOOK类的实现
1 实验目的
C++构造函数的基础练习,更合理化的程序设计习惯的训练。
2 需求分析:
定义一Book(图书)类,在该类中包括
数据成员:bookname(书名),price(价格) number(存书数量);
成员函数:display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。
在main函数中,要求创建某种图书对象,并且对该图书进行简单的显示、借阅和归还管理。
3 功能设计:
一开始,雄心勃勃的想搞一个C上的小型图书馆管理程序,
不过由于时间及技术上(技术占主要原因)的准备不足,最终还是选择最基本的模
式进行。
程序功能说明:
Mini LIBRARY
>Borrow BookName:
《Effective C++》
Restore Price:48 Yuan
Exit RestoreNum:4
借用了前一个程序设计好的界面。
用键盘的上下键移动选择相应的选项,输入完数据后,移至Borrow选项时按回车键后显示当前书本数,移动至Restore后按回车键重新显示当前书本数。
特点:小巧,精致。
不足:功能过于简单。
4整体设计:
核心类:
class Book{
public:
Book(char *p="unknown",int _price=40,int _number=5){strcpy(name,p);
price=_price;
number=_number;
nowNum=number;}
void disp();
void borrow();
void restore();
private:char name[50];
int price;
int number;
int nowNum ; };
辅助图形类:
1)class SuperCol{//集成型的绘图函数类.
public: void rect2(int tx,int ty,int bx,。。。)
void printword(int x, int y, 。。。)
。。。}
2class ScreenLayOut{/*负责图形函数的起始与静态场景的绘制*/
public: void graphicStart();
void graphicEnd();
void errorDetect();
void test();
};
键盘控制类:
class KeyControl{/*DOS下写程序多用程中断加循环,这个类就负责这项工作。*/
public:
void MiniLibrary();};
5详细核心代码段,全局变量及MAIN函数:
a)class KilomNaumileChange内部方法实现:
void Book::disp(){
int posx=32,posy=12;
gotoxy(posx,posy);
cout<<"BooK Name:"<<endl;
posy++;
gotoxy(posx,posy);
cout<<"<<"<<name<<">>"<<endl;
posy+=2;
gotoxy(posx,posy);
cout<<"Book Price:"<<price<<
" Yuan"<<endl;
posy+=2;
gotoxy(posx,posy);
cout<<"Restore Num:"<<nowNum<<
" Ben"<<endl;
}
void Book::borrow(){
if(nowNum>0)nowNum--;
disp();
}
void Book::restore(){
if(nowNum<number)nowNum++;
disp();
}
b)全局变量:
char address[]="D:\\Turboc3";//图形库地址
int length=10;//定义间隔长度
enum Statur{Going,Exit};//状态的表示
Statur Staturs=Going;
int const keyUp=0x4800;//按键BIOS键位
//上的16进制值.
int const keyDown=0x5000;
int const keyEnter=0x1c0d;
int const keyEsc=0x11b;
c)main函数即整体框架实现:
void main(void){
ScreenLayOut Director;
KeyControl Mn;
Director.graphicStart();
Director.errorDetect();
if(Staturs!=Exit){
Director.test();
Mn.MiniLibrary();
}
Director.graphicEnd();
}
d)键盘控制的实现://与上面一个实验基本一致
void KeyControl::MiniLibrary(){
int key=0;//To get the Key Code
int indexY=0,optionNum=2;
int maxx=getmaxx(),maxy=getmaxy();
SuperCol Brush;
Book Sample("Effective C++",48,5);
Brush.printword(0.23*maxx,0.25*maxy+5*length+3*indexY*length,">",2,0,5,WHITE);
while(key!=keyEsc&&Staturs!=Exit){
while(bioskey(1)==0);
key=bioskey(0);/*GetASCII Value*/
switch(key){
case keyUp: if(indexY>0){
Brush.printword(0.23*maxx,0.25*maxy+5*length+3*indexY*length,">",2,0,5,BLACK);
indexY--; Brush.printword(0.23*maxx,0.25*maxy+5*length+3*indexY*length,">",2,0,5,WHITE);}
break;
case keyDown:略。。。
case keyEnter: switch(indexY){
case 0: Sample.borrow();break;
case 1: Sample.restore();break;
case 2: Staturs=Exit;break;}
break;}}}
5总结与体会
基本功能可以实现,水平增长后,希望能拓展成有数据库功能的小型管理系统。
由于上一个实验的界面部分控制及界面部分的代码设计比较优具有通用性,所以,在做这个练习的时候,感觉轻松不少,稍稍感受到OOP编程的高效。不过,这也同时提醒我们要创新,不要在原地打转。
仍需抓紧时间努力提高.