| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1443 人关注过本帖
标题:一个C语言程序问题求解
只看楼主 加入收藏
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
一个C语言程序问题求解
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10//一下遇到的N全都由10代替
struct magazine
{
char name[20];//姓名
char sex;//性别
char addr[20];//地址
char tell[12];//电话
float price;//价格
int num;//数量
char date[10];//截止日期
};
struct magazine mag;
int n=0;/*用户计数器*/
int tag=0;/*未过期的用户计数器*/
void insert()/*增订新用户*/
{
FILE *fp;//声明fp是指针,用来指向FILE类型的对象
char ch,*filename;
filename = "E:\\magazine.txt";
if(0 == n)
{
if(NULL==(fp=fopen(filename,"w")))
{
printf("此文件不存在!\n");
exit(0);
}
}
else
{
if(NULL==(fp=fopen(filename,"a")))
{
printf("此文件不存在!\n");
exit(0);
}
}
do
{
if(n<N)
{
printf("请输入姓名:");gets(mag.name);
printf("请输入性别:");scanf("%c",&mag.sex);
printf("请输入地址:");gets(mag.addr);
printf("请输入电话号码:");gets(mag.tell);
printf("请输入订阅期限:");gets(mag.date);
printf("请输入杂志单价:");scanf("%f",&mag.price);
printf("请输入订阅数:");scanf("%d",&mag.num);
fwrite(&mag,sizeof(struct magazine),1,fp);//要进行写入sizeof(struct strdent_type)字节的数据项的个数是1
n++;
}
else
printf("用户已满!\n");
getchar();
printf("\n 是否还有新订户?\n");
scanf("%c",&ch);
getchar();
system("cls");
}while('y'==ch || 'Y'==ch);
fclose(fp);//关闭fp指向的文件句柄
system("pause");//调用“pause”命令;
}
void del()/*删除过期用户*/
{
FILE *fp;
struct magazine magz[N];
char datatime[8],*filename;
int m,i=0;
filename = "E:\\magazine.txt";
if((fp=fopen(filename,"r"))==NULL)//打开文件名为filename的文件,根据fopen的返回值(fp),判断该文件是否打开
{
printf("此文件不存在");
exit(0);
}
while(fread(&mag,sizeof(struct magazine),1,fp)==1)//从文件中读取个数
{
magz[tag]=mag;
tag++;
}
fclose(fp);
printf("请输入当天日期:");
gets(datatime);
fp=fopen(filename,"w");
for(i=0;i<tag;i++)
{
m=strcmp(magz[i].date,datatime);
if(m<=0)continue;
fwrite(&magz[i],sizeof(struct magazine),1,fp);
}
fclose(fp);
system("pause");
}
void total()/*统计本期杂志订户数*/
{
FILE *fp;
float totalprice;
int totalnum=0;
float price1;
float sum=0.0;
if((fp=fopen("E:\\magazine.txt","r"))==NULL)//判断以写的方式打开文件,若打不开则返回
{
printf("此文件不存在");
exit(0);
}
printf("订户名\t 订阅数\t 单价\t 金额\n");
while(fread(&mag,sizeof(struct magazine),1,fp)==1)
{
totalnum+=mag.num;
price1=mag.price;
totalprice=mag.num*mag.price;
sum+=totalprice;
printf("%s\t%d\t%3.2f\t%3.2f\n",mag.name,mag.num,mag.price,totalprice);
}
printf("合计\t%d\t%3.2f\t%3.2f\n",totalnum,price1,sum);
fclose(fp);
system("pause");
}
void scan()//查询与修改模块
{
system("cls");
int i=0,j,y;
char scanname[10],*filename;
filename = "E:\\magazine.txt";
FILE *fp;
struct magazine *magz[N];
fp=fopen(filename,"r");
if((fp=fopen(filename,"r"))==NULL)
{
printf("此文件不存在");
exit(0);
}
for(j=0;fread(&mag,sizeof(struct magazine),1,fp);j++)
{
magz[j]=(struct magazine *)malloc(sizeof(struct magazine));
* magz[j]=mag;
}
fclose(fp);
printf("输入要查询人员的姓名:");
scanf("%s",scanname);
fp=fopen(filename,"w");
for(i=0;i<j;i++)
{
if(strcmp(magz[i]->name,scanname)==0)
{
printf("姓名:%s\n",magz[i]->name);
printf("性别:%s\n",magz[i]->sex);
printf("地址:%s\n",magz[i]->addr);
printf("电话:%s\n",magz[i]->tell);
printf("单价:%f\n",magz[i]->price);
printf("订阅数量:%d\n",magz[i]->num);
printf("订阅期限:%s\n",magz[i]->date);
printf("是否要修改'1'是,'0'否:\n");
scanf("%d",&y);
if(y)
{
system("cls");
printf("请输入姓名:");scanf("%s",magz[i]->name);
printf("请输入性别:");scanf("%s",magz[i]->sex);
printf("请输入地址:");scanf("%s",magz[i]->addr);
printf("请输入电话号码:");scanf("%s",magz[i]->tell);
printf("请输入订阅期限:");scanf("%s",magz[i]->date);
printf("请输入杂志单价:");scanf("%f",&magz[i]->price);
printf("请输入订阅数:");scanf("%d",&magz[i]->num);
fwrite(magz[i],sizeof(struct magazine),1,fp);
continue;}
fwrite(magz[i],sizeof(struct magazine),1,fp);
continue;}
fwrite(magz[i],sizeof(struct magazine),1,fp);
}
fclose(fp);
system("pause");
}
void main()//主函数模块
{
int ch;
char ch1;
system("color 0a");
do
{
printf("                                                      \n");
printf("                                                      \n");
printf("                                                      \n");
printf("||||||||||||||||||||||||||||||||||||||||||||||||||||||\n");
printf("||                  C 语言课程设计                  ||\n");
printf("||                                                  ||\n");
printf("||               杂志订阅管理系统设计               ||\n");
printf("||--------------------------------------------------||\n");
printf("||--------------------------------------------------||\n");
printf("||     制作人: 王超 制作日期: 2016.06.21            ||\n");
printf("||********************** 主菜单*********************||\n");
printf("||--------------------------------------------------||\n");
printf("||****************** 1. 增加新订户  ****************||\n");
printf("||****************** 2. 删除到期用户****************||\n");
printf("||****************** 3. 统计订户信息****************||\n");
printf("||****************** 4. 查找订户信息****************||\n");
printf("||****************** 5. 退出        ****************||\n");
printf("||**************************************************||\n");
printf("||**************************************************||\n");
printf("||**************************************************||\n");
printf("||||||||||||||||||||||||||||||||||||||||||||||||||||||\n");
scanf("%d",&ch);getchar();
switch(ch)
{
case 1:insert();getchar();break;//增添模块
case 2:del();break;//删除模块
case 3:total();getchar();break;//统计模块
case 4:scan();getchar();break;//浏览模块
case 5:exit(0);break;//退出
default:printf("输入有误!");break;//若不符合上述情况
}
printf("是否继续其他操作?\n");
scanf("%c",&ch1);
system("cls");//清屏
}while(ch1=='y'||ch1=='Y');
}[local]1[/local]

