实训题目C语言,(实训题目)-有兴趣者请进!解决方法

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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值