成绩删除 score_delete.c
#include <stdlib.h>
typedef struct Student
{
char classs[20];//班级
int num;//学号
char name[20];//名字
double score[5];//五科成绩
double average;//平均成绩
struct Student *next;//下一个地址
}stu;
extern n;
stu *score_delete(stu *head)//成绩删除
{
stu *p=head;
stu *pdel;
for(;;)
{
printf("\n—————————————————————————————");
printf("\n按学号查找删除输入1: 按姓名查找删除输入2:\n");
printf("—————————————————————————————\n");
int chose_1;
chose_1=fied_judje();//判断输入是否正确
if(chose_1==1)
{
printf("\n请输入需要查找删除的学生的学号:");
int num;
int lang=0;//判断是否存在所查学生
scanf("%d",&num);
int count=1;//要删除的链表中的第几个学生
for(;p!=NULL;)
{
if(num==p->num)
{
lang=1;
int i;
pdel=head;
if(count==1)
{head=head->next;
}
else
{ for(i=1;i<count-1;i++)
{
pdel=pdel->next;
}
if(count==n)
pdel->next=NULL;
else
pdel->next=pdel->next->next;
break;
}
}
count++;
p=p->next;
}
if(lang==0)
printf("\<<n你所查学生不存在!>>");
}else
{
printf("\n请输入需要查找删除的学生的姓名:");
char name[20];
int lang=0;//判断是否存在所查学生
scanf("%s",&name);
int count=1;//要删除的链表中的第几个学生
for(;p!=NULL;)
{
if(!strcmp(name,p->name))
{
lang=1;
int i;
pdel=head;
if(count==1)
{head=head->next;
}
else
{ for(i=1;i<count-1;i++)
{
pdel=pdel->next;
}
if(count==n)
pdel->next=NULL;
else
pdel->next=pdel->next->next;
break;
}
}
count++;
p=p->next;
}
if(lang==0)
printf("\n你所查学生不存在!\n");
}
//删除完后的选择
int chose_2;
printf("\n—————————————————————————————");
printf("\n退出查询删除请输入1: 继续查询删除请输入2\n");
printf("—————————————————————————————\n");
chose_2=fied_judje();//判断输入是否正确
if(chose_2==1)return head;
else continue;
}
}
文件存储 file_conserve.c
#include <stdio.h>
typedef struct Student
{
char classs[20];//班级
int num;//学号
char name[20];//名字
double score[5];//五科成绩
double average;//平均成绩
struct Student *next;//下一个地址
}stu;
void file_conserve(stu *head)//文件存储
{
stu *p=head;
FILE *fp;
fp = fopen ("save_stu.txt","w+");
for(;p!=NULL;)
{
fprintf(fp,"%s\t%d\t%s\t%6.2lf\t%6.2lf\t6.2lf\t6.2lf\t%6.2lf\n",p->classs
,p->num,p->name,p->score[0],p->score[1],p->score[2]
,p->score[3],p->score[4]);
p=p->next;
}
fclose(fp);
printf("\n学生信息保存完成!\n");
}
文件输入 file_input.c
#include <stdio.h>
typedef struct Student
{
char classs[20];//班级
int num;//学号
char name[20];//名字
double score[5];//五科成绩
double average;//平均成绩
struct Student *next;//下一个地址
}stu;
void file_input(stu *head)//文件输入
{
FILE *fp;
stu out_txt;
fp=fopen("student.txt","r");
if(fp==NULL)
{
printf("文件打开失败");
}
else
{
printf("下面是学生的信息:\n");
printf("班级: 学号: 姓名: 五门成绩:\n");
while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&out_txt.classs,&out_txt.num,
&out_txt.name,&out_txt.score[0],&out_txt.score[1],&out_txt.score[2]
,&out_txt.score[3],&out_txt.score[4])!=EOF)
{
printf("%s %d %s %6.2f %6.2f %6.2f %6.2f %6.2f\n",out_txt.classs,out_txt.num,
out_txt.name,out_txt.score[0],out_txt.score[1],out_txt.score[2],
out_txt.score[3],out_txt.score[4]);
}
}
}
文件导入 file_import.c
#include <stdlib.h>
typedef struct Student
{
char classs[20];//班级
int num;//学号
char name[20];//名字
double score[5];//五科成绩
double average;//平均成绩
struct Student *next;//下一个地址
}stu;
extern n,lang_ave;
stu *file_import(stu *head)//文件导入
{
stu *head1=creatlist2(head);
printf("\n<<学生信息导入成功!>>\n");
lang_ave=0;
return head1;
}
文件导入调用链表2 creatlist2.c
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(stu)
typedef struct Student
{
char classs[20];//班级
int num;//学号
char name[20];//名字
double score[5];//五科成绩
double average;//平均成绩
struct Student *next;//下一个地址
}stu;
extern n;
stu *creatlist2(stu *head)
{
FILE *fp;
stu *p1,*p2;//p1开辟 p2末尾
stu *head1;//如果有数据,把新数据添加到上一次链表的末尾
stu temp;//中间变量
p2=p1=(stu *)malloc(LEN);
fp = fopen ("student.txt", "r+");
if(n==0)
{
head=NULL;
while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&temp.classs,&temp.num,
&temp.name,&temp.score[0],&temp.score[1],&temp.score[2]
,&temp.score[3],&temp.score[4])!=EOF)
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
strcpy(p1->classs,temp.classs);
p1->num=temp.num;
strcpy(p1->name,temp.name);
p1->score[0]=temp.score[0];
p1->score[1]=temp.score[1];
p1->score[2]=temp.score[2];
p1->score[3]=temp.score[3];
p1->score[4]=temp.score[4];
p1=(stu *)malloc(LEN);
}
p2->next=NULL;
fclose(fp);
return head;
}
else//已经存在录入的情况下可以继续导入
{
stu *p=head;
int i;
for(i=1;i<n;i++)
{
p=p->next;
}
// p->next=head1;
int n1=0;
while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&temp.classs,&temp.num,
&temp.name,&temp.score[0],&temp.score[1],&temp.score[2]
,&temp.score[3],&temp.score[4])!=EOF)
{
n=n+1;
n1=n1+1;
if(n1==1)p->next=p1;
else p2->next=p1;
p2=p1;
strcpy(p1->classs,temp.classs);
p1->num=temp.num;
strcpy(p1->name,temp.name);
p1->score[0]=temp.score[0];
p1->score[1]=temp.score[1];
p1->score[2]=temp.score[2];
p1->score[3]=temp.score[3];
p1->score[4]=temp.score[4];
printf("%s",p1->classs);
p1=(stu *)malloc(LEN);
}
p2->next=NULL;
fclose(fp);
head->average=0;
return head;
}
仅供参考,不足的地方还望原谅!!!
**by:郑轻大学生**
打开App,阅读手记