#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define SIZE 12
#define FILENAME "information.txt"
struct IN
{
char name[10]; /*姓名*/
char sex[5]; /*性别*/
int age; /*年龄*/
char address[100]; /*住址*/
int telephone[15]; /*电话*/
float yue; /*余额*/
}infor;
struct MI
{
int month;
float into;
float outto;
char inaim[20];
char outaim[20];
}ioi[];/*日期,收入/支出 金额 收入来源/支出目的*/
void displayMenu()
{
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("+ 个人收支管理系统 +\n");
printf("+ +\n");
printf("+ 1. 个人信息输入 +\n");
printf("+ 2. 添加新的收支信息 +\n");
printf("+ 3. 按月份排序打印出收支清单 +\n");
printf("+ 4. 删除已有信息 +\n");
printf("+ 5. 修改已有信息 +\n");
printf("+ 6. 统计总收入 +\n");
printf("+ 7. 统计总支出 +\n");
printf("+ 8. 查询当前个人信息及余额 +\n");
printf("+ 9.把收支信息输入到文件 +\n");
printf("+ 10.从文件中读入收支信息 +\n");
printf("+ 11.把个人信息输入到文件 +\n");
printf("+ 12.从文件中读入个人信息 +\n");
printf("+ 13.结束程序 +\n");
printf("+ +\n");
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
}
/*******************************************************
功能:从文件读信息到结构体数组中
参数:
参数1:ioi[]
类型:MI
说明:用来存储从文件读到的收支信息
返回值:i
类型:int
说明:表示实际读取到的个数
*******************************************************/
int readFromFile1(MI ioi[])
{
FILE *fp=NULL;
int i=0;
fp=fopen(FILENAME,"rb"); /*打开文件*/
if(fp!=NULL)
{
while(!feof(fp)) /*从文件中读入月份*/
{
if(fread(ioi+i,sizeof(MI),1,fp))
i++;
}
printf("收支信息已读入\n");
fclose(fp);
}
return i;
}
void readFromFile2(struct IN *infor)
{
FILE *fp=NULL;
int i=0;
fp=fopen("personal.txt","rb");
if(fp==NULL)
{
printf("打开文件出错!\n");
exit(0);
}
if(!feof(fp))
{ fread(infor,sizeof(struct IN),1,fp);
}
printf("个人信息已读入\n");
fclose(fp);
}
void inputInfo1(struct IN *infor)
{
int endFlag=0;
printf("请输入个人信息:\n");
while(1)
{
printf("姓名:");
scanf("%s",infor->name);
if(infor->name==0)
{
endFlag=1;
break;
}
printf("\n");
break;
}
while(1)
{
printf("性别:");
scanf("%s",infor->sex);
printf("\n");
break;
}
while(1)
{
printf("年龄:");
scanf("%d",&infor->age);
printf("\n");
break;
}
while(1)
{
printf("住址:");
scanf("%s",infor->address);
printf("\n");
break;
}
while(1)
{
printf("电话:");
scanf("%d",&infor->telephone);
printf("\n");
break;
}
while(1)
{
printf("余额:");
scanf("%f",&infor->yue);
printf("\n");
break;
}
while(getchar()!='\n')
continue;
}
/*******************************************************
功能:判断月份是否唯一
参数:
参数1:ioi[]
类型:MI
说明:存储个人信息的数组
参数2:length
类型:int
说明:表示实际数组的长度
参数2: ioimonth
类型:int
说明:要判断的月份
返回值:1或0(flag)
类型:int
说明:1表示月份唯一;0表示月份不唯一
*******************************************************/
int unique(MI ioi[],int length,int ioimonth)
{
int flag=1,i;
for(i=0;i<length;i++)
{
if(ioi[i].month==ioimonth)
{
flag=0;
break;
}
}
return flag;
}
int inputInfo2(struct MI ioi[],int length)
{
int i=length;
int endFlag=0;
printf("是否确认结束(以0为结束):\n");
while(i<SIZE)
{
while(1)
{
int flag;
printf("月份:");
scanf("%d",&ioi[i].month);
if(ioi[i].month>12||ioi[i].month<0)
printf("月份有误,请重新输入!\n");
else if(ioi[i].month==0)
{
endFlag=1;
break;
}
if(ioi[i].month<=12&&ioi[i].month>0)
{
flag=unique(ioi,i,ioi[i].month);
if(flag) break;
printf("该月份已经存在,请重新输入!\n");
}
}
if(endFlag==1)
break;
while(1)
{
printf("收入:");
scanf("%f",&ioi[i].into);
printf("\n");
break;
}
while(1)
{
printf("支出:");
scanf("%f",&ioi[i].outto);
printf("\n");
break;
}
while(1)
{
printf("收入来源:");
scanf("%s",ioi[i].inaim);
printf("\n");
break;
}
while(1)
{
printf("支出目的:");
scanf("%s",ioi[i].outaim);
printf("\n");
break;
}
while(getchar()!='\n')
continue;
i++;
}
return i;/*新增完成后,有多少个收支信息*/
}
/*******************************************************
功能:将收支信息按月份从小到大排序(选择法)并打印
参数:
参数1:ioi
类型:IM
说明:用来存储收支信息的数组
参数2:length
类型:int
说明:表示实际数组的长度
返回值:无
*******************************************************/
void sortScore(MI ioi[],int length)
{
int i=0,j=0,k=0;
MI s;
for(i=0;i<length;i++)
{ /* 从未排好序的收支信息中找到月份最小的最小,记下标放入k */
k=i;
for(j=i+1;j<length;j++)
if(ioi[j].month<ioi[k].month)
k=j;
/* 交换 ioi[i] and ioi[k] */
s=ioi[k];
ioi[k]=ioi[i];
ioi[i]=s;
}
}
void outputInfo(MI ioi[],int length)
{
int i=0;
printf(" 月份 收入 支出 收入来源 支出目的\n\n");
for(;i<length;i++)
{
printf("%8d %14f %14f %14s %14s",ioi[i].month,ioi[i].into,ioi[i].outto,ioi[i].inaim,ioi[i].outaim);
printf("\n");
}
printf("\n\n");
}
/*******************************************************
功能:根据月份删除数组中收支信息
参数:
参数1:ioi
类型:IM
说明:用来存储收支信息的数组
参数2:length
类型:int
说明:表示实际数组的长度
参数3:stuNum
类型:int
说明:表示要删除的月份
返回值:length
删除后月份的个数
*******************************************************/
int deleteInfoByNumber(MI ioi[],int length,int stuNum)
{
int i,j;
char choice;
for(i=0;i<length;i++)
{
if(stuNum==ioi[i].month)
{
printf("找到啦!它的下标是:%d\n", i);
printf("%d %f %f %s %s","月份", "收入", "支出", "收入来源", "支出目的\n");
printf("%d %5f %5f %5s %5s\n",ioi[i].month,ioi[i].into,ioi[i].outto,ioi[i].inaim,ioi[i].outaim);
break;
}
}
if(i<length)
{
printf("你确实要删除这个月的收支信息吗?(Y/N)");
getchar();
scanf("%c",&choice);
if(choice=='Y'||choice=='y')
{
for(j=i;j<length;j++)
ioi[j]=ioi[j+1];
length--;
printf("删除成功!\n");
}
}
else
printf("\n指定的月份收支信息不存在!\n");
return length;
}
/*******************************************************
功能:根据月份修改数组中信息
参数:
参数1:ioi
类型:MI
说明:用来存储收支信息的数组
参数2:length
类型:int
说明:表示实际数组的长度
参数3:stuNum
类型:int
说明:表示要修改的信息的月份
返回值:无
*******************************************************/
void editInfoByNumber(MI ioi[],int length,int stuNum)
{
int i=0;
int choice,flag;
for(i=0;i<length;i++)
{
if(stuNum==ioi[i].month)
{
printf("找到啦!它的下标是:%d\n", i);
printf("%d %f %f %s %s"," 月份", "收入", "支出", "收入来源", "支出目的\n");
printf("%d %f
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
c++课程设计-个人收支管理系统.zip (14个子文件)
个人收支管理系统9.9成品.ncb 33KB
个人收支管理系统9.9成品.cpp 12KB
个人收支管理系统9.9成品.opt 48KB
使用说明.zip 27KB
个人收支管理系统9.9成品.dsw 554B
个人收支管理系统9.9成品.dsp 4KB
个人收支管理系统9.9成品.plg 1KB
Debug
个人收支管理系统9.9成品.pch 221KB
vc60.pdb 52KB
个人收支管理系统9.9成品.exe 212KB
个人收支管理系统9.9成品.obj 38KB
个人收支管理系统9.9成品.pdb 505KB
个人收支管理系统9.9成品.ilk 227KB
vc60.idb 33KB
共 14 条
- 1
资源评论
努力学习的小初雪
- 粉丝: 313
- 资源: 150
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功