关于算法与数据结构课程设计(C++版)

作者&投稿:束唐 (若有异议请与网页底部的电邮联系)
校园咨询算法与数据结构课程设计~

要感觉接受困难可以从简单的问题自己开始研究。比如数组排序,查找,自己写的堆栈容器什么的。当你被问题难住而后辛苦发明了自己的算法后再去看经典算法,就会有感觉了。

程序==数据放在数据结构里面+算法

下面的程序包含了树二叉树的所有操作
在二叉树的应用中有二叉排序树。
都是C语言,只不过用了C++的cin(输入)和cout(输出),因为这两个不需要格式控制符。
//建一个工程:包含头文件:bittree.h Cpp文件:bittree.cpp main函数:main.cpp
编译运行就可以了。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//头文件 bittree.h
#ifndef _DEF
#define _DEF
#include
#include
#include
using namespace std;
#define TURE 1
#define OK 1
#define FALSE 0
#define ERROR 0
#define INFEASIBLE -1//不可实行的
#define OVERFLOW -2
typedef int stadus;
typedef char Telemtype;
//typedef int Telemtype2;//为了二叉排序树的创建
typedef char ElemType;
#define STACK_SIZE 100;
#define STACKINCREMENT 10;

//二叉树
typedef struct bitnode{
Telemtype data;
struct bitnode *lchild,*rchild;
}BitNode,*BitTree;
extern stadus CreateBitTree(BitTree &T);
extern stadus PreOrderTraverse(BitTree T);
extern stadus InOrderTraverse(BitTree T);
extern stadus PostOrderTraverse(BitTree T);

typedef BitNode selemtypechar;
typedef BitTree selemtypechar2;

// 栈
typedef struct SqStack{
selemtypechar2 *base;
selemtypechar2 *top;
int stacksize;
}sqstack;
extern stadus initstackC(sqstack &S);
extern stadus gettopC(sqstack S,selemtypechar2 &e);
extern stadus pushC(sqstack &S,selemtypechar2 e);
extern stadus popC(sqstack &S,selemtypechar2 &e);
extern stadus destroyC(sqstack &S);//销毁
extern stadus clearC(sqstack &S);//置空
extern stadus stackempty(sqstack S);

//栈实现二叉树的输出
extern stadus PreOrderTraverse2(BitTree T);
extern stadus InOrderTraverse2(BitTree T);
extern stadus PostOrderTraverse2(BitTree T);
//二叉树的应用
extern stadus Depth(BitTree T);
extern stadus Single(BitTree T);
extern stadus Double(BitTree T);
extern stadus CountLeaf(BitTree T);
extern void Change_Left_Right(BitTree T);
//二叉层次遍历用到队列
typedef BitTree Qelemtype;
typedef struct QNode{
Qelemtype data;
struct QNode *next;
}qnode,*QueuePtr;
typedef struct {
QueuePtr front;
QueuePtr rear;
}LinkQueue;
extern stadus InitQueue(LinkQueue &Q);
extern stadus DestroyQueue(LinkQueue &Q);
extern stadus EnterQueue(LinkQueue &Q,Qelemtype e);
extern stadus DeQueue(LinkQueue &Q,Qelemtype &e);
//二叉层次遍历
extern stadus LevelOrder(BitTree T);
//二叉排序树
extern void insert(BitTree &T,ElemType x);
extern void CreateBiTree2(BitTree &root);

#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//cpp文件 bittree.cpp
#include "bittree.h"
#include

