学生系统求解释
include<stdio.h>#include<stdlib.h>
#include<string.h>
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
typedef struct person
{ char name[10];
char addr[30];
char offph[15];
char mbph[15];
char hmph[15];
struct person *next;
}listnode,*listlink;
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
struct add_person
{ char name[10];
char addr[30];
char offph[15];
char mbph[15];
char hmph[15];
};
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
listlink readfp()
{
FILE *fp;
listlink head=NULL,end=NULL,s;
struct add_person persons;
fp=fopen("people.txt","rb");
if(fp==NULL)
{
printf("不能打开此文件!");
return head;
}
fread(&persons,sizeof(struct add_person),1,fp);
while(!feof(fp))
{
s=(listnode*)malloc(sizeof(listnode));
strcpy(s->name,persons.name);
strcpy(s->addr,persons.addr);
strcpy(s->offph,persons.offph);
strcpy(s->mbph,persons.mbph);
strcpy(s->hmph,persons.hmph);
s->next=NULL;
if(head==NULL)
head=end=NULL;
else
{
end->next=s;
end=s;
}
fread(&persons,sizeof(struct add_person),1,fp);
}
return head;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void save(listlink head)
{
FILE *fp;
listlink p;
static struct add_person persons;
fp=fopen("people.txt","wb");
for(p=head;p!=NULL;p=p->next)
{
strcpy(persons.name,p->name);
strcpy(persons.addr,p->addr);
strcpy(persons.offph,p->offph);
strcpy(persons.mbph,p->mbph);
strcpy(persons.hmph,p->hmph);
fwrite(&persons,sizeof(struct add_person),1,fp);
}
fclose(fp);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
listlink create()
{
listlink s;
listlink head=NULL,end=NULL;
while(1)
{
s=(listlink)malloc(sizeof(listnode));
printf("\n\n\t创建文件!\n");
scanf("%s",s->name);
if(strcmp(s->name,"#")==0)
break;
printf("\n\naddr:\t offph:\t mbph:\t hmph:\t");
scanf("%s%s%s%s",s->addr,s->offph,s->mbph,s->hmph);
s->next=NULL;
if(head==NULL)
head=end=NULL;
else
{
end->next=s;
end=s;
}
}
return head;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void show(listlink head)
{
listlink p;
p=head;
while(p!=NULL)
{
printf("%s\t",p->name);
printf("%s\t",p->addr);
printf("%s\t",p->offph);
printf("%s\t",p->mbph);
printf("%s\t",p->hmph);
p=p->next;
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void Delete(listlink head)
{
listlink p1,p2;
char name[10];
p1=p2=head;
if(p1==NULL)
{
printf("no record!\n");
return;
}
printf("\n\n\tDlelte--------please your name:");
scanf("%s",name);
while(strcmp(p1->name,name)!=0&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(strcmp(p1->name,name)==0)
{
if(p1==head)
p1=p1->next ;
else
p2->next=p1->next ;
free(p1);
}
else
printf("没有相应的记录!!!");
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void find(listlink head)
{
listlink p;
char name[10];
while(1)
{
p=head;
printf("\n\n\t------please your name!");
scanf("%s",name);
if(strcmp(name,"#")==0)
return;
if(strcmp(name,p->name)!=0&&p->next!=NULL)
p=p->next;
if(strcmp(name,p->name)!=0)
printf("没有相应的记录!!!");
else
{
printf("\tname:%s",p->name);
printf("\taddr:%s",p->addr);
printf("\toffph:%s",p->offph);
printf("\tmbph:%s",p->mbph);
printf("\thmph:%s",p->hmph);
}
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void input(listlink head)
{
listlink s,end;
s=(listlink)malloc(sizeof(listnode));
do
{
printf("\n\n\tplaese your name:");
scanf("%s",s->name);
if(strcmp(s->name,"#")==0)
return;
if(head==NULL)
break;
while(strcmp(s->name,end->name)!=0&&end->next!=NULL)
end=end->next;
}while(strcmp(s->name,end->name)==0);
printf("\n\n\t输入你的信息;\taddr:\toffph:\tmbph:\thmph:\n");
scanf("%s%s%s%s",s->addr,s->offph,s->mbph,s->hmph);
s->next=NULL;
end->next=s;
end=s;
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void alter(listlink head)
{
listlink p;
p=head;
char name[10],addr[30],offph[15],mbph[15],hmph[15];
printf("\n\n\tplease your name:");
scanf("%s",name);
if(strcmp(name,"#")==0)
return;
while(strcmp(p->name,name)!=0&&p->next!=NULL)
p=p->next;
if(strcmp(p->name,name)!=0)
{
printf("\n\n没有相应的记录!");
return;
}
else
{
printf("\n\naddr:\t offph:\t mbph:\t hmph:\t");
printf("input your message:");
scanf("%s%s%s%s",addr,offph,mbph,hmph);
strcpy(p->name,name);
strcpy(p->addr,addr);
strcpy(p->offph,offph);
strcpy(p->mbph,mbph);
strcpy(p->hmph,hmph);
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void main()
{
listlink head=NULL;
int sel;
head=readfp();
if(head==NULL)
head=create();
do
{
printf("\n欢迎您用此管理系统!");
printf("\n1.显示信息! 2.删除信息!");
printf("\n3.查找信息! 4.追加信息!");
printf("\n5.修改信息! ");
printf("\n0.保存信息及退出系统!");
printf("\n请输入您要操作的对应号码(0-5):");
scanf("%d",&sel);
switch(sel)
{
case 1:show(head);
printf("press any to return");
getchar();
break;
case 2:Delete(head);
break;
case 3:find(head);
printf("press any to return");
getchar();
break;
case 4:input(head);
break;
case 5:alter(head);
break;
case 0:save(head);
return;
}
}while(1);
}