加油机收费管理系统.docx

上传人:b****5 文档编号:3904786 上传时间:2022-11-26 格式:DOCX 页数:29 大小:532.22KB
下载 相关 举报
加油机收费管理系统.docx_第1页
第1页 / 共29页
加油机收费管理系统.docx_第2页
第2页 / 共29页
加油机收费管理系统.docx_第3页
第3页 / 共29页
加油机收费管理系统.docx_第4页
第4页 / 共29页
加油机收费管理系统.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

加油机收费管理系统.docx

《加油机收费管理系统.docx》由会员分享,可在线阅读,更多相关《加油机收费管理系统.docx(29页珍藏版)》请在冰豆网上搜索。

加油机收费管理系统.docx

加油机收费管理系统

沈阳航空航天大学

 

课程设计报告

 

课程设计名称:

C语言课程设计

课程设计题目:

加油机收费管理程序

 

院系:

计算机学院

专业:

计算机科学与技术

班级:

学号:

姓名:

指导教师:

高利军

完成日期:

2012年3月16日

目录

第1章需求分析-1-

1题目的内容-1-

1.1输出形式……………………………………………………………………………………-1-

1.2程序功能-1-

第2章概要设计-2-

2.1数据类型的定义-2-

2.2主要函数和函数功能描述-2-

2.3程序模块图-3-

第3章详细设计4

3.1主函数模块5

3.2主菜单模块5

3.3油料建立模块7

3.4油价显示模块9

3.5进货与调动模块9

3.6销售模块10

3.7销售查看模块11

第4章调试分析13

第5章用户使用说明14

第6章测试结果15

参考资料20

附录22

第1章需求分析

1题目的内容

要求能建立油料类别及收费标准(类别分别为汽油、柴油、机油等);并且加油机可以实现对油料的进货、销售、库存变动管理;还能实现对某日内以及近期各类油料销售数量和收入进行统计;能对一段时间的销售情况进行统计、排名来辅助进货管理。

而且当程序关闭时,程序可对指定内容和销售情况进行存储,当下次开机时无需在此输入相关信息,程序会自动从文件中读取油料信息,以减少用户不便;

1.1输出的形式

输出时在界面上出现油料价格以及功能选项,以菜单的形式进行选项的选择,第一次执行程序时须手动输入油料信息方可显示,第二次则通过对文件的读取获得所需油料信息显示在黑屏上,然后进行子函数的调用,完成所需功能,并且每项功能完成后会有输出信息提示,如果没完成则会有错误提示显示在黑屏上。

1.2程序功能

1.建立有各种油料类别供用户参考选取;

2.能实现对油料的进货、销售、库存变动管理;

3.当一天销售完成时即可对一天的销售情况进行察看,也可对近期的销售情况进行察看;

4.当程序关闭时,程序可对指定内容和销售情况进行存储,当下次开机时无需在此输入相关信息,程序会自动从文件中读取油料信息;

5.能对一段时间的销售情况进行统计、排名来辅助进货管理。

第2章概要设计

2.1数据类型的定义

该程序使用了链表来存储各类油料信息,该链表有3个节点。

定义的结构体中含有8个成员,name1用来存储油料的名字,sum用来存储近期油料的销售收入,num用来存储该油料的储量,price用来存储该油料的价格,shou用来存储近期该油料的销售量,s用来存储该油料的每次销售时的收入,shou_1用来存储今日该油料的销售量,sum_1用来存储该油料的今日销售时的收入,定义的方式如下所示:

structoil_charge

{

intname1;//油料类别

floatprice;//油价

floatnum;//油料储量

floatsum;//近期收入

floats;//每次销售的收入

floatshou;//近期销量

floatsum_1;//今日收入

floatshou_1;//今日销量

structoil_charge*next;

};

2.2主要函数和函数功能描述

(1)主函数main():

调用主菜单函数及其它函数;

(2)主菜单函数menu_1():

打印菜单内容,接收用户的选择并将其返回主函数;

(3)副菜单函数menu_2():

打印每个数字所代表的油料类别并接收用户所选油料类别;

(4)创建链表函数create_1():

创建链表,供存储油料信息使用;

(5)创建链表函数create_2():

创建链表,供存储从文件中读取的油料信息使用;

