一、程序概述
1.开发环境
开发程序的工具MicrosoftVisual C++ 6.0,(简称Visual C++ 6.0、VC++ 6.0或VC 6.0)是Microsoft公司推出的以C++语言为基础的开发Windows环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点。
2.开发目的
班费收支管理系统,方便班级生活委员管理和统计班费。班级收支一目了然,在总结中打开程序即可告知每一位同学近期的班费使用情况。
3.开发功能
注册登录、UI界面、添加班费收支信息、浏览所有班费收支信息、删除班费收支信息、查询班费收支信息、修改班费收支信息、修改账户和密码、清空所有收支信息、自动求和。
二、程序概要
1.程序流程图
2.函数功能关系
每一个函数实现一个功能,模块化编写程序。主要由十个函数完成程序功能连接,充分利用Menu函数作为过渡到其它函数。Welcome函数实现注册登录、Menu函数实现主菜单、Outlook函数实现外观显示、Insert函数实现添加班费收支信息、Output函数实现浏览所有班费收支信息并自动求和、Delete函数实现删除班费收支信息、Search函数实现查询版费收支信息、Modify函数实现修改班费收支信息、Change函数实现修改账户和密码、Clean函数实现清空所有班费收支信息。
三、程序详细设计
1.关键代码分析
main函数中system("color 50");设置背景颜色与文字区分,当运行完一个功能利用system("cls");清屏,给用户最佳视觉和体验。
Welcome函数中fflush(stdin);清空输入缓冲区,确保不影响后面数据读取,创建两个数组储存用户名和密码,以二进制rb+储存管理员信息,指针fp1本地数据储存判断用户名和密码的正确与否。
Menu函数中switch{case:break;}选择相应需要的功能,调用相应的函数。
Outlook函数相当于一个UI界面,我的能力范围用printf输出内容让用户看明白对应的功能,这个函数全部都是printf出来的,应该还有更好地方法,没有学习到。
Insert函数中用指针fp2以二进制ab+储存每条班费收支信息,用txt文件储存,同样修改txt文件可导入收入和支持信息到程序中。储存内容包括日期、项目、收支、经办人。这四个内容为一个结构体,以数组的形式储存。用if语句判断收支是正还是付,讲收支储存在不同的文件中。
Output函数中用指针fp2查看用Insert函数储存的所有班费收支信息,并用while循环一条一条循环输出,和统计班费总收入、班费总支出、班费余额。
Delete函数中通过日期查看相对应的收支信息并打印出所有符合的收支信息,再选择需要删除的记录。
Search函数与Delete函数相似,通过日期查询相对应的收支信息并打印出,比Delete函数缺少的是删除的代码fprintf(fp2,"%10s%25s%20s%30s","","","","");储存空的字符串相当于删除,还可以通过其他字段进行排序浏览。
Modify函数与Delete函数相似,同样通过日期查询对应的收支信息并打印出来,与Delete函数的区别在于Delete函数中代码fprintf(fp2,"%10s%25s%20s%30s","","","","");在Modify中重新修改结构体中的数组中的元素并储存到相应的收支信息中得以修改班费收支信息代码为fprintf(fp2,"%10s%25s%20s%30s",timekey,one.xiangmu,one.money,one.name);
Change函数与Modify函数类似,通过指针fp1查询对应用户名的密码,并修改密码数组得以修改密码。
Clean函数中利用代码remove("软工三班班费收支管理系统.txt")相当于Delete函数的一键操作,方便又快捷。
2.疑难问题解决
刚开始拿到C语言大作业题目的时候整个人都是蒙的,感觉无从下手,似乎需要实现的功能都是在课堂中没有接触到了。随着时间流逝,自己也对这个作业紧张起来,开始认真着手做。
在项目开始时只能想到printf、scanf、循环结构初步实现了输入班费收支信息的输入与输出但是不知道如何保存下来,于是百度以二进制储存文件得知使用使用fopen、fprinft、fclose、、FILE、指针成功把班费收支信息储存到txt的文件中,但是理解不透以二进制存储是什么意思,因为我打开文件看到的不是0和1储存的信息。我在代码中也百度到二进制是用rb、wb、ab,所以这个问题让我进度停止了一会。
算是初步完成要求中的基本功能添加班费收支信息,紧接着得心应手完成了浏览所有班费收支信息的代码,但是在运行中却难以切换两个功能,使用起来非常不方便。后来百度没有查到好的方法,接着完成了查询班费收支信息和修改班费收支信息,就把大作业闲置下来,开始准备计算机二级考试。就是这么巧在我考二级的过程中,让我想起了switch{case:break;}语句建立了Menu函数完成了各个功能的切换。
但是运行起来还是非常奇怪,除了我自己编译的软件自己会用,一般用户使用都有点摸不着头脑。而我在星空学习IOS用的编译器Xcode是有拖控件完成UI界面的,对于C语言如何做UI界面在课堂中没有学习过,百度到C语言要实现windows图形界面需要加一个头文件#include
看似已经差不多完美的程序还有有点不满意,我便用与储存班费收支信息的相似的方法写了登录和注册的函数,再利用了一个指针。完美的结合了十个功能函数和main函数。很难受的是在使用过程中,一次一次切换功能产生printf堆积大量信息,界面非常难看,很快我又百度到system("cls");代码用于清屏,整个程序自然就美观多了。
源码在github哦 给个star支持一下
https://github.com/Hph1998/Class-fee