课程设计电费管理系统.docx
《课程设计电费管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计电费管理系统.docx(33页珍藏版)》请在冰豆网上搜索。
课程设计电费管理系统
一、系统功能分析与设计
1、总体设计。
电费管理主要完成供电公司对其客户进行开户、销户、用电计费统计等相关业务。
涉及的主要信息包括:
客户姓名,身份证号、住址、电表号、电表读数,日期等
主要有开户,销户,过户,计费,查询等业务。
2.详细设计
共有九个调用函数,分别是主菜单,计数读入文件函数,保存文件函数,
开户函数,销户函数,过户函数,计费函数,查询函数,退出系统函数。
1.voidfun1(structdianfei*p)开户业务函数
2.voidfun2(structdianfei*p)销户业务
3.voidfun3(structdianfei*p)过户业务
4.voidfun4(structdianfei*p)计算业务
5.voidfun5(structdianfei*p)查询业务
二、程序代码与界面。
1、程序代码
#include
#include
#include/*头文件*/
#defineN1000/*可以存入的客户信息个数*/
#defineP0.55/*峰时电费单价*/
#defineQ0.35/*谷时电费单价*/
intload();/*计算存入客户个数*/
voidmenu();/*调用菜单函数*/
voidsave(intn);/*保存入文件函数*/
voidfun1(structdianfei*p);
voidfun2(structdianfei*p);
voidfun3(structdianfei*p);
voidfun4(structdianfei*p);
voidfun5(structdianfei*p);
voidfun6(structdianfei*p);
structdate
{
intyear;/*年*/
intmonth;/*月*/
intday;/*日*/
};
structdianfei
{
charname[10];/*姓名*/
charsfz[20];/*身份证号*/
charzz[20];/*地址*/
unsignedintdbh;/*电表号*/
floatfsds[7];/*峰时读数*/
floatgsds[7];/*谷时读数*/
structdatetimeofenter;/*嵌套函数*/
floatdf[6];/*费用*/
}kehu[N];/*结构体数组*/
voidmain()
{
menu();
}
voidmenu()
{
structdianfei*p;
p=kehu;
charc;
inti;
do{
system("colorB5");
system("cls");
for(i=0;i<80;i++)
printf("*");
printf("\t◆●①:
开户业务●◆\n");
printf("\t◆●②:
销户业务●◆\n");
printf("\t◆●③:
过户业务●◆\n");
printf("\t◆●④:
计费业务●◆\n");
printf("\t◆●⑤:
查询业务●◆\n");
printf("\t◆●⑥:
退出系统●◆\n");
printf("\t★★★★★★★★★★★★★★★★★★★★★★★★★\n");
printf("\t请选择输入选项[1\\2\\3\\4\\5\\6]:
\n");
printf("\t输入:
");
do{c=getchar();}while(c!
='1'&&c!
='2'&&c!
='3'&&c!
='4'&&c!
='5'&&c!
='6');
getchar();
switch(c)
{
case'1':
fun1(p);break;
case'2':
fun2(p);break;
case'3':
fun3(p);break;
case'4':
fun4(p);break;
case'5':
fun5(p);break;
case'6':
fun6(p);exit(0);
}
printf("按任意键返回主菜单:
\n");getchar();
}while
(1);
}
intload()/*计算存入客户个数*/
{
FILE*fp;/*文件指针*/
inti;
if((fp=fopen("G:
\\应数111--沈一.txt","rb"))==NULL)/*以只读方式打开一个二进制文件*/
{
printf("文件打开错误!
");
return0;
}
for(i=0;!
feof(fp);i++)
fread(&kehu[i],sizeof(structdianfei),1,fp);/*数据块读写函数*/
fclose(fp);/*关闭函数*/
return(i-1);
}
voidsave(intn)/*保存入文件函数*/
{
FILE*fp;
inti,m=1;
if((fp=fopen("G:
\\应数111--沈一.txt","wb"))==NULL)/*以只写方式打开一个二进制文件*/
{
printf("文件打开错误!
\n");
exit
(1);
}
for(i=0;ifwrite(&kehu[i],sizeof(structdianfei),1,fp);/*数据块读写函数*/
fclose(fp);
}
voidfun1(structdianfei*p)/*开户业务*/
{
system("colorBC");
chara;
intb;
FILE*fp;
do
{
if((fp=fopen("G:
\\应数111--沈一.txt","ab"))==NULL)/*以追加方式打开一个二进制文件,仅在文件末尾写数据*/
{
printf("文件打开错误!
\n");
exit
(1);
}
system("cls");
printf("*******************************欢迎使用开户业务*********************************\n");
printf("\t\t请认真输入详细信息\n");
printf("\t\t客户姓名:
");
scanf("%s",p->name);
printf("\t\t身份证号:
");
scanf("%s",p->sfz);
printf("\t\t住址:
");
scanf("%s",p->zz);
printf("\t\t电表号:
");
scanf("%d",&p->dbh);
p->fsds[0]=0;
p->gsds[0]=0;
printf("\t\t日期:
");
scanf("%d%d%d",&(*p).timeofenter.year,&(*p).timeofenter.month,&(*p).timeofenter.day);
printf("\t\t请输入峰时读数:
");
scanf("%f,%f,%f,%f,%f,%f",&p->fsds[0],&p->fsds[1],&p->fsds[2],&p->fsds[3],&p->fsds[4],&p->fsds[5]);
getchar();
printf("\t\t请输入谷时读数:
");
scanf("%f,%f,%f,%f,%f,%f",&p->gsds[0],&p->gsds[1],&p->gsds[2],&p->gsds[3],&p->gsds[4],&p->gsds[5]);
getchar();
fwrite(p,sizeof(structdianfei),1,fp);
fclose(fp);
getchar();
printf("\t\t是否输入下一条记录?
YorN.\n");
printf("\t\t输入:
");
scanf("%c",&a);
if(a=='Y'||a=='y'){b=1;p++;}
elsemenu();
}while(b==1);
}
voidfun2(structdianfei*p)/*销户业务*/
{
system("colorD5");
system("cls");
printf("*******************************欢迎使用销户业务*********************************\n");
inti,n,q=-1;
n=load();
charm;
charsf[20];
printf("\n请输入要撤销客户的身份证号:
");
gets(sf);
for(i=0;iif(strcmp(sf,(p+i)->sfz)==0)
{
q=i;
printf("客户姓名:
%s\n身份证号:
%s\n住址:
%s\n电表号:
%d\n",(p+i)->name,(p+i)->sfz,(p+i)->zz,(p+i)->dbh);
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
printf("\n是否要删除此记录:
YorN\n");
scanf("%c",&m);
getchar();
if(m=='y'||m=='Y')
{
if(q==-1)
printf("\n无此客户记录(%s)",sf);
else
{
for(i=q;i{
kehu[i]=kehu[i+1];
}
printf("\n成功删除此记录(%s)!
\n",sf);
}
}
elsemenu();
}save(n-1);
}
voidfun3(structdianfei*p)/*过户业务*/
{
system("colorE2");
system("cls");
printf("*******************************欢迎使用过户业务*********************************\n");
chara,b[10],e[10],z[20],aa[20];
charv,q,m,n,s,c[20];
unsignedintf,bb;
inti,nn,yy,rr;
n=load();
printf("选择方式登录:
A.姓名。
B.身份证号。
C.电表号。
\n");
printf("请输入:
");
scanf("%c",&a);
getchar();
switch(a)
{
case'A':
printf("输入姓名:
");
gets(b);
for(i=0;iif(strcmp(b,(p+i)->name)==0)
{
printf("客户姓名:
%s\n",(p+i)->name);
printf("此信息是否修改?
YorN\n");
scanf("%c",&v);
getchar();
if(v=='Y'||v=='y')
{
printf("修改后为:
");
gets(e);
strcpy((*(p+i)).name,e);
}
printf("身份证号:
%s\n",(p+i)->sfz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&q);
getchar();
if(q=='Y'||q=='y')
{
printf("修改后为:
");
gets(c);
strcpy((p+i)->sfz,c);
}
printf("住址:
%s\n",(p+i)->zz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&m);
getchar();
if(m=='Y'||m=='y')
{
printf("修改后为:
");
gets(z);
strcpy((p+i)->zz,z);
}
printf("电表号:
%d\n",(p+i)->dbh);
printf("此信息是否修改?
YorN\n");
scanf("%c",&n);
getchar();
if(n=='Y'||n=='y')
{
scanf("修改后为%d",&f);
(p+i)->dbh=f;
}
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
printf("此信息是否修改?
YorN\n");
scanf("%c",&s);
getchar();
if(s=='Y'||s=='y')
{
scanf("修改后为%d年%d月%d日",&nn,&yy,&rr);
kehu[i].timeofenter.year=nn;
kehu[i].timeofenter.month=yy;
kehu[i].timeofenter.day=rr;
}break;
}save(n);
printf("客户姓名:
%s\n身份证号:
%s\n住址:
%s\n电表号:
%d\n",(p+i)->name,(p+i)->sfz,(p+i)->zz,(p+i)->dbh);
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
break;
case'B':
printf("输入身份证号:
");
gets(aa);
for(i=0;i<=n;i++)
if(strcmp(aa,(p+i)->sfz)==0)
{
printf("客户姓名:
%s\n",(p+i)->name);
printf("此信息是否修改?
YorN\n");
scanf("%c",&v);
getchar();
if(v=='Y'||v=='y')
{
printf("修改后为:
");
gets(e);
strcpy((*(p+i)).name,e);
}
printf("身份证号:
%s\n",(p+i)->sfz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&q);
getchar();
if(q=='Y'||q=='y')
{
printf("修改后为:
");
gets(c);
strcpy((p+i)->sfz,c);
}
printf("住址:
%s\n",(p+i)->zz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&m);
getchar();
if(m=='Y'||m=='y')
{
printf("修改后为:
");
gets(z);
strcpy((p+i)->zz,z);
}
printf("电表号:
%d\n",(p+i)->dbh);
printf("此信息是否修改?
YorN\n");
scanf("%c",&n);
getchar();
if(n=='Y'||n=='y')
{
scanf("修改后为%d",&f);
(p+i)->dbh=f;
}
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
printf("此信息是否修改?
YorN\n");
scanf("%c",&s);
getchar();
if(s=='Y'||s=='y')
{
scanf("修改后为%d年%d月%d日",&nn,&yy,&rr);
kehu[i].timeofenter.year=nn;
kehu[i].timeofenter.month=yy;
kehu[i].timeofenter.day=rr;
}break;
}save(n);
printf("客户姓名:
%s\n身份证号:
%s\n住址:
%s\n电表号:
%d\n",(p+i)->name,(p+i)->sfz,(p+i)->zz,(p+i)->dbh);
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
break;
case'C':
printf("输入电表号:
");
scanf("%lf",&bb);
getchar();
for(i=0;i<=n;i++)
if(bb==(p+i)->dbh)
{
printf("客户姓名:
%s\n",(p+i)->name);
printf("此信息是否修改?
YorN\n");
scanf("%c",&v);
getchar();
if(v=='Y'||v=='y')
{
printf("修改后为:
");
gets(e);
strcpy((*(p+i)).name,e);
}
printf("身份证号:
%s\n",(p+i)->sfz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&q);
getchar();
if(q=='Y'||q=='y')
{
printf("修改后为:
");
gets(c);
strcpy((p+i)->sfz,c);
}
printf("住址:
%s\n",(p+i)->zz);
printf("此信息是否修改?
YorN\n");
scanf("%c",&m);
getchar();
if(m=='Y'||m=='y')
{
printf("修改后为:
");
gets(z);
strcpy((p+i)->zz,z);
}
printf("电表号:
%d\n",(p+i)->dbh);
printf("此信息是否修改?
YorN\n");
scanf("%c",&n);
getchar();
if(n=='Y'||n=='y')
{
scanf("修改后为%d",&f);
(p+i)->dbh=f;
}
printf("日期:
%d年%d月%d日\n",kehu[i].timeofenter.year,kehu[i].timeofenter.month,kehu[i].timeofenter.day);
printf("此信息是否修改?
YorN\n");
scanf("%c",&s);
getchar();
if(s=='Y'||s=='y')
{
scanf("修改后为%d年%d月%d日",&nn,&yy,&rr);
kehu[i].timeofenter.year=nn;
kehu[i].timeofenter.month=yy;
kehu[i].timeofenter.day=rr;
}break;
}save(n);
printf("客户姓名:
%s\n身份证号:
%s\n住址:
%s\n电表号:
%d\n",(p+i)