宿舍管理查询软件.docx

上传人:b****5 文档编号:5907205 上传时间:2023-01-02 格式:DOCX 页数:23 大小:551.93KB
下载 相关 举报
宿舍管理查询软件.docx_第1页
第1页 / 共23页
宿舍管理查询软件.docx_第2页
第2页 / 共23页
宿舍管理查询软件.docx_第3页
第3页 / 共23页
宿舍管理查询软件.docx_第4页
第4页 / 共23页
宿舍管理查询软件.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

宿舍管理查询软件.docx

《宿舍管理查询软件.docx》由会员分享,可在线阅读,更多相关《宿舍管理查询软件.docx(23页珍藏版)》请在冰豆网上搜索。

宿舍管理查询软件.docx

宿舍管理查询软件

软件综合课程设计

二叉排序树

宿舍管理查询软件

 

二〇一四年六月

题目1:

二叉排序树

1.问题描述

从一棵空树开始创建。

基本要求:

1.创建;

2.插入、查找、删除;

3.输出(先序、中序、后序)。

2.程序代码

#include

usingnamespacestd;

structBSTree

{

intdata;

BSTree*left;

BSTree*right;

};

//标记在插入时,如果已存在,则为true,表示不需要插入,否则为false

boolflag=false;

inta[100];

//查找操作

BSTree*search(BSTree*r,intx)

{

if(r==NULL)

returnNULL;

else

{

if(r->data==x)

returnr;

elseif(r->data>x)

returnsearch(r->left,x);

else

returnsearch(r->right,x);

}

}

//插入操作

BSTree*insert(BSTree*r,BSTree*s)

{

//首先查找树中是否已存在此节点

BSTree*p=search(r,s->data);

if(p==NULL)

{

if(r==NULL)

{

r=s;

}

elseif(s->datadata)

r->left=insert(r->left,s);

elseif(s->data>r->data)

r->right=insert(r->right,s);

}

else

flag=true;

returnr;

}

//建树

BSTree*createBSTree(BSTree*r,int*a,intn)