stadus initstackC (sqstack &s)
{
s.base=(selemtypechar2 *)malloc(100*sizeof(selemtypechar));//用STACKINCREMENT会报错???
if (!s.base) exit(OVERFLOW);
s.top=s.base;
s.stacksize=100;
return OK;
}
stadus gettopC(sqstack s,selemtypechar2 &e)
{
if(s.base==s.top) return ERROR;
e=*(s.top-1);
return OK;
}
stadus pushC(sqstack &s,selemtypechar2 e)
{
if ((s.top-s.base)>=s.stacksize)
{
s.base=(selemtypechar2 *)realloc(s.base,((s.stacksize+10)*(sizeof(selemtypechar))));
if(!s.base) exit(OVERFLOW);
s.top=s.base+s.stacksize;
s.stacksize+=10;
}
*(s.top++)=e;
//s.top++;
return OK;
}
stadus popC(sqstack &s,selemtypechar2 &e)
{
if(s.top==s.base) return ERROR;
--s.top;
e=*(s.top);
return OK;
}
stadus destroyC(sqstack &s)
{
free(s.base); s.base=NULL;s.top=NULL;
return OK;
}
stadus clearC(sqstack &s)
{
s.top=s.base;
return OK;
}
stadus stackempty(sqstack s)
{
if(s.top!=s.base) return ERROR;
else
return OK;
}

//二叉树
stadus CreateBitTree(BitTree &T)//创建
{
Telemtype ch;
cin>>ch;
if(ch=='#') T=NULL;
else{
T=(BitTree)malloc(sizeof(BitNode));
if (!T) exit (OVERFLOW);
T->data=ch;
CreateBitTree(T->lchild);
CreateBitTree(T->rchild);
}
return OK;
}
stadus PreOrderTraverse(BitTree T)//先序访问
{
if(!T) return ERROR;
else if (T)
{
coutdata<<" ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
return OK;
}
stadus InOrderTraverse(BitTree T)//中序
{
if(!T) return ERROR;
else if (T)
{
InOrderTraverse(T->lchild);
coutdata<<" ";
InOrderTraverse(T->rchild);
}
return OK;
}
stadus PostOrderTraverse(BitTree T)//后序
{
if(!T) return ERROR;
else if (T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
coutdata<<" ";
}
return OK;
}

//栈实现二叉树的访问
stadus PreOrderTraverse2(BitTree T)//先序
{
sqstack s;
BitTree p;
initstackC(s);
p=T;
//pushC(s,p);
while (p||!stackempty(s))
{
//popC(s,p);
if (p)
{
pushC(s,p);
if(!p->data)return ERROR;
coutdata<<" ";
//p1=p;
p=p->lchild;
if (p==NULL)
{
popC(s,p);
p=p->rchild;
}
else
pushC(s,p);

}
else {
popC(s,p);
popC(s,p);
p=p->rchild;
if (p==NULL)
{
popC(s,p);
if (p==NULL)
{
return OK;
}
else
{
p=p->rchild;
}
}
else{
pushC(s,p);
if(!p->data)return ERROR;
coutdata<<" ";
p=p->lchild;//左空不压栈
if (p==NULL)
{
popC(s,p);
p=p->rchild;
}
else
pushC(s,p);
}
}
}
destroyC(s);
return OK;
}
stadus InOrderTraverse2(BitTree T)//中序
{
sqstack s;
BitTree p;
initstackC(s);
p=T;
while (p||!stackempty(s))
{
if (p)
{
pushC(s,p);
p=p->lchild;
}
else {
popC(s,p);
if(!p->data)return ERROR;
coutdata<<" ";
p=p->rchild;
}
}
destroyC(s);
return OK;
}

stadus PostOrderTraverse2(BitTree T)//后序
{
sqstack s;
BitTree p;
initstackC(s);
p=T;
while (p||!stackempty(s))
{
if (p)
{
pushC(s,p);
p=p->lchild;
if (p==NULL)
{
popC(s,p);
//p=p->rchild;
if (p->rchild==NULL)
{
if(!p->data)return ERROR;
coutdata<<" ";
//p=p->rchild;
popC(s,p);
if (p==NULL)
{
return OK;
}
else
{
//pushC(s,p);//???右结点重复压栈???
//p1=p;
p=p->rchild;
//p->rchild=NULL;
}
}
else
{
p=p->rchild;
}
}
else
continue ;
}
else
{
//popC(s,p);
if(!p->data)return ERROR;
coutdata<<" ";
popC(s,p);
if (p==NULL)
{
return OK;
}
else
{
//pushC(s,p);
//p1=p;
p=p->rchild;
//p->rchild=NULL;
}
}
}
destroyC(s);
return OK;
}
//二叉树的应用

//二叉树的深度
stadus Depth(BitTree T)
{
int depthval,depthLeft,depthRight;
if (!T) depthval=0;
else{
depthLeft=Depth(T->lchild);
depthRight=Depth(T->rchild);
depthval=1+(depthLeft>depthRight?depthLeft:depthRight);
}
return depthval;
}
//二叉树的单分支结点数
stadus Single(BitTree T)
{
if (T==NULL) return 0; //空树
else if (T->lchild==NULL && T->rchild==NULL) return 0; //叶子结点
else{
if (!T->lchild && T->rchild) return Single(T->rchild)+1;//只有左单分支
if (T->lchild && !T->rchild) return Single(T->lchild)+1;//只有右单分支
if(T->lchild && T->rchild) return Single(T->lchild)+Single(T->rchild);//双分支结点
}
}
//二叉树的多分支结点数
stadus Double(BitTree T)
{

if (T==NULL) return 0; //空树
else if (T->lchild==NULL && T->rchild==NULL) return 0; //叶子结点
else{
if (!T->lchild && T->rchild) return Double(T->rchild);//只有左单分支
if (T->lchild && !T->rchild) return Double(T->lchild);//只有右单分支
if(T->lchild && T->rchild) return Double(T->lchild)+Double(T->rchild)+1;//双分支结点
}
}
//叶子结点
stadus CountLeaf(BitTree T)
{
int num,num1,num2;
if(T==NULL) num=0;
else if(T->lchild==NULL&&T->rchild==NULL)
num=1;
else
{
num1=CountLeaf(T->lchild);
num2=CountLeaf(T->rchild);
num=num1+num2;
}
return num;
}
//交换左右子树
void Change_Left_Right(BitTree T)
{
BitTree Temp;
if (T)
{
Change_Left_Right(T->lchild);
Change_Left_Right(T->rchild);
Temp=T->lchild;
T->lchild=T->rchild;
T->rchild=Temp;
}
}
//二叉层次遍历用到队列
stadus InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(100*sizeof(qnode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
stadus DestroyQueue(LinkQueue &Q)
{
while (Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return OK;
}

stadus EnterQueue(LinkQueue &Q,Qelemtype e)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(qnode));
if(!p) return ERROR;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
stadus DeQueue(LinkQueue &Q,Qelemtype &e)
{ QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
free(p);
return OK;
}
//二叉层次遍历
stadus LevelOrder(BitTree T)
{
LinkQueue Q;
BitTree B;
InitQueue(Q);
if (T!=NULL)
{
EnterQueue(Q,T);
while (!(Q.front==Q.rear))
{
DeQueue(Q,B);
coutdata<<" ";
if(B->lchild!=NULL) EnterQueue(Q,B->lchild);
if(B->rchild!=NULL) EnterQueue(Q,B->rchild);
}
}
return OK;
}
//二叉排序树
void insert(BitTree &T,ElemType x)
{
if (T==NULL)
{
T=(BitTree)malloc(sizeof(BitNode));
T->data=x;
T->lchild=T->rchild=NULL;
}
else
{
if(xdata)insert(T->lchild,x);
if(x>=T->data)insert(T->rchild,x);
}
}
void CreateBiTree2(BitTree &root)
{
ElemType x;
root=NULL;
cout"<<endl;
cout"<<endl;
cin>>x;
while (x!='#')
{
insert(root,x);
cin>>x;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//主函数 main.cpp
#include "bittree.h"
void main()
{
system("cls");
system("color f0");
BitTree T;
Create:
cout:"<<endl;
CreateBitTree(T);
BitTree T1(T);
select:
cout<<''<<''<<"----------------MAIN-MENU----------------"<<endl;
cout<<''<<''<<"&1、先序输出 2、中序输出 3、后序输出 &"<<endl;
cout<<''<<''<<"&4、栈实现输出 5、重新创建二叉树 0、退出&"<<endl;
cout<<''<<''<<"------------6、二叉树的应用-------------"<<endl;
char sel;
getchar();
cin>>sel;
switch (sel)//总
{
case '0':
break;
case '1':cout<<endl<<"---------------------------------"<<endl;
PreOrderTraverse(T);
cout<<endl<<"---------------------------------"<<endl;
goto select;
case '2':cout<<endl<<"---------------------------------"<<endl;
InOrderTraverse(T);
cout<<endl<<"---------------------------------"<<endl;
goto select;
case '3':cout<<endl<<"---------------------------------"<<endl;
PostOrderTraverse(T);
cout<<endl<<"---------------------------------"<<endl;
goto select;
case '4':
stackcout:
cout<<endl<<''<<" -------------------SUB-MENU1---------------------"<<endl;
cout<<''<<" &1、先序输出 2、中序输出 3、后序输出 4、返回 &"<<endl;
cout<<''<<" ------------------------------------------------"<<endl;
cin>>sel;
switch (sel)//栈关于树的输出
{
case '1':cout<<endl<<"---------------------------------"<<endl;
PreOrderTraverse2(T1);//p->lchild==null,时 T 的值被修改!!!!!!!!
cout<<endl<<"---------------------------------"<<endl;
goto stackcout;
case '2':cout<<endl<<"---------------------------------"<<endl;
InOrderTraverse2(T);
cout<<endl<<"---------------------------------"<<endl;
goto stackcout;
case '3':cout<<endl<<"---------------------------------"<<endl;
PostOrderTraverse(T1);//栈实现未写完
cout<<endl<<"---------------------------------"<<endl;
goto stackcout;
case '4':goto select;
default:cout<<"选择错误!!!"<<endl;
goto stackcout;
}
case '5':
goto Create;
case '6':
{
SUB_MENU2:
cout<<''<<''<<"-------------------------SUB-MENU2---------------------"<<endl;
cout<<''<<''<<"&1、二叉树的深度 2、二叉树的单分支结点数 &"<<endl;
cout<<''<<''<<"&3、二叉树的多分支结点数 4、二叉树的叶子结点数 &"<<endl;
cout<<''<<''<<"&5、二叉层次遍历 6、二叉排序树 7、交换左右子树 &"<<endl;
cout<<''<<''<<"&------------------8、输出 0、返回--------------------&"<<endl;
cin>>sel;
switch (sel)//二叉树的应用
{
case '0':
goto select;
case '1':
{
int deepth=0;
deepth=Depth(T);
cout<<endl<<"---------------------------------"<<endl;
cout<<"树的深度为:"<<deepth<<endl;
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '2':
{
int cou_sig;
cou_sig=Single(T);
cout<<endl<<"---------------------------------"<<endl;
cout<<"此树的单分支结点为数:"<<cou_sig<<endl;
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '3':
{
int cou_dou;
cou_dou=Double(T);
cout<<endl<<"---------------------------------"<<endl;
cout<<"此树的双分支结点数为:"<<cou_dou<<endl;
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '4':
{
int cou_leaf;
cou_leaf=CountLeaf(T);
cout<<endl<<"---------------------------------"<<endl;
cout<<"此树的叶子结点数为:"<<cou_leaf<<endl;
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '5':
{
cout<<"二叉层次遍历的结果为:"<<endl;
cout<<endl<<"---------------------------------"<<endl;
LevelOrder(T);
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '6':
{
BitTree T3;
CreateBiTree2(T3);
SUB3:
cout<<''<<"-------------------------SUB-MENU2-------------------"<<endl;
cout<<''<<" &1、先序输出 2、中序输出 3、后序输出 0、返回 &"<<endl;
cout<<''<<"-----------------------------------------------------"<<endl;
cin>>sel;
switch (sel)//二叉树的层次遍历
{
case '0':
break;
case '1':cout<<endl<<"---------------------------------"<<endl;
PreOrderTraverse(T3);
cout<<endl<<"---------------------------------"<<endl;
goto SUB3;
case '2':cout<<endl<<"---------------------------------"<<endl;
InOrderTraverse(T3);
cout<<endl<<"---------------------------------"<<endl;
goto SUB3;
case '3':cout<<endl<<"---------------------------------"<<endl;
PostOrderTraverse(T3);
cout<<endl<<"---------------------------------"<<endl;
goto SUB3;
default:
cout<<"选择错误!!!"<<endl;
goto SUB3;
}
}
goto SUB_MENU2;
case '7':
{
Change_Left_Right(T);
cout<<endl<<"---------------------------------"<<endl;
cout<<"交换完成,请选择8输出查看!!!"<<endl;
cout<<endl<<"---------------------------------"<<endl;
}
goto SUB_MENU2;
case '8':
goto select;
default:
cout<<"选择错误!!!"<<endl;
goto SUB_MENU2;
}
}
break;
default :
cout<<endl<<"选择错误!!!"<<endl;
goto select;
}
}

你说的程序中有一半我在课程设计中刚刚做过。有兴趣的话可以发送你的邮箱给我。ufo000666@yahoo.com.cn
别忘了给我评最佳答案阿。
暂且发送上图书管理系统。剩下的邮箱发。
#include <iostream>
#include <iomanip>//参数化输入/输出
#include <string>//字符串处理
#include <fstream>//输入/输出文件流类
using namespace std;
const int Maxr=100;//最多的读者
const int Maxb=100;//最多的图书
const int Maxbor=3;//每位读者最多借三本书

//读者类,实现对读者的信息的描述
class Reader
{
private:
int tag; //删除标记 1:已删 0:未删
int num; //读者编号
char name[10]; //读者姓名
char danwei[20];
int borbook[Maxbor];//所借图书
public:
Reader() {}
char *getname() {return name;} //获取姓名
int gettag() {return tag;} //获取删除标记
int getnum() {return num;} //获取读者编号
char *getdanwei(){return danwei;}
void setname(char na[]) //设置姓名
{
strcpy(name,na);

}
void setdanwei(char dw[]) //设置单位
{
strcpy(danwei,dw);

}

void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删
void addreader(int n,char *na,char *dw)//增加读者
{
tag=0;
num=n;
strcpy(name,na);
strcpy(danwei,dw);
for(int i=0;i<Maxbor;i++)
borbook[i]=0;
}
void borrowbook(int bookid)//借书操作
{
for(int i=0;i<Maxbor;i++)
{
if (borbook[i]==0)
{
borbook[i]=bookid;
return;

}
}

}
int retbook(int bookid)//还书操作
{
for(int i=0;i<Maxbor;i++)
{
if(borbook[i]==bookid)
{
borbook[i]=0;
return 1;

}
}
return 0;
}
void disp()//读出读者信息
{
cout << " " << num <<" " << name<<" "<<danwei<<" "<<"借书编号:[";
for(int i=0;i<Maxbor;i++)
if(borbook[i]!=0)
cout << borbook[i]<<" ";
cout << "]"<<endl;

}
};

//读者类库,实现建立读者的个人资料
class RDatabase
{
private:
int top; //读者记录指针
Reader read[Maxr];//读者记录
public:
RDatabase() //构造函数,将reader.txt读到read[]中
{
Reader s;
top=-1;
fstream file("reader.txt",ios::in);//打开一个输入文件
while (1)
{
file.read((char *)&s,sizeof(s));
if (!file)break;
top++;
read[top]=s;
}
file.close(); //关闭 reader.txt
}
void clear()//删除所有读者信息
{
top=-1;
}
int addreader(int n,char *na,char *dw)//添加读者时先查找是否存在
{
Reader *p=query(n);
if (p==NULL)
{
top++;
read[top].addreader(n,na,dw);
return 1;
}
return 0;

}
Reader *query(int readerid)//按编号查找
{
for (int i=0;i<=top;i++)
if (read[i].getnum()==readerid &&
read[i].gettag()==0)
{
return &read[i];
}
return NULL;
}
void disp() //输出所有读者信息
{
for (int i=0;i<=top;i++)
read[i].disp();
}
void readerdata();//读者库维护
~RDatabase() //析构函数,将read[]写到reader.txt文件中
{
fstream file("reader.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 RDatabase::readerdata()
{

char choice;
char rname[20];
char rdanwei[40];
int readerid;
Reader *r;
while (choice!='0')
{
cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1——新 增\n\n\t\t 2——删 除\n\n\t\t 3——查 询\n\n\t\t 4——显 示\n\n\t\t 0——退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入读者编号:";
cin >> readerid;
cout << "输入读者姓名:";
cin >> rname;
cout << "输入读者单位:";
cin >> rdanwei;
addreader (readerid,rname,rdanwei);
break;

case '2':
cout << " 输入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<" 该读者不存在" << endl;
break;
}
r->delbook();
break;
case '3':
cout << "读入读者编号:";
cin >> readerid;
r=query(readerid);
if (r==NULL)
{
cout <<"该读者不存在"<< endl;
break;
}
r->disp();
break;
case '4':
disp();
break;
default:cout<<"请重新输入:";break;
}
}
}

//图书类,实现对图书的描述,图书的编号,书名,借出,还入等
class Book
{
private:
int tag;//删除标记 1:已删 0:未删
int no;//图书编号
char name[20];//书名
int num;//图书册数
int onshelf;//是否再架 1:再架 2:已借
public:
Book(){}
char *getname() { return name; }//获取姓名
int getno(){ return no; }//获取图书编号
int getnum(){ return num; }//获取图书册数
int gettag(){ return tag; }//获取删除标记
void setname(char na[])//设置书名
{
strcpy(name,na);
}
void delbook(){ tag=1;}//删除图书
void addbook(int n,int nu,char *na)//增加图书
{
tag=0;
no=n;
num=nu;
strcpy(name,na);
onshelf=1;
}
int borrowbook()//借书操作
{
if (num>2||num==2)
{
onshelf=1;
num=num-1;
return 1;
}
else
if(onshelf==1)
{
onshelf=0;
return 1;
}
return 0;
}
void retbook()//还书操作
{
onshelf=1;
}
void disp()//输出图书
{
cout << " " << no << " " << name << " "
<<(onshelf==1? "在架":"已借") <<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();
}

int addbook(int n,int nu,char *na)//增加图书
{
Book *p=query(n);
Book *q=query(nu);
if (NULL==p)
{
top++;
book[top].addbook(n,nu,na);
return 1;
}
return 0;
}
Book *query(int bookid)//查找图书
{
for (int i=0;i<=top;i++)
if (book[i].getno()==bookid &&book[i].gettag()==0)
{
return &book[i];
}
return NULL;
}
void bookdata();//图书库维护
void disp()
{
for (int i=0;i<=top;i++)
if (book[i].gettag()==0)
book[i].disp();
}
~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 bnum;
int bookid;
Book *b;
while (choice!='0')
{
cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;
cout<<"\n\t\t 1——新 增\n\n\t\t 2——删 除\n\n\t\t 3——查 找\n\n\t\t 4——显 示\n\n\t\t 0——退 出"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout << "输入图书编号:"<<endl;
cin >> bookid;
cout << "输入图书书名:"<<endl;
cin >> bname;
cout << "输入图书册数:"<<endl;
cin >> bnum;
addbook(bookid,bnum,bname);
break;
case '2':

cout <<" 读入图书编号:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该图书不存在" << endl;
break;
}
b->delbook();
break;
case '3':
cout << " 读入图书编号:"<<endl;
cin >> bookid;
b=query(bookid);
if (b==NULL)
{
cout <<" 该图书不存在"<< endl;
break;
}
b->disp();
break;
case '4':
disp();
break;
default:cout<<"请重新输入:";
}
}
}

//main() 函数的实现,程序的主界面的引导

void main()
{
char choice;
int bookid,readerid;
RDatabase ReaderDB;
Reader *r;
BDatabase BookDB;
Book *b;
while(choice!='0')
{
cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";

cout <<"\t\t 1——借 书\n\n\t\t 2——还 书 \n\n\t\t 3——图 书 维 护\n\n\t\t 4——读 者 维 护\n\n\t\t 5——退 出 系 统"<<endl;
cin >> choice;
switch (choice)
{
case '1':
cout <<" 借书 读者编号:";
cin >>readerid;
cout <<" 图书编号: ";
cin >>bookid;
r=ReaderDB.query(readerid);//按编号查找
if (NULL==r)
{
cout <<" 不存在该读者,不能借书"<< endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在该图书,不能借书"<< endl;
break;
}
if (b->borrowbook()==0)
{
cout << " 该图书已借出,不能借书"<< endl;
break;
}
r->borrowbook(b->getno());
break;
case '2':
cout<<"还书\n 读者编号:";
cin >>readerid;
cout << " 图书编号:";
cin >>bookid;
r=ReaderDB.query(readerid);
if (r==NULL)
{
cout <<" 不存在该读者,不能还书" << endl;
break;
}
b=BookDB.query(bookid);
if (b==NULL)
{
cout <<" 不存在该图书,不能还书" <<endl;
break;
}
b->retbook();
r->retbook(b->getno());
break;
case '3':
BookDB.bookdata();
break;
case '4':
ReaderDB.readerdata();
break;
default:cout<<"请重新输入:";

}
}
}

要32位控制台的还是MFC的?
要是32位控制台的,我这儿有个类似的程序,可以给你,稍加改动就可以用了!


数据结构与算法分析
因此,可以说数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。学习数据结构的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理对象在计算机中表示出来并对它们进行处理。与此同时,通过算法训练来提高学生的思维能力,通过程序设计的技能...

学数据结构和算法之前要先学什么?
很显然你首先需要会一门编程语言。数据结构可以在不同的语言下实现,你可以看常用的数据结构教材,有的基于C,有的基于JAVA,所以在学习数据结构与算法之前,先学会一门语言是很有必要的事情。因为数据结构书中很多内容用到的都是C语言伪代码,如果不懂C语言的话应该是看不懂的。多了解一下点C语言、...

算法和数据结构有什么区别??
三、特点不同 1、算法:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。2、数据结构:核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。参考资料来源:百度百科-数据结构 参考资料...

计算机专业最难学的是什么?
计算机专业哪个最难学:计算机专业中编程语言课程是相对比较简单的,而数据库、操作系统、计算机组成原理、数据结构、算法设计、编译原理、计算机网络、网络安全等专业课都具有一定的难度。电气类专业、电子信息类专业、土木类专业也是非常难学的专业。特别是电气工程及其自动化专业和电子信息工程专业的课程难度较...

如何理解数据结构与算法(Python)
Python中数据结构和算法的理解:Python中数据结构指的是静态的描述数据元素之间的关系,算法指的是解决问题的方法或步骤,换句话说算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体数据结构和算法是一名程序开发人员的必备基本功,所以需要我们平时不断的主动去学习积累,接下来将自在文章中为大家具体介绍这两...

叩丁狼李明杰老师的数据结构与算法课程值得买吗?
非常推荐!杰哥讲得非常细致,ppt做得也很好。通过学这个课程,我对于数据结构有种恍然大悟的感觉,因为自己不是科班出身,毕业工作虽然从事开发,但根本没有关注过代码的性能效率,也不懂怎么去提高代码效率,现在终于明白数据结构与算法对于一个程序员的重要性。

求指导,离散数学、算法与数据结构哪个更容易些。
离散简单点,推荐使用北大出版社的那本,虽然厚了点,ps:我本科计算机专业,离散是我们的专业基础课,这学期才学的

高等院校计算机教材系列:算法与数据结构考研试题精析内容简介
同时,对于教授这门课程的教师,以及自主学习这门课程的其他专业人士,它同样富有启发和指导意义。为了更好地理解和掌握算法与数据结构,本书还特别推荐与《算法与数据结构(C语言版)》(ISBN 7-111-14620-4)教材同步使用,两者相辅相成,将极大提升学习者的理论与实践结合能力。

计算机考研专业课哪门最难
①考研专业课计算机类的408最难。408计算机学科专业基础综合属于统考,计算机统考是考408计算机基础综合科目,考试内容自己参照考试大纲,考试科目是数据结构,操作系统,组成原理,计算机网络。②902 954 935等其它各种科目代码都是各个学校自己命题的。③大部分学校还是采用自主命题,自主命题的科目和考试内容因...

数据结构与算法是什么?推荐一本数据结构的书,谢了
●合并了堆排序平均情况分析的一些新结果 本书是国外数据结构与算法分析方面的标准教材,介绍了数据结构(大量数据的组织方法)以及算法分析(算法运行时间的估算)。本书的编写目标是同时讲授好的程序设计和算法分析技巧,使读者可以开发出具有最高效率的程序。 本书可作为高级数据结构课程或研究生一年级算法...

得荣县13756828726: C++ 数据结构与算法课程设计题 求解!急急急!!!
校露福德: 用无序表实现城市数据库. 用顺序表实现时,如果你用的是数组,我想最多的问题是受到数组长度的限制,不好把握数组的大小. 如果用链表实现,在你硬件允许的情况下,可以不受限制的添加记录,但是要比顺序表消耗更多的空间,用于存...

得荣县13756828726: c++ 数据结构 课程设计 -
校露福德: 1、起泡排序 算法:核心思想是扫描数据清单,寻找出现乱序的两个相邻的项目.当找到这两个项目后,交换项目的位置然后继续扫描.重复上面的操作直到所有的项目都按顺序排好 bubblesort(struct rec r[],int n) { int i,j; struct rec w; unsigned ...

得荣县13756828726: 数据结构课程设计 -
校露福德: 这个自己看下 不过是用C实现的#include <stdio.h> #include <string.h>#include <stdlib.h>#define MAXSIZE 1000 typedef char datatype; typedef struct { datatype a[MAXSIZE]; int size; }e_list; e_list s; e_list t; void ptint_slt(e_list slt); /*输出文本*/ void ...

得荣县13756828726: 数据结构与算法 -
校露福德: 赤水残阳 的说法有问题,什么叫学好数据结构?你能用数据结构的知识实现STL库、Boost库、解决实际编程问题.①要学好数据结构,至少要学好一门计算机语言.②所以如果你的计算机语言是C++,那么不学好C++,数据结构绝对无法学好...

得荣县13756828726: 用c++程序设计与数据结构中的各种算法,数据组织方式来进行命题 -
校露福德: 好, 我改简单点, main函数里写了用法. 还有什么不懂再问 #include "stdafx.h" #define MAX_NUM_BIT_LEN (100) /*就地逆置 iArray数组指针, iLength数组长度*/ void reverselist(int iArray[], int iLength) { int iStart = 0; int iEnd = iLength - 1; ...

得荣县13756828726: 数据结构课程设计 数制转换
校露福德: 转换为二进制: //VC++ 6.0编译通过 #include<stdio.h> #include<string.h> void main() { int a,b[30],i; scanf("%d",&a); for(i=0;a!=0;i++) { b[i]=a%2; a=a/2; } for(--i;i>=0;i--) { printf("%d",b[i]); } putchar('\n'); } //关于二进制的转换,还可以用位移运...

得荣县13756828726: 请教一些C++(算法与数据结构)的题目
校露福德: 头文件#include "math.h" int fib(int n){ if(n == 0 || n == 1) return n; else if(n >= 2) return fib(n-2)+fib(n-1);} cpp文件#include "mymath.h"#include <iostream>using namespace std;int main(void){ int i; cout << "please input a integer:"; cin >> i; cout << "Result = " << fib(i) << endl; system("pause");}

得荣县13756828726: 设计一算法,求出线性表中数据域的值为X的结点序号(要求有C++语言编程,自己规定结点结构类型). -
校露福德: #include<iostream> using namespace std; #define elemtype int const int maxsize=1000; struct list{int a[maxsize];int len;}; list initlist(list l){l.len=0;return l;} list insert(list l,elemtype x,int i){int j;if(l.len>=maxsize-1){cout<<"error";}else {if((i<...

得荣县13756828726: 利用C++语言来设计坐标转换的数据结构,及算法流程 -
校露福德: 是空间直角坐标还是非直角坐标呢? 数据结构用class Coordinate(坐标){ private: double x,y,z; } 就可以了吧 可写一个坐标转换函数, Coordinate corTranslate(Coordinate oldCorordinate);还可以根据需要,再增加一个参数指明新坐标系的情况(例如原点坐标,角度等)

得荣县13756828726: C和C++语言程序设计?
校露福德: C是一个结构化语言,:它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制),而对于C++,首要考虑的是如何构造一个对象模型,让这个模...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网