个人账簿管理系统计划书.docx
《个人账簿管理系统计划书.docx》由会员分享,可在线阅读,更多相关《个人账簿管理系统计划书.docx(35页珍藏版)》请在冰豆网上搜索。
个人账簿管理系统计划书
课程设计
题目
个人账簿管理系统
教学院
计算机学院
专业
计算机科学与技术
班级
姓名
指导教师
课程设计任务书
2009~2010学年第2学期
学生姓名:
专业班级:
指导教师:
工作部门:
计算机学院
一、课程设计题目:
个人账簿管理系统
二、课程设计内容(含技术指标)
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
该系统采用了WindowsXP操作系统结合VisualC++6.0,TC2.0等软件开发,可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
三、进度安排
1.系统设计,确定函数功能及其实现过程;
2.根据前面的结果,编写程序清单,进行调试;
3.经过反复的编译,调试,测试,程序运行成功;
4.撰写课程设计报告,完成整个论文报告的工作,并打印;课题答辩。
四、基本要求
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3.进一步要求:
完成对每月的开支排序,以及完成系统查询功能;
4.应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。
教研室主任签名:
年月日
目录
课程任务书.......................................................1
1.问题描述3
1.1个人账簿管理系统问题描述3
1.2C++文件流3
2.系统分析7
2.1系统流程7
3.系统设计8
3.1系统功能8
3.2主要数据结构8
3.3主要函数说明10
4.使用说明12
5.系统评价12
6.心得体会12
7.源程序13
8.测试数据28
附录C参考文献................................................31
1.问题描述
1.1个人账簿管理系统问题描述
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
实现要求:
1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2.完成最低要求:
建立一个文件,包括某人5个月的收支情况,能对文件中的信息进行扩充(追加),修改和删除;
3.进一步要求:
完成对每月的开支排序,以及完成系统查询功能。
有兴趣的同学可以自己扩充系统功能。
1.2C++简述
编写此类程序,最主要的是灵活对文件的使用。
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:
1、插入器(<<)
向流输出数据。
比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"WriteStdout"<<'n';就表示把字符串"WriteStdout"和换行字符('n')输出到标准输出流。
2、析取器(>>)
从流中输入数据。
比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
在C++中,对文件的操作是通过stream的子类fstream(filestream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。
下面就把此类的文件操作过程一一道来。
一、打开文件
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
voidopen(constchar*filename,intmode,intaccess);
参数:
filename:
要打开的文件名
mode:
要打开文件的方式
access:
打开文件的属性
//注:
现在C++标准库不支持nocreate和noreplace,以前的旧版本可以用.
打开文件的属性取值是:
0:
普通文件,打开访问
1:
只读文件
2:
隐含文件
4:
系统文件
可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
file1.open("c:
config.sys");<=>file1.open("c:
config.sys",ios:
:
in|ios:
:
out,0);
另外,fstream还有和open()一样的构造函数,对于上例,在定义的时候就可以打开文件了:
fstreamfile1("c:
config.sys");
特别提出的是,fstream有两个子类:
ifstream(inputfilestream)和ofstream(outpufilestream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
ifstreamfile2("c:
pdos.def");//以输入方式打开文件
ofstreamfile3("c:
x.123");//以输出方式打开文件
所以,在实际应用中,根据需要的不同,选择不同的类来定义:
如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。
二、关闭文件
打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:
file1.close();就把file1相连的文件关闭。
三、读写文件
读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
1、文本文件的读写
文本文件的读写很简单:
用插入器(<<)向文件输出;用析取器(>>)从文件输入。
假设file1是以输入方式打开,file2以输出打开。
示例如下:
file2<<"ILoveYou";//向文件写入字符串"ILoveYou"
inti;
file1>>i;//从文件输入一个整数值。
这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些
操纵符功能输入/输出
dec格式化为十进制数值数据输入和输出
endl输出一个换行符并刷新此流输出
ends输出一个空字符输出
hex格式化为十六进制数值数据输入和输出
oct格式化为八进制数值数据输入和输出
//setpxecision(intp)设置浮点数的精度位数输出
setprecision(intp)设置浮点数的精度位数输出
(setpxecision应该为setprecision,使用时需要包含头文件:
#include)
//比如要把123当作十六进制输出:
file1<file1< 比如要把123当作十六进制输出:
file1<file1< 2、二进制文件的读写
①put()
put()函数向流写入一个字符,其原型是ofstream&put(charch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。
②get()
get()函数比较灵活,有3种常用的重载形式:
一种就是和put()对应的形式:
ifstream&get(char&ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。
如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
③读写数据块
要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:
read(unsignedchar*buf,intnum);
write(constunsignedchar*buf,intnum);
read()从文件中读取num个字符到buf指向的缓存中,如果在还未读入num个字符时就到了文件尾,可以用成员函数intgcount();来取得实际读取的字符数;而write()从buf指向的缓存写num个字符到文件中,值得注意的是缓存的类型是unsignedchar*,有时可能需要类型转换。
四、文件定位
和C的文件操作方式不同的是,C++I/O系统管理两个与一个文件相联系的指针。
一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。
每次执行输入或输出时,相应的指针自动变化。
所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp(),seekg()是设置读位置,seekp是设置写位置。
它们最通用的形式如下:
istream&seekg(streamoffoffset,seek_dirorigin);
ostream&seekp(streamoffoffset,seek_dirorigin);
streamoff定义于iostream.h中,定义有偏移量offset所能取得的最大值,seek_dir表示移动的基准位置,是一个有以下值的枚举:
ios:
:
beg:
文件开头
ios:
:
cur:
文件当前位置
ios:
:
end:
文件结尾
2.系统分析
2.1系统流程
1234560
3.系统设计
3.1系统更能
此程序完成了录入数据,查看数据,修改数据,查询数据,排序数据,删除数据。
3.2主要数据结构
voidbiangeng(MYBILLbill[],intlength)/*个人账簿信息修改*/
{
menu3:
system("cls");
intchoice;
printf("\n\n\n\n***************************个人账簿管理系统*************************\n\n");
printf("1.删除记录\n\n");
printf("2.修改记录\n\n");
printf("3.添加记录\n\n");
printf("0.返回上一级菜单\n\n");
printf("********************************************************************\n");
printf("请选择(0~3)\n");
scanf("%d",&choice);
switch(choice)
{
case1:
length=load(bill);
length=delet(bill,length);
save(bill,length);
printf("请按任意键返回...\n");
getch();
break;
case2:
length=load(bill);
rewrite(bill,length);
save(bill,length);
printf("请按任意键返回...\n");
getch();
break;
case3:
length=load(bill);
length=add(bill,length);
save(bill,length);
printf("请按任意键返回...\n");
getch();
break;
case0:
return;
}
gotomenu3;
}
voidwenjian(MYBILLbill[],intlength)/*账簿信息文件操作*/
{
menu4:
system("cls");
intchoice;
printf("\n\n\n\n*************************个人账簿管理系统*************************\n\n");
printf("1.导入文件到内存\n\n");
printf("2.把当前文件复制到新文件上\n\n");
printf("0.返回上一级菜单\n\n");
printf("********************************************************************\n");
printf("请选择(0~2)\n");
scanf("%d",&choice);
switch(choice)
{
case1:
length=load(bill);
printf("您已经成功的导入文件到内存!
\n");
printf("请按任意键返回...\n");
getch();break;
case2:
copy();
printf("复制成功!
\n");
printf("请按任意键返回...\n");
getch();break;
case0:
return;
}
gotomenu4;
}
3.3主要函数说明
voidmain();//菜单
voidinput(Infor*newI);//接收键盘输入
voidwriteinfor(Infor*newI);//向文件内写入内容
voidwenjian(MYBILLbill[],intlength);//将dat格式文件转换为txt文件
Statussearch(Infor*a);//查询函数[返回查询的结果及查询的状态]
voidpaixu(Infor*a);//对查询据结果排序
voidbiangeng(MYBILLbill[],intlength);//修改数据
voiddelRecord(intmon);//删除数据
4.使用说明
4.1运行环境:
DOS/WIN7/XP操作系统,VC++6.0编译系统
4.2系统使用说明:
必须选择0-6选择自己需要的操作。
首先,选择1录入数据,然后根据自己的需要选择1个人账簿录入数据,2个人账簿查看数据,3个人账簿信息修改数据,4个人账簿信息查询数据,5账簿信息及文件操作,6删除数据,0退出系统。
FILE*sfp,*tfp;
if((sfp=fopen("mybill.txt","rb"))==NULL)
{
printf("对不起,不能打开您所需要的文件!
\n");
exit
(1);
}
printf("请输入目标文件名,例如:
c:
\\f1\\mybill.txt\n");
在执行账簿文件操作时,应注意文件的存储位置和录入数据是否已经导入内存中
voidmonthsearch(MYBILLt[],intn)
{
chars[20];
inti;
printf("请输入您要查找的月份:
");
scanf("%s",s);
for(i=0;i{
if(strcmp(s,t[i].month)==0)
{
if(i==n)
printf("对不起,没有找到您所需要的记录!
\n");
else
mprint(t[i]);
}
}
}在查询数据之前的非人账簿信息输入操作中应注意自己输入的日期是否重复,因为在相同否则,电脑将执行
if(strcmp(s,t[i].month)==0)
{
if(i==n)
printf("对不起,没有找到您所需要的记录!
\n");的操作
5.系统评价
本系统已经完成的操作:
此次编写的个人账簿管理系统综合以往的个人账簿信息管理经验和资料经过仔细的分析和探究,在同组人的协同下,不断完善自己的程序代码使其具有以下的更能:
录入数据,查看数据,修改数据,查询数据,排序数据,删除数据,到处账簿信息文件。
个人帐簿管理系统记录某人每月的全部收入及各项开支情况,包括食品消费,房租,子女教育费用,水电费,医疗费,储蓄等。
进入系统后可以输入和修改某月的收支情况,可以对每月的开支从小到大进行排序,可以根据输入的月份查询每月的收支情况。
6.心得体会
通过这次数据结构课程设计,将所学知识应用在实践中,锻炼了自己的动手能力,学到了新的知识,同时也在设计过程中发现了自己的在某些知识点上掌握的不够扎实和透彻,这是在以后学习中要特别注意的问题。
这次课程设计给我感悟最深的还有以下几点,这是我在以后学习和工作中要时刻牢记的:
1.编程过程中要认真谨慎,决不能有半点马虎,一些小的疏忽可能是以后程序检错中很难找到的错误。
2.在设计比较大程序时候,要多和同学交流,每一次有意义的交流将使自己受益匪浅或在某个难点上豁然开朗。
3.在设计比较大的程序时,必须要有一个总的构思,并对每个小的模块或函数要有详细的算法思想。
这次课程设计在祁文青老师的指导下得以顺利完成,在此表示衷心地感谢。
祁老师细心的指导和认真负责的工作态度、严谨的治学风格,使我在课程设计过程中学到了不少的知识。
在系统的设计过程中和王亮同学的互相探讨也使我受益匪浅。
在这两个星期内,通过系统设计过程中的实践以及与同学之间的交流,这些收获是我今后人生中的财富。
最后,我对在设计给予我帮助的老师和同学再次表示感谢。
7.源程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#defineM50
typedefstruct
{
charmonth[10];
charspxf[5];
charfzfy[5];
charznjy[5];
charsdfy[5];
charylfy[5];
charcxfy[5];
charsrfy[5];
}MYBILL;
voidmprint(MYBILLtemp)
{
printf("\n********************************************************************************\n");
printf("\n月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\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);
printf("**************************************end***************************************\n");
}
intenter(MYBILLt[])
{
system("cls");
inti,n;
printf("********************************************************************************\n");
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%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);
printf("--------------------------------------------------------------------------------\n");
}
printf("信息录入成功!
");
returnn;
}
if(n<=0)printf("对不起,您输入的月数不正确\n");exit(0);
}
voidlist(MYBILLt[],intn)
{
system("cls");
inti;
printf("\n***********************************个人账簿信息*********************************\n");
printf("总共有%d个月的账单\n",n);
printf("月份食品消费房租费用子女费用水电费用医疗费用储蓄费用本月收入\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("请输入任意键继续.