#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("\t\t\t该同学的姓名是:%s\n",L.elem[i-1].name);
printf("\t\t\t该同学的学号是:%d\n",L.elem[i-1].no);
printf("\t\t\t该同学的成绩是:%f\n",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("\t\t\t该同学的学号是:%d,",L.elem[i].no);
printf("\n\t\t\t该同学的成绩是:%f.",L.elem[i].score);
l++;
}
}
if(l==0)
{
printf("\t\t\t没有该同学信息");
}
system("PAUSE");
system("cls");
}
void ListInsert(SqList &L,int i) //在顺序表L中第i个位置插入新的元素e,并判断插入范围是否合法
{
system("cls");
if((i<1)||(i>L.length+1))
{
printf("\t\t\t输入的i不合法");
}
system("PAUSE");
system("cls");
if(L.length==MAX)
{
printf("\t\t\t表已满,不可添加");
system("PAUSE");
system("cls");
}
for(int j=L.length-1;j>=i-1;j--)
{
L.elem[j+1]=L.elem[j];
} //插入位置以及之后的元素后移
printf("请按依次输入您想要插入的学生信息的学号、姓名、成绩(用空格隔开):\t");
scanf("%d%s%f",&L.elem[i-1].no,&L.elem[i-1].name,&L.elem[i-1].score); //将新元素e放在第i个位置上
++L.length;
printf("插入学生信息成功\n");
printf("请按任意键返回");
/* system("PUASE");
system("cls");*/
}
int ListDelete(SqList &L,int i) //在顺序表中删除第i个元素
{
if(i<1||i>L.length)
{
printf("\t\t\t您输入的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("\t\t\t删除成功");
system("PAUSE");
system("cls");
}
void InitSqList(SqList &L,int n) // 传入初始化好的顺序表地址,以及要录入学生的人数
{
int m,i;
printf("\t\t请按照顺序填写 学号 姓名 成绩\n");
for(i=0;i<n;i++)
{
m=1;
printf("\t\t请输入学第%d位学生的信息\n",i+1);
printf("学号:");
while(m)
{
scanf("%d",&L.elem[i].no);
if(L.elem[i].no<0)
{
printf("您输入的数字不合法\n请重新输入第%d位学生的八位学号:",i+1);
} else m=0;
}
printf("姓名:");
m++;
while(m)
{
scanf("%s",&L.elem[i].name);
if(L.elem[i].name<0)
{
printf("您输入的姓名不合法\n请重新输入第%d位学生的姓名:",i+1);
} else m=0;
}
printf("成绩:");
m++;
while(m)
{
scanf("%f",&L.elem[i].score);
if(L.elem[i].score<0)
{
printf("您输入的成绩不合法\n请重新输入第%d位学生的成绩:",i+1);
} else m=0;
}
}
L.length=n+L.length;
printf("录入信息成功。");
system("PAUSE"); //防止窗口关闭
system("cls"); //清屏
}
void OutSqList(SqList &L)
{
system("cls");
printf("\t\t下面是学生信息\n");
printf("\t\t\t学号 姓名 成绩\n");
for(int i=0;i<L.length;i++)
{
printf("\t\t\t%d",L.elem[i].no);
printf("\t\t\t%s",L.elem[i].name);
printf("\t\t\t%f",L.elem[i].score);
printf("\n");
}
printf("\t\t\t表中学生总人数为:%d\n",L.length);
system("PAUSE");
system("cls");
}
void Display()
{
printf("\n\n");
printf("\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇\n");
printf("\t\t************************************************\n");
printf("\t\t*******♂欢迎进入学生信息功能管理界面♀*******\n");
printf("\t\t************************************************\n");
printf("\t\t************************************************\n");
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t→←→←→←1. 学生信息添加系统 →←→←→←→ \n");
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t→←→←→←2.学生信息删除系统 →←→←→←→ \n");
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t→←→←→←3.显示学生信息系统 →←→←→←→ \n");
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t→←→←→←4.插入学生信息修改系统 →←→←→←→ \n");
printf("\t\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★\n");
printf("\t\t→←→←→←5.查找学生信息系统 →←→←→←→ \n");
printf("\t\t€€ €€ €€ €€ €€ €€ €€ €€ €€ €€ \n");
printf("\t\t◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇\n");
printf("\n\n");
// printf("\t\t请输入所需功能的对应字母\n");
}
main()
{
char xh[20];
char xm[20];
float cj;
int numb,n;
SqList L;
InitList(L); //初始化顺序表
while(1)
{
Display();
printf("\t\t请输入所需功能的对应数字\n");
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("\t\t\t1.根据姓名进行查找\n");
printf("\t\t\t2.对指定位置查找\n");
printf("\t\t\t请输入需要进行查找的类型:");
scanf("%d",&n);
if(n==1)
{
printf("\t\t\t请输入要查找的姓名:");
scanf("%s",&e);
FindElem(L,e);
} else
{
printf("\t\t\t请输入要查找的学生序号:");
scanf("%d",&q);
LocateElem (L,q);
}
}
}
}