C语言 链表
作业: 已知每个学生记录由学号整型xh,姓名xm(字符型 10位),年龄nl(整型),性别xb(整型),班级bj(字符型 8位)五部分组成。要求编写程序实现: 编写函数input()将不多于100个学生记录写入in.txt文件中。 编写函数ReadDat()读取in.txt中学生记录到内存中。 编写函数CreatStu(),按照学生记录的学号升序创建链表。 编写函数DisplayStu(), 输出链表中学生信息。 编写函数InsertStu(), 向链表中插入学号为101的学生记录。 编写函数DeleteStu(), 删除性别为“男”的记录。 编写函数FindStu(), 查找“09信息”班级的学生并显示出来。 编写函数WriteDat()把上述操作后的链表数据输出到文件out.txt中。 最后将所以的函数在main函数中进行调用实现。 我就做到这份上了 错误太多,麻烦帮忙看看下!删除我不会做了!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0
struct student
{
int xh;
char xm[10];
int nl;
char xb[10];
char bj[8];
struct student *next;
}stu[4];
///////////////////////////////////////
void input()
{
FILE *fp;
int i;
fp=fopen("e:\\in.txt","w");
for(i=0;i<2;i++)
{
scanf("%s%s%d%s%s",&stu[i].xh,stu[i].xm,&stu[i].nl,stu[i].xb,stu[i].bj);
fprintf(fp,"%s%s%d%s%s\n",stu[i].xh,stu[i].xm,stu[i].nl,stu[i].xb,stu[i].bj);
}
fclose(fp);
}
////////////////////////////////
void ReadDat()
{
FILE *fp;
int i;
if((fp=fopen("e:\\in.txt","r"))==NULL)
{
printf("cannot open file");
exit(0);
}
for(i=0;i<2;i++)
{
fscanf(fp,"%s%s%d%s%s",&stu[i].xh,stu[i].xm,&stu[i].nl,stu[i].xb,stu[i].bj);
printf("%s%s%d%s%s\n",stu[i].xh,stu[i].xm,&stu[i].nl,stu[i].xb,stu[i].bj);
}
fclose(fp);
}
/////////////////////////////////
void CreatStu(struct student *head)
{
int i,j,t;
for(i=0;i<2;i++)
for(j=0;j<2-i;j++)
if(stu[j].xh>stu[j+1].xh )
{
t=stu[j].xh;
stu[j].xh=stu[j+1].xh;
stu[j+1].xh=t;
}
}
struct student*creat(struct student *head);
{
struct student *p1,*p2;
p1=p2=(struct student*)malloc(sizeof(struct student));
printf("请输入数据\n");
p1->xh=stu[i].xh;
p1->xm=stu[i].xm;
p1->nl=stu[i].nl;
p1->xb=stu[i].xb;
p1->bj=stu[i].bj;
p1->next=NULL;
head=p1;
p2=p1;
while(strlen(p1->str)>0)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(struct student*)malloc(sizeof(struct student));
printf("请输入数据\n");
p1->xh=stu[i].xh;
p1->xm=stu[i].xm;
p1->nl=stu[i].nl;
p1->xb=stu[i].xb;
p1->bj=stu[i].bj;
p1->next=NULL;
}
return head;
}
/////////////////////////////////////////
void DisplayStu(struct student *head)
{
struct student *temp;
head=temp;
while(temp!=NULL)
{
printf("\n%s%s%d%s%s\n",temp->xh,temp->xm,temp->nl,temp->xb,temp->bj);
temp=temp->next;
}
return;
}
//////////////////////////////////////
void InsertStu( struct student *head)
{
struct student *insert(head,n)
int n;
{
struct student *p1,*p2,*p3;
p1=(struct student*)malloc(sizeof(struct student));
p1->xh=n;
p2=head;
if(head=NULL)
{
head=p1;
p1->next=NULL;
}
else
{
while(n>p2->xh&&p2->next!=NULL)
{
p3=p2;
p2=p2->next;
}
if(n<=p2->xh)
if(head==p2)
{
head=p1;
p1->next=p2;
}
else
{
p3->next=p1;
p1->next=p2;
}
else
{
p2->next=p1;
p1->next=NULL;
}
}
return head;
}
/////////////////////////////////////////////////////////////////////
void DeleteStu()
{
struct student *delet(struct student *head,xb);
struct student *head;
char *xb;
{
struct student *temp,*p;
temp=head;
if(head==NULL)
printf("只是空表\n");
else
{
temp=head;
while(strcmp(temp->xb,xb)!=0&&temp->next!=NULL)
{
p=temp;
temp=temp->next;
}
if(strcmp(temp->xb,xb)==0)
{
if(temp==head)
{
head=head->next;
free(temp);
}
else
{
p->next=temp->next;
free(temp);
}
}
}
}
return head;
}
//////////////////////////////////
main()
{
struct student *head;
head=NULL;
struct student *insert();
struct student *delet();
struct student *creat();
void input();
void DeleteStu();
void InsertStu();
void ReadDat()
}