资源描述
程序设计工程训练汇报
C语言程序设计个人财务管理系统
课程名称 C语言程序设计工程训练
姓 名
院(系) 信息科学和技术学院
专业班级
学 号
指导老师
教务处制
目 录
1.需求分析 1
2系统总框图和功效模块说明 1
2.1系统总框图 1
2.2功效模块说明 1
3系统设计 2
3.1关键结构体 2
3.2关键功效函数 2
4系统调试 3
4.1、程序开始实施时系统所显示页面: 3
4.2、选择退出系统: 3
4.3、选择登陆,而且输入帐号和密码全部正确: 3
4.4、用户输入帐号不正确: 4
4.5、用户输入帐号正确,密码不正确: 4
4.6、用户进行具体操作: 5
5总结 6
6源程序清单 6
1.需求分析
编写一个个人财政支出管理系统,关键处理问题是作为一个系统而言,它所要面对不只是某一个人而言,而是要面对很多用户。那么想要处理这一问题,就必需要求这个系统能够存放很多用户基础信息和统计。同时也要求系统能够对不一样用户身份进行查找和验证。在验证经过以后,在对其进行用户所要求操作。
作为一个财政支出系统,那么就要求对于用户相关金钱每一项操作全部要有对应统计,同时并许可用户对于每一条整体统计进行操作,比如能够依据时间来查找某一确定日期是否进行了收入或支出操作,也能够依据特定需要来删除某一条整体统计。但不许可对每条统计单项数据进行更改,因为不管是收入还是支出,所包含金额全部是固定,时间也是固定,所以系统不许可用户对其进行操作。除此之外,还必需有足够大空间来存放新统计。所以此程序就是基于这个思想而编写出来,基础满足了用户对于一个财政支出管理系统所要求相关功效。
2系统总框图和功效模块说明
2.1系统总框图
个人财务管理系统
输入个人信息
比对个人信息
修改账户资料
查询账户信息
输出账户清单
2.2功效模块说明
(1)old_record( ):此函数由系统自行调用,作用是将全部用户信息存入系统。
(2)void save( ): 此函数作用是将结构体数组中信息写入文件存放,由系统调用。
(3)load( ):此函数作用是将结构体数组中写入文件信息读出,由系统调用。
(4)lookup_accounts( ):此函数作用是将用户输入帐号和系统中全部帐号进行对比,查看系统中是否有此帐号。
(5) check_code( ):此函数是作用是在系统查询到了帐号以后,对用户输入帐号和密码进行检验,看是否相对应。
(6)print_message( ):此函数功效是在系统检验了用户输入帐号和密码以后,假如用户经过了系统检验,在此显示用户可见基础信息。
(7)find_record( ):此函数作用是依据用户输入日期进行查找操作。
(8)insert_record( ):此函数功效是在统计中增加一条新统计,这个统计由用户输入。
(9)del_record( ):此函数功效是依据用户输入位置,将对应位置统计删除。
(10)sum_num( ):此函数功效是计算全部收入和支出总和,计算全部收入总合,计算全部输出总合。
(11)打印输出统计函数:在本程序中一共有三个打印输出统计函数,分别为all_print( )、acc_print( )、pay_print( )这三个函数。它们功效依次是打印输出全部统计,打印输出输入统计,打印输出支出统计。
(12)mian( ):在主函数中,能够依据用户选择来操作系统许可用户使用功效,也能够随时退出这个系统。
3系统设计
3.1关键结构体
个人信息
账户信息
3.2关键功效函数
old_record( ) //将全部用户信息存入系统
print_message( ) //显示用户可见基础信息
sum_num( ) //计算全部收入和支出总和
all_print( )、acc_print( )、pay_print( ) //打印输出全部统计,打印输出输入统计,打印输出支出统计
4系统调试
4.1、程序开始实施时系统所显示页面:
4.2、选择退出系统:
4.3、选择登陆,而且输入帐号和密码全部正确:
4.4、用户输入帐号不正确:
4.5、用户输入帐号正确,密码不正确:
4.6、用户进行具体操作:
5总结
本程序在编写是,关键就是基于用户角度去分析该怎样设计此程序,和编写功效模块。在编写程序时,全部数据全部是对结构体进行操作,在此过程中,我发觉了自己在对指针操作时候,尤其是对指向结构体数组指针和指向结构体指针操作全部不够熟练。但在编写完此程序以后,我感觉自己对语法应用有了显著提升。
6源程序清单
#include<stdio.h>
#include<string.h>
#define null 0
#define max 20
#define ok 1
struct record{
char date[20];
char operate[20];
int num;
};
struct list_record{
char account[20];
char code[20];
char name[20];
int rec_len;
struct record rec[max];
}r[max];
//系统原有数据,用户不可知
int old_record( struct list_record r[])
{
int i;
for(i=0;i<3;i++)
r[i].rec_len=4;
strcpy(r[0].account,"1001");
strcpy(r[1].account,"1002");
strcpy(r[2].account,"1003");
strcpy(r[0].code,"111111");
strcpy(r[1].code,"222222");
strcpy(r[2].code,"333333");
strcpy(r[0].name ,"wang");
strcpy(r[1].name ,"li");
strcpy(r[2].name ,"zhang");
strcpy(r[0].rec[0].date,"07-01-01");
strcpy(r[0].rec[1].date,"07-02-01");
strcpy(r[0].rec[2].date,"07-03-01");
strcpy(r[0].rec[3].date,"07-04-01");
strcpy(r[1].rec[0].date,"07-01-02");
strcpy(r[1].rec[1].date,"07-02-02");
strcpy(r[1].rec[2].date,"07-03-02");
strcpy(r[1].rec[3].date,"07-04-02");
strcpy(r[2].rec[0].date,"07-01-03");
strcpy(r[2].rec[1].date,"07-02-03");
strcpy(r[2].rec[2].date,"07-03-03");
strcpy(r[2].rec[3].date,"07-04-03");
strcpy(r[0].rec[0].operate,"in");
strcpy(r[0].rec[1].operate,"out");
strcpy(r[0].rec[2].operate,"in");
strcpy(r[0].rec[3].operate,"out");
strcpy(r[1].rec[0].operate,"out");
strcpy(r[1].rec[1].operate,"in");
strcpy(r[1].rec[2].operate,"out");
strcpy(r[1].rec[3].operate,"in");
strcpy(r[2].rec[0].operate,"in");
strcpy(r[2].rec[1].operate,"out");
strcpy(r[2].rec[2].operate,"in");
strcpy(r[2].rec[3].operate,"out");
r[0].rec[0].num=3000;
r[0].rec[1].num=-1500;
r[0].rec[2].num=2500;
r[0].rec[3].num=-1000;
r[1].rec[0].num=-3000;
r[1].rec[1].num=5000;
r[1].rec[2].num=-1000;
r[1].rec[2].num=;
r[2].rec[0].num=1000;
r[2].rec[1].num=-1500;
r[2].rec[2].num=3000;
r[2].rec[2].num=-500;
return ok;
}
//将数据写入文件
void save( )
{FILE *fp;
int i;
if((fp=fopen("wenjian","wb"))==null)
{printf("can not open the file.\n");
return;
}
for(i=0;i<max;i++)
if(fwrite(&r[i],sizeof(struct list_record),1,fp)!=1)
printf("file write error.\n");
fclose(fp);
}
//文件读出
void load( )
{FILE *fp;
int i;
if((fp=fopen("wenjian","rb"))==null)
{printf("can not open infile.\n");
return;
}
for(i=0;i<max;i++)
if(fread(&r[i],sizeof(struct list_record),1,fp)!=1)
{if(feof(fp))
(fclose(fp));
return;
}
fclose(fp);
}
//将用户输入帐号和系统中原有帐号比较,查找用户帐号
int lookup_accounts( struct list_record r[],char acc[])
{
int i;
for(i=0;i<3;i++)
if(strcmp(r[i].account,acc)==0)
{
return ok;
}
printf("帐号不存在,请重新输入!\n");
return null;
}
//检验密码函数
struct list_record check_code(struct list_record r[],char acc[],char c[])
{
int i;
struct list_record a;
strcpy(a.account,"0");
strcpy(a.code,"0");
a.rec_len=0;
for(i=0;i<a.rec_len;i++)
{
strcpy(a.rec[i].date,"0");
strcpy(a.rec[i].operate,"0");
a.rec[i].num=0;
}
for(i=0;i<3;i++)
if(strcmp(r[i].account,acc)==0)
if(strcmp(r[i].code,c)==0)
return r[i];
printf("the code is wrong,please input again!\n");
return a;
}
//显示用户基础信息
void print_message( struct list_record *p)
{printf("姓名:%s\n",p->name);
printf("帐号:%s\n",(*p).account);
}
//依据用户输入日期,查找统计
int find_record( struct list_record *p,char d[])
{
int i;
for(i=0;i<(*p).rec_len;i++)
{
if(strcmp((*p).rec[i].date,d)==0)
{
printf("date operate money\n");
printf("%s ",(*p).rec[i].date);
printf("%s ",(*p).rec[i].operate);
printf("%d \n",(*p).rec[i].num);
return ok;
}
}
if(i==(*p).rec_len)
printf("the date is not exit!\n");
return null;
}
//插入函数,依据用户输入信息,增加统计
int insert_record( struct list_record *p,struct record *p1,int lop)
{
int i;
if((lop<1)||(lop>((*p).rec_len+1)))
{
printf("the position is wrong.\n");
return 0;
}
else
{
for(i=(*p).rec_len;i>lop-1;i--)
{
strcpy((*p).rec[i].date,(*p).rec[i-1].date);
strcpy((*p).rec[i].operate,(*p).rec[i-1].operate);
(*p).rec[i].num=(*p).rec[i-1].num;
}
strcpy(p->rec[i].date,p1->date);
strcpy((*p).rec[i].operate,(*p1).operate);
(*p).rec[i].num=(*p1).num;
(*p).rec_len++;
return ok;
}
}
// 删除统计函数
int del_record( struct list_record *p,int lop2)
{
int i;
if((lop2<1)||(lop2>(*p).rec_len))
{
printf("the position is wrong.\n");
return null;
}
else
{
for(i=lop2-1;i<(*p).rec_len-1;i++)
{
strcpy((*p).rec[i].date,(*p).rec[i+1].date);
strcpy((*p).rec[i].operate,(*p).rec[i+1].operate);
(*p).rec[i].num=(*p).rec[i+1].num;
}
(*p).rec_len--;
return ok;
}
}
//输出全部统计函数
void all_print( struct list_record *p)
{ int i;
printf("date operate num\n");
for(i=0;i<(*p).rec_len;i++)
{ printf("%s ",(*p).rec[i].date);
printf("%s ",(*p).rec[i].operate);
printf("%d ",(*p).rec[i].num);
printf("\n");
}
}
//计算总钱数
int sum_num( struct list_record *p)
{
int i;
int sum=0;
int sum_in=0;
int sum_out=0;
for(i=0;i<(*p).rec_len;i++)
{
sum+=(*p).rec[i].num;
if((*p).rec[i].num>0)
sum_in+=(*p).rec[i].num;
if((*p).rec[i].num<0)
sum_out+=(*p).rec[i].num;
}
printf("总金额为: %d\n",sum);
printf("总收入为: %d\n",sum_in);
printf("总支出为: %d\n",sum_out);
return ok;
}
//输出收入统计
int acc_print( struct list_record *p)
{
int i;
int sum_acc=0;
printf("date operate num\n");
for(i=0;i<(*p).rec_len;i++)
if((*p).rec[i].num>0)
{
sum_acc+=(*p).rec[i].num;
printf("%s ",(*p).rec[i].date);
printf("%s ",(*p).rec[i].operate);
printf("%d ",(*p).rec[i].num);
printf("\n");
}
printf("总收入金额为: %d\n",sum_acc);
return ok;
if(sum_acc==0)
printf("there is no account.\n");
return null;
}
//输出支出统计
int pay_print( struct list_record *p)
{int i;
int sum_pay=0;
printf("date operate num\n");
for(i=0;i<p->rec_len;i++)
if((*p).rec[i].num<0)
{
sum_pay+=(*p).rec[i].num;
printf("%s ",(*p).rec[i].date);
printf("%s ",(*p).rec[i].operate);
printf("%d ",(*p).rec[i].num);
printf("\n");
}
printf("总支出为: %d\n",sum_pay);
return ok;
if(sum_pay==0)
printf("there is no payout.\n");
return null;
}
void main( )
{
int j=0,n=0;
int x,k,lop1,lop2;
char data1[20];
char accou[20],cod[20];
struct record *p0;
struct record a;
struct list_record b;
struct list_record *p;
b.rec_len=0;
p0=&a;
old_record(r);
save( );
load( );
printf(" 欢迎使用个人财政支出管理系统!\n");
printf("------------------------------------------------------------\n");
printf("| |\n");
printf("| 1、登陆系统 |\n");
printf("| 2、退出系统 |\n");
printf("| |\n");
printf("------------------------------------------------------------\n");
scanf("%d",&x);
if(x==0)
printf(" 感谢您使用本系统,再见!\n");
else
{
do
{
printf("请输入帐号:"); //while(j<3);
scanf("%s",accou);
if(lookup_accounts(r,accou))
{ printf("请输入密码:"); //while(j<3);
scanf("%s",cod);
b=check_code(r,accou,cod);
if(b.rec_len==0)
{do
{
b=check_code(r,accou,cod); //while(n>3)
scanf("%s",cod);
n++;
}while(n<3);
if(n=3)
printf("您密码不正确,请退出系统,谢谢使用,再见!\n");
break;
}
else
{
printf("---------------请选择您要进行操作-------------------\n");
printf("| |\n"); //while(j<3);
printf("| 2、查找统计 |\n");
printf("| 3、增加统计 |\n");
printf("| 4、删除统计 |\n");
printf("| 5、输出全部统计 |\n");
printf("| 6、输出全部收入统计 |\n");
printf("| 7、输出全部支出统计 |\n");
printf("| |\n");
printf("-----------------------------------------------------|\n");
p=&b;
print_message(p);
do
{
scanf("%d",&k); //while(k>0)
if(k==10)
printf("感谢您使用本系统,再见!\n");
if(k==2)
{
printf("请输入您要查询日期:");
scanf("%s",data1);
find_record(p,data1);
}
if(k==3)
{
printf("请输入你要插入位置:\n");
scanf("%d",&lop1);
printf("请输入您要添加统计:\n");
printf("日期:");
scanf("%s",p0->date);
printf("操作:");
scanf("%s",p0->operate);
printf("金额:");
scanf("%d",&(p0->num));
insert_record(p,p0,lop1);
}
if(k==4)
{
printf("请输入您要删除统计位置:\n");
scanf("%d",&lop2);
del_record(p,lop2);
}
if(k==5)
{
all_print(p);
sum_num(p);
}
if(k==6)
acc_print(p);
if(k==7)
pay_print(p);
}while(k>0);
break;
}
}
j++;
}while(j<3);
printf("感谢您使用本系统,再见!\n");
}
}
(2)量化评分表
请学生将下面成绩评定表复制到汇报最终一页(单独一页)。
程序设计工程训练成绩评定标准表
明细项目
评分等级(含系数)
评分分值
实际得分
考勤
A(1)
B(0.8)
C(0.5)
D(0.0)
10
工程项目规范
A(1)
B(0.8)
C(0.5)
D(0.2)
10
工程训练汇报
A(1)
B(0.8)
C(0.5)
D(0.2)
30
设计作品质量
A(1)
B(0.8)
C(0.5)
D(0.2)
45
材料搜集情况
A(1)
B(0.8)
C(0.5)
D(0.2)
5
综合评分
优
90-100
良
80-89
中
70-79
合格
60-69
不合格
0-59
该生成绩为: ,指导老师(署名):
评定日期: 年 月 日
展开阅读全文