课程设计报告课程名称C语言程序设计报告题目账单管理系统学生姓名所在学院专业班级学生学号指导教师2013年6月21日C语言程序设计课程设计任务书报告题目账单管理系统完成时间617621学生姓名专业班级电科班指导教师郭艾寅职称讲师设计目的1熟练掌握C语言课程中所学的理论知识2通过综合C语言的基本知识来解决实际问题3加强分析和解决问题的能力设计内容用C语言程序设计编写一个超市管理系统以把所学数据结构知识应用到实际软件开发中去本系统应完成以下几方面的功能1系统初始化structzhangdan结构体2密码登陆password3系统以菜单方式工作zhucaidan4账单信息的录入luru5账单信息的删除delete16账单信息的浏览scan7账单信息的修改change8账单信息的统计和排序sort设计步骤1需求分析对系统的应实现的功能进行分析2概要设计对系统功能进行模块分解对模块的功能及模块之间的相互关系进行说明如用到函数则对函数间的接口进行说明对系统使用的数据结构各数组主要变量的设置及其代表的含义进行说明3详细设计用流程图伪代码等方法对各主要算法进行描述4编写代码根据设计编写源程序要按照程序的格式规范来编写要求结构清晰界面友好关键部分有必要的注释5调试分析准备充分的测试数据对系统进行调试对错误的数据输入也要进行测试保证程序的容错性并通过测试对系统提出改进设想工作内容及时间进度安排第17周周1需求分析小组分工周24545周4设计实现及测试周5验收答辩课程设计成果1与设计内容对应的软件程序2课程设计总结报告摘要随着科学科技的不断发展人们的生活方式正在发生着日新月异的变化生活更趋于智能化便捷化手机电脑互联网这些科技发展的成果则完全改变了我们的生活方式人造卫星航天器航天飞机更是把人类的文明提升到了更高的深度和广度社会再怎么进步人们还保留着记账的习惯个人有个人账本公司有公司账目国家亦有国家的财务管理如今我们要让账本也变得科技化因此设计了账单管理系统只要拿出手机或电脑将自己的账目输入保存就行了不管何时何地只要想查查账单动动手指就行哪怕是几十年前的旧账只要记录在案就能知道有了账单管理系统我们就能更好的理财账单管理系统具有以下简单功能1从键盘输入包括编号日期收支类型收支项目并将其保存在磁盘文件里2打开文件后可对账单进行新增修改删除统计排序并保存3具有在文件中进行单项查询或多项查询的功能即能够按照给定的关键字如日期等找出满足条件的纪录4具有输出文件数据信息的功能关键词账单管理输入输出保存修改函数目录一概述1二需求分析1添加账单信息2删除账单信息2修改账单信息2查询账单信息2账单信息排序和统计2三系统设计2系统模块2总流程图3技术路线4四详细设计4系统初始化41结构体的定义42密码输入函数4主菜单的设计61主菜单函数62账单信息的录入函数73账单信息的浏览函数94账单信息的统计和排序函数105账单信息的删除函数126修改账单信息函数13五结论与心得16六参考文献16附录源程序17一概述随着现代生活质量的提高超市这种便利的服务开始走进我们的生活同时随着超市涌入我们的生活如何更便利的对超市进行系统和有序的操作成为了我们需要考虑的问题本程序运用C语言程序设计了一个账单管理系统系统的功能主要有系统初始化密码登陆系统以菜单方式工作账单信息的录入账单信息的删除账单信息的浏览账单信息的修改账单信息的统计和排序功能为了更加美观我们还给操作界面添加了背景颜色这次C语言课程设计我们是以4人为一个小组我们这组是由XXXXXX和XX组成详细情况如表1XX负责编写系统初始化密码登陆由启动界面的设计和最后的整合调试由XX负责编写账单信息录入和账单信息查找模块由XX负责编写账单信息修改和账单信息删除模块由XX负责编写账单的统计和排序模块星期一我们小组首先进行需求分析划分模块分工星期二星期三各自编写各自所负责的模块的程序星期四星期五对整个程序进行调试和修改通过课程设计让我对C语言有了更深的理解让我们把学到的理论应用于具体实践中锻炼了我们各方面的能力从而让我们更快提高通过一些简单函数的叠加构成了功能比较完备的账单管理系统从输入到处理再到输出你将体会到完美的真正含义表1组员信息表序号姓名性别出生日期学号专业班级联系电话1234二需求分析本软件是一个简单的小型账单管理系统软件窗口为DOS页面该程序可用于对账单的基本信息化管理通过账单管理系统用户可以实现对账单信息的录入删除浏览修改统计排序等操作本系统最大的优点就是操作简便快捷等添加账单信息建立一个结构体将账单信息录入到结构体当中去输入一条记录后询问用户是否继续输入是继续输入否返回主菜单删除账单信息调用结构体输入要删除信息账单的编号从结构体中找到账单编号删除账单所有信息询问用户是否继续删除是继续删除否返回主菜单修改账单信息调用结构体输入要修改账单信息的编号从结构体中找到该编号重新输入要账单修改的信息然后输出修改后的信息返回结构体查询账单信息调用结构体用户输入要查找的时间从结构体中找出该日期所对应的记录输出询问用户是否继续查询是继续查询否返回主菜单账单信息排序和统计调用结构体用户输入要统计排序的时间段从结构体中找出相对应的记录判断记录的收支类型分别统计收入和支出的总金额再利用冒泡法对该时间段的记录按金额的大小进行排序三系统设计系统模块建立一个结构体在内存中存储数据例如账单编号日期收支类型收支收支项目金额等主函数可以调用5个模块函数分别完成增加显示修改删除商品详细结束等功能在主函数中可以设置调用5个函数的方法按123450数字键则分别可以执行某个功能模块录入账单信息用户通过操作界面可以增加新的账单信息修改账单信息用户任意输入一个账单编号显示相关信息后可对该账单信息进行修改并保存浏览账单信息任意输入一个日期或收支项目显示符合条件的所有账单信息要求能多次查找统计账单信息对输入日期范围内的所有账单进行收支统计计算出总的收支情况并按金额逆序分别排列显示该日期范围内收入账单和支出账单清单删除账单信息任意输入一个账单序号将该收支信息从系统中删除主要功能模块即如图1所示图1账单管理功能模块总流程图图2总流程图输入账单信息修改账单信息浏览账单信息统计账单信息删除账单信息结束账单管理luruscansortdelete1changeexit0break结束YYYYYYNNNNN开始t2密码登陆成功进入主菜单输入1录入2浏览3统计4删除5修改账单信息0退出系统输入tt1t3t4t5t0技术路线程序系统采用的计算机基本语言C语言编译利用MicrosoftVisualC60开发工具开发技术实现采用了结构体的运用和数组的运用灵活运用循环的嵌套四详细设计系统初始化1结构体的定义我们的系统运行离不开结构体所以我首先定义一个结构体将账单信息定义为一个zhangdan类在类中包含私有数据成员chardate20chartype30charxiangmu30floatmoney分别表示日期账单收支类型收支项目金额源程序如下structzhangdanintnochardate20chartype30charxiangmu30floatmoneystructzhangdanstu100定义这个结构体用来存放账单的记录方便在接下来的各个函数模块中使用因为账单管理系统要采取密码登陆所以我自定义了一个密码函数2密码输入函数voidpassword密码输入函数intfgcharch1100forf1fprintfttt请输入密码forg0gch1ggetchprintfprintfch1g0ifstrcmpch11234560breakelseprintfttt密码错误iff3exit0printfttt恭喜进入系统getchsystemcls可是函数在运行过程中出错了原因是函数strcmp被调用时忘了打开库文件打开库文件include再次运行后显示结果为图3密码登陆界面主菜单的设计1主菜单函数公有成员函数包括luruscansortdelete1change分别通过其五个子函数分别对应五种不同功能用来实现对账单信息的数据录入浏览统计和排序删除修改等功能首先定义了一个zhucaidan菜单函数使功能菜单显示在运行窗口以提示用户如何进行操作代码如下voidzhucaidan主菜单函数charassystemclsdoprintfprintfttprintftt45454545454545454545454545454545账单管理系统45454545454545454545454545printftt45454545454545454545451账单信息录入4545454545454545printftt45454545454545454545452账单信息浏览4545454545454545printftt45454545454545454545453账单信息排序和统计4545454545454545printftt45454545454545454545454账单信息删除4545454545454545printftt45454545454545454545455账单信息修改4545454545454545printftt45454545454545454545450退出4545454545454545printfttprintfttprintfttt选择功能选项asgetchswitchascase1systemclslurubreakcase2systemclsscanbreakcase3systemclssortbreakcase4systemclsdelete1breakcase5systemclschangebreakcase0systemexitexit0defaultsystemcls在这里主要实现函数的嵌套调用密码输入正确后直接进入主菜单图4主菜单界面通过输入菜单项所对应的编号来实现进一步操作2账单信息的录入函数利用一个while循环一项一项录入账单信息录入一条数据后询问用户是否继续录入是Y则继续录入否N返回主菜单图5录入函数流程图voidluru录入数据charchwhile1systemclsYN开始输入要添加的账单信息是否要继续输入返回主菜单结束printftt输入增加账单信息printf账单编号fflushstdinscanfdampstunownonoprintf日期fflushstdingetsstunownodateprintf收支类型fflushstdinscanfsampstunownotypeprintf收支项目fflushstdinscanfsampstunownoxiangmuprintf金额fflushstdinscanffampstunownomoneyprintfnownonowno1printf是否继续输入YNfflushstdinchgetchifchyampampchYbreak录入数据要用到输入函数并保存到写好的结构体当中当保存完毕后要记录保存在哪一种结构体里面同时还要判断下一次是否还要继续输入或退出图6录入界面3账单信息的浏览函数此函数实现的主要功能是使商品信息清晰的展现出来让人能够准确清晰的知道账单的全部信息如账单编号日期收支类型收支项目金额函数不带有任何数据输入所有账单信息数据都是由录入账单信息函数引用进来函数中以一个for语句引导和控制控制循环引导数据的输出当i大于商品的总数目时回到主菜单为了美化调用了清屏函数再回到主菜单2在此函数中使用了函数调用与循环先建立文字信息根据函数的调用调用输入账单信息函数中用户输入的账单编号日期类型项目等再将其分类输出让用户能一目了然的了解到账单信息流程图如下图7浏览函数流程图voidscan浏览数据函数inticharasdoprintft账单详细printft编号t日期t收支类型t收支项目t金额fori0iNY开始输入要浏览的账单日期显示相对应的记录是否要继续查看返回主菜单结束printftdtststst2fstuinostuidatestuitypestuixiangmustuimoneyprintftt按任意键返回主菜单asgetchgotoexitwhileasnexitsystemcls运行结果如下图8浏览界面4账单信息的统计和排序函数此函数实现的主要功能是根据录入信息函数输入的日期排序函数中的数据信息都是靠录入商品信息函数带入然后排序首先利用一个for循环语句计算出商品的总价然后再用双循环语句来控制函数的循环最后以特定的格式按收支类型排序输出账单编号日期收支类型等信息直到账单信息全部输出回到主菜单4在此函数中使用了函数调用的方式来接受数据然后按用户操作计算收入和支出的总金额排列数据然后输出使用户一看便知道自己近期的情况voidsort统计并排序structzhangdantempintijfloatshourusum0zhichusum0chara10b10printf请输入您要统计账单的日期如20130601至20130604scanfs至sabfori0iwhilestrcmpstuidatea0strcmpstuidatebifstunownotype收入shourusumstuimoneyelsezhichusumstuimoneyprintfs至s日总的收支情况总收入f总支出fa10b10shourusumzhichusumforji1jifstuimoneytempstujstujstuj1stuj1tempprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneyprintfttt排序成功ttt在这段程序编译的时候没有语法错误但是无法显示正确的运行结果这是我们所做的账单管理系统需要改善的地方5账单信息的删除函数此函数实现的功能主要是删除一条账单信息在此函数中用字符串的比较查找出想删除的账单信息日期如果找不到所输入的日期则代表没有此账单信息回到主菜单如果找到了想删除的账单信息系统更加严密将提示是否确认删除此信息如果为Y则将此信息覆盖账单总数减一否则回到主菜单图9删除函数流程图代码如下voiddelete1删除函数intinumijprintf输入要删除账单编号scanfdampinumfori0iifstuinoinumforjij开始输入要删除的账单编号该账单是否存在删除该账单信息结束YNstujstuj1nownonowno1printf删除成功getchzhucaidanprintf没有找到该账单getchsystemcls运行结果如下图10删除界面6修改账单信息函数此函数实现的功能主要是修改账单信息在此函数中用字符串的比较查找出想修改的账单信息编号如果找到了就显示该条账单信息否则为没有此选项找到想修改的账单编号后即显示可修改的账单信息界面可修改的账单信息有编号日期收支类型收支项目和金额管理人员可根据自己需求进行修改修改之后将新信息显示出来利用if条件语句控制并提示修改成功是否继续修改商品信息用户输入Y时返回以上步骤输入N回到主菜单图11修改函数流程图源代码如下voidchange修改账单信息函数intnumber0charch0ci0intiprintf请您输入要修改的账单的编号scanfdampnumberfori0iifnumberstuinoprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneyprintf您确定要修改该账单信息ynscanfcampchifchychYprintf请输入编号fflushstdin清空缓存区scanfdampstuino开始输入账单编号账单是否存在修改账单信息结束YNprintf请输入日期fflushstdinscanfsstuidateprintf请输入收支类型fflushstdinscanfsampstuitypeprintf请输入收支项目fflushstdinscanfsampstuixiangmuprintf请输入金额fflushstdinscanffampstuimoneyprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneygetchprintf修改成功getchprintf是否继续修改ynscanfcampciifchychYcontinueelsezhucaidanprintf没有这个编号运行结果如下图12修改界面五结论与心得通过编写该程序熟悉了C语言的基本语法选择循环等结构深入练习了函数的调用方法和文件的读写方法熟悉了结构体的使用更加深化了面向过程语言思想和一些基本算法通过对程序的后期调试熟悉了C语言常见错误锻炼了思维的严密性和完备性通过对程序的注释和画流程图形成了一套自己编程的风格和清晰地思路使思维更加条理化清晰化在这次课程设计当中我担任本组的组长负责将其他组员编写的实现系统功能的函数整合在一起在整合的过程当中我遇到的各种各样的麻烦有个别同学所写的函数几乎不能用但我并没有放弃他而是耐心的告诉他怎样将他的任务完善好源程序在编译运行时还有许多不完善的地方因此产生许多错误通过我们细心耐心地查错改错终于使程序能正常运行了这让我感到非常大的成就感这次计算机C语言程序设计是一次综合性设计它不仅检验了我这个学期C语言程序学的是否扎实同时也使我在高级语言设计上有所提高我从中得到了很深的体会原来计算机语言是如此的神奇题目中设计到了很多本学期没有学透的内容如函数的调用和结构体的定义和使用通过这次设计让我对这些内容有了进一步的了解重要的是我能过使用这些东西编一个实用的程序六参考文献1鲁沐浴C语言最新编程技巧200例M北京电子工业出版社19972梁翎李爱齐C语言程序设计实用技巧与程序实例M上海上海科普出版社19963杨莉C语言指针的研究与运用J期刊门户20084涂刚C语言实验教学的探讨J论文天下20075谭浩强语言程序设计北京清华大学出版社附录源程序includeincludeincludeincludeincludevoidscanvoidsortvoidchangevoiddelete1voidluruvoidpasswordvoidzhucaidanintnowno0structzhangdanintnochardate20chartype30charxiangmu30floatmoneystructzhangdanstu100main主函数password密码函数printftttt账单管理系统zhucaidan主菜单函数voidzhucaidan主菜单函数charassystemclsdoprintfprintfttprintftt45454545454545454545454545454545账单管理系统45454545454545454545454545printftt45454545454545454545451账单信息录入4545454545454545printftt45454545454545454545452账单信息浏览4545454545454545printftt45454545454545454545453账单信息排序和统计4545454545454545printftt45454545454545454545454数量账单删除4545454545454545printftt45454545454545454545455账单修改4545454545454545printftt45454545454545454545450退出4545454545454545printfttprintfttprintfttt选择功能选项asgetchswitchascase1systemclslurubreakcase2systemclsscanbreakcase3systemclssortbreakcase4systemclsdelete1breakcase5systemclschangebreakcase0systemexitexit0defaultsystemclswhile1至此功能选择结束voidpassword密码输入函数intfgcharch1100forf1fprintf请输入密码forg0gch1ggetchprintfprintfch1g0ifstrcmpch11234560breakelseprintf密码错误iff3exit0systemclsprintf恭喜进入系统getchsystemclsvoidscan浏览数据函数inticharasdoprintft账单详细printft编号t日期t收支类型t收支项目t金额fori0iprintftdtststst2fstuinostuidatestuitypestuixiangmustuimoneyprintftt按任意键返回主菜单asgetchgotoexitwhileasnexitsystemclsvoidchange修改账单信息函数intnumber0charch0ci0intiprintf请您输入要修改的账单的编号scanfdampnumberfori0iifnumberstuinoprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneyprintf您确定要修改该账单信息ynscanfcampchifchychYprintf请输入编号fflushstdin清空缓存区scanfdampstuinoprintf请输入日期fflushstdinscanfsstuidateprintf请输入收支类型fflushstdinscanfsampstuitypeprintf请输入收支项目fflushstdinscanfsampstuixiangmuprintf请输入金额fflushstdinscanffampstuimoneyprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneygetchprintf修改成功getchprintf是否继续修改ynscanfcampciifchychYcontinueelsezhucaidanprintf没有这个编号voiddelete1删除函数intinumijprintf输入要删除账单编号scanfdampinumfori0iifstuinoinumforjijstujstuj1nownonowno1printf删除成功getchzhucaidanprintf没有找到该账单getchsystemclsvoidluru录入数据charchwhile1systemclsprintftt输入增加账单信息printf账单编号fflushstdinscanfdampstunownonoprintf日期fflushstdingetsstunownodateprintf收支类型fflushstdinscanfsampstunownotypeprintf收支项目fflushstdinscanfsampstunownoxiangmuprintf金额fflushstdinscanffampstunownomoneyprintfnownonowno1printf是否继续输入YNfflushstdinchgetchifchyampampchYbreakvoidsort统计并排序structzhangdantempintijfloatshourusum0zhichusum0chara10b10printf请输入您要统计账单的日期如20130601至20130604scanfs至sabfori0iwhilestrcmpstuidatea0strcmpstuidatebifstunownotype收入shourusumstuimoneyelsezhichusumstuimoneyprintfs至s日总的收支情况总收入f总支出fa10b10shourusumzhichusumforji1jifstuimoneytempstujstujstuj1stuj1tempprintf编号d日期s收支类型s收支项目s单价2fstuinostuidatestuitypestuixiangmustuimoneyprintfttt排序成功ttt教师评语及设计成绩教师评语课程设计成绩指导教师签名日期年月日