C语言程序设计实验报告.docx
《C语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实验报告.docx(41页珍藏版)》请在冰豆网上搜索。
C语言程序设计实验报告
安阳工学院
C语言课程设计
课程题目:
家庭财务管理系统
院系:
计算机科学与信息工程学院
专业班级:
11级计算机科学与技术(嵌入方向)
姓名:
吕鹏
学号:
201103010042
QQ号码:
1476265623
指导老师:
高原
完成时间:
公元二零一二年六月十五
课程设计任务书
设计题目
家庭财务管理系统
姓名
吕鹏
所在院系
计算机科学与信息工程学院
专业班级
11级计科嵌入
设计要求:
完成一个学生成绩管理系统系统,具体步骤要求如下:
1、添加收入
2、查询收入明细
3、删除收入
4、修改收入
5、添加支出
6、查询支出明细
7、修改支出
8、删除支出
9、统计总支出总收入
学生应完成的工作:
1学生应认真学习参考程序,理解每个文件、每个函数以及各个变量的作用和意义。
在此基础上进一步改进程序,最后正确地运行程序。
2对程序进行测试,设计详细的测试计划,然后根据测试计划设计测试用例,对程序进行测试。
测试时应注意对各种边缘情况进行测试。
3完成课程设计报告
参考文献:
1顾晓琳等C程序设计课程设计电子工业出版社2011
2谭浩强C程序设计教程清华大学出版社2010
工作计划:
1.小组审题,查阅资料,进行设计前的必要资料准备(2天)。
2.把程序完整运行出来(3天)。
3.增加改进程序(2天)。
4.写课程设计报告(2天)。
5.提交课程设计报告及答辩(1天)
任务下达日期:
2012年6月1日
任务完成日期:
2012年6月15日
指导教师(签名):
学生(签名):
吕鹏
界面
九、程序设计过程中遇到的问题及解决过程
1.对程序整体理解,但在设计过程中,细节问题处理不当,造成程序不能运行或者运行错误,并且,对某一部分的程序不能独立设计出来。
对此问题的解决是参考了《c程序设计课程设计》上的参考程序,完成了设计,但是不是一味的照搬,对参考程序进行了修改和添加。
增加了按成绩区间查询的查询方式,增加了按总成绩排序的排序方式。
2.在组建工程的时候,将各个程序分给小组成员,两个人设计一个模块,但是出现了连接错误,各个模块之间也出现了输入上的错误,致使程序不能运行。
对于各个模块逐一检查,添加修改,最终使各个模块错误消除,同时连接错误也自行解决。
3.在刚开始程序设计的时候,不了解什么是组建工程,什么是模块,对于程序设计本身也有不理解的地方,不知道该从何下手。
解决方法:
先看《c程序设计课程设计》,了解怎样组建工程,理解每个模块的作用,弄清楚参考程序上的逻辑顺序以及如何设计等问题,然后再进行课程设计。
十、课程设计心得及体会
对于第一次做课程设计的我来说,这次的课程设计是一次既让人痛苦又让人开心的事情。
开始的时候根本不清楚课程设计要设计什么,不知道到底怎样设计,因为平时所写的c程序都是一些简单而且基本的C程序,根本不是解决实际情况,符合客户要求的工程程序,所以觉得无从下手,觉得很困难,甚至没有一个思路,而且对于组建工程,构建模块等工作无法理解。
这些情况都使自己陷入了苦恼的深渊。
后来,听从辅导老师的意见,从《C程序设计课程设计》开始,一点点了解怎样组建工程,怎么样构建模块,对于每个模块应该怎么样进行设计,逻辑思维是什么,然后开始构建。
在设计过程中一直都有错误存在,困难重重。
遇到困难就开始用大量的时间进行修改以及整理,理出思路。
最终将工程调试成功,添加模块成功,而这些成功的瞬间是最快乐最开心的时刻。
而且通过这次课程设计我学会了好多东西,觉得自己设计的东西更加接近实际的程序要求。
知道团队合作的重要性,知道怎样使团队一起合作构建程序。
总的来说,我获益匪浅。
十一、参考文献
[1]梁旭等.《C程序设计课程设计(第2版)》电子工业出版社,2011
[2]刘振安等.C程序设计课程设计,机械工业出版社,2007
[3]谭浩强.C程序设计(第五版),清华大学出版社,2011
十二、源程序
#defineMAX_NAME11
#defineMAX_DETAIL21
#defineMENU_COUNT9
#defineDATA_FILE"fs.dat"
#defineMAX_USERNAME10
typedefenum_fi_type
{
income=1,
payout=-1
}fi_type;
typedefstruct_fi_info
{
intyear;
intmonth;
fi_typetype;
charname[MAX_NAME];
floatmoney;
chardetail[MAX_DETAIL];
}fi_info;
typedefstruct_fi_data
{
fi_infoinfo;
struct_fi_data*next;
}fi_data;
voidadd_income();
voidsearch_income();
voiddelete_income();
voidupdate_income();
voidadd_payout();
voidsearch_payout();
voiddelete_payout();
voidupdate_payout();
voidcount_total();
voidquit();
voidsearch_all();
voidmain_1();
voidsearch_data(fi_typetype);
voiddelete_data(fi_typetype);
voidupdate_data(fi_typetype);
voidinitialize();
void(save_to_file());
//voidclear_data();//修改项
fi_data*get_last();
fi_data*get_previous(fi_info*p);
voidinput_info(fi_info*info);
voidshow_info(fi_data*p[],intcount);
fi_data*head;
charmenu[]=
"|================================================================|\n"
"|吕鹏家庭财务管理系统|\n"
"+----------------------------------------------------------------+\n"
"|收入管理|\n"
"|<1>添加收入|\n"
"|<2>查询收入|\n"
"|<3>删除收入|\n"
"|<4>修改收入|\n"
"|支出管理|\n"
"|<5>添加支出|\n"
"|<6>查询支出|\n"
"|<7>删除支出|\n"
"|<8>修改支出|\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
#include
#include
intmain()
{
structdata
{
inti;
charch[20];
charname[20];
}dt;
FILE*fp;
charshuru[20];
charch;
charc;
if((fp=fopen("aa.dat","w"))==NULL)
{
printf("Cannotopen《aa.dat》file!
\nPleasesetupthisfileinsamedirectory!
\n");
printf("按回车键退出......\n");
ch=getchar();
exit(0);
}
fread(&dt,sizeof(structdata),1,fp);
if(dt.i==2)
{
printf("请输入密码:
");
gets(shuru);
if(strcmp(shuru,dt.ch)==0)
{
main_1();
}
else
{
printf("passworderror!
\n");
printf("是否重设密码:
YN\n");
scanf("%c",&ch);
c=getchar();
if(ch=='Y'||ch=='y')
{
printf("请输入用户名:
");
gets(shuru);
if(strcmp(shuru,dt.name)==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.name);
printf("请输入密码:
");
scanf("%s",dt.ch);
ch=getchar();//接收最后的回车字符
if((fp=fopen("aa.dat","w"))==NULL)
{
printf("cannotopen!
");
exit(0);
}
dt.i=2;
fwrite(&dt,sizeof(structdata),1,fp);
fclose(fp);
main_1();
}
}
return0;
}
voidinitialize()
{
FILE*fp=NULL;
fi_data*p=NULL;
fi_data*last=NULL;
intcount=0;
fp=fopen(DATA_FILE,"rb");
if(fp==NULL)
{
fp=fopen(DATA_FILE,"wb");
fclose(fp);
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)
{
head=p;
}
else
{
last=get_last();
last->next=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);
}
voidadd_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)
{
head=p;
}
else
{
get_last(head)->next=p;
}
}
//查询收入明细
voidsearch_income()
{
search_data(income);
}
//删除收入
voiddelete_income()
{
delete_data(income);
}
//修改收入
voidupdate_income()
{
update_data(income);
}
//添加收入
voidadd_payout()
{
fi_data*p=(fi_data*)malloc(sizeof(fi_data));
memset(p,0,sizeof(fi_data));
input_info(&(p->info));
p->info.type=payout;
if(head==NULL)
{
head=p;
}
else
{
get_last(head)->next=p;
}
}
voidsearch_payout()
{
search_data(payout);
}
voiddelete_payout()
{
delete_data(payout);
}
voidupdate_payout()
{
update_data(payout);
}
voidcount_total()
{
floattotal_income=0.0;
floattotal_payout=0.0;
fi_data*p=head;
while(p!
=NULL)
{
if(p->info.type==income)
{
total_income+=p->info.money;
}
else
{
total_payout+=p->info.money;
}
p=p->next;
}
printf("+------------+------------+------------+\n");
printf("|合计收入|合计支出|结余|\n");
printf("+------------+------------+------------+\n");
printf("|%12.2f|%12.2f|%12.2f|\n",total_income,total_payout,total_income-total_payout);
printf("+------------+------------+------------+\n");
if((total_income-total_payout)<0)
printf("|+-------您已超支,请您合理理财!
-------+|\n\n");
printf(">按任意键返回主菜单.....");
fflush(stdin);
getchar();
}
voidquit()
{
save_to_file();
//clear_data();//修改项
exit(0);
}
voidsearch_data(fi_typetype)
{
intyear=0;
intmonth=0;
fi_data*p=NULL;
fi_data*result[9]={NULL};
intcount=0;
charinput='';
while
(1)
{
printf(">请输入要查询的年月(年/月例:
1992/6)");
if(scanf("%d/%d",&year,&month)!
=2)
{
printf(">输入错误。
\n");
}
else
{
p=head;
count=0;
memset(result,0,sizeof(fi_data*));
while(p!
=NULL)
{
if(p->info.year==year&&p->info.month==month&&p->info.type==type)
{
if(count<9)
{
result[count]=p;
count++;
}
else
{
show_info(result,count);
printf(">输入空格并按回车键翻页。
其他键退出。
");
fflush(stdin);
input=getchar();
if(input=='')
{
memset(result,0,sizeof(fi_data*));
count=0;
result[count]=p;
count++;
}
else
{
break;
}
}
}
p=p->next;
}
if(count!
=0)
{
show_info(result,count);
}
else
{
printf(">没有找到数据。
\n");
}
printf(">继续查找其他数据?
(yorn)");
fflush(stdin);
input=getchar();
if(input=='y'||input=='Y')
{
continue;
}
else
{
break;
}
}
}
}
voiddelete_data(fi_typetype)
{
intyear=0;
intmonth=0;
fi_data*p=NULL;
fi_data*pre=NULL;
fi_data*result[9]={NULL};
intcount=0;
charinput='';
inti=0;
while
(1)
{
printf(">请输入要查询的年月(年/月例:
1992/6)");
if(scanf("%d/%d",&year,&month)!
=2)
{
printf(">输入错误。
\n");
}
else
{
p=head;
count=0;
memset(result,0,sizeof(fi_data*));
while(p!
=NULL)
{
if(p->info.year==year&&p->info.month==month&&p->info.type==type)
{
if(count<9)
{
result[count]=p;
count++;
}
else
{
show_info(result,count);
printf(">输入空格并按回车键翻页。
输入对应的序号删除。
其他键退出。
");
fflush(stdin);
input=getchar();
if(input=='')
{
memset(result,0,sizeof(fi_data*));
count=0;
result[count]=p;
count++;
}
elseif(input>='1'&&input<=48+count)
{
i=input-49;
pre=get_previous(result[i]);
if(pre==NULL)
{
head=head->next;
}
else
{
pre->next=result[i]->next;
}
free(result[i]);
for(;i{
result[i]=result[i+1];
}
result[i]=p;
printf(">删除成功。
\n");
}
else
{
break;
}
}
}
p=p->next;
}
if(count!
=0)
{
show_info(result,count);
prin