#include "stdio.h"
#include "stdlib.h"
#include <iostream>
#include "string.h"
#include "conio.h" //包含这个getch()方法
#define M 50
using namespace std;
typedef struct
{
char name[20]; /*姓名*/
char sex[10]; /*性别*/
char birth[15]; /*出生年月*/
char units[30]; /*工作单位*/
char studylevel[20]; /*学历*/
char officenumber[15]; /*办公电话*/
char homenumber[15]; /*住宅电话*/
char homeaddress[30]; /*家庭住址*/
}ADDRESS;
/*显示指定的一条记录*/
void mprint(ADDRESS temp)
{
printf("\n****************************************************************************\n");
printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
printf("----------------------------------------------------------------------------\n");
printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",temp.name,temp.sex,temp.birth,temp.units,
temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress);
printf("*********************************end****************************************\n");
}
/*输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/
int enter(ADDRESS t[])
{
int i,n;
system("cls");
printf("********************************************************************************\n");
printf("请确定您要输入的记录数\n"); /*提示信息*/
scanf("%d",&n); /*输入记录数*/
if(n>0)
{
printf("请输入您的通讯录记录\n\n"); /*提示输入记录*/
printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入记录*/
printf("-------------------------------------------------------------------------\n");
}
printf("信息录入成功!");
return n; /*返回记录条数*/
}
if(n<=0) printf("对不起,您输入的记录数不正确\n");exit(0);
}
/*显示记录,参数为记录数组和记录条数*/
void list(ADDRESS t[],int n)
{
int i;
system("cls");
printf("\n*********************************通讯录***********************************\n");
printf(" 总共有%d 条记录 \n",n);
printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%-8s%4s%13s%8s%7s%12s%12s%8s\n",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);
if((i+1)%10==0)
{
printf("请输入任意键继续....\n");
getchar();
}
}
printf("**********************************结束************************************\n");
}
/*按姓名查找函数,参数为记录数组和记录条数以及姓名s */
int namefind(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
{
if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/
return i; /*相等,则返回该记录的下标号,程序提前结结束*/
}
return i; /*返回i值*/
}
/*按办公电话查找函数,参数为记录数组和记录条数以及办公电话s */
int officenumberfind(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
{
if(strcmp(s,t[i].officenumber)==0) /*记录中的办公电话和待比较的办公电话是否相等*/
return i; /*相等,则返回该记录的下标号,程序提前结结束*/
}
return i; /*返回i值*/
}
/*按住宅电话查找函数,参数为记录数组和记录条数以及住宅电话s */
int homenumberfind(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/
{
if(strcmp(s,t[i].homenumber)==0) /*记录中的住宅电话和待比较的住宅电话是否相等*/
return i; /*相等,则返回该记录的下标号,程序提前结结束*/
}
return i; /*返回i值*/
}
/*删除记录函数,参数为记录数组和记录条数*/
int delet(ADDRESS t[],int n)
{
char s[20]; /*要删除记录的姓名*/
int ch=0;
int i,j;
printf("请输入您要删除的记录的姓名\n"); /*提示信息*/
scanf("%s",s);/*输入姓名*/
i=namefind(t,n,s); /*调用namefind函数*/
if(i>n-1) /*如果i>n-1超过了数组的长度*/
printf("对不起,没有找到要删除的记录!\n"); /*显示没找到要删除的记录*/
else
{
mprint(t[i]); /*调用输出函数显示该条记录信息*/
printf("您确认要删除该条记录么?(1.是/0.否)\n"); /*确认是否要删除*/
scanf("%d",&ch); /*输入一个整数或*/
if(ch==1) /*如果确认删除整数*/
{
for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/
{
strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/
strcpy(t[j-1].sex,t[j].sex); /*将后一条记录的性别拷贝到前一条*/
strcpy(t[j-1].birth,t[j].birth); /*将后一条记录的生日拷贝到前一条*/
strcpy(t[j-1].units,t[j].units); /*将后一条记录的工作单位拷贝到前一条*/
strcpy(t[j-1].studylevel,t[j].studylevel); /*将后一条记录的学历拷贝到前一条*/
strcpy(t[j-1].officenumber,t[j].officenumber); /*将后一条记录的办公电话拷贝到前一条*/
strcpy(t[j-1].homenumber,t[j].homenumber); /*将后一条记录的住宅电话拷贝到前一条*/
strcpy(t[j-1].homeaddress,t[j].homeaddress); /*将后一条记录的家庭地址拷贝到前一条*/
}
n--; /*记录数减*/
printf("记录删除成功!\n");
}
}
return n; /*返回记录数*/
}
/*修改记录函数,参数为记录数组和记录条数*/
void rewrite(ADDRESS t[],int n)
{
char s[20]; /*要修改记录的姓名*/
int ch=0;
int i;
printf("请输入您要修改的通讯录的姓名:\n"); /*提示信息*/
scanf("%s",s);/*输入姓名*/
i=namefind(t,n,s); /*调用namefind函数*/
if(i>n-1) /*如果i>n-1超过了数组的长度*/
printf("对不起,没有找到要修改的记录!\n"); /*显示没找到要修改的记录*/
else
{
mprint(t[i]); /*调用输出函数显示该条记录信息*/
printf("您确定要修改这条记录么?(1.是/0.否)\n"); /*确认是否要修改*/
scanf("%d",&ch); /*输入一个整数或*/
if(ch==1) /*如果确认修改整数为*/
{
printf("请输入新的记录\n");
printf("*************************************************************************");
printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
printf("---------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*输入修改信息*/
printf("---------------------------------------------------------------------------\n");
printf("记录修改成功!\n");
}
}
}
/*插入记录函数,参数为结构体数组和记录数*/
int add(ADDRESS t[],int n) /*插入函数,参数为结构体数组和记录数*/
{
ADDRESS temp; /*新插入记录信息*/
int i,j;
char s[20]; /*确定插入在哪个记录之前*/
printf("请输入您要插入的记录\n");
printf("***************************************************************************\n");
printf(" 姓名 性别 出生年月 工作单位 学历 办公电话 住宅电话 家庭住址\n");
printf("---------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s%s%s%s",temp.name,temp.sex,temp.birth,temp.units,
temp.studylevel,temp.officenumber,temp.homenumber,temp.homeaddress); /*输入插入信息*/
printf("---------------------------------------------------------------------------\n");
printf("请输入您要插入位置的姓名\n");
scanf("%s",s); /*输入插入位置的姓名*/
i=namefind(t,n,s); /*调用namefind,确定插入位置*/
for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/
{
strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/
strcpy(t[j+1].sex,t[j].sex); /*当前记录的性别拷贝到后一条*/
strcpy(t[j+1].birth,t[j].birth); /*当前记录的出生年月拷贝到后一条*/
strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/
strcpy(t[j+1].studylevel,t[j].studylevel); /*当前记录的出生年月拷贝到后一条*/
strcpy(t[j+1].officenumber,t[j].officenumber); /*当前记录的办公电话拷贝到后一条*/
strcpy(t[j+1].homenumber,t[j].homenumber); /*当前记录的住宅电话拷贝到后一条*/
strcpy(t[j+1].homeaddress,t[j].homeaddress); /*当前记录的家庭地址拷贝到后一条*/
}
strcpy(t[j].name,temp.name); /*将新插入记录的姓名拷贝到第i个位置*/
strcpy(t[j].sex,temp.sex); /*将新插入记录的性别拷贝到第i个位置*/
strcpy(t[j].birth,temp.birth);/*将新插入记录的出生年月拷贝到第i个位置*/
strcpy(t[j].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/
strcpy(t[j].studylevel,temp.studylevel);/*将新插入记录的学历拷贝到第i个位置*/
strcpy(t[j].officenumber,temp.officenumber);/*将新插入记录的办公电话拷贝到第i个位置*/
strcpy(t[j].homenumber,temp.homenumber);/*将新插入记录的住宅电话拷贝到第i个位置*/
strcpy(t->homeaddress,temp.homeaddress);/*将新插入记录的家庭地址拷贝到第i个位置*/
n++; /*记录数加*/
printf("记录插入成功!\n");
return n; /*返回记录数*/
}
/*保存函数,参数为结构体数组和记录数*/
void save(ADDRESS t[],int n)
{
int i;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/
{
printf("文件不能打开!\n");/*没打开*/
exit(1); /*退出*/
}
fprintf(fp,"%d",n); /*将记录数写入文件*/
fprintf(fp,"\r\n"); /*将换行符号写入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress);/*格式写入记录*/
fprintf(fp,"\r\n"); /*将换行符号写入文件*/
}
fclose(fp);/*关闭文件*/
}
/*读入函数,参数为结构体数组*/
int load(ADDRESS t[])
{
int i,n;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/
{
printf("对不起,不能打开文件!\n"); /*不能打开*/
exit(1); /*退出*/
}
fscanf(fp,"%d",&n); /*读入记录数*/
for(i=0;i<n;i++)
fscanf(fp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*按格式读入记录*/
fclose(fp); /*关闭文件*/
return n; /*返回记录数*/
}
/*按序号显示记录函数*/
void display(ADDRESS t[])
{
int id,n=0;
FILE *fp; /*指向文件的指针*/
if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/
{
printf("对不起,不能打开文件!\n"); /*不能打开文件*/
exit(1); /*退出*/
}
printf("请输入您要查找的序号...\n"); /*显示信息*/
scanf("%d",&id); /*输入序号*/
fscanf(fp,"%d",&n); /*从文件读入记录数*/
if((id>=0)&&(id<n)) /*判断序号是否在记录范围内*/
{
fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/
mprint(t[id]); /*调用输出函数显示该记录*/
printf("\r\n");
}
else
printf("对不起,你要查询的序号不存在!\n通讯录内共有%d 条记录!\n ",id); /*如果序号不合理显示信息*/
fclose(fp); /*关闭文件*/
}
/*按姓名排序函数,参数为结构体数组和记录数*/
void namesort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*临时变量做交换数据用*/
for(i=0;i<n;i++)
{
flag=0; /*设标志判断是否发生过交换*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/
{
flag=1;
strcpy(temp.name,t[j].name); /*交换记录*/
strcpy(temp.sex,t[j].sex);
strcpy(temp.birth,t[j].birth);
strcpy(temp.units,t[j].units);
strcpy(temp.studylevel,t[j].studylevel);
strcpy(temp.officenumber,t[j].officenumber);
strcpy(temp.homenumber,t[j].homenumber);
strcpy(temp.homeaddress,t[j].homeaddress);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].sex,t[j+1].sex);
strcpy(t[j].birth,t[j+1].birth);
strcpy(t[j].units,t[j+1].units);
strcpy(t[j].studylevel,t[j+1].studylevel);
strcpy(t[j].officenumber,t[j+1].officenumber);
strcpy(t[j].homenumber,t[j+1].homenumber);
strcpy(t[j].homeaddress,t[j+1].homeaddress);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].sex,temp.sex);
strcpy(t[j+1].birth,temp.birth);
strcpy(t[j+1].units,temp.units);
strcpy(t[j+1].studylevel,temp.studylevel);
strcpy(t[j+1].officenumber,temp.officenumber);
strcpy(t[j+1].homenumber,temp.homenumber);
strcpy(t[j+1].homeaddress,temp.homeaddress);
}
if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/
}
printf("按姓名排序成功!\n"); /*显示排序成功*/
}
/*按工作单位排序函数,参数为结构体数组和记录数*/
void unitssort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*临时变量做交换数据用*/
for(i=0;i<n;i++)
{
flag=0; /*设标志判断是否发生过交换*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].units,t[j+1].units))>0) /*比较大小*/
{
flag=1;
strcpy(temp.name,t[j].name); /*交换记录*/
strcpy(temp.sex,t[j].sex);
strcpy(temp.birth,t[j].birth);
strcpy(temp.units,t[j].units);
strcpy(temp.studylevel,t[j].studylevel);
strcpy(temp.officenumber,t[j].officenumber);
strcpy(temp.homenumber,t[j].homenumber);
strcpy(temp.homeaddress,t[j].homeaddress);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].sex,t[j+1].sex);
strcpy(t[j].birth,t[j+1].birth);
strcpy(t[j].units,t[j+1].units);
strcpy(t[j].studylevel,t[j+1].studylevel);
strcpy(t[j].officenumber,t[j+1].officenumber);
strcpy(t[j].homenumber,t[j+1].homenumber);
strcpy(t[j].homeaddress,t[j+1].homeaddress);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].sex,temp.sex);
strcpy(t[j+1].birth,temp.birth);
strcpy(t[j+1].units,temp.units);
strcpy(t[j+1].studylevel,temp.studylevel);
strcpy(t[j+1].officenumber,temp.officenumber);
strcpy(t[j+1].homenumber,temp.homenumber);
strcpy(t[j+1].homeaddress,temp.homeaddress);
}
if(flag==0)break; /*如果标志为,说明没有发生过交换循环结束*/
}
printf("按工作单位排序成功!\n"); /*显示排序成功*/
}
/*复制文件*/
void copy()
{
char outfile[20]; /*目标文件名*/
int i,n;
ADDRESS t[100]; /*定义临时变量*/
FILE *sfp,*tfp; /*定义指向文件的指针*/
if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/
{
printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/
exit(1); /*退出*/
}
printf("请输入目标文件名,例如:c:\\f1\\te.txt:\n"); /*提示信息*/
scanf("%s",outfile); /*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/
{
printf("对不起,不能打开您所需要的文件!\n"); /*显示不能打开文件信息*/
exit(1); /*退出*/
}
fscanf(sfp,"%d",&n); /*读出文件记录数*/
fprintf(tfp,"%d",n);/*写入目标文件数*/
fprintf(tfp,"\r\n"); /*写入换行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%s%s%s%s%s%s%s%s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*读入记录*/
fprintf(tfp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].name,t[i].sex,t[i].birth,t[i].units,
t[i].studylevel,t[i].officenumber,t[i].homenumber,t[i].homeaddress); /*写入记录*/
fprintf(tfp,"\r\n"); /*写入换行符*/
}
fclose(sfp); /*关闭源文件*/
fclose(tfp); /*关闭目标文件*/
}
/*按姓名查找记录*/
void namesearch(ADDRESS t[],int n)
{
char s[20]; /*保存待查找姓名字符串*/
int i; /*保存查找到结点的序号*/
printf("请输入您要查找的姓名\n");
scanf("%s",s); /*输入待查找姓名*/
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].name)==0)
{
if(i==n)
printf("对不起,没有找到您所需要的记录!\n");
else
mprint(t[i]); /*找到,调用显示函数显示记录*/
}
}
}
/*按工作单位查找记录*/
void unitssearch(ADDRESS t[],int n)
{
char s[30]; /*保存待查找工作单位字符串*/
int i; /*保存查找到结点的序号*/
printf("请输入您要查找的工作单位\n");
scanf("%s",s); /*输入待查找工作单位*/
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].units)==0)
{
if(i==n)
printf("对不起,没有找到您所需要的记录!\n");
else
mprint(t[i]); /*找到,调用显示函数显示记录*/
}
}
}
/*按办公电话电话查找记录*/
void officenumbersearch(ADDRESS t[],int n)
{
char s[15]; /*保存待查找办公电话字符串*/
int i; /*保存查找到结点的序号*/
printf("请输入您要查找的办公电话\n");
scanf("%s",s); /*输入待查找办公电话*/
i=officenumberfind(t,n,s);/* 调用officenumberfind函数,得到一个整数*/
if(i==n)
printf("对不起,没有找到您需要的记录!\n");
else
mprint(t[i]); /*找到,调用显示函数显示记录*/
}
/*按住宅电话电话查找记录*/
void homenumbersearch(ADDRESS t[],int n)
{
char s[15]; /*保存待查找住宅电话字符串*/
int i; /*保存查找到结点的序号*/
printf("请输入您要查找的住宅电话\n");
scanf("%s",s); /*输入待查找住宅电话*/
i=homenumberfind(t,n,s);/* 调用homenumberfind函数,得到一个整数*/
if(i==n)
printf("对不起,没有找到您需要的记录!\n");
else
mprint(t[i]); /*找到,调用显示函数显示记录*/
}
/*通讯录信息浏览及排序功能*/
void showpaixu(ADDRESS adr[],int length)
{
int choice;
menu1:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 全部显示通讯录信息\n\n");
printf(" 2. 按序号显示通讯录信息\n\n");
printf(" 3. 按姓名排序\n\n");
printf(" 4. 按工作单位排序\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~4)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
list(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*显示全部记录*/
case 2: length=load(adr);
display(adr);
printf(" 请按任意键返回...\n");
getch();break; /*按序号显示记录*/
case 3: length=load(adr);
namesort(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按姓名排序*/
case 4: length=load(adr);
unitssort(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按工作单位排序*/
case 0: return;
}
goto menu1;
}
/*通讯录信息查找功能*/
void chazhao(ADDRESS adr[],int length)
{
int choice;
menu2:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 通过姓名查找\n\n");
printf(" 2. 通过工作单位查找\n\n");
printf(" 3. 通过办公电话查找\n\n");
printf(" 4. 通过家庭电话查找\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~4)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
namesearch(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按姓名查找记录*/
case 2: length=load(adr);
unitssearch(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按工作单位查找记录*/
case 3: length=load(adr);
officenumbersearch(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按办公电话查找记录*/
case 4: length=load(adr);
homenumbersearch(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*按住宅电话查找记录*/
case 0: return;
}
goto menu2;
}
/*通讯录信息变更功能*/
void biangeng(ADDRESS adr[],int length)
{
int choice;
menu3:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 删除记录\n\n");
printf(" 2. 修改记录\n\n");
printf(" 3. 添加记录\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~3)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
length=delet(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*删除记录*/
case 2: length=load(adr);
rewrite(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*修改记录*/
case 3: length=load(adr);
length=add(adr,length);
save(adr,length);
printf(" 请按任意键返回...\n");
getch();
break; /*插入记录*/
case 0: return;
}
goto menu3;
}
/*通讯录及文件操作功能*/
void wenjian(ADDRESS adr[],int length)
{
int choice;
menu4:
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 1. 导入文件到通讯录\n\n");
printf(" 2. 把当前文件复制到新文件上\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~2)\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(adr);
printf("您已经成功的导入文件到通讯录!\n");
printf(" 请按任意键返回...\n");
getch();break;
case 2: copy();
printf("复制成功!\n");
printf(" 请按任意键返回...\n");
getch();break;
case 0: return;
}
goto menu4;
}
/*关于*/
void about()
{
system("color 87");
system("cls");
printf("\n\n\n\n 《通讯录信息管理系统》\n\n\n");
printf(" *****************************************\n\n\n");
printf(" *****************************************\n\n\n");
printf(" 请按任意键返回主菜单...");
getch();
}
/******主函数开始*******/
int _tmain(int argc, _TCHAR* argv[])
{
int choice;
int length; /*保存记录长度*/
ADDRESS adr[100]; /*定义结构体数组*/
menu:
system("color f9");
system("cls");
printf("\n\n\n\n *************************通讯录信息管理系统*************************\n\n");
printf(" 请选择以下通讯录管理功能:\n\n");
printf(" 1. 通讯录信息输入\n\n");
printf(" 2. 通讯录信息浏览及排序\n\n");
printf(" 3. 通讯录信息查询\n\n");
printf(" 4. 通讯录信息更改\n\n");
printf(" 5. 通讯录及文件操作\n\n");
printf(" 6. 关于通讯录信息管理系统\n\n");
printf(" 0. 退出通讯录管理系统\n\n");
printf(" ********************************************************************\n");
printf(" 请选择(0~6)\n ");
scanf("%d",&choice);
switch(choice)
{
case 0: exit(0); /*如返回值为则程序结束*/
case 1: length=enter(adr);
save(adr,length);
printf("\n 请按任意键返回...\n");
getch();break;/*输入记录*/
case 2: showpaixu(adr,length);break;
case 3: chazhao(adr,length);break;
case 4: biangeng(adr,length);break;
case 5: wenjian(adr,length);break;
case 6: about();break;/*关于*/
}
goto menu;
}
////////////////////////////////////////
// 功能:打印表格线
// 参数:
// location 表格线的位置, 0 表头线,1 表中线,2 表尾线
// colCount 表格的列数
// colWidth 表格的列宽
/////////////////////////////////////////
void PrintTableLine(int location, int colCount, int colWidth)
{
//注意:这些是中文符号,所以要用3个字符装(包括/0)
char lineHead[][3] = {"┌", "├", "└"};
char lineMid1[][3] = {"─", "─", "─"};
char lineMid2[][3] = {"┬", "┼", "┴"};
char lineTail[][3] = {"┐", "┤", "┘"};
cout << lineHead[location]; //行首
for (int i = 0; i < colCount; i++)
{
for (int j = 0; j < colWidth/2; j++)
{
cout << lineMid1[location];
}
if (i < colCount - 1) cout << lineMid2[location];
}
cout << lineTail[location] << endl; //行尾
}
/////////////////////////////////////////////////////////
// 功能:获取指定二维数组中的最大显示宽度
// 参数:A 二维数组名,rowCount 行数,colCount 列数
/////////////////////////////////////////////////////////
int GetMaxWidth(int* A, int rowCount, int colCount)
{
int width = 0;
for (int i = 0; i < rowCount; i++)
{
for (int j = 0; j < colCount; j++)
{
int c = 1;
int temp = A[i*rowCount+j];
while (temp)
{
temp /= 10;
c++;
}
width = width < c ? c : width;
}
}
return width;
}
///////////////////////////////////////
// 功能:将二维数组打印成表格样式
// 参数:A 二维数组名,rowCount 行数,colCount 列数
//////////////////////////////////////
void PrintArray(int* A, int rowCount, int colCount)
{
char tablines[] = {"┌┬┐├┼┤└┴┘─│"};
int i, j, colWidth;
//colWidth = GetMaxWidth(A, rowCount, colCount); //获取所有数据中的最大宽度
colWidth=20;
//打印表头线
PrintTableLine(0, colCount, colWidth);
//打印表格内容
for (i = 0; i < rowCount; i++)
{
if (i > 0) PrintTableLine(1, colCount, colWidth); //打印表中线
cout << "│"; //行首
for (j = 0; j < colCount; j++)
{
cout.width(colWidth); //内容按指定宽度输出
cout << A[i*rowCount+j];
if (j < colCount - 1 ) cout << "│"; // 表中竖线
}
cout << "│" << endl; //行尾
}
PrintTableLine(2, colCount, colWidth); //打印表尾
}
//void main()
//{
// int A[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
// PrintArray(&A[0][0], 3, 3);
//}
//int _tmain(int argc, _TCHAR* argv[])
//{
// int A[][3] = {{111, 2, 3}, {43, 5, 6}, {7, 8, 9}};
// PrintArray(&A[0][0],3, 3);
// int c;
// cin>>c;
// return 0;
//}
341

被折叠的 条评论
为什么被折叠?



