luminse 2023-03-07 09:16 采纳率: 80%
浏览 34
已结题

我这代码如何改成链表,希望能提供思路帮助


 
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> //字符串处理  
#include<windows.h> 
int n=4; 
struct student 
{ 
int num; //学号 
char name[10]; //名字 
float score[3]; //成绩 
}stud[100];
int i,choose,a,t=0; 
long int num;
 
int main () 
{ 
void save(void); 
void input(void); 
void output(void); 
void scoremodify();
void namemodify(); 
void scorecheck();
void namecheck(); 
void Addstudent(); 
void sclsearch(); 
while(1) 
{ 
printf(" ********************************************************* \n"); 
printf("  >>欢迎进入学生成绩记录系统<< \n");
printf(" 【1】-------------------------- 创建学生成绩信息 \n");
printf(" 【2】-------------------------- 显示所有学生成绩信息 \n");
printf(" 【3】-------------------------- 添加学生成绩信息 \n");
printf(" 【4】-------------------------- 按学号查询学生成绩信息 \n");
printf(" 【5】-------------------------- 按姓名查询学生成绩信息 \n");
printf(" 【6】-------------------------- 按学号修改学生的成绩 \n");
printf(" 【7】-------------------------- 按姓名修改学生的成绩 \n");
printf(" 【8】-------------------------- 按分数段显示学生的信息 \n");
printf(" 【0】-------------------------- 退出 \n");
printf(" ********************************************************* \n");
printf(" 请输入相应菜单编号: ");
scanf("%d",&a);
switch(a)
{ 
case 1: 
input(); //输入 
save(); //保存 
break; 
case 2: 
output(); //输出 
printf("\n"); 
system("PAUSE"); 
system("CLS"); //清屏 
break; 
case 3: 
Addstudent(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break; 
case 4: 
scorecheck(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break;
case 5: 
namecheck(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break; 
case 6: 
scoremodify(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break;
case 7: 
namemodify(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break;  
case 8: 
sclsearch(); 
printf("\n"); 
system("PAUSE"); 
system("CLS"); 
break;
case 0:exit(0); 
default: ; 
} 
} 
return 0; 
} 
 
void save() 
{ 
FILE *fp; 
if ((fp=fopen("stu.dat","wb"))==NULL)/*以只写的方式打开文件*/   
{ 
printf("无法打开文件!\n"); 
return ; 
} 
for(i=0;i<n;i++) 
if (fwrite (&stud[i],sizeof(struct student),1,fp)!=1)/*写入字节为 1 的信息在文件中*/ 
printf("文件写入错误!\n"); 
fclose(fp);/*关闭文件*/ 
} 
void input()//录入学生成绩
{ 
int i; 
char a; 
for(i=0;i<n;i++) 
{ 
printf("\n 请输入学生成绩信息:\n"); 
printf("\n 请依次输入 学号 姓名 c语言成绩:\n"); 
scanf("%d%s%f",&stud[i].num,stud[i].name,&stud[i].score[0]); 
printf("输入:y(继续),n(终止)!\n"); 
fflush(stdin);   //清除输入缓存 
scanf("%c",&a); 
if(a=='n' || a=='N') 
break; 
} 
n=i+1; 
} 
void Addstudent() 
{ 
FILE *fp; 
struct student s; 
fp=fopen("stu.dat","ab"); 
if((fp=fopen("stu.dat","ab"))==NULL) 
printf("File open error!\n"); 
else 
{ 
printf("请输入所增加学生的 学号 姓名 c语言成绩:\n"); 
scanf("%d",&s.num ); 
scanf("%s",s.name); 
scanf("%f",&s.score[0]); 
fwrite (&s,sizeof(struct student),1,fp); 
fclose(fp);/*关闭文件*/ 
} 
printf("写入成功!\n"); 
}//end function Addstudent; 
void output() 
{ 
int i; 
//float s; 
FILE *fp; 
if((fp=fopen("stu.dat","rb"))==NULL) 
{ 
printf("cannot open file\n"); 
exit(0); 
} 
printf("\n 学号 姓名 c语言成绩\n"); 
for(i=0;fread(&stud[i],sizeof(struct student),1,fp)==1;i++) 
{ 
printf("%d %10s % 10.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
fclose(fp); 
n=i; 
} 
void scoremodify() 
{ 
int number,i; 
printf("请输入要修改信息的学生学号:"); 
scanf("%d",&number); 
for(i=0;i<n;i++) 
if(number==stud[i].num) 
break;/*查找判断*/ 
if(i<n)/*查找判断*/ 
{ 
printf("请输入修改后的学生的信息:"); 
printf("\n 请输入学生的 c语言成绩:"); 
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
save(); 
} 
else 
printf("没找到该学生的信息\n"); 
system("pause");system("cls"); 
} 
void namemodify() 
{ 
int i;
char name[10];
printf("请输入要修改信息的学生姓名:"); 
scanf("%s",&name); 
for(i=0;i<n;i++) 
if(strcmp(stud[i].name,name)==0) 
break;/*查找判断*/ 
if(i<n)/*查找判断*/ 
{ 
printf("请输入修改后的学生的信息:"); 
printf("\n 请输入学生的 c语言成绩:"); 
scanf("%f",&stud[i].score[0]);
printf("\n学号 姓名 c语言成绩\n");
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
save(); 
} 
else 
printf("没找到该学生的信息\n"); 
system("pause");system("cls"); 
} 
void namecheck() 
{ 
char name[10]; 
printf("按照姓名查询请按\n"); 
printf("\n 请输入姓名:"); 
scanf("%s",&name); 
printf("查询结果\n"); 
printf("学号 姓名 c语言成绩\n");
for(i=0;i<n;i++)
if(strcmp(stud[i].name,name)==0) 
{ 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
} 
void scorecheck() 
{ 
int b; 
printf("按照学号查询请按\n"); 
{ 
printf("\n 请输入学号:"); 
scanf("%d",&b); 
printf("查询结果\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
if(stud[i].num ==b) 
{ 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
} 
} 
void sclsearch() 
{ 
int i; 
printf("90 分以上:\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
{ 
if(stud[i].score[0]>=90) 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
printf("80~89:\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
{ 
if(stud[i].score[0]>=80&&stud[i].score[0]<90) 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
printf("70~79:\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
{ 
if(stud[i].score[0]>=70&&stud[i].score[0]<80) 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
printf("60~69:\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
{ 
if(stud[i].score[0]>=60&&stud[i].score[0]<70) 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
printf("60 分以下:\n"); 
printf("学号 姓名 c语言成绩\n"); 
for(i=0;i<n;i++) 
{ 
if(stud[i].score[0]<60) 
printf("%d %s %.2f\n",stud[i].num,stud[i].name,stud[i].score[0]); 
} 
}
  • 写回答

4条回答 默认 最新

  • 「已注销」 2023-03-07 09:24
    关注

    “Devil组”引证GPT后的撰写:
    需要以下几个步骤:

    • 定义链表节点结构体 Node,包括 struct student 中的所有成员变量以及一个指向下一个节点的指针 next。
    • 在 main() 函数中,创建头节点 head 并初始化为 NULL。
    • 在输入、输出、添加、修改和查询等函数中,将结构体数组 stud 替换成链表节点指针 p,并按照链表的方式遍历节点。
    • 在输入、添加、修改等函数中,需要动态分配内存以创建新的节点,并将其插入到链表中。
    • 在修改函数中,需要按照学号或姓名查找对应的节点,如果找到需要修改节点中的成绩信息。
    • 在查询函数中,需要按照学号或姓名查找对应的节点,并输出节点中的成绩信息
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月7日

悬赏问题

  • ¥15 使用yolov5-7.0目标检测报错
  • ¥15 对于这个问题的解释说明
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备