《c语言课程设计报告 个人消费管理系统》由会员分享,可在线阅读,更多相关《c语言课程设计报告 个人消费管理系统(35页珍藏版)》请在金锄头文库上搜索。
1、C 语言课程设计个人消费管理系统C 语语 言言课课 程程 设设 计计 报报 告告2011 年 06 月 20 日设 计 题 目 :设 计 题 目 :个人消费系统学 生 姓 名 :学 生 学 号 :专 业 班 级 :学 院 名 称 :同组人姓名:指 导 老 师 :姚兰C 语言课程设计个人消费管理系统C 语言课程设计个人消费管理系统目 录1 需求分析需求分析.11.1 问题描述.11.2 输入数据要求11.3 输出数据要求11.4 开发环境和工具11.5 成员分工12 总体设计总体设计22.1总体设计思路22.2模块结构图22.3模块说明33 详细设计详细设计.43.1数据类型定义53.2打开模块
2、实现63.3更新模块实现63.4统计模块实现74 测试结果及分析测试结果及分析125 总结总结.17参考文献参考文献.18附录附录.19C 语言课程设计- 1 -1 需求分析需求分析1.1 问题描述问题描述随着社会经济的发展,大学生已经成为这个社会上一个很重要的团体,而他们的消费情况也越来越多的被更多的人关注,大学生自己也应当管理好自己的消费内容,让自己的消费更加合理化,提高自己生活的质量。在这种情况下,就需要一个软消费表信息:编号,时间,类别,品名,单价,数量,金额对学生每天的消费情况作一个较为详细的统计,该系统可以实现由计算机代替人工执行一些复杂而且较为繁琐的操作,从而使大学生们能够更为便
3、捷地管理自己的消费,也为其他的一些调查研究提供了方便。1.2 输入数据要求输入数据要求可录入消费者当天的消费情况,消费表信息包括:编号,时间,类别,品名,单价,数量,金额消费信息存放在文件中,以编号的先后顺序存放1.3 输出数据要求输出数据要求打开:显示文件中的所有消费记录,提供分页显示保存:将消费表的更新结果存入文件更新:可插入、删除、修改各消费记录查找:按时间,类别、品名查找消费记录排序:按时间,类别,金额统计:求各类别消费品的总金额,求各月的消费总金额,求各年消费总金额1.4 开发环境和工具开发环境和工具开发环境:Windows 2000开发工具:Visual C+ 6.01.5 成员分
4、工成员分工刘倩钰:主函数模块,保存模块,排序模块刘冬梅:打开模块,更新模块,数据统计模块C 语言课程设计- 2 -2 总体设总体设计计2.1总体设计思路总体设计思路1. 设计思路设计思路个人消费系统管理包含的操作有:打开、保存、更新、查找、排序和统计。在程序开始运行的时候从文件加载已有数据,并输出可以进行的操作提供给用户,1、打开:显示文件中的所有消费记录,通过取模运算提供分页显示功能2、保存:以 wb 模式打开文件,将修改的内容写入文件3、更新:可插入、删除、修改各消费记录4、查找:按时间,类别、品名查找消费记录5、排序:按时间,类别,金额6、统计:分别按类别、月、年统计消费品的总金额2.
5、数据存储数据存储为了操作的方便,用 typedef 自定义了一些数据类型,其中包含一个长度为 MAX 的数组,用来存放从文件中读取的数据。2.2模块结构图模块结构图根据需求将系统划分为六个功能模块,函数之间的调用关系如图 2.1 所示。Main 主函数ShowTotal 统计CalleditUpdateRec 更新SortRec 排序FindRec 查找SaveRec 保存ShowRec 打开C 语言课程设计- 3 -图 2.1 个人消费系统的模块结构图Calledit:在主函数的控制下,调用各个模块1)ShowRec: 输出已存在的记录。2)SaveRec:保存更新的内容。3)UpdateR
6、ec:按一定的方式更新记录。这个模块下包含三个子模块插入:Insert删除: DeleteByNum修改:Modify4)FindRec: 按一定的方式查找记录。这个模块下也包含三个子模块按日期查找:FindBytime按类型查找:FindByType按名称查找:FindByName5)SortRec:按一定的方式查找记录。这个模块下也包含三个子模块按日期查找:SortBytime按类型查找:SortByType按名称查找:SortBySum6)ShowTotal:显示各种统计的结果2.3模块说明模块说明(以从上至下,从左至右的顺序说明)2.3.1:打开模块:打开模块:自定义函数:ShowRe
7、c( )函数功能:输出已存在的历史记录无参函数:无参数2.3.2:更新模块:更新模块:自定义函数:UpdateRec( )函数功能: 可对输入数据实现插入,删除,修改操作。无参函数:void 类型,无返回值。调用 Insert()函数,Delete()函数和 Modify()C 语言课程设计- 4 -2.3.2.1 插入模块:自定义函数:插入模块:自定义函数: Insert()()函数功能:实现插入新的信息并保存到记录中,其中插入的数据最后金额可以自己运算出来,插入的记录保存在尾部。无参函数:返回值为 int 类型2.3.2.2 删除模块:自定义函数删除模块:自定义函数; RemoveByNu
8、m(int num)函数功能:对所选信息按编号删除,删除过后,后面记录到编号将全部减 1,记录的编号即下标。输入参数:int 类型,返回值是 int 类型。num-int 类型,表示 define.h 文件中定义的类型 Rec_Con 中数组 record的下标,删除过后,后面记录到编号将全部减 1,记录的编号即下标。后面的记录全部向前移动一个距离。2.3.2.3 修改模块:自定义修改函数:修改模块:自定义修改函数:Modify()函数功能:按名称修改记录,先判断要查找的名称所对应的记录是否存在,不存在则直接返回。无参函数:返回值为 int 型2.3.3:统计模块:统计模块:函数原型:函数原型
9、:ShowTotal( )函数功能:显示统计结果无参函数:void 类型,无返回值。2.3.3.1 按类型统计:按类型统计:ShowType( )函数功能:按类型显示统计结果无参函数; void 类型,无返回值。2.3.3.2 按月显示统计结果:按月显示统计结果:函数原型函数原型:ShowMonth()函数功能:忽略了年,按月显示统计结果无参函数:void 类型,无返回值。2.3.3.3 按年显示统计结果按年显示统计结果:函数原型函数原型:ShowYear()函数功能:按年显示统计结果C 语言课程设计- 5 -无参函数:void 类型,无返回值。3 详细设计详细设计3.1数据类型定义数据类型定
10、义关键数据都定义在关键数据都定义在 define.h 里里#define MAX100/人为定义的一个上限typedef struct/ 定义记录结构体,并重新命名类型名intnum;/编号chartimes11;/时间chartypes20;/类别charname20;/品名double price;/单价intquantity;/数量double sum;/金额Rec;typedef struct/ 定义操作结构体,并重新命名类型名RecrecordMAX+1; /定义结构体变量,可操作的记录总数,下标为 0 和 MAX 不存放记录inttotal_count;/整型变量,记录总数Rec_
11、Con,*PRec_Con;union /定义一个查找时使用的共用体chartimes11;/存放按时间查找时输入的时间chartypes20;/存放按类型查找时输入的类型charname20;/存放按名称查找时输入的名称C 语言课程设计- 6 -found;/下面三个变量都是全局变量FILE *fp;/定义文件指针Rec_Conrs;/用来定义变量,避免了动态分配中的安全问题PRec_Conrecords=/定义操作指针变量int type_count=0;/记录里相关的类型数目int year_count=0;/记录里相关的年数目char *ptypeMAX+1;/字符型变量,记录里相关的
12、类型char pyearMAX+15;/字符型变量,记录里相关的年char tmp5;/字符型变量,取年份所用char tmp015,tmp025;/存放 Get4 的返回值,在比较时使用charc;/字符型变量,临时使用变量,没有固定的限制3.2 ShowRec 模块实现模块实现1.算法思想算法思想:按编号, 时间,类别,品名,单价,数量,金额的顺序打开文件,并显示结果。其中提供分页显示功能。2.具体实现:具体实现:void OpenFile()/打开文件函数,以二进制append形式操作if(fp=fopen(“consum“,“ab+“)=NULL)printf(“File open f
13、ail!n“);return ;void ShowI(int i)/根据i值输出记录C 语言课程设计- 7 -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-recordi.name,records-recordi.price,records-recordi.quantity,records-recordi.sum);intShow
14、Rec()/显示所有记录int i;for(i=1;itotal_count;i+)printf(“%-5d%-10s%15s%15s%8.2f%5d%8.2fn“,records-recordi.num,records-recordi.times,records-recordi.types,records-recordi.name,records-recordi.price,records-recordi.quantity,records-recordi.sum);if(i%10)=0)/实现分页功能printf(“Press any key show next pagen“);getcha
15、r();/cls();return 1;C 语言课程设计- 8 -3.3 更新模三个块:更新模三个块:更新包括内容;插入,删除,查找1.算法思想:算法思想:利用三个自定义函数:intInsert() /插入函数,int DeleteByNum()/按编号删除,int Modify() /按名称修改记录。插入过程用MAX控制插入信息的范围;删除时按编号删除,删除过后,后面记录到编号将全部减1,记录的编号即下标。修改时先利用int FindByName(char *name);按名称查找记录函数,找到相关信息,若无此信息直接跳转,否则修改。2.具体实现:具体实现:intInsert()/插入函数i
16、f(records-total_count=(MAX-1)printf(“数据已达可控范围,不能再插入!n“);return 0;int i=(+records-total_count);records-recordi.num=i;/编号是连续的,printf(“n时间类别品名单价数量金额n“);scanf(“%s%s%s%lf%d“,records-recordi.times,records-recordi.types,records-recordi.name,if(strlen(records-recordi.times)!=10|records-recordi.times4!=-|records-recordi.times