{

inti;

BSTree*t;

t=r;

for(i=0;i

{

BSTree*s=(BSTree*)malloc(sizeof(BSTree));

s->data=a[i];

s->left=NULL;

s->right=NULL;

t=insert(t,s);

}

returnt;

}

BSTree*getFather(BSTree*r,BSTree*s)

{

BSTree*sf;

if(r==NULL||r==s)

sf=NULL;

else

{

if(s==r->left||s==r->right)

sf=r;

elseif(s->data>r->data)

sf=getFather(r->right,s);

else

sf=getFather(r->left,s);

}

returnsf;

}

//删除操作

BSTree*deleteNode(BSTree*r,BSTree*s)

{

//BSTNODE*temp,*tfather,*pf;

BSTree*temp,*father,*sf;

//pf=getfather(p,r);

sf=getFather(r,s);

//被删除结点是叶子结点,不是根结点

if(s->left==NULL&&s->right==NULL&&sf!

=NULL)

//

if(sf->left==s)

sf->left=NULL;

//

else

sf->right=NULL;

//被删除结点是叶子结点,又是根结点

elseif(s->left==NULL&&s->right==NULL&&sf!

=NULL)

r=NULL;

//

elseif(s->left==NULL&&s->right!

=NULL&&sf!

=NULL)

if(sf->left==s)

sf->left=s->right;

else

sf->right=s->right;

//被删除结点有右孩子,无左孩子.被删结点是根结点

elseif(s->left==NULL&&s->right!

=NULL&&sf==NULL)

r=s->right;

//被删结点有左孩子,无右孩子.被删结点不是根结点

elseif(s->left!

=NULL&&s->right==NULL&&sf!

=NULL)

if(sf->left==s)

sf->left=s->left;

else

sf->right=s->left;

//被删结点有左孩子,无右孩子.被删结点是根结点

elseif(s->left!

=NULL&&s->right==NULL&&sf==NULL)

r=s->left;

elseif(s->left!

=NULL&&s->right!

=NULL)

{

temp=s->left;

father=s;

//找出左子树最大的节点

while(temp->right!

=NULL)

{

father=temp;

temp=temp->right;

}//while

s->data=temp->data;

if(father!

=s)

father->right=temp->left;

else

father->left=temp->left;

}//elseif

if(r==NULL)

cout<<"删除之后,二叉排序树为空!

"<

else

cout<<"删除成功!

"<

returnr;

}

//前序输出

voidpreOrder(BSTree*r)

{

if(r==NULL)

return;

else

{

cout<data<<"";

preOrder(r->left);

preOrder(r->right);

}

}

//中序输出

voidinOrder(BSTree*r)

{

if(r==NULL)

return;

else

{

inOrder(r->left);

cout<data<<"";

inOrder(r->right);

}

}

//后序输出

voidpostOrder(BSTree*r)

{

if(r==NULL)

return;

else

{

postOrder(r->left);

postOrder(r->right);

cout<data<<"";

}

}

voidmenue()

{

cout<

"<

cout<<"1.插入(I/i)2.查找(S/s)"<

cout<<"3.删除(D/d)4.先序输出(P/p)"<

cout<<"5.中序输出(M/m)6.后序输出(L/l)"<

cout<<"7.退出(E/e)"<

cout<<"操作:

";

}

intmain(intargc,char*argv[])

{

cout<<"---------------------二叉排序树建立---------------------"<

intcases;

cout<<"请输入案例个数:

";

cin>>cases;

while(cases--)

{

intn;

flag=false;

BSTree*root=NULL;

cout<

";

cin>>n;

inti;

cout<

"<

for(i=0;i

cin>>a[i];

root=createBSTree(root,a,n);//建立二叉排序树

if(root!

=NULL)

cout<<"二叉排序树建立成功!

"<

else

{

cout<<"二叉排序树建立失败!

"<

return0;

}//else

cout<

";

cout<data<

menue();

chars;

cin>>s;

while

(1)

{

if(s=='E'||s=='e')

break;

elseif(s=='I'||s=='i')

{

cout<

";

intx;

cin>>x;

BSTree*p=(BSTree*)malloc(sizeof(BSTree));

p->data=x;

p->left=NULL;

p->right=NULL;

root=insert(root,p);

if(flag==false)

cout<<"插入成功!

"<

else

{

cout<<"此二叉树中已存在此值!

"<

flag=false;//恢复原值

}

}

elseif(s=='S'||s=='s')

{

cout<

";

intx;

cin>>x;

BSTree*p=search(root,x);

if(p==0)

{

cout<

"<

gotos1;

}

BSTree*pfather=getFather(root,p);

cout<<"查找的值为:

"<data<

if(pfather!

=NULL)

cout<<"其父节点的值为:

"<data<

else

cout<<"它是根节点,没有父节点!

"<

if(p->left==NULL&&p->right==NULL)

cout<<"它是叶子节点,没有子节点"<

else

{

if(p->left!

=NULL)

cout<<"其左儿子节点的值为:

"<left->data<

else

cout<<"其左儿子节点为空!

"<

if(p->right!

=NULL)

cout<<"其右儿子的值为:

"<right->data<

else

cout<<"其右儿子节点为空!

"<

}

}

elseif(s=='D'||s=='d')

{

cout<

";

intvalue;

cin>>value;

cout<

(Yy/Nn)";

charorder;

cin>>order;

while

(1)

{

if(order=='Y'||order=='y')

{

BSTree*node;

node=search(root,value);

if(node==NULL)

cout<

"<

else

BSTree*nodeDel=deleteNode(root,node);

break;

}//if(order=='Y'||order=='y')

elseif(order=='N'||order=='n')

{

break;

}

else

{

cout<

"<

cin>>order;

}

}

}

elseif(s=='P'||s=='p')

{

cout<

"<

preOrder(root);

cout<

}//elseif(s=='P'||s=='p')

elseif(s=='M'||s=='m')

{

cout<

"<

inOrder(root);

cout<

}//elseif(s=='M'||s=='m')

elseif(s=='L'||s=='l')

{

cout<

"<

postOrder(root);

cout<

}//elseif(s=='L'||s=='l')

else

{

cout<

"<

}

s1:

menue();

cin>>s;

}//while

(1)

}//while(cases--)

return0;

}

3.运行结果

1)建立二叉树

2)插入元素

3)查找元素

4)删除元素

5)先序输出

6)中序输出

7)后序输出

题目2:

宿舍管理查询软件

1.问题陈述

为宿舍管理人员编写一个宿舍管理查询软件,要求:

(1)采用交互工作方式;

(2)建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序;

(3)查询菜单:

A.按姓名查询;B.按学号查询;C.按房号查询;

(4)打印任一查询结果(可以连续操作)。

2.需求分析

本程序的目的是为宿舍管理部门提供住宿生信息查询软件,管理人员可以根据学生的姓名、学号、宿舍房号进行相应查询。

查询操作如下:

(1)输入的形式和输入值的范围:

学生姓名、学号、三位数的宿舍房号;

(2)输出的形式:

输出所查询学生的姓名、学号以及宿舍房号;

(3)程序所能达到的功能:

查询住宿学生的信息。

3.概要设计

(1)头文件list.h

在list.h文件中定义了3个类,分别为:

student、seqlist以及factory。

a)student类定义的是学生的相关属性:

姓名(name),学号(number)和宿舍房号(room);

b)seqlist类定义的是相关操作函数:

存入学生信息的listinsert函数,按姓名进行查询的listnamerefer函数,按学号进行查询的listnumberrefer函数,按宿舍房号进行查询的listroomrefer函数;

c)print类则是用来输出全体学生信息的;

