社区
C语言
帖子详情
怎样让两个文件相互匹配?
onlyou4
2008-09-06 09:42:01
准备用C编写一个手机充值管理系统,想用一个文件存放所有的客户信息(存放客户的姓名和手机号码),然后每个客户都有一个与之相对应的充值历史记录文件。我想问的是,在第一个文件中找到一个客户信息后,有没有办法能自动打开他的充值历史记录文件,对其数据进行调用?
谢谢好心人的帮忙!
...全文
128
8
打赏
收藏
怎样让两个文件相互匹配?
准备用C编写一个手机充值管理系统,想用一个文件存放所有的客户信息(存放客户的姓名和手机号码),然后每个客户都有一个与之相对应的充值历史记录文件。我想问的是,在第一个文件中找到一个客户信息后,有没有办法能自动打开他的充值历史记录文件,对其数据进行调用? 谢谢好心人的帮忙!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mars_man
2008-09-16
打赏
举报
回复
是否是因为你输入的是:
Please input number: 15998481234
Please input address:
d:\\mobile\\LiLin.dat
Do want to charge, Y or N ?
如果换成这样呢:
Please input number: 15998481234
Please input address:
d:\mobile\LiLin.dat
Do want to charge, Y or N ?
我手头没有编译器,还没有试。
yangkunhenry
2008-09-07
打赏
举报
回复
mark
onlyou4
2008-09-07
打赏
举报
回复
[Quote=引用 6 楼 CSYNYK 的回复:]
估计是你实际的文件名和字符串不对应!
[/Quote]
感激CSYNYK!由于是新号所以没有分,以后我会补上。
回去在保证文件名和字符串相对应的情况下试了试,但还是不行:
这是运行的结果:
Please input the name:LiLin
This name isn't exist
Do you want to save this new name, Y or N ?
Y
Please input name: LiLin
Please input number: 15998481234
Please input address: d:\\mobile\\LiLin.dat
Do want to charge, Y or N ?
Y
当输入"Y"后程序就卡住了…… =。=
只有把整个程序贴上了(请在运行前在D盘创建一个名为mobile的文件夹):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct His
{
float money;
char payment;
char pay_success;
float cost;
}History;
typedef struct Cus
{
char name[20];
char number[18];
char address[50];
}Customer;
void CreateFileC() /*创建存储客户姓名和号码的文件*/
{
FILE *fp;
Customer C;
if((fp=fopen("D:\\mobile\\Customer.dat","wb+"))==NULL)
{printf("no room to save data!"); exit(0);}
fflush(stdin);
printf("Please input name: ");
scanf("%s",C.name);
printf("Please input number: ");
scanf("%s",C.number);
fflush(stdin);
printf("Please input address: ");
scanf("%s",C.address);
fwrite(&C,sizeof(Customer),1,fp);
fclose(fp);
}
void CreateFileH(char *p) /*创建客户所对应的充值记录文件*/
{
FILE *fp;
History H;
char address[50];
strcpy(address,p);
printf("%s",address);
if((fp=fopen(address,"ab"))==NULL) /*"address"换成"p"也运行不了*/
{printf("no room to save data!"); exit(0);}
printf("How much money do you want to charge?\n");
scanf("%f",&H.money);
fflush(stdin);
printf("Have you received money, Y or N ? ");
scanf("%c",&H.payment);
fflush(stdin);
printf("Is charge successful, S or F ? ");
scanf("%c",&H.pay_success);
fwrite(&H,sizeof(History),1,fp);
fclose(fp);
}
void is_charge(char *p) /*判断是否记录用户充值记录*/
{
char choice;
printf("Do want to charge, Y or N ?\n");
fflush(stdin);
scanf("%c",&choice);
if(choice=='Y')
{
CreateFileH(p);
printf("Input any button to return:");
getch();
return;
}
else if(choice=='N')
{
printf("Press any button to return:");
getch();
return;
}
}
void Search_customer()
{
FILE *fp;
int flag=0;
char choice;
char Name[20];
Customer C;
char add[50];
fp=fopen("D:\\mobile\\Customer.dat","rb");
if(fp==NULL) /*第一次运行提示是否创建文件*/
{
printf("No file. Now creat a new file\n");
CreateFileC();
fread(&C,sizeof(Customer),1,fp);
is_charge(C.address);
}
else
{
printf("Please input the name:");
scanf("%s",Name);
while(!feof(fp)) /*在文件中查找客户信息*/
{
fflush(stdin);
fread(&C,sizeof(Customer),1,fp);
if(strcmp(C.name,Name)==0)
{
printf("%s ",C.name);
printf("%s\n",C.number);
printf("%s\n",C.address);
flag=1;
strcpy(add,C.address);
is_charge(add);
break;
}
}
if(flag==0) /*如果没找到,提示是否存储该客户信息*/
{
printf("This name isn't exist\n");
printf("Do you want to save this new name, Y or N ?\n");
fflush(stdin);
scanf("%c",&choice);
if(choice=='Y')
{
CreateFileC();
fread(&C,sizeof(Customer),1,fp);
is_charge(C.address);
}
else
if(choice=='N')
{
printf("Thank you\n");
return;
}
}
}
}
main()
{
Search_customer();
getch();
}
大家帮忙看一下,是哪里出错了? 由于是新号所以没有分数,以后补上。小弟不甚感激!
_石头_
2008-09-07
打赏
举报
回复
估计是你实际的文件名和字符串不对应!
_石头_
2008-09-07
打赏
举报
回复
编译了一下,除了char address[50]; 后面的分号的形式不对意外别的没什么问题,写入文件也成功了!
_石头_
2008-09-07
打赏
举报
回复
代码没看出什么问题阿!
onlyou4
2008-09-06
打赏
举报
回复
[Quote=引用 1 楼 CSYNYK 的回复:]
那就定义一个结构体嘛!譬如:
typedef struct _UserInfo
{
char name[20];
char movnum[20];
char filename[20];
}USINF;
[/Quote]
谢谢CSYNYK 的解答!
我也是定义了这样的一个结构体
typedef struct Cus
{
char name[20];
char number[18];
char address[50];
}Customer;
第一个文件按这个结构体存储了用户的姓名号码,最后一个address[50]我采用了键盘输入存储的地址,比如"d:\\a.dat"
存储客户历史记录的文件的定义如下:
typedef struct His
{
float money;
char payment;
char pay_success;
float cost;
}History;
程序的大体我已经编写好了,但程序运行到创建充值历史的文件时出了问题。
这是创建第二个文件的函数
void CreateFileH(char *p) //从第一个文件中读取的地址复制到一个字符数组中,再用p指向这个数组
{
FILE *fp;
History H;
char address[50];
strcpy(address,p);
printf("%s",address); //打印出的地址是完整的
if((fp=fopen(p,"ab"))==NULL) //但程序运行到这里就卡住了,换成address也不能运行,如果将p直接换成"d:\\a.dat"又可运行。
{printf("no room to save data!"); exit(0);}
printf("How much money do you want to charge?\n");
scanf("%f",&H.money);
fflush(stdin);
printf("Have you received money, Y or N ? ");
scanf("%c",&H.payment);
fflush(stdin);
printf("Is charge successful, S or F ? ");
scanf("%c",&H.pay_success);
fwrite(&H,sizeof(History),1,fp);
fclose(fp);
}
_石头_
2008-09-06
打赏
举报
回复
那就定义一个结构体嘛!譬如:
typedef struct _UserInfo
{
char name[20];
char movnum[20];
char filename[20];
}USINF;
训练Faster-RCNN出现
两个
输入数组的非单一维度必须
相互
匹配
问题
根据第10条运行script_faster_rcnn_VOC2007_ZF.m
文件
,出现错误如下: 错误原因在于: experiments\+Faster_RCNN_Train\do_proposal_train.m 里面,把dataset.roidb_test赋值给roidb_val。 因此把 ...
在Spark上进行
两个
大数据集的
匹配
但是Spark也存在局限性,在某些问题的处理上会力不从心,例如
两个
大数据集的
匹配
。出现这种问题的原因主要是分布式系统的优势在于机器的数量,子节点的CPU和内存通常配置较低。 问题描述:如果有
两个
大数据集A和B,...
【面试题】海量数据处理:给定a、b
两个
文件
,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b
文件
共同的url?
海量数据处理面试题:给定a、b
两个
文件
,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b
文件
共同的url?
linux下多个
文件
相同行合并
通常我们遇到
两个
文件
合并直接使用cat file1 file2 > file3,但是这种是将一个
文件
追加到另一个
文件
的末尾,相当于sql中的union,将多个查询记录合并到一起。今天要介绍的是将
两个
相同行的
文件
合并到一起,...
两张表格数据
匹配
删除
假如咱们有两张表,其中一张表格存入了学生、科目、成绩的数据,称其为A表格,另一张表格中是学生、科目的数据称其为B表格,我希望从A表格中去
匹配
B表格的数据,然后将与B表格数据xiangpp
C语言
70,006
社区成员
243,256
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章