系统的编译器code::blocks,还有部分问题有待解决。
代码块:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
#define OK 1 //原为1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
typedef int Status;
typedef struct Information
{
char name[20];
char number[10];
char age[3];
char gender[5];
char addrass[20];
char zip[8];
char telephone[12];
struct Information *next;
}
Elemtype;
Elemtype *head=NULL;
Status password();
Status showmenu();
Status Appenditem();
Status print();
Status Finditem1();
Status Finditem2();
Status Removeitem1();
Status Removeitem2();
Status Saveandfree();
Status Open();
Status Modify();
int main()
{
password();
system("cls");
Open();
while(1)
{
char ch;
showmenu();
scanf("%c",&ch);
switch(ch)
{
case'1':Appenditem();
break;
case'2':print();
break;
case'3':Finditem1();
break;
case'4':Finditem2();
break;
case'5':Removeitem1();
print();
break;
case'6':Removeitem2();
print();
break;
case'7':Modify();
break;
case'8':Saveandfree();
exit(0);
break;
default:
printf("选择错误!");
}
}
return OK;
}
Status password()
{
int w,g=0;
char str1[20]={"123456"};
char str2[20];
do{
cout<<"--------欢迎进入通讯录管理系统-------"<<endl;
cout<<"**************************************"<<endl;
cout<<"☆☆☆☆☆☆请输入密码☆☆☆☆☆☆☆"<<endl;
cout<<"**************************************"<<endl;
gets(str2);
if(!strcmp(str1,str2))
{
cout<<"输入密码正确!"<<endl;w=1;
}
else{
w=0;cout<<"输入密码错误,请重新输入!"<<endl;
}
}while(w==0);
return OK;
}
Status showmenu()
{
printf("\n**********通讯录系统*********\n");
printf("\t1.添加通讯录内容\n");
printf("\t2.通讯录查看列表\n");
printf("\t3.按姓名查询\n");
printf("\t4.按编号查询\n");
printf("\t5.按姓名删除通讯录\n");
printf("\t6.按编号删除通讯录\n");
printf("\t7.按编号修改信息\n");
printf("\t8.保存并退出!\n");
printf("********************************\n");
printf("\t 请选择:");
return OK;
}
Status Modify()
{
Elemtype *p;
char findnumber[20];
printf("请输入要修改的信息的编号:\n");
scanf("%s",findnumber);
for(p=head->next;p!=NULL;p=p->next);
{
if(strcmp(p->number,findnumber)==0)
{
printf("重新输入姓名:\n");
scanf("%s",p->name);
printf("重新输入性别:\n");
scanf("%s",p->gender);
printf("重新输入年龄\n");
scanf("%s",p->age);
printf("重新输入地址:\n");
scanf("%s",p->addrass);
printf("重新输入邮编:\n");
scanf("%s",p->zip);
printf("重新输入电话:\n");
scanf("%s",p->telephone);
printf("修改信息成功!\n");
}
}
return OK;
}
Status Appenditem()
{
Elemtype *p1=NULL, *p2=NULL;
p1=(Elemtype *)malloc(sizeof(Elemtype));
printf("输入姓名:\n");
scanf("%s",p1->name);
printf("输入编号:\n");
scanf("%s",p1->number);
printf("输入性别:\n");
scanf("%s",p1->gender);
printf("输入年龄:\n");
scanf("%s",p1->age);
printf("输入地址:\n");
scanf("%s",p1->addrass);
printf("输入邮编:\n");
scanf("%s",p1->zip);
printf("输入电话:\n");
scanf("%s",p1->telephone);
p1->next=NULL;
if(head==NULL)
{
head=(Elemtype *)malloc(sizeof(Elemtype));
head->next=p1;
}
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);
p2->next=p1;
}
printf("此信息已添加!");
return OK;
}
Status print()
{
Elemtype *p=NULL;
if(head->next!=NULL)
{
printf("******通讯录系统********");
printf("姓名\t编号\t\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\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
}
else
{
printf("此通讯录中无记录,请输入记录后再使用本功能!\n");
return ERROR;
}
return OK;
}
Status Finditem1()
{
Elemtype*p;
char findname[20];
printf("请输入要查询的姓名:\n");
scanf("%s",findname);
printf("***********通讯录系统**********\n");
printf("姓名\t 编号\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\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
}
return OK;
}
Status Finditem2()
{
Elemtype*p;
char findnumber[20];
printf("请输入要查找的编号\n");
scanf("%s",findnumber);
printf("***********通讯录系统***********\n");
printf("姓名\t学号\t性别\t年龄\t地址\t邮编\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->number,findnumber)==0)
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
}
return OK;
}
Status Removeitem1()
{
char findname[20];
Elemtype*p=head->next,*pr=head->next;
printf("请输入要删除的姓名:\n");
scanf("%s",&findname);
if(head->next==NULL)
{
printf("无此节点!\n");
return ERROR;
}
while((strcmp(p->name,findname)!=0)&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(findname,p->name)==0)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
if(p==head->next)
head->next=p->next;
else
pr->next=p->next;
free(p);
}
printf("此信息已删除!\n");
return OK;
}
Status Removeitem2()
{
char findnumber[20];
Elemtype*p=head->next,*pr=head->next;
printf("请输入要删除的编号:\n");
scanf("%s",findnumber);
if(head==NULL)
{
printf("无此节点!\n");
return ERROR;
}
while((strcmp(p->number,findnumber)!=0)&&p->next!=NULL)
{
pr=p;
p=p->next;
}
if(strcmp(findnumber,p->number)==0)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->name,p->number,p->gender,p->age,p->addrass,p->zip,p->telephone);
if(p==head->next)
head->next=p->next;
else
pr->next=p->next;
free(p);
}
printf("此信息已删除!");
return OK;
}
Status Saveandfree()
{
Elemtype*p=NULL;
FILE*fp;
char*Book="books.txt";
if(head==NULL){
printf("\n记录为空!\n");
return ERROR;
}
else p=head->next;
if((fp=fopen(Book,"wb+"))==NULL)
{
printf("\n打不开文件!\n");
return ERROR;
}
while(p!=NULL)
{
fwrite(p,sizeof(Elemtype),1,fp);
p=p->next;
}
printf("保存完毕!");
fclose(fp);
for(;head->next!=NULL;)
{
p=head->next;
head->next=head->next->next;
free(p);
}
free(head);
return OK;
}
Status Open()
{
FILE*fp;
Elemtype*p1=NULL,*p2=NULL,*temp=NULL;
if((fp=fopen("books.txt","rb+"))==NULL)
{
printf("新的通讯系统");
return OK;
}
head=(Elemtype*)malloc(sizeof(Elemtype));
head->next=NULL;
temp=p2=head;
while(!feof(fp))
{
p1=(Elemtype*)malloc(sizeof(Elemtype));
temp=p2;
p2->next=p1;
p2=p1;
fread(p1,sizeof(Elemtype),1,fp);
}
temp->next=NULL;
fclose(fp);
return OK;
}
常规的交互界面样式: