简单学生管理系统
头文件
#ifndef _WORK_H_
#define _WORK_H_
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define max 10
typedef struct
{
char name[20];
char sex;
int age;
double score;
}stu;
typedef stu datatype;
typedef struct
{
datatype data[max];
int len;
}Class,*Classptr;
//申请空间
Classptr creat();
//添加学员信息
int Class_add(Classptr C);
//判空
int Class_empty(Classptr C);
//遍历
int Class_show(Classptr C);
//任意位置插入学员信息
int Class_pos_add(Classptr C);
//任意位置删除学员信息
int Class_pos_delete(Classptr C);
//任意位置修改学员信息
int Class_pos_mod(Classptr C);
//按名字查找
int Class_name_find(Classptr C);
//排序
void Class_sort(Classptr C);
//释放空间
void Class_free(Classptr C);
#endif
源文件
#include "work.h"
//申请空间
Classptr creat()
{
Classptr C=(Classptr)malloc(sizeof(Class));
if(NULL == C)
{
printf("申请失败\n");
return NULL;
}
C->len=0;
printf("申请成功\n");
return C;
}
//添加学员信息
int Class_add(Classptr C)
{
if(NULL == C)
{
printf("添加失败");
return 0;
}
printf("姓名\t性别\t年龄\t成绩\n");
scanf("%s %c %d %lf",\
C->data[C->len].name,\
&C->data[C->len].sex,\
&C->data[C->len].age,\
&C->data[C->len].score);
C->len++;
printf("添加成功\n");
return 1;
}
//判空
int Class_empty(Classptr C)
{
if(NULL == C)
{
printf("顺序表不合法\n");
return 0;
}
return C->len==0;
}
//遍历
int Class_show(Classptr C)
{
if(NULL==C || Class_empty(C) )
{
printf("遍历失败\n");
return 0;
}
printf("姓名\t性别\t年龄\t分数\n");
for(int i=0;i<C->len;i++)
{
printf("%s\t%c\t%d\t%.2lf\n",\
C->data[i].name,\
C->data[i].sex,\
C->data[i].age,\
C->data[i].score);
}
return 1;
}
//任意位置插入学员信息
int Class_pos_add(Classptr C)
{
int a;
printf("请输入插入的位置");
scanf("%d",&a);
if(NULL == C || Class_empty(C) || a<1 || a>C->len)
{
printf("插入失败\n");
return 0;
}
for(int i=C->len;i>=a-1;i--)
{
C->data[i+1]=C->data[i];
}
printf("姓名\t性别\t年龄\t成绩\n");
scanf("%s %c %d %lf",\
C->data[a-1].name,\
&C->data[a-1].sex,\
&C->data[a-1].age,\
&C->data[a-1].score);
C->len++;
printf("添加成功\n");
return 1;
}
//任意位置删除学员信息
int Class_pos_delete(Classptr C)
{
int a;
printf("请输入删除的位置");
scanf("%d",&a);
if(NULL == C || Class_empty(C) || a<=0 ||a>C->len)
{
printf("删除错误\n");
return 0;
}
for(int i=a-1;i<C->len;i++)
{
C->data[i]=C->data[i+1];
}
C->len--;
printf("删除成功\n");
return 1;
}
//任意位置修改学员信息
int Class_pos_mod(Classptr C)
{
int a;
printf("请输入修改的位置");
scanf("%d",&a);
if(NULL == C || Class_empty(C) || a<=0 ||a>=C->len)
{
printf("修改错误\n");
return 0;
}
printf("姓名\t性别\t年龄\t成绩\n");
scanf("%s %c %d %lf",\
C->data[a-1].name,\
&C->data[a-1].sex,\
&C->data[a-1].age,\
&C->data[a-1].score);
printf("修改成功\n");
return 1;
}
//按名字查找
int Class_name_find(Classptr C)
{
char a[20];
printf("请输入查找的名字:");
scanf("%s",a);
if(NULL == C || Class_empty(C))
{
printf("查找失败\n");
return 0;
}
for(int i=0;i<C->len;i++)
{
if(strcmp(C->data[i].name,a)==0)
{
printf("查找成功\n");
printf("姓名\t性别\t年龄\t成绩\n");
printf("%s\t%c\t%d\t%.2lf\n",\
C->data[i].name,\
C->data[i].sex,\
C->data[i].age,\
C->data[i].score);
}
}
return 1;
}
//排序
void Class_sort(Classptr C)
{
if(NULL == C || Class_empty(C))
{
printf("排序不成功\n");
return;
}
int fleg;
printf("输入0或1来控制升序或降序:");
scanf("%d",&fleg);
for(int i=1;i<C->len;i++)
{
for(int j=0;j<C->len-i;j++)
{
if(fleg == 1)
{
if(C->data[j].score<C->data[j+1].score)
{
datatype temp;
temp=C->data[j];
C->data[j]=C->data[j+1];
C->data[j+1]=temp;
}
}
if(fleg == 0 )
{
if(C->data[j].score>C->data[j+1].score)
{
datatype temp;
temp=C->data[j];
C->data[j]=C->data[j+1];
C->data[j+1]=temp;
}
}
}
}
}
//释放空间
void Class_free(Classptr C)
{
if(NULL != C)
{
free(C);
C=NULL;
}
}
主函数
#include "work.h"
int main(int argc, const char *argv[])
{
//调用申请空间函数
Classptr C=creat();
if(NULL == C)
{
printf("空间不合法\n");
return -1;
}
while(1)
{
char ret;
printf("a|A:添加学员信息\n");
printf("b|B:遍历\n");
printf("c|C:任意位置插入学员信息\n");
printf("d|D:任意位置删除学员信息\n");
printf("e|E:任意位置修改学员信息\n");
printf("f|F:按名字查找\n");
printf("g|G:排序\n");
printf("q|Q:释放空间并退出\n");
printf("请输入执行选项:");
scanf(" %c",&ret);
switch(ret)
{
case 'a'|'A':
//调用添加函数
Class_add(C);
break;
case 'b'|'B':
//调用遍历函数
Class_show(C);
break;
case 'c'|'C':
//任意位置插入学员信息
Class_pos_add(C);
break;
case 'd'|'D':
//按位置删除学员信息
Class_pos_delete(C);
break;
case 'e'|'E':
//按任意位置修改学员信息
Class_pos_mod(C);
break;
case 'f'|'F':
//按名字查找
Class_name_find(C);
break;
case 'g'|'G':
//排序
Class_sort(C);
break;
case 'q'|'Q':
//添加释放函数
Class_free(C);
C=NULL;
goto NEXT;
}
}
NEXT:
return 0;
}
思维导图