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
    评论
对于数据结构与算法实验课中的学生成绩管理系统,你可以C语言来实现。在这个系统中,你需要定义适当的数据结构来存储学生信息和成绩,并实现相应的功能,如添加学生删除学生、修改成绩、查询成绩等。 以下是一个简单的示例代码,用于展示如何实现一个基本的学生成绩管理系统: ```c #include <stdio.h> #include <string.h> #define MAX_STUDENTS 100 struct student { char name[50]; int id; float score;}; struct student students[MAX_STUDENTS]; int count = 0; void addStudent() { if (count >= MAX_STUDENTS) { printf("已达到最大学生人数,无法添加新学生\n"); return; } struct student newStudent; printf("请输入学生姓名:"); scanf("%s", newStudent.name); printf("请输入学生学号:"); scanf("%d", &newStudent.id); printf("请输入学生成绩:"); scanf("%f", &newStudent.score); students[count] = newStudent; count++; printf("添加学生成功!\n"); } void removeStudent() { int studentId; printf("请输入删除学生学号:"); scanf("%d", &studentId); int foundIndex = -1; for (int i = 0; i < count; i++) { if (students[i].id == studentId) { foundIndex = i; break; } } if (foundIndex == -1) { printf("找不到学号为%d的学生\n", studentId); return; } for (int i = foundIndex; i < count - 1; i++) { students[i] = students[i + 1]; } count--; printf("删除学生成功!\n"); } void modifyScore() { int studentId; printf("请输入要修改成绩的学生学号:"); scanf("%d", &studentId); int foundIndex = -1; for (int i = 0; i < count; i++) { if (students[i].id == studentId) { foundIndex = i; break; } } if (foundIndex == -1) { printf("找不到学号为%d的学生\n", studentId); return; } float newScore; printf("请输入新的成绩:"); scanf("%f", &newScore); students[foundIndex].score = newScore; printf("修改成绩成功!\n"); } void queryScore() { int studentId; printf("请输入要查询成绩的学生学号:"); scanf("%d", &studentId); int foundIndex = -1; for (int i = 0; i < count; i++) { if (students[i].id == studentId) { foundIndex = i; break; } } if (foundIndex == -1) { printf("找不到学号为%d的学生\n", studentId); return; } printf("学生姓名:%s\n", students[foundIndex].name); printf("学生学号:%d\n", students[foundIndex].id); printf("学生成绩:%.2f\n", students[foundIndex].score); } int main() { int choice; while (1) { printf("\n"); printf("学生成绩管理系统\n"); printf("1. 添加学生\n"); printf("2. 删除学生\n"); printf("3. 修改成绩\n"); printf("4. 查询成绩\n"); printf("0. 退出\n"); printf("请输入操作编号:"); scanf("%d", &choice); switch (choice) { case 0: return 0; case 1: addStudent(); break; case 2: removeStudent(); break; case 3: modifyScore(); break; case 4: queryScore(); break; default: printf("无效的操作编号,请重新输入\n"); } } return 0; } ``` 这个示例代码包括了添加学生删除学生、修改成绩和查询成绩等功能。你可以根据实际需求进行修改和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值