1、三、概要设计1 主要结构体struct huadan /话单信息定义char number19; char number213;char qishi15;char zhongzhi15;std300;/ typedef struct huandan huadan;struct user /用户信息定义char name20;char phone9;char laidian2; / 来电显示是否stb100;struct huafeichar haoma9;char xingming20;int e;int f;double localfee;double idfee;double zonghe
2、;sta100;2 主要函数流程图(1)计算函数:用于计算用户话费账单。流程图如图 2 所示。输 入 号 码 号 码 存 在 计 算 话 费 结 束 ? 结 束 求 和 显 示 账 单 结 束 存 在 查 找 下 一 个 没有结束 号码不存在 图 3 计 算 函 数 (2)话费查询函数:用于用户话费的查询。流程图如图 3 所示。图 2 计算函数输 入 号 码 号 码 存 在 ? 号 码存 在 号 码 不存 在 显 示 话 费 结 束 继 续 查 询 是 否 图 4 话 费 查 询 (3)输出费用详单:用于将用户的话费详单输出到指定的文件。流程图如图 4 所示。 输 出 费 用 详 单 输 出
3、? 输 出 到 指 定 文 件 结 束 是 否 图 5 输 出 费 用 详 单 三、概要设计 图 3 话费查询图 4 输出费用详单1) 主要类:用户资料类class userpublic:char *name;char *id;long num;char *ad;char disp;话单资料类class ticketpublic:char called12,calling12;int year,month,day,hour,minute,second;int dur;class ticket *next; ;2) 主要函数流程图:六、调试过程中的问题1、由于学习过程中多文件操作练习了解过少,导
4、致程序设计时,在输出 txt 文件是遇到较大困难,反复出现错误。后来查阅了各种资料,疏通了知识体系,把文件操作模块顺利输出。2、在类定义分配动态空间的时候,发生了重复分配的问题,导致程序不能正常关闭,存在内存没有释放的问题,后来在王老师的提示下,改善了程序,解决了上述错误。3、多次采用 switch-case 的语句完成对操作的选择,简化了程序,但在实验过程中,仍然出现了由于多层嵌套,发生了漏掉“”的情况,影响了程序的严密性。4、本程序主要用 do-while 的方式,进行循环使用。注意在 while(条件)的后面一定要加上“;” ,确保了程序的正常运行。5、由于前期规划的合理,程序采用 pr
5、oject 的方法,把各个函数在头文件里定义,简化了 main 函数,增强了程序的可读性,为修改和分步完善的快速性和简明性打下基础。七、课程设计总结这套“电信计费和管理系统” ,是我第一次独立设计、编写、修改、完善、调试的程序设计,发现了自己在学习中很大的不足,通过两个星期全身心的投入,感觉受益匪浅,是程序编写过程中的一段珍贵经历。起初自己设计的时候,在用 c 语言还是 c+语言的时候较为纠结,后来鉴于 c+面向对象的特性,选择了用 c+语言编写,为程序提供了较为方便的语言基础。但是由于平时用 c 语言知识编程经历较多,在 c+和 c 语言区别的地方不是很明确,所以,自己准备的基本参考书就大有
6、用处了。通过这次设计,对两种语言的异同和优缺点,都有了极为深刻的认识。我认为程序设计最重要的方面就是框架设计和程序规划,就是因为这一点,在拿到题目以后,我没有立刻投入编程工作,而是着重分析了各种需求,在 vision 中,设计了详细的流程图和结构框架图,为以后的编程提供了极为直观的依据,这是自己较为满意的地方。在遇到问题无从下手的时候,应该巧妙的运用单步调试的方法,有助于找出问题所在,可以相当直观的修改程序的不足,解决疑难,这是在程序设计和普通编程训练中并不可少的一步。总之,这次课程设计将是我大学学习生活中的一项宝贵的经历,通过这两个星期的学习,我收获了很多,也付出了很多。虽然这个程序还有很多
7、的不足,但是,有收获就是甜的,以后也会经常编程,熟能生巧,我想,只要勤加练习,自己一定能成为编程高手的!六、调试过程中的问题1 生成详细话单时,计算本地费用和长途话费时,在第一个循环中未置0。导致最后数值越来越大。输出用户资料时,在第一个小循环应该重新回到文件头,但当时没有意识到,最后用的 rewind 函数使文件重新回到文件头。2 输入新用户时,有一个空格键没有读取,导致总是出错,name 没有读出,被跳过。后来加入了一个 getchar()将空格键读取。3 显示详细话费时,题头总是与输出数据不对齐。后来通过改变格式控制符,使之能够对齐。因为 double 型最后有 6 位小数,导致输出数据
8、太长,显得杂乱。后来通过控制小数位数使文件变得整齐。4 时间函数在计算跨年、跨月时计算麻烦,需要通过多层 switch-case 嵌套才能满足函数设计需求。七、课程设计总结这次实验周,虽然短暂。但是对于我来说,却有着非同寻常的意义,不仅是学习上加深了自己对于 c 语言的理解。更重要的是教会了我,合作的重要性,使我明白了“星多天空亮,人多智慧广” “一人知识有限,众人智慧无穷。 ”的道理。在进行刚开始进行课程设计时,我一脸茫然,不知从何入手。为什么呢?因为我想自己自做出来而不参考任何资料,以为这样才可体现自己的智慧和能力,其实这是大错特错的。当然也不是一味强调自己动脑自己做出来不好,从开发方面角
9、度来说是可以的,有些东西也并不是一味的照搬照抄。抱着这样的态度迷茫了三四天只想出了一丁点大至结构。最后决定上网找资料,不查不知道,一查大吃一惊,不但自己的想法网上比比皆是,比自己的想法更完美更合理的多得看都看不完。还有就是我负责的生成详细话单资料函数的时候,编了好久总是编不好,也不想去请教同组同学,想当然的认为他们又不是做我这个函数怎么可能看懂。不过后来证明我错了,在与同学的交流中,同学点出我的话单资料在第一次循环中就已经到文件尾了,无法进行第二次循环,因此无法运行。一语点破。最终经过努力终于使得函数调试成功。函数完成了,我获得的是不仅有同学的信任,还有更加和谐的同学关系。回首程序设计实验,我们总算成功跨出了艰难的一步,成绩告诉我们:汗水没有白流!但是在设计中我们也遇到很多问题和困惑,如:在活动中,如何保证全部组员有效地参与?怎样分配工作?不过最终全部都被我们克服了。程序完成了,每个人都松了一口气。脸上洋溢的都是成功过后开心的微笑。