宿舍管理查询软件Word格式.docx
- 文档编号:18896280
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:23
- 大小:551.93KB
宿舍管理查询软件Word格式.docx
《宿舍管理查询软件Word格式.docx》由会员分享,可在线阅读,更多相关《宿舍管理查询软件Word格式.docx(23页珍藏版)》请在冰豆网上搜索。
data);
if(p==NULL)
r=s;
elseif(s->
data<
r->
data)
r->
left=insert(r->
left,s);
right=insert(r->
right,s);
flag=true;
//建树
BSTree*createBSTree(BSTree*r,int*a,intn)
inti;
BSTree*t;
t=r;
for(i=0;
i<
n;
i++)
BSTree*s=(BSTree*)malloc(sizeof(BSTree));
s->
data=a[i];
left=NULL;
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;
data>
data)
sf=getFather(r->
}
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->
//被删除结点是叶子结点,又是根结点
r=NULL;
right!
=NULL&
left=s->
right;
right=s->
//被删除结点有右孩子,无左孩子.被删结点是根结点
sf==NULL)
r=s->
//被删结点有左孩子,无右孩子.被删结点不是根结点
left!
left;
//被删结点有左孩子,无右孩子.被删结点是根结点
temp=s->
father=s;
//找出左子树最大的节点
while(temp->
father=temp;
temp=temp->
}//while
data=temp->
data;
if(father!
=s)
father->
right=temp->
left=temp->
}//elseif
cout<
<
"
删除之后,二叉排序树为空!
endl;
删除成功!
//前序输出
voidpreOrder(BSTree*r)
return;
"
;
preOrder(r->
left);
right);
//中序输出
voidinOrder(BSTree*r)
return;
inOrder(r->
//后序输出
voidpostOrder(BSTree*r)
postOrder(r->
voidmenue()
endl<
请选择您要进行的操作:
1.插入(I/i)2.查找(S/s)"
cout<
3.删除(D/d)4.先序输出(P/p)"
5.中序输出(M/m)6.后序输出(L/l)"
7.退出(E/e)"
操作:
intmain(intargc,char*argv[])
---------------------二叉排序树建立---------------------"
intcases;
请输入案例个数:
cin>
>
cases;
while(cases--)
intn;
flag=false;
BSTree*root=NULL;
请输入元素个数:
请输入这些元素:
a[i];
root=createBSTree(root,a,n);
//建立二叉排序树
if(root!
二叉排序树建立成功!
二叉排序树建立失败!
return0;
}//else
此二叉树根的值为:
root->
menue();
chars;
s;
while
(1)
if(s=='
E'
||s=='
e'
)
break;
elseif(s=='
I'
i'
请输入您要插入的值:
intx;
x;
BSTree*p=(BSTree*)malloc(sizeof(BSTree));
p->
data=x;
left=NULL;
right=NULL;
root=insert(root,p);
if(flag==false)
插入成功!
此二叉树中已存在此值!
flag=false;
//恢复原值
S'
s'
请输入您要查找的值:
BSTree*p=search(root,x);
if(p==0)
没有这个值!
gotos1;
BSTree*pfather=getFather(root,p);
查找的值为:
p->
if(pfather!
其父节点的值为:
pfather->
它是根节点,没有父节点!
if(p->
right==NULL)
它是叶子节点,没有子节点"
left!
=NULL)
其左儿子节点的值为:
left->
其左儿子节点为空!
right!
其右儿子的值为:
right->
其右儿子节点为空!
D'
d'
请输入您要删除的节点的值:
intvalue;
value;
你确定要删除吗?
(Yy/Nn)"
charorder;
order;
if(order=='
Y'
||order=='
y'
BSTree*node;
node=search(root,value);
if(node==NULL)
该节点不存在!
BSTree*nodeDel=deleteNode(root,node);
}//if(order=='
elseif(order=='
N'
n'
命令不正确,请重新输入!
P'
p'
其先序输出为:
preOrder(root);
}//elseif(s=='
M'
m'
其中序输出为:
inOrder(root);
L'
l'
其后序输出为:
postOrder(root);
命令有误,请重新输入!
s1:
menue();
}//while
(1)
}//while(cases--)
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是其友元类
seqlist();
~seqlist();
voidlistinsert(student*t);
voidlistnamerefer(stringn);
voidlistnumberrefer(intn);
voidlistroomrefer(intn);
voidprint();
private:
list<
student*>
stulist;
};
classfactory
factory();
~factory();
voidsearch(intx);
seqlistL;
student:
:
student()
name='
\0'
number=0;
room=0;
seqlist:
seqlist()
~seqlist()
voidseqlist:
listinsert(student*t)
stulist.push_back(t);
//按姓名查询
listnamerefer(stringn)
list<
iteratoriter=stulist.begin();
while(iter!
=stulist.end())
if((*iter)->
name==n)
姓名:
(*iter)->
name<
学号:
number<
宿舍号:
room<
else;
iter++;
//按学号查询
listnumberrefer(intn)
number==n)
//按宿舍房号查询
listroomrefer(intn)
room==n)
print()
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};
for(intj=0;
j<
10;
j++)
student*pStudent=newstudent();
pStudent->
name=name[j];
number=number[j];
room=room[j];
L.listinsert(pStudent);
~factory()
{}
voidfactory:
search(intx)//查询方式选择
switch(x)
case1:
1.按姓名查询"
2.按学号查询"
3.按宿舍号查询"
请选择您想要进行的操作:
inta;
a;
switch(a)
case1:
请输入需要查询学生的姓名:
stringb;
cin>
b;
L.listnamerefer(b);
case2:
请输入需要查询学生的学号:
intb;
L.listnumberrefer(b);
case3:
请输入需要查询学生的宿舍号:
intb;
L.listroomrefer(b);
default:
您的输入有误!
break;
L.print();
输入错误"
(3)main.cpp
voidmain()
------------------------------------宿舍管理查询软件----------------------------"
factoryF;
intp;
do{
********************************************************************************"
1:
查询单个成员"
2:
查看所有成员"
请选择您想要进行的操作:
intx;
F.search(x);
继续请按1,退出请按0"
请输入选择:
p;
while(p);
5.运行结果与测试
(1)查询单个学生的信息
按姓名查询:
按学号查询:
按宿舍号查询:
(2)查询所
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宿舍 管理 查询 软件