d)factory是seqlist的友元类,包括了search函数,进行查询方式的选择及相关函数的调用。

(2)list.cpp

在list.cpp中定义的是类的成员函数。

主要是各函数的相关操作。

(3)主文件main.cpp

main.cpp文件进行的是菜单的输出、查询动作继续或退出的选择,可以说是整个软件的入口与出口。

4.详细设计

(1)list.h

classstudent

{

public:

student();//构造函数

~student();//析构函数

stringname;

intnumber;

introom;

};

classseqlist

{

friendclassfactory;//factory是其友元类

public:

seqlist();

~seqlist();

voidlistinsert(student*t);

voidlistnamerefer(stringn);

voidlistnumberrefer(intn);

voidlistroomrefer(intn);

voidprint();

private:

liststulist;

};

classfactory

{

public:

factory();

~factory();

voidsearch(intx);

private:

seqlistL;

};

(2)list.cpp

student:

:

student()

{

name='\0';

number=0;

room=0;

}

seqlist:

:

seqlist()

{

}

seqlist:

:

~seqlist()

{

}

voidseqlist:

:

listinsert(student*t)

{

stulist.push_back(t);

}

//按姓名查询

voidseqlist:

:

listnamerefer(stringn)

{

list:

:

iteratoriter=stulist.begin();

while(iter!

=stulist.end())

{

if((*iter)->name==n)

{

cout<<"姓名:

"<<(*iter)->name<<""<<"学号:

"<<(*iter)->number<<""<<"宿舍号:

"<<(*iter)->room<

}

else;

iter++;

}

}

//按学号查询

voidseqlist:

:

listnumberrefer(intn)

{

list:

:

iteratoriter=stulist.begin();

while(iter!

=stulist.end())

{

if((*iter)->number==n)

{

cout<<"姓名:

"<<(*iter)->name<<""<<"学号:

"<<(*iter)->number<<""<<"宿舍号:

"<<(*iter)->room<

}

else;

iter++;

}

}

//按宿舍房号查询

voidseqlist:

:

listroomrefer(intn)

{

list:

:

iteratoriter=stulist.begin();

while(iter!

=stulist.end())

{

if((*iter)->room==n)

{

cout<<"姓名:

"<<(*iter)->name<<""<<"学号:

"<<(*iter)->number<<""<<"宿舍号:

"<<(*iter)->room<

}

else;

iter++;

}

}

voidseqlist:

:

print()

{

list:

:

iteratoriter=stulist.begin();

while(iter!

=stulist.end())

{

cout<<"姓名:

"<<(*iter)->name<<""<<"学号:

"<<(*iter)->number<<""<<"宿舍号:

"<<(*iter)->room<

iter++;

}

}

factory:

:

factory()//学生信息库

{

stringname[]={"赵一","钱二","孙三","李四","王五","吴六","张七","周八","刘九","郑十"};

intnumber[]={1,2,3,4,5,6,7,8,9,10};

introom[]={101,101,101,101,102,102,102,102,103,103};intnumber[]={1,2,3,4,5,6,7,8,9,10};

introom[]={101,101,101,101,102,102,102,102,103,103};

for(intj=0;j<10;j++)

{

student*pStudent=newstudent();

pStudent->name=name[j];

pStudent->number=number[j];

pStudent->room=room[j];

L.listinsert(pStudent);

}

}

factory:

:

~factory()

{}

voidfactory:

:

search(intx)//查询方式选择

{

switch(x)

{

case1:

{

cout<<"1.按姓名查询"<

cout<<"2.按学号查询"<

cout<<"3.按宿舍号查询"<

cout<<"请选择您想要进行的操作:

";

inta;cin>>a;

switch(a)

{

case1:

{

cout<<"请输入需要查询学生的姓名:

";

stringb;cin>>b;

L.listnamerefer(b);

}

break;

case2:

{

cout<<"请输入需要查询学生的学号:

";

intb;cin>>b;

L.listnumberrefer(b);

}

break;

case3:

{

cout<<"请输入需要查询学生的宿舍号:

";

intb;cin>>b;

L.listroomrefer(b);

}

break;

default:

cout<<"您的输入有误!

"<

}

}

break;

case2:

L.print();

break;

default:

cout<<"输入错误"<

}

}

(3)main.cpp

voidmain()

{

cout<<"------------------------------------宿舍管理查询软件----------------------------"<

factoryF;

intp;

do{

cout<<"********************************************************************************"<

cout<<"1:

查询单个成员"<

cout<<"2:

查看所有成员"<

cout<<"********************************************************************************"<

cout<<"请选择您想要进行的操作:

";

intx;

cin>>x;

F.search(x);

cout<<"继续请按1,退出请按0"<

";

cin>>p;

}

while(p);

}

5.运行结果与测试

(1)查询单个学生的信息

按姓名查询:

按学号查询:

按宿舍号查询:

(2)查询所

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1