2024年5月2日发(作者:)

HUNAN UNIVERSITY

程序设计训练

——

水电费管理系统

报 告

学生姓名

学生学号

专业班级

指导老师

2012-7-2至 2012-7-13

一 程序设计目的

1

.掌握结构化程序设计的基本思想;

2.熟练掌握结构的设计和运用;

3.了解综合系统设计的基本原理;

4.掌握C语言程序的综合应用。

程序设计任务内容

水电费管理系统给用户提供了一个在Windows操作系统上运行的管理平台,用户可以对

其成员ID、姓名以及用水量、用电量、缴费信息构成进行查看、添加、删除、修改等管理

操作。由生活常识知,用户只需根据管理员的要求缴费即可,而管理员则需要计算、统计、

纪录缴费信息,因此此系统只针对管理员开发。

水电费管理系统软件是为管理员进行用户成员的用水电量及缴费信息管理进行计算、统

计、纪录的应用软件,功能描述如下:

1.给管理员提供功能选择界面:该系统只针对管理员,所以无需登录,直接进入功能

选择界面。功能选择界面包括输入功能选项、调用相应程序两大需求。

2. 管理用户信息:管理员可操作添加、查看、修改、删除用户信息,包括姓名、ID、

用水量及用电量。

3.查看用户缴费信息:可以查看每个用户应缴的水费、电费,系统默认水1.8元/吨,

电0.5元/度。

4.统计总费用:可以统计总的电费、水费及总费用,便于收缴费用后进行检查、核实,

以免出错。

三 程序详细设计说明

系统结构设计

1.总体设计

本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的基本控制

结构,着重实现管理系统的增、删、改、查等典型的管理功能。因此,系统的设计方法是结

构化设计方法,开发手段是C语言,在Microsoft Visual C++ 6.0环境下开发。

2.系统模块结构图

依据需求分析结果,水电费管理系统可以分为3个模块:

1、用户管理模块、

2、功能选择模块、

3、用户缴费查看模块、

如图1所示。

水电费管理系统

图1系统模块结构图

3. 系统流程描述:

开始

用收

户费

管管

理理

显修删

示改除总总总

加退

用用用用水电费

户户户

信费费用

信信信息

息息息

图2系统流程图

退

退

4.界面设计

水电费管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。

(1)功能选择界面的设计

①主界面主要包括用户管理和收费管理两大部分,并且这两部分的操作比较简单,使

得界面友好易用。

具体设计如 图4主界面功能选择界面效果图

图4 主界面功能选择界面效果图

②分界面各有5个功能选项。

具体设计如 图5分解面功能选择界面效果图

图5分界面功能选择界面效果图

(2) 执行结果界面设计

由于C语言对图形化界面的支持比较有限,因此,对于该管理系统,首要考结果的清晰

易读。

示例:

若选择操作1.用户费用信息查询,执行结果如 图6执行结果图

图6 执行结果图

5.模块设计

(1).用户管理模块

提供用户管理功能,当运行水电费管理系统时,因为系统使用数组储存,所以每次运行

都要重新添加用户。添加用户中,ID为身份证号,提示为18位,但没有限制。添加成功后,

可以查看、修改、删除。模块功能树如图7所示:

用户管理模块

退

函数定义:void display()、void add()、void alter()、void delete_()、void m_user()

功能:进入用户管理界面,对用户信息进行查看、添加、修改、删除,同时提供信息为水电

费计算。

输入:用户名、ID、用水量、用电量。

处理:①显示所有当前用户信息,如果没有会提示添加。

②添加用户,需要输入用户名、ID、用水量、用电量。

③修改前需输入用户名,进入后可选择用户名、ID、用水量、用电量修改。

④进入删除后,会显示所有用户,然后选择需要删除的用户的序号即可。

图7用户管理模块功能树

(2).功能选择模块

提供给管理者的功能选择界面,在该模块中选择需要功能,并调用相应的功能模块。功

能选择模块的功能树如图8所示。

功能选择模块

图8 功能选择模块功能树

函数声明:main()函数

 功能:给出管理员的功能选择提示界面,根据选项调用相应函数。

 输入:管理员输入要进行操作的数字选项。

 处理:

①接收管理员输入的操作选项。

②系统根据管理员输入的操作选项调用相应的功能函数。

③显示相应函数的操作过程和结果。

 输出:管理员选项对应的函数的执行结果。

(3). 用户缴费查看模块

对用户的缴费信息进行统计,显示。可显示每个用户的水费、电费及总费用,还可显示

所有用户的总水费、总电费、总缴费,便于管理员缴费。

模块功能树如图9所示

总总总

退

用水电费

信费费用

图9 用户缴费查看模块功能图

用户缴费查看模块

函数声明:void m_fee()

 功能:统计并显示用户缴费信息,为管理者展示每个用户的水费、电费、总费用,