(6)显示函数show_price(NODE*head):

显示油料的价格信息;

(7)销售函数sell(NODE*head):

对用户所选油料进行销售处理;

(8)写入文件函数write_in(NODE*head):

将链表每个节点的内容写入文件,供二次运行程序时使用;

(9)查看函数situation_1(NODE*head):

查看近期油料销售的信息;

(10)查看函数situation_2(NODE*head):

查看今日油料销售的信息;

(11)进货与调动函数buy_change(NODE*head):

对所选油料进行进货或调动处理;

(12)释放链表函数freelist(NODE*head):

释放链表节点所占空间;

2.3程序模块图

图2.1加油机收费管理程序模块图

第3章详细设计

3.1主函数模块

main()是本程序的主函数,用来调用主菜单函数及其它函数。

流程图如图3.1所示:

图3.1主函数流程图

3.2功能选项模块

(1)功能:

menu_1()为本程序提供主菜单的显示,并且根据用户输入的选项调用其他的函数,借以完成用户所期望的功能。

(2)数据类型描述:

整型i;

流程图如图3.2所示

图3.2menu_1()模块流程图

 

·3.3油料建立模块

(1)功能:

本模块共有两个创建函数,程序会根据指定文件是否存在来选择链表的建立方法。

当程序为首次执行时,会选用create_1()函数,并要采取手动输入数据;当程序为二次执行时,会选用create_2()函数,主动从文件中读取数据;

(2)数据类型描述:

整型i;浮点型n;结构体structoil_change;

create_1()函数流程图如图3.3所示

图3.3create_1()模块流程图

create_2()函数流程图如图3.4所示

图3.4create_2()函数模块流程图

3.4油价显示模块

(1)功能:

Show_price(NODE*head)函数的功能是显示油料价格的信息,然手在屏幕上打印出来。

(2)数据类型描述:

整型i;结构体structoil_change;

流程图如图3.5所示

图3.5show_price(NODE*head)函数模块流程图

3.5进货与调动模块

(1)功能:

buy_change(NODE*head)函数的作用是接收用户输入数据,寻找对应油料,并完成对油料的进货或调动工作。

(2)数据描述:

浮点型n;结构体structoil_change;

流程图如3.6所示

图3.6buy_change(NODE*head)函数模块流程图

3.6销售模块

(1)功能:

sell(NODE*head)函数的功能是接收用户输入数据,寻找对应油料,完成销售功能。

流程图如3.7所示

图3.7sell(NODE*head)函数模块流程图

·3.7销售查看模块

(1)功能:

查看函数功能是对今日或近期的销售情况进行查看以达到辅助进货的目的。

Situation_1(NODE8head)为查看近期销售情况;

(2)数据描述:

结构体数组structoil_changetru[3],结构体structoil_change,整型i;

流程图如3.8所示

图3.8situation_1(NODE*head)函数模块流程图

Situation_2(NODE8head)为查看当日销售情况,流程图如3.9所示

图3.9situation_2(NODE*head)函数模块流程图

第4章调试分析

(1)问题:

油类名称无法输入,因为字符串无法整体赋值;

解决方法:

用数字代表各油料名称,输入时也输入数字进行查找。

(2)问题:

无法将数据保存,而且读取时赋值混乱;

解决方法:

换取文件写入与读取方式,采用整体写入与读取。

(3)问题:

运行后有错误菜单提示;

解决方法:

发现链表未释放,设一链表释放函数.

(4)问题:

当程序第一次执行完后,无法进行方便的二次操作,因为与第一次使用的是同一个建立链表函数,这样第二次就无法从文件中读取数据并赋值给相应变量;

解决方法:

用两个建立链表函数,判断是否为第一次执行程序,如果是,就执行第一个函数,否原则执行第二个。

(5)问题:

读取的数据总是第一个油料的信息;

解决方法:

打开文件的步骤设在了循环内部,将其移至循环圈外即可。

 

第5章用户使用说明

(1)在VC++环境下,将程序代码输入。

(2)对输入好的程序进行编译。

(3)修改编译中出现的错误(如:

符号的遗失,逻辑错误等)。

(4)运行程序。

(5)在运行界面下会出现油价信息及主菜单,如图5.1,上面有四个选项,通过用户的需要进行选择。

