| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 710 人关注过本帖
标题:fopen函数,写的一个经济收入支出管理系统怎么无法保存输入信息。
只看楼主 加入收藏
C小菜
Rank: 1
等 级:新手上路
帖 子:109
专家分:3
注 册:2011-9-14
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:3 
fopen函数,写的一个经济收入支出管理系统怎么无法保存输入信息。
求优化 ,求修改 ,求找错。
程序代码:
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
#define TIAOSHU 100
#define CHENGGONG 1
#define SHIBAI 0
#define SHOURU 1
#define ZHICHU 2
#define ZENGJIA 1
#define SHANCHU 2
#define XIUGAI 3
#define CHAXUN 4
#define TONGJI 5
#define TUICHU 6
/*以下定义全局变量*/
struct shouzhixinxi
{

 char xingming[20];

 char laiyuan[40];

 char riqi[20];

 char shumu[10];           /*用double貌似读不出来*/
}jilu[TIAOSHU];         
/*定义收支情况结构体,TIAOSHU表示最大的容量,可自行更改*/
char xuanze;
/*该数据用于接收选择信息*/
int tishi;
/*用于接收各函数返回的提示信息*/
int dijitiao=0;
/*用于表示当前是第几条信息*/
int i;
/*用于存放临时的条数,相当于零食的dijitiao*/
char linshi[40];
double linshi2;
/*用于存放一些临时信息*/

/*代码*/
/*用于保存信息*/
void baocun()
{

 FILE *fp;

 fp=fopen("shouzhiguanli.txt","w+");

 for(i=0;i<dijitiao;i++)

 {
  fprintf(fp,"%s ",*jilu[i].xingming);
  fprintf(fp,"%s ",*jilu[i].laiyuan);
  fprintf(fp,"%s ",*jilu[i].riqi);
  fprintf(fp,"%s ",*jilu[i].shumu);

 }

 fclose(fp);
}
/*用于输出查询到的信息*/
int shuchu(int i)
{

 printf("\n\n             \37~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\37\n");

 printf("             \23     \3.收 支 人 员 姓 名:%-20s\23\n",jilu[i].xingming);

 printf("             \23     \3.收 支 来 源 或 去 向:%-17s\23\n",jilu[i].laiyuan);

 printf("             \23     \3.收 支 日 期:%-26s\23\n",jilu[i].riqi);

 printf("             \23     \3.收 支 数 目:%-26s\23\n",jilu[i].shumu);

 printf("             \36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\36\n");

 return CHENGGONG;
}

