顺序表的使用
#include
#include
#include
#define MAXSIZE 50
typedef struct{
char name[21],num[12];
int math,eng,comp;
}datatype;
typedef struct{
datatype data[MAXSIZE]; //存储顺序表的元素
int len;
}SeqList; //顺序表的类型
void mune()
{
printf("1-----录入学生信息\n");
printf("2-----录入学生成绩\n");
printf("3-----输出学生信息\n");
printf("4-----查找学生信息\n");
printf("5-----插入学生信息\n");
printf("6-----修改学生成绩\n");
printf("7-----删除学生信息\n");
printf("0-----退出菜单\n");
}
void input1(SeqList *L)
{
int i;
printf("请输入学生人数!\n");
scanf("%d",&(L->len));
for(i=1;i<=(L->len);i++)
{
printf("请输入第%d个学生姓名、学号!\n",i);
scanf("%s%s",L->data[i].name,L->data[i].num);
L->data[i].math=L->data[i].eng=L->data[i].comp=-1;
}
printf("输入完毕!\n");
}
void input2(SeqList *L)
{
char km[40];
int i;
printf("请输入录入成绩的科目!\n");
scanf("%s",km);
if(strcmp(km,"数学")==0)
{
for(i=1;i<=L->len;i++)
{
printf("请输入第%d个学生该科目的成绩!\n",i);
scanf("%d",&L->data[i].math);
}
printf("学生成绩录入成功!\n");
}
else if(strcmp(km,"英语")==0)
{
for(i=1;i<=L->len;i++)
{
printf("请输入第%d个学生该科目的成绩!\n",i);
scanf("%d",&L->data[i].eng);
}
printf("学生成绩录入成功!\n");
}
else if(strcmp(km,"计算机")==0)
{
for(i=1;i<=L->len;i++)
{
printf("请输入第%d个学生该科目的成绩!\n",i);
scanf("%d",&L->data[i].comp);
}
printf("学生成绩录入成功!\n");
}
else{
printf("请输入正确课程名!\n");
input2(L);
}
}
void print(SeqList *L)
{
int i;
if(L->len==0)
printf("没有学生信息!\n");
else
{
printf("共有%d个学生信息\n",L->len);
for(i=1;i<=L->len;i++)
{
printf("%21s%12s%7s%7s%7s\n","姓名","学号","数学","英语","计算机");
printf("%21s%12s%7d%7d%7d\n",L->data[i].name,L->data[i].num,L->data[i].math,L->data[i].eng,L->data[i].comp);
}
}
}
int find(SeqList *L,datatype p)
{
int i;
while(i<=L->len&&strcmp(L->data[i].num,p.num)!=0)
i++;
if(i<=L->len)
{
printf("%21s%12s%7s%7s%7s\n","姓名","学号","数学","英语","计算机");
printf("%21s%12s%7d%7d%7d\n",L->data[i].name,L->data[i].num,L->data[i].math,L->data[i].eng,L->data[i].comp);
return i;
}
else
{
printf("查无此人!\n");
return 0;
}
}
void insert(SeqList *L,datatype p)//按照学号的大小顺序插入
{
int i=1,j;
while(i<=L->len&&strcmp(L->data[i].num,p.num)<0)
i++;
if(L->len==MAXSIZE)
printf("表已满!\n");
else
{
for(j=L->len;j>=i;j--)
{
L->data[j+1]=L->data[j];
}
L->data[i]=p;
L->len++;
printf("插入已完成!\n");
}
}
void change(SeqList *L,datatype p)
{
int i=1;
char km[20];
while(i<=L->len&&strcmp(L->data[i].num,p.num)!=0)
i++;
if(i>L->len)
printf("查无此人!\n");
else
{
printf("请输入要修改的科目!\n");
scanf("%s",km);
if(strcmp(km,"数学")==0)
{
printf("请输入该学生该科目的成绩!\n");
scanf("%d",&L->data[i].math);
printf("学生成绩修改成功!\n");
}
else if(strcmp(km,"英语")==0)
{
printf("请输入该学生该科目的成绩!\n");
scanf("%d",&L->data[i].eng);
printf("学生成绩修改成功!\n");
}
else if(strcmp(km,"计算机")==0)
{
printf("请输入该学生该科目的成绩!\n");
scanf("%d",&L->data[i].comp);
printf("学生成绩修改成功!\n");
}
else
{
printf("请输入正确的课程名!\n");
change(L,p);
}
}
}
void del(SeqList *L,datatype p,int q)
{
int i;
if(q!=0)
{
for(i=q;i<L->len;i++)
{
L->data[i]=L->data[i+1];
}
L->len--;
printf("删除学生信息成功!\n");
}
}
int main()
{
SeqList *Stu;
datatype x;
int i,j=1,k;
Stu=(SeqList *)malloc(sizeof(SeqList));
Stu->len=0;
for(i=1;j!=0;i++)
{
mune();
printf("请输入您想进行的操作!");
scanf("%d",&j);
switch(j)
{
case 1:input1(Stu);break;
case 2:input2(Stu);break;
case 3:print(Stu);break;
case 4:printf("请输入想要查找的学生学号!\n");
scanf("%s",x.num);
k=find(Stu,x);
break;
case 5:printf("请输入要插入的学生姓名、学号、数学、英语、计算机\n");
scanf("%s%s%d%d%d",x.name,x.num,&x.math,&x.eng,&x.comp);
insert(Stu,x);
break;
case 6:printf("请输入要修改成绩的学生学号!\n");
scanf("%s",x.num);
change(Stu,x);
break;
case 7:printf("请输入要删除的学生学号!\n");
scanf("%s",x.num);
k=find(Stu,x);
del(Stu,x,k);
break;
}
}
return 0;
}