以及总水费、总电费、总费用。管理者输入选择项,程序便显示相应信息。

 输入:管理员输入要进行操作的数字选项。

 处理:

接收管理员的选择命令,跳转到相应程序段;

显示相对应的信息。

 输出:显示管理者选择的信息。

程序部分源程序代码和调试过程

1.用户信息用数组储存

void add()

{ int n;

for(n=0;n<100;n++)

if(u[n].monney==0) break;/*确定当前用户的人数*/

printf("ttt请输入新用户的姓名:");

scanf("%s",u[n].name);

printf("ttt请输入新用户的ID(18位):");

scanf("%s",u[n].ID);

printf("ttt请输入新用户的用水量:");

scanf("%lf",&u[n].water);

printf("ttt请输入新用户的用电量:");

scanf("%lf",&u[n].electricity);

u[n].monney=(u[n].water)*w+(u[n].electricity)*e;

printf("n添加成功!n");

}

本来是打算用文件存储的,但小生不才,c语言学得不好,搞了一晚上也没搞出来。最后没

办法,只好采用数组。所以程序就有了不能存储的缺陷,每次运行都需要重新添加用户。

2.用goto循环

void main()

{ int choice=0;

GOTO6:system("cls");

printf("ttt-----------------------------------n");

printf("ttt| 欢迎进入水电费管理系统 |n");

printf("ttt-----------------------------------nnn");

printf("nttt1.用户管理nttt2.收费管理nttt3.退出n");

printf("nttt请输入您的选择:");

GOTO7:scanf("%d",&choice);

switch(choice)

{

case 1:

m_user();

system("pause");

goto GOTO6;

case 2:

m_fee();

system("pause");

goto GOTO6;

}

case 3:

break;

default:

}

printf("n您的输入有误,请重新输入:");

goto GOTO7;

其实一开始我不知道怎么办,因为以前没用过这种循环。后来请教同学做了这个循环,感觉

很实用。

软件使用说明

1.

在使用该软件系统时,每次运行都需要添加用户,上次的用户并不能储存。

2.

在添加用户时,ID(18)指的是身份证号,18只是提示一般为18位数字,但实际上没有

限制,只要不超出数组的位数都可以。

3.

系统默认的水电费价格为:水1.8元/吨,电0.5元/度。

程序设计心得与体会

说实话,在实习开始前就有些担心,因为c语言确实学得不好,尤其是文件和链表部分,

基本能看懂就不错了。

后来拿到题也没马上开始做,为什么呢,因为我的直觉是这题比较简单,当然我最终做

出来的程序简单得要死。

因为我们在金工实习,所以就直到很晚才开始做。开始做时,就一个光秃秃的题目,既

没要求也没框架,感觉毫无头绪。然后上百度找类似的费用统计的模版看,慢慢地就确定了

自己的模版,其实也不完全确定,后来还改了些。

我上面说了,我c语言没学好,书到用时方觉少,感觉好多都不懂,然后就看教材上的

例题,虽然文件链表之类的依然茫然,但基本有了思绪。我其中也尝试过做工程,用文件,

但都以惨痛的失败告终,最后不得不用简单得数组、结构体、循环之类的。

谢天谢地,虽然不怎么的,但起码做出来了。第一次做这个,感觉框架是最重要的,后

面的工作基本都是围绕框架转的。在这次作业中,充分暴露了我的不足,看来还得用点功把

它补起来啊。

附录

1

:参考文献

C

语言程序设计教程》

李丽娟

主编

人民邮电出版社

/view/

/view/

附录

2

:程序清单

void display() 显示用户信息

void add() 添加用户

void alter() 修改用户信息

void delete_() 删除用户

void m_user() 用户管理

void m_fee() 收费管理

源代码

#include

#include

#include

#define w 1.8/*水1.8元/吨*/

#define e 0.5/*电0.5元/度*/

struct user{

char name[10],ID[20];/*用户的姓名和身份证号码*/

double water,electricity;/*用水(吨)、电(度)量*/

double monney;/*总共的水电费用*/

}u[100];/*用户最大容量为100*/

/*显示用户信息*/

