实训报告机房收费管理系统.docx
《实训报告机房收费管理系统.docx》由会员分享,可在线阅读,更多相关《实训报告机房收费管理系统.docx(38页珍藏版)》请在冰豆网上搜索。
实训报告机房收费管理系统
北京联合大学
课程设计报告
课程名称:
C语言程序设计课设
项目名称:
机房收费管理系统
学院:
自动化学院专业:
建筑电气与智能化
姓名:
学号:
指导教师:
成绩:
2010年6月18日
第1部分课程设计题目与要求
1.问题描述
为了便于管理,需要对机房的上机收费进行计算机管理,所需要的功能为:
建立学生的上级档案、对于毕业的学生能够删除其档案、根据上机和下机时间计算出本次所需费用、能够续钱。
2.功能要求
循环显示如图12.17所示的主菜单。
在主菜单中选择1:
建立名为duli16_3.dat的文件,并在其中添加若干学生的上机档案,信息包括学号、姓名、金额,要求学号是唯一的。
12.17
在主菜单中选择2:
要求用户输入学号,然后系统显示该学生档案,并自动开始计时,如果原来金额不足6元,则不能上机,而且显示“余额不足,请续钱!
”。
在主菜单中选择3:
停住对该学生记时,同时根据用户输入的学号,计算该学生上机时间,并按1小时2元收费(30分钟以内均按半小时处理,60分钟以内按1小时处理),然后显示上机前后的金额。
在主菜单中选择4:
添加新档案,这时要求新学号和已有的学号不能重号。
在主菜单中选择5:
注销旧档案。
在主菜单中选择6:
要求用户输入学号和续钱额,续钱完成后分别显示续钱前后的金额。
在主菜单中选择7:
此项功能学生自由发挥,根据本组爱好增加与本题目相关的新功能。
在主菜单中选择0:
显示结束信息,按任意键后,退出本系统。
3.任务分工
主要负责编写:
下机函数mylikai()、
注销函数myzhuxiao()。
和整个程序的测试编译。
主要负责编写:
上机函数:
myshangji()、
续钱函数:
myxuqian()、
:
主要负责编写:
建立函数:
mycreate()、
添加函数:
mytianjia().
主函数:
main()和创新函数:
myjifen(),
由小组成员共同敲定。
其中:
第2部分《机房收费管理系统》的设计与功能实现
1.总体设计
按姓名
注销
主模块图
建立上机档案mycreate()开始上机mykaishi(int*,int*)离开机房mylikai(int,int,int)添加新档案mytianjia()注销旧档案myzhuxiao()按学号注销del_number()按姓名注销del_name()
续钱myxuqian()创新函数voidmyjifen();
2.数据结构
结构体的定义
structrecord
{
charnumber[13];/*定义学号数组*/
charname[11];/*定义姓名数组*/
charmima[11];/*定义密码数组*/
intrestmoney;
};
structtm*t;/*定义时间函数的结构体*/
真
3.算法设计
(一)主函数模块
(二)voidmycreate()
入口
打开文件
打开成功?
假
结束输入学号
输入姓名
输入金额
假
合法记录?
真
将记录写入文件
记录数增1
输入学号
输入姓名
关闭文件
出口
(三)intmykaishi(int*,int*)
入口
打开文件
假
打开成功?
真
真
文件结束?
结束
从文件读学号、姓名、金额
输入学号、姓名、金额
记录增数1
n==0?
文件中无记录文件中有n个记录
关闭文件
出口
(四)voidmyzhuxiao();
入口
输入按哪种方式删除
真假
按学号?
真假
调用按学号删除函数按姓名?
调用按姓名删除函数输入非法字符
出口
(五)voidmytianjia(
真
假
真
假
真
假
出口
打开文件
关闭文件
继续
将记录写入文件
学号重复
输入金额
输入密码
输入姓名
结束
打开成功
入口
)
出口
选择功能
调用myxg()
2
3
1
入口
(六)myjifen()
4.程序代码设计
主函数
main()
{
charchoose='\0',yes_no='\0';
intstarthour=0,startmin=0,k;
do
{
myprint();
printf("");
choose=getch();
switch(choose)
{
case'1':
mycreate();break;
case'2':
k=mykaishi(&starthour,&startmin);break;
case'3':
mylikai(k,starthour,startmin);break;
case'4':
mytianjia();break;
case'5':
myzhuxiao();break;
case'6':
myxuqian();break;
case'7':
myjifen();break;
case'0':
printf("感谢使用谢谢\n");exit(0);
default:
printf("\n%c为非法字符!
\n",choose);
}
printf("\n返回主菜单(Y/N)?
\n");
do
{yes_no=getche();
}while(yes_no!
='Y'&&yes_no!
='y'&&yes_no!
='N'&&yes_no!
='n');
}while(yes_no=='Y'||yes_no=='y');
}
以下为上机和下机函数:
其主要功能为:
记录学生上机时间,下机时间,计算学生上机所花费金额。
intmykaishi(int*starthour,int*starmin)
{
structrecordtemp[20]={0};
structtm*t;
time_ttimer;
into=0,k=-1,i=0,j=-1;
chars[19],m[19];
charyes_no='\0';
FILE*fp=NULL;
printf("请输入上机学号");
scanf("%s",s);
fp=fopen("c:
\\duli16_3.txt","r");
if(fp==NULL)
{
printf("无此学生");
}
while(feof(fp)==0)
{
fscanf(fp,"%s%s%s%d",temp[o].number,temp[o].name,temp[o].mima,&temp[o].restmoney);
o++;
}
printf("\n");
for(i=0;i<=o;i++)
{
if(strcmp(temp[i].number,s)==0)
{k=i;}
}
if(k==-1)
{
system("cls");
printf("\n\n查无此人请重新输入");
k=mykaishi(starthour,starmin);
}
printf("请输入密码");
scanf("%s",m);
while(feof(fp)==0)
{
fscanf(fp,"%s%s%s%d",temp[o].number,temp[o].name,temp[o].mima,&temp[o].restmoney);
o++;
}
printf("\n");
if(strcmp(temp[k].mima,m)==0)
j=i;
else
{
system("cls");
printf("\n\n密码错误请重新输入上机学号");
k=mykaishi(starthour,starmin);
}
if(temp[k].restmoney>=6)
{
printf("上机成功,欢迎使用!
!
!
\n");
timer=time(NULL);
t=localtime(&timer);
printf("上机成功时间为:
%s\n",asctime(t));
*starthour=t->tm_hour;*starmin=t->tm_min;
printf("学号:
%s姓名:
%s余额:
%.2d\n",temp[k].number,temp[k].name,temp[k].restmoney);
}
else
{
printf("\n\n对不起您的余额不足!
如需充值请返回主菜单...");
}
returnk;
}
voidmylikai(intk,intstarthour,intstartmin)
{
structrecordtemp[20]={""};
structtm*t;
intendhour;intendmin;
intmin,hour;
intusemoney;
intj=0,i=0;
FILE*fp=NULL;
time_ttimer;
timer=time(NULL);
t=localtime(&timer);
printf("下机成功!
!
!
欢迎光临!
!
!
\n时间为:
%s\n",asctime(t));
endhour=t->tm_hour;endmin=t->tm_min;
if(endmin-startmin<0)
{
endhour--;
min=endmin+60-startmin;
}
else
min=endmin-startmin;
hour=endhour-starthour;
if(min>30)
{
hour++;
min=0;
}
elseif(min>0)
min=30;
else
min=0;
usemoney=hour*2+min*1/30;
fp=fopen("c:
\\duli16_3.txt","r");
while(feof(fp)==0)
{
fscanf(fp,"%s%s%s%d\n",temp[j].number,temp[j].name,temp[j].mima,&temp[j].restmoney);
j++;
}
fclose(fp);
temp[k].restmoney=temp[k].restmoney-usemoney;
printf("学号:
%s姓名:
%s余额:
%.2d\n",temp[k].number,temp[k].name,temp[k].restmoney);
fp=fopen("c:
\\duli16_3.txt","w");
for(k=0;kfprintf(fp,"%s%s%s%d\n",temp[k].number,temp[k].name,temp[k].mima,temp[k].restmoney);
fclose(fp);
}
以下为建立档案函数:
其主要功能为:
建立学生的新档案,内容有学号、姓名、密码、所充入金额。
voidmycreate()
{
structrecordtemp={0};
inti=1;
FILE*fp=NULL;
charyes_no='\0';
system("cls");
fp=fopen("c:
\\duli16_3.txt","w");
if(fp==NULL)
{
printf("\n\n文件丢失!
按任意键继续...");
getch();
exit(0);
}
else
{
do
{
printf("\n请输入第%d个记录:
\n\n",i);
printf("学号:
");
scanf("%s",temp.number);
printf("姓名:
");
scanf("%s",temp.name);
printf("设置密码:
");
scanf("%s",temp.mima);
printf("充值钱数:
");
scanf("%d",&temp.restmoney);
fprintf(fp,"%s%s%s%d\n",temp.number,temp.name,temp.mima,temp.restmoney);
i++;
printf("\n请问您要继续吗?
Y/N");
do
{
yes_no=getch();
}while(yes_no!
='Y'&&yes_no!
='y'&&yes_no!
='N'&&yes_no!
='n');
}while(yes_no=='Y'||yes_no=='y');
fclose(fp);
}
完整程序请参见附录Ⅰ
5.测试与调试
①执行myprint()函数出现如图所示
②选择1建立上机档案将如图所示输入学号、姓名、密码、充入金额。
③选择Y继续输入N结束输入
④主菜单选择2上机出现如图:
为金额不足时所出图像
⑤图为连续建立上级档案是所出图像
第3部分课程设计总结
1.个人总结
李洪飞:
为期两星期的C语言实训已经基本结束,但是给我的影响是相当大的。
通过这次实训,使我明白C语言这门课程光仅仅是听课是远远不够的,上机训练也不容忽视。
通过上机训练,才能够明白自己知识的不足,才能够有的放矢,更加深刻的理解C语言中的知识点。
通过实训,我找到了许多知识漏点,学到了很多以前不懂的知识,以前认为自己已经懂了的知识点也理解更加深刻了。
尤其是遇到了自己当时不知道如何编写的C语言题目如何编写,通过自己的学习和同同学的交流后,试编和改错,最后能够顺利的编写出来,带来的也有成就感。
并增加了我们对C语言的兴趣和学好C语言的信心。
与同学们交流的过程中,了解了程序的多种解决方法,知道了不同编写方法有不同的特点。
总结C语言实训的几个重要作用:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。
然而要使用C语言这个工具解决实际问题,又必须掌握它。
通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。
对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差。
学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。
即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。
只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。
所谓"环境"就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。
通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。
同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。
你认为万无一失的程序,实际上机运行时可能不断出现麻烦。
如编译程序检测出一大堆错误。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
通过这次为数不多的几天计算机实践学习,我们更好的了解了一些关于C语言的知识,理解巩固了我们C语言的理论知识。
C语言这门课程对于我们应用电子专业的同学也相当重要,我们会再将来继续学习并熟悉这门课程。
焦健:
一眨眼为期两周的C语言实训结束了,我们组做的是“机房收费管理系统”的设计,在编程序的过程中,我们一边学一边做,这不仅要求我们要有自学的能力,同时,这也考验了我们团队合作能力。
,平日里通过老师对C语言的讲解与教授,我对C语言产生了浓厚的兴趣,平时,我们做的都是些基础的,零碎的小程序,而这次试训我需要面对的是一个需要设计成百上千的庞大程序。
这是对我们平日能力的一个综合考验与检测。
这次实训是我人生的第一次实训,对于我来说好难,比我预想的难好多。
对编程这方面不懂的我,经常感到无助,不知道做什么也不知道怎么做。
不过不管怎么说,我们都走过来了,即使遇到很多困难,我们的收获还是很多的,不仅在C语言编程方面有了很大进步,同时,我们也收获了同学之间互相帮助的友谊,同学情,还有老师帮助我们的师生情。
。
。
。
刚开始看到这个题目时,我们感到束手无策,不知道从何做起,但通过我们组成员的几天来的一次次的讨论研究和修正,终于编出了大部分的程序,遇到的一些比较棘手的问题我们就请教老师或是去图书馆查阅资料。
我这次编程的任务主要是“上机”和“续钱”两个部分,编这两个程序主要的困难就是时间函数,刚开始总是出现很多错误,根本执行不了,但通过老师同学的帮助,终于还是完成了这个任务,同时也让我在C语言方面有了很大的提高。
在这次实训中,老师要求我们每人完成两个流程图,对于我这个不善于电脑操作的人来说有点困难,不过,在同学的耐心帮助下,我可以快速独立的画完流程图了,这让我很高兴,总之,这次的实训让我收获颇多。
经过这两周的学习,我巩固了这学期学过的C语言的相关知识,改正了学习中常常出现的一些错误,使我对C语言的学习更加深入、透彻。
同时,通过学习,我也发现了在学习中的一些不足,例如:
多细节知识不够重视,掌握不牢,以致在编程中常常出现一些不应犯的错误。
因此,在以后的学习中我将注重细节,把知识尽量掌握牢固。
同时,这两周的实训也让我明白了很多道理,在面对困难时,不能知难而退,而应该坚定信心,用毅力,耐心和智慧解决问题;在生活学习中,我们应该学会与他人合作交流,有的时候一个人的能力是不够的,必须通过团队的合作才能使事情更加完善。
计算机在以后的生活中是十分重要的,而C语言对于我们以后的工作学习更是重要,可能以后我们没有了C语言这门课程,但我们对C语言的兴趣是不会改变的,也希望以后有更多的实训机会,期待着下一次的实训。
杨剑博:
时间过的真快,一转眼两周的实训就要结束了,经过这几天的C语言实训,我感受颇深……我们从平时简单易做的程序编写到实训中庞大的大程序设计,此时不仅是对平时各种知识的综合训练,更是考验团队合作精神的时候。
大家分工合作,发挥各自的聪明才智,强大的集体力量与智慧助我们出色地完成了任务。
当我们完成程序时,我们感到了无比的欣慰……
编写相对于平时而言如此大的程序对我们来说是一项从未有过的艰巨的任务。
在这项任务中,用到最重要的知识应当属函数了。
我们组设计的是机房收费管理系统,所有的菜单中的选项每一个都是一个函数体,诸多的函数一起构成了本次任务所要完成的程序。
同样的,我们也一样遇到了各种困难,但我们通过多种途径,例如图书馆、网络等来查找资料,解决难题。
当然,这与老师的帮助也是分不开的。
当我开始编写我所负责的程序时,刚开始一点头绪都没有,感到很吃力,我就开始看这学期所学的C语言教材,并着重看了函数部分,通过又一次的复习教材并参照类似题型,在老师同学的帮助下终于基本编出程序,但编译的时候出现了很多错误,这让我有些恼火,但为了能顺利完成编程,我还是静下心来细心改正每一个错误,一次次的讨论,一次次的修正,在学习中我发现了我以往所忽略的很多错误,在我们的团队的努力下,错误都得到了改正,我的C语言基础得到了提高,这次试训我最大的收获就是细心,功夫不负有心人,我们组终于顺利完成了任务。
我在本次程序设计中认识到团队合作的重要性,以及对细节问题的关注。
但在完成的过程中,因为马虎,在编写代码时有错,出现运行结果不符合要求,但不能马上发现错误,在以后的学习中,我会更加认真、谨慎。
经过这两周的学习实践,我对C语言的认识更加深入,也对C语言这门课程越来越有兴趣了,虽然在编程过程中仍有着许多的问题,但我基本上都逐一的解决了。
我以后还会尽量多多学习有关C语言的相关知识,使自己能更加娴熟的掌握这门课程。
虽然实训就要结束了,但这次的实训真的让我受益匪浅,不仅在知识上有了巩固和提高,更重要的是它教会了我很多道理,这是终身受用的,比如:
如何解决问题,面对困难的态度,如何与他人交流并合作等等。
经过两周小组成员的不懈努力,我们顺利地完成了这项工作。
在此,我们应由衷感谢老师对我们的大力帮助,使我们的工作能顺利地完成。
也希望以后有更多这样的实训机会。
2.结束语
为期两周的C语言实训就这样结束了,在这里对C语言实训老师鞠慧敏在两周来对我组成员的辅导、和C语言老师高老师为我组所提供的参考书表示郑重感谢!
!
!
感谢其他各组给我们的宝贵意见和不同的思考方式!
!
!
附录Ⅰ程序清单
#include
#include
#include
#include
#include
#defineN200
structrecord
{
charnumber[13];
charname[11];
charmima[11];
intrestmoney;
};
ints[20];
voidmyprint();
voidmycreate();
intmykaishi(int*,int*);
voidmylikai(int,int,int);
voidmytianjia();
voidmyzhuxiao();
voiddel_number();
voiddel_name();
voidmyxuqian();
voidmyjifen();
voidmycx();
voidmyxg();
voidmyxs();
main()
{
charchoose='\0',yes_no='\0';
intstarthour=0,startmin=0,k;
do
{
myprint();
printf("");
choose=getch();
switc