个人账簿管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号:
课程设计
题目个人账簿管理系统
教学

计算机


信息管理




指导教师20
11年1
2月3
0日
课程设计任务书
2011~2012学年第一学期
学生姓名:专业班级: 10信息管理
指导教师:工作部门:计算机学院
一、课程设计题目:个人账簿管理系统
二、课程设计内容
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。

该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发,可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。

三、进度安排
1.系统设计,确定函数功能及其实现过程;
2.根据前面的结果,编写程序清单,进行调试;
3.经过反复的编译,调试,测试,程序运行成功;
4.撰写课程设计报告,完成整个论文报告的工作,并打印;课题答辩。

四、基本要求
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:建立一个文件,包括某人5个月的收支情况,能对文件中的信息
进行扩充(追加),修改和删除;
3.进一步要求:完成对每月的开支排序,以及完成系统查询功能;
4.应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰
美观。

目录
二、课程设计内容 (1)
三、进度安排 (1)
四、基本要求 (1)
一概述 (2)
二总体方案设计 (3)
1.整体设计思路 (3)
2. 输入系统 (3)
3.排序系统 (3)
4.查询系统 (4)
5.删除系统 (4)
6.其他部分函数功能 (4)
三命令行界面代码 (5)
四程序的调试与运行结果说明 (17)
五课程设计总结 (20)
参考文献 (21)
数据结构课程设计成绩评定表 (21)
一概述
该课程设计主要设计个人账簿管理系统已记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女交用费用,水电费,医疗费,储蓄等。

在课程设计中,用到了C语言以及数据结构中的相关知识,当然也有少数参考了其他人对某些问题的处理经验。

对于进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况,可以对某月的开支进行删除操作。

二总体方案设计
1.整体设计思路
系统共分五个子系统:信息输入,信息浏览及排序,信息查询,信息更改,文件操
作。

在相应的系统内可完成相应的功能。

各模块相对独立,每个模块用一个大型的函数
来处理数据。

主程序:1、信息输入 2、信息浏览及排序 3、信息查询 4、信息更改
5、文件操作 0、退出管理系统
2. 输入系统
功能:输入数据,然后将数据写入文件。

算法:int enter(MYBILL t[])
for(i=0;i<n;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);}
void save(MYBILL t[],int n)
for(i=0;i<n;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、按输入排序
算法:void monthsort(MYBILL t[],int n)
for(i=0;i<n;i++)
{flag=0; for(j=0;j<n-1;j++) if((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; }
void srfysort(MYBILL t[],int n)
for(i=0;i<n;i++)
{ flag=0; for(j=0;j<n-1;j++)if((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; }
4.查询系统
功能:按月份循序查找,调用输出函数输出
算法:void monthsearch(MYBILL t[],int n)
for(i=0;i<n;++i)
{if(strcmp(s,t[i].month)==0)
{mprint(t[i]); break;}}
void mprint(MYBILL temp)
printf("%8s%6s%10s%10s%10s%10s%10s%10s\n",temp.month,temp.spxf,temp.fzf y,temp.znjy,temp.sdfy,temp.ylfy,temp.cxfy,temp.srfy);
5.删除系统
功能:先是查找要删除的月份账单,然后对其删除,删除某月账单后,其他的月份依次向前移动
算法:int delet(MYBILL t[],int n)//删除信息
for(j=i+1;j<n;j++)
{strcpy(t[j-1].month,t[j].month);
.....................................}
6.其他部分函数功能
void list(MYBILL t[],int n)//输出
void rewrite(MYBILL t[],int n)//根据查找月份,修改信息
int add(MYBILL t[],int n)//添加信息
int load(MYBILL t[])//读取文件
void copy()//另生成新文件
7.程序流程图
三命令行界面代码
#include "stdio.h"
#include "stdlib.h"
#include <string.h>
#include "conio.h"
typedef struct
{
char month[10];
char spxf[5];
char sdfy[5];
char ylfy[5];
char cxfy[5];
char fzfy[5];
char znjy[5];
char srfy[20];
}MYBILL;
void mprint(MYBILL temp)
{
printf(" 月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入 \n");
printf("----------------------------------------------------------------------------\n");
printf("%8s%6s%10s%10s%10s%10s%10s%10s\n",temp.month,temp.spxf,temp.fzfy,te mp.znjy,
temp.sdfy,temp.ylfy,temp.cxfy,temp.srfy);
}
//输入信息
int enter(MYBILL t[])
{
int i,n;
double f;
system("cls");
printf("请确定您要输入几个月的账单: ");
scanf("%d",&n);
if(n>0)
{
printf("请输入您的个人账单信息:\n");
printf("\n 月份食品消费房租费用子女费用水电费用医疗费用储蓄费用 \n");
printf("--------------------------------------------------------------------------------\n");
for(i=0;i<n;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("信息录入成功!");
return n;
}
if(n<=0) printf("对不起,您输入的月数不正确!\n");
exit(0);
}
//输出
void list(MYBILL t[],int n)
{
int i;
system("cls");
printf("***********************************个人账簿信息
*********************************\n");
printf(" 总共有 %d 个月的账单
\n",n);
printf(" 月份食品消费房租费用子女费用水电费用医疗费用
储蓄费用本月收入 \n");
for(i=0;i<n;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();
}
}
}
//根据月份查找,参数有结构体变量,长度,字符指针
int monthfind(MYBILL t[],int n,char *s)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(s,t[i].month)==0)
return i;
}
return i;
}
//根据月份查找,删除信息
int delet(MYBILL t[],int n)
{
char s[20];
int ch=0;
int i,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<n;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");
}
}
return n;
}
//根据查找月份,修改信息
void rewrite(MYBILL t[],int n)
{
char s[20];
int ch=0;
int i;
double f;
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");
}
}
}
//添加信息
int add(MYBILL t[],int n)
{
MYBILL temp;
int i,j;
double f;
char s[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");
return n;
}
//写入文件
void save(MYBILL t[],int n)
{
int i;
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<n;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);
}
//读取文件
int load(MYBILL t[])
{
int i,n;
FILE *fp;
if((fp=fopen("mybill.txt","rb"))==NULL)//只读取文件
{
printf("对不起,不能打开文件!\n");
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i<n;i++)
fscanf(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);
return n;
}
//按月份排序
void monthsort(MYBILL t[],int n)
{
int i,j,flag;
MYBILL temp;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if((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");
}
//按收入排序
void srfysort(MYBILL t[],int n)
{
int i,j,flag;
MYBILL temp;
for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if((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");
}
//另生成新文件
void copy()
{
char outfile[20];
int i,n;
MYBILL t;
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<n;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);
}
//根据月份查找,参数结构体,长度
void monthsearch(MYBILL t[],int n)
{
char s[20];
int i;
printf("请输入您要查找的月份: ");
scanf("%s",s);
for(i=0;i<n;++i)
{
if(strcmp(s,t[i].month)==0)
{
mprint(t[i]); //输出该月信息
break;
}
}
if (i==n)
printf("对不起,查找不到您所需要的信息!");
}
void showpaixu(MYBILL bill[],int length)
{
int choice;
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",&choice);
switch(choice)
{
case 1: length=load(bill);
list(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 2: length=load(bill);
monthsort(bill,length);
list(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 3: length=load(bill);
srfysort(bill,length);
list(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu1;
}
void chazhao(MYBILL bill[],int length)
{
int choice;
menu2:
system("cls");
printf(" *************************个人账簿信息管理系统
*************************\n\n");
printf(" 1. 通过月份查询\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" 请选择(0-1):\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(bill);
monthsearch(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu2;
}
void biangeng(MYBILL bill[],int length)
{
int choice;
menu3:
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",&choice);
switch(choice)
{
case 1: length=load(bill);
length=delet(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 2: length=load(bill);
rewrite(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 3: length=load(bill);
length=add(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu3;
}
void wenjian(MYBILL bill[],int length)
{
int choice;
menu4:
system("cls");
printf(" *************************个人账簿管理系统
*************************\n\n");
printf(" 1. 保存文件\n\n");
printf(" 2. 另存新文件\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" 请选择(0-2):\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(bill);
printf("您已经成功的将文件保存!\n");
printf(" 请按任意键返回...\n");
getch();break;
case 2: copy();
printf("新文件生成!\n");
printf(" 请按任意键返回...\n");
getch();break;
case 0: return;
}
goto menu4;
}
void main()
{
int choice;
int length;
MYBILL bill[20];
menu:
system("cls");
printf(" **************************个人账簿管理系统
**************************\n\n");
printf(" 请选择以下账簿管理功
能:\n\n");
printf(" 1. 信息输入\n\n");
printf(" 2. 信息浏览及排序\n\n");
printf(" 3. 信息查询\n\n");
printf(" 4. 信息更改\n\n");
printf(" 5. 文件操作\n\n");
printf(" 0. 退出管理系统\n\n");
printf(" 请选择(0-5):\n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=enter(bill);
save(bill,length);
printf("\n 请按任意键返回...\n");
getch();break;
case 2: showpaixu(bill,length);break;
case 3: chazhao(bill,length);break;
case 4: biangeng(bill,length);break;
case 5: wenjian(bill,length);break;
case 0: return;exit(0);
}
goto menu;
}
四程序的调试与运行结果说明
1. 运行mybill.exe,人机对话窗口如下:进入主菜单
2.信息输入
3、显示全部信息
4、按月份排序
5、按收入排序
6、通过月份查询
7、删除记录
8、修改记录
9、添加记录
五课程设计总结
通过本次课程设计,我学会了很多东西.使我们的自身的编程,读程能力得到了提升,也使我更加深刻的认识到不断学习,努力探索的重要性.在这次设计中,遇到到了很多在上课和书本上没有遇到过的问题,通过自己、同伴查询资料,询问老师和自己的思考,将问题逐一解决。

在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。

学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。

课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.虽然题目要求的功能已经全部实现,还添加了一些小函数和功能,但是也有一些想法在这短暂的几天之内没有实现。

在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。

参考文献
[1]邓又明,数据结构(第一版),北京,地质出版社,2007年8月。

[2]刘天印,C语言程序设计(第一版),北京,科学出版社,2007年3月。

[3]张磊主编.C语言程序设计实验与实训指导及题解。

北京:高等教育出版社,出版年:2005.8
数据结构课程设计成绩评定表
环节名称:考勤,成绩:,占总成绩比例10%
环节名称:答辩,成绩:,占总成绩比例30%
课程设计总成绩:
指导教师签字:
年月日。

相关文档
最新文档