网络机房计费系统的设计与实现.docx
《网络机房计费系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《网络机房计费系统的设计与实现.docx(22页珍藏版)》请在冰豆网上搜索。
网络机房计费系统的设计与实现
一需求分析
这是一个网络机房计费系统,可以帮助网吧管理员对会员信息,电脑以及上网过程的管理。
这个系统涉及到了会员信息的添加,查询,删除和上网过程中时间和费用的计算,方便网吧管理员对网吧的管理。
由于这是一个数据结构课程设计,我采用了面向过程的C语来编写。
由于水平欠佳,程序编得很简单,不过基本的功能也都实现了。
二概要设计
为了实现这个程序功能,我们先进行概要设计。
在这个系统中,我们初步把它划分成4个模块,分别是主模块,会员管理模块,上网费用管理模块和电脑运行监控模块。
在主模块中,分别调用其他3个模块。
会员管理模块的功能是在屏幕上对会员的信息进行管理,可以对会员信息添加,删除和查询。
上网费用管理模块的功能是在屏幕上模拟会员进行上机和退网的过程以及在这个过程中的时间和费用的计算。
为此,我们再把上网费用管理模块分为两个子模块,分别是开始上网模块和退出上网模块。
开始上网模块记录上网时会员,电脑和开始时间的信息,退出上网模块对此次上网进行结算,给出最终费用。
如图2-1.
图2-1主模块
对于会员管理模块,我们可以再把它细化成如下三个子模块,如下图2-2所示。
图2-2会员管理模块
三详细设计
为了实现上述程序功能,应该用结构体数组来表示会员信息和上网信息。
为此,我设计了以下两个结构:
下面这个是会员信息的结构体:
typedefstructmember{
intmember_id;
charmember_name[10];
intmoney;
intflag;//
}member;
typedefstruct{
membermem[100];
intmem_mum;
}mem_info;
mem_infom;
其中member_id表示会员编号,member_name[10]表示会员姓名,money表示该会员账户余额,flag标志该用户是否在上网,mem_mum表示会员的总人数。
下面这个是上网信息的结构体:
typedefstructmem_com{
intcomputer_id;
intmember_id;
my_timebegin_time;
}mem_com;
typedefstructmem_com_info{
mem_comm_c_info[5];
intm_c_num;
}mem_com_info;
mem_com_infom_c;
其中member_id表示上网的会员编号,computer_id表示电脑编begin_time表示该会员此次开始上网时间,m_c_num表示正在上网的会员的总人数。
下面给出一些函数,这些函数可以完成上面概要设计的要求。
init():
此函数用来初始化有关变量;
add_member();此函数用来添加会员信息;
sel_member();此函数可以查找会员信息;
del_member();此函数可以删除会员信息;
add_money();此函数可以为会员账户充钱;
begin();此函数可以模拟会员开始上网,并记录有关信息
end();此函数可以模拟会员退出上网,并进行结算。
check_computer()此函数可以查看每台电脑的运行情况。
通过主函数对这些子函数的调用,可以完成该系统的功能。
四详细设计
根据上面的详细设计,我们把它转换成计算机C程序代码。
由于源代码过长过多,在这里,只给出一些核心函数的代码:
下面是主函数:
intmain(){
init();
intn;
while
(1){
printf("请选择以下操作:
\n");
printf("1添加会员\t2查询会员\t3删除会员\n4充钱\t5上网\t6退网\n7查看电脑运行情况\n");
printf("请输入操作编号:
");
scanf("%d",&n);
switch(n){
case1:
add_member();break;
case2:
sel_member();break;
case3:
del_member();break;
case4:
add_money();break;
case5:
begin();break;
case6:
end();break;
case7:
check_computer();break;
}
printf("\n");
}
}
下面是添加会员子函数:
voidadd_member(){
inti=0;
charch;
printf("添加的该会员编号为%d\n",first_member_id);
m.mem[m.mem_mum].member_id=first_member_id;
first_member_id++;
printf("添加的该会员姓名为(以‘#’结束)");
do{
scanf("%c",&ch);
m.mem[m.mem_mum].member_name[i]=ch;
i++;
}while(ch!
='#');
m.mem[m.mem_mum].member_name[i-1]='\0';
m.mem[m.mem_mum].money=0;
m.mem[m.mem_mum].flag=0;
m.mem_mum++;
printf("添加成功\n");
}
下面是查询会员子函数:
voidsel_member(){
intid;intflag;
printf("请输入要查询的会员编号:
");
scanf("%d",&id);
for(inti=0;i{
if(m.mem[i].member_id==id)
{
flag=1;
printf("要查询的会员姓名:
%s\n",m.mem[i].member_name);
printf("要查询的会员账户余额:
%d\n",m.mem[i].money);
break;
}
}
if(flag==0)printf("不存在该会员号\n");
}
下面是给会员充钱函数:
voidadd_money(){
intid;intflag;intmoney;
printf("请输入要充钱的会员编号:
");
scanf("%d",&id);
for(inti=0;i{
if(m.mem[i].member_id==id)
{
flag=1;
printf("该账户余额为:
%d\n",m.mem[i].money);
printf("请输入要充钱的金额:
");
scanf("%d",&money);
m.mem[i].money=m.mem[i].money+money;
printf("该账户现在余额为:
%d",m.mem[i].money);
break;
}
}
if(flag==0)printf("\n不存在该会员号\n");
elseprintf("\n充钱成功\n");
}
下面是开始上网子函数:
intbegin(){
intm_id;inti;intflag=0;
time_tnowtime;
structtm*timeinfo;
time(&nowtime);
timeinfo=localtime(&nowtime);
printf("请输入要上网的会员编号:
");
scanf("%d",&m_id);
for(inti=0;i{
if(m.mem[i].member_id==m_id){
flag=1;
m.mem[i].flag=1;break;
}
}
if(flag==0){printf("\n不存在该会员号\n");return0;}
for(i=0;i<5;i++){
if(com[i].flag==0)break;
}
if(i<5){
printf("该会员分配的上网电脑编号为:
%d\n",i+1);
com[i].flag=1;
m_c.m_c_info[m_c.m_c_num].member_id=m_id;
m_c.m_c_info[m_c.m_c_num].computer_id=i;
m_c.m_c_info[m_c.m_c_num].begin_time.month=timeinfo->tm_mon+1;
m_c.m_c_info[m_c.m_c_num].begin_time.day=timeinfo->tm_mday;
m_c.m_c_info[m_c.m_c_num].begin_time.hour=timeinfo->tm_hour;
m_c.m_c_info[m_c.m_c_num].begin_time.minute=timeinfo->tm_min;
m_c.m_c_info[m_c.m_c_num].begin_time.second=timeinfo->tm_secprintf("开始上网时间:
%d月%d日%d时%d分%d秒\n",timeinfo->tm_mon+1,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
m_c.m_c_num++;
}
elseprintf("上网人数已满\n");
return1;
}
还有其他的子函数就不一一列举了。
五程序测试
程序运行如下,用户可以选择操作.如下图,选择添加会员操作,以及通过会员编号查询会员信息。
图5-1会员操作
管理员也可以通过选择操作4给会员充钱,如下图5-2,在给会员充钱时,会显示会员账户余额和充钱数额,非常清晰。
图5-2会员账户充钱
下面这是上网操作,管理员输入会员编号,系统会自动分配一台空电脑给会员上网,并记录上网时间。
图5-3会员开始上网
下面是会员退网操作,会员退网后,会显示该会员开始上网时间,以及一共上网时间和所用的花费。
图5-4会员退网结算
六总结
在这次的设计过程中,我学到的不仅是知识,我还认识到许多事情。
在开始编写程序的时候总是有一些出错,在查找有关书籍和向老师询问后得出了结果。
这次设计使我的编程水平提高了一大步,同时还使我充分的认识到合作的可贵。
这次设计对我的综合能力是一次很好的锻炼,但是我必须承认自己的能力和知识还很肤浅,所以今后我的学习道路还是很漫长的。
我认为这次的课程设计意义很深,和其他同学的共同学习﹑配合﹑努力的过程也很愉快,另外还要感谢老师的耐心辅导另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。
因此非常感谢老师的教导。
由于我水平有限,加之时间短暂,故该网络机房计费系统中还有许多不足之处,请老师批评指正,以使我自己能在以后的制作中不断改进,不断完善。
七参考文献
[1]黄晓东等.课程设计案例精编[M].北京.高等教育出版社.2007
[2]丁亚涛等.C语言程序设计[M].北京.高等教育出版社.2009
[3]严蔚敏等.数据结构[M].北京.清华大学出版社.2007
[4]严蔚敏等.数据结构习题集[M].北京.清华大学出版社.2007
[5]乔林.C语言上机指导[M].北京.清华大学出版社.2007
源程序代码
#include
#include
#include
#include
typedefstructmy_time{
intmonth;
intday;
inthour;
intminute;
intsecond;
}my_time;
typedefstructcomputer{
intcomputer_id;
intflag;
}computer;
computercom[5];
typedefstructmember{
intmember_id;
charmember_name[10];
intmoney;
intflag;//
}member;
intfirst_member_id=1001;
typedefstruct{
membermem[100];
intmem_mum;
}mem_info;
mem_infom;
typedefstructmem_com{
intcomputer_id;
intmember_id;
my_timebegin_time;
}mem_com;
typedefstructmem_com_info{
mem_comm_c_info[5];
intm_c_num;
}mem_com_info;
mem_com_infom_c;
voidinit(){
m.mem_mum=0;
m_c.m_c_num=0;
for(inti=0;i<5;i++)
{
com[i].computer_id=i+1;
com[i].flag=0;
}
}
voidadd_member(){
inti=0;
charch;
printf("添加的该会员编号为%d\n",first_member_id);
m.mem[m.mem_mum].member_id=first_member_id;
first_member_id++;
printf("添加的该会员姓名为(以‘#’结束)");
do{
scanf("%c",&ch);
m.mem[m.mem_mum].member_name[i]=ch;
i++;
}while(ch!
='#');
m.mem[m.mem_mum].member_name[i-1]='\0';
m.mem[m.mem_mum].money=0;
m.mem[m.mem_mum].flag=0;
m.mem_mum++;
printf("添加成功\n");
}
voidsel_member(){
intid;intflag;
printf("请输入要查询的会员编号:
");
scanf("%d",&id);
for(inti=0;i{
if(m.mem[i].member_id==id)
{
flag=1;
printf("要查询的会员姓名:
%s\n",m.mem[i].member_name);
printf("要查询的会员账户余额:
%d\n",m.mem[i].money);
break;
}
}
if(flag==0)printf("不存在该会员号\n");
}
voiddel_member(){
intid;
intflag=0;
printf("请输入要删除的会员编号:
");
scanf("%d",&id);
for(inti=0;i{
if(m.mem[i].member_id==id){
flag=1;
m.mem_mum--;
for(intj=i;jm.mem[i]=m.mem[i+1];
}
break;
}
}
if(flag==0)printf("不存在该会员号\n");
elseprintf("删除成功\n");
}
voidadd_money(){
intid;intflag;intmoney;
printf("请输入要充钱的会员编号:
");
scanf("%d",&id);
for(inti=0;i{
if(m.mem[i].member_id==id)
{
flag=1;
printf("该账户余额为:
%d\n",m.mem[i].money);
printf("请输入要充钱的金额:
");
scanf("%d",&money);
m.mem[i].money=m.mem[i].money+money;
printf("该账户现在余额为:
%d",m.mem[i].money);break;
}
}
if(flag==0)printf("\n不存在该会员号\n");
elseprintf("\n充钱成功\n");
}
intbegin(){
intm_id;inti;intflag=0;
time_tnowtime;
structtm*timeinfo;
time(&nowtime);
timeinfo=localtime(&nowtime);
printf("请输入要上网的会员编号:
");
scanf("%d",&m_id);
for(inti=0;i{
if(m.mem[i].member_id==m_id){
flag=1;
m.mem[i].flag=1;break;
}
}
if(flag==0){printf("\n不存在该会员号\n");return0;}
for(i=0;i<5;i++){
if(com[i].flag==0)break;
}
if(i<5){
printf("该会员分配的上网电脑编号为:
%d\n",i+1);
com[i].flag=1;
m_c.m_c_info[m_c.m_c_num].member_id=m_id;
m_c.m_c_info[m_c.m_c_num].computer_id=i;
m_c.m_c_info[m_c.m_c_num].begin_time.month=timeinfo->tm_mon+1;
m_c.m_c_info[m_c.m_c_num].begin_time.day=timeinfo->tm_mday;
m_c.m_c_info[m_c.m_c_num].begin_time.hour=timeinfo->tm_hour;
m_c.m_c_info[m_c.m_c_num].begin_time.minute=timeinfo->tm_min;
m_c.m_c_info[m_c.m_c_num].begin_time.second=timeinfo->tm_sec;
printf("开始上网时间:
%d月%d日%d时%d分%d秒\n",timeinfo->tm_mon+1,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
m_c.m_c_num++;
}
elseprintf("上网人数已满\n");
return1;
}
voidend(){
intm_id;inth,m1;
intmonth,day,hour,minute,second;
time_tnowtime;
structtm*timeinfo;
time(&nowtime);
timeinfo=localtime(&nowtime);
month=timeinfo->tm_mon+1;
day=timeinfo->tm_mday;
hour=timeinfo->tm_hour;
minute=timeinfo->tm_min;
second=timeinfo->tm_sec;
printf("请输入要退网的会员编号:
");
scanf("%d",&m_id);
for(inti=0;iif(m_c.m_c_info[i].member_id==m_id){
printf("开始上网时间:
%d时%d分\n",m_c.m_c_info[i].begin_time.hour,m_c.m_c_info[i].begin_time.minute);
printf("现在时间为:
%d时%d分\n",hour,minute);
h=hour-m_c.m_c_info[i].begin_time.hour;
m1=minute-m_c.m_c_info[i].begin_time.minute+h*60;
printf("一共上网%d时%d分,花费%d元",m1/60,m1-(m1/60)*60,m1);
for(intj=0;j{
if(m.mem[j].member_id==m_id){
printf("账户原有%d元,还剩下%d元\n",m.mem[j].money,m.mem[j].money-m1);
m.mem[j].money=m.mem[j].money-m1;
}
}
}
}
}
intcheck_computer(){
intid;inth,m1;inti,j;
intmonth,day,hour,minute,second;
time_tnowtime;
structtm*timeinfo;
time(&nowtime);
timeinfo=localtime(&nowtime);
month=timeinfo->tm_mon+1;
day=timeinfo->tm_mday;
hour=timeinfo->tm_hour;
minute=timeinfo->tm_min;
second=timeinfo->tm_sec;
printf("请输入要查看的电脑编号:
");
scanf("%d",&id);
if(com[id-1].flag==0){printf("该电脑没被使用\n");return0;}
else{
for(i=0;iif(m_c.m_c_info[i].computer_id==id-1){
printf("该电脑正被使用\n");
printf("使用该电脑的会员编号为:
%d\n",m_c.m_c_info[i].member_id);
for(j=0;jif(m.mem[j].member_id==m_c.m_c_i