要求的功能:
需求分析:
1.首先看图片分析一下有哪些功能,如下所示:
a.第一个功能,添加学生,输入添加人数;
b.第二个功能,安排就餐;
c.第三个功能,在指定位置之前插入新的客人;
d.第四个功能,删除指定位置的客人信息;
e.第五个功能,查找给定姓名,返回在队伍中的位置;
f.第六个功能,用学号进行排序;
g.第七个功能打印所有客户信息;
h.就是退出功能;
2.除此之外,还要再写两个功能:
i.展示开头和末尾的学生;
j.展示初始页面;
通过输入相应的序号,来达到相应的效果;
3.功能实现:
a.在已存在的线性表,输入学生的姓名和学号;每输入一个学生,长度要加一;
void ListAdd(SqList &L,int n)
{
for(int i=1;i<=n;i++)
{
People Q;
cout <<"请输入该学生的姓名:"<<endl;
cin >>Q.sn;
cout <<"请输入该学生的卡号:"<<endl;
cin >>Q.si;
L.stu[L.length]=Q;
++L.length;
}
}
b.这个功能简单来说就是删除第一个元素,后面的元素向前移动,或者直接通过遍历覆盖第一个元素;
要注意的是长度要减一;
void ListTop(SqList &L)
{
for(int i=0;i<L.length-1;i++)
{
L.stu[i]=L.stu[i+1];
}
L.length--;
}
c.这个不难,和书上的一样,要注意插入的位置范围与数组的最大长度,如果超过或者不符合范围要注意插入失败;
string ListInsert(SqList &L,int i,People e)
{
if((i<1)||(i>L.length+1)) return "插入失败!输入的范围错误!";
if(L.length==MAXSIZE) return "插入失败!";
for(int j=L.length-1;j>=i-1;j--)
{
L.stu[j+1]=L.stu[j];
}
L.stu[i-1]=e;
++L.length;
return "插入成功";
}
d.这个功能也不难实现,书上也有,同样要注意删除的位置范围;
string ListDelete(SqList &L,int i)
{
if((i<1)||(i>L.length)) return "删除失败!要删除的学生不在范围内!";
for(int j=i;j<=L.length-1;j++)
{
L.stu[j-1]=L.stu[j];
}
--L.length;
return "删除成功!";
}
e.这个也不是很难,通过遍历,来查找这个学生是否在数组内;
int LocateList(SqList L,string e)
{
for(int i=0;i<L.length;i++)
{
if(L.stu[i].sn==e)
{
return i+1;
}
}
return 0;
}
f.这个功能就是遍历,通过学号的大小,进行排序;
void SortList(SqList &L)
{
int i,j;
for(i=0;i<L.length;i++)
{
for(j=i+1;j<L.length;j++)
{
if(L.stu[i].si>L.stu[j].si)
{
People temp=L.stu[i];
L.stu[i]=L.stu[j];
L.stu[j]=temp;
}
}
}
}
g.这个就很简单了,单纯的打印输出所有的客户,遍历;
int DaYinList(SqList L)
{
for(int i=0;i<L.length;i++)
{
cout <<L.stu[i].sn <<L.stu[i].si <<endl;
}
}
h.这个功能不需要专门写一个函数,只要在主函数内判断一下就行了
i.这个功能就是输出第一个元素与最后一个元素;
void KaimoList(SqList L)
{
if(L.length>0)
{
cout <<L.stu[0].sn<<L.stu[0].si<<endl;
cout <<L.stu[L.length-1].sn<<L.stu[L.length-1].si<<endl;
}else{
cout <<"现在无人员就餐!"<<endl;
}
}
j.这个功能非常重要,但是不难写;
void ZhanshiList(SqList L)
{
cout <<"队内的人数:"<<L.length <<endl;
KaimoList(L);
cout <<"------------------------"<<endl;
cout <<"1.新增排队人员信息" <<endl;
cout <<"2.安排客人就餐" <<endl;
cout <<"3.指定位置插入客人" <<endl;
cout <<"4.删除指定的位置" <<endl;
cout <<"5.查找客人信息" <<endl;
cout <<"6.按照卡号对信息进行排号"<<endl;
cout <<"7.打印所有信息" <<endl;
cout <<"8.退出" <<endl;
cout <<"请输入您选择的功能序号:"<<"";
}
效果图:
4.逻辑实现(主函数),单个的功能写着简单,逻辑实现要好好想一下,并且自己要好好测试一下,看看有啥BUG没有,这一步非常重要;
int main(void)
{
int n;
SqList L;
InitList(L); //初始化线性表
ZhanshiList(L); //展示初始页面
cin >>n; //输入第一次要的功能
while(n>-1&&n<9) //判断n的范围,对应相应的功能
{
if(n==1)
{
ListAdd(L,1);
}else if(n==2)
{
ListTop(L);
}else if(n==3)
{
int i;
People e;
cout<<"请输入你要插的位置:"<<endl;
cin >>i;
cout <<"请输入该学生的姓名:"<<endl;
cin >>e.sn;
cout <<"请输入学生的卡号:" <<endl;
cin >>e.si;
cout<<ListInsert(L,i,e)<<endl;
}else if(n==4)
{
int i;
cout<<"请输入你要删除的位置:"<<endl;
cin >>i;
cout<<ListDelete(L,i)<<endl;
}else if(n==5)
{
string e;
cout <<"请输入你要查找的人:"<<endl;
cin >>e;
int a=LocateList(L,e);
cout <<"这个人排第"<<a<<"位"<<endl;
}else if(n==6)
{
SortList(L);
DaYinList(L);
}else if(n==7)
{
DaYinList(L);
}else if(n==8) //这个就是第八个功能,直接退出循环就行了,就能实现;
{
break;
}
ZhanshiList(L); //每一次都要展示初始页面;
cin >>n; //再次输入n的值;
}
return 0;
}
自己写的:
2022寒假第一次.cpp
实验室负责人写的:
参考代码.cpp
最后一次更新于2022-01-22
0 条评论