1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 学 号: 课 程 设 计 题 目 个人账簿管理系统 教 学 院 计算机 专 业 信息管理 班 级 姓 名 指导教师 年 12 月 30 日 课程设计任务书 ~ 第 一 学期 学生姓名: 专业班级: 10信息管理 指导教师: 工作部门: 计算机学院 一、 课程设计题目:
2、 个人账簿管理系统 二、 课程设计内容 个人帐簿管理系统记录某人每月的全部收入及各项开支情况, 包括食品消费, 房租, 子女教育费用, 水电费, 医疗费, 储蓄等。该系统采用了Windows XP操作系统结合Visual C++ 6.0,TC 2.0等软件开发,能够输入和修改某月的收支情况, 能够对每月的开支从小到大进行排序, 能够根据输入的月份查询每月的收支情况。 三、 进度安排 1. 系统设计, 确定函数功能及其实现过程; 2. 根据前面的结果, 编写程序清单, 进行调试; 3. 经过重复的编译, 调试, 测试, 程序运行成功; 4. 撰写课程设计报告, 完成整个论文报
3、告的工作, 并打印; 课题答辩。 四、 基本要求 1. 初步完成总体设计, 搭好框架, 确定人机对话的界面, 确定函数个数; 2. 完成最低要求: 建立一个文件, 包括某人5个月的收支情况, 能对文件中的信息进行扩充( 追加) , 修改和删除; 3. 进一步要求: 完成对每月的开支排序, 以及完成系统查询功能; 4. 应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。 目录
4、 一 概述 3 二 总体方案设计 3 1.整体设计思路 3 2. 输入系统 3 3.排序系统 4 4.查询系统 4 5.删除系统 4 6.其它部分函数功能 5 三 命令行界面代码 6 四 程序的调试与运行结果说明 17 五 课程设计总结 20 参考文献 20 数据结构 课程设计成绩评定表 21 一 概述 该课程设计主要设计个人账簿管理系统已记录某人每月的全部收入及各项开支情况, 包括食品消费, 房租, 子女交用费用, 水电费, 医疗费, 储蓄
5、等。在课程设计中, 用到了C语言以及数据结构中的相关知识, 当然也有少数参考了其它人对某些问题的处理经验。对于进入系统后能够输入和修改某月的收支情况, 能够对每月的开支从小到大进行排序, 能够根据输入的月份查询每月的收支情况, 能够对某月的开支进行删除操作。 二 总体方案设计 1.整体设计思路 系统共分五个子系统: 信息输入, 信息浏览及排序, 信息查询, 信息更改, 文件操作。在相应的系统内可完成相应的功能。各模块相对独立, 每个模块用一个大型的函数来处理数据。 主程序: 1、 信息输入 2、 信息浏览及排序 3、 信息查询 4、 信息更改
6、
5、 文件操作 0、 退出管理系统
2. 输入系统
功能: 输入数据, 然后将数据写入文件。
算法: int enter(MYBILL t[])
for(i=0;i 7、f(t[i].ylfy)+atof(t[i].cxfy);
sprintf(t[i].srfy,"%.2f",f);}
void save(MYBILL t[],int n)
for(i=0;i 8、 1、 按月份排序 2、 按输入排序
算法: void monthsort(MYBILL t[],int n)
for(i=0;i 9、0;j 10、ILL temp)
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.删除系统
功能: 先是查找要删除的月份账单, 然后对其删除, 删除某月账单后, 其它的月份依次 向前移动
算法: int delet(MYBILL t[],int n)//删除信息
for(j=i+1;j 11、
.....................................}
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.程序流程图
开始
列出一个操作目录, 选择要操作的编号
12、
0
1
5
4
3
2
退出系统
信息浏览及排序
文
件
操
作
信
息
更
改
信
息
查
询
信
息
输
入
结束
列出操作目录
选择要操作编号
三 命令行界面代码
#include "stdio.h"
#include "std 13、lib.h"
#include 14、YBILL temp)
{
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.cxf 15、y,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("--------------- 16、\n");
for(i=0;i 17、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);
} 18、
//输出
void list(MYBILL t[],int n)
{
int i;
system("cls");
printf("***********************************个人账簿信息*********************************\n");
printf(" 总共有 %d 个月的账单 \n",n);
printf(" 月份 食品消费 房租费用 子女费用 水电费用 医疗费用 19、 储蓄费用 本月收入 \n");
for(i=0;i 20、量, 长度, 字符指针
int monthfind(MYBILL t[],int n,char *s)
{
int i;
for(i=0;i 21、 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 22、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[ 23、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)
24、printf("对不起, 没有找到要修改的记录! \n");
else
{
mprint(t[i]);
printf("您确定要修改这条记录么? (1.是/0.否)\n");
scanf("%d",&ch);
if(ch==1)
{
printf("请输入新的记录\n");
printf("月份 食品消费 房租费用 子女教育费用 水电费用 医疗费用 储蓄费用 \n");
printf("-------------------------------- 25、\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 26、].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 27、"月份 食品消费 房租费用 子女教育费用 水电费用 医疗费用 储蓄费用 \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)+ato 28、f(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; 29、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);
strcp 30、y(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);
31、 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 32、fp,"\r\n");
for(i=0;i 33、 if((fp=fopen("mybill.txt","rb"))==NULL)//只读取文件
{
printf("对不起, 不能打开文件! \n");
exit(1);
}
fscanf(fp,"%d",&n);
for(i=0;i 34、fp);
return n;
}
//按月份排序
void monthsort(MYBILL t[],int n)
{
int i,j,flag;
MYBILL temp;
for(i=0;i 35、
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 36、 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)
{
37、
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中读取文件
38、fprintf(tfp,"%d",n);//写入tfp中
fprintf(tfp,"\r\n");
for(i=0;i 39、fy,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 40、); //输出该月信息
break;
}
}
if (i==n)
printf("对不起, 查找不到您所需要的信息! ");
}
void showpaixu(MYBILL bill[],int length)
{
int choice;
menu1:
system("cls");
printf(" *************************个人账簿信息管理系统***********************\n\n");
printf(" 41、 1. 显示全部信息\n\n");
printf(" 2. 按月份顺序排序\n\n");
printf(" 3. 按每月收入排序\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" 请选择(0-3)\n 42、 ");
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);
l 43、ist(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 3: length=load(bill);
srfysort(bill,length);
list(bill,length);
save(bill,length);
printf(" 44、 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu1;
}
void chazhao(MYBILL bill[],int length)
{
int choice;
menu2:
system("cls");
printf(" *************************个人账簿信息管理系统*************************\n\n");
pr 45、intf(" 1. 经过月份查询\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" 请选择(0-1): \n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(bill);
46、 monthsearch(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu2;
}
void biangeng(MYBILL bill[],int length)
{
int choice;
menu3:
system("cls");
printf(" ********************** 47、个人账簿管理系统*************************\n\n");
printf(" 1. 删除记录\n\n");
printf(" 2. 修改记录\n\n");
printf(" 3. 添加记录\n\n");
printf(" 0. 返回上一级菜单\n\n");
printf(" 48、 请选择(0-3): \n ");
scanf("%d",&choice);
switch(choice)
{
case 1: length=load(bill);
length=delet(bill,length);
save(bill,length);
printf(" 请按任意键返回...\n");
49、 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);
50、 save(bill,length);
printf(" 请按任意键返回...\n");
getch();
break;
case 0: return;
}
goto menu3;
}
void wenjian(MYBILL bill[],int length)
{
int choice;
menu4:
system("cls");
printf(" *****************






