C语言程序设计结课大作业报告.docx
C语言程序设计结课大作业报告水电费管理系统一程序设计.掌握结构化程序设计的基本思想;1 .熟练掌握结构的设计和运用;.了解综合系统设计的基本原理;2 .掌握C语言程序的综合应用。二程序设计任务内容 水电费管理系统给用户提供了一个在Windows操作系统上运行的管理 平台,用户可以对其成员ID、姓名以及用水量、用电量、缴费信息构 成进行查看、添加、删除、修改等管理操作。由生活常识知,用户只需 根据管理员的要求缴费即可,而管理员那么需要计算、统计、纪录缴费信水电费管理系统软件是为管理员进行用户成员的用水电量及缴费信息管理进行计算、统计、纪录的应用软件,功能描述如下:nnnn);printf(”ntttl .用户管理 nttt2 收费管理 nttt3 退出n)printf("nttt请输入您的选择:");GOTO7:scanf("%d"Achoice);switch(choice)(case 1: m_user();systemfause");goto GOTO6;case 2: m_fee();system(,pausen);goto GOTO6;case 3: break;default:printf("n您的输入有误,请重新输入:");goto GOTO7;)五软件使用说明.在使用该软件系统时,每次运行都需要添加用户,上次的用户并不 能储存。1 .在添加用户时,ID ( 18 )指的是身份证号,18只是提示一般为18 位数字,但实际上没有限制,只要不超出数组的位数都可以。2 .系统默认的水电费价格为:水1.8元/吨,电0.5元/度。六程序设计心得与体会总体而言,我觉得c语言学确实实不太好,书到用时方觉少,感觉好多 都不懂,然后就去找各种资料去看人家的框架和思路,各种都看,看的 多了,就开始模仿,其中也尝试过做工程,用文件,但都以惨痛的失败 告终,最后不得不用简单得数组、结构体、循环之类的来做,把他们的复杂的工程用我们学过的这些基本循环结构等等来做,虽然看起来很简 略,但起码做出来了。第一次做这个,感觉框架是最重要的,后面的工 作基本都是围绕框架转的。附录2 :程序清单void displayO显示用户信息void add()添加用户void alterQ修改用户信息void delete_()删除用户void m_user()用户管理void m_fee()收费管理源代码#include<stdio.h>#include<string.h>#include<stdlib> h>#def ine w 1.8/*水18元/吨*/#define e 0.5/*电 0.5 元/度*/struct userchar name10,D20 ;/*用户的姓名和身份证号码*/double water,electricity;/*用水(吨)、电(度)量*/double monney;/*总共的水电费用*/u100;/*用户最大容量为100*/*显示用户信息*/void display()int n;/*确定当前用户的人数*/int i;for(n=0;n<100;n+)if(un.monney=0) break;if(n=0)printf (“系统无用户,需要添加! A_An");elsefor(i=0;i<n;i+)printf("n编号:dt姓名:%stID:%st用水量:.lf吨t用电量:.lf度 n”,i+l,ui.nameufi<IDui.water,ui.electricity);)/*添加用户*/void add()int n;/*确定当前用户的人数*/for(n=0;n<100;n+)if(un.monney=0) break;printf("ttt请输入新用户的姓名:”);scanf("%s",un.name);printf(Httt请输入新用户的ID(18位):“);scanf(H%sun.ID);printf (nttt请输入新用户的用水量:”);scanf(H%lfHj&un.water);printf("ttt请输入新用户的用电量:”);scanf(H%lf&un. electricity);un.monney=(un.water)*w+(un.electricity)*e;printf(Nn 添加成功!n“);)/*修改用户信息*/void alter()char name10;int n;/*确定当前用户的人数*/int i;printf("ttt请输入您的姓名:”);scanf (M%sname);for(n=0;n<100;n+)if(un.monney=0) break;for(i=0;i<n;i+)if(strcmp(ui.name name)=0)int choice=0;printf("ntttl.修改工Dnttt2.修改用水量nttt3.修改用电量nttt4. 退出nf,);printf ("nttt请输入您的选择:”);GOTO1:scanf(M%dH,&choice);switch(choice)printf(Nnttt 请输入 ID:");scanf(M%sui.ID);break;printf(Hnttt 请输入用水量:”);scanf("JSlf'.&uti .water);break;printf (Mnttt 请输入用电量:”);scanf("lf.electricity);break;break;default:printf ("ttt输入错误,请重新输入:“);goto GOTO1;)printf ("n 修改成功! n“);break;)if(i=n)printf(nnttt没有此用户,您可以选择注册新用户八_八! n”)/*删除用户*/void delete_()int ni=0,j;for(n=0;n<100;n+)if(un.monney=0) break;display();printf (nnttt请输入要删除用户对应的编号:”); scanf(”d;&i);for(j=i-l;j<n;j+)strcpy(uj .name>,u j+1.name);uj.electricity=uj+l.electricity;strcpy(uj.ID,uj+l.ID);uj.monney=uj+1.monney;uj.water=uj+1.water;un-l.monney=0;printf ("删除成功! Jn”);/*用户管理*/void m_user()int choice=0;GOTO2:system(” cis");printf ("tttnM);printf(Httt|用户管理八|nH);printf ("tttnnnM);printf("ntttl.显示用户信息nttt2.添加用户nttt3.修改用户信息nttt4 .删除用户信息nttt5 .退出”);printf("nttt请输入您的选择GOTO3:scanf(M%d; &choice);switch(choice)display();systemCpause1');goto GOTO2;add();system(,pause");goto GOTO2;alter();system("pauseH);goto GOTO2;delete_();system(Hpause");goto GOTO2;break;default:printf("ttt输入有误,请重新输入goto GOTO3;)/*收费管理*/void m_fee()int n,i,choice=0;double w_sum=0,e_sum=0;G0T04:system(Hcls");printf (HtttnM);printf (Nttt |收费管理八二| n");nnn");for(n=0;n<100;n+)if(un.monney=0) break;printf (”ntttl .用户费用信息查询nttt2 .总水费nttt3 ,总电费 nttt4 .总费用nttt5 .退出rT);printf ("nttt请输入您的选择GOTO5:scanf(”%cT,&choice);switch(choice)if(n=00)printf (Hnttt 系统无注册用户! n”);elsefor(i=0;i<n;i+)printf ("nt姓名:st水费:.2f元t电费:.2f元t缴纳的总费用:%.2f元 .name,(ui.water)*w,(ui.electricity)*e ui.monney);w_sum+=ui.water*w;e_sum+=ui.electricity*e;system("pauseH);goto G0T04;case 1: printf (nnttt系统用户缴纳的总水费统2f元n'w_sum);system("pause");goto G0T04;case 2: printf("nttt系统用户缴纳的总电费统2f元n'e_sum);system("pause");goto G0T04;case 3: printf (Mnttt系统用户缴纳的总费用:%.2f元n'w_sum+e_sum);systemC'pause");goto G0T04;case 4: printf("管理完毕!n”);break;default:printf (Hnttt输入错误,请重新输入goto GOTO5;)void main()int choice=0;GOTO6: system ("cis11);printf (ntttn”);printf(nttt|欢迎进入水电费管理系统八_八|nM);printf ("tttnnn"); printf ("ntttl .用户管理nttt2 .收费管理nttt3 .退出n");printf ("nttt请输入您的选择:”);GOTO7:scanf(H%d二&choice);switch(choice)case 1:m_user();system("pause");goto GOTO6;.给管理员提供功能选择界面:该系统只针对管理员,所以无需登录, 直接进入功能选择界面。功能选择界面包括输入功能选项、调用相应程 序两大需求。1 .管理用户信息:管理员可操作添加、查看、修改、删除用户信息. 包括姓名、ID、用水量及用电量。2 .查看用户缴费信息:可以查看每个用户应缴的水费、电费,系统默 认水1.8元/吨,电0.5元/度。3 .统计总费用:可以统计总的电费、水费及总费用,便于收缴费用后 进行检查、核实,以免出错。三程序详细设计说明系统结构设计1 .总体设计本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的 基本控制结构,着重实现管理系统的增、册!、改、查等典型的管理功能。 因此,系统的设计方法是结构化设计方法,开发手段是C语言,在DEV C+环境下开发。2 .系统模块结构图依据需求分析结果,水电费管理系统可以分为3个模块:case 2: m_fee();system("pauseH);goto GOTO6;break;default:printf (Mn您的输入有误,请重新输入:”);goto GOTO7;实时日历小程序程序设计目的:能够获取当前实时的时间,精确到秒,并且打印出当月月历,注明星期几。运行结果如下:Sat Jun 25 16:57:58 2022Mon6132027Mon6132027Tue Wed Thu1278914 15 1621 22 2328 29 30Fri 310 1724n Su18* IX IX no2Process exited after 0. 07112 seconds with return value 0 请按任意键继续代码如下:#include <stdio.h>#include <time.h> const char head = " Mon Tue Wed Thu Fri Sat Sun"int getEndDay(int year, int month);int get Wee kOf F i rst Day (i nt nowDay, int nowWeek);int main (void)(time_t rawtime;struct tm * now;time(&rawtime);now = localtime(&rawtime);printf("n %sn", asctime(now);int endDay = getEndDay(now->tm_year, now->tm_mon);int weekOfFirstDay = getWeekOfFirstDay(now->tm_mday, now->tm_wday);int today = now->tm_mday;printf("%sn", head); / 输出表头/输出第一行占位空格if (weekOfFirstDay = 0)printf("");for (int i = 1; i < weekOfFirstDay; i+)printf(" ");/从一号开始输出到月末for (int i = 1; i <= endDay; i+)if (i = today)printf("%3d*", i);elseprintf("%4d", i);/周末输出结束后输出换行if (i 十 weekOfFirstDay -1) % 7 = 0) puts("");)puts("");return 0;)/得到当前所在月份的天数 int getEndDay(int year, int month)(const int days15 = 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if (month = 1)(if (year % 400 = 0 | | (year % 100 != 0 && year % 4 = 0) return 29;elsereturn 28;) elsereturn daysmonth; /推算这月第一天是礼拜几/返回值:司(礼拜日,礼拜一礼拜六) int get Wee kOf F i rst Day (i nt nowDay, int nowWeek) (int mod = (nowDay -1) % 7;int ans = nowWeek - mod;if (ans >= 0)return ans;elsereturn 7 - ans;1、用户管理模块、2、功能选择模块、3、用户缴费查看模块、.界面设计水电费管理系统的界面设计主要遵循方便易用、界面友好的原那么,具体设计如下。(1)功能选择界面的设计主界面主要包括用户管理和收费管理两大局部,并且这两局部的操作 比拟简单,使得界面友好易用。具体设计如图4主界面功能选择界面效果图欢迎进入水电费管理系统人12 3B 二 B1户费出请输入您的选择:图4主界面功能选择界面效果图 分界面各有5个功能选项。具体设计如图5分解面功能选择界面效果图请标入您的选择J请标入您的选择J用户笞理t12 3 4 5询占一息瞰户出:忌总)逍息 息息 择 信僖 谢 川户5X时 用用用用您 示鸨电人 12 3 4 LH 芋图5分界面功能选择界面效果图(2)执行结果界面设计由于C语言对图形化界面的支持比拟有限,因此,对于该管理系统,首 要考结果的清晰易读。例如:假设选择操作1.用户费用信息查询,执行结果如图6执行结果图姓名:xiao.in姓名:xiao.in姓名:xihong姓名:lining 清按任意够赛续零毯用 户出 用1总0通请输入您的选择:,水费:18 .酶元电费:500元水费:36。0元电在:5,彻元水费:1日.W元电费:,。.他元缴纳的总费用:23 囿元缴纳的.已费用XI .制元缴纳的总费用:28.便!元图6执行结果图4 .模块设计.用户管理模块提供用户管理功能,当运行水电费管理系统时,因为系统使用数组储存, 所以每次运行都要重新添加用户。添加用户中,ID为身份证号,提示 为18位,但没有限制。添加成功后,可以查看、修改、删除。模块功 能树如图7所示:模块功能树 函数定义:void display。、void add()s void alter。、void delete)、void m_user()功能:进入用户管理界面,对用户信息进行查看、添加、修改、删除, 同时提供信息为水电费计算。输入:用户名、ID、用水量、用电量。处理:显示所有当前用户信息,如果没有会提示添加。添加用户,需要输入用户名、ID、用水量、用电量。修改前需输入用户名,进入后可选择用户名、ID、用水量、用电量 修改。进入删除后,会显示所有用户,然后选择需要删除的用户的序号即 可。(1) .功能选择模块用户管理界面用户管理界面收费管理界面提供给管理者的功能选择界面,在该模块中选择需要功能,并调用相应 的功能模块。函数声明:main。函数功能:给出管理员的功能选择提示界面,根据选项调用相应函数。 输入:管理员输入要进行操作的数字选项。 处理:接收管理员输入的操作选项。系统根据管理员输入的操作选项调用相应的功能函数。显示相应函数的操作过程和结果。 输出:管理员选项对应的函数的执行结果。(3).用户缴费查看模块对用户的缴费信息进行统计,显示。可显示每个用户的水费、电费及总 费用,还可显示所有用户的总水费、总电费、总缴费,便于管理员缴费。图9用户缴费查看模块功能图 函数声明:void m_fee()功能:统计并显示用户缴费信息,为管理者展示每个用户的水费、电 费、总费用,以及总水费、总电费、总费用。管理者输入选择项,程序 便显示相应信息。输入:管理员输入要进行操作的数字选项。处理:接收管理员的选择命令,跳转到相应程序段;显示相对应的信息。输出:显示管理者选择的信息。四程序局部源程序代码和调诫过程L用户信息用数组储存void add()int n;for(n=0;n<100;n + +)if(un.monney=0) break;/*确定当前用户的人数*/printf("ttt请输入新用户的姓名:"); scanf("%s",un.name);printf("ttt请输入新用户的ID(18位):");scanf("%s",un.ID);printf("ttt请输入新用户的用水量:");scanf("%lf",&un.water);printf("ttt请输入新用户的用电量:)scanf("%lf",&un.electricity);un.monney=(un.water)*w+(un.electricity)*e;printf("n 添加成功!n");)2.用goto循环void main()int choice=0;GOTO6:system("cls");printf("tttn");printf("ttt|欢迎进入水电费管理系统|n");