#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 
/*需处理字符串 ,需用到相关类型函数*/ 
/*定义数据类型*/
typedef struct
{
	char no[10];
	char name[20];
	char xb[2];
	int age;
 } Student;
typedef struct
{
	Student *elem; //指向数据元素基地址 
	int length;    //线性表的当前长度 
}SqList;
/*显示提示信息的函数*/ 
void prompt()
{
	puts("1.根据指定学生个数,逐个输入学生信息");
	puts("2.逐个显示学生表中所有学生的相关信息");
	puts("3.根据姓名进行查找,返回此学生的学生信息");
	puts("4.根据指定的位置返回相应的学生信息");
	puts("5.给定一个学生的信息,插入到表中指定的位置");
	puts("6.删除指定位置的学生记录");
	puts("7.统计表中的学生个数"); 
}
/*定义各情况对应函数 */
/*初始化函数*/
void inilist(SqList &L)/*调用变量需使用变量名*/ 
{
	L.elem = (Student *) malloc (sizeof(Student) * MAXSIZE);
	L.length = 0; 
}
/*输入函数*/ 
void input(SqList &L)
{
	int n, i;
	printf("输入要导入学生的个数:");
	scanf("%d", &n); 
	if(n + L.length > MAXSIZE)
	{
		printf("导入学生的个数过多\n"); 
		return;                        
	}
    for(i = 0; i < n; i++)
    {
    	printf("输入学生的学号:");
		scanf("%s", L.elem[L.length].no);
		printf("输入学生的姓名:");
		scanf("%s", L.elem[L.length].name);
		printf("输入学生的性别:");
		scanf("%s", L.elem[L.length].xb);
		printf("输入学生的年龄:");
		scanf("%d", &L.elem[L.length].age);
		L.length++;
	}
	printf("导入成功\n"); 
}
/*输出函数*/
void output(SqList &L)
{
	if(!L.length)
	{
       printf("学生表为空\n");
	   return;
	}
	int i;
	for(i = 0; i < L.length; i++)
	{
		printf("学号:%s\t姓名:%s\t性别:%s\t年龄:%d\n", L.elem[i].no, L.elem[i].name, L.elem[i].xb, L.elem[i].age);
	}
} 
/*根据姓名进行查找*/
void search_name(SqList &L)
{
	int i;
	char name[20];
	printf("请输入要查找学生的姓名:");
	scanf("%s", name); 
	for(i = 0; i < L.length; i++)
	{
		if(!strcmp(name, L.elem[i].name))
		{
		printf("%s,%s,%s,%d",L.elem[i].no,L.elem[i].name,L.elem[i].xb,L.elem[i].age);
		return;
	    }
	}
	/*未查询到要汇报*/
	printf("未查找到该学生"); 
}
void search_space(SqList &L)
{
    int ob;
    int i;
    printf("请输入要查找的位置:");
	scanf("%d", &ob);
	if(ob <= L.length)
	{
	printf("%s, %s, %s, %d\n", L.elem[ob-1].no, L.elem[ob-1].name, L.elem[ob-1].xb, L.elem[ob-1].age);
	return;
	}
	
	else {printf("该位置不存在");}   	
}
void insert(SqList &L)
{
	char _no[10];
	char _name[20];
	char _xb[2];
	int _age;
	int i;
	/*先看学生表是否已满*/ 
	if(L.length == MAXSIZE)
	{
		printf("该学生表已满");
		return; 
	}
	int sp;
	printf("请输入要插入的位置:");
	scanf("%d", &sp);
	if(sp > L.length)
	{
		printf("该位置不存在");
		return;
	 }
        printf("请输入学生信息:"); 
		printf("请输入学生学号:");
		scanf("%s", _no);
		printf("请输入学生姓名:");
		scanf("%s", _name);
		printf("请输入学生性别:");
		scanf("%s", _xb);
		printf("请输入学生年领:");
		scanf("%d", &_age); 
	 if(sp <= L.length)
	{
		
		for(i = L.length; i > sp-1; i--)
		{
			L.elem[i] = L.elem[i-1];
		}
		strcpy(L.elem[sp-1].no, _no);
		strcpy(L.elem[sp-1].name, _name);
		strcpy(L.elem[sp-1].xb, _xb);
		L.elem[sp-1].age = _age;
		L.length++;
	} 
	printf("插入成功\n"); 
}
void delet(SqList &L)
{
	int sp;
	int i;
	printf("请输入要删除的位置:");
	scanf("%d", &sp); 
	if(sp > L.length)
	{
		printf("该位置不存在");
	}
	else if(sp == L.length)
	{
		L.length--;
	}
	else 
	{
		for(i = sp - 1; i < L.length - 1; i++)
		{
			L.elem[i] = L.elem[i+1];
		}
		L.length--;
	}
	printf("删除成功"); 
}
void count(SqList &L)
{
	printf("%d", L.length);
}
int main()
{
    prompt();
    /*变量声明*/
	SqList L;
	inilist(L);
    int op;
    
    while(scanf("%d", &op))
    {
    	
        switch(op)
        {
    	    case 1: input(L); break;
    	    case 2: output(L); break;
    	    case 3: search_name(L); break;
    	    case 4: search_space(L); break;
    	    case 5: insert(L); break;
    	    case 6: delet(L); break;
    	    case 7: count(L); break;
    	    default: puts("请输入正确的数"); 
	    }
	}
	return 0;
}