(6)若输入1则进入进货或调动函数;输入2则进销售函数;输入3则进入查看函数;输入4则退出程序并保存油价信息及近期销售信息。

图5.1主菜单界面

第6章测试结果

运行程序后,会出现主菜单,如图6.1所示

图6.1主菜单

 

输入1,进入进货或调动选项,输入油量。

会出现副菜单,然后再输入所需油料对应的代号即可,如图6.2所示:

 

图6.2进货或调动

 

输入2,进入销售功能,输入油量。

会出现副菜单,在输入对应油料对应的代号即可,若输入的代号没有发现或油量不足,会出现错误提示。

如图6.2所示

图6.3销售

输入3,进入查看功能,再输入1或2选择查看的范围。

如图6.4所示

图6.41查看当日销售情况

 

图6.42查看近期销售情况并排名

 

输入4,执行退出功能,退出该程序并保存数据。

如图

图6.5退出程序

 

下次运行程序后,会出现不同于第一次的主菜单,可不用手动输入油料信息如图6.6所示

图6.6二次执行程序

 

参考资料

[1]谭浩强主编,《C语言程序设计》【M】北京:

高等教育出版社,2006

[2]张磊。

《c语言程序设计》【M】北京:

高等教育出版社,2005

[3]严蔚敏《数据结构》(c语言版)【M】北京:

清华大学出版社2004

附录

源程序:

//加油机收费管理系统.cpp:

Definestheentrypointfortheconsoleapplication.

#include

#include

#include

structoil_charge

{

intname1;

floatprice;

floatnum;

floatsum;

floats;

floatshou;

floatsum_1;

floatshou_1;

structoil_charge*next;

};

typedefstructoil_chargeNODE;

structoil_charge*first,*second,*third,*r;

NODE*create_1();

NODE*create_2();

voidbuy_change(NODE*head);

voidsell(NODE*head);

voidsituation_1(NODE*head);

voidsituation_2(NODE*head);

voidfreelist(NODE*head);

voidshow_price(NODE*head);

voidwrite_in(NODE*head);

intmenu_1();

intmenu_2();

voidmain(intargc,char*argv[])//主函数

