题目:通讯录管理程序设计 25
:本题目适合于个人通讯录的管理。要求通讯录中包含编号、姓名、单位、通信地址、邮箱和联系电话等基本信息,程序具有数据录入、删除、修改、浏览、查找、排序以及数据保存等功能。...
:本题目适合于个人通讯录的管理。要求通讯录中包含编号、姓名、单位、通信地址、邮箱和联系电话等基本信息,程序具有数据录入、删除、修改、浏览、查找、排序以及数据保存等功能。
展开
展开全部
在visual c++6.0上运行
#include<stdlib.h>
#include<string.h> /*使用字符串函数*/
#include<conio.h> /*使用通过控制台进行数据输入和数据输出的函数*/
#include<stdio.h>
#include<dos.h> /*使用DOS函数*/
int i; /*定义一个全局变量i*/
struct addr /*定义通讯地址结构体*/
{ char post_num[10]; /*邮编*/
char addr[60]; /*家庭地址*/
};
struct birth /*定义出生年月结构体*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct record1 /*定义电子通讯录结构体*/
{ int number; /*序号*/
char name[20]; /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*联系电话*/
}records[50];
FILE *fp; /*定义指向file类型结构体的指针变量*/
void Data_Load() /*定义载入数据函数*/
{ int j;
long k;
fp=fopen("record.txt","r+t"); /*打开文件record.txt,进行读写*/
if(fp!=NULL) /*如果文件不为空*/
{ for(i=1;i<50;i++)
{ j=fgetc(fp); /*从"records.txt"文件读入整型数字*/
if(j==EOF) /*判断是否到了文件尾*/
return; /*如果到了结尾,返回*/
k=i-1;
fseek(fp,k*sizeof(struct record1),SEEK_SET); /*将位置指针移到record1结构体所含字节
的第k倍个字节处*/
fread(&records[i],sizeof(struct record1),1,fp); /*读取一条记录*/
}
}
else
{ fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
i=1;
}
}
void Data_Show(int j) /*定义显示数据函数*/
{
printf("\n\n\tNo:%3d\n",records[j].number); /*序号*/
printf("\n\tname:%2s\n",records[j].name); /*姓名*/
printf("\n\tbirthday (y/m/d):%4d%2d%2d", records[j].birth.year, records[j].birth.month,
records[j].birth.day); /*打印第j个成员的出生年月日*/
printf("\n\tpost code:%-10s",records[j].addr.post_num); /*邮编*/
printf("\n\taddress:%-40s",records[j].addr.addr); /*家庭地址*/
printf("\n\tphone%-13s",records[j].telephone); /*联系电话*/
}
void Data_Input(int j) /*定义添加数据函数*/
{
fflush(stdin); /*清空输入缓冲区*/
records[j].number=j;
printf("\n\n\n\tinputNo %d ",j);
printf("\n\tname:"); /*输入姓名*/
scanf("%s",records[j].name);
fflush(stdin); /*清空输入缓冲区*/
printf("\tsex(m/f):"); /*输入性别*/
scanf("%c",&records[j].sex);
printf("\t---birthday---"); /*输入出生年月*/
printf("\n\tyear:");
scanf("%d",&records[j].birth.year);
printf("\tmonth:");
scanf("%d",&records[j].birth.month);
printf("\tday:");
scanf("%d",&records[j].birth.day);
printf("\tpost code:"); /*输入邮编*/
scanf("%s",records[j].addr.post_num);
printf("\taddress:"); /*输入家庭地址*/
scanf("%s",records[j].addr.addr);
printf("\tphone:"); /*输入联系电话*/
scanf("%s",records[j].telephone);
}
void Data_Save() /*定义保存函数*/
{
int j;
fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
for(j=1;j<=i;j++)
{ fwrite(&records[j],sizeof(struct record1),1,fp); /*将结构体变量records的确定个数字节输
入到record.txt文件中,个数为结构体friend1所含字节数*/
}
}
void main() /*主函数*/
{
int j,k;
char ch;
char search_name[40]; /*定义字符串变量*/
Data_Load(); /*声明载入数据函数*/
i--;
do
{ printf("********************************* MENU ***************************************\n");
printf("------------------------! WELLCOME TO THE SYSTEM !------------------------------");
printf("\n*\tSelect Function: *");
printf("*\t1.Add New *");
printf("*\t2.View the data *");
printf("*\t3.Delete *");
printf("*\t4.Search *");
printf("*\t5.Insert *");
printf("*\t6.Save and quit *");
printf("*\t7.Quit *");
printf("\n******************************** MENU ****************************************\n");
printf("\tPlease choose the option you need:");
ch=getche(); /*输入字符*/
switch(ch)
{
case '1':
{ int p;
printf("\n\tPlease input the number of people you want to add:");
scanf("%d",&p);/*增加记录*/
printf("\tPlease press ENTER again");
while(getch()!=0x1b&&i<p)
{ i++;
Data_Input(i);
printf("Please press Enter again to continue\n");
}
if(i==p)printf("\n\tThe data is full\n");
} /*记录完后显示通讯录已满*/
break;
case '2': j=1; /*打印所有记录*/
while(getch()!=0x1b&&j<=i) Data_Show(j++); /*声明打印数据函数*/
if(j>i) printf("\n\tThe system is end\n"); /*显示记录末尾*/
break;
case '3': /*删除通讯录中的记录*/
if(i<1)
{ printf("\n\tno record\n"); /*显示无记录*/
break;
}
printf("\n\tplease input the number you want to delect:");
scanf("%d",&k);
printf("\tsucceed!\n");
for(j=k;j<i;j++) /*将删除位置后的元素顺序前移,即后一数据复制到前一位置,循环操作*/
{ strcpy(records[j].name,records[j+1].name);
records[j].sex=records[j+1].sex;
records[j].birth.year=records[j+1].birth.year;
records[j].birth.month=records[j+1].birth.month;
records[j].birth.day=records[j+1].birth.day;
strcpy(records[j].addr.post_num,records[j+1].addr.post_num);
strcpy(records[j].addr.addr,records[j+1].addr.addr);
strcpy(records[j].telephone,records[j+1].telephone);
}
i--; /*元素总数减1*/
break;
case '4': /*通讯录搜索功能*/
printf("\n\tPlease input the name:"); /*输入名字*/
scanf("%s", search_name); /*获得名字到指针型字符串变量*/
for(j=1;j<=i;j++)
{
if(strcmp(search_name,records[j].name)==0) /*比较字符串,即查看是否与记录中名字
相同*/
{ Data_Show(j);
printf("\n"); /*搜索成功,打印记录结束循环*/
break;
}
}
if(j>i) /*搜索失败*/
printf("\n\tNo Record "); /*显示无此记录*/
break;
case '5':
printf("\n\tInsert No:"); /*录入插入位置*/
scanf("%d",&k);
for(j=k+1;j<i;j++) /*将插入位置后的元素顺序后移,即将其复制到后一位置,循环操作*/
{ strcpy(records[j].name,records[j-1].name);
records[j].sex=records[j-1].sex;
records[j].birth.year=records[j-1].birth.year;
records[j].birth.month=records[j-1].birth.month;
records[j].birth.day=records[j-1].birth.day;
strcpy(records[j].addr.post_num,records[j-1].addr.post_num);
strcpy(records[j].addr.addr,records[j-1].addr.addr);
strcpy(records[j].telephone,records[j-1].telephone);
}
Data_Input(k); /*声明增加数据函数*/
i++;/*将记录数目加一*/
break;
case '6': Data_Save();
printf("\n"); /*声明保存函数*/
exit(0); break; /*保存后退出*/
case '7': printf("\n\tsave or not?:(y/n)");
ch=getch(); /*获得输入字符*/
if(ch=='y') Data_Save();
fclose(fp); /*关闭record.txt文件*/
exit(0); /*退出程序*/
default: printf("Please choose1-4\n"); /*输入的如果不是数字1-4,让其重新输入*/
}
}
while(1); /*每次都从第一个功能开始,循环操作*/
}
#include<stdlib.h>
#include<string.h> /*使用字符串函数*/
#include<conio.h> /*使用通过控制台进行数据输入和数据输出的函数*/
#include<stdio.h>
#include<dos.h> /*使用DOS函数*/
int i; /*定义一个全局变量i*/
struct addr /*定义通讯地址结构体*/
{ char post_num[10]; /*邮编*/
char addr[60]; /*家庭地址*/
};
struct birth /*定义出生年月结构体*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct record1 /*定义电子通讯录结构体*/
{ int number; /*序号*/
char name[20]; /*姓名*/
char sex; /*性别*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*联系电话*/
}records[50];
FILE *fp; /*定义指向file类型结构体的指针变量*/
void Data_Load() /*定义载入数据函数*/
{ int j;
long k;
fp=fopen("record.txt","r+t"); /*打开文件record.txt,进行读写*/
if(fp!=NULL) /*如果文件不为空*/
{ for(i=1;i<50;i++)
{ j=fgetc(fp); /*从"records.txt"文件读入整型数字*/
if(j==EOF) /*判断是否到了文件尾*/
return; /*如果到了结尾,返回*/
k=i-1;
fseek(fp,k*sizeof(struct record1),SEEK_SET); /*将位置指针移到record1结构体所含字节
的第k倍个字节处*/
fread(&records[i],sizeof(struct record1),1,fp); /*读取一条记录*/
}
}
else
{ fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
i=1;
}
}
void Data_Show(int j) /*定义显示数据函数*/
{
printf("\n\n\tNo:%3d\n",records[j].number); /*序号*/
printf("\n\tname:%2s\n",records[j].name); /*姓名*/
printf("\n\tbirthday (y/m/d):%4d%2d%2d", records[j].birth.year, records[j].birth.month,
records[j].birth.day); /*打印第j个成员的出生年月日*/
printf("\n\tpost code:%-10s",records[j].addr.post_num); /*邮编*/
printf("\n\taddress:%-40s",records[j].addr.addr); /*家庭地址*/
printf("\n\tphone%-13s",records[j].telephone); /*联系电话*/
}
void Data_Input(int j) /*定义添加数据函数*/
{
fflush(stdin); /*清空输入缓冲区*/
records[j].number=j;
printf("\n\n\n\tinputNo %d ",j);
printf("\n\tname:"); /*输入姓名*/
scanf("%s",records[j].name);
fflush(stdin); /*清空输入缓冲区*/
printf("\tsex(m/f):"); /*输入性别*/
scanf("%c",&records[j].sex);
printf("\t---birthday---"); /*输入出生年月*/
printf("\n\tyear:");
scanf("%d",&records[j].birth.year);
printf("\tmonth:");
scanf("%d",&records[j].birth.month);
printf("\tday:");
scanf("%d",&records[j].birth.day);
printf("\tpost code:"); /*输入邮编*/
scanf("%s",records[j].addr.post_num);
printf("\taddress:"); /*输入家庭地址*/
scanf("%s",records[j].addr.addr);
printf("\tphone:"); /*输入联系电话*/
scanf("%s",records[j].telephone);
}
void Data_Save() /*定义保存函数*/
{
int j;
fp=fopen("record.txt","w"); /*打开文件record.txt,只写*/
for(j=1;j<=i;j++)
{ fwrite(&records[j],sizeof(struct record1),1,fp); /*将结构体变量records的确定个数字节输
入到record.txt文件中,个数为结构体friend1所含字节数*/
}
}
void main() /*主函数*/
{
int j,k;
char ch;
char search_name[40]; /*定义字符串变量*/
Data_Load(); /*声明载入数据函数*/
i--;
do
{ printf("********************************* MENU ***************************************\n");
printf("------------------------! WELLCOME TO THE SYSTEM !------------------------------");
printf("\n*\tSelect Function: *");
printf("*\t1.Add New *");
printf("*\t2.View the data *");
printf("*\t3.Delete *");
printf("*\t4.Search *");
printf("*\t5.Insert *");
printf("*\t6.Save and quit *");
printf("*\t7.Quit *");
printf("\n******************************** MENU ****************************************\n");
printf("\tPlease choose the option you need:");
ch=getche(); /*输入字符*/
switch(ch)
{
case '1':
{ int p;
printf("\n\tPlease input the number of people you want to add:");
scanf("%d",&p);/*增加记录*/
printf("\tPlease press ENTER again");
while(getch()!=0x1b&&i<p)
{ i++;
Data_Input(i);
printf("Please press Enter again to continue\n");
}
if(i==p)printf("\n\tThe data is full\n");
} /*记录完后显示通讯录已满*/
break;
case '2': j=1; /*打印所有记录*/
while(getch()!=0x1b&&j<=i) Data_Show(j++); /*声明打印数据函数*/
if(j>i) printf("\n\tThe system is end\n"); /*显示记录末尾*/
break;
case '3': /*删除通讯录中的记录*/
if(i<1)
{ printf("\n\tno record\n"); /*显示无记录*/
break;
}
printf("\n\tplease input the number you want to delect:");
scanf("%d",&k);
printf("\tsucceed!\n");
for(j=k;j<i;j++) /*将删除位置后的元素顺序前移,即后一数据复制到前一位置,循环操作*/
{ strcpy(records[j].name,records[j+1].name);
records[j].sex=records[j+1].sex;
records[j].birth.year=records[j+1].birth.year;
records[j].birth.month=records[j+1].birth.month;
records[j].birth.day=records[j+1].birth.day;
strcpy(records[j].addr.post_num,records[j+1].addr.post_num);
strcpy(records[j].addr.addr,records[j+1].addr.addr);
strcpy(records[j].telephone,records[j+1].telephone);
}
i--; /*元素总数减1*/
break;
case '4': /*通讯录搜索功能*/
printf("\n\tPlease input the name:"); /*输入名字*/
scanf("%s", search_name); /*获得名字到指针型字符串变量*/
for(j=1;j<=i;j++)
{
if(strcmp(search_name,records[j].name)==0) /*比较字符串,即查看是否与记录中名字
相同*/
{ Data_Show(j);
printf("\n"); /*搜索成功,打印记录结束循环*/
break;
}
}
if(j>i) /*搜索失败*/
printf("\n\tNo Record "); /*显示无此记录*/
break;
case '5':
printf("\n\tInsert No:"); /*录入插入位置*/
scanf("%d",&k);
for(j=k+1;j<i;j++) /*将插入位置后的元素顺序后移,即将其复制到后一位置,循环操作*/
{ strcpy(records[j].name,records[j-1].name);
records[j].sex=records[j-1].sex;
records[j].birth.year=records[j-1].birth.year;
records[j].birth.month=records[j-1].birth.month;
records[j].birth.day=records[j-1].birth.day;
strcpy(records[j].addr.post_num,records[j-1].addr.post_num);
strcpy(records[j].addr.addr,records[j-1].addr.addr);
strcpy(records[j].telephone,records[j-1].telephone);
}
Data_Input(k); /*声明增加数据函数*/
i++;/*将记录数目加一*/
break;
case '6': Data_Save();
printf("\n"); /*声明保存函数*/
exit(0); break; /*保存后退出*/
case '7': printf("\n\tsave or not?:(y/n)");
ch=getch(); /*获得输入字符*/
if(ch=='y') Data_Save();
fclose(fp); /*关闭record.txt文件*/
exit(0); /*退出程序*/
default: printf("Please choose1-4\n"); /*输入的如果不是数字1-4,让其重新输入*/
}
}
while(1); /*每次都从第一个功能开始,循环操作*/
}
博阳精讯
2024-07-25 广告
2024-07-25 广告
业务流程梳理软件是我们公司精心研发的一款高效工具,专为提升企业业务流程透明度与管理效率而设计。通过该软件,用户可清晰展现和追踪业务流程的每一个环节,实现流程的可视化和智能化管理。软件操作简便,功能全面,助力企业优化资源配置,降低运营成本,提...
点击进入详情页
本回答由博阳精讯提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询