#ifndef _SEQLIST_H
#define _SEQLIST_H
#include
#include
#include
#define MAX 40
typedef int datatype;
typedef struct
{
char name[3123];
char sex[1323];
double grade;
}Stu,*StuListPtr;
typedef struct
{
Stu data[MAX];
int len;
}Class,*ClassPtr;
//创建顺序表
ClassPtr list_create();
//判空
int list_empty(ClassPtr c);
//判满
int list_full(ClassPtr c);
//添加学生
int list_add(ClassPtr c,Stu s);
//录入学生信息
void list_input(ClassPtr c,StuListPtr s);
//输出学生信息
void list_show(ClassPtr c);
//查找学生函数
int list_search(ClassPtr c,const char *name);
//删除学生信息
int list_delete_name(ClassPtr c,char *name);
//学生成绩排序
void list_sort(ClassPtr c, StuListPtr s);
//按姓名修改分数
int list_update(ClassPtr c,StuListPtr s,const char *name,int grade);
//顺序表释放
void list_free(ClassPtr *c);
//菜单栏
void menu();
#endif
#include"seqlist.h"
//创建顺序表
ClassPtr list_create()
{
//在堆区申请一个顺序表的大小
ClassPtr c = (ClassPtr)malloc(sizeof(Class));
//判断是否成功
if(NULL == c)
{
printf("创建失败\n");
return NULL;
}
c -> len = 0;
printf("班级创建成功\n");
return c;
}
//判空
int list_empty(ClassPtr c)
{
if(NULL == c)
{
printf("顺序表不合法\n");
return 0;
}
return c -> len == 0;
}
//判满
int list_full(ClassPtr c)
{
if(NULL == c)
{
printf("顺序表不合法\n");
return 0;
}
return c -> len == MAX;
}
//添加学生
int list_add(ClassPtr c,Stu s)
{
if(NULL == c || list_full(c))
{
printf("添加失败\n");
return 0;
}
c -> data[c -> len] = s;
c -> len++;
printf("添加成功\n");
return 0;
}
//录入学生信息
void list_input(ClassPtr c,StuListPtr s)
{
if(NULL == c)
{
printf("录入失败\n");
return -1;
}
while(1)
{
Stu s;
printf("请输入学生的姓名: ");
scanf("%s",s.name);
printf("请输入学生的性别: ");
scanf("%s",s.sex);
printf("请输入学生的分数: ");
scanf("%le",&s.grade);
//调用添加学生函数
list_add(c,s);
//判断是否继续录入
char judge[31];
printf("是否继续录入: ");
scanf("%s",judge);
if(strcmp(judge,"y") == 0)
{
if(c -> len < MAX )
{
continue;
}
else
{
printf("班级已满\n");
break;
}
}
else if(strcmp(judge,"n") == 0)
{
break;
}
}
}
//输出学生信息
void list_show(ClassPtr c)
{
if(NULL == c || c -> len == 0)
{
printf("操作失败\n");
return;
}
printf("当前班级学生信息如下\n");
printf("姓名\t性别\t分数\n");
for(int i = 0; i < c -> len; i++)
{
printf("%s\t%s\t%.2lf\n",c -> data[i].name,c -> data[i].sex,c -> data[i].grade);
}
}
//查找学生函数
int list_search(ClassPtr c,const char *name)
{
if(NULL == c || list_empty(c))
{
printf("查找失败\n");
return -1;
}
//开始查找
int flag = 0;
for(int i = 0; i < c -> len; i++)
{
if(strcmp(c -> data[i].name,name) == 0)
{
flag = 1;
printf("该学生的信息如下: ");
printf("%s\t%s\t%.2lf\n",c -> data[i].name,c -> data[i].sex,c -> data[i].grade);
}
}
if(flag == 0)
{
printf("查无此人\n");
return -1;
}
return 0;
}
//删除学生信息
int list_delete_name(ClassPtr c,char *name)
{
if(NULL == c || list_empty(c))
{
printf("删除失败\n");
return -0;
}
//删除操作
for(int i = 0; i < c -> len; i++)
{
if(strcmp(c -> data[i].name,name) == 0)
{
c -> data[i] = c -> data[i + 1];
}
}
c -> len--;
printf("删除成功\n");
return 1;
}
//学生成绩排序
void list_sort(ClassPtr c, StuListPtr s)
{
if(NULL == c || list_empty(c))
{
printf("排序失败\n");
return -1;
}
//排序操作
StuListPtr q = list_create();
int i = 0;
int j = 0;
int index = 0;
for(i = 1; i < c -> len; i++)
{
index = i - 1;
for(j = i - 1; j < c -> len; j++)
{
if(c -> data[index].grade < c -> data[j].grade)
{
index = j;
}
}
if(index != i - 1)
{
c -> data[MAX - 1] = c -> data[i - 1];
c -> data[i - 1] = c -> data[index];
c -> data[index] = c -> data[MAX - 1];
}
}
}
//按姓名修改分数
int list_update(ClassPtr c,StuListPtr s,const char *name,int grade)
{
if(NULL == c || list_empty(c))
{
printf("修改失败\n");
return -1;
}
for(int i = 0; i < c -> len; i++)
{
if(strcmp(c -> data[i].name,name) == 0 )
{
c -> data[i].grade = grade;
}
}
printf("修改成功\n");
return 1;
}
//顺序表释放
void list_free(ClassPtr *c)
{
if(NULL != *c)
{
free(*c);
*c = NULL;
}
printf("释放成功\n");
}
//菜单栏
void menu()
{
printf("**************************\n");
printf("**************************\n");
printf("***** 1 、录入信息 *****\n");
printf("***** 2 、打印信息 *****\n");
printf("***** 3 、查找学生 *****\n");
printf("***** 4 、修改分数 *****\n");
printf("***** 5 、删除学生 *****\n");
printf("***** 6 、释放空间 *****\n");
printf("***** 0 、退出程序 *****\n");
printf("**************************\n");
printf("**************************\n");
}
#include"seqlist.h"
int main(int argc,const char * argv[])
{
ClassPtr c = list_create();
StuListPtr s;
if(NULL == c)
{
return -1;
}
int input = 0;
char name[234];
do
{
menu();
printf("请选择: ");
scanf("%d",&input);
switch(input)
{
case 1: //录入学生信息
{
//调用录入函数
list_input(c,s);
list_show(c);
break;
}
case 2: //打印学生列表
{
//调用输出函数
list_show(c);
break;
}
case 3: //查找学生
{
//调用查找函数
printf("请输入查找学生的姓名: ");
scanf("%s",name);
list_search(c,name);
break;
}
case 4: //修改学生分数
{
//按姓名修改分数
int grade = 0;
printf("想要修改的学生的姓名是: ");
scanf("%s",name);
printf("修改后的分数为: ");
scanf("%d",&grade);
list_update(c,s,name,grade);
list_sort(c,s);
list_show(c);
break;
}
case 5: //删除学生信息
{
printf("请输入要删除学生的姓名: ");
scanf("%s",name);
list_delete_name(c,name);
list_show(c);
break;
}
case 6: //释放空间
{
list_free(&c);
c = NULL;
break;
}
case 0:
{
printf("退出程序\n");
break;
}
default:
{
printf("选择错误,请重新选择\n");
}
}
}while(input);
return 0;
}