/*用于新建*/
void xinzeng(int dijitiao)
{

 while(1)

 {
  printf("\n请输入收入或支出人员的姓名:");
  scanf("%s",jilu[dijitiao].xingming);
  printf("\n请输入收入来源或支出去向:");
  scanf("%s",jilu[dijitiao].laiyuan);
  printf("\n请输入收入或支出的日期:");
  scanf("%s",jilu[dijitiao].riqi);
  printf("\n请输入收入或支出的数目:");
  scanf("%s",jilu[dijitiao].shumu);
  printf("是否保存这条信息?      <Y/N>\n");
  xuanze=getch();
  if(xuanze=='Y' || xuanze=='y')
  {
   dijitiao++;
   printf("保存成功\n");
  }
  printf("是否继续添加新记录?     <Y/N>\n");
  xuanze=getch();
  printf("\n");
  if(xuanze=='N' || xuanze=='n')
   break;

 }
}
/*用于删除*/
void shanchu()
{

 int xuhao=0,biaoshi[20]={-1};

 while(1)

 {
  printf("\n请选择查询要删除的记录的方式: 1.姓名  2.来源或去向 3.日期 4.数目\n");
  xuanze=getch();
  xuanze=xuanze-48;
  switch(xuanze)
  {
  case 1:
   printf("请输入要查询的姓名:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].xingming,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 2:
   printf("请输入要查询的来源或去向:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].laiyuan,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 3:
   printf("请输入要查询的日期:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].riqi,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 4:
   printf("请输入要查询的数目:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].shumu,linshi)==0)
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  default:printf("输入错误\n");
  }
  printf("请输入记录左上角对应的序号:");
  xuanze=getch();
  printf("\n");
  xuanze=xuanze-48;
  if(biaoshi[xuanze]!=-1 && xuanze<=xuhao && xuanze>0)
  {
   biaoshi[0]=biaoshi[xuanze];
   printf("确认删除?     <Y/N>   \n");
   xuanze=getch();
   if(xuanze=='Y' || xuanze=='y')
   {
    strcpy(jilu[biaoshi[0]].xingming,"\0");
    strcpy(jilu[biaoshi[0]].laiyuan,"\0");
    strcpy(jilu[biaoshi[0]].riqi,"\0");
    strcpy(jilu[biaoshi[0]].shumu,"\0");
    printf("删除成功\n");
   }
  }
  else printf("输入错误.\n");
  printf("是否继续删除?     <Y/N>  \n");
  xuanze=getch();
  printf("\n");
  if(xuanze=='N' || xuanze=='n')
   break;

 }
}
/*用于修改*/
void xiugai()
{

 struct shouzhixinxi linshijilu;

 int xuhao=0,biaoshi[20]={-1};

 while(1)

 {
  printf("\n请选择查询要修改的记录的方式: 1.姓名  2.来源或去向 3.日期 4.数目\n");
  xuanze=getch();
  xuanze=xuanze-48;
  switch(xuanze)
  {
  case 1:
   printf("请输入要查询的姓名:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].xingming,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 2:
   printf("请输入要查询的来源或去向:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].laiyuan,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 3:
   printf("请输入要查询的日期:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].riqi,linshi)==0)   /*查询*/
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  case 4:
   printf("请输入要查询的数目:");
   scanf("%s",linshi);
   for(i=0;i<dijitiao;i++)
    if(strcmp(jilu[i].shumu,linshi)==0)
    {
     xuhao++;
     biaoshi[xuhao]=i;
     printf("\n\n%10d.->",xuhao);
     tishi=shuchu(i);
    }
    if(tishi!=CHENGGONG)
     printf("未找到相关记录\n");
    break;
  default:printf("输入错误\n");
  }
  printf("请输入记录左上角对应的序号:");
  xuanze=getch();
  xuanze=xuanze-48;
  if(biaoshi[xuanze]!=-1 && xuanze<=xuhao && xuanze>0)
  {
   biaoshi[0]=biaoshi[xuanze];
   printf("\n请输入新姓名:");
   scanf("%s",linshijilu.xingming);
   printf("\n请输入新收入来源或支出去向:");
   scanf("%s",linshijilu.laiyuan);
   printf("\n请输入新收入或支出的日期:");
   scanf("%s",linshijilu.riqi);
   printf("\n请输入新收入或支出的数目:");
   scanf("%s",linshijilu.shumu);
   printf("确认修改?     <Y/N>   \n");
   xuanze=getch();
   if(xuanze=='Y' || xuanze=='y')
   {
    strcpy(jilu[biaoshi[0]].xingming,linshijilu.xingming);
    strcpy(jilu[biaoshi[0]].laiyuan,linshijilu.laiyuan);
    strcpy(jilu[biaoshi[0]].riqi,linshijilu.riqi);
    strcpy(jilu[biaoshi[0]].shumu,linshijilu.shumu);
    printf("修改成功\n");
   }
  }
  else printf("输入错误.\n");
  printf("是否继续修改?     <Y/N>  \n");
  xuanze=getch();
  printf("\n");
  if(xuanze=='N' || xuanze=='n')
   break;

 }
}
/*用于查询*/
void chaxun(void)
{

 while(1)

 {

 printf("\n请选择查询方式: 1.姓名  2.来源或去向 3.日期 4.数目\n");

 xuanze=getch();

 xuanze=xuanze-48;

 switch(xuanze)

 {

 case 1:
  printf("请输入要查询的姓名:");
  scanf("%s",linshi);
  for(i=0;i<dijitiao;i++)
   if(strcmp(jilu[i].xingming,linshi)==0)   /*查询*/
    tishi=shuchu(i);
   if(tishi!=CHENGGONG)
    printf("未找到相关记录\n");
   break;

 case 2:
  printf("请输入要查询的来源或去向:");
  scanf("%s",linshi);
     for(i=0;i<dijitiao;i++)
   if(strcmp(jilu[i].laiyuan,linshi)==0)   /*查询*/
    tishi=shuchu(i);
   if(tishi!=CHENGGONG)
    printf("未找到相关记录\n");
   break;

 case 3:
  printf("请输入要查询的日期:");
  scanf("%s",linshi);
  for(i=0;i<dijitiao;i++)
   if(strcmp(jilu[i].riqi,linshi)==0)   /*查询*/
    tishi=shuchu(i);
   if(tishi!=CHENGGONG)
    printf("未找到相关记录\n");
   break;

 case 4:
  printf("请输入要查询的数目:");
  scanf("%s",linshi);
  for(i=0;i<dijitiao;i++)
   if(strcmp(jilu[i].shumu,linshi)==0)
    tishi=shuchu(i);
   if(tishi!=CHENGGONG)
    printf("未找到相关记录\n");
   break;

 default:printf("输入错误\n");

 }

 printf("是否继续查询?   <Y/N>");

 xuanze=getch();

 if(xuanze=='N' || xuanze=='n')
  break;

 }
}
/*将字符串转换为浮点数*/
double zhuanhuan(char *str)
{

 int zhengshu=0,xiaoshu=0,neixing=1,zhishu,zhengfu=1;

 double jieguo=0;

 zhengshu=strlen(str);

 switch(str[0])

 {

 case '-':
  str[0]='0';
  zhengfu=-1;
  break;

 case '+':
  str[0]='0';
  zhengfu=1;
  break;

 }

 for(i=0;str[i]!='\0';i++)
  if(str[i]='.')
  {
   zhengshu=i;
   break;
  }

 for(i=0;str[i]!='\0';i++)

 {
  if(str[i]!='.' && neixing==1)
  {
   zhishu=zhengshu-i-1;
   jieguo=jieguo+(str[i]-48)*pow(10,zhishu);
  }
  else
  {
   if(str[i]=='.')
    neixing=0;
   else
   {
    zhishu=i-zhengshu-1;
    jieguo=jieguo+(str[i]-48)*pow(10,zhishu);
   }
  }

 }

 if(zhengfu==-1)
  return -jieguo;

 return jieguo;
}
/*用于统计*/
void tongji(void)
{

 double shumu=0,shumu2;

 char riqi1[10],riqi2[10];

 while(1)

 {
  printf("\n请输入起始日期(含该日,年四位,月日两位):");
  scanf("%s",riqi1);
  printf("\n请输入截止日期(含该日,年四位,月日两位):");
  scanf("%s",riqi2);
  if(strcmp(riqi1,riqi2)<0)
   for(i=0;i<dijitiao;i++)
    if(strcmp(riqi1,jilu[i].riqi)<=0  && strcmp(riqi2,jilu[i].riqi)>=0)
    {
     shumu2=zhuanhuan(jilu[i].shumu);
     shumu=shumu+shumu2;
    }
    else printf("输入有误.\n");
    printf("\n该时间段内总收支情况为:%.2f\n",shumu);
    printf("\n是否继续统计?     <Y/N>  ");
    xuanze=getch();
    printf("\n");
    if(xuanze=='N' || xuanze=='n')
     break;

 }
}
/*导入文件上的信息,相当于初始化*/
int daoruxinxi()
{

 FILE *fp;

 if((fp=fopen("shouzhiguanli.txt","r+"))==NULL)

 {
  printf("当前收支情况文件不存在.\n");
  if((fp=fopen("shouzhiguanli.txt","w+"))==NULL)
  {
   printf("未知错误导致未能建立新文件,按任意键结束程序.\n");
   getch();
   exit(0);
  }
  else
  {
   fclose(fp);
   printf("建立新文件成功,是否开始新建记录.   <Y\\N>\n");
   xuanze=getch();
   if(xuanze=='Y' || xuanze=='y')
    xinzeng(dijitiao);
  }

 }

 else

 {
  for(dijitiao=0;(dijitiao<TIAOSHU && !feof(fp));dijitiao++)
  {
   fscanf(fp,"%s ",jilu[dijitiao].xingming);
   fscanf(fp,"%s ",jilu[dijitiao].laiyuan);
   fscanf(fp,"%s ",jilu[dijitiao].riqi);
   fscanf(fp,"%s ",jilu[dijitiao].shumu);
  }
  fclose(fp);
  return CHENGGONG;

 }

 return SHIBAI;
}

/*主函数*/
void main()
{

 if(daoruxinxi()==CHENGGONG)    /*若导入成则开始主菜单*/

 {
  int xunhuan=1;         /*用于控制循环*/
  while(xunhuan)
  {
   printf("\n\n\n                 \37~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\37\n");  /*以下输出提示信息*/
   printf("                 \23         导 入 收 支 情 况 成 功.            \23\n");
   printf("                 \23~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\23\n");
   printf("                 \23       \1 1. 增 加 新 记 录                   \23\n");
   printf("                 \23       \1 2. 删 除 已 有 记 录                \23\n");
   printf("                 \23       \1 3. 修 改 已 有 记 录                \23\n");
   printf("                 \23       \1 4. 查 询 已 有 记 录                \23\n");
   printf("                 \23       \1 5. 统 计 一 段 时 间 内 的 数 据    \23\n");
   printf("                 \23       \1 6. 退 出 该 系 统                   \23\n");
   printf("                 \36~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\36\n\n");
   printf("请选择要执行的操作:");
   xuanze=getch();           /*选择操作*/
   xuanze=xuanze-48;     /*前面接收的是1的ASC码实际上是49而不是1,转换一下*/
   switch(xuanze)
   {
   case ZENGJIA:xinzeng(dijitiao);break;
   case SHANCHU:shanchu();break;
   case XIUGAI:xiugai();break;
   case CHAXUN:chaxun();break;
   case TONGJI:tongji();break;
   case TUICHU:xunhuan=0;break;
   default:printf("输入错误.\n");
   }
  }

 }

 baocun();    /*保存更改*/
}

搜索更多相关主题的帖子: 管理系统 信息 
2011-12-09 21:52
C小菜
Rank: 1
等 级:新手上路
帖 子:109
专家分:3
注 册:2011-9-14
收藏
得分:0 
SOS!
2011-12-09 22:04
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:5 
for(i=0;i<dijitiao;i++)
{  
fprintf(fp,"%s",*jilu[i].xingming);  fprintf(fp,"%s",*jilu[i].laiyuan);  fprintf(fp,"%s",*jilu[i].riqi);  
fprintf(fp,"%s",*jilu[i].shumu); //为什么要用*,你想过吗?
}

总有那身价贱的人给作业贴回复完整的代码
2011-12-09 22:19
laznrbfe
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:482
专家分:1599
注 册:2011-5-22
收藏
得分:5 
程序代码:
/*用于新建*/
void xinzeng(int dijitiao)
{
    FILE *fp;
    fp=fopen("shouzhiguanli.txt","w+");
    while(1)
    {
        printf("\n请输入收入或支出人员的姓名:");
        scanf("%s",jilu[dijitiao].xingming);
        printf("\n请输入收入来源或支出去向:");
        scanf("%s",jilu[dijitiao].laiyuan);
        printf("\n请输入收入或支出的日期:");
        scanf("%s",jilu[dijitiao].riqi);
        printf("\n请输入收入或支出的数目:");
        scanf("%s",jilu[dijitiao].shumu);
        printf("是否保存这条信息?      <Y/N>\n");
        xuanze=getch();
        if(xuanze=='Y' || xuanze=='y')
        {
       
            fprintf(fp,"%s ",jilu[dijitiao].xingming);
            fprintf(fp,"%s ",jilu[dijitiao].laiyuan);
            fprintf(fp,"%s ",jilu[dijitiao].riqi);
            fprintf(fp,"%s ",jilu[dijitiao].shumu);
            dijitiao++;
            printf("保存成功\n");
        }
        printf("是否继续添加新记录?     <Y/N>\n");
        xuanze=getch();
        printf("\n");
        if(xuanze=='N' || xuanze=='n')
        {
            fclose(fp);
            break;
        }
    }
}
2011-12-09 22:21
快速回复:fopen函数,写的一个经济收入支出管理系统怎么无法保存输入信息。
数据加载中...
 
   



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

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