C语言程序设计实验报告
更新时间:2023-05-13 11:30:01 阅读量: 实用文档 文档下载
家庭财务管理系统
安阳工学院
C 语言 课 程 设 计
课程题目:家庭财务管理系统
院 系:计算机科学与信息工程学院 专业班级:11级计算机科学与技术(嵌入方向) 姓 名:吕鹏
学 号:201103010042 QQ 号码:1476265623 指导老师:高原
家庭财务管理系统
完成时间:公元二零一二年六月十五
课 程 设 计 任 务 书
家庭财务管理系统
工作计划: 1. 小组审题,查阅资料,进行设计前的必要资料准备(2 天) 。 2. 把程序完整运行出来(3 天) 。 3. 增加改进程序(2 天) 。 4. 写课程设计报告(2 天) 。 5. 提交课程设计报告及答辩(1 天) 任务下达日期:2012 任务完成日期:2012 年 6 月 1 日 年 6 月 15 日 指导教师(签名) : 学生(签名) :
吕鹏
家庭财务管理系统一、设计要求1.要求使用多文件方式实现设计. 2.要求在各个文件内实现结构化设计. 3.每个模块作为一个单独的 C 文件. 4.宏和数据结构等放在头文件中,并使用条件编译.
二、系统的功能模块 根据设计要求,学生成绩管理系统功能模块如图 2-1 所示。
家庭财务管理系统
收入管理
支出管理
统计
退出
添对 加法 收 入
查 删 除 询 收 收 入 图 2—1 入 明 细 反
修 改 收 入
添 加 支 出
查 询 支 出 明 细
删 除 支 出
修 改 支 出
家庭财务管理系统
三、数据结构定义及描述#define MAX_NAME 11/*家庭成员姓名最大长度*/ #define MAX_DETAIL 21/*备注最大长度*/ #define MENU_COUNT 9 /*菜单选项个数*/
#define DATA_FILE "fs.dat"/*数据文件文件名*/ typedef enum _fi_type /*自定义枚举型表示收入收出*/ { income = 1,/*收入*/ payout = -1/*支出*/ }fi_type; typedef struct _fi_info/*储存家庭财务信息的结构体*/ { int year;/*年*/ int month;/*月*/ fi_type type;/*数据类型*/ char name[MAX_NAME];/*家庭成员姓名*/ float money;/*收入或支出金额*/ char detail [MAX_DETAIL];/*备注*/ }fi_info; typedef struct _fi_data/*储存财务数据结构
的结构体*/ { fi_info info;/*财务数据*/
家庭财务管理系统
每个家庭成员的财务讯息用结构体 fi_info 来储存,用结构体 fi_date 来储存财务的数据,其中 MAX_NAME, 家庭成员姓名的长度, MAX_DETAIL 来限定备注的长度。 用 其中 struct _fi_data*next; 来表示指向下一个节点的指针,用于方便操作。
四、函数功能及参数说明、相互调用关系根据功能模块划分,学生成绩管理系统需建立的文件、各文件所包含的函数以及 各函数的相互调用关系下表所示。
源函数
menu
函数名称 quit add_income search_income delete_income updete_income add_payout search_payout delete_payout updete_payout count_total 表4-1
函数功能 退出系统 添加收入 查询收入明细 删除收入 修改收入 添加支出 查询支出明细 删除支出 修改支出 统计总支出收入
总控函数
main()
函数名称 search_date delete_date
函数功能 查询处理 删除处理
家庭财务管理系统
函数名称 initialize save_to_file() clear_date() 辅助函数 fi_date* get_last fi_date* get_previous input_info show_info fi_data*head
函数功能 系统初始化 将财务数据保存到文件 清空链表中的数据 得到财务链表最后一个节点 取得财务数据节点的前一个节点 输入财务数据信息 显示财务数据 财务数据的头节点
图 4-3五、各变量的定义和作用
#define MAX_NAME 11/*家庭成员姓名最大长度*/ #define MAX_DETAIL 21/*备注最大长度*/ #define MENU_COUNT 9 /*菜单选项个数*/
#define DATA_FILE "fs.dat"/*数据文件文件名*/ typedef struct _fi_info/*储存家庭财务信息的结构体*/ { int year;/*年*/ int month;/*月*/ fi_type type;/*数据类型*/ char name[MAX_NAME];/*家庭成员姓名*/ float money;/*收入或支出金额*/ char detail [MAX_DETAIL];/*备注*/
家庭财务管理系统
主函数(main())在此文件的主要功能是根据用户输入不同的值, 调用对应的处理 函数,用户输入的数值与之对应的处理函数如下图所示。 主函数 main(),输入不同的数值调用不同的处理函数 数 1 值 调 添 加 查 询 收 删除 修 改 添 加 查 询 删 除 支 修 改 统 计 退出系统 用 收入 函 数 功 能 调 add_ 用 inco 函 me 数 类 型 输入错误后,请选择 0-9 的任意数重试 Search_ income dele te_ inco me updat e_ incom e add_ payou t searc h_ payou t delete_ payout updat e payou t count total quit 入明细 收入 收入 支出 支 出 出 明细 支出 总 支 出 收 入 2 3 4 5 6 7 8 9 0
2、search_date该函数的功能是收入和支出的查询操作。提示用户按照指定的格式输入要 查询的年月,如果用户输入错误,给出相应的提示信息,如果用户输入正确, 则在单链表中查询该年月的收入信息。如果查询成功,判断查询的个数是否 小于九,调用函数 show_info 显示找到的收入信息;如果大于 9,按空格键进
家庭财务管理系统
3、delte_data该函数的功能为收入和支
出的删除操作,首先提示用户输入要删除收入 的年月,然后根据用户收入的年月信息在单链中查找相关的信息,如果查找 成功,且查找的数据小于 9,直接调用 show_info()h 函数显示查找到的收入 信息;如果查到的信息大于九条,则按空格键翻页。最后提示用户输出要删 除的收入信息的序号,完成删除操作。如果查找不成功,给出相应的提示信 息。提示用户是否继续删除操作,如果输入 Y 或 Y,则在进行操作,否则返 回主菜单界面。 七、改进或增加功能模块说明1、在程序中增加了设置密码选项,只有用户输入自己的密码才能进行各种操作,程序如下 #include<string.h> int main() { struct data { int i; char ch[20]; char name[20]; }dt; FILE * fp; char shuru[20]; char ch; char c; if((fp=fopen("aa.dat","w"))==NULL) { printf("Can not open 《aa.dat》file!\nPlease set up this file in same directory!\n"); printf("按回车键退出......\n"); ch=getchar();
家庭财务管理系统
fread(&dt,sizeof(struct data),1,fp); if(dt.i==2) { printf("请输入密码:"); gets(shuru); if(strcmp(shuru,dt.ch)==0) { main_1(); } else { printf("password error!\n"); printf("是否重设密码: Y N \n"); scanf("%c",&ch); c=getchar(); if(ch=='Y'||ch=='y') { printf("请输入用户名:"); gets(shuru); if(strcmp(shuru,)==0) { fp=fopen("aa.dat","w"); printf("**********************提示**********************\n"); printf("*账户已清除(原储存资料未清除)!请重设账户与密码!*\n"); printf("************************************************\n"); printf("按回车键退出......\n"); ch=getchar(); } } } fclose(fp); } else { if(dt.i!=2) { printf("首次登陆(或已清除账户),请设置用户名及密码\n"); printf("请输入用户名(为找回密码而设):");
家庭财务管理系统
scanf("%s",dt.ch); ch=getchar(); if((fp=fopen("aa.dat","w"))==NULL) { printf("can not open!"); exit(0); } dt.i=2; fwrite(&dt,sizeof(struct data),1,fp); fclose(fp); main_1(); } } return 0; }
//接收最后的回车字符
增加此程序后可以提高系统的安全系数以及可操作性。 八、程序测试 1、系统运行后,需要输入密码后才能进入主界面。允许用户输 入 0—9 的不同数字,以实现不同的操作。输入密码界面和主界面如 图 8-1,8-2 所示。
家庭财务管理系统
图 8-2 管理系统主菜单界面
2、添加收入信息进入主菜单界面后,输入数字 1,进入添加信息操作,用户根据提示的信息输入 年月,家庭成员姓名、输入明细和备注信息,输入完成后返回主界面。输入信息情 况如 8-3 所示。
家庭财务管理系统
界面
家庭财务管理系统
5、修改收入信息 在主菜单中输入 4,则进行修改信息的操作,系统提示要查询的年月,修改收入信息的操作界 面如 8-6 所示。
图 8—6 修改输入信息 6、添加支出信息以及查询支出信息 在菜单中输入 5,进入添加支出信息操作,输入信息和查询支出情况如 8-7,8-8 所示。
家庭财务管理系统
图 8-8 查询支出信息 7、修改支出信息 在主菜单中的输入 8,进行修改支出操作,修改支出的信息的界面如图 8-9 所示
图 8-9 修改后的数据 8、在主菜单中输入 9,进行总收入和总支出信息的操作,操作界面如 8-10 所示。
家庭财务管理系统
九、程序设计过程中遇到的问题及解决过程
1.对程序整体理解,但在设计过程中,细节问题处理不当,造成程序不能运行或者运行错误,并且,对某一部分的程序不能独立设计出来。
对此问题的解决是参考了《c程序设计课程设计》上的参考程序,完成了设计,但是不是一味的照搬,对参考程序进行了修改和添加。增加了按成绩区间查询的查询方式,增加了按总成绩排序的排序方式。
家庭财务管理系统
2.在组建工程的时候,将各个程序分给小组成员,两个人设计一个模块,但是出现了连接错误,各个模块之间也出现了输入上的错误,致使程序不能运行。 对于各个模块逐一检查,添加修改,最终使各个模块错误消除,同时连接错误也自行解决。
3.在刚开始程序设计的时候,不了解什么是组建工程,什么是模块,对于程序设计本身也有不理解的地方,不知道该从何下手。
解决方法:先看《c程序设计课程设计》,了解怎样组建工程,理解每个模块的作用,弄清楚参考程序上的逻辑顺序以及如何设计等问题,然后再进行课程设计。
十、课程设计心得及体会
对于第一次做课程设计的我来说,这次的课程设计是一次既让人痛苦又让人开心的事情。开始的时候根本不清楚课程设计要设计什么,不知道到底怎样设计,因为平时所写的c程序都是一些简单而且基本的C程序,根本不是解决实际情况,符合客户要求的工程程序,所以觉得无从下手,觉得很困难,甚至没有一个思路,而且对于组建工程,构建模块等工作无法理解。这些情况都使自己陷入了苦恼的深渊。
后来,听从辅导老师的意见,从《C程序设计课程设计》开始,一点点了解怎样组建工程,怎么样构建模块,对于每个模块应该怎么样进行设计,逻辑思维是什么,然后开始构建。
在设计过程中一直都有错误存在,困难重重。遇到困难就开始用大量的时间进行修改以及整理,理出思路。最终将工程调试成功,添加模块成功,而这些成功的瞬间是最快乐最开心的时刻。
而且通过这次课程设计我学会了好多东西,觉得自己设计的东西更加接近实际的程序要求。知道团队合作的重要性,知道怎样使团队一起合作构建程序。
总的来说,我获益匪浅。
十一、参考文献
[1] 梁旭等.《C程序设计课程设计(第2版)》 电子工业出版社,2011
家庭财务管理系统
[2] 刘振安等.C程序设计课程设计,机械工业出版社,2007 [3] 谭浩强.C程序设计(第五版),清华大学出版社,2011
十二、源程序
#define MAX_NAME 11 #define MAX_DETAIL 21 #define MENU_COUNT 9 #define DATA_FILE "fs.dat" #define MAX_USERNAME 10 typedef enum _fi_type {
income = 1, payout = -1
}fi_type;
typedef struct _fi_info {
int year;
int month; fi_type type;
char name[MAX_NAME]; float money;
char detail [MAX_DETAIL];
}fi_info;
typedef struct _fi_data { fi_info info; struct _fi_data*next; }fi_data;
void add_income(); void search_income(); void delete_income(); void update_income(); void add_payout(); void search_payout(); void delete_payout(); void update_payout(); void count_total(); void quit();
void search_all(); void main_1();
家庭财务管理系统
void search_data(fi_type type); void delete_data(fi_type type); void update_data(fi_type type); void initialize(); void(save_to_file()); //void clear_data(); fi_data* get_last();
fi_data* get_previous(fi_info* p); void input_info(fi_info* info); void show_info(fi_data* p[],int count); fi_data* head; char menu[]=
"|================================================================|\n" "| 吕鹏 家庭财务管理系统 |\n" "+----------------------------------------------------------------+\n"
"| 收入管理 |\n" "| <1>添加收入 |\n" "| <2>查询收入 |\n" "| <3>删除收入 |\n" "| <4>修改收入 |\n" "| 支出管理 |\n" "| "| "| "|
<5>添加支出 <6>查询支出 <7>删除支出 <8>修改支出
|\n" |\n" |\n" |\n"
//修改项
"| 统计 |\n" "| <9>统计收支 |\n" "+----------------------------------------------------------------+\n"
"| 退出 <0>退出系统 |\n" "+----------------------------------------------------------------+\n" "+------+\n"
"+----------------------------------------------------------------+\n"; void (* menu_fun[])()= {
quit,
add_income, search_income, delete_income, update_income, add_payout, search_payout, delete_payout, update_payout, count_total
家庭财务管理系统
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() {
struct data {
int i; char ch[20];
char name[20]; }dt;
FILE * fp; char shuru[20]; char ch; char c;
if((fp=fopen("aa.dat","w"))==NULL) { printf("Can not open 《aa.dat》file!\nPlease set up this file in same directory!\n");
printf("按回车键退出......\n"); ch=getchar();
exit(0); }
fread(&dt,sizeof(struct data),1,fp); if(dt.i==2) {
printf("请输入密码:"); gets(shuru);
if(strcmp(shuru,dt.ch)==0) { } else {
printf("password error!\n");
printf("是否重设密码: Y N \n"); scanf("%c",&ch); c=getchar();
if(ch=='Y'||ch=='y') {
printf("请输入用户名:"); gets(shuru);
if(strcmp(shuru,)==0) { main_1();
家庭财务管理系统
}
} else { }
}
}
}
printf("**********************提示**********************\n"); printf("*账户已清除(原储存资料未清除)!请重设账户与密码!*\n"); printf("************************************************\n"); printf("按回车键退出......\n"); ch=getchar();
fclose(fp);
if(dt.i!=2)
{
printf("首次登陆(或已清除账户),请设置用户名及密码\n"); printf("请输入用户名(为找回密码而设):"); scanf("%s",); printf("请输入密码:"); scanf("%s",dt.ch); ch=getchar();
//接收最后的回车字符
if((fp=fopen("aa.dat","w"))==NULL) { printf("can not open!"); exit(0); }
dt.i=2;
fwrite(&dt,sizeof(struct data),1,fp); fclose(fp); main_1(); }
return 0;
void initialize() {
FILE* fp = NULL; fi_data* p = NULL; fi_data* last = NULL; int count = 0;
fp = fopen(DATA_FILE,"rb"); if(fp==NULL) { fp = fopen(DATA_FILE,"wb");
家庭财务管理系统
}
return; }
p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data)); p->next=NULL;
while(fread(&(p->info),sizeof(fi_info),1,fp)==1) {
if(head==NULL) { } else {
last = get_last(); last->next = p; head=p;
}
count++;
fseek(fp,count * sizeof(fi_info),SEEK_SET); p=(fi_data*)malloc(sizeof(fi_data)); memset(p,0,sizeof(fi_data));
p->next=NULL; }
free(p); p=NULL; fclose(fp);
void add_income() { fi_data* p = (fi_data*)malloc(sizeof(fi_data));
memset(p, 0, sizeof(fi_data)); p->next = NULL; input_info(&(p->info)); p->info.type = income; if(head==NULL) { } else {
get_last(head)->next = p; head = p;
} }
//查询收入明细
正在阅读:
C语言程序设计实验报告05-13
SOFA评分在呼吸机相关性肺炎中的应用05-11
投标文件格式04-23
亲情友情伴我成长11-22
地下工程测试实验指导书(四) - 图文07-02
街道党工委办事处年度工作总结及2022年一路一片发展工作思路07-30
高一物理知识点总结06-16
探讨大学外语翻译学习策略-模板12-13
精神专科医院建设标准03-08
一中2013年高考成绩_总分表(两校区)04-30
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 程序设计
- 语言
- 实验
- 报告
- 广发证券-苏宁环球-000718-江北交通改善提升项目价值,异地扩张增强公司实力-100628
- FPGA Defragmentation for Sustainable Performance in Reconfigurable Computers
- 军事理论考试答案
- 物理学相关的高校专业及职业介绍
- 技巧支撑跳跃1—6课
- 集成电路产业发展
- 楞严经正脉疏悬示
- 外源化学物毒性作用的影响因素
- “贴必定”BAC防水卷材施工工艺
- 超市经典培训课程-蔬菜课
- 1、繁盛一时的隋朝
- 《新理念》学习达标计划
- 吉大 2008级计算机学院-计算机导论试题A卷
- TS16949质量管理体系考试试卷
- 小学四年级立定跳远公开课教案
- 液压油缸拆卸工具和液压动力工具价格
- 分布式系统的事务处理
- 山东省东营市垦利区(五四制)2020-2021学年八年级上学期期末语文试题(word版含答案)
- 数学教学设计(考试精要)
- 议论文:读书养气阅读含答案