#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct shouru//收入
{
char num[10];
char name[20];
char kind[20];
char date[20];
int jinge;
char beizhu[100];
int total=0;
}shouru;
shouru shouruchucun[100];
typedef struct zhichu//支出
{
char num[20];
char name[20];
char kind[20];
char date[20];
int jinge;
char beizhu[100];
}zhichu;
zhichu zhichuchucun[100];
int g = 0;//收入个数
int p = 0;//支出个数
int j = 0;//收入金额
int y = 0;//支出金额
void shuoru1() //收入输入
{
int i = 1;
do
{
shouru shouru;
printf("\n请输入序号、姓名、收入类别、收入日期(如6)、收入金额、收入备注\n");
scanf("%s %s %s %s %d %s", shouruchucun[i].num[10], shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date[20], shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
shouru.total=shouru.total+shouru.jinge;
printf("kkkk");
g++;
printf("若要继续输入按1 or 按0\n");
scanf("%d", &i);
} while (i == 1);
}
void zhichu1() //支出输入
{
int i = 1;
do
{
printf("\n请输入收入类别、收入金额、收入备注\n");
scanf("%s %s %s %s %d %s", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
y = y + zhichuchucun[i].jinge;
p++;
printf("若要继续输入按1 or 按0\n");
scanf("%d", &i);
} while (i == 1);
}
void yuechaxun()//余额查询
{
int sum = 0;
sum = j - y;
printf("当前账户余额为: %d\n",sum);
}
void szfltj()//支付分类统计
{
int i;
double srsum = 0, zcsum = 0;
printf("执行收支分类统计功能!\n");
printf("收入统计");
printf("输入几条收入");
printf("请输入序号、名字、种类、日期、金额、备注");
for (i = 0; i < j; i++)
{
if (strcmp(shouruchucun[i].kind,"wx")==0 )
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
srsum = srsum + shouruchucun[i].jinge;
}
else if (0 == strcmp(shouruchucun[i].kind, "zfb"))
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
srsum = srsum + shouruchucun[i].jinge;
}
else
{
for (i = 0; i < j; i++)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
srsum = srsum + shouruchucun[i].jinge;
}
}
}
int k;
printf("支出统计");
printf("输入几条支出");
scanf("%d", &k);
for (i = 0; i < k; i++)
{
if ( strcmp(zhichuchucun[i].kind, "wx") == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
}
zcsum = zcsum + zhichuchucun[i].jinge;
if (strcmp(zhichuchucun[i].kind, "zfb") ==0)
{
for (i = 0; i < k; i++)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
}
zcsum = zcsum + zhichuchucun[i].jinge;
}
else
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
zcsum = zcsum + zhichuchucun[i].jinge;
}
}
}
void richang()
{
char i=0, k, t[50];
printf("输入当前月份:\n");
scanf("%s", &t);
printf("收入报表\n");
printf("账户号,姓名,数目,日期,类别,备注\n");
if (strcmp(zhichuchucun[i].date, t) == 0)
{
for (i = 0; i < g; i++)
{
printf("%d%s%d%s%s%s\n", &shouruchucun[i].num, &shouruchucun[i].name, &shouruchucun[i].kind, &shouruchucun[i].date, &shouruchucun[i].jinge, &shouruchucun[i].beizhu);
}
}
printf("支出报表\n");
printf("账户号,姓名,数目,日期,类别,备注\n");
if (strcmp(zhichuchucun[i].date, t) == 0)
{
for (i = 0; i < p; i++)
{
printf("%d%s%d%s%s%s\n", &zhichuchucun[i].num, &zhichuchucun[i].name, &zhichuchucun[i].kind, &zhichuchucun[i].date, &zhichuchucun[i].jinge, &zhichuchucun[i].beizhu);
}
}
printf("余额报表\n");
k = j - y;
printf("当前余额为&d", k);
}
void chaxun() //查询
{
char j[50];
int n = 0;
printf("******************\n");
printf("查询功能\n");
printf("1. 按序号查询\n");
printf("2. 按日期检索\n");
printf("3. 按类别检索\n");
printf("******************\n");
scanf("%d", &n);
switch (n)
{
case 1:
printf("输入序号: ");
scanf("%s", &j);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].num, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
}
if (strcmp(zhichuchucun[i].num, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
}
}
break;
case 2:
printf("日期查询: ");
scanf("%s", j);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].date, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
}
if (strcmp(zhichuchucun[i].num, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
}
}
break;
case 3:
printf("类别查询: \n");
scanf("%s", j);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].kind, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name[20], shouruchucun[i].kind[20], shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu[100]);
}
if (strcmp(zhichuchucun[i].num, j) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name[20], zhichuchucun[i].kind[20], zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu[100]);
}
}
break;
default:
printf("输入有误,请重新选择!\n");
}
}
int main()
{
int n = 0;
while (n != 7)
{
printf("******************\n");
printf("\t1.信息输入\n");
printf("\t2.信息检索\n");
printf("\t3.信息修改\n");
printf("\t4.信息删除\n");
printf("\t5.信息统计\n");
printf("\t6.信息输出\n");
printf("\t0.退出系统\n");
printf("******************\n");
scanf("%d", &n);
if (n == 0)
break;
switch (n)
{
case 1:
shuoru1();
break;
case 2:
zhichu1();
break;
case 3:
yuechaxun();
break;
case 4:
szfltj();
break;
case 5:
richang();
break;
case 6:
chaxun:
break;
default:
printf("输入有误,请重新选择!\n");
}
}
return 0;
}
运行界面截图看看
42行错误,将所有[20]这样的中括号带数字的都删掉。只需要变量名,不要带数组大小,带了就是数组的第20个元素的意思啦。
后面的printf语句也都是这样的错误
但57行又是写对了,参考一下吧。得统一啊
printf语句的num是对的,后面都错了
结构体的使用不太熟悉哦,里面错误比较多,给你修改了代码,自己参考,如果有问题私聊。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct//收入
{
char num[10];
char name[20];
char kind[20];
char date[20];
int jinge;
char beizhu[100];
int total;
}shouru;
shouru shouruchucun[100];
typedef struct//支出
{
char num[20];
char name[20];
char kind[20];
char date[20];
int jinge;
char beizhu[100];
}zhichu;
zhichu zhichuchucun[100];
int g = 0;//收入个数
int p = 0;//支出个数
int j = 0;//收入金额
int y = 0;//支出金额
void shuoru1() //收入输入
{
int i = 1;
shouru shouru1;
do
{
printf("\n请输入序号、姓名、收入类别、收入日期(如6)、收入金额、收入备注\n");
scanf("%s %s %s %s %d %s", shouruchucun[g].num, shouruchucun[g].name, shouruchucun[g].kind, shouruchucun[g].date, &shouruchucun[g].jinge, shouruchucun[g].beizhu);
shouru1.total=shouru1.total+shouru1.jinge;
printf("kkkk");
g++;
printf("若要继续输入按1 or 按0\n");
scanf("%d", &i);
} while (i == 1);
}
void zhichu1() //支出输入
{
int i = 1;
do
{
printf("\n请输入收入类别、收入金额、收入备注\n");
scanf("%s %s %s %s %d %s", zhichuchucun[p].num, zhichuchucun[p].name, zhichuchucun[p].kind, zhichuchucun[p].date, &zhichuchucun[p].jinge, zhichuchucun[p].beizhu);
y = y + zhichuchucun[i].jinge;
p++;
printf("若要继续输入按1 or 按0\n");
scanf("%d", &i);
} while (i == 1);
}
void yuechaxun()//余额查询
{
int sum = 0;
sum = j - y;
printf("当前账户余额为: %d\n",sum);
}
void szfltj()//支付分类统计
{
int i;
double srsum = 0, zcsum = 0;
int k,m;
printf("执行收支分类统计功能!\n");
printf("收入统计");
printf("输入几条收入小于等于%d\n",g);
scanf("%d", &m);
printf("请输入序号、名字、种类、日期、金额、备注");
for (i = 0; i < m; i++)
{
if (strcmp(shouruchucun[i].kind,"wx")==0 )
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
srsum = srsum + shouruchucun[i].jinge;
}
else if (0 == strcmp(shouruchucun[i].kind, "zfb"))
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
srsum = srsum + shouruchucun[i].jinge;
}
else
{
for (i = 0; i < j; i++)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
srsum = srsum + shouruchucun[i].jinge;
}
}
}
printf("支出统计");
printf("输入几条支出小于等于%d\n",p);
scanf("%d", &k);
for (i = 0; i < k; i++)
{
if ( strcmp(zhichuchucun[i].kind, "wx") == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
zcsum = zcsum + zhichuchucun[i].jinge;
if (strcmp(zhichuchucun[i].kind, "zfb") ==0)
{
for (i = 0; i < k; i++)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
zcsum = zcsum + zhichuchucun[i].jinge;
}
else
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
zcsum = zcsum + zhichuchucun[i].jinge;
}
}
}
void richang()
{
char i=0, k, t[50];
printf("输入当前月份:\n");
scanf("%s", t);
printf("收入报表\n");
printf("账户号,姓名,数目,日期,类别,备注\n");
if (strcmp(zhichuchucun[i].date, t) == 0)
{
for (i = 0; i < g; i++)
{
printf("%s%s%s%s%d%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
}
}
printf("支出报表\n");
printf("账户号,姓名,数目,日期,类别,备注\n");
if (strcmp(zhichuchucun[i].date, t) == 0)
{
for (i = 0; i < p; i++)
{
printf("%s%s%s%s%d%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
}
printf("余额报表\n");
k = j - y;
printf("当前余额为%d", k);
}
void chaxun() //查询
{
char tab[50];
int n = 0;
printf("******************\n");
printf("查询功能\n");
printf("1. 按序号查询\n");
printf("2. 按日期检索\n");
printf("3. 按类别检索\n");
printf("******************\n");
scanf("%d", &n);
switch (n)
{
case 1:
printf("输入序号: ");
scanf("%s", tab);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].num, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
}
if (strcmp(zhichuchucun[i].num, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
}
break;
case 2:
printf("日期查询: ");
scanf("%s", tab);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].date, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
}
if (strcmp(zhichuchucun[i].num, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
}
break;
case 3:
printf("类别查询: \n");
scanf("%s", tab);
for (int i = 0; i < g; i++)
{
if (strcmp(shouruchucun[i].kind, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", shouruchucun[i].num, shouruchucun[i].name, shouruchucun[i].kind, shouruchucun[i].date, shouruchucun[i].jinge, shouruchucun[i].beizhu);
}
if (strcmp(zhichuchucun[i].num, tab) == 0)
{
printf("序号:%s 名字:%s 种类:%s 日期:%s 金额:%d 备注:%s\n", zhichuchucun[i].num, zhichuchucun[i].name, zhichuchucun[i].kind, zhichuchucun[i].date, zhichuchucun[i].jinge, zhichuchucun[i].beizhu);
}
}
break;
default:
printf("输入有误,请重新选择!\n");
}
}
int main()
{
int n = 0;
while (n != 7)
{
printf("******************\n");
printf("\t1.信息输入\n");
printf("\t2.信息检索\n");
printf("\t3.信息修改\n");
printf("\t4.信息删除\n");
printf("\t5.信息统计\n");
printf("\t6.信息输出\n");
printf("\t0.退出系统\n");
printf("******************\n");
scanf("%d", &n);
if (n == 0)
break;
switch (n)
{
case 1:
shuoru1();
break;
case 2:
zhichu1();
break;
case 3:
yuechaxun();
break;
case 4:
szfltj();
break;
case 5:
richang();
break;
case 6:
chaxun:
break;
default:
printf("输入有误,请重新选择!\n");
}
}
return 0;
}
Q:请问,我写的子程序在黑窗口中无法成功运行,每次输入完命令后窗口会立即关闭,不知道是什么原因,希望能得到帮助,谢谢。
A:这个问题可能是由于程序执行结束后窗口自动关闭导致的。你可以在程序的末尾添加代码来让程序暂停,以便你有时间查看程序执行的输出。你可以试试用以下这段代码:
// 在代码的末尾添加以下一行,以等待用户输入,防止程序结束后黑窗口自动关闭。
system("pause");
此外,如果你使用的是 Visual Studio,你也可以添加以下一行:
system("pause > null");
该语句可以将暂停输出到 null 空设备上,避免弹出 CMD 窗口。如果你在其他 IDE 或者命令行上运行程序,你可以在命令行上执行 exe 文件,并手动输入 pause 命令来达到同样的目的。