当前位置:
文档之家› 数据结构课程设计报告,含菜单
数据结构课程设计报告,含菜单
list.ListInsert_L(i,e);
cout<<"当前链表元素为"<<endl;list.ListOut_L();
system("pause");
break;
case ID_LIST_SHOW:
list.ListOut_L();
system("pause");
break;
case ID_LIST_RETURN:
三.需求分析
菜单运用极其广泛,应用于各行各业。菜单运用起来极其方便。随着社会的发展,社会的行业出现多样化,也就需要各式各样的菜单。这就需要设计人员十分精细的设计。
进一步了解《算法与数据结构》课程的知识结构体系,绘制整个课程的知识结构逻辑示意图,类似于:
根据算法与数据及结构的课程安排,可以设计如上所示的菜单。在主菜单里可以有“线性表”、“栈和队列”、“串、数组、广义表”、“树”、“图”、“查找”、“排序”。然后要在线性表里创建一个子菜单实现“创建链表”、“插入元素”、“删除元素”、“查找元素”的功能。并且可以退出这个子菜单回到上一级菜单。栈和队列创建一个子菜单,包含进制转换和括号匹配的功能。进制转换里又分为十进制转八进制、十进制转二进制。串、数组、广义表里可以创建子菜单包含矩阵乘法、矩阵转置的功能。树里创建子菜单,有树的创建、先序遍历、中序遍历、后序遍历、树的高度、叶子数这几个选项。这些子菜单都能退出回到上一级菜单。
~CMainMenu(void);
virtual void ShowMenu();
virtual void Event(int Eid CMainMenu::ShowMenu(){
cout<<"\n **************《数据结构课程设计》*****************\n";
void conversion_2();
Status InitStack();
Status Push (JElemType x);
Status Pop(JElemType &x);
JSqStack s;
};
数组的类定义如下:
class CShuzuMenu:public CMenuBase
{
char name[200];
通过构造函数,将当前菜单对象作为子菜单的父菜单,以后退出子菜单时,子菜单将将显示权让给其父菜单:
#define EXIT_SUBMENU tmp=m_pParent;\
delete pBase;\
pBase=tmp;\
pBase->ShowMenu();
这样设计,无论有多少级菜单,其编程风格都是一样的,只需管理当前的菜单交接,而无需知道它是从哪儿来的。
CMenuBase*tmp;
switch(EvenID){
case ID_LIST:
SUBMENU(CListMenu)
break;
case ID_STACK_QUEUE:
SUBMENU(CStackMenu)
break;
case ID_EXIT:
MAIN_EXIT=true;
break;
default:
{
char name[20];
public:
CJinzhiMenu(CMenuBase*);
~CJinzhiMenu(void){}
virtual void ShowMenu();
virtual void Event(int EvenID);
protected:
void conversion_8();
InvalidateAction();
break;}
}
注意:这里的关键是如何进入子菜单,我们用了一个宏命令,例如SUBMENU(CListMenu),其定义为:
#define SUBMENU(submenu)tmp=pBase;\
pBase=new submenu(tmp);\
pBase->ShowMenu();
cout<<"输入查找元素位置";cin>>i;
list.GetElem_L(i,e);system("pause");
break;
default:
InvalidateAction();
break;}
}
线性链表各功能具体实现代码如下:
创建链表:
void CListMenu::CreateList_L(int n){
cout<<" * 1线性表2栈与队列3串、数组和广义表*\n";
cout<<" * 4树5图6查找*\n";
cout<<" * 7排序8退出*\n";
cout<<"***************************************************\n";
}
void CMainMenu::Event(int EvenID){
Status Putout_2(RLSMatrix &M);
Status MultSMatrix(RLSMatrix &M, RLSMatrix & N, RLSMatrix &Q);
Status FastTransposeSMatrix(TSMatrix &M, TSMatrix &T);
void zhuanzhi();
protected:
void CreateList_L(int n);
Status ListInsert_L(int i,ElemType e);
Status ListOut_L();
Status ListDelete_L(int i,ElemType &e);
Status GetElem_L(int i,ElemType &e);
EXIT_SUBMENU
break;
case ID_LIST_DELETE:
cout<<"请输删除元素的位置";cin>>i;
list.ListDelete_L( i,e);
cout<<"当前链表元素为"<<endl;list.ListOut_L();system("pause");break;
case ID_LIST_FIND:
还定义了线性表、栈和队列、数组串和广义表、树等模板类。
线性表的类如下:
class CListMenu:public CMenuBase
{
public:
CListMenu(CMenuBase*);
~CListMenu(void);
virtual void ShowMenu();
virtual void Event(int EvenID);
四.总体设计
设计菜单类
根据实际使用,我们知道菜单类的主要功能就是显示菜单项与响应用户选项。所以我们可以这样设计一个菜单基类:
class CMenuBase
{
public:
CMenuBase(void);
~CMenuBase(void);
virtual void ShowMenu()=0;
virtual void Event(int EvenID)=0;
5.培养根据选题需要选择学习书籍,查阅文献资料的自学能力。
二.设计任务及要求
根据《算法与数据结构》课程的结构体系,设计一个基于DOS菜单的应用程序。要利用多级菜单实现各种功能。比如,主界面是大项,主要是学过的各章的名字诸如线性表、栈与队列、串与数组及广义表等,子菜单这些章中的节或者子节。要求所有子菜单退出到他的父菜单。编程实现时,要用到C++的面向对象的功能。
m_pParent=parent;
}
void CListMenu::ShowMenu(){
cout<<" ************《线性表》*************\n";
cout<<"* 1创建线性表2插入元素*\n";
cout<<" * 3查找元素4删除元素*\n";
cout<<" * 5浏览6退出*\n";
LinkList L;};
栈和队列的类如下
class CStackMenu:public CMenuBase
{
char name[20];
public:
CStackMenu(CMenuBase*);
~CStackMenu(void){}
virtual void ShowMenu();
virtual void Event(int EvenID);
public:
CShuzuMenu(CMenuBase*);
~CShuzuMenu(void){}
virtual void ShowMenu();
virtual void Event(int EvenID);
protected:
Status Creat_2(RLSMatrix &M,int x,int y);
protected:
Statuss Visit(TElemType e);
Statuss CreateBiTree(BiTree &T1);
Statuss xianOrderTraverse(BiTree T1);
Statuss ZhongOrderTraverse(BiTree T1);