简单个人话费管理系统课程设计_第1页
简单个人话费管理系统课程设计_第2页
简单个人话费管理系统课程设计_第3页
简单个人话费管理系统课程设计_第4页
简单个人话费管理系统课程设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、怀 化 学 院 计 算 机 系?高级语言程序设计?课程设计报告书简单个人话费管理系统学生姓名:*学 号:*年级专业及班级:*指导老师及职称:* 教授 专 业:计算机科学与技术专业 *·*提交日期:*年*月 简单个人话费管理系统学 生:*指导老师:*(*系,* *)摘 要:本次设计的目的是设计一个简单的个人话费管理系统,到达求余额、记录通话详细消息、查询呼叫号码等方面的功能。既能使用户随时了解自己的话费支出,又能使用户及时根据系统统计的数据对以后的使用进行调整。该系统主要针对所有 及座机用户,主要采用的语言工具是C语言,编程的环境是VC6.0.系统有假设干个功能函数组成,用到了结构体、

2、函数调用、文件读写和常见的循环等手法,经过一次又一次的调式最终圆满完成任务。在这次的动手过程中,我发现要很好地完成一个程序除了对专业知识的了解和熟练应用以外,还需要编程者有很好的耐性以及细心的良好习惯。关键词:结构体;文件;循环;C;1 前言 本次课程设计的目的是设计一个简单的个人话费管理系统,使用户随时了解自己的话费支出,并及时根据系统统计的数据对以后的使用进行调整。难度为三颗星,并且要求具有以下根本功能:1、输入记录功能从键盘输入:各次交费金额,各次呼出 号码、日期、时间长短、长途与否。设长途每分钟1元,短途每分钟0.3元2、统计余额、各次呼出 金额。3、统计长话总金额、短话总金额。4、排

3、序功能按时间长短,显示各次呼出的 号码。5、查询呼叫某 的次数。  6、增加记录、删除记录、修改记录功能。7、统计结果保存在文本文件中。8、从文本文件中读取数据、显示。针对题目的各项要求,我运用c语言工具在vc6.0的环境中,通过结构体数组、文件的翻开与关闭、循环、函数调用等C语言常用方法的使用逐步解决了这些问题,编写出了一个满足要求的简单系统。 2 设计分析 根据题目的要求,从输入记录这项功能可以知道,应该要定义一个结构体包含所有要输入的信息,并且为了方便起见,将需要求的余额等数值也包含在结构体内,由于记录的数据需要保存,所以系统中将用到文件的打闭、读写等功能。该系统提供到了多项功

4、能,于是考虑用一个switch语句,而控制该语句开关的值从调用函数中返回。其中需要注意的问题有:为了使源代码清晰明了,所有的函数不采取嵌套的用法,而是对每个功能都编写一个实现的函数,然后通过调用来到达题目要求。另外一个值得注意的是 号码以及日期的定义只能是字符数组,因为他们的第一个数都有为0的可能。 3 实现方法本程序通过c语言来实现,在vc6.0下运行通过。3.1 函数功能介绍 定义一个信息结构体数组,方便对多条记录进行处理struct type1char no15; float money;char date10;float time;float leftlong,leftshort;in

5、t a;HSIZE; /*定义一个结构体数组*/上述结构体中定义的量一次为:所拨出的号码、各次所交话费金额、缴费日期、每次通话时间、长途总金额、短途总金额以及长短途的区分长途用1表示,短途用0。 函数功能描述1 int menu_select() 打印输出主菜单和功能选择,并将选择值返回到主函数;2 void enter() 输入记录并保存;3 void leavings() 计算当前总余额;4 void costs() 求通话所用金额和长短途所用金额总计;5 void times() 求所查询的号码的呼叫次数;6 void append() 增加记录的实现; 7 void del() 删除记

6、录功能的实现;8 void correct() 更正记录;3.2 函数功能实现 源码分析程序预处理:#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*其它说明*/#include "string.h" /*字符串函数*/#define SIZE 100 /*宏定义*/ 主函数void main() FILE *fp; /*定义一个文件指针,用于文件的开闭和读写*/int i,j; i=0; if(fp=fopen("jilu.txt","r")=

