#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long number;
char name[7];
int score;
struct student *next;
};
void makeup()
{
struct student *head,*p1,*p2;
FILE *fp;
fp=fopen("record.txt","w+");
int i,n;
printf("请输入新建记录个数:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
printf("****请输入第%d个记录的【姓名】:",i);
scanf("%s",p1->name);
printf("****请输入第%d个记录的【学号】:",i);
scanf("%ld",&p1->number);
printf("****请输入第%d个记录的【成绩】:",i);
scanf("%d",&p1->score);
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
printf("****请输入第%d个记录的【姓名】:",i);
scanf("%s",p1->name);
printf("****请输入第%d个记录的【学号】:",i);
scanf("%ld",&p1->number);
printf("****请输入第%d个记录的【成绩】:",i);
scanf("%d",&p1->score);
p2->next=p1;
p2=p1;
}
fwrite(p1,LEN,1,fp);
}
p1=(struct student *)malloc(LEN);
p2->next=p1;
p1->number=0;
p1->next=NULL;
fwrite(p1,LEN,1,fp);
fclose(fp);
printf("****记录已建立****\n****自动跳回主菜单****\n\n\n");
}
void show()
{
FILE *fp;
fp=fopen("record.txt","r");
int i;
struct student *head,*p1,*p2;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
if (p1->number==0) break;
}
}
p1=p2=head;
printf("****读取记录如下****\n\n****学号****姓名****成绩****\n");
for(;p1->number!=0;)
{
printf("%ld %s %d\n",p1->number,p1->name,p1->score);
p1=p1->next;
}
fclose(fp);
printf("****自动跳回主菜单****\n\n\n");
}
void findnum()
{
FILE *fp;
fp=fopen("record.txt","r");
int i;
struct student *head,*p1,*p2;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
if (p1->number==0) break;
}
}
p1=p2=head;
for(;p1->number!=0;)
{
p1=p1->next;
}
fclose(fp);
long num;
int t=0,t1;
for(;;)
{
printf("****请输入所查记录的【学号】:");
scanf("%ld",&num);
for (;p2->number!=0;)
{
if(p2->number==num)
{
t=1;
break;
}
p2=p2->next;
}
if (t==1)
{
printf("****查找结果****\n\n****学号****姓名****成绩****\n****%d %s %d****",p2->number,p2->name,p2->score);
printf("****自动跳回主菜单****\n\n\n");
break;
}
else
{
printf("!!!!未找到!!!!\n****1:重新输入****\n****2:返回主菜单****\n****请选择:");
scanf("%d",&t1);
if (t1==2) break;
}
}
}
void findnam()
{
FILE *fp;
fp=fopen("record.txt","r");
int i,t1;
struct student *head,*p1,*p2;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
if (p1->number==0) break;
}
}
p1=p2=head;
for(;p1->number!=0;)
{
p1=p1->next;
}
fclose(fp);
char name0[7];
int t=0;
printf("****请输入所查记录的【姓名】:");
gets(name0);
for(;;)
{
for (;p2->number!=0;)
{
if(strcmp(p2->name,name0)==0)
{
t=1;
break;
}
p2=p2->next;
}
if (t==1)
{
printf("****查找结果****\n\n****学号****姓名****成绩****\n****%d %s %d****",p2->number,p2->name,p2->score);
printf("****自动跳回主菜单****\n\n\n");
break;
}
else
{
printf("!!!!未找到!!!!\n****1:重新输入****\n****2:返回主菜单****\n****请选择:");
scanf("%d",&t1);
if (t1==2) break;
}
}
}
void add()
{
FILE *fp;
fp=fopen("record.txt","r");
int i,n;
struct student *head,*p1,*p2,*p3,*p4,*head1;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
if (p1->number==0) break;
p2=p1;
}
}
fclose(fp);
printf("****请输入添加记录的个数:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
if (i==1)
{
p3=p4=(struct student *)malloc(LEN);
printf("****请输入第%d个记录的【姓名】:",i);
scanf("%s",p3->name);
printf("****请输入第%d个记录的【学号】:",i);
scanf("%ld",&p3->number);
printf("****请输入第%d个记录的【成绩】:",i);
scanf("%d",&p3->score);
head1=p3;
}
else
{
p3=(struct student *)malloc(LEN);
printf("****请输入第%d个记录的【姓名】:",i);
scanf("%s",p3->name);
printf("****请输入第%d个记录的【学号】:",i);
scanf("%ld",&p3->number);
printf("****请输入第%d个记录的【成绩】:",i);
scanf("%d",&p3->score);
p4->next=p3;
p4=p3;
}
}
p3->next=NULL;
p2->next=head1;
p1=head;
fp=fopen("record.txt","w+");
do
{
fwrite(p1,LEN,1,fp);
p2=p1;
p1=p1->next;
}
while (p2->next!=NULL);
p1=(struct student *)malloc(LEN);
p2->next=p1;
p1->number=0;
p1->next=NULL;
fwrite(p1,LEN,1,fp);
fclose(fp);
printf("****记录已添加****\n****自动跳回主菜单****\n\n\n");
}
void del()
{
FILE *fp;
fp=fopen("record.txt","r");
int i;
struct student *head,*p1,*p2;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
if (p1->number==0) break;
}
}
p1=p2=head;
printf("****已有记录如下****\n\n****学号****姓名****成绩****\n");
for(;p1->number!=0;)
{
printf("%ld %s %d\n\n",p1->number,p1->name,p1->score);
p1=p1->next;
}
fclose(fp);
int count;
long *num;
printf("****请输入删除记录的个数:");
scanf("%d",&count);
num=(long *)malloc(count*sizeof(long));
printf("****请【一次性】输入需删除记录的【学号】(用【空格】隔开):");
for (i=0;i<count;i++)
{
scanf("%ld",&num[i]);
}
for(i=0;i<count;i++)
{
for(;;)
{
if (head->number==num[i])
{
head=head->next;
break;
}
else if (p1->number==num[i])
{
p2->next=p1->next;
break;
}
p2=p1;
p1=p1->next;
}
}
p1=p2=head;
fp=fopen("record.txt","w+");
do
{
fwrite(p1,LEN,1,fp);
p2=p1;
p1=p1->next;
}
while (p2->next!=NULL);
p1=(struct student *)malloc(LEN);
p2->next=p1;
p1->number=0;
p1->next=NULL;
fwrite(p1,LEN,1,fp);
fclose(fp);
free(num);
printf("****记录已删除****\n****自动跳回主菜单****\n\n\n");
}
void changenum()
{
FILE *fp;
fp=fopen("record.txt","r");
int i;
struct student *head,*p1,*p2;
for (i=1;;i++)
{
if (i==1)
{
p1=p2=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
if (p1->number==0) break;
head=p1;
}
else
{
p1=(struct student *)malloc(LEN);
fread(p1,LEN,1,fp);
p2->next=p1;
p2=p1;
if (p1->number==0) break;
}
}
p1=p2=head;
fclose(fp);
int newscore,t=0,t1;
long num;
for (;;p1=p1->next)
{
printf("****请【依次】输入需修改记录的【学号】及其【成绩】(用【空格】隔开):");
scanf("%ld%d",&num,&newscore);
for(;p1->number!=0;)
{
if (p1->number==num)
{
p1->score=newscore;
t=1;
break;
}
}
if (t==1) break;
else
{
printf("!!!!未找到!!!!\n****1:重新输入****\n****2:返回主菜单****\n****请选择:");
scanf("%d",&t1);
if (t1==2) break;
}
}
p1=head;
fp=fopen("record.txt","w+");
do
{
fwrite(p1,LEN,1,fp);
p2=p1;
p1=p1->next;
}
while (p2->next!=NULL);
p1=(struct student *)malloc(LEN);
p2->nex