c语言用顺序表实现学生信息的添加、插入、删除、查找功能
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 20
typedef struct{
int no; //8位学号
char name[20]; //姓名
float score; //成绩
}Student;
typedef struct{
Student *elem; //指向数据元素的基地址
int length; //线性表的当前长度
}SqList;
void InitList(SqList &L) //初始化
{
L.elem=(Student *)malloc(MAX*sizeof(Student));// 为顺序表分配一个大小为MAX的数组空间
//L.elem= new Student[MAX];
L.length=0;
if(!L.elem)
{
printf("顺序表初始化失败"); //储存分配失败退出
} else printf("顺序表初始化成功");
}
/* void GetElem(SqList L,int i,Student &e)
{
if (i<1 || i>L.length)
{
printf("error");
}
e=L.elem[i-1];
}*/
void LocateElem (SqList &L,int i) //对指定位置进行查找,并返回其信息
{
if(1<=i&&i<=L.length)
{
printf(" 该同学的姓名是:%%s
",L.elem[i-1].name);
printf(" 该同学的学号是:%%d
",L.elem[i-1].no);
printf(" 该同学的成绩是:%%f
",L.elem[i-1].score);
}else printf("没有该同学");
system("PAUSE");
system("cls");
}
void FindElem(SqList &L,char e[]) //根据姓名进行查找,并返回此学生的学号和成绩
{
int l=0;
for(int i=0;i<L.length;i++)
{
if(strcmp(L.elem[i].name,e)==0)
{
printf(" 该同学的学号是:%%d,",L.elem[i].no);
printf("
该同学的成绩是:%%f.",L.elem[i].score);
l++;
}
}
if(l==0)
{
printf(" 没有该同学信息");
}
system("PAUSE");
system("cls");
}
void ListInsert(SqList &L,int i) //在顺序表L中第i个位置插入新的元素e,并判断插入范围是否合法
{
system("cls");
if((i<1)||(i>L.length+1))
{
printf(" 输入的i不合法");
}
system("PAUSE");
system("cls");
if(L.length==MAX)
{
printf(" 表已满,不可添加");
system("PAUSE");
system("cls");
}
for(int j=L.length-1;j>=i-1;j--)
{
L.elem[j+1]=L.elem[j];
} //插入位置以及之后的元素后移
printf("请按依次输入您想要插入的学生信息的学号、姓名、成绩(用空格隔开): ");
scanf("%%d%%s%%f",&L.elem[i-1].no,&L.elem[i-1].name,&L.elem[i-1].score); //将新元素e放在第i个位置上
++L.length;
printf("插入学生信息成功
");
printf("请按任意键返回");
/* system("PUASE");
system("cls");*/
}
int ListDelete(SqList &L,int i) //在顺序表中删除第i个元素
{
if(i<1||i>L.length)
{
printf(" 您输入的i值不合法");
system("PAUSE");
system("cls");
return 0;
}
int j;
j=i;
for(int j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
--L.length;
printf(" 删除成功");
system("PAUSE");
system("cls");
}
void InitSqList(SqList &L,int n) // 传入初始化好的顺序表地址,以及要录入学生的人数
{
int m,i;
printf(" 请按照顺序填写 学号 姓名 成绩
");
for(i=0;i<n;i++)
{
m=1;
printf(" 请输入学第%%d位学生的信息
",i+1);
printf("学号:");
while(m)
{
scanf("%%d",&L.elem[i].no);
if(L.elem[i].no<0)
{
printf("您输入的数字不合法
请重新输入第%%d位学生的八位学号:",i+1);
} else m=0;
}
printf("姓名:");
m++;
while(m)
{
scanf("%%s",&L.elem[i].name);
if(L.elem[i].name<0)
{
printf("您输入的姓名不合法
请重新输入第%%d位学生的姓名:",i+1);
} else m=0;
}
printf("成绩:");
m++;
while(m)
{
scanf("%%f",&L.elem[i].score);
if(L.elem[i].score<0)
{
printf("您输入的成绩不合法
请重新输入第%%d位学生的成绩:",i+1);
} else m=0;
}
}
L.length=n+L.length;
printf("录入信息成功。");
system("PAUSE"); //防止窗口关闭
system("cls"); //清屏
}
void OutSqList(SqList &L)
{
system("cls");
printf(" 下面是学生信息
");
printf(" 学号 姓名 成绩
");
for(int i=0;i<L.length;i++)
{
printf(" %%d",L.elem[i].no);
printf(" %%s",L.elem[i].name);
printf(" %%f",L.elem[i].score);
printf("
");
}
printf(" 表中学生总人数为:%%d
",L.length);
system("PAUSE");
system("cls");
}
void Display()
{
printf("
");
printf(" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
");
printf(" ************************************************
");
printf(" *******♂欢迎进入学生信息功能管理界面♀*******
");
printf(" ************************************************
");
printf(" ************************************************
");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
");
printf(" →←→←→←1. 学生信息添加系统 →←→←→←→
");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
");
printf(" →←→←→←2.学生信息删除系统 →←→←→←→
");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
");
printf(" →←→←→←3.显示学生信息系统 →←→←→←→
");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
");
printf(" →←→←→←4.插入学生信息修改系统 →←→←→←→
");
printf(" ☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
");
printf(" →←→←→←5.查找学生信息系统 →←→←→←→
");
printf(" €€ €€ €€ €€ €€ €€ €€ €€ €€ €€
");
printf(" ◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
");
printf("
");
// printf(" 请输入所需功能的对应字母
");
}
main()
{
char xh[20];
char xm[20];
float cj;
int numb,n;
SqList L;
InitList(L); //初始化顺序表
while(1)
{
Display();
printf(" 请输入所需功能的对应数字
");
scanf("%%d",&numb);
switch (numb)
{
case 1:
system("cls");
printf("请输入要录入学生的人数:");
scanf("%%d",&n);
InitSqList(L,n);
break;
case 2:
int m;
system("cls");
printf("请输入要删除的第几个位置的学生信息:");
scanf("%%d",&m);
ListDelete(L,m);
break;
case 3:
OutSqList(L);
break;
case 4:
int i;
printf("请输入要在第几个位置插入学生信息:");
scanf("%%d",&i);
ListInsert(L,i);
system("PUASE");
system("cls");
break;
case 5:
int n,q;
char e[20];
system("cls");
printf(" 1.根据姓名进行查找
");
printf(" 2.对指定位置查找
");
printf(" 请输入需要进行查找的类型:");
scanf("%%d",&n);
if(n==1)
{
printf(" 请输入要查找的姓名:");
scanf("%%s",&e);
FindElem(L,e);
} else
{
printf(" 请输入要查找的学生序号:");
scanf("%%d",&q);
LocateElem (L,q);
}
}
}
}