南邮软件设计报告

更新时间:2023-10-26 09:49:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件设计报告

姓名: 学号:

2011年3月31日~2011年4月15日

目 录

第一章 软件设计介绍 .........................................................................................................................................1 第二章 软件开发平台简介 ................................................................................................................................2 第三章 软件设计的内容....................................................................................................................................3 3.1

分数统计软件(A1) ..........................................................................................................................3

3.1.1设计题目及要求 ...................................................................................................................................3 3.1.2设计思想及程序流程框图 .................................................................................................................3 3.1.3逻辑功能程序........................................................................................................................................4 3.1.4结果及完善方向 ...................................................................................................................................7 3.2

打字软件(A2)...................................................................................................................................9 3.2.1设计题目及要求 ...................................................................................................................................9 3.2.2设计思想及程序流程框图 .................................................................................................................9 3.3.3逻辑功能程序........................................................................................................................................9 3.2.4结果及完善方向 .................................................................................................................................12 3.3

文本编辑器(A3) ............................................................................................................................13 3.3.1设计题目及要求 .................................................................................................................................13 3.3.2设计思想及程序流程框图 ...............................................................................................................13 3.3.3逻辑功能程序......................................................................................................................................13 3.3.4结果及完善方向 .................................................................................................................................16 3.4

加密软件(A4).................................................................................................................................17 3.4.1设计题目及要求 ...................................................... 18 3.4.2设计思想及程序流程框图 .............................................. 18 3.4.3逻辑功能程序 ........................................................ 18 3.4.4结果及完善方向 ...................................................... 21 3.5

进制转换器(A5) ............................................................................................................................23 3.5.1设计题目及要求 ...................................................... 23 3.5.2设计思想及程序流程框图 .............................................. 23 3.5.3逻辑功能程序 ........................................................ 24 3.5.4结果及完善方向 ...................................................... 28 3.6

学生成绩核算系统的设计与实现(B1) ....................................................................................29 3.6.1设计题目及要求 ...................................................... 29 3.6.2设计思想及程序流程框图 .............................................. 29 3.6.3逻辑功能程序 ........................................................ 31 3.6.4结果及完善方向 ...................................................... 36 3.7

模拟电信计费系统的设计与实现(B2) ....................................................................................39 3.7.1设计题目及要求 ...................................................... 39 3.7.2设计思想及程序流程框图 .............................................. 40 3.7.3逻辑功能程序 ........................................................ 41 3.7.4结果及完善方向 ...................................................... 48 第四章 心得体会 ................................................................................................................................................51

第一章 软件设计介绍

一、软件设计的性质、目的

本课程是一门技能训练课,为在校学生的必修课程。通过设计培养学生良好的编程习惯,使学生掌握编程的基本步骤,规范学生的编写程序的格式,锻炼学生编写程序的能力,为将来编写较大程序的打好基础。

二、软件设计的任务

通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。 三、实验内容

软件设计课题共分A 、B两档。A档共5题,第一周完成;B档共2题,第二周完成。 四、考核办法

考核采取程序验收和面试的方法进行。其中,程序验收及面试占50%,实验报告占50%。在考核过程中,若发现抄袭程序者,所抄袭的程序按零分记。

注:如有以下情况,视为抄袭:

1、 与已验收的程序明显雷同;

2、 面试时不能解释程序中的某些基本功能,或对所写程序一无所

知。

1

第二章 软件开发平台简介

Microsoft Visual C++是

Microsoft公司推出的开发Win32环境

程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写 和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界 面。

