| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 907 人关注过本帖, 1 人收藏
标题:为什么这个程序查询功能不能实现
取消只看楼主 加入收藏
jay101767
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2019-3-28
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:0 
为什么这个程序查询功能不能实现

#include "stdafx.h"
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
#include"conio.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.0,zhishu);
}
else
{
if(str[i]=='.')
neixing=0;
else
{
zhishu=i-zhengshu-1;
jieguo=jieguo+(str[i]-48)*pow(10.0,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(); /*保存更改*/
}


搜索更多相关主题的帖子: 查询 printf 输入 scanf break 
2019-03-28 17:41
快速回复:为什么这个程序查询功能不能实现
数据加载中...
 
   



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

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