#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 32
typedef struct student
{
char name[20];
int id;
float score;
int age;
}data_t;
typedef struct seqlist
{
data_t data[MAX];
int n ;
}seq_t;
int insert_student();
int output_student();
int show_menu();
int delete_student();
int update_student();
int sort_student();
seq_t* creat_seqlist( )
{
seq_t *seqlist = (seq_t*)malloc(sizeof(seq_t));
if( seqlist == NULL)
{
printf("malloc error!!");
return ;
}
memset(seqlist , 0 , sizeof(seq_t));
return seqlist;
}
int insert_student(seq_t* L )
{
int i = 0 ,pos = 0 ;
data_t e;
if( L -> n == MAX )
{
printf("seqlist is full!!");
show_menu();
return -1;
}
printf("请输入你想要插入学生的位置:\n");
scanf("%d",&pos);
if( pos < 0 || pos > L -> n)
{
printf("pos is error!!");
show_menu();
return -1;
}
printf("请输入你想要插入的学生姓名,学号,分数,年龄:\n");
scanf("%s %d %f %d", e.name ,&e.id , &e.score , &e.age);
for( i = L -> n ; i >= pos ; i--)
{
L -> data[i+1] = L -> data[i];
}
L -> data[pos] = e;
(L -> n)++;
printf("插入成功\n");
show_menu();
}
int output_student(seq_t* L)
{
int j = 0;
printf("\n\n");
printf("学生列表-------------------------------------------------------------------------------\n\n");
printf("姓名\t\t\t学号\t\t\t分数\t\t\t年龄\t\t\t\n");
for( j = 0 ; j < (L -> n) ; j++)
{
printf("---------------------------------------------------------------------------------------\n");
printf("%s\t\t\t%d\t\t\t%.1f\t\t\t%d\t\t\t\n",L -> data[j].name , L -> data[j].id , L -> data[j].score , L -> data[j].age);
printf("---------------------------------------------------------------------------------------\n");
}
printf("\n");
show_menu();
}
int delete_student(seq_t* L)
{
int a = 0 ,j = 0 , m = 0 ;
int i = 0;
printf("请输入你想要删除的学生的学号:");
scanf("%d",&a);
if( L -> n == 0)
{
printf("没有学生信息,请添加:\n");
show_menu();
return -1;
}
for( j = 0 ; j < L -> n ; j++)
{
if( a == L -> data[j].id )
{
m = 1;
for(i = j + 1 ; i < L -> n ;i++ )
{
L -> data[ j ] = L -> data[ j + 1 ] ;
}
(L -> n)--;
printf("删除成功!!\n");
show_menu();
}
if ( m = 0)
{
printf("没有这个学号的信息\n");
}
return ;
}
}
int update_student( seq_t* L)
{
int a = 0 , j = 0 , m = 0;
printf("请输入你要修改的学生的学号:\n");
scanf("%d",&a);
for( j = 0 ; j < L -> n ;j++)
{
if( a == L -> data[j].id)
{
m = 1;
printf("输入你修改后的姓名,学号,成绩 , 年龄:\n");
scanf("%s %d %f %d", L -> data[j].name ,&L -> data[j].id , &L -> data[j].score ,&L->data[j].age);
printf("修改成功\n");
show_menu();
}
if( m == 0 )
{
printf("输入学号错误!!\n");
}
}
return ;
}
int sort_student(seq_t *L)
{
int i = 0 , j = 0;
data_t temp ;
if( L -> n == 0)
{
printf("没有学生信息,请添加:\n");
show_menu();
return;
}
for( i = 0 ; i < (L -> n) - 1 ; i++ )
{
for( j = 0 ; j < (L -> n) -i - 1 ; j++ )
{
if( L -> data[j].id < L -> data[j + 1].id )
{
temp = L -> data[j];
L -> data[j] = L -> data[j + 1];
L -> data[j + 1] = temp;
}
}
}
printf("排序完成!!\n");
show_menu();
return ;
}
int show_menu(seq_t *L)
{
int a = 0;
printf("\n\n");
printf("--------------学 生 管 理 系 统-----------------\n");
printf("-----------------------------------------------------\n");
printf("-----------------------------------------------------\n");
printf("---------- < 1 > 插 入 学 生 信 息 ------------\n\n");
printf("---------- < 2 > 删 除 学 生 信 息 ------------\n\n");
printf("---------- < 3 > 修 改 学 生 信 息 ------------\n\n");
printf("---------- < 4 > 查 询 学 生 信 息 ------------\n\n");
printf("---------- < 5 > 从 大 到 小 排 序 ------------\n\n");
printf("---------- < 6 > 退 出 管 理 系 统 ------------\n\n");
printf("-----------------------------------------------------\n");
printf("-----------------------------------------------------\n");
printf("---------------------------------------制作人:lpx---\n");
}
int main(int argc ,char *argv[])
{
int chose;
seq_t* L = creat_seqlist();
show_menu(L);
while(1)
{
scanf("%d",&chose);
switch (chose)
{
case 1 : insert_student(L);break;
case 2 : delete_student(L);break;
case 3 : update_student(L);break;
case 4 : output_student(L);break;
case 5 : sort_student(L) ;break;
case 6 : return 0;
default : printf("输入错误 ,请重新输入:\n");
}
}
return 0;
}
c语言利用结构体,线性表实现简易学生管理系统
最新推荐文章于 2024-07-07 15:28:32 发布