学生个人生活费管理系统_第1页
学生个人生活费管理系统_第2页
学生个人生活费管理系统_第3页
学生个人生活费管理系统_第4页
学生个人生活费管理系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生个人生活费管理系统(2)学生个人生活费管理系统(2)目录1需求分析1。1问题描述5.1。2输入数据要求5.1.3输出数据要求6.1。4开发环境和工具 6.2总体设计7.2.1总体设计思路7.2。2模块结构图7.2.3模块说明8.3详细设计103.1 数据类型定义 1.03.2 打开模块实现1.33.3 更新模块实现1.63.4 统计模块实现 164测试与调试 164.1测试 184。2调试 185。结论1.9结束语1.9参考文献附录附录2 源程序21学生个人生活费管理系统(2)1需求分析1.1 问题描述随着社会经济的发展,大学生已经成为这个社会上一个很重要的团体,而他们的消费情况也越来越多

2、的被更多的人关注, 大学生自己也应当管理好自己的消 费内容,让自己的消费更加合理化,提高自己生活的质量。在这种情况下,就需 要一个软消费表信息:编号,时间,类别,品名,单价,数量,金额对学生每天的消费情况作一个较为详细的统计,该系统可以实现由计算机代 替人工执行一些复杂而且较为繁琐的操作,从而使大学生们能够更为便捷地管理 自己的消费,也为其他的一些调查研究提供了方便 .1.2 输入数据要求根据日常生活中,学生个人财务情况,实现一个个人生活费的财务管理软件. 功能有:1登陆.只有在输入正确的用户名和密码之后才能使用软件 .2修改已有信 息.收支信息应该包括收支日期(年月日),收入或者支出,金额,

3、收入来源或者支 出目的,账户余额等。可借用学生个人生活费管理系统( 1)中的添加功能。3 能够查询某天或者某月的收支情况.1。3输由数据要求打开:显示文件中的所有消费记录,提供分页显示保存:将消费表的更新结果存入文件更新:可插入、删除、修改各消费记录查找:按时间,类别、品名查找消费记录排序:按时间,类别,金额统计:求各类别消费品的总金额,求各月的消费总金额,求各年消费总金额学生个人生活费管理系统(2)1.4 开发环境和工具开发环境:Windows 7开发工具:Visual C+ 6。0学生个人生活费管理系统(2)2总体设计2。1 总体设计思路1 .设计思路个人消费系统管理包含的操作有:打开、保

4、存、更新、查找、排序和统计。在程序开始运行的时候从文件加载已有数据,并输出可以进行的操作提供给用户,1、打开:显示文件中的所有消费记录,通过取模运算提供分页显示功能2、保存:以wb模式打开文件,将修改的内容写入文件3、更新:可插入、删除、修改各消费记录4、查找:按时间,类别、品名查找消费记录5、排序:按时间,类别,金额6、统计:分别按类别、月、年统计消费品的总金额2 .数据存储为了操作的方便,用typedef自定义了一些数据类型,其中包含一个长度为 MAX的数组, 用来存放从文件中读取的数据。2。2模块结构图根据需求将系统划分为六个功能模块,函数之间的调用关系如图2.1所示.UpdateRec

5、学生个人生活费管理系统(2)Calledit:在主函数的控制下,调用各个模块1)ShowRec:输出已存在的记录。2)SaveRec:保存更新的内容。3)UpdateRec:按一定的方式更新记录。这个模块下包含三个子模块插入:Insert删除:DeleteByNum修改:Modify4) FindRec:按一定的方式查找记录。这个模块下也包含三个子模块按日期查找:FindBytime按类型查找:FindByType按名称查找:FindByName5) SortRec:按一定的方式查找记录。这个模块下也包含 三个子模块按日期查找:SortBytime按类型查找:SortByType按名称查找:S

6、ortBySum6) ShowTotal:显示各种统计的结果2.3模块说明(以从上至下,从左至右的顺序说明)2.3。1:打开模块:自定义函数:ShowRec ()函数功能:输出已存在的历史记录无参函数:无参数2.3。2:更新模块:学生个人生活费管理系统(2)自定义函数:UpdateRec()函数功能:可对输入数据实现插入,删除,修改操作。无参函数:void类型,无返回值.调用Insert ()函数,Delete。函数和 Modify ()2。3.2.1插入模块:自定义函数:Insert ()函数功能:实现插入新的信息并保存到记录中,其中插入的数据最后金额可以自己运算出来,插入的记录保存在尾部。

7、无参函数:返回值为int类型2.3。2.2 删除模块:自定义函数;RemoveByNum(int num )函数功能:对所选信息按编号删除,删除过后,后面记录到编号将全部减 1,记录的编号即下标。输入参数:int类型,返回值是int类型。num -int类型,表示define.h文件中定义的类型Rec_Con中数组record 口的下标,删除过后,后面记录到编号将全部减1,记录的编号即下标。后面的记录全部向前移动一个距离2。3。2.3修改模块:自定义修改函数:Modify ()函数功能:按名称修改记录,先判断要查找的名称所对应的记录是否存在,不存在则直接返回。无参函数:返回值为 int型2.3

8、.3: 统计模块:函数原型:ShowTotal()函数功能:显示统计结果无参函数:void类型,无返回值。1.1 。3。1 按类型统计:ShowType ()函数功能:按类型显示统计结果无参函数;void类型,无返回值。2.3 。3。2按月显示统计结果:函数原型:ShowMonth ()函数功能:忽略了年,按月显示统计结果无参函数:void类型,无返回值。学生个人生活费管理系统(2)2.4 .3.3按年显示统计结果:函数原型:ShowYear ()函数功能:按年显示统计结果无参函数:void类型,无返回值。3详细设计3。 1 数据类型定义关键数据都定义在 define。 h里# define

9、MAX 100人为定义的一个上限typedef struct彳/定义记录结构体,并重新命名类型名Iintnum;/编号char times 11;时间char types20;类另Ichar name 20;品名double price ;单价int quantity;/数量double sum;/金额 Rec;typedef struct/定义操作结构体,并重新命名类型名Rec recordMAX+1上 定义结构体变量,可操作的记录总数,下标为 0和MAX 不 存放记录int total_count;整型变量,记录总数 Rec_Con , *PRec_Con ;学生个人生活费管理系统(2)u

10、nion 定义一个查找时使用的共用体chartimes11;存放按时间查找时输入的时间chartypes20;存放按类型查找时输入的类型char name 20;存放按名称查找时输入的名称 found ;下面三个变量都是全局变量FILE *fp ;定义文件指针Rec_Con rs;用来定义变量,避免了动态分配中的安全问题PRec_Con records=&rs;定义操作指针变量int type_count=0;记录里相关的类型数目int year_count=0 ; 记录里相关的年数目char *ptypeMAX+1;字符型变量,记录里相关的类型char pyearMAX+1 5; 字

