c语言程序设计试题
的有关信息介绍如下:#include
#include
#include
struct Telephone
{
char number;
char name;
char call;
char addrass;
char mail;
char telephone;
struct Telephone *next;
}student;
typedef struct Telephone TEL;
TEL *head=NULL;
void showmenu(); /*菜单*/
void Appenditem(); /*添加条目*/
void print(); /*输出条目*/
void Finditem1(); /*查找条目( 按姓名 )*/
void Correct(); /*修改条目*/
void Removeitem(); /*删除信息*/
void Saveandfree(); /*保存到文件*/
void Open(); /*打开文件*/
main()
{
char ch;
Open(); /*打开文件*/
while(1)
{
showmenu(); /*显示菜单*/
scanf(" %c",&ch);
switch(ch)
{
case '1':Appenditem(); /*添加条目*/
break;
case '2':print(); /*输出条目*/
break;
case '3':Finditem1(); /*查找条目1.按姓名*/
break;
case '4': Removeitem(); /*删除信息*/
print(); /*输出删除后的结果*/
break;
case '5': Correct(); /*修改信息*/
break;
case '0':Saveandfree(); /*保存并释放内存*/
exit(0); /*退出*/
break;
default:
printf("选择错误!");
break;
}
}
}
/*菜单*/
void showmenu()
{
printf("\n********************************************************************************\n");
printf("\t\t1.录入信息\t\t\t4.删除信息\n");
printf("\t\t2.输出信息\t\t\t5.修改信息\n");
printf("\t\t3.按姓名查询\t\t\t0.保存并退出!\n");
printf("\n********************************************************************************\n");
printf("请选择:");
}
/*添加条目*/
void Appenditem()
{
TEL *p1=NULL,*p2=NULL;
p1=(TEL *)malloc(sizeof(TEL));
printf("输入编号:");
scanf("%s",p1->number);
printf("输入姓名:");
scanf("%s",p1->name);
printf("输入固定电话:");
scanf("%s",p1->call);
printf("输入家庭地址:");
scanf("%s",p1->addrass);
printf("输入邮箱:");
scanf("%s",p1->mail);
printf("输入手机:");
scanf("%s",p1->telephone);
p1->next=NULL;
if(head==NULL)
{
head=(TEL *)malloc(sizeof(TEL));
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
printf("此信息已添加!");
}
/*输出学生信息*/
void print()
{
TEL *p=NULL;
if(head==NULL)
{
printf("此通讯录中无记录,请输入记录后在使用本功能!\n");
return;
}
printf("\n********************************************************************************\n");
printf("编号\t姓名\t固定电话\t家庭地址\t邮箱\t手机\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->call,p->addrass,p->mail,p->telephone);
}
/*查找信息1.按姓名*/
void Finditem1()
{
TEL *p;
char findname;
printf("请输入要查找的姓名:\n");
scanf("%s",findname);
printf("\n********************************************************************************\n");
printf("编号\t 姓名\t 固定电话\t 家庭地址\t 邮箱\t 手机\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,findname)==0)
printf("%s\t%s\t%s\t%s\t%s\t%s\n",p->number,p->name,p->call,p->addrass,p->mail,p->telephone);
}
}
/*修改信息*/
void Correct()
{
TEL *p1(TEL *head);
{
struct Telephone *p1;
char name;
printf("输入要修改的人名:\n");
scanf("%s",name);
p1=head;
int flag=0;
while(p1!=NULL)
{
if(strcmp(p1->name,name)==0)
{
printf("输入新编号: ");
scanf("%s",p1->number);
printf("输入新姓名: ");
scanf("%s",p1->name);
printf("输入新固定电话: ");
scanf("%s",p1->call);
printf("输入新家庭地址: ");
scanf("%s",p1->addrass);
printf("输入新邮箱: ");
scanf("%s",p1->mail);
printf("输入新手机: ");
scanf("%s",p1->telephone);
flag=1;
}
p1=p1->next;
}
}
printf("修改完成");
}
/*删除信息*/
void Removeitem()
{
char findname;
TEL *p=head,*pr=head;
printf("请输入要删除的姓名:\n");
scanf(" %s",findname);
if (head== NULL)
{
printf("无此结点!\n");
return;
}
while ((strcmp(p->name,findname)!=0 )&& p->next != NULL)
{
pr =p;
p =p->next;
}
if(strcmp(p->name,findname)==0)
{if(p==head)
head=p->next;
else
pr->next=p->next;
free(p);
}else
printf("没有要删除的对象\n");
printf("已删除");
}
/*保存链表信息到文件并释放内存空间*/
void Saveandfree()
{
TEL *p=NULL;
FILE *fp;
char *Book="books.txt";
if(head==NULL)
{
printf("\n记录为空!\n");
return;
}
else
p=head->next;
if((fp=fopen(Book,"wb+"))==NULL)
{
printf("\n打不开文件!\n");
return;
}
while(p!=NULL)
{
fwrite(p,sizeof(TEL),1,fp);
p=p->next;
}
printf("保存完毕!\n");
fclose(fp);
/*释放链表空间*/
for(;head->next!=NULL;)
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
}
/*文件信息输出到链表*/
void Open()
{
FILE *fp;
TEL *p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL)
{
printf("\n\t\t\t\t通讯录 \n");
return;
}
head=(TEL *)malloc(sizeof(TEL));
head->next=NULL;
temp=p2=head;
while(! feof(fp))
{
p1=(TEL *)malloc(sizeof(TEL));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(TEL),1,fp);
}
temp->next=NULL;
fclose(fp);
}