C/C++ code/* phone.c
* 学生使用C/C++语言开发一个简单的电话簿程序,
* 假设电话簿是这样的:
* 张三 010-87589542
* 李四 020-87589693
* 王五 030-96325896
* 保存文件为tel.txt
* 要求做到
* 1,用户可以选择查询电话、添加新电话
* 2.用户查询电话时要输入电话记录号,系统返回电话号码和主人姓名
* 3.用户输入新的姓名和电话号码,可以被添加到电话簿中。
*/
#include
#include
int judge_argc(int argc);
long get_interspace(char *argv1,long *iInterSpace);
long insertdata(char *argv1,char *argv2,char *argv3);
long matchposition(char *argv1,char *argv2,long *iInterSpace);
/* 主函数:通过命令行输入参数,输入格式为:程序可执行文件名 文件名 电话号码 或者:程序可执行文件名 文件名 新增姓名 电话号码 */
int main(int argc,char *argv[])
{
int iFlag = 0; /* 判断是查询还是插入 */
long iInterSpace = 0; /* 文件大小(字节数) */
iFlag = judge_argc(argc); /* 判断参数个数,根据具体个数判断是查询还是插入,如果个数不足,退出程序 */
get_interspace(argv[1],&iInterSpace); /* 获取文件大小 */
/* 3个参数调用查询,4个参数调用插入 */
if(3 == iFlag)
{
matchposition(argv[1],argv[2],&iInterSpace); /* 查询电话号码 */
}
else
{
insertdata(argv[1],argv[2],argv[3]); /* 插入姓名、电话号码 */
}
return 0;
}
/* 判断命令行参数个数,返回参数个数,以便之后程序中控制调用函数,如果参数个数不足,退出程序 */
int judge_argc(int argc)
{
if(argc < 3)
{
printf("Input Error!\nUsage1:programmename filename phonenumber\nUsage2:programmename filename addname phonenumber\n");
printf("输入错误!\n使用方法1:程序可执行文件名 文件名 电话号码\n使用方法1:程序可执行文件名 文件名 新增姓名 电话号码\n");
exit(2);
}
return argc;
}
/* 获取文件大小,以便之后程序中申请合适的空间 */
long get_interspace(char *argv1,long *iInterSpace)
{
FILE *fp;
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
while(! feof(fp))
{
fgetc(fp);
*iInterSpace = *iInterSpace + 1;
}
fclose(fp);
return 0;
}
/* 插入数据 */
long insertdata(char *argv1,char *argv2,char *argv3)
{
FILE *fp;
if((fp = fopen(argv1,"a+")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
fwrite("\n",1,1,fp);
fwrite(argv2,1,strlen(argv2),fp);
fwrite(" ",1,1,fp);
fwrite(argv3,1,strlen(argv3),fp);
fwrite("\n",1,1,fp);
fclose(fp);
return 0;
}
/* 查询电话号码 */
long matchposition(char *argv1,char *argv2,long *iInterSpace)
{
FILE *fp;
char cString[*iInterSpace + 2]; /* 所有字符 */
char cPerLine[*iInterSpace + 2]; /* 单行字符 */
int ii; /* 临时变量,用来控制循环 */
long iMatchNum = 0; /* 匹配行数 */
if((fp = fopen(argv1,"r")) == NULL)
{
printf("Open the file named '%s' error!\n",argv1);
fclose(fp);
exit(2);
}
/* 初始化缓冲空间,并一次性将数据都读出来 */
memset(cPerLine,'\0',sizeof(cPerLine));
while(!feof(fp))
{
fgets(cPerLine,sizeof(cPerLine),fp);
if(strstr(cPerLine,argv2) != NULL)
{
iMatchNum = iMatchNum + 1;
for(ii = 0;ii < strlen(cPerLine);ii++)
{
printf("%c",cPerLine[ii]);
}
}
memset(cPerLine,'\0',sizeof(cPerLine));
}
fclose(fp);
if(0 == iMatchNum)
{
printf("\n0 matched.\n");
exit(1);
}
else
{
printf("\nThe matched number of the string '%s' is %ld.\n",argv2,iMatchNum);
}
return 0;
}