#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int sum;
typedef struct student{
long id;
char name[64];
float grade;
}s;
typedef struct {
s* student;
int length;
}SqList;
int CreatStudent(SqList*L){
L->student=(s*)malloc(sizeof(s));
if (L->student==NULL)
return 0;
else
{
L->length=0;
return 1;
}
}
void GetStudent(SqList*L,int i){
printf("请输入学生的学号:");
scanf("%ld",&L->student[i].id);
printf("请输入学生的姓名:");
scanf("%s",L->student[i].name);
printf("请输入学生的成绩:");
scanf("%f",&L->student[i].grade);
L->length++;
}
void jiaohuan(SqList*L,int i);
void PrintStudent(SqList*L,int i)
{
printf("%ld\n%s\n%.3f\n\n",L->student[i].id,L->student[i].name,L->student[i].grade);
}
void FindStudent (SqList*L)
{
int n;
printf("请输入查找方式:\n0=学号查找\n1=存储位置查找");
scanf("%d",&n);
printf("请输入需要查找学生的信息:");
switch (n) {
case 0:
{
long number;
scanf("%ld",&number);
for (int i=0;i<=L->length;i++)
{
if (number==L->student[i].id)
PrintStudent(L,i);
}
break;
}
case 1:
{
int number;
scanf("%d",&number);
PrintStudent(L,number-1);
break;
}
default:
printf("您输入的查找方式有误请确认后再操作");
break;
}
}
void DeletStudent (SqList*L,int i)
{
if(i<0||i>sum)
printf("输入信息有误");
else
{
for (int m=i-1;m<sum;m++)
{
L->student[m]=L->student[m+1];
}
sum--;
L->length--;
}
}
void ReGetStudent (SqList*L)
{
int p;
printf("请输入需要更新的位置:");
scanf("%d",&p);
GetStudent(L, p-1);
}
void charu(SqList* L)
{
printf("请输入需要插入的位置:");
int p;
scanf("%d",&p);
GetStudent(L, sum);
sum++;
for (int i=sum-1;i>p-1;i--)
jiaohuan(L,i);
}
void jiaohuan(SqList*L,int i)
{
long a;
a=L->student[i-1].id;
L->student[i-1].id=L->student[i].id;
L->student[i].id=a;
char b[64];
strcpy(b, L->student[i-1].name);
strcpy(L->student[i-1].name,L->student[i].name);
strcpy(L->student[i].name, b);
float c;
c=L->student[i-1].grade;
L->student[i-1].grade=L->student[i].grade;
L->student[i].grade=c;
}
void paixu (SqList*L)
{
printf("请输入排序的要求:0代表学号;1代表成绩");
int m;
scanf("%d",&m);
switch (m) {
case 0:
while (1)
{
int f=0,q=0;
f=q;
for (int i=0;i<sum-1;i++)
if (L->student[i].id>L->student[i+1].id)
{
jiaohuan(L, i+1);
f=1;
}
else f=0;
if (f==0)
break;
}
break;
case 1:
while (1)
{
int f=0,q=0;
f=q;
for (int i=0;i<sum-1;i++)
if (L->student[i].grade>L->student[i+1].grade)
{
jiaohuan(L, i+1);
f++;
}
if (f==q)
break;
}
break;
}
}
void qingkong (SqList*L)
{
L->length=0;sum=0;
printf("所有数据已经清空");
}
int main()
{
SqList *text=(SqList*)malloc(sizeof(SqList)*10000);
CreatStudent(text);
printf("共有多少名学生:");
scanf("%d",&sum);
text->length=0;
for (int i=0;i<sum;i++)
GetStudent(text,i);
int c;
printf("(1)显示:显示当前所有学生信息记录;\n");
printf("(2)录入:从键盘输入一条学生信息记录,插入到表中指定的位置;\n");
printf(" (3)查找:根据学号或者记录的位置查找学生的各项信息;\n");
printf("(4)删除:删除指定位置的学生信息记录;\n");
printf("(5)更新:更新指定位置的学生信息记录;\n");
printf("(6)统计:统计表中学生人数。\n");
printf(" (7) 排序:按照学号或者绩点进行排序\n");
printf("(8)清空:清空表中所有记录\n");
int p=1;
while (p==1)
{
printf("请输入你的操作指令:\n");
scanf("%d",&c);
switch (c) {
case 1:
for (int i=0;i<sum;i++)
PrintStudent(text,i);
break;
case 2:
charu(text);
break;
case 3:
FindStudent(text);
break;
case 4:
{
int m;
printf("请输入需要删除学生的位置:");
scanf("%d",&m);
DeletStudent(text, m);
}
break;
case 5:
ReGetStudent(text);
break;
case 6:
printf("学生的总数是:%d",sum);
break;
case 7:
paixu(text);
break;
case 8:
qingkong(text);
break;
case 0:
p=0;
break;
default:
printf("输入指令不对,请重新输入如果退出请输入0;");
break;
}
}
}