/*菜单:*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 1000
#define HEADER1 "-----------------------------------个人通讯录-----------------------------------\n"
#define HEADER2 "| 姓名 | 单位 | 固定电话 | 移动手机 | 分类 | EMAIL | QQ | 住址 | \n"
#define HEADER3 "|--------|--------|------------|------------|----------|--------|------------|--------| \n"
#define FORMAT "|%8s|%8s|%12d|%12d|%10s|%8s|%12d|%8s|\n"
#define DATA p->name,p->dw,p->gddh,p->yddh,p->fl,p->em,p->qq,p->zz
#define END "--------------------------------------------------------------------------------\n"
typedef struct Student
{
char name[16];
char dw[26];
int gddh;
int yddh;
char fl[12];
char em[60];
int qq;
char zz[40];
} STU;
int stud_num=0; /*stud_num 保存中的记录数*/
void input(STU *);
void disp(STU *);
void app(STU *);
void dele(STU *);
void modify(STU *);
void qur(STU *);
void sort(STU *);
void save(STU *);
void sum(STU *);
void printHeader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void showMenu()
{
system("cls");
printf(" 个人通讯录管理系统 \n");
printf("**************菜单**************\n");
printf(" 1 输入 \n");
printf(" 2 显示 \n");
printf(" 3 添加 \n");
printf(" 4 删除 \n");
printf(" 5 修改 \n");
printf(" 6 查询 \n");
printf(" 7 排序 \n");
printf(" 8 导出 \n");
printf(" 9 统计 \n");
printf(" 0 退出 \n");
printf("********************************\n");
}
void showWrong()
{
printf("\n***** Error:输入错误!***\n请重新输入您的操作选择[0-9]:");
}
void main()
{
STU stud[N];
int sel;
showMenu();
printf("请输入您的操作选择[0-9]:");
do{
scanf("%d",&sel);
if(sel==0)
break;
switch(sel)
{case 1:input(stud);break;
case 2:disp(stud);break;
case 3:app(stud);break;
case 4:dele(stud);break;
case 5:modify(stud);break;
case 6:qur(stud);break;
case 7:sort(stud);break;
case 8:save(stud);break;
case 9:sum(stud);break;
default:showWrong();
}
}while(1);
printf("操作结束,再见!\n");
}
/*输入:*/
void input(STU*s)
{
FILE *fp;
int i,j,count;
char name[16];
STU*pstu;
system("cls");
printf("请输入要录入的联系人数:");
scanf("%d",&count);
for(i=0;i<count;i++)
{
printf("请输入第%d个联系人:\n",i+1);
printf("输入名字:");
scanf("%s",name);
pstu=s+stud_num;
for(j=0;j<16;j++)
{strcpy(pstu->name,name);}
printf("请输入固定电话:");
scanf("%d",&pstu->gddh);
printf("请输入地址:");
scanf("%s",pstu->zz);
printf("请输入单位:");
scanf("%s",pstu->dw);
printf("请输入移动手机:");
scanf("%d",&pstu->yddh);
printf("请输入E-mail:");
scanf("%s",pstu->em);
printf("请输入QQ:");
scanf("%d",&pstu->qq);
printf("请输入分类:");
scanf("%s",pstu->fl);
stud_num++;
}
/*导出:*/
if((fp=fopen("ok.txt","wb+"))==NULL)
{printf("File open error!\n");
exit(1);
}
fwrite(s,sizeof(STU),stud_num,fp);
printf("保存成功!\n");
fclose(fp);
showMenu();
printf("请输入您的操作选择[0-9]:");
}
/*显示:*/
void disp(STU*p)
{
int i,flag=0;
showMenu();
if(stud_num==0)
{
printf("没有导入数据!");
printf("\n请输入您的操作选择[0-9]:");
return;
}
printHeader();
for(i=0;i<stud_num;i++)
{
printf(FORMAT,DATA);
printf(HEADER3);
p++;
flag++;
}
if(flag%10==0)
{printf("-------------------按任意键进入下一页------------------");
getch();
}
printf("请输入您的操作选择[0-9]:");
}
/*查找:*/
void qur(STU*p)
{
int sel,i;
char name[16];
char dw[26];
char zz[40];
printf("1--------------根据姓名查询\n");
printf("2--------------根据地址查询\n");
printf("3--------------根据单位查询\n");
printf("请输入您的操作选择:[1or2or3]?");
scanf("%d",&sel);
getchar();
if(sel!=1&&sel!=2&&sel!=3)
{
showMenu();
printf("请输入您的操作选择[0-9]:");
return;
}
if(sel==1)
{
printf("请输入您要查询的记录的姓名:");
gets(name);
for(i=1;i<=stud_num;i++)
{
if(!strcmp(name,p->name))break;
p++;
}
if(i>stud_num)
{
printf("无此记录!\n");
return;
}
else
{
printHeader();
printf(FORMAT,DATA);
printf(END);
}
}
else if(sel==2)
{
printf("请输入您要查询的记录的地址:");
gets(zz);
for(i=1;i<=stud_num;i++)
{
if(!strcmp(zz,p->zz))break;
p++;
}
if(i>stud_num)
{
printf("无此记录!\n");
return;
}
else
{
printHeader();
printf(FORMAT,DATA);
printf(END);
}
}
else if(sel==3)
{
printf("请输入您要查询的记录的单位:");
gets(dw);
for(i=1;i<=stud_num;i++)
{
if(!strcmp(dw,p->dw))break;
p++;
}
if(i>stud_num)
{
printf("无此记录!\n");
return;
}
else
{
printHeader();
printf(FORMAT,DATA);
printf(END);
}
}
printf("请输入您的操作选择[0-9]:");
}
/*修改:*/
void modify(STU *p)
{
int i;
int qq;
STU *s=p;
printf("请输入您要修改的qq:");
scanf("%d",&qq);
for(i=1;i<=stud_num;i++)
{
if(qq==p->qq)break;
p++;
}
if(i>stud_num){
printf("无此记录!\n");}
else
{
printf("请输入您要修改的记录的qq:");
scanf("%d",&qq);
if(qq!=0)
{
p->qq=qq;
printf("请输入你要修改的姓名:");
scanf("%s",p->name);
printf("请输入您要修改的单位:");
scanf("%s",p->dw);
printf("请输入您要修改的固定电话:");
scanf("%d",&p->gddh);
printf("请输入您要修改的移动电话:");
scanf("%d",&p->yddh);
printf("请输入您要修改的分类:");
scanf("%s",p->fl);
printf("请输入您要修改的电子邮箱:");
scanf("%s",p->em);
printf("请输入您要修改的住址:");
scanf("%s",p->zz);
}
}disp(s);
}
/*增加:*/
void app(STU *s)
{
int n=1,i;
long yddh;
STU *pstu;
do{
system("cls");
printf("输入手机号:");
scanf("%d",&yddh);
for(i=0;i<stud_num;i++)
while(s[i].yddh==yddh)
{printf("手机号已存在,请重新输入!\n");
printf("输入手机号:");
scanf("%d",&yddh);
}
pstu=s+stud_num;
pstu->yddh=yddh;
printf("请输入姓名:");
scanf("%s",pstu->name);
printf("请输入固定电话:");
scanf("%d",&pstu->gddh);
printf("请输入QQ号码:");
scanf("%d",&pstu->qq);
printf("请输入Email:");
scanf("%s",pstu->em);
printf("请输入单位:");
scanf("%s",pstu->dw);
printf("请输入分类:");
scanf("%s",pstu->fl);
printf("请输入住址:");
scanf("%s",pstu->zz);
stud_num++;
printf("输入0退出,输入其他数字继续!");
scanf("%d",&n);
if(n==0)
{
showMenu();
printf("请输入你的操作选项[0-9]:");
break;}
}while(1);
}
/*删除:*/
void dele(STU *p)
{ int i,j,qq;
STU *s=p;
showMenu();
printf("请输入要删除的qq:\n");
scanf("%d",&qq);
for(i=1;i<=stud_num;i++)
{if(qq==p->qq)break;
p++;}
if(i>stud_num){
printf("无此记录!\n");
return;
}else if(i==stud_num){
stud_num--;
printf("删除成功!\n");
}
else{
for(j=i-1;j<stud_num-1;j++)
s[j]=s[j+1];
stud_num--;
printf("删除成功!\n");}
printf("请输入您的操作选择[0-9]:");
}
/*排序:*/
void sort(STU *p)
{
int i,sel;
STU temp,*s;
s=p;
printf("1--------------根据姓名首字母查询\n");
printf("1--------------根据姓名首字母查询\n");
printf("2--------------根据地址首字母查询\n");
printf("请输入您的操作选择:[1or2or3]?");
scanf("%d",&sel);
getchar();
if(sel==1){
for(i=0;i<stud_num-1;i++)
if((p+i)->name[0]>(p+1+i)->name[0])
{temp=*(p+i);
*(p+i)=*(p+1+i);
*(p+1+i)=temp;
}
}
else if(sel==2){
for(i=0;i<stud_num-1;i++)
if((p+i)->zz[0]>(p+1+i)->zz[0])
{temp=*(p+i);
*(p+i)=*(p+1+i);
*(p+1+i)=temp;
}
}
else if(sel==3){
for(i=0;i<stud_num-1;i++)
if((p+i)->dw[0]>(p+1+i)->dw[0])
{temp=*(p+i);
*(p+i)=*(p+1+i);
*(p+1+i)=temp;
}
}
disp(s);
}
/*统计:*/
void sum(STU *p)
{ int i=0,j=0,x=0,z=0,k=0;
for(i=1;i<=stud_num;i++)
{if(p->fl[0]=='t')
j++;
else if(p->fl[0]=='j')
x++;
else if(p->fl[0]=='p')
z++;
else k++;}
printf("同事人数为%d 家人人数为%d 朋友人数为%d 同学人数为%d\n",j,x,z,k);
printf("请输入您的操作[0-9]:");
}
/*导入*/
void save(STU *p){
FILE *fp;
if((fp=fopen("right.txt","wb+"))==NULL)
{printf("File open error!\n");
exit(1);
}
fwrite(p,sizeof(STU),stud_num,fp);
printf("导入成功!\n");
fclose(fp);
showMenu();
printf("请输入您的操作选择[0-9]:");
}