📄 ifmain.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
////////////////////////////////////
//typedef int KeyType;
struct SpendM
{
char date[16];
char even[40];
float spmonney;
};
///////////////////////////////////////////
void data_write();
void data_read();
void show_record();
void data_record();
void data_delete();
void data_sort();
void show_Addincome();
void show_Addpayfor();
void show_pay_add();
void firstprint();
/////////////////////////////////////////
typedef SpendM DataType;
//////////////////////////////////////////////
#include "SLnode.h"
///////////////////////////////////////////////
SLNode *SMonney;
int NUM=0;
/////////////////////////////////////////////////
int main()
{
ListInitiate(&SMonney);
int SeletNum;
FILE *fp;
firstprint();
if ((fp=fopen("save.txt","r"))==NULL)
{
printf("欢迎使用个人帐簿管理系统!\n");
data_write();
printf("记录文档已经创建!\n");
}
data_read();
printf("\n");
while(1)
{
printf(">>请选择你需要的操作(1~10): ");
scanf("%d",&SeletNum);
switch(SeletNum)
{
//////////////////////////查看总开支情况//////////////////////////////////
case 1:
show_record();
break;
case 2:
data_record();
break;
case 3:
data_delete();
break;
case 4:
data_sort();
break;
case 5:
show_Addincome();
break;
case 6:
show_Addpayfor();
break;
case 7:
show_pay_add();
break;
case 8:
system("cls");
firstprint();
break;
case 9:
return 0;
break;
case 10:
fp=fopen("save.txt","w");
fwrite(NULL,0,1,fp);
return 0;
break;
}
}
fclose(fp);
return 0;
if(ListLength(SMonney)!=0)Destory(&SMonney);
}
//////////////////////////查看总开支情况////////////////////
void show_record()
{
int i;
DataType d;
if (ListLength(SMonney)==0)
{
printf("\n没任何记录!\n");
printf("\n请重新选择\n\n\n");
}
else
{
printf("\n\t日期(月/日/年)\t\t原因\t收支(-)情况(负数指支出)\n");
for(i=0;i<ListLength(SMonney);i++)
{
ListGet(SMonney,i,&d);
printf("%d\t%s\t\t%s\t\t%f\n",i+1,d.date,d.even,d.spmonney);
}
}
}
/////////////////////记录新开支/////////////////////
void data_record()
{
int j=0;
int y,m,t;
char yes_no[1];
char timerc[16];
_strdate(timerc);
DataType d;
printf("是否由电脑自动写上日期?(Y N) ");
scanf("%s",yes_no);
if (yes_no[0]=='y'||yes_no[0]=='Y')
{
strcpy(d.date,timerc);
printf("电脑日期为:%s\n",d.date);
}
else
{
while(j==0)
{
printf("请输入时间(月/日/年 例:今天为%s)\n: ",timerc);
scanf("%s",d.date);
m=(int)((d.date[0]-48)*10+d.date[1]-48);
t=(int)((d.date[3]-48)*10+d.date[4]-48);
y=(int)((d.date[6]-48)*10+d.date[7]-48);
if(((m<0||m>12)&&(t<0||t>31)&&(y<0||y>99))!=0)
printf("输入错误!请按月/日/年要求输入!\n");
else j=1;
}
}
printf("输入收支原因: ");
scanf("%s",d.even);
printf("输入收支多少 元 (支出请在前加负号(-)): ");
scanf("%f",&d.spmonney);
ListInsert(SMonney,ListLength(SMonney),d);
data_write();
printf("\n记录成功!\n");
}
//////////////3.删除开支记录///////////////////////
void data_delete()
{
int i;
if (ListLength(SMonney)==0)
{
printf("\n没任何记录!\n");
printf("\n请重新选择\n\n\n");
}
else
{
show_record();
printf("\n请输入要删除的开支的号码: ");
scanf("%d",&i);
i--;
if(i<0||i>ListLength(SMonney))printf("超出范围!\n\n\n");
else
{
if(ListDelete(SMonney,i)==0) printf("\n删除失败!\n");
else
printf("\n删除成功!\n");
data_write();
}
}
}
//////////////////4排列开支情况///////////////////
void data_sort()
{
int i,j,small,n;
SLNode *SMonney2;
DataType temp,x,y,d;
ListInitiate(&SMonney2);
n=ListLength(SMonney);
for(i=0;i<n;i++)
{
ListGet(SMonney,i,&y);
ListInsert(SMonney2,i,y);
}
for(i=0;i<n-1;i++)
{
small=i;
for(j=i+1;j<n;j++)
{
ListGet(SMonney2,small,&x);
ListGet(SMonney2,j,&y);
if(y.spmonney<x.spmonney)small=j;
}
if(small!=i)
{
ListGet(SMonney2,i,&temp);
ListGet(SMonney2,small,&y);
ListDelete(SMonney2,i);
ListInsert(SMonney2,i,y);
ListDelete(SMonney2,small);
ListInsert(SMonney2,small,temp);
}
}
printf("\n\t日期(月/日/年)\t\t原因\t收支(-)情况(负数指支出)\n");
for(i=0;i<ListLength(SMonney2);i++)
{
ListGet(SMonney2,i,&d);
printf("%d\t%s\t\t%s\t\t%f\n",i+1,d.date,d.even,d.spmonney);
}
Destory(&SMonney2);
}
///////////////5.查看总收入///////////////////////
void show_Addincome()
{
show_record();
float addall=0;
DataType d;
for(int i=0;i<ListLength(SMonney);i++)
{
ListGet(SMonney,i,&d);
if(d.spmonney>=0)
{
addall=addall+d.spmonney;
}
}
printf("\n");
printf ("总收入为: %f 元\n\n\n\n",addall);
}
//////////////////查看总支出/////////////////////////
void show_Addpayfor()
{
show_record();
float addpay=0;
DataType d;
for(int i=0;i<ListLength(SMonney);i++)
{
ListGet(SMonney,i,&d);
if(d.spmonney<0)
{
addpay=addpay+d.spmonney;
}
}
printf("\n");
printf ("总支出为: %f 元\n\n\n\n",-addpay);
}
///////////////////7.查看剩于多少钱//////////////////////////
void show_pay_add()
{
show_record();
float addpay=0,addall=0,n;
DataType d;
for(int i=0;i<ListLength(SMonney);i++)
{
ListGet(SMonney,i,&d);
if(d.spmonney<0) addpay=addpay+d.spmonney;
else addall=addall+d.spmonney;
}
n=addpay+addall;
if(n>=0) printf("所剩的钱还有: %f 元",n);
if(n<0) printf("负资产中!还欠: %f 元",-n);
printf("\n\n");
}
//////////////////////////////////////////////////////
//////////////////////////////文档写入////////
void data_write()
{
int i;
FILE *fp;
DataType d;
fp=fopen("save.txt","w");
NUM=ListLength(SMonney);
fwrite(&NUM,sizeof(int),1,fp);
for(i=0;i<NUM;i++)
{
if(ListGet(SMonney,i,&d)==0) printf("\n文档写入出错!\n") ;
fwrite(&d,sizeof(DataType),1,fp);
}
fclose(fp);
}
//////////////////////////////文档读取////////
void data_read()
{
int i;
FILE *fp;
DataType d;
fp=fopen("save.txt","r");
fread(&NUM,sizeof(int),1,fp);
for(i=0;i<NUM;i++)
{
fread(&d,sizeof(DataType),1,fp);
ListInsert(SMonney,0,d);
}
fclose(fp);
}
/////////////////////////////////////////////////
void firstprint()
{
printf
( "\t**********************************************************\n");
printf("\t** 欢 迎 使 用 个 人 帐 簿 管 理 系 统 \t**\n");
printf("\t** 作者:吕迎、李钧陶、冯敏飞\t**\n");
printf("\t** 1.查看总开支情况; \t**\n");
printf("\t** 2.记录新开支; \t**\n");
printf("\t** 3.删除开支记录; \t**\n");
printf("\t** 4.排列开支情况; \t**\n");
printf("\t** 5.查看总收入; \t**\n");
printf("\t** 6.查看总支出; \t**\n");
printf("\t** 7.查看剩于多少钱; \t**\n");
printf("\t** 8.清屏; \t**\n");
printf("\t** 9.退出继统 ; \t**\n");
printf("\t** 10.删除开支记录; \t**\n");
printf("\t** ——忙人工作舍\t**\n");
printf("\t**********************************************************\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -