学生实验任务管理设计方案.docx
《学生实验任务管理设计方案.docx》由会员分享,可在线阅读,更多相关《学生实验任务管理设计方案.docx(15页珍藏版)》请在冰豆网上搜索。
学生实验任务管理设计方案
学生实验任务管理设计方案
1.问题描述
学生选实验问题中的数据元素具有如下形式:
登陆密码,学生的自然情况包括姓名、学号、班级。
2.功能要求
要求完成以下功能:
⑴插入:
将预约做实验的学生插入到合适的时间队列中;
⑵删除:
时间队列中前5位学生可以在该时间做实验;
⑶查询:
教师可以随时查询某个时间队列中学生的预约情况;
⑷修改:
在没做实验之前,学生可以对预约的时间进行修改;
⑸输出:
输出每个时间队列中预约的学生名单。
3.实现要点
对队列采用循环队列的存储结构,在建立队列时,由队列的书写形式转化循环队列存储结构,还要把学生的书面形式转化为具体的类。
4.类定义
为队列建立CirQueue,其类定义如下:
classCirQueue
{
public:
CirQueue(){front=rear=0;}
~CirQueue(){}
voidEnQueue(elemtpx);
TDeQueue();
TGetQueue();
{front==rear?
return1:
return0;}
intLength();
voidPrintQueue();
intEnquire(stringnum);
voidDelete(inti);
private:
elemtpdata[QueueSize];
intfront,rear;
};
在CirQueue类中,提供了如下成员函数
(1)函数声明voidEnQueue(elemtpx)
完成的功能将元素x入队
(2)函数声明TDeQueue()
完成的功能将队头元素出队
(3)函数声明TGetQueue()
完成的功能读取队头元素算法
(4)函数声明intLength();
完成的功能取队列长度
(5)函数声明voidPrintQueue();
完成的功能遍历队列,按序号依次输出各元素
(6)函数声明voidDelete(inti);
完成的功能删除队列的第i个元素
(7)函数声明intEnquire(stringnum);
完成的功能查询队列中是否存在指定的元素
5.执行程序显示画面
6.源代码
HeaderFiles
#ifndefCIRQUEUE_H
#defineCIRQUEUE_H
#include
usingnamespacestd;
constintQueueSize=100;//100只是示例性的数据,可以根据实际问题具体定义
structstudent//结构体
{
stringnum;//学生学号
stringname;//学生姓名
stringgrade;//学生班级
};
template
classCirQueue
{
public:
CirQueue(){front=rear=0;}//构造函数,置空队
~CirQueue(){}//析构函数,释放队列中各结点的存储空间
voidEnQueue(Tx);//将元素x入队
TDeQueue();//将队头元素出队
TGetQueue();//取队头元素(并不删除)
boolEmpty(){front==rear?
return1:
return0;}//判断队列是否为空
intLength();
voidPrintQueue();//遍历队列,按序号依次输出各元素
intEnquire(stringnum);//查询队列中是否存在输入的学号
voidDelete(inti);//删除队列的第i个元素
private:
Tdata[QueueSize];//存放队列元素的数组
intfront,rear;//队头和队尾指针,分别指向队头元素的前一个位置和队尾元素的位置
};
#endif
SourceFiles
#include"CirQueue.h"
#include
usingnamespacestd;
template
voidCirQueue:
:
EnQueue(Tx)
{
if((rear+1)%QueueSize==front)throw"上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
template
TCirQueue:
:
DeQueue()
{
if(rear==front)throw"下溢";
front=(front+1)%QueueSize;
returndata[front];
}
template
TCirQueue:
:
GetQueue()
{
inti;
if(rear==front)throw"下溢";
i=(front+1)%QueueSize;
returndata[i];
}
template
intCirQueue:
:
Length()
{
intlength=(rear-front+QueueSize)%QueueSize;
returnlength;
}
template
voidCirQueue:
:
PrintQueue()
{
inti=front;
while(i!
=rear)
{
cout<<"学号:
"<cout<<"姓名:
"<cout<<"班级:
"<i=(i+1)%QueueSize;
}
}
template
intCirQueue:
:
Enquire(stringnum)
{
inti;
for(i=front+1;i<=(rear-front+QueueSize)%QueueSize;i++)
{
if(data[i].num==num)
returni;
}
return0;
}
template
voidCirQueue:
:
Delete(inti)
{
if(i<1||i>(rear-front+QueueSize)%QueueSize)throw"位置";
intt;
t=i;
while(t!
=rear)
{
data[t]=data[(t+1)%QueueSize];
t=(t+1)%QueueSize;
}
rear=(rear-1)%QueueSize;
}
CirQueueMain.Cpp
#include
#include"CirQueue.cpp"
#include
usingnamespacestd;
intwhich;
intqueue;
inti;
intflag;
intchoose1=1;
intchoose;
inty;
stringnum;
stringname;
stringgrade;
intwhere;
studenttemp1;
CirQueuea;
CirQueueb;
CirQueuec;
CirQueued;
CirQueuee;
intmain()
{
std:
:
cout<<"欢迎来到学生实验任务管理系统\n\n";
cout<<"请输入登陆密码:
"<<"\n";
inty;
cin>>y;
if(y!
=123456)cout<<"您无权进入系统"<<"\n";
else{
while(choose1==1)
{
cout<<"对周一试验名单进行操作请按1"<<"\n";
cout<<"对周二试验名单进行操作请按2"<<"\n";
cout<<"对周三试验名单进行操作请按3"<<"\n";
cout<<"对周四试验名单进行操作请按4"<<"\n";
cout<<"对周五试验名单进行操作请按5"<<"\n";
cout<<"需要输出全部信息请按6"<<"\n";
cin>>queue;
switch(queue)
{
case1:
flag=1;choose=1;break;
case2:
flag=2;choose=1;break;
case3:
flag=3;choose=1;break;
case4:
flag=4;choose=1;break;
case5:
flag=5;choose=1;break;
case6:
try
{
cout<<"周一试验名单:
"<<"\n";
a.PrintQueue();
cout<<"周二试验名单:
"<<"\n";
b.PrintQueue();
cout<<"周三试验名单:
"<<"\n";
c.PrintQueue();
cout<<"周四试验名单:
"<<"\n";
d.PrintQueue();
cout<<"周五试验名单:
"<<"\n";
e.PrintQueue();
}
catch(char*)
{
cout<<"操作失败\n";//如失败提示失败信息
}
break;
default:
break;
}
while(choose==1)
{
cout<<"需要插入信息请按1"<<"\n";
cout<<"需要删除信息请按2"<<"\n";
cout<<"需要查询信息请按3"<<"\n";
cout<<"需要取消预约请按5"<<"\n";
cout<<"需要退出请按6"<<"\n";
cin>>which;
switch(which)
{
case1:
cout<<"需要插入学生学号:
"<<"\n";
cin>>num;
cout<<"需要插入学生姓名:
"<<"\n";
cin>>name;
cout<<"需要插入学生班级:
"<<"\n";
cin>>grade;
temp1.num=num;
temp1.name=name;
temp1.grade=grade;
try
{
switch(flag)
{
case1:
a.EnQueue(temp1);break;
case2:
b.EnQueue(temp1);break;
case3:
c.EnQueue(temp1);break;
case4:
c.EnQueue(temp1);break;
case5:
c.EnQueue(temp1);break;
default:
break;
}
cout<<"插入成功!
\n";
}
catch(char*)
{
cout<<"操作失败\n";//如失败提示失败信息
}
break;
case2:
try
{
switch(flag)
{
case1:
a.DeQueue();break;
case2:
b.DeQueue();break;
case3:
c.DeQueue();break;
case4:
b.DeQueue();break;
case5:
b.DeQueue();break;
default:
break;
}
cout<<"删除成功!
"<<"\n";
}
catch(char*)
{
cout<<"操作失败\n";//如失败提示失败信息
}
break;
case3:
try
{
switch(flag)
{
case1:
a.PrintQueue();break;
case2:
b.PrintQueue();break;
case3:
c.PrintQueue();break;
case4:
b.PrintQueue();break;
case5:
b.PrintQueue();break;
default:
break;
}
}
catch(char*)
{
cout<<"操作失败\n";
}
break;
case5:
cout<<"请输入取消预约的学生学号:
\n";
cin>>num;
try
{
switch(flag)
{
case1:
i=a.Enquire(num);
a.Delete(i);
break;
case2:
i=b.Enquire(num);
b.Delete(i);
break;
case3:
i=c.Enquire(num);
c.Delete(i);
break;
case4:
i=c.Enquire(num);
d.Delete(i);
break;
case5:
i=c.Enquire(num);
e.Delete(i);
break;
default:
break;
}
cout<<"预约修改成功!
"<<"\n";
}
catch(char*)
{
cout<<"操作失败\n";//如失败提示失败信息
}
break;
case6:
choose=0;
break;
default:
break;
}
}
}
return0;
}
}