⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifmain.cpp

📁 以《个人帐簿管理系统设计》为题的用C语言写的《数据结构》课和设计
💻 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 + -