数据结构课程设计

题目1:简易运算器
题目2:轮船渡口管理系统
题目3:树结构的应用
题目4:图结构及其应用
题目5:实现图书管理信息系统的设计
有其中任何一个就行
下面是设计内容,只要有程序就行
1.分析问题,给出数学模型,设计相应的数据结构.
1)分析问题的特点,用数学表达式或其它形式描述其数学模型.
2)选择能够体现问题本身特点的逻辑结构.
3)在逻辑结构确定的情况下,为算法的设计选择相应的存储结构。顺序存储结构和非顺序存储结构的不同存储方式,其对应的算法也不相同.
2.算法设计
在已经选择好数据结构的前提下,为解决问题设计算法.
1)确定所需模块
对于稍复杂的程序设计,要充分利用模块化程序设计方法,自顶向下,逐步细化,在整体思路确定的情况下,考虑所需模块数,各模块完成功能以及模块之间的数据联系和调用关系.
2)各子模块功能描述
给出主要模块的算法描述,用流程图或伪代码表示.
3)模块之间的调用关系
给出算法各模块之间的关系图示
3.源程序清单
为了提高工作效率,充分利用上机调试程序的时间,要求学生在上机之前给出源程序清单.
4.用测试数据去验证算法及程序的正确性
正序,逆序,随机数
5.算法分析
经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度.

第1个回答  2011-06-26
我这有个停车场管理系统跟你的轮船渡口管理系统差不多!!改一下就能用!!
#include<iostream.h>
#include<string.h>
#include<stdlib.h> //free()函数功能
const int Max_Park=1;
int biandao=0;//便道上有多少车
//.................................................................
struct Car
{
char pattent;//车辆类型,a=小轿车,b=客车,c=大卡车
int number;//车辆牌照
int intime;//车进入的时间,用整数表示
};
typedef struct Queue
{
Car car;
Queue*next;
}Queue,*LQueue;//模拟停车场外的便道

typedef struct Stack
{

Car *car;
int top;
}Stack,*LStack;//模拟停车场的栈
//..................................................................
class Road
{
public:
Queue q1;
LQueue q2;
public:
void InitQ(LQueue&Head,LQueue&Rear);//队列的初始化
void InQ(LQueue&Rear,Car pacr);//入队列
void FindQ(LQueue Head,int num);//在便道上查找车辆信息
void OutQ(LQueue Head,int num);//出便道
};//便道类结束
//...................................便道类函数定义

void Road::InitQ(LQueue&Head,LQueue&Rear)
{
Rear->next=NULL;
Head=Rear;
}//队列的初始化
void Road::InQ(LQueue&Rear,Car pacr)
{
LQueue Node=new Queue;
Node->car=pacr;
Node->next=NULL;
Rear->next=Node;
Rear=Rear->next;
biandao++;
}//入队列
void Road:: FindQ(LQueue Head,int num)
{
int pos=0;
for(LQueue q=Head;q->next!=NULL;q=q->next,pos++)
{
if(q->next->car.number==num)
{
cout<<"要查找的车在便道"<<pos+1<<"位"<<" 车类型为";
switch(q->next->car.pattent)
{
case'a':cout<<"小轿车";break;
case'b':cout<<"客车";break;
case'c':cout<<"大卡车";break;
}
cout<<"此车进入的时间为"<<q->next->car.intime<<endl;
}
}
cout<<"此车不在停车场!!"<<endl;
}//在便道上查找车辆信息
void Road:: OutQ(LQueue Head,int num)
{
LQueue p=new Queue;
for(LQueue q=Head;q->next!=NULL;q=q->next)
{
if(q->next->car.number==num)
{
p=q->next;
q->next=p->next;
free(p);
biandao--;
break;
}
}
}

//........................................................
class Park
{
public:
Stack s1;
Stack s2;
Road R7;

public:
void OutputS(Car e);
void InputS(Car&e);
void InitS(LStack ss1);
Car PopS(LStack ss1);
int PushS(LStack ss1,Car car);
int FindS(LStack ss1,int number);
void InPark(LStack ss1,LQueue &Rear);
void Delete(LStack ss1,LStack ss2,int n);
void OutPark(LStack ss1,LStack ss2,LQueue Head);
void Search(LStack ss1,LQueue Head,LQueue Rear);
};//车位类结束
//......................................车位类函数的定义

void Park::OutputS(Car e)
{
cout<<"这辆车的牌照是:"<<e.number<<endl<<"这辆车的类型是:";
switch(e.pattent)
{
case'a':cout<<"小轿车";break;
case'b':cout<<"客车";break;
case'c':cout<<"大卡车";break;
}
cout<<"进入时间为:"<<e.intime<<endl;
}//查询停车场的车
void Park:: InputS(Car&e)
{
cout<<"请输入此车的类型a=小轿车,b=客车,c=大客车"<<endl;
cin>>e.pattent;
cout<<"请输入此此车的牌照号:"<<endl;
cin>>e.number;
cout<<"请输入入场时间:"<<endl;
cin>>e.intime;
}//进入停车场的车
void Park::InitS(LStack ss)
{
ss->car=new Car[Max_Park];
ss->top=-1;

}//初始化栈
Car Park:: PopS(LStack ss)
{
Car eee=ss->car[ss->top];
ss->top--;
return eee;
}//出栈
int Park::PushS(LStack ss,Car car)
{
if(ss->top<Max_Park-1)
{
ss->top++;
ss->car[ss->top].intime=car.intime;
ss->car[ss->top].number=car.number;
ss->car[ss->top].pattent=car.pattent;
return 0;
}
else
return -1;
}//车位已满,则进入便道
int Park::FindS(LStack ss,int number)
{
for(int i=0;i<=ss->top;i++)
{
if(ss->car[i].number==number)
return i;
}
return -1;//在便道上查找要找的车
}//在车位上查找要找的车辆
void Park::InPark(LStack ss1,LQueue &Rear)
{

Car ee;
InputS(ee);
int n=PushS(ss1,ee);
if(n<0)
{
Car rcar;
rcar.number=ee.number;
rcar.pattent=ee.pattent;
rcar.intime=ee.intime;
R7.InQ(Rear ,rcar);
}
}//车辆进场,有车位如车位,无车位进便道
void Park::Delete(LStack ss1,LStack ss2,int n)
{
int size=ss1->top;
for(int i=0;i<size-n;i++)
PushS(ss2,PopS(ss1));
PopS(ss1);
for( i=0;i<size-n;i++)
PushS(ss1,PopS(ss2));
}//以一个栈为中转,将任意为的车出场
void Park::OutPark(LStack ss1,LStack ss2,LQueue Head)
{

cout<<"请输入要出场的车的车牌号:"<<endl;
int num;
cin>>num;
int nn;
nn=FindS(ss1,num);
if(nn>=0)
{
cout<<"这辆车在车位上"<<endl;
OutputS(ss1->car[nn]);
Delete(ss1,ss2,nn);
if(ss1->top<=Max_Park-1)
if(Head->next!=NULL)
{
cout<<"\n便道上的车要进车位!"<<endl;

LQueue p=new Queue;
p=Head->next;
Head->next=p->next;
PushS(ss1,p->car);
free(p);
biandao--;
}
}
else
{
R7.FindQ( Head, num);
R7.OutQ( Head,num);
}
}//输出要出场的车
void Park::Search(LStack ss1,LQueue Head,LQueue Rear)
{
cout<<"停车场中现有"<<ss1->top+1<<"辆车"<<endl;
if(Head==Rear)
cout<<"便道上没有车!"<<endl;
else
cout<<"便道上停了"<<biandao<<"辆车"<<endl;
}//输出停车场的车辆信息

//............................................................
void show()
{
cout<<"*********************本停车场信息**************************"<<endl;
cout<<"本停车场共有"<<Max_Park<<"个车位"<<endl;
cout<<"只允许停放小轿车,客车,大卡车"<<endl;
cout<<"车辆进入要做车辆类型,车牌,进入时间的记录"<<endl;
cout<<"***********************************************************"<<endl;
}
/*void choise()
{
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;
}*/

void main()
{
Road R6;
show();
LStack ss1=new Stack;//停车场的栈
LStack ss2=new Stack;//作为车辆中转的栈
LQueue Head=new Queue;//队列的头
LQueue Rear=new Queue;//队列的尾
R6.InitQ( Head, Rear);//队列初始化
Park park;
park.InitS(ss1);
park.InitS(ss2);
while(1)
{
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;

char demand;
cin>>demand;
switch(demand)
{
case 'A':
{
int w=1;
while(w)
{
park.InPark(ss1,Rear);
cout<<"车辆继续进场按1,要进行其他操作按0!"<<endl;
if(Max_Park-(ss1->top+1)>0)
{
cout<<"停车场中"<<ss1->top+1<<"辆车"<<endl;
cout<<"还可以停放"<<Max_Park-(ss1->top+1)<<"辆车"<<endl;
}
else
cout<<"\n停车场已满,再来的车只能放在便道上!"<<endl;
cout<<"输入要进行的操作:"<<endl
<<"A=进场"<<endl
<<"D=出场"<<endl
<<"F=查询车辆信息"<<endl
<<"E=结束程序!"<<endl;
cin>>w;
}
};break;
case 'D': park.OutPark(ss1,ss2, Head);break;
case'F':park.Search(ss1, Head, Rear) ; break;
case'E':exit(0);
}
}

}本回答被提问者采纳
相似回答