学生成绩管理系统(顺序表)

/*===============================================

* 文件名称:2.c

* 创建日期:2022年12月28日

* 描 述:

================================================*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//#include <time.h>

#include <unistd.h>

#define size 20

typedef struct student{

long xuehao;

char name[size];

double score;

}stu;

typedef struct classrum{

stu st[size];

int last;

}class;

//初始化

class * cushihua()

{

class *seq = (class *)malloc(sizeof(class));

if(NULL ==seq)

{

perror("malloc");

return NULL;

}

memset( seq->st ,0,sizeof(stu)*size);//对数组清零 bzero(seq->data,sizeof(date_t)*SIZE);

seq->last=-1;

return seq;

}

//判空

int pankong(class *seq)

{

return (seq->last == -1)?1:0;

}

//判满

int panman(class *seq)

{

return (seq->last+1 == size)?1:0;

}

//求表长

int biaochang(class *seq)

{

return seq->last+1;

}

//输入

int charu(class *seq)

{

//1.判断表是否满了

if(panman(seq))

return -1;

int pos =0;

long xuehao1 = 0;

char name1[20] = {0};

double score1 = 0;

puts("请按格式输入 格式:序号 学号 姓名 成绩");

scanf("%d %ld %s %lf",&pos,&xuehao1,name1,&score1);

pos=pos-1;

//2.判断位置是否合法

int len = biaochang(seq);

if(pos < 0 || pos > len)

{

puts("该位置无法插入,请重新操作");

return -1;

}

int i;

for(i=seq->last; i>=pos; i--)

{

strcpy(seq->st[i+1].name,seq->st[i].name);

seq->st[i+1].xuehao = seq->st[i].xuehao;

seq->st[i+1].score = seq->st[i].score;

}

seq->st[pos].xuehao =xuehao1;

strcpy(seq->st[pos].name,name1);

seq->st[pos].score =score1;

seq->last++;

return 0;

}

//按学号进行删除

int shanchu(class *seq)

{

long xuehao1=0;

int pos =-1;

//1.判断表是否为空

if(pankong(seq))

return -1;

puts("请输入需要删除学生的学号:");

scanf("%ld",&xuehao1);

//2.判断学号是否存在

for(int j=0; j<=seq->last; j++)

{

if(seq->st[j].xuehao == xuehao1)

{

pos=j;

break;

}

}

if(pos==-1)

{

printf("该学号不存在\n");

return -1;

}

if(pos < 0 || pos > seq->last)

return -1;

int i;

for(i=pos; i<seq->last; i++)

{

seq->st[i].xuehao = seq->st[i+1].xuehao;

seq->st[i].score = seq->st[i+1].score;

strcpy(seq->st[i].name,seq->st[i+1].name);

}

seq->last--;

return 0;

}

//按序号进行删除

int xshanchu(class *seq)

{

//1.判断表是否为空

if(pankong(seq))

return -1;

int pos=0;

puts("请输入需要删除学生的序号:");

scanf("%d",&pos);

pos=pos-1;

//2.判断位置是否合法

if(pos < 0 || pos > seq->last)

{

puts("该序号不存在");

return -1;

}

int i;

for(i=pos; i<seq->last; i++)

{

seq->st[i].xuehao = seq->st[i+1].xuehao;

seq->st[i].score = seq->st[i+1].score;

strcpy(seq->st[i].name,seq->st[i+1].name);

}

seq->last--;

return 0;

}

//按序号进行修改

int xiugai(class *seq)

{

int pos =0;

long xuehao1 = 0;

char name1[20] = {0};

double score1 = 0;

//1.判断表是否为空

if(pankong(seq))

return -1;

puts("请输入需要修改的学生序号:");

scanf("%d",&pos);

pos=pos-1;

//2.判断位置是否合法

if(pos < 0 || pos > seq->last)

{

puts("该序号不存在");

return -1;

}

puts("请按格式修改学生信息 格式:学号 姓名 成绩");

scanf("%ld %s %lf",&xuehao1,name1,&score1);

seq->st[pos].xuehao =xuehao1;

seq->st[pos].score =score1;

strcpy(seq->st[pos].name,name1);

return 0;

}

//清空顺序表

void seqlistClear(class *seq)

{

seq->last = -1;

}

//销毁顺序表

void seqlistDestory(class **seq)

{

free(*seq);

*seq=NULL;

}

//打印顺序表

void dayin(class *seq)

{

int i;

for(i=0; i<=seq->last; i++)

{

printf("序号:%d ",i+1);

printf("学号:%ld ", seq->st[i].xuehao);

printf("姓名:%s ", seq->st[i].name);

printf("成绩:%f ", seq->st[i].score);

puts(""); //printf("\n"); putchar('\n');

}

}

void view()

{

puts("\033[31m---------------欢迎来到学生管理系统-----------------\033[0m");

puts("\033[31m1.插入学生信息\033[0m");

puts("\033[31m2.按学号删除学生信息\033[0m");

puts("\033[31m3.按序号删除学生信息\033[0m");

puts("\033[31m4.按序号修改学生信息\033[0m");

puts("\033[31m5.退出系统\033[0m");

puts("\033[31m(输入无效命令则需重新输入)\033[0m");

puts("\033[31m----------------------------------------------------\033[0m");

}

int main(int argc, const char *argv[])

{

int a = 0;

class *seq = cushihua();

if(seq == NULL)

{

perror("createSeqlist");

return -1;

}

while(1)

{

view();

dayin(seq);

printf("\033[34m输入操作命令:\033[0m");

scanf("%d",&a);

switch(a)

{

case 1: charu(seq);

break;

case 2: shanchu(seq);

break;

case 3: xshanchu(seq);

break;

case 4: xiugai(seq);

break;

case 5: seqlistDestory(&seq); printf("%p\n", seq);return 0;

break;

default :printf("请输入正确的操作命令:\n");

break;

}

printf("\033[34m正在执行操作,请等待...\033[0m\n");

sleep(1);

system("clear");

}

//销毁顺序表

seqlistDestory(&seq);

printf("%p\n", seq);

return 0;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值