c语言删除相同学生信息,删除学生信息算法执行完case10输入y 之后do whil

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

太多了贴一部分,主要是删除算法,主方法的上一个

#include

#include

#include

typedef struct Student/*结构体是一种构造数据类型,可以由若干个成员组成*/

{

char name[20]; //姓名

char ID[30]; //学号

char sex[20]; //性别

int c; //c语言成绩

int math; //数学成绩

int eng; //英语成绩

float average; //平均分

int sum; //总分

};

//单链表的存储结构

typedef struct LNode

{

Student stu; //学生信息

struct LNode *next;

}*LinkLinst;

//创建链表,输入学生信息,后插法

void InitList(LinkLinst &L) //构造一个空链表

{

L=new LNode; //建立头结点

L->next=NULL;

}

//学生信息数目/链表的长度

int length(LinkLinst &L)

{

int len=0;

LinkLinst p;

p=L->next; //指向首元结点

while(p)

{

len++;

p=p->next;

//指向最后一个结点

}

return len;

}

//录入m个学生信息,尾插法

void input(LinkLinst &L,int len,int m)

{

length(L);

LinkLinst p;

p=L; //指向头结点

if(p->next!=NULL)

{

for(int j=1;j<=len;j++)

{

p=p->next;

}

}

for(int i=1;i<=m;i++)

{ LinkLinst w=(LinkLinst)malloc(sizeof(LNode)); //动态分配空间,存储学生信息

printf("请输入学生的姓名:");scanf("%s",&w->stu.name);getchar();

printf("请输入学生的学号:");scanf("%s",&w->stu.ID);getchar();

printf("请输入学生的性别:");scanf("%s",&w->stu.sex);getchar(); //字符的输入函数

printf("请输入学生的数学分数:");scanf("%d",&w->stu.math);

printf("请输入学生的c语言分数:");scanf("%d",&w->stu.c);

printf("请输入学生的英语分数:");scanf("%d",&w->stu.eng);

w->stu.sum=w->stu.c+w->stu.eng+w->stu.math ;

printf("学生的总分是:%d\n",w->stu.sum);

w->stu.average=w->stu.sum/3.0;

printf("学生的平均分是:%.2lf\n",w->stu.average);

p->next=w;

p=w;

w->next=NULL;

}

printf("学生信息录入成功!\n");

}

//修改学生信息

void change(LinkLinst L)

{

printf("您要修改信息的学生学号是?");

char id[10];

scanf("%s",&id);

getchar();

LinkLinst p;

p=L->next;

while(1)

{

if(p&&strcmp(p->stu.ID,id)!=0)

p=p->next;

if(p==NULL)

{printf("没有该学生的成绩\n");break;}

if(strcmp(p->stu.ID,id)==0)

{

printf("请输入学生的姓名:");scanf("%s",&p->stu.name);getchar();

printf("请输入学生的学号:");scanf("%s",&p->stu.ID);getchar();

printf("请输入学生的性别:");scanf("%s",&p->stu.sex);getchar(); //字符的输入函数

printf("请输入学生的数学分数:");scanf("%d",&p->stu.math);

printf("请输入学生的c语言分数:");scanf("%d",&p->stu.c);

printf("请输入学生的英语分数:");scanf("%d",&p->stu.eng);

p->stu.sum=p->stu.c+p->stu.eng+p->stu.math ;

printf("学生的总分是:%d\n",p->stu.sum);

p->stu.average=p->stu.sum/3.0;

printf("学生的平均分是:%.2lf\n",p->stu.average);

break;

}

}

}

//删除学生信息

void initDelete(LinkLinst &L,int len)

{

printf("您要删除信息的学生学号是?");

char id[10];

scanf("%s",&id);

getchar();

LinkLinst p;

LinkLinst q;

LinkLinst r;

p=L;

while(1)

{

q=p; //q指向被删结点的前一个结点

p=p->next;

if(p==NULL)

{printf("没有该学生的成绩\n");break;}

if(strcmp(p->stu.ID,id)==0)

{

r=p; //临时保存被删结点的地址以备释放

q->next=r->next; //改变删除结点前驱结点的指针域

free(p);

printf("信息删除成功!\n");

break;

}

}

}

void main()

{

int a; //项目序号

int n; //输入的学生信息数目

int m; //插入的学生信息数目

char i;

LinkLinst L;

InitList(L); //创建链表

do

{

printf(" 欢迎进入学生成绩查询系统 \n");

printf("\n 请选择功能列表 \n");

printf("\n 1 录入学生信息 ");

printf("\n 2 已经录入信息的学生人数 ");

printf("\n 3 按姓名查找学生成绩 ");

printf("\n 4 按学号查找学生成绩 ");

printf("\n 5 查找不及格学生成绩 ");

printf("\n 6 统计学生成绩等级人数 ");

printf("\n 7 学生成绩排序 ");

printf("\n 8 输出学生信息 ");

printf("\n 9 修改学生信息 ");

printf("\n 10 删除学生信息 ");

printf("\n");

printf("\n输入您要选择项目的序号:");

scanf("%d",&a);

switch(a)

{

case 1:

{

printf("您要录入的学生信息数目是?");

scanf("%d",&m);

int l=length(L);

input(L,l,m);

}

break;

case 2:

{

printf("学生人数是:%d\n",length(L));

}break;

case 3:

searchname(L); break;

case 4:

searchID(L); break;

case 5:

nopass(L); break;

case 6:

rank(L);break;

case 7:

paixu(L);break;

case 8:

out(L);break;

case 9:

change(L); break;

case 10:

{int l=length(L);

initDelete(L,l); break;}

}

printf("是否继续(y/n)");

if(getchar()=='n') break;

}while(getchar()=='y');

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值