题目:班级成绩管理系统:
(1)要求利用链表指针来操作完成、动态内存分配。
(2)姓名、性别、程序设计训练课成绩。
(3)对成绩排序,同时可以插入学生、删除学生。
(4)按一定的格式进行文件保存、读取。
fprintf()与fscanf()
project中有文件score system.txt(内容有:zxc v 12.3)
好像无法用scanf函数从文件中获得链表
C语言源文件:
#include
#include
#include
#define LEN sizeof(struct Student)
struct Student
{
char name[20];
char sex;
float score;
struct Student *next;
};
struct Student *creat()
{
struct Student*head;
head=NULL;
return(head);
};
void insert(struct Student *p)
{
printf("请输入插入学生信息(姓名,性别,分数):\n");
struct Student *q;
q=(struct Student *)malloc(LEN);
int flag=0;
scanf("%s,%c,%f",q->name,&q->sex,&q->score);
while(p!=NULL)
{
if(p->next->score>q->score)
{
q->next=p->next;
p->next=q;
flag=1;
}
p=p->next;
}
if(flag==0)
{
p->next=q;
q->next=NULL;
}
return 0;
}
void del(struct Student *p)
{
if(p==NULL)
{
printf("\nlist null!\n");goto end;
}
printf("请输入删除学生姓名:\n");
char str[20];
int flag=0;
scanf("%s",str);
struct Student *q;
while(p!=NULL)
{
if(strcmp(p->next->name,str)==0)
{
flag=1;
q=p->next;
p->next=q->next;
free(q);
break;
}
p=p->next;
}
if(flag==0)
printf("No Find!\n");
end:return(p);
}
int main()
{
FILE*fp;
if((fp=fopen("score system.txt","r+"))==NULL)
{
printf("can't open this file!\n");
exit(0);
}
printf("********************************************************************************\n");
printf("\n\t\t\t\t1插入学生\n\t\t\t\t2删除学生\n");
printf("\n********************************************************************************\n");
struct Student *head,*p,*q;
head=creat();
p=head;
q=head;
while(!feof(fp))
{
p=(struct Student*)malloc(LEN);
fscanf(fp,"%s,%c,%f",p->name,&p->sex,&p->score);
p=p->next;
}
fclose(fp);
int n;
scanf("%d",&n);
switch(n)
{
case 1:insert(head);break;
case 2:del(head);break;
}
p=head;
if((fp=fopen("score system.txt","r+"))==NULL)
{
printf("can't open this file!\n");
exit(0);
}
while(p!=NULL)
{
fprintf(fp,"\n%s %c %.1f",p->name,p->sex,p->score);
p=p->next;
}
fclose(fp);
return 0;
}