#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;
}