如图,地址和电话不是分开的。求大神帮助呀
搜索更多相关主题的帖子: magazine include insert 计数器 C语言 
2016-06-21 16:21
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-06-21 16:22
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
收藏
得分:0 
程序运行的时候 地址和电话 直接一起出现了?怎么改u?
2016-06-21 16:22
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:20 
这个貌似是因为你输入性别最后的回车,被输入地址那个语句读取了。你在输入性别那句后面加个getchar();试试。 我觉得你的程序的类似地方应该还有这个毛病。就是没有清空数据流的问题。
或者你把这个函数加在main前,然后在有你说的这个毛病的地方用这个语句safe_flush(stdin);调用下这个函数
程序代码:
//清空缓存函数
void safe_flush(FILE *fp)
{
    int ch;
    while( (ch = fgetc(fp)) != EOF && ch != '\n' );          
}


[此贴子已经被作者于2016-6-21 16:30编辑过]

2016-06-21 16:25
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
收藏
得分:0 
回复 4楼 wanglianyi1
我没有加这段函数,就加了getchar(); 问题解决了。你说的对,这个程序是在网上找的改了一点点。我把改的样子给你看
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
。我只是把前面这个图的程序改成后面那个要求,就变了
2016-06-21 16:37
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
收藏
得分:0 
回复 4楼 wanglianyi1
谢谢大神
2016-06-21 16:37
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
公司电脑没有E盘,我把文件地址改成了D,其他类似地方如果有同样问题,同样处理就行了
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10
//清空缓存函数
void safe_flush(FILE *fp)
{
    int ch;
    while( (ch = fgetc(fp)) != EOF && ch != '\n' );          
}
struct magazine
{
char name[20];//姓名
char sex;//性别
char addr[20];//地址
char tell[12];//电话
float price;//价格
int num;//数量
char date[10];//截止日期
};
struct magazine mag;
int n=0;/*用户计数器*/
int tag=0;/*未过期的用户计数器*/
void insert()/*增订新用户*/
{
FILE *fp;//声明fp是指针,用来指向FILE类型的对象
char ch,*filename;
filename = "D:\\magazine.txt";
if(0 == n)
{
if(NULL==(fp=fopen(filename,"w")))
{
printf("此文件不存在!\n");
exit(0);
}
}
else
{
if(NULL==(fp=fopen(filename,"a")))
{
printf("此文件不存在!\n");
exit(0);
}
}
do
{
if(n<N)
{
printf("请输入姓名:");gets(mag.name);
printf("请输入性别:");scanf("%c",&mag.sex);


safe_flush(stdin);    //这里增加  

                  
printf("请输入地址:");gets(mag.addr);
printf("请输入电话号码:");gets(mag.tell);
printf("请输入订阅期限:");gets(mag.date);
printf("请输入杂志单价:");scanf("%f",&mag.price);
printf("请输入订阅数:");scanf("%d",&mag.num);
fwrite(&mag,sizeof(struct magazine),1,fp);//要进行写入sizeof(struct strdent_type)字节的数据项的个数是1
n++;
}
else
printf("用户已满!\n");
getchar();
printf("\n 是否还有新订户?\n");
scanf("%c",&ch);
getchar();
system("cls");
}while('y'==ch || 'Y'==ch);
fclose(fp);//关闭fp指向的文件句柄
system("pause");//调用“pause”命令;
}
void del()/*删除过期用户*/
{
FILE *fp;
struct magazine magz[N];
char datatime[8],*filename;
int m,i=0;
filename = "D:\\magazine.txt";
if((fp=fopen(filename,"r"))==NULL)//打开文件名为filename的文件,根据fopen的返回值(fp),判断该文件是否打开
{
printf("此文件不存在");
exit(0);
}
while(fread(&mag,sizeof(struct magazine),1,fp)==1)//从文件中读取个数
{
magz[tag]=mag;
tag++;
}
fclose(fp);
printf("请输入当天日期:");
gets(datatime);
fp=fopen(filename,"w");
for(i=0;i<tag;i++)
{
m=strcmp(magz[i].date,datatime);
if(m<=0)continue;
fwrite(&magz[i],sizeof(struct magazine),1,fp);
}
fclose(fp);
system("pause");
}
void total()/*统计本期杂志订户数*/
{
FILE *fp;
float totalprice;
int totalnum=0;
float price1;
float sum=0.0;
if((fp=fopen("D:\\magazine.txt","r"))==NULL)//判断以写的方式打开文件,若打不开则返回
{
printf("此文件不存在");
exit(0);
}
printf("订户名\t 订阅数\t 单价\t 金额\n");
while(fread(&mag,sizeof(struct magazine),1,fp)==1)
{
totalnum+=mag.num;
price1=mag.price;
totalprice=mag.num*mag.price;
sum+=totalprice;
printf("%s\t%d\t%3.2f\t%3.2f\n",mag.name,mag.num,mag.price,totalprice);
}
printf("合计\t%d\t%3.2f\t%3.2f\n",totalnum,price1,sum);
fclose(fp);
system("pause");
}
void scan()//查询与修改模块
{
system("cls");
int i=0,j,y;
char scanname[10],*filename;
filename = "E:\\magazine.txt";
FILE *fp;
struct magazine *magz[N];
fp=fopen(filename,"r");
if((fp=fopen(filename,"r"))==NULL)
{
printf("此文件不存在");
exit(0);
}
for(j=0;fread(&mag,sizeof(struct magazine),1,fp);j++)
{
magz[j]=(struct magazine *)malloc(sizeof(struct magazine));
* magz[j]=mag;
}
fclose(fp);
printf("输入要查询人员的姓名:");
scanf("%s",scanname);
fp=fopen(filename,"w");
for(i=0;i<j;i++)
{
if(strcmp(magz[i]->name,scanname)==0)
{
printf("姓名:%s\n",magz[i]->name);
printf("性别:%s\n",magz[i]->sex);
printf("地址:%s\n",magz[i]->addr);
printf("电话:%s\n",magz[i]->tell);
printf("单价:%f\n",magz[i]->price);
printf("订阅数量:%d\n",magz[i]->num);
printf("订阅期限:%s\n",magz[i]->date);
printf("是否要修改'1'是,'0'否:\n");
scanf("%d",&y);
if(y)
{
system("cls");
printf("请输入姓名:");scanf("%s",magz[i]->name);
printf("请输入性别:");scanf("%s",magz[i]->sex);
printf("请输入地址:");scanf("%s",magz[i]->addr);
printf("请输入电话号码:");scanf("%s",magz[i]->tell);
printf("请输入订阅期限:");scanf("%s",magz[i]->date);
printf("请输入杂志单价:");scanf("%f",&magz[i]->price);
printf("请输入订阅数:");scanf("%d",&magz[i]->num);
fwrite(magz[i],sizeof(struct magazine),1,fp);
continue;}
fwrite(magz[i],sizeof(struct magazine),1,fp);
continue;}
fwrite(magz[i],sizeof(struct magazine),1,fp);
}
fclose(fp);
system("pause");
}
int main()//主函数模块
{
int ch;
char ch1;
system("color 0a");
do
{ 
printf("                                                      \n");
printf("                                                      \n");
printf("                                                      \n");
printf("||||||||||||||||||||||||||||||||||||||||||||||||||||||\n");
printf("||                  C 语言课程设计                  ||\n");
printf("||                                                  ||\n");
printf("||               杂志订阅管理系统设计               ||\n");
printf("||--------------------------------------------------||\n");
printf("||--------------------------------------------------||\n");
printf("||     制作人: 王超 制作日期: 2016.06.21            ||\n");
printf("||********************** 主菜单*********************||\n");
printf("||--------------------------------------------------||\n");
printf("||****************** 1. 增加新订户  ****************||\n");
printf("||****************** 2. 删除到期用户****************||\n");
printf("||****************** 3. 统计订户信息****************||\n");
printf("||****************** 4. 查找订户信息****************||\n");
printf("||****************** 5. 退出        ****************||\n");
printf("||**************************************************||\n");
printf("||**************************************************||\n");
printf("||**************************************************||\n");
printf("||||||||||||||||||||||||||||||||||||||||||||||||||||||\n");
scanf("%d",&ch);getchar();
switch(ch)
{
case 1:insert();getchar();break;//增添模块
case 2:del();break;//删除模块
case 3:total();getchar();break;//统计模块
case 4:scan();getchar();break;//浏览模块
case 5:exit(0);break;//退出
default:printf("输入有误!");break;//若不符合上述情况
}
printf("是否继续其他操作?\n");
scanf("%c",&ch1);
system("cls");//清屏
}while(ch1=='y'||ch1=='Y');
return 0;
}


[此贴子已经被作者于2016-6-21 16:41编辑过]

2016-06-21 16:38
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 jifanjiayou
不客气,能帮到你就行。
2016-06-21 16:43
jifanjiayou
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2016-6-21
收藏
得分:0 
回复 7楼 wanglianyi1
谢谢大神
2016-06-21 17:00
快速回复:一个C语言程序问题求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021979 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved