C语言用顺序表实现学生信息管理系统

#include
#include
#define MaxSize 1000
typedef struct Student
{
    int num;
    char name[20];
    int age;
    float score[10];
    /*
    //运算符重载 
    bool operator == (const Student& datetype) const
    {
        if((num == datetype.num) && (stricmp(name, datetype.name)) && (age == datetype.age))
        {
            int flag=0;
            for(int i=0;i<10;i++)
            {
                if(score[i] == datetype.score[i])
                    flag++;
            }
            if(flag==10)
                return true;
            else
                return false;
        }
        return false;
    }
    bool operator < (const Student& datetype) const
    {
        if((num < datetype.num) && (stricmp(name, datetype.name)<0) && (age < datetype.age))
        {
            int flag=0;
            for(int i=0;i<10;i++)
            {
                if(score[i] < datetype.score[i])
                    flag++;
            }
            if(flag==10)
                return true;
            else
                return false;
        }
        return false;
    }
    */
}DateType;
typedef struct SeqList
{
    DateType data[MaxSize];
    int last;
}SeqList;
//初始化
SeqList* Init_SeqList()
{
    SeqList* L = new SeqList;
    if(L)
    {
        L->last= -1;
        return L;
    }
}
//插入算法
int Insert_SeqList(SeqList *L,int i,DateType x)
{
    int j;
    if(L->last+1==MaxSize)
        return -1;
    if(i<1||i>L->last+2)
        return 0;
    for(j=L->last;j>=i-1;j--)
        L->data[j+1]=L->data[j];
    L->data[i-1]=x;
    L->last++;
    return 1;
}
//删除算法
int Delete_SeqList(SeqList *L,int i)
{
    int j;
    if(i<1||i>L->last+1)
        return 0;
    for(j=i;j<=L->last;j++)
    {
        L->data[j-1]=L->data[j];
    }
    L->last--;
    return 1;
}
//查找算法
int Location_SeqList(SeqList *L,DateType x)
{
    int i=0;
    while(i <= L->last && L->data[i].num == x.num)//如果直接进行比较(L->data[i]==x),会报错。自定义的数据类型不能直接比较。有多种方法,可以解决这个问题
        i++;                                      //一是,通过运算符重载进行比较。二是,可以直接比较其中可以确定的愤恨的信息。如果有其他简单的方法,可以共享一下呦!
    if(i>L->last)
        return -1;
    else
        return i;
}
/*
//划分算法
void Part_SeqList(SeqList *L)
{
    int i,j;
    DateType x,y;
    x=L->data[0];
    for(i=1;i<=L->last;i++)
    {
        if(L->data[i]data[i];
            for(j=i-1;j>=0;j--)
            {
                L->data[j+1]=L->data[j];
            }
            L->data[0]=y;
        }
    }
}
*/
//输出学生信息
void print(SeqList *L)
{
    for(int i=0;i<=L->last;i++)
    {
        printf("%d %10s %2d",L->data[i].num,L->data[i].name,L->data[i].age);
        for(int j=0;j<10;j++)
        {
            printf("%6.2f ",L->data[i].score[j]);
        }
        printf("\n");
    }
}
int main()
{
    SeqList* p = Init_SeqList();
    int num;
    printf("请输入三名同学的学号,姓名,年龄,各科成绩\n");
    for(int i=0;i<3;i++)
    {
        p->last++;
        scanf("%d %s %d",&p->data[i].num,&p->data[i].name,&p->data[i].age);
        for(int j=0;j<10;j++)
            scanf("%f",&p->data[i].score[j]);
    }
    int flag;
    printf("请输入你需要进行的操作:\n");
    printf("1.插入学生信息\n");
	printf("2.删除学生信息\n");
	printf("3.查找学生信息\n");
	printf("4.对学生信息进行划分\n");
	scanf("%d",&flag); 
	//插入算法
	if(flag==1)
	{
		DateType dd;
		int locseat; 
		printf("请输入你需要插入的学生的信息和位置:\n");
        p->last++;
        scanf("%d %s %d",&dd.num,&dd.name,&dd.age);
        for(int j=0;j<10;j++)
            scanf("%f",&dd.score[j]);
        scanf("%d",&locseat);
		int insert_flag=Insert_SeqList(p,locseat,dd);
    	if(insert_flag==-1)
        	printf("对不起,表已满,不能进行插入学生信息!!\n");
    	else if(insert_flag==0)
       		printf("对不起,你插入学生信息的位置不对!!\n");
   		else
    	{
         	printf("插入成功!!!\n");
         	print(p);
    	}
	}
	//删除 1
    if(flag==2)
	{	
		int seat; 
		printf("请输入你需要删除的学生信息的位置:\n");
		scanf("%d",&seat);
		int delete_flag=Delete_SeqList(p,seat);
    	if(delete_flag==0)
       		printf("对不起,删除学生信息的位置不对!!\n");
    	else
    	{
      	   printf("删除成功!!!\n");
      	   print(p);
    	}
	}
	//位置查找 1
	if(flag==3)
	{
		DateType d; 
		printf("请输入你需要查找的学生的信息:\n");
		scanf("%d %s %d",&d.num,&d.name,&d.age);
        for(int j=0;j<10;j++)
            scanf("%f",&d.score[j]);
		int location_flag=Location_SeqList(p,d);
    	if(location_flag==-1)
     	   printf("对不起,没有查找到这个学生!!\n");
    	else
      	  printf("该学生的位置在%d\n",location_flag);
	}
	/*
	//划分算法
	if(flag==4)
	{
		Part_SeqList(p);
    	print(p);
	}
	*/
    return 0;
}

你可能感兴趣的:(数据结构)