7、NULL) /*翻开文件并判断是否有记录*/printf("无任何记录,请输入要记录的条数: ");scanf("%d",&m);else while(!feof(fp) /*当有记录的时候就读入记录*/fread(&Hi,sizeof(struct type1),1,fp);i+;fclose(fp);m=i-1;if(!m) /*当m=0的时候*/printf("无任何记录,请输入要记录的条数: ");scanf("%d",&m);else printf("nn已有 %d 条记

8、录!n");getchar(); system("cls"); /*c语言的清屏函数*/ for(;) /*无限循环进行功能选择*/ switch(menu_select() case 1:enter();break;case 2:leavings();break; case 3:costs();break; case 4:sort();break; case 5:times();break; case 6:append();break;case 7:del();break; case 8:correct();break;case 9:exit(0); /*此语句

9、相当于一个调用函数的开关*/getchar();system("cls"); 被调用函数int menu_select() /*菜单函数*/char *menu="*菜单*","* 1. 读入记录并保存 *","* 2. 总余额 *","* 3. 金额统计(各次金额、长话总金额、短话总金额) *","* 4. 排序功能(按时间长短,显示各次呼出的 号码) *","* 5. 查询呼叫某 的次数 *", "* 6. 增加记录 *",&quo

10、t;* 7. 删除记录 *","* 8. 修改记录 *","* 9. 退出 *","*"/*以上为菜单目录的制定*/int i,c;for(i=0;i<11;i+) printf("%sn",menui); /*输出菜单*/doprintf("Enter you choice(19):n");scanf("%d",&c);system("cls");while(c<1|c>9);return c; /*输入要实现的功能的

11、选项并将其作为返回值带入主函数*/void enter() /*输入记录并保存功能*/FILE *fp; /*定义文件指针*/int i;printf(" *请输入11位的 号码*n");for(i=0;i<m;i+)printf(" 输入通话的 号码: ");scanf("%s",Hi.no);if(strlen(Hi.no)!=11)printf("sorry! 请重新输入n");i=i-1;continue;printf("n 缴费金额 :");scanf("%f"

12、;,&Hi.money);printf("n 通话日期 :");scanf("%s",Hi.date);printf("n 通话时长分 :");scanf("%f",&Hi.time);printf("n 长途1或短途0 :");scanf("%d",&Hi.a); /*以上为输入记录*/if(Hi.a)Hi.leftlong=Hi.time;Hi.leftshort=0;else Hi.leftlong=0;Hi.leftshort=Hi.time*

13、0.3; /*判断长短途,并分别计算总时间*/if(fp=fopen("jilu.txt","w")=NULL)printf("cannot open filen");return;for(i=0;i<m;i+)if(fwrite(&Hi,sizeof(struct type1),1,fp)!=1)printf("file write errorn");fclose(fp); /*把数据写入文件*/void leavings() /*计算当前总余额*/ FILE *fp1,*fp2; int i; f

14、loat t1=0,t2=0; float leaSIZE; /*定义一个余额数组*/ float leavings=0;fp1=fopen("jilu.txt","r");for(i=0;i<m;i+)fread(&Hi,sizeof(struct type1),1,fp1);if(Hi.a=1) leai=float(Hi.money-Hi.time); if(Hi.a=0) leai=float(Hi.money-Hi.time*0.3);leavings+=leai;fclose(fp1); /*从文件中读取记录并计算余额*/fp2

15、=fopen("jinge.txt","w");fprintf(fp2,"%g",leavings);fclose(fp2);printf("余额为%gnnn",leavings); /*将得到的余额保存在另一个文件中*/getchar();void costs() /*求通话所用金额和长短途所用金额总计*/FILE *fp1,*fp2; int i; float t1=0,t2=0; float cost1=0,cost0=0; float COST;fp1=fopen("jilu.txt",

16、"r");for(i=0;i<m;i+)fread(&Hi,sizeof(struct type1),1,fp1);cost1+=Hi.leftlong;cost0+=Hi.leftshort;fclose(fp1); /*读取数据并计算*/COST=cost1+cost0;fp2=fopen("jinge.txt","a"); fprintf(fp2,"%g %g %g",cost1,cost0,COST);fclose(fp2); /*保存在另一个文件中*/printf("nnt长途通话

17、费用合计t短途通话费用合计t总话费合计n");printf("t%gttt%gttt%gn",cost1,cost0,COST);getchar(); /*所求值求后输出*/void sort() /*实现排序功能的函数*/FILE *fp; int i,j,k;struct type1 t; fp=fopen("jilu.txt","r");i=0;while(!feof(fp)fread(&Hi,sizeof(struct type1),1,fp);i+;fclose(fp); /*文件中读取数据*/m=i-1;

18、 for(i=0;i<m-1;i+)k=i;for(j=i+1;j<m;j+)if(Hj.time<Hk.time) k=j;t=Hk;Hk=Hi;Hi=t; /*进行大小比拟实现排序*/for(i=0;i<m;i+)printf("t通话时间t 号码n");printf("t%gtt%sn",Hi.time,Hi.no); /*排序结果输出*/getchar();void times() /*查询某个号码的拨打次数*/ FILE *fp;char number15;int i,j=0;i=0;fp=fopen("jil

19、u.txt","r");while(!feof(fp)fread(&Hi,sizeof(struct type1),1,fp);i+;m=i; fclose(fp); /*文件翻开数据读入*/printf("输入你要查询的号码n");scanf("%s",number);for(i=0;i<m;i+)if(strcmp(Hi.no,number)=0)j+; /*进行号码比对*/printf("t拔打次数: %dt次n",j);getchar(); /*进行号码查询*/void append

20、() /*增加记录的实现*/FILE *fp;int i, j;i=0;fp=fopen("jilu.txt","r");while(!feof(fp)fread(&Hi,sizeof(struct type1),1,fp);i+;fclose(fp);m=i-1;printf("输入要增加的记录条数( <100 ): ");scanf("%d",&j);for(i=m;i<m+j;i+)printf("n 输入通话的 号码: ");scanf("%s&qu

21、ot;,Hi.no);if(strlen(Hi.no)!=11)printf("sorry! 请重新输入n");i=i-1;continue;printf("n 缴费金额 :");scanf("%f",&Hi.money);printf("n 通话日期 :");scanf("%s",Hi.date);printf("n 通话时长分 :");scanf("%f",&Hi.time);printf("n 长途1或短途0 :"

22、);scanf("%d",&Hi.a);if(Hi.a)Hi.leftlong=Hi.time;Hi.leftshort=0;else Hi.leftlong=0;Hi.leftshort=Hi.time*0.3; /*将结构体中其他需计算的数据计算出来*/m=i;if(fp=fopen("jilu.txt","w")=NULL)printf("cannot open filen");return;for(i=0;i<m;i+)if(fwrite(&Hi,sizeof(struct type1

23、),1,fp)!=1)printf("file write errorn");fclose(fp); /*保存并关闭文件*/ void del() /*删除记录功能的实现*/FILE *fp;int i,j;char a15;i=0;j=0;if(fp=fopen("jilu.txt","r")=NULL)printf("无记录可删除!n");getchar();return;while(!feof(fp)fread(&Hi,sizeof(struct type1),1,fp);i+;fclose(fp);

24、m=i-1;if(!m)printf("无记录可删除!n");getchar();return;printf("输入你要删除的记录的 号码:");scanf("%s",a);if(fp=fopen("jilu.txt","w")=NULL)printf("cannot open filen");return;for(i=0;i<m;i+)if(strcmp(Hi.no,a)!=0)if(fwrite(&Hi,sizeof(struct type1),1,fp)!

25、=1)printf("file write errorn");else j+;fclose(fp);printf("nn 共删除 %d 条记录!n",j);getchar(); /*修改后保存*/void correct() /*更正记录*/FILE *fp;int i;struct type1 t;int c;if(fp=fopen("jilu.txt","r")=NULL)printf("nn无任何记录可被修改!n");getchar();return ;i=0;while(!feof(fp

26、)fread(&Hi,sizeof(struct type1),1,fp);i+; fclose(fp); m=i-1;if(!m)printf("nn无任何记录可被修改!n");getchar();return;system("del jilu.txt");printf("输入你要修改的记录编号( >0&<%d ) : ",m+1);scanf("%d",&c);c-;printf("tt旧记录tt新记录n");printf(" 号码:t%st",Hc.no);scanf("%s",Hc.no);printf("n");printf("缴费金额:t%gtt",Hc.money);scanf("%f",&Hc.money);printf("n");printf("通话时间:t%gtt",Hc.time);scanf("%f",&Hc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论