a828546 2020-06-18 13:19 采纳率: 0%
浏览 59

帮忙加一个删除成绩的步骤

#include
#include
#include
#include
#define N 100
typedef struct student
{
long num;
char name[20];
float score;
struct student next;
}stu;
FILE *fp;
void menu()//在这里进行主菜单的调用
{
printf("\n *
******************** \n");
printf("\n 学生成绩记录簿设计 \n");
printf("\n ********************** \n");
printf("\n");
printf("\n -------------主菜单-------------\n");
printf(" 1. 输入所有学生的学号、姓名、C语言成绩\n");
printf(" 2. 显示所有学生的信息\n");
printf(" 3. 按学号或姓名查询成绩\n");
printf(" 4. 添加成绩记录\n");
printf(" 5. 删除成绩记录\n");
printf(" 6. 修改指定学号或姓名的学生的成绩\n");
printf(" 7. 将学生成绩按从高到低排名\n");
printf("\n ---------------结束---------------\n");
}
struct student *creat()//创建学生信息链表,将学生信息动态传递下去
{
struct student *head,*p,*q;
int i=0,n;
printf("\n-----请输入学生数:");
scanf("%d",&n);
printf("\n\t\t\t 学生的信息如下:\n");
printf("\n\t\t\t 学号====姓名=====分数\n");

do
{
p=(struct student *)malloc(sizeof(struct student));//申请内存
printf("\t\t\t");
scanf("%ld%s%f",&p->num,&p->name,&p->score);//链表的传递
i++;
if(i==1)
head=p;
else
q->next=p;
q=p;
}
while(i<n);

q->next=NULL;
return head;
}
void print(struct student *head)//在这里使用文件中的 w+打开模式将学生信息读入磁盘

{
struct student *p=head;
fp=fopen("stut.txt","w");
while(p!=NULL)
{
fprintf(fp,"%d %s %f\n",p->num,p->name,p->score);

p=p->next;
}
fclose(fp);//关闭文件
}
void input()//具体功能是将文件中的内容读取到显示屏上,主要使用了文件中的 r+打开

{
FILE *fp;
stu *p;
if((fp=fopen("stut.txt","r"))==NULL)
{
printf("File open error!\n");
exit(0);
}
p=(stu *)malloc(sizeof(stu));
while((fscanf(fp,"%ld%s%f",&p->num,&p->name,&p->score))!=EOF)
printf(" %ld %s %f\n",p->num,p->name,p->score);
fclose(fp);
}
//查找,实现了按学号或姓名查找,里面采用了子函数调用子函数的方法实现了该功

void name()
{
FILE *fp=NULL;
stu *xs=NULL,*temp=NULL,*pr=NULL;
char name[20];
int flag=1;
printf("\n 输入要查学生的姓名: ");
scanf("%s",name);
if((fp=fopen("stut.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
temp=xs;
do
{
pr=(stu *)malloc(sizeof(stu));
if(pr==NULL)
printf("申请内存失败!"),exit(0);
if(xs==NULL)
xs=pr;
else
{
temp=xs;
while(temp->next!=NULL)
temp=temp->next;
temp->next=pr;
}
temp=pr;
temp->num=0;
fscanf(fp,"%d%s%f",&temp->num,temp->name,&temp->score);
temp->next=NULL;
}while(pr->num!=0);
pr=xs;
while(pr!=NULL)
{
if(strcmp(xs->name,name)==0)//当找到该生时输出该生的信息
{
printf("\n\t\t 该学生的信息如下:\n");
printf("\t");
printf("%10s %6d %6.2f\n",xs->name,xs->num,xs->score);
flag=0;
break;
}
pr=pr->next;
}
if(flag)
printf("没有找到该生的信息!");
fclose(fp);

}
void num()//按学号查找
{
FILE *fp=NULL;
stu *xs=NULL,*temp=NULL,*pr=NULL;
long num;
int flag=1;
printf("\n 输入要查学生的学号: ");
scanf("%ld",&num);
if((fp=fopen("stut.txt","r"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
temp=xs;
do
{
pr=(stu *)malloc(sizeof(stu));
if(pr==NULL)
printf("申请内存失败!"),exit(0);
if(xs==NULL)
xs=pr;
else
{
temp=xs;
while(temp->next!=NULL)
temp=temp->next;
temp->next=pr;
}
temp=pr;
temp->num=0;
fscanf(fp,"%d%s%f",&temp->num,temp->name,&temp->score);
temp->next=NULL;
}while(pr->num!=0);
pr=xs;
while(pr!=NULL)
{
if(pr->num==num)
{
printf("\n\n====学生的信息如下:\n");
printf("-----");
printf("%10s %6d %6.2f\n",pr->name,pr->num,pr->score);
flag=0;
}
pr=pr->next;
}
if(flag)
printf("没有找到该生的信息!");
fclose(fp);
}
void search()//主函数中的子函数调用了两个子函数,使用 switch 语句实现
{
int chioce;
system("cls");
printf("\t\t1-----姓名查询信息-----\n");
printf("\n\t\t2-----学号查询信息-----\n");
printf("\n 请选择以何种方式进行查询:");
scanf("%d",&chioce);
switch(chioce)
{
case 1:name();
break;
case 2:num();
break;
default:
printf("选择错误!\n");
}

}
//插入学生的信息
void insert()
{
int n=0;
int i,j;
struct student s,sx[N];
printf("\n 请输入插入的学生的姓名:");
scanf("%s",s.name);
printf("\n 学生的学号:");
scanf("%ld",&s.num);
printf("\n 学生的成绩:");
scanf("%f",&s.score);

if((fp=fopen("stut.txt","r+"))==NULL)
{
printf("can't open file!\n");
exit(0);
}
while((fscanf(fp,"%ld%s%f",&sx[n].num,sx[n].name,&sx[n].score))!=EOF)
{
n++;
}
fclose(fp);
for(i=0;i {
if(s.score break;
}
for(j=n;j>=i;j--)
{sx[j+1]=sx[j];}
sx[i]=s;
if((fp=fopen("stut.txt","w"))==NULL)
{printf("不能建立文件!\n");exit(0);}
else
{for(i=0;i<=n;i++)
{fprintf(fp,"%d %s %f\n",sx[i].num,sx[i].name,sx[i].score);}
fclose(fp);}
}
void delete_data()
{

int chioce;
system("cls");
printf("\t\t1-----姓名删除选项-----\n");
printf("\n\t\t2-----学号删除选项-----\n");
printf("\n 请选择以何种方式进行删除:");
scanf("%d",&chioce);
switch(chioce)
{
struct student s,sx[N];
case 1:printf("\n请输入学生姓名;");
scanf("%s",s.name);
printf("\n删除成功");
break;
case 2:printf("\n请输入学生学号;");
scanf("%ld",&s.num);
printf("\n删除成功");
break;
default:
printf("选择错误!\n");
}
}
void modi(stu head)
{
stu *xs=head;
char name[20];
int flag=1;
system("cls");
printf("\n 输入要修改学生的姓名: ");
scanf("%s",name);
fp=fopen("stut.txt","a+");
while(xs!=NULL)
{if(strcmp(xs->name,name)==0)/
判断输入要修改的姓名是否存在*/
{
fprintf(fp,"\n====修改前学生的信息如下:\n");
fprintf(fp,"\n%10s %6s %6s\n","姓名","学号","C 语言的成绩");
fprintf(fp,"\n%10s %6d %6.2f \n",xs->name,xs->num,xs->score);
printf("\n 请输入该生的 C 语言成绩:");
scanf("%f",&xs->score);
flag=0;
break;
}xs=xs->next;
}

fprintf(fp,"\n====修改后的学生的信息如下:\n");
fprintf(fp,"\n%10s %6s %6s\n","姓名","学号","C 语言的成绩");
fprintf(fp,"\n%10s %6d %6.2f\n",xs->name,xs->num,xs->score);

if(flag)
printf("\n 学生不存在,修改失败!!");
fclose(fp);
getchar();
}
void sort(stu *head)
{
stu *p=head;
printf("60 分以下:\n");
while(p!=NULL)
{
if(p->score printf("%d\t%s\t%f\n",p->num,p->name,p->score);
p=p->next;
}
p=head;
printf("60~79 分:\n");
while(p!=NULL)
{
if(p->score>60 && p->score printf("%d\t%s\t%f\n",p->num,p->name,p->score);
p=p->next;
}
p=head;
printf("80~89:\n");
while(p!=NULL)
{
if(p->score>80 && p->score printf("%d\t%s\t%f\n",p->num,p->name,p->score);
p=p->next;
}
p=head;
printf("90 分以上:\n");
while(p!=NULL)
{
if(p->score>90)
printf("%d\t%s\t%f\n",p->num,p->name,p->score);
p=p->next;
}
fclose(fp);
getchar();
}
main()
{
int chioce;
stu *head;
menu();
printf("\n\n-----请选择序号:");
scanf("%d",&chioce);

while(chioce!=0)
{
switch(chioce)
{
case 1:
head=creat();
print(head);
break;
case 2:input();
break;
case 3:search();
menu();
break;
case 4:insert();
break;
case 5:delete_data();
break;
case 6:modi(head);
menu();
break;
case 7:sort(head);
break;
case 8:exit(0);
}
printf("\n 请继续输入你想选择的:");
scanf("%d",&chioce);
}
}

  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-08-24 16:41
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用