它以拥有“语法高亮”,IntelliSense(自 动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启

动正在调试 的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

2

第三章 软件设计的内容

3.1 分数统计软件(A1)

3.1.1设计题目及要求

题目:分数统计 要求:(1)输入某班级学生的姓名、分数;

(2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。

3.1.2设计思想及程序流程框图

设计思想:先输出程序菜单,然后按照菜单选项进行操作,选择选项一:即先输入要排序的学生人数,然后利用循环语句按次输入学生姓名和成绩,直至将学生姓名和分数全输入,输入完后按enter后,在程序界面上显示刚才输入的内容。选择选项二:则运行程序中的按照成绩的降序功能输出排序后的学生学号、学生姓名和学生成绩。选择选项三:则程序正常退出。

程序流程框图:

3

开 始 输出菜单输入选项 n 输入学生人数n 用程序将学生分数排序 结 束 输入学生姓名name和分数score 输出排序

3.1.3逻辑功能程序

/*--------------------------------- 要求:

(1)输入某班级学生的姓名、分数;

(2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 ----------------------------------*/ #include #include #include #include

struct student {

int ID;

char name[10]; //学生姓名 float score; //学生成绩

}stu[100]; int num;

void dis_menu(); //菜单显示函数 void set_menu(); //菜单设置程序 void set_inf(); //学生信息输入函数 void dis_inf(); //学生信息显示函数 void dec_sort(); //学生成绩降序排列 void XD_transfer();

int main() { }

void dis_menu() {

printf(\printf(\分数统计程序**************************\\n\printf(\

4

while(1) { } return 0;

dis_menu(); set_menu();

}

printf(\ 1、输入学生数据 **\\n\ printf(\ 2、成绩降序排列 **\\n\printf(\ 3、退出程序 **\\n\ printf(\printf(\请选择你要进行的操作:\

void set_menu() { }

char n[100]; scanf(\if(strlen(n)>1) { }

printf(\输入错误!请重新输入:\ set_menu();

else { switch(*n) }

{ }

case '1':

XD_transfer(); set_inf(); dis_inf(); break;

case '2': dec_sort(); dis_inf(); break; case '3': printf(\

default: printf(\输入错误!请重新输入:\

void set_inf() { }

int i;

for(i=0;i

stu[i].ID=i+1;

printf(\学号:%d\\n\printf(\姓名:\ scanf(\printf(\成绩:\scanf(\printf(\

5

void dis_inf() {

int i;

printf(\学生成绩统计如下:\\n\

printf(\学号\姓名\成绩\ for(i=0;i

printf(\ printf(\}

void dec_sort() {

int i,j,max_index,n=num;

struct student stu_temp; for(i=0;i

{ }

max_index=i; for(j=i+1;j

if(stu[j].score>stu[max_index].score)

max_index=j; if(max_index!=i) { stu_temp=stu[i]; stu[i]=stu[max_index]; }

stu[max_index]=stu_temp;

void XD_transfer() {

char temp[100],ch; int i=0,flag=1,count=0; while(flag) {

i=0;

flag=0; count=0;

fflush(stdin); //清空输入缓冲区,确保读入无错 printf(\请输入学生人数:\while((ch=getchar())!='\\n') { if(ch<'0'||ch>'9')

6

}

{ }

printf(\输入数字有误!\\n\flag=1; break;

temp[i]=ch; count++;

i++; }

temp[i]='\\0';// 输入正确八进制结束

for(i=0;i

}

printf(\

3.1.4结果及完善方向 运行结果:

输入学生成绩窗口

7

学生成绩降序排列窗口

程序特点及完善方向:

本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。同理,输入学生人数也一样,保证了程序的稳定可靠。如果程序可以中途停止,并自动保存刚输入的数据,待下次运行时正常调出,则程序将更加完整,更具有实用性。

8

3.2 打字软件(A2)

3.2.1设计题目及要求 题目:打字程序

要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同;

(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;

(3)具有输入输出界面。

3.2.2设计思想及程序流程框图

设计思想:先设计一个欢迎进入打字程序的菜单,然后就由程序随机产生一个任意长度的字符串(大小写的英文字母),然后由用户输入字符串里显示的字母,输入完后按enter结束输入,最后程序输出用户打字的正确率。接着一个选项,询问用户是否继续进行打字练习。选择是则打字练习继续上述的操作;选择退出程序则退出程序。

程序流程框图:

3.3.3逻辑功能程序

9

开 始 输出欢迎菜单 输出随机产生的字符串 输出打字正确率输入字符串 1 输出yes or no 输入选项 yes ch no 结 束

/*------------------------------------------------------------- 程序名称:打字程序 要求:

(1)随机产生一字符串,每次产生的字符串内容、长度都不同;

(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。

--------------------------------------------------------------*/ #include #include #include

#include

#define max_len 40 //定义产生的字符串最长为40个字符

void rand_str(char *p,int length);

double compare(char *p,char *s,int length); void display();

int main() {

char ch[20]; int length; double flag;

srand(time(NULL)); char p[80]=\

char s[80]=\ display();

do {

char p[80]=\ char s[80]=\

printf(\length=1+rand()%max_len;

rand_str(p,length);

printf(\printf(\请输入上面的字母:\\n\

printf(\ fflush(stdin);//减少不必要错误

scanf(\

flag=compare(p,s,length);

if(flag==1) printf(\输入完全正确!\\n\else

10

printf(\输入有误,您本次输入正确率:%0.2g%%\\n\

printf(\ getchar(); printf(\您还继续吗?请按任意键继续或者按N键结束:\

scanf(\

}while(ch[0]!='N'&&ch[0]!='n');

printf(\ return 0; }

void rand_str(char *p,int length) { int i; char ch; printf(\ for(i=0;i

{ int num; do { num=65+rand()%(122-65+1); }while(num>90&&num<97); ch=num; printf(\ p[i]=ch; }

}

double compare(char *p,char *s,int length) { int j;

int number=0; double rate; for(j=0;j

number=number+1;

}

rate=1.0*number/length;

return rate;

11

}

void display() { printf(\ }

3.2.4结果及完善方向 运行结果:

printf(\printf(\ 欢迎进入打字练习程序 **\\n\printf(\ printf(\printf(\

打字程序运行界面

打字程序运行界面

12

完善方向:

程序基本功能都能完成,争取率统计也完全正确。本程序如果做成用户图形界面(GUI),我相信这个程序将具有更好的实用性。

3.3 文本编辑器(A3)

3.3.1设计题目及要求 题目:文本编辑器

要求:(1)编辑文本;

(2)保存、打开指定位置的文本文件; (3)具有输入输出界面。

3.3.2设计思想及程序流程框图

设计思想:先显示一个功能菜单。然后由用户选择是编辑文本还是读取文本或者退出程序。如果选择编辑文本的话就在某位置建立一个文本文档,然后向文本文件里写入你要写的东西。读文本文件的话就在见文本的位置读该文本,先判断文本是否存在,如果不存在则显示打开文本失败;如果存在则读取文本中的信息。选择退出程序则退出程序。

程序流程框图:

3.3.3逻辑功能程序

13

开 始 输出功能菜单 输入n 3 n 1 2 结 束 输入文件名 输入文件名 输入文件名 建立文本 编辑文本 读取文本

/*------------------------------------------------------------- 程序名称:文本编辑器 要求:

(1)编辑文本;

(2)保存、打开指定位置的文本文件; (3)具有输入输出界面。

--------------------------------------------------------------*/ #include

#include //包含exit(1)的原型 #include

void menu1();

void create_file(FILE *fp,char *fname); void write_file(FILE *fp,char *fname); void read_file(FILE *fp,char *fname);

int main() { FILE *fp;

int count=0; char num[100]; int flag1,flag2,flag3; char F_name[20];

while(1) {

menu1(); printf(\请选择你要进行的文件操作:\

scanf(\

getchar();

while(strlen(num)>1||num[0]<49||num[0]>52)

{ }

switch(num[0]) {

case '1': flag1=1; break; case '2': flag2=1; break;

case '3': flag3=1; break;

case '4': printf(\}

14

printf(\输入错误!请重新输入:\scanf(\getchar();

}

void menu1() {

printf(\printf(\文本编辑器***************************\\n\ }

if(flag1==1) { flag1=0;

create_file(fp,F_name); }

else if(flag2==1) {

flag2=0;

write_file(fp,F_name);

}

else if(flag3==1) { }

flag3=0;

read_file(fp,F_name);

return 0;

printf(\printf(\ 1、建立文本 **\\n\ printf(\ 2、编辑文本 **\\n\printf(\ 3、读取文本 **\\n\printf(\ 4、退出程序 **\\n\

printf(\}

void write_file(FILE *fp,char *fname) {

char ch; printf(\请键入编辑的文件名(如D:\\\\name.txt):\\n\\t\ gets(fname);

if((fp=fopen(fname,\w\

{

printf(\不能打开文件!\\n\exit(0);

15

}

}

printf(\请输入内容(以#号键结束):\\n\\t\ch=getchar(); while(ch!='#') {

fputc(ch,fp); ch=getchar();

}

printf(\getchar(); fclose(fp);

void create_file(FILE *fp,char *fname) { printf(\请键入新建的文件名(如D:\\\\name.txt):\\n\\t\

gets(fname);

if((fp=fopen(fname,\w+\ { printf(\不能打开文件!\\n\

exit(0);

}

printf(\文件已经创建好!\\n\\n\

fclose(fp); }

void read_file(FILE *fp,char *fname) {

char ch;

printf(\请键入读取的文件名(如D:\\\\name.txt):\\n\\t\gets(fname);

if((fp=fopen(fname,\ { }

printf(\不能打开文件!\\n\exit(0);

printf(\

while((ch=fgetc(fp))!=EOF) { }

putchar(ch);

printf(\fclose(fp);

}

3.3.4结果及完善方向

16

运行结果:

向指定文件写入内容

从指定文件中读取文件内容

完善方向:

本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。本程序可以根据指定文件名进行建立文件、读取文件、编辑文件等操作。

文本再次编辑时,将覆盖上次编辑的内容,可以设计将这一点完善。可以用循环函数设计编辑文本。

3.4 加密软件(A4)

17

}

{ }

dis_menu(); set_menu(); return 0;

void dis_menu() {

cout<<\cout<<\模拟电信计费系统*******************\cout<<\

\ cout<<\ 1、话费计算 **\ }

void set_menu() { char n[500]; cin>>n;

if(strlen(n)>1) { cout<<\输入错误!请重新输入:\ } else { }

switch(*n) { }

case '1': calc_cost(); dis_data(); write_file(); break; case '2': calc_cost(); read_user(); cost_check(); break; case '3': read_user(); huadan_check(); break;

case '4': cout<<\

default: cout<<\输入错误!请重新输入:\set_menu();

cout<<\ 2、话费查询 **\cout<<\ 3、话单查询 **\cout<<\ 4、退出系统 **\cout<<\ cout<<\请选择你要进行的操作:\

}

void read_hd()

43

{

char ch; memset (huadan,0,sizeof(huadan));

if((fp1=fopen(\ { cout<<\无法打开文件!\

exit(1);

}

while((ch=fgetc(fp1))!='\\n'); //跳过hd文件的第一行非话单信息 fscanf(fp1,\

huadan[i].time); while(!feof(fp1))

{

i=i+1;

fscanf(fp1,\

huadan[i].time); } fclose(fp1); }

void read_fl() { int m; char ch;

memset (fl,0,sizeof(fl));

if((fp2=fopen(\ { cout<<\无法打开文件!\

exit(1);

}

while((ch=fgetc(fp2))!='\\n'); //跳过fl文件的第一行非费率信息

for(m=0;m<4;m++) fscanf(fp2,\ }

void read_user() {

int m; char ch;

if((fp1=fopen(\ { cout<<\无法打开文件!\

44

fclose(fp2);

exit(1);

}

while((ch=fgetc(fp1))!='\\n'); //跳过fl文件的第一行非费率信息

for(m=0;m<5;m++) fscanf(fp1,\ fclose(fp1);

}

void calc_cost() {

int m,n,j; for(m=0;m

cost[m].bd_cost=0.5+0.2*((n-1)/3);

cost[m].ct_cost=0; cost[m].call_cost=cost[m].bd_cost; } else { cost[m].call_type=1; n=1+(huadan[m].time-1)/60; if(n<=3) cost[m].bd_cost=0.5;

else

cost[m].bd_cost=0.5+0.2*((n-1)/3);

for(j=0;j<4;j++) { if(strcmp(fl[j].quhao,huadan[m].bj)==0) 费率

cost[m].ct_cost=fl[j].cost_rate*n;

}

cost[m].call_cost=cost[m].bd_cost+cost[m].ct_cost;

} }

}

45

//比较区号,得出

void dis_data() { int m; cout<

printf(\主叫号码\通话类型\通话费用\ for(m=0;m

printf(\}

void write_file() { st);

int m;

while((fp2=fopen(\{ cout<<\无法打开文件!\

exit(1); }

fprintf(fp2, \主叫号码\通话类型\通话费用\for(m=0;m

fprintf(fp2,\

cout<<\文件已存到D:\\\\fy.dat文件中。\fclose(fp2);

}

void cost_check() {

int m,index,flag=0;

float cost_sum=0,bd_sum=0,ct_sum=0; char number[20];

cout<<\请输入你要查询的号码:\cin>>number; for(m=0;m<5;m++) { }

if(strcmp(number,user[m].num)==0) { }

index=m; flag=1;

46

if(flag==0) { } {

for(m=0;m

if(strcmp(number,huadan[m].zj_num)==0) {

cost_sum=cost_sum+cost[m].call_cost; bd_sum=bd_sum+cost[m].bd_cost; ct_sum=ct_sum+cost[m].ct_cost;

cout<<\对不起,没有该号码的信息!\cost_check();

else

} } cout<

printf(\_sum); } }

void huadan_check() {

int m,flag=0,index; char number[20];

cout<<\请输入要查询的号码:\cin>>number;

for(m=0;m<5;m++) { } { }

if(strcmp(number,user[m].num)==0) { }

index=m; flag=1;

if(flag==0)

cout<<\对不起,没有该号码的信息!\huadan_check();

47

3.5 进制转换器(A5)

3.5.1设计题目及要求

题目:进制转换器(10)

要求:(1)可输入二进制、八进制、十进制、十六进制数;

(2)将已输入的数转换成其余进制的数; (3)具有输入输出界面。

3.5.2设计思想及程序流程框图

设计思想:先显示一个功能菜单供用户选择。程序设计两个函数,分别是十进制的数转化成其他进制数程序,及其他程序转换成十进制的程序。如果二进制、八进制、十进制、十六进制要转换成其他进制的数,首先要判断他们是否是输入正确的特定进制的数,然后转换成十进制,再由十进制转换成其他进制。

程序流程框图 1 输入 str 23 开 始 输出功能菜单 输入num num 2 输入str 3 输入str 4 输入str 5 结 束

二进制 错误 n n 八进制 y 十进制转换 成其他进制 转成十进制 十进制 ny y n 十六进制 n y 3.5.3逻辑功能程序 /*------------------------------------------------------------- 程序名称:进制转换器

要 求:(1)可输入二进制、八进制、十进制、十六进制数; (2)将已输入的数转换成其余进制的数; (3)具有输入输出界面。

--------------------------------------------------------------*/ #include #include #include #include

void dis_menu(); //菜单显示 void set_menu(); //菜单设置

void DX_transfer(int num,int n); //十进制转换为其他进制 int XD_transfer(int n); //其他进制转换成十进 int main() {

while(1) { }

dis_menu(); set_menu(); return 0;

}

void dis_menu() {

printf(\printf(\进制转换器程序************************\\n\

printf(\printf(\ 1、输入二进制 **\\n\

24

printf(\ 2、输入八进制 **\\n\

printf(\ 3、输入十进制 **\\n\ printf(\ 4、输入十六进制 **\\n\ printf(\ 5、退出程序 **\\n\ printf(\ printf(\请选择你要进行的操作:\}

void set_menu() {

int num; char n[500]; scanf(\

if(strlen(n)>1) { printf(\输入错误!请重新输入:\ } else {

switch(*n) set_menu();

{ case '1': num=XD_transfer(2); DX_transfer(num,8); printf(\转换10进制输出为:%d\\n\ case '2': num=XD_transfer(8); DX_transfer(num,2); printf(\转换10进制输出为:%d\\n\ DX_transfer(num,16); printf(\

case '3': num = XD_transfer(10); DX_transfer(num,2); DX_transfer(num,8); DX_transfer(num,16); printf(\

case '4': num=XD_transfer(16); DX_transfer(num,2); DX_transfer(num,8); printf(\转换10进制输出为:%d\\n\ }

}

case '5': printf(\

default: printf(\输入错误!请重新输入:\ }

void DX_transfer(int num,int n) {

char num_tp[100];

int i=0;

printf(\转换%d进制输出为:\if(n<16) {

while(num!=0) { num_tp[i]='0'+num%n;

25

}

} else {

num=num/n;

i++; }

num_tp[i]='\\0'; while(i!=0)

putchar(num_tp[--i]);

while(num!=0) {

if(num>9&&num<16) num_tp[i]='A'+(num-10); else

num_tp[i]='0'+num; num=num/16;

i++; }

num_tp[i]='\\0'; while(i!=0)

putchar(num_tp[--i]);

}

printf(\

int XD_transfer(int n) {

char temp[100],ch,m;

int num=0,i=0,flag=1,count=0; while(flag) {

i=0;

flag=0; count=0;

fflush(stdin); //清空输入缓冲区,确保读入无错 printf(\请输入%d进制数:\if(n<16) {

while((ch=getchar())!='\\n') {

if(ch<'0'||ch>m) { printf(\输入数字有误!\\n\

26

m=48+n-1;

flag=1;

break; }

temp[i]=ch; count++; i++;

}

temp[i]='\\0';// 输入正确八进制结束 for(i=0;i

num=num+(temp[i]-'0')*(int)pow(n,(count-i-1));//计算值

} else {

while((ch=getchar())!='\\n') {

if((ch<'0'||ch>'9')&&(ch<'A'||ch>'F')&&(ch<'a'||ch>'f')) { printf(\输入数字有误!\\n\

flag=1; break; }

temp[i]=ch; count++;

i++; }

temp[i]='\\0';// 输入正确十六进制结束

for(i=0;i

if(temp[i]>='0'&&temp[i]<='9') num=num+(temp[i]-'0')*(int)pow(16,(count-i-1));//计算值

else if(temp[i]>='A'&&temp[i]<='F') { }

num=num+((temp[i]-'A')+10)*(int)pow(16,(count-i-1));

else if(temp[i]>='a'&&temp[i]<='f')

{

num=num+((temp[i]-'a')+10)*(int)pow(16,(count-i-1));

}

}

} } return num;

27

各等级百分比计算

各等级学生查询

程序产生的新文件(out.dat):

学号(6位) 总评成绩 等级 班级平均成绩 994201 75.45 C 76.71 994202 81.55 B 76.71 994203 78.8 C 76.71 994204 80.5 B 76.71 994205 85.85 B 76.71 994206 71.9 C 76.71 994207 76.1 C 76.71 994208 63.4 D 76.71 994209 88.1 B 76.71 994210 91.5 A 76.71 994211 54.65 E 76.71 994212 68.1 D 76.71 994213 76 C 76.71

38

994214 78.2 C 76.71

994215 80.5 B 76.71 完善方向:

本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。同理,输入各进制数也一样,保证了程序的稳定可靠。还可以设计输入一个学生学号,然后根据学号输出学生相应的成绩和成绩等级、成绩排序、指定学生记录的删除等等的功能。另外如果设计一个比较好的GUI,将更有实用性。

3.7 模拟电信计费系统的设计与实现(B2)

3.7.1设计题目及要求

题目:模拟电信计费系统的设计与实现(25) 要求:(1) 计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中:

通话费的计算方法如下:

通话费=长途电话费+本地电话费

长途电话费=费率(元/分钟)×通话时长(分钟) (通话时长不满1分钟的按1分钟计算)

本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。

(2) 话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:

用户名 电话号码 本地话费 长途话费 话费总计

(3) 话单查询。输入一个电话号码,查询并在屏幕显示该用户的所有通话记录,

39

格式为:

用户名 主叫电话号码 被叫电话号码 通话时长

3.7.2设计思想及程序流程框图

设计思想:先设计具有如下功能的菜单:1、话费计算;2、话费查询;3、话单查询;4、退出系统。先读取源数据文件中的通话记录,长途费率,以及电话号码相应的资料,得到所需信息。然后根据题目要求{通话费=长途电话费+本地电话费,长途电话费=费率(元/分钟)×通话时长(分钟)(通话时长不满1分钟的按1分钟计算),本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。}计算出电话用户每次主叫通话的费用。然后将每次通话记录的主叫号码,通话类型通话费用保存到费用文件中去。若用户要查询某一号码的话费则从费用文件中读取并计算出该号码的本地话费,长途话费和总话费,接着显示出用户名,主叫号码,本地话费,长途话费和总话费。若用户想查询某号码的所有通话记录,则从源数据文件中读取数据,输出该号码的主叫和被叫的所有通话记录,输出该号码的用户名,主叫号码,被叫号码,通话时长。选择退出程序则退出程序。本程序采用C与C++混合编程,以提高编写代码的效率。

程序流程框图:

2 开 始 输出功能菜单 输入n 4 n 3 输入要查询号码 40 读取源文件数据并计算通话费用,并输出至fl.dat文件 1 输入要查询号码

3.7.3逻辑功能程序

/*------------------------------------------------------------- 程序名称:模拟电信计费系统的设计与实现(25) 要求:

计算该号码的话费 读取yh.dat文件,查询对应号码的信息 结 束 输出该号码的通话费用 输出该号码的话单信息 (1) 计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中: 通话费的计算方法如下:

通话费=长途电话费+本地电话费

长途电话费=费率(元/分钟)×通话时长(分钟)

(通话时长不满1分钟的按1分钟计算)

本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。

(2) 话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:

用户名 电话号码 本地话费 长途话费 话费总计

(3) 话单查询。输入一个电话号码,查询并在屏幕显示该用户的所有通话记录,格式为: 用户名 主叫电话号码 被叫电话号码 通话时长

除了部分输入输出用C++实现外,其他都是用C实现的 --------------------------------------------------------------*/

#include //包含输入输出流对象的头文件 #include

#include //包含字符串处理的相关原型

using namespace std;

void dis_menu(); //显示系统菜单 void set_menu(); //系统菜单设置 void read_hd(); //读取话单信息 void read_fl(); //读取费率

void read_user(); //读取用户信息 void calc_cost(); //通话费用计算

void dis_data(); //显示通话费用计算的结果

41

void write_file(); //将计算结果输入fy.dat 文件中 void cost_check(); //话费查询 void huadan_check(); //话单查询

FILE *fp1; FILE *fp2;

FILE *fp3;

int i; //统计话单数量

struct huadan { char zj[10]; char zj_num[20]; char bj[10]; char bj_num[20];

int time;

}huadan[40];

struct fl {

char quhao[10]; float cost_rate; }fl[4];

struct cost { int call_type; float bd_cost; float ct_cost;

float call_cost;

}cost[10];

struct user { char num[20]; char name[10];

}user[5];

int main() { read_hd(); read_fl();

while(1)

42

本文来源:https://www.bwwdw.com/article/cgs2.html

Top