void display(){

int n;/*确定当前用户的人数*/

int i;

for(n=0;n<100;n++)

if(u[n].monney==0) break;

if(n==0)

printf("系统无用户,需要添加!^_^n");

else

for(i=0;i

printf("n编号:%dt姓名:%stID:%st用水量:%.1f吨t用电量:%.1f度

n",i+1,u[i].name,u[i].ID,u[i].water,u[i].electricity);

}

/*添加用户*/

void add(){

int n;/*确定当前用户的人数*/

for(n=0;n<100;n++)

if(u[n].monney==0) break;

printf("ttt请输入新用户的姓名:");

scanf("%s",u[n].name);

printf("ttt请输入新用户的ID(18位):");

scanf("%s",u[n].ID);

printf("ttt请输入新用户的用水量:");

scanf("%lf",&u[n].water);

printf("ttt请输入新用户的用电量:");

scanf("%lf",&u[n].electricity);

u[n].monney=(u[n].water)*w+(u[n].electricity)*e;

printf("n添加成功!n");

}

/*修改用户信息*/

void alter(){

char name[10];

int n;/*确定当前用户的人数*/

int i;

printf("ttt请输入您的姓名:");

scanf("%s",name);

for(n=0;n<100;n++)

if(u[n].monney==0) break;

for(i=0;i

if(strcmp(u[i].name,name)==0){

int choice=0;

printf("nttt1.修改IDnttt2.修改用水量nttt3.修改用电量nttt4.退出n");

printf("nttt请输入您的选择:");

GOTO1:scanf("%d",&choice);

switch(choice)

{

case 1:

printf("nttt请输入ID:");

scanf("%s",u[i].ID);

break;

case 2:

printf("nttt请输入用水量:");

scanf("%lf",&u[i].water);

break;

case 3:

printf("nttt请输入用电量:");

scanf("%lf",&u[i].electricity);

break;

case 4:

break;

default:

printf("ttt输入错误,请重新输入:");

goto GOTO1;

}

printf("n修改成功!n");

break;

}

if(i==n)

printf("nttt没有此用户,您可以选择注册新用户^_^!n");

}

/*删除用户*/

void delete_(){

int n,i=0,j;

for(n=0;n<100;n++)

if(u[n].monney==0) break;

display();

printf("nttt请输入要删除用户对应的编号:");

scanf("%d",&i);

for(j=i-1;j

strcpy(u[j].name,u[j+1].name);

u[j].electricity=u[j+1].electricity;

strcpy(u[j].ID,u[j+1].ID);

u[j].monney=u[j+1].monney;

u[j].water=u[j+1].water;

}

u[n-1].monney=0;

printf("删除成功!^_^n");

}

/*用户管理*/

void m_user(){

int choice=0;

GOTO2:system("cls");

printf("ttt---------------------n");

printf("ttt| 用户管理^_^ |n");

printf("ttt---------------------nnn");

printf("nttt1.显示用户信息nttt2.添加用户nttt3.修改用户信息nttt4.删除用户信

息nttt5.退出");

printf("nttt请输入您的选择:");

GOTO3:scanf("%d",&choice);

switch(choice)

{

case 1:

display();

system("pause");

goto GOTO2;

case 2:

add();

system("pause");

goto GOTO2;

case 3:

alter();

system("pause");;

goto GOTO2;

case 4:

delete_();

system("pause");;

goto GOTO2;

case 5:

break;

default:

printf("ttt输入有误,请重新输入:");

goto GOTO3;

}

}

/*收费管理*/

void m_fee(){

int n,i,choice=0;

double w_sum=0,e_sum=0;

GOTO4:system("cls");

printf("ttt---------------------n");

printf("ttt| 收费管理^_^ |n");

printf("ttt---------------------nnn");

for(n=0;n<100;n++)

if(u[n].monney==0) break;

printf("nttt1.用户费用信息查询nttt2.总水费nttt3.总电费nttt4.总费用nttt5.退

出n");

printf("nttt请输入您的选择:");

GOTO5:scanf("%d",&choice);

switch(choice)

{

case 1:

if(n==00)

printf("nttt系统无注册用户!n");

else

for(i=0;i

printf("nt姓名:%st水费:%.2f元t电费:%.2f元t缴纳的总费用:%.2f元

n",u[i].name,(u[i].water)*w,(u[i].electricity)*e,u[i].monney);

w_sum+=u[i].water*w;

e_sum+=u[i].electricity*e;

}

system("pause");

goto GOTO4;

case 2:

printf("nttt系统用户缴纳的总水费:%.2f元n",w_sum);

system("pause");

goto GOTO4;

case 3:

printf("nttt系统用户缴纳的总电费:%.2f元n",e_sum);

system("pause");

goto GOTO4;

case 4:

printf("nttt系统用户缴纳的总费用:%.2f元n",w_sum+e_sum);

system("pause");

goto GOTO4;

case 5:

printf("管理完毕!n");

break;

default:

printf("nttt输入错误,请重新输入:");

goto GOTO5;

}

}

void main(){

int choice=0;

GOTO6:system("cls");

printf("ttt-----------------------------------n");

printf("ttt| 欢迎进入水电费管理系统^_^ |n");

printf("ttt-----------------------------------nnn");

printf("nttt1.用户管理nttt2.收费管理nttt3.退出n");

printf("nttt请输入您的选择:");

GOTO7:scanf("%d",&choice);

switch(choice)

{case 1:

m_user();

system("pause");

goto GOTO6;

case 2:

m_fee();

system("pause");

goto GOTO6;

case 3:

break;

default:

printf("n您的输入有误,请重新输入:");

goto GOTO7;

}

}