个人账簿管理系统.docx
《个人账簿管理系统.docx》由会员分享,可在线阅读,更多相关《个人账簿管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
个人账簿管理系统
学号:
课程设计
题目
个人账簿管理系统
教学院
计算机
专业
信息管理
班级
姓名
指导教师
2011
年
12
月
30
日
课程设计任务书
2011~2012学年第一学期
学生姓名:
专业班级:
10信息管理
指导教师:
工作部门:
计算机学院
一、课程设计题目:
个人账簿管理系统
二、课程设计内容
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
该系统采用了WindowsXP操作系统结合VisualC++6.0,TC2.0等软件开发,可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
三、进度安排
1.系统设计,确定函数功能及其实现过程;
2.根据前面的结果,编写程序清单,进行调试;
3.经过反复的编译,调试,测试,程序运行成功;
4.撰写课程设计报告,完成整个论文报告的工作,并打印;课题答辩。
四、基本要求
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3.进一步要求:
完成对每月的开支排序,以及完成系统查询功能;
4.应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。
一概述
该课程设计主要设计个人账簿管理系统已记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女交用费用,水电费,医疗费,储蓄等。
在课程设计中,用到了C语言以及数据结构中的相关知识,当然也有少数参考了其他人对某些问题的处理经验。
对于进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况,可以对某月的开支进行删除操作。
二总体方案设计
1.整体设计思路
系统共分五个子系统:
信息输入,信息浏览及排序,信息查询,信息更改,文件操作。
在相应的系统内可完成相应的功能。
各模块相对独立,每个模块用一个大型的函数来处理数据。
主程序:
1、信息输入2、信息浏览及排序3、信息查询4、信息更改
5、文件操作0、退出管理系统
2.输入系统
功能:
输入数据,然后将数据写入文件。
算法:
intenter(MYBILLt[])
for(i=0;i{scanf("%s%s%s%s%s%s%s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy);
f=atof(t[i].spxf)+atof(t[i].fzfy)+atof(t[i].znjy)+atof(t[i].sdfy)+atof(t[i].ylfy)+atof(t[i].cxfy);
sprintf(t[i].srfy,"%.2f",f);}
voidsave(MYBILLt[],intn)
for(i=0;i{fprintf(fp,"%-8s%4s%13s%8s%7s%12s%8s%12s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].srfy,t[i].cxfy);
fprintf(fp,"\r\n");}
3.排序系统
功能:
1、按月份排序2、按输入排序
算法:
voidmonthsort(MYBILLt[],intn)
for(i=0;i{flag=0;for(j=0;j0){
flag=1;temp=t[j];t[j]=t[j+1];t[j+1]=temp;}
if(flag==0)break;}
voidsrfysort(MYBILLt[],intn)
for(i=0;i{flag=0;for(j=0;j0){
flag=1;temp=t[j];t[j]=t[j+1];t[j+1]=temp;}
if(flag==0)break;}
4.查询系统
功能:
按月份循序查找,调用输出函数输出
算法:
voidmonthsearch(MYBILLt[],intn)
for(i=0;i{if(strcmp(s,t[i].month)==0)
{mprint(t[i]);break;}}
voidmprint(MYBILLtemp)
printf("%8s%6s%10s%10s%10s%10s%10s%10s\n",temp.month,temp.spxf,temp.fzfy,temp.znjy,temp.sdfy,temp.ylfy,temp.cxfy,temp.srfy);
5.删除系统
功能:
先是查找要删除的月份账单,然后对其删除,删除某月账单后,其他的月份依次向前移动
算法:
intdelet(MYBILLt[],intn)//删除信息
for(j=i+1;j{strcpy(t[j-1].month,t[j].month);
.....................................}
6.其他部分函数功能
voidlist(MYBILLt[],intn)//输出
voidrewrite(MYBILLt[],intn)//根据查找月份,修改信息
intadd(MYBILLt[],intn)//添加信息
intload(MYBILLt[])//读取文件
voidcopy()//另生成新文件
7.程序流程图
三命令行界面代码
#include"stdio.h"
#include"stdlib.h"
#include
#include"conio.h"
typedefstruct
{
charmonth[10];
charspxf[5];
charsdfy[5];
charylfy[5];
charcxfy[5];
charfzfy[5];
charznjy[5];
charsrfy[20];
}MYBILL;
voidmprint(MYBILLtemp)
{
printf("月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");
printf("----------------------------------------------------------------------------\n");
printf("%8s%6s%10s%10s%10s%10s%10s%10s\n",temp.month,temp.spxf,temp.fzfy,temp.znjy,
temp.sdfy,temp.ylfy,temp.cxfy,temp.srfy);
}
//输入信息
intenter(MYBILLt[])
{
inti,n;
doublef;
system("cls");
printf("请确定您要输入几个月的账单:
");
scanf("%d",&n);
if(n>0)
{
printf("请输入您的个人账单信息:
\n");
printf("\n月份食品消费房租费用子女费用水电费用医疗费用储蓄费用\n");
printf("--------------------------------------------------------------------------------\n");
for(i=0;i{
scanf("%s%s%s%s%s%s%s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy);
f=atof(t[i].spxf)+atof(t[i].fzfy)+atof(t[i].znjy)+atof(t[i].sdfy)+atof(t[i].ylfy)+atof(t[i].cxfy);
sprintf(t[i].srfy,"%.2f",f);
printf("--------------------------------------------------------------------------------\n");
}
printf("信息录入成功!
");
returnn;
}
if(n<=0)printf("对不起,您输入的月数不正确!
\n");
exit(0);
}
//输出
voidlist(MYBILLt[],intn)
{
inti;
system("cls");
printf("***********************************个人账簿信息*********************************\n");
printf("总共有%d个月的账单\n",n);
printf("月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\n");
for(i=0;i{
printf("%8s%6s%10s%10s%10s%10s%10s%10s\n",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy,t[i].srfy);
if((i+1)%10==0)
{
printf("请输入任意键继续....\n");
getchar();
}
}
}
//根据月份查找,参数有结构体变量,长度,字符指针
intmonthfind(MYBILLt[],intn,char*s)
{
inti;
for(i=0;i{
if(strcmp(s,t[i].month)==0)
returni;
}
returni;
}
//根据月份查找,删除信息
intdelet(MYBILLt[],intn)
{
chars[20];
intch=0;
inti,j;
printf("请输入您要删除账单的月份:
\n");
scanf("%s",s);
i=monthfind(t,n,s);
if(i>n-1)
printf("对不起,没有找到要删除的月份的账单!
\n");
else
{
mprint(t[i]);
printf("您确认要删除该月的账单么?
(1.是/0.否)\n");
scanf("%d",&ch);
if(ch==1)
{
for(j=i+1;j{
strcpy(t[j-1].month,t[j].month);
strcpy(t[j-1].spxf,t[j].spxf);
strcpy(t[j-1].fzfy,t[j].fzfy);
strcpy(t[j-1].znjy,t[j].znjy);
strcpy(t[j-1].sdfy,t[j].sdfy);
strcpy(t[j-1].ylfy,t[j].ylfy);
strcpy(t[j-1].cxfy,t[j].cxfy);
strcpy(t[j-1].srfy,t[j].srfy);
}
n--;
printf("记录删除成功!
\n");
}
}
returnn;
}
//根据查找月份,修改信息
voidrewrite(MYBILLt[],intn)
{
chars[20];
intch=0;
inti;
doublef;
printf("请输入您要修改的账单的月份:
\n");
scanf("%s",s);
i=monthfind(t,n,s);
if(i>n-1)
printf("对不起,没有找到要修改的记录!
\n");
else
{
mprint(t[i]);
printf("您确定要修改这条记录么?
(1.是/0.否)\n");
scanf("%d",&ch);
if(ch==1)
{
printf("请输入新的记录\n");
printf("月份食品消费房租费用子女教育费用水电费用医疗费用储蓄费用\n");
printf("---------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s%s%s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy);
f=atof(t[i].spxf)+atof(t[i].fzfy)+atof(t[i].znjy)+atof(t[i].sdfy)+atof(t[i].ylfy)+atof(t[i].cxfy);
sprintf(t[i].srfy,"%.2f",f);
printf("---------------------------------------------------------------------------\n");
printf("记录修改成功!
\n");
}
}
}
//添加信息
intadd(MYBILLt[],intn)
{
MYBILLtemp;
inti,j;
doublef;
chars[20];
printf("请输入您要插入的记录:
\n");
printf("月份食品消费房租费用子女教育费用水电费用医疗费用储蓄费用\n");
printf("--------------------------------------------------------------------------------\n");
scanf("%s%s%s%s%s%s%s",temp.month,temp.spxf,temp.fzfy,temp.znjy,
temp.sdfy,temp.ylfy,temp.cxfy);
f=atof(temp.spxf)+atof(temp.fzfy)+atof(temp.znjy)+atof(temp.sdfy)+atof(temp.ylfy)+atof(temp.cxfy);
sprintf(temp.srfy,"%.2f",f);
printf("--------------------------------------------------------------------------------\n");
printf("请输入您要插入的位置:
\n");
scanf("%s",s);
i=monthfind(t,n,s);//根据查找月份,找到要添加的位置
for(j=n-1;j>=i;j--)
{
strcpy(t[j+1].month,t[j].month);
strcpy(t[j+1].spxf,t[j].spxf);
strcpy(t[j+1].fzfy,t[j].fzfy);
strcpy(t[j+1].znjy,t[j].znjy);
strcpy(t[j+1].sdfy,t[j].sdfy);
strcpy(t[j+1].ylfy,t[j].ylfy);
strcpy(t[j+1].cxfy,t[j].cxfy);
strcpy(t[j+1].srfy,t[j].srfy);
}
strcpy(t[i].month,temp.month);//在最后添加
strcpy(t[i].spxf,temp.spxf);
strcpy(t[i].fzfy,temp.fzfy);
strcpy(t[i].znjy,temp.znjy);
strcpy(t[i].sdfy,temp.sdfy);
strcpy(t[i].ylfy,temp.ylfy);
strcpy(t[i].cxfy,temp.cxfy);
strcpy(t[i].srfy,temp.srfy);
n++;
printf("记录插入成功!
\n");
returnn;
}
//写入文件
voidsave(MYBILLt[],intn)
{
inti;
FILE*fp;
if((fp=fopen("mybill.txt","wb"))==NULL)
{
printf("文件不能打开!
\n");
exit
(1);
}
fprintf(fp,"%d",n);
fprintf(fp,"\r\n");
for(i=0;i{
fprintf(fp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy,t[i].srfy);
fprintf(fp,"\r\n");
}
fclose(fp);
}
//读取文件
intload(MYBILLt[])
{
inti,n;
FILE*fp;
if((fp=fopen("mybill.txt","rb"))==NULL)//只读取文件
{
printf("对不起,不能打开文件!
\n");
exit
(1);
}
fscanf(fp,"%d",&n);
for(i=0;ifscanf(fp,"%s%s%s%s%s%s%s%s",t[i].month,t[i].spxf,t[i].fzfy,t[i].znjy,
t[i].sdfy,t[i].ylfy,t[i].cxfy,t[i].srfy);
fclose(fp);
returnn;
}
//按月份排序
voidmonthsort(MYBILLt[],intn)
{
inti,j,flag;
MYBILLtemp;
for(i=0;i{
flag=0;
for(j=0;jif((strcmp(t[j].month,t[j+1].month))>0)//前后两个字符串相互比较
{
flag=1;
temp=t[j];
t[j]=t[j+1];
t[j+1]=temp;
}
if(flag==0)break;
}
printf("按月份排序成功!
\n");
}
//按收入排序
voidsrfysort(MYBILLt[],intn)
{
inti,j,flag;
MYBILLtemp;
for(i=0;i{
flag=0;
for(j=0;jif((strcmp(t[j].srfy,t[j+1].srfy))>0)
{
flag=1;
temp=t[j];
t[j]=t[j+1];
t[j+1]=temp;
}
if(flag==0)break;
}
printf("按每月收入排序成功!
\n");
}
//另生成新文件
voidcopy()
{
charoutfile[20];
inti,n;
MYBILLt;
FILE*sfp,*tfp;
if((sfp=fopen("mybill.txt","rb"))==NULL)
{
printf("对不起,不能打开您所需要的文件!
\n");
exit
(1);
}
printf("请输入目标文件名,例如:
c:
\\f1\\mybill.txt\n");
scanf("%s",outfile);
if((tfp=fopen(outfile,"wb"))==NULL)
{
printf("对不起,不能打开您所需要的文件!
\n");
exit
(1);
}
fscanf(sfp,"%d",&n);//从sfp中读取文件
fprintf(tfp,"%d",n);//写入tfp中
fprintf(tfp,"\r\n");
for(i=0;i{
fscanf(sfp,"%s%s%s%s%s%s%s%s",t.month,t.spxf,t.fzfy,t.znjy,
t.sdfy,t.ylfy,t.cxfy,t.srfy);
fprintf(tfp,"%-8s%4s%13s%8s%7s%12s%12s%8s",t.month,t.spxf,t.fzfy,t.znjy,
t.sdfy,t.ylfy,t.cxfy,t.srfy);
fprintf(tfp,"\r\n");
}
fclose(sfp);
fclose(tfp);
}
//根据月份查找,参数结构体,长度
voidmonthsearch(MYBILLt[],intn)
{
chars[20];
inti;
printf("请输入您要查找的月份:
");
scanf("%s",s);
for(i=0;i{
if(strcmp(s,t[i].month)==0)
{
mprint(t[i]);//输出该月信息
break;
}
}
if(i==n)
printf("对不起,查找不到您所需要的信息!
");
}
voidshowpaixu(MYBILLbill[],intlength)
{
intchoice;
menu1:
system("cls");
printf("*************************个人账簿信息管理系统***********************\n\n");
printf("1.显示全部信息\n\n");
printf("2.按月份顺序排序\n\n");
printf("3.按每月收入排序\n\n");
printf("0.返回上一级菜单\n\n");
printf("请选择(0-3)\n");
scanf("%d",&c