#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]);
}
}
我这代码如何改成链表,希望能提供思路帮助
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 「已注销」 2023-03-07 09:24关注
“Devil组”引证GPT后的撰写:
需要以下几个步骤:- 定义链表节点结构体 Node,包括 struct student 中的所有成员变量以及一个指向下一个节点的指针 next。
- 在 main() 函数中,创建头节点 head 并初始化为 NULL。
- 在输入、输出、添加、修改和查询等函数中,将结构体数组 stud 替换成链表节点指针 p,并按照链表的方式遍历节点。
- 在输入、添加、修改等函数中,需要动态分配内存以创建新的节点,并将其插入到链表中。
- 在修改函数中,需要按照学号或姓名查找对应的节点,如果找到需要修改节点中的成绩信息。
- 在查询函数中,需要按照学号或姓名查找对应的节点,并输出节点中的成绩信息
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 使用yolov5-7.0目标检测报错
- ¥15 对于这个问题的解释说明
- ¥200 询问:python实现大地主题正反算的程序设计,有偿
- ¥15 smptlib使用465端口发送邮件失败
- ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
- ¥15 对于squad数据集的基于bert模型的微调
- ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
- ¥20 steam下载游戏占用内存
- ¥15 CST保存项目时失败
- ¥20 java在应用程序里获取不到扬声器设备