#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct phone
{
char num[30];
char name[50];
char sex[10];
char year[50];
char tel[30];
struct phone *next;
}phone;
phone *head;
void Initiate();
void Menu();
phone *Create();
void Find();
void Alter();
void Delete();
void List();
phone *write_in();
phone *write_out();
phone *write_in(phone *head)
{
FILE *fp;
phone *p;
if((fp=fopen("学生信息.txt","w"))==NULL)
{
printf("无法打开文件!!!\n");
exit(0);
}
p=head->next;
if(head!=NULL)
while(p!=NULL)
{
fprintf(fp,"%s %s %s %s %s",p->num,p->name,p->sex,p->year,p->tel);
fprintf(fp,"\r\n");
p=p->next;
}
fclose(fp);
return head;
}
phone *write_out()
{
FILE *fp;
phone *p,*pre,*tail;
head=(phone *)malloc(sizeof(phone));
strcpy(head->num,"\0");
strcpy(head->name,"\0");
strcpy(head->sex,"\0");
strcpy(head->year,"\0");
strcpy(head->tel,"\0");
tail = pre=head;
fp=fopen("学生信息.txt","r");
if(fp==NULL)
{
printf("文件打开失败!!!");
exit(0);
}
p=(phone *)malloc(sizeof(phone));
p->next=NULL;
head->next=NULL;
while(fscanf(fp,"%s %s %s %s %s",p->num,p->name,p->sex,p->year,p->tel)!=EOF)
{
pre = tail;
tail->next=p;
tail=p;
p=(phone *)malloc(sizeof(phone));
p->next=NULL;
}
fclose(fp);
return head;
}
//初始化
void Initiate()
{
if((head=(phone *)malloc(sizeof(phone)))==NULL)
exit(1);
head->next=NULL;
}
//显示菜单
void Menu()
{
printf("**************欢迎使用学生信息管理系统**************");
printf("\n");
printf("\n");
printf(" 1.创建信息.\n");
printf(" 2.查询信息.\n");
printf(" 3.修改信息.\n");
printf(" 4.删除信息!\n");
printf(" 5.显示所有信息.\n");
printf(" 0.退出系统.\n");
}
//创建
phone *Create()
{
phone *p1,*p2;
int m,i;
printf("请输入创建个数:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1=(phone *)malloc(sizeof(phone));
printf("请输入第%d条信息!\n",i);
printf("请输入序号:\n");
scanf("%s",p1->num);
printf("姓名:\n");
scanf("%s",p1->name);
printf("性别:\n");
scanf("%s",p1->sex);
printf("出生年月:\n");
scanf("%s",p1->year);
printf("电话:\n");
scanf("%s",p1->tel);
p1->next=NULL;
if(head->next==NULL)
head->next = p1;
else
{
for(p2=head;p2->next!=NULL;p2=p2->next); //找到结点尾
p2->next = p1;
}
}
printf("信息已添加!\n");
head=write_in(head);
return head;
//保存到链表
}
//查找信息
void Find()
{
phone *p;
char name[50];
if(head->next==NULL)
{
printf("此系统为空!\n");
return;
}
printf("请输入要查找的姓名:\n");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("序号\t姓名\t性别\t出生年月电话\n");
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->tel);
}
else if(p->next==NULL)
printf("无此信息!\n");
}
head=write_in(head);
}
//修改信息
void Alter()
{
head=write_out();
char name[50]; //先查找 后删除
phone *p=head->next;
if (p == NULL)
{
printf("此系统为空!\n");
return;
}
printf("请输入要修改的姓名:\n");
scanf("%s",name);
while(p!=NULL)
{
if(strcmp(p->name,name)==0)
{
printf("请输入需要修改的信息");
printf("姓名:\n");
scanf("%s",p->name);
printf("性别:\n");
scanf("%s",p->sex);
printf("出生年月:\n");
scanf("%s",p->year);
printf("电话:\n");
scanf("%s",p->tel);
break;
}
}
printf("修改成功");
head=write_in(head);
}
//删除信息
void Delete()
{
head=write_out();
char name[50]; //先查找 后删除
phone *p = head->next, *p1 =head->next,*p2;
if (head->next == NULL)
{
printf("此通讯录为空!\n");
return;
}
printf("请输入要删除的姓名:\n");
scanf(" %s",name);
while ((strcmp(p->name,name)!=0 )&& p->next != NULL)
{
p1=p;
p =p->next;
}
if (strcmp(name, p->name)==0) //输出删除信息
{
if (p == head->next&&p->next!=NULL)
head->next = p->next;
else if(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("信息已删除,先此通讯录为空!!\n");
return;
}
else
p1->next = p->next;
}
else
{
printf("此信息不存在!!!\n");
return;
}
printf("此信息已删除!");
printf("序号\t姓名\t性别\t出生年月t电话\n");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->tel);
head=write_in(head);
}
//显示所有记录
void List()
{
head=write_out();
phone *p;
if(head->next==NULL)
{
printf("此系统中无记录!\n");
return;
}
printf("序号\t姓名\t性别\t出生年月\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\t%s\t%s\n",p->num,p->name,p->sex,p->year,p->tel);
}
int main()
{
int choice;
char yes_no;
Initiate();
do
{
Menu();
printf("请选择0-5的数字\n");
scanf("%d",&choice);
printf("\n");
switch(choice)
{
case 1:Create();
break;
case 2:Find();
break;
case 3:Alter();
break;
case 4:Delete();
break;
case 5:List();
break;
case 0:
printf("************感谢您的使用************\n");
exit(0);
break;
default:
printf("输入有误!请重新输入\n");
break;
}
printf("是否继续? Y or N \n");
do
{
scanf("%c",&yes_no);
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}