11、符型变量,记录里相关的年char tmp 5;字符型变量,取年份所用char tmp01 5,tmp02 5; 存放Get4的返回值,在比较时使用char c;字符型变量,临时使用变量,没有固定的限制3.2 ShowRec 模块实现1。算法,思、想:按编号,时间,类别,品名,单价,数量,金额的顺序打开文件,并 显示结果.其中提供分页显示功能。2。具体实现:void OpenFile ()/打开文件函数,以二进制 append形式操作if ( (fp=fopen ("consumi,, "ab+") 尸NULL)学生个人生活费管理系统(2)printf( "

12、;File open fail ! n");return ;void ShowI (int i) /根据i值输出记录printf ("记录:nn");printf( " n编号时间类别品名 单价 数量 金额n");printf ("%-5d% 10s%15s%15s %8.2f%5d %8。2fn",records- > recordi .num, records->recordi 。 times,records >recordi 。 types,records > record , r

13、ecords- > record i.price , records > recordi.quantity,records >recordi。 sum);int ShowRec ()/显示所有记录int i ;for (i=1 ; i =records->total_count;i+ )printf("% 5d%- 10s% 15s% 15s%& 2f%5d%8。2fn" , records- > recordi.num , records >record i。times , records- > record i。type

14、s , records- > ,records > record i.price , records->record quantity , records >recordi 。 sum);if (i%10)=0 )/实现分页功能printf( "Press any key show next page n "); getchar();/cls ();学生个人生活费管理系统(2)return 1 ;3。3更新模三个块:更新包括内容;插入,删除,查找1。算法思想:利用三个自定义函数:int Insert () /插入函数,int

15、DeleteByNum()/ 按编号删除,int Modify。/ 按名称修改记录。插入过程用 MAX§制插入信息白范围;删除时按编号删除,删除过后,后面记录到编号将全部减1,记录的编号即下标。修改时先利用int FindByName(char * name);按名称查找记录函数,找到相 关信息,若无此信息直接跳转,否则修改。2。具体实现:int Insert。/插入函数if (records >total_count=(MAX 1)printf( "数据已达可控范围,不能再插入! n ”);return 0;int i=(+records > total_co

16、unt );records->recordi 。num=i;/ 编号是连续的,printf ("n时间类别 品名 单价 数量 金额n");scanf( "%s%ss%lf%d" , records > record i.times,records > record i。 types , records > record i 。name & records- > record10学生个人生活费管理系统(2)i.price,&records >recordi 。 quantity );if(strlen(r

17、ecords- > record i。times ) !=10|records->recordi 。times 4 !=''I |records->record i.times7 ! ='- ')/ 简单的判断一下日期是否符合格式要求printf("时间格式错误,请重试! n”);records- > total_count-;return 0;records->record i 。sum = records->record i.price * records->recordi .quantity; /金额是计

18、算所得# ifdef DEBUGShowI (i);# endifreturn 1;int RemoveByNum(int nun)/删除过后,后面记录到编号将全部减1,记录的编号即下标int i ;if (num1 | | numi> records > total_count )printf("位置错误! n ");return 0 ;for (i=num; i <records->total_count ; i+)/i 后面的记录全部向前移动一 个距离11学生个人生活费管理系统(2)records > recordi 。 num=reco

19、rds->recordi+1 .num1 ;strcpy (records->recordi 。 times,records >record i+1 .times);strcpy (records >recordi.types , records->record i+1 .types );strcpy(records >recordi 。 name records->record i+1 。 name);records >record i .price=records > record i+1 .price ;records recordi

20、 。 quantity=records->record i+1 。 quantity ;records > recordi 。 sum=records >recordi+1 。 sum;return 1 ;int DeleteByNum ()/ 按编号删除int num;printf("请输入要删除记录的编号:”);scanf( "%d,&num);if (! (RemoveByNum num)printf("程序执行错误,删除失败! n");return 0;elsereturn 1 ; int FindByName(char

21、 *name);/声明按名称查找记录函数,下面就要使用到12int Modify ()/按名称修改记录学生个人生活费管理系统(2)int i ;char names 20;printf("请输入要修改的记录名称:");scanf ("% s", names);i=FindByName(names);if(!i )/判断要查找的名称所对应的记录是否存在,不存在则直接跳转return 0 ;printf("请输入所需信息:n”);printf ("n时间类别 品名 单价 数量 金额 n ”);scanf ("% s%s%lf%d

22、",records->recordi.times, records >recordi 。types,records > recordi .name, & records > record i.price , &records recordi 。 quantity );records- > record i.sum = records- > record i 。price * records > record quantity ;return 1 ;3.4 ShowTotal 模块实现ShowTotal包括三种方式:类型、月、年

23、,以类型为例说明1、算法思想为确保不会溢出,保存统计结果的total数组定义长度为 MAX ,接下来对记录集进行遍历,并与ptype口数组中统计的类型进行比对,按照对应的下标将统计结果加到 total 数组中,这样做便于 输出时一一对应13学生个人生活费管理系统(2)(复杂算法用流程图辅助说明)2、具体实现(给出实现算法的关键代码)按类型显示统计结果void ShowType ()int i=1 , j=0;double total MAX= 0.0;/定义保存统计结果的数组while (i<=records->total_count & &j type_count

24、) 遍历并记录统计结果if (strcmp(ptype j, records- recordi.types)=0 ) total j += records- > record i。sum;i+;else j+ ;输出统计结果printf("按类型统计结果如下:n");for(i=0; i <type_count;i+) printf("%s:t%8.2fn" , ptypei , totali);printf( n");4。调试与测试4。1调试说是最艰巨的任务.调试的任务是及时改正测试过程中发现的软件错误。具 体地也调试是软件开发过

25、程中的一个重要环节,也是最复杂,对软件开发者者来说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确 定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。然后仔细研究推断代码以确定问题的原因,并设法改正。调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到14学生个人生活费管理系统(2)相关的问题所在。本系统调试过程中遇到问题、原因和解决方法如下面介绍。(1)程序不能运行定义的指针,很多次引用,过个函数里面,定义的不明确,造成错误连连发 生。(2)不能正确输出信息,有乱码现象原因是键入信息的时候,没有一一对应,逗号的位置不正确,后来,用的是 信息逐一输入,

26、保证了信息的一一对应和高度的准确性,使程序可以正常运行。(3)程序运行途中,出现错误,被迫中止其中定义字符数组,却没有定义长度,导致定义类型变成了字符型,而不能 接受字符串,因此出现了错误。4。2测试软件测试是软件生存期中的一个重要阶段, 是软件质量保证的关键步骤从用 户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷, 所以软件 测试应该是“为了发现错误而执行程序的过程”.或者说,软件测试应该根据软 件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或 缺陷.过度测试则会浪费许多宝贵的资源。到测

27、试后期,即使找到了错误,然而 付出了过高的代价。5。结论课程设计顺利完成,题目所要求的功能也都一一实现,可以对职工信息进行 添加,修改,删除,查询,模糊查询,按条件查询,存储至文本文件等,在通常 情况下,可以良好的运作。不过这个程序还有些不够完善,例如有时候,输出的 结果会因为字符的长短,与上面的提示栏对不上。而且,由于自己英语的不够特 别好,后几个功能不知道该怎么翻译,就直接写的汉字,显得程序主菜单有点乱, 以后会加强英语,好好规划编程.15学生个人生活费管理系统(2)结束语为期七天的的软件综合课程设计实习终于顺利完成,在这期间,我学到了很多课堂上学不到的东西,而且,将所学付之于实践,理论联

28、系实际,是令我很兴奋的,但同时也感觉到了难度。对 C语言,有了更深一步的了解,并且培养出 了良好的思考方式,对于编程.虽然困难很多,问题出现的也很多,但好在,顺利 完成任务了,很有成就感.1参考文献谭浩强.C语言程序设计(第三版).北京精华大学出版社,2005.716学生个人生活费管理系统(2)附录1,叵i=l 'C! LlserslcnovoAppDataLocahM crosoftW ndo5Te mporsiy Intemet Flle5Content lE5-bl414ai03123701堀1233_6?bl414B104e369,123.03bl414«l(!fol

29、2Jf>Z4!>M2(J81.6Vbl414MlUbsd5245.HO174B.67bl4140107ass78.9023-33“41401 O&a 荐1236曲412.B31114140109 s1624,085M ,%bnneii3dr1590,00$ 36.89学号赴名支出】支出2支出mM41401 陌153.45印。1bl41 40 Bfisd123*4556tUbl4140103121233.031234.03总,支出平均支出bl4140109sdd1234.09945.034S.091624.80541.33bl414O110d£234.005fc7.

30、00789.06isfB.ea530.00M41401B8as123,00S4G,.西567.061236.80412.00Ibl4140i04we123,00123.00123.06369.36123.askl41401tr/ass12.au13 JW4b.17M.HH23.33tuo scores<G0»ft lie student of M4i40107<issM41401 b14i4 阻 01M41401 xiSfi67 , WP舱1/7174fl.671234,3701.00 1233,67 12OQ.Q0 1234.00 1234.BS 3668.00 122

31、2.67 12O0.60 1234.00 123.0B 2557.00 852.33jPriErss anr kuy to contIrnue £B付录二源程序 #include <stdio.h>17学生个人生活费管理系统(2)#define N 10struct studentchar num10;char name20;float score 3;float sum;float aver; stu N;void main() printf( " * * made by B14140104 * * * * * *nn"); printf("

32、; * * * * * *学生个人生活费管理系统(2)* * * * *nnn " );void count (struct student stu);void sort (struct student stu );void find(struct student stu 口 ); int i;float temp;for (i=0;i<N ; i+)printf ("请输入第d位同学的支出信息:n”, i+1);printf("学号:”);gets(stui。num);printf("名字:");gets(stui0 name);printf(" 支出 1:"); scanf("%f",& temp);stu i.score 0 =temp;18学生个人生活费管理系统(2)printf("支出 2:");scanf ("%f',&temp);stui0 score 1=temp;printf(" 支出 3: "); scanf (" f",& temp);getchar();stui0 score 2=temp;count (stu);printf("

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论