个人消费管理系统课程设计1.docx
《个人消费管理系统课程设计1.docx》由会员分享,可在线阅读,更多相关《个人消费管理系统课程设计1.docx(20页珍藏版)》请在冰豆网上搜索。
![个人消费管理系统课程设计1.docx](https://file1.bdocx.com/fileroot1/2023-1/30/35c14703-7db6-4b20-a46a-cd6345a9e2c4/35c14703-7db6-4b20-a46a-cd6345a9e2c41.gif)
个人消费管理系统课程设计1
长治学院
课程设计报告
课程名称:
数据结构课程设计
设计题目:
个人帐簿管理系统
系别:
计算机系
专业:
计算机科学与技术
组别:
第22组
学生姓名:
王冬冬学号:
09407224
起止日期:
2011年6月29日~2011年7月6日
指导教师:
马强
1需求分析…………………………………………………………………………2
1.1课程设计题目……………………………………………………………2
1.2课程设计任务及要求……………………………………………………2
1.3课程设计思想……………………………………………………………2
1.4软硬件运行环境及开发工具……………………………………………2
2.概要设计…………………………………………………………………………2
2.1课题设计的流程…………………………………………………………3
2.2主要的数据结构、所用方法及原理……………………………………3
3.详细设计…………………………………………………………………………3
3.1计算机程序框图…………………………………………………………3
3.2自编的程序………………………………………………………………4
4调试分析及操作说明…………………………………………………………15
4.1系统调试分析………………………………………………………15
4.2操作使用说明………………………………………………………16
5.课程设计总结与体会…………………………………………………………19
6.致谢……………………………………………………………………………19
7.参考文献………………………………………………………………………20
1需求分析
随着社会经济的发展,大学生已经成为这个社会上一个很重要的团体,而他们的消费情况也越来越多的被更多的人关注,大学生自己也应当管理好自己的消费内容,让自己的消费更加合理化,提高自己生活的质量。
在这种情况下,就需要一个软件对大学生每月的消费情况作一个较为详细的统计,该系统可以实现由计算机代替人工执行吸血复杂而且较为繁琐的操作,从而使大学生们能够更为便捷地管理自己的消费,也为其他的一些调查研究提供了方便。
1.1课程设计题目
个人消费管理系统
1.2课程设计任务及要求
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2)完成最低要求:
建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3)进一步要求:
完成对每月的开支排序,以及完成系统查询功能。
有兴趣的同学可以自己扩充系统功能。
1.3课程设计思想
根据课程设计任务及要求,将课程设计划分成若干部分,根据每部分的要求,分别完成要求编写程序。
1.4软硬件运行环境及开发工具
软件的运行环境:
windowsxp。
所用的开发工具是VC6++。
2.概要设计
2.1课题设计的流程(各功能模块)
本系统主要是对大学生消费情况的管理,包括了有关数据的录入、查看、修改、查询、排序删除等功能。
整个系统分为以下几个模块。
(1)、主界面模块
本模块提供大学生消费系统的主菜单界面,供用户选择与执行各项管理工作。
(2)、录入模块
本模块用于录入用户的具体某一月份的各项消费记录,例如食品消费,房租,子女教育费用,水电费,医疗费等。
排除不符合的月份,如0=>month>=12。
并排除已存在的月份。
(3)、查看模块
本模块用于用户查看自己已经录入的各项信息,包括用户每个月份的各项消费情况。
(4)、修改模块
本模块用于用户对自己已经录入的信息进行修改,修改具体某一月份的信息。
(5)、查询模块
本模块用于用户查询到自己已经录入的信息中某一月份的各项记录
(6)、排序模块
本模块用于对用户已经输入的某一月份的各项记录按数值进行升序排列。
(7)、删除模块
本模块用于用户对自己已经录入的数据进行删除。
2.2主要的数据结构、所用方法及原理。
主要的数据结构:
结构体的运用以及对结构体的操作。
通过对子程序的调用。
完成课程设计的方法及原理的说明:
根据题目的要求对课程设计做了各个模块的划分,按照各模块功的不同做不同的处理,最后通过对各个模块的调用达到完成课程设计的方法。
3.详细设计
3.1计算机程序框图
图1程序模块图
3.2自编的程序
#include
#include
#defineFilePath1"Myinfor.dat"
#defineFilePath2"Myinfor.txt"
#defineStatusint
#defineOK1
#defineError0
#defineNotFound2
typedefstructInfor{
intmonth;
intspxf;
intfz;
intznjy;
intsdf;
intylf;
intcx;
intbyzhf;
}Infor,*Infor1;
typedefstructpType{
intno;
intdata;
}pType;
voidmenu(void);
voidinput1(Infor*newI,intmon);
voidinput(Infor*newI);
voidwriteinfor(Infor*newI);
voidchangeFormat(void);
Statussearch(Infor*a,intmon);
voidpaixu(Infor*a);
voidmodify(Infor*a,intmon);
voiddelRecord(intmon);
voidxuanze(intitem);
voidxiugai(intm);
intpanduan(Infor*a,intmon);
voidmain()
{while
(1)
{menu();}
}
voidmenu(void)/*菜单*/
{intitem;
printf("\n………\"我的大学\"生活消费管理系统…………\n\n");
printf("\t\t1.…………录入数据………….\n");
printf("\t\t2.…………查看数据………….\n");
printf("\t\t3.…………修改数据………….\n");
printf("\t\t4.…………查询数据………….\n");
printf("\t\t5.…………排序数据………….\n");
printf("\t\t6.…………删除数据………….\n");
printf("\t\t0.…………退出系统………….\n");
printf("请输入要进行的操作:
");
scanf("%d",&item);
if(item>6||item<-1)
{printf("请重新输入要进行的操作:
");
menu();}
elsexuanze(item);}
intpanduan(Infor*a,intmon)
{intitem;
FILE*fp;
fp=fopen(FilePath1,"ab+");
if(fp==NULL)
{printf("无法创建文件:
%s",FilePath1);
exit(0);}
if(mon<=12)
{item=search(a,mon);
while(item==OK)
{printf("输入月份已存在请重新输入要建立的月份:
\n");
scanf("%d",&mon);
item=search(a,mon);}}
else{
printf("您输入的月份有误请重新输入:
\n");
scanf("%d",&mon);
panduan(a,mon);}
fclose(fp);
returnmon;}
voidxuanze(intitem)
{intmon;
Infor*a;
a=(Infor*)malloc(sizeof(Infor));
switch(item)
{case0:
//getchar();/*退出*/
//getchar();
printf("\n……………………欢迎使用…………………………");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\"我的大学\"生活消费管理系统.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.欢迎下次使用.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
printf("\n\t.\t\t\t\t\t\t.");
//printf("\n\"我的大学\"生活消费管理系统\n\n\n\n");
//printf("\t\t\t\t\t\n.欢迎下次使用\n\n\n\n");
printf("\n……………………………………………………………\n\n\n\n");
exit
(1);
break;
case1:
printf("请输入要建立的月份:
\n");
scanf("%d",&mon);
mon=panduan(a,mon);
input1(a,mon);
writeinfor(a);
break;
case2:
changeFormat();
break;
case3:
printf("请输入要查找的月份:
\n");
scanf("%d",&mon);
item=search(a,mon);
mon=a->month;
if(item!
=OK)printf("\n没有符合条件的记录!
\n");
else
{
printf("\n记录月份食品消费房租子女教育费用水电费医疗费储蓄本月总花费\n");
printf("-------------------------------------------------------\n");
printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->spxf,a->fz,a->znjy,a->sdf,a->ylf,a->cx,a->byzhf);
input(a);
modify(a,mon);}
break;
case4:
printf("请输入要查找的月份:
\n");
scanf("%d",&mon);
item=search(a,mon);
if(item!
=OK)printf("\n没有符合条件的记录!
\n");
else{
printf("\n记录月份食品消费房租子女教育费用水电费医疗费储蓄本月总花费\n");
printf("-------------------------------------------------------\n");
printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->spxf,a->fz,a->znjy,a->sdf,a->ylf,a->cx,a->byzhf);
}
break;
case5:
printf("请输入要查找的月份:
\n");
scanf("%d",&mon);
item=search(a,mon);
if(item!
=OK)printf("\n没有符合条件的记录!
\n");
else
paixu(a);
break;
case6:
printf("请输入要查找的月份:
\n");
scanf("%d",&mon);
item=search(a,mon);
mon=a->month;
if(item!
=OK)printf("\n没有符合条件的记录!
\n");
else
{
printf("-------------------------------------------------------\n");
printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->spxf,a->fz,a->znjy,a->sdf,a->ylf,a->cx,a->byzhf);
delRecord(mon);}
break;}
free(a);}
voidinput1(Infor*newI,intmon)
{printf("\n请依次输入数据[说明:
中间以空格符隔开]:
\n(食品消费房租子女教育费用水电费医疗费储蓄)\n");
scanf("%d%d%d%d%d%d",&newI->spxf,&newI->fz,&newI->znjy,&newI->sdf,&newI->ylf,&newI->cx);
newI->month=mon;
newI->byzhf=newI->spxf+newI->fz+newI->znjy+newI->sdf+newI->ylf+newI->cx;
fflush(stdin);}
voidinput(Infor*newI)
{
printf("\n请依次输入数据[说明:
中间以空格符隔开]:
\n(食品消费房租子女教育费用水电费医疗费储蓄)\n");
scanf("%d%d%d%d%d%d",&newI->month,&newI->spxf,&newI->fz,&newI->znjy,&newI->sdf,&newI->ylf,&newI->cx);
newI->byzhf=newI->spxf+newI->fz+newI->znjy+newI->sdf+newI->ylf;
fflush(stdin);}
voidwriteinfor(Infor*newI)
{
FILE*fp;
fp=fopen(FilePath1,"ab+");
if(fp==NULL)
{printf("无法创建文件:
%s",FilePath1);
exit(0);}
fwrite(newI,sizeof(Infor),1,fp);
fclose(fp);
printf("数据录入成功!
\n");}
voidchangeFormat(void)
{
FILE*fp1,*fp2;
Infor*a;
a=(Infor*)malloc(sizeof(Infor));
fp1=fopen(FilePath1,"rb+");
if(fp1==NULL)
{printf("无法找到文件:
%s\n",FilePath1);
return;}
fp2=fopen(FilePath2,"wt+");
if(fp2==NULL)
{printf("无法创建文件:
%s\n",FilePath2);
return;
}
//fputs("\n!
@#¥%……&*(&……¥#@@?
\"我的大学\"生活消费管理系统!
@#¥%……&*(&……¥#@@!
n\n",fp2);
fputs("记录月份食品消费房租子女教育费用水电费医疗费储蓄本月总花费\n",fp2);
fputs("----------------------------------------------------\n",fp2);
printf("\n记录月份食品消费房租子女教育费用水电费医疗费储蓄本月总花费\n");
printf("---------------------------------------------------\n");
rewind(fp1);
fread(a,sizeof(Infor),1,fp1);
while(!
feof(fp1))
{printf("%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->spxf,a->fz,a->znjy,a->sdf,a->ylf,a->cx,a->byzhf);
fprintf(fp2,"%7d%8d%8d%8d%8d%8d%8d%8d\n",a->month,a->spxf,a->fz,a->znjy,a->sdf,a->ylf,a->cx,a->byzhf);
fread(a,sizeof(Infor),1,fp1);}
fputs("---------------------------------------------------\n",fp2);
fputs("关闭本程序继续原程序!
\n",fp2);
fclose(fp1);
fclose(fp2);
system(FilePath2);
remove(FilePath2);}
Statussearch(Infor*a,intmon)
{
FILE*fp1;
intisfound=0;
//printf("请正确输入要查询的月份:
");
//scanf("%d",&mon);
fflush(stdin);
fp1=fopen(FilePath1,"rb+");
if(fp1==NULL)
{printf("无法找到文件:
%s\n",FilePath1);
returnError;}
rewind(fp1);
fread(a,sizeof(Infor),1,fp1);
while(!
feof(fp1))
{if(a->month==mon)
{isfound=1;
Break;}
else
{isfound=0;}
fread(a,sizeof(Infor),1,fp1);}
fclose(fp1);
if(isfound)
returnOK;
else
returnNotFound;}
voidpaixu(Infor*a)
{inti=0,j=0,flag=0,t;
pTypepx[8]={{0,0}};
charstr[8][14]={"记录月份","食品消费","房租","子女教育费用","水电费","医疗费","储蓄","本月总花费"};
for(;i<8;i++)
px[i].no=i;
px[0].data=a->month;
px[1].data=a->spxf;
px[2].data=a->fz;
px[3].data=a->znjy;
px[4].data=a->sdf;
px[5].data=a->ylf;
px[6].data=a->cx;
px[7].data=a->byzhf;
for(i=1;i<8;i++)
{
flag=0;
for(j=0;j<8-i;j++)
if(px[j].data>px[j+1].data)
{t=px[j].data;
px[j].data=px[j+1].data;
px[j+1].data=t;
t=px[j].no;
px[j].no=px[j+1].no;
px[j+1].no=t;
flag=1;}
if(flag==0)break;}
printf("\n");
for(i=0;i<8;i++)
{printf("%s",str[px[i].no]);}
printf("\n-----------------------------------------------------\n");
for(i=0;i<8;i++)
{printf("%8d",px[i].data);}
printf("\n");}
voidmodify(Infor*a,intmon)
{FILE*fp1,*fp2;
Infor*b;
b=(Infor*)malloc(sizeof(Infor));
fp1=fopen(FilePath1,"rt");
fp2=fopen("temp.dat","wt+");
rewind(fp1);
fread(b,sizeof(Infor),1,fp1);
while(!
feof(fp1))
{if(b->month==mon)
{
fwrite(a,sizeof(Infor),1,fp2);
}
else
{fwrite(b,sizeof(Infor),1,fp2);
}
fread(b,sizeof(Infor),1,fp1);
}
fclose(fp1);
fclose(fp2);
remove(FilePath1);
rename("temp.dat",FilePath1);
printf("修改数据成功!
\n");
changeFormat();
}
voiddelRecord(intmon)
{
FILE*fp1,*fp2;
Infor*b;
b=(Infor*)malloc(sizeof(Infor));
fp1=fopen(FilePath1,"rt");
fp2=fopen("temp.dat","wt+");
rewind(fp1);
fread(b,sizeof(Infor),1,fp1);
while(!
feof(fp1))
{
if(b->month!
=mon)
fwrite(b,sizeof(Infor),1,fp2);
fread(b,sizeof(Infor),1,fp