{

NODE*head;

FILE*fp;

inti;

printf("****************************加油机收费管理****************************\n");

printf("注释菜单\n");

printf("*****************************************\n");

printf("1.汽油\n");

printf("2.柴油\n");

printf("3.机油\n");

printf("输入相应数据的顺序为:

机油->柴油->汽油\n");

printf("*****************************************\n");

if((fp=fopen("file.dat","rb"))==NULL)

{

head=create_1();

}

else

head=create_2();

show_price(head);

for(;;)

switch(menu_1())

{

case1:

buy_change(head);break;

case2:

sell(head);break;

case3:

{

printf("1.查看当天销售记录!

\n");

printf("2.查看近期销售记录!

\n");

scanf("%d",&i);

switch(i)

{

case1:

situation_2(head);break;

case2:

situation_1(head);break;

}

break;

}

case4:

{

write_in(head);

freelist(head);

printf("收费工作结束!

\n");

return;

}

}

}

intmenu_1()//主菜单函数

{

intchoice;

printf("主菜单\n");

printf("****************************************\n");

printf("1.进货/调动\n");

printf("2.销售\n");

printf("3.查看\n");

printf("4.退出\n");

printf("****************************************\n");

do

{printf("enteryouchoice(1~4):

");

scanf("%d",&choice);

}while((choice<1)||(choice>4));

returnchoice;

}

intmenu_2()//副菜单

{

intchoice;

printf("副菜单\n");

printf("****************************************\n");

printf("1.汽油\n");

printf("2.柴油\n");

printf("3.机油\n");

printf("****************************************\n");

do

{printf("enteryouchoice(1~3):

");

scanf("%d",&choice);

}while((choice<1)||(choice>3));

returnchoice;

}

NODE*create_1()//创建链表

{

NODE*head,*p;

inti=1;

printf("储量收入价格种类\n");

printf("-------------------------\n");

head=(NODE*)malloc(sizeof(NODE));

if(head==NULL)

{

printf("noenoughmemory!

\n");

returnNULL;

}

head->next=NULL;

while(i<=3)

{

p=(NODE*)malloc(sizeof(NODE));

if(p==NULL)

{

printf("havenoenoughmemory!

");

exit(0);

}

scanf("%f%f%f%d",&p->num,&p->sum,&p->price,&p->name1);

p->next=head->next;

head->next=p;

p->shou=0.0;

p->sum_1=0.0;

p->shou_1=0.0;

i++;

}

printf("-------------------------\n");

return(head);

}

NODE*create_2()//创建链表

{

NODE*head,*p;

FILE*fp;

inti=1;

head=(NODE*)malloc(sizeof(NODE));

if(head==NULL)

{

printf("noenoughmemory!

\n");

returnNULL;

}

head->next=NULL;

if((fp=fopen("file.dat","rb"))==NULL)

{

printf("thefile2cannotbefound!

\n");

exit(0);

}

while(i<=3)

{

p=(NODE*)malloc(sizeof(NODE));

if(p==NULL)

{

printf("havenoenoughmemory!

");

exit(0);

}

fread(p,sizeof(NODE),1,fp);

p->sum_1=0.0;

p->shou_1=0.0;

p->next=head->next;

head->next=p;

i++;

}

fclose(fp);

return(head);

}

voidshow_price(NODE*head)//油价显示

{

NODE*p;

inti;

for(i=1;i<=70;i++)

printf("=");

printf("\n");

printf("加油收费标准为:

\n");

for(i=1;i<=70;i++)

printf("=");

printf("\n");

p=head->next;

for(i=1;i<=3;i++)

{

printf("%d:

%f元每升\n",p->name1,p->price);

p=p->next;

}

for(i=1;i<=70;i++)

printf("=");

printf("\n");

}

voidbuy_change(NODE*head)//油料购进与调动

{

NODE*p;

floatm;

intstr1;

printf("输入改变量:

");

scanf("%f",&m);

switch(menu_2())

{

case1:

str1=1;break;

case2:

str1=2;break;

case3:

str1=3;break;

}

p=head->next;

while((p->next!

=NULL)&&(p->name1!

=str1))

{

p=p->next;

}

if(p->name1!

=str1)

{

printf("error1!

");

}

else

{

p->num=p->num+m;

printf("工作完成!

\n");

}

}

voidsell(NODE*head)//油料销售

{

NODE*p;

intstr1;

floatm;

printf("输入需求量:

");

scanf("%f",&m);

switch(menu_2())

{

case1:

str1=1;break;

case2:

str1=2;break;

case3:

str1=3;break;

}

p=head->next;

while((p->next!

=NULL)&&(p->name1!

=str1))

{

p=p->next;

}

if((p->name1!

=str1)||(m>p->num))

{

printf("error2!

");

}

else

{

p->num=p->num-m;

p->shou=p->shou+m;

p->s=p->price*m;

p->shou_1=p->shou_1+m;

p->sum=p->sum+p->s;

p->sum_1=p->sum_1+p->s;

printf("销售工作完成!

\n");

}

}

voidsituation_1(NODE*head)//统计近期销量并排名

{

NODE*q;

inti=0,j,k;

q=head->next;

while(q!

=NULL)

{

tru[i]=q;

q=q->next;

i++;

}

k=i;

for(i=1;i

for(j=0;j

if(tru[j]->sum>tru[j+1]->sum)

{

r=tru[j];

tru[j]=tru[j+1];

tru[j+1]=r;

}

for(i=1;i<=70;i++)

printf("=");

printf("\n");

printf("查看结果如下:

\n");

for(j=0;j

printf("销售第%d位的是:

名称:

%d,收入;%f,储量:

%f,销量:

%f\n",j+1,tru[k-1-j]->name1,tru[k-1-j]->sum,tru[k-1-j]->num,tru[k-1-j]->shou);

for(i=1;i<=70;i++)

printf("=");

printf("\n");

}

voidsituation_2(NODE*head)//统计今日销售情况

{

NODE*p;

inti=1;

p=head->next;

printf("今日销售情况如下:

\n");

while(i<=3)

{

printf("%d的销量为:

%f,收入为:

%f\n",p->name1,p->shou_1,p->sum_1);

p=p->next;

i++;

}

}

voidwrite_in(NODE*head)//将近期销售信息写入文件

{

FILE*fp;

NODE

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1