#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 10000 //顺序表可能达到的最大长度
#define ERROR 0
#define OVERFLOW -1
#define Status int
using namespace std;
typedef struct{
char name[10]; //姓名
int no; //学号
int score; //成绩
}Student;
typedef struct{
Student *elem; //储存空间的基地址
int length; //当前长度
}SqList; //顺序表的结构类型为 SqList
void input(Student &e){ //输入学生信息
cout<<"请输入学生姓名:"<<endl;
cin>>e.name ;
cout<<"请输入学生学号:"<<endl;
cin>>e.no ;
cout<<"请输入学生成绩:"<<endl;
cin>>e.score ;
}
void output(Student &e){ //输出学生信息
cout<<"姓名: " <<e.name<<" 学号: "<<e.no<<" 成绩: "<<e.score<<endl;
}
Status InitList(SqList &L){ //初始化顺序表
L.elem = new Student[MAXSIZE]; //为表分配大小为MAXSIZE的空间
if(!L.elem) exit(OVERFLOW); //分配失败
L.length=0;
return 1;
}
Status GetStud(SqList &L,int i,Student &e){ //顺序表取值
if(i<1||i>L.length)
return ERROR;
e = L.elem[i-1];
return 1;
}
Status ListInsert(SqList &L,int i,Student e){ //插入学生信息
if(i<1||(i>L.length+1) ) //判断i值是否合法
return ERROR;
if(L.length==MAXSIZE) //判断当前储存空间是否已满
return ERROR;
for(int j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
L.length++;
return 1;
}
Status ListDelete(SqList &L,int i){ //删除学生信息
if((i<=0)||(i>L.length))
return ERROR;
else
for(int j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j];
L.length--;
return 1;
}
Status LocatedStud(SqList &L, Student &e){ //查找学生信息
int i;
for(i=0;i<L.length;i++){
if(!strcmp(e.name, L.elem[i].name))
return i+1;
}
return 0;
}
int main(){
int n,x,y,num,len,chose;
char p;
Student e;
Student k;
SqList 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<<endl;
cout<<"*********请选择功能*********"<<endl;
while(1){
cin>>n;
while(n<1||n>8)
{
cout<<"不存在该选择,请重新输入!"<<endl;
break;
}
switch(n){
case 1: //创建链表
if(InitList(L))
cout<<"链表创建成功!"<<endl;
else
cout<<"链表创建失败!"<<endl;
break;
case 2: //输入学生信息
cout<<"请输入学生信息:"<<endl;
cout<<"请输入学生人数:"<<endl;
cin>>num;
for(int i=0;i<num;i++){
L.length++;
input(L.elem[i]);
}
break;
case 3: //显示所有学生信息
for(int i=0;i<L.length;i++){
output(L.elem[i]);
}
break;
case 4: //查找指定学生信息
cout<<"请输入所要查找同学的姓名:"<<endl;
cin>>e.name ;
chose=LocatedStud(L,e);
if(chose!=0)
output(L.elem[chose-1]);
else
printf("未查询到此学生信息\n");
break;
case 5: //插入学生信息
cout<<"请输入要插入的位置:"<<endl;
cin>>x;
cout<<"请输入插入学生的信息: "<<endl;
cout<<"姓名:"<<endl;
cin>>k.name ;
cout<<"学号:"<<endl;
cin>>k.no ;
cout<<"成绩:"<<endl;
cin>>k.score ;
cout<<L.length<<endl;
if(ListInsert(L,x,k))
cout<<"学生信息插入成功"<<endl;
else
cout<<"学生信息插入失败"<<endl;
break;
case 6: //删除指定学生信息
cout<<"请输入要删除信息的学生位置:"<<endl;
cin>>y;
cout<<"如果确定删除,请点Y!"<<endl;
cin>>p;
if(p=='Y'){
if(ListDelete(L,y)==1)
cout<<"删除成功!"<<endl;
else
cout<<"删除失败!"<<endl;
}
else if(p!='Y')
cout<<"删除失败!"<<endl;
else
break;
case 7: //统计所有学生人数
cout<<"学生总人数为:"<<L.length<<endl;
break;
case 8: //退出系统界面
exit(0);
}
}
return 0;
}
线性表的基本操作及其应用
猜你喜欢
转载自blog.csdn.net/sang_12345/article/details/78522705
今日推荐
周排行