電信計費模擬實現(xiàn)(C語言)_第1頁
電信計費模擬實現(xiàn)(C語言)_第2頁
電信計費模擬實現(xiàn)(C語言)_第3頁
電信計費模擬實現(xiàn)(C語言)_第4頁
電信計費模擬實現(xiàn)(C語言)_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設計報告( 2012 / 2013 學年 第 二 學期)題 目: 電信計費模擬實現(xiàn) 專 業(yè) 通信工程 學 生 姓 名 班 級 學 號 指 導 教 師 郭 劍 指 導 單 位 計算機軟件教學中心 日 期 2013年6月27日 電信計費模擬實現(xiàn)一、 課題內(nèi)容和要求電信計費系統(tǒng)主要負責對電信各類客戶每月帳單統(tǒng)計、查詢、備份等管理工作。本課題以該系統(tǒng)要求編寫一個程序,實現(xiàn)對電信計費的模擬。通過此可以,熟練掌握文件讀寫、函數(shù)調(diào)用等知識,以及查找、典型算法的設計與應用。二、 需求分析 功能框架圖:(見圖1)電信計費模擬系統(tǒng)通話記錄顯示備份通話記錄檢測通話時長異常保存話費詳細話

2、費統(tǒng)計 圖1(1) 提供可操作的主菜單:輸出個菜單,用于顯示以從文件中加載的總客戶信息和若干個可選的功能選項。根據(jù)客戶輸入的選項來運行不同的功能,運行不同的函數(shù)。(2) 進行文本信息的載入:從指定的文件中以鏈表形式加載所需的客戶信息。這里的文件是在編譯時就已經(jīng)指定好的、存在的文本,需設計者預先自己建立好。(3) 查找客戶功能:以客戶輸入的電話號碼進行查找對應的客戶信息并將它們輸出。(4) 對現(xiàn)有信息的保存:保存內(nèi)存中的最新的記錄輸出到磁盤文件中。這里默認的是保存到原讀取文件中并覆蓋原來的信息。(5) 將信息備份到另外的一個文本中:通過文件格式讀寫函數(shù),將源文件信息寫到客戶提供的目標文件中。(6

3、) 分類合計功能:客戶話費小計、長話費小計、通話費合計、客戶帳單數(shù)量。三、概要設計 1 主要結(jié)構(gòu)體:struct consumer /用戶信息定義char name110; /客戶姓氏 char name210; /客戶名char phone9; /電話號碼char YN2; /來電顯示是否yhzl100;struct feelist /話單信息定義 char number19; /主叫號碼char number213; /被叫號碼char qishi15; /通話起始時間char zhongzhi15; /通話終止時間hd300;struct huafeichar haoma9; /本人號碼

4、char xingming110; /姓 char xingming210; /名int y; /月租費int g; /功能費double shinei; /市內(nèi)話費double changtu; /長途話費double zonghe; /總和hfd100;2 主要函數(shù)流程圖: (1)裝載函數(shù):用于實現(xiàn)用戶與系統(tǒng)的交互,顯示用戶菜單、操作提示等,流程圖如圖2所示:開始調(diào)用函數(shù)打開文件成功讀入數(shù)據(jù)是號碼比對相同輸出數(shù)據(jù)文件是否結(jié)束是不同否結(jié)束開始讀入號碼加載菜單讀入選項選項符合條件調(diào)用函數(shù)是否繼續(xù)是是否否結(jié)束圖2 圖3(2)查找函數(shù):利用用戶輸入的號碼進行順序查找并將找到的客戶的所有通話記錄并輸

5、出。見圖3(3)查看賬單:利用計算函數(shù)和輸入的用戶號碼,進行順序查找出用戶的通話賬單并顯示在屏幕上。見圖4開始打開文件成功讀入數(shù)據(jù)文件是否結(jié)束計算時間判斷時間輸出話單結(jié)束是開始打開文件成功讀入數(shù)據(jù)文件是否結(jié)束號碼是否相同輸出話費信息結(jié)束否是是否 圖4 圖5(4)檢查錯誤話單:檢查號碼通話時長是否大于三天,并顯示和保存異常話單,如圖5(5)保存文件函數(shù):將用戶所有通話記錄保存到本文件中。 四、 源程序代碼 #include<stdio.h>#include<stdlib.h>#include<string.h>struct consumer /用戶信息定義ch

6、ar name110; /姓 char name210; /名char phone9; /電話號碼char YN2; /來電顯示是否yhzl100;struct feelist /話單信息定義 char number19; /主叫號碼char number213; /被叫號碼char qishi15; /通話起始時間char zhongzhi15; /通話終止時間hd300;struct huafeichar haoma9; /本人號碼char xingming110; /姓 char xingming210; /名int y; /月租費int g; /功能費double shinei; /市

7、內(nèi)話費double changtu; /長途話費double zonghe; /總和hfd100;const int a=25, b=6; /a為月租費,b為來電顯示費const double c=0.1,d=0.7; /c為市內(nèi)電話單價,d為長途電話單價void jisuan(); /計算所有話費信息void menu(); /顯示菜單double shijian(char ,char ); /計算單次通話時長void jilu(char ); /顯示個人所有通話記錄void xiangxi(char ); /顯示個人話費賬單void savefile(char ); /保存?zhèn)€人所有通話記錄

8、void check(char ); /檢查號碼通話時長是否大于三天,并顯示和保存異常話單int main()int e; /e為所選操作項目序號char f; /f為記錄是否繼續(xù)操作(Y或N)char p19; /電話號碼字符串 jisuan();printf(" 歡迎進入電信計費模擬系統(tǒng)n");printf("*n");printf("請輸入您的號碼:n");gets(p1);menu(); doprintf("請選擇您要進行的操作:n");scanf("%d",&e); switc

9、h(e) case 1: jilu(p1); break; case 2: xiangxi(p1); break;case 3: savefile(p1); break;case 4: check(p1); break;case 0: exit(0);default: printf("n%d不可用",e);printf("n是否繼續(xù)(Y/N)?n");getchar();f=getchar();while(f='Y'|f='y');return 0; void jisuan() /打開文件,并生成“費用詳單”文件 int

10、i=0,j=0;int num1; /num1為來電顯示費用 double t,changtuhf=0.0,shineihf=0.0,sum=0.0; /changtuhf長途話費累加變量,shineihf市內(nèi)話費累加變量,sum話費總和FILE *fp1,*fp2,*fp3; fp1=fopen("D:話單記錄.txt","r"); fp2=fopen("D:用戶資料.txt","r"); fp3=fopen("D:費用詳單.txt","w"); if(!fp1) prin

11、tf("file cannot be opened"); exit(0); if(!fp2) printf("file cannot be opened"); exit(0); if(!fp3) printf("file cannot be opened"); exit(0); for(i=0;!feof(fp2);i+) fscanf(fp2,"%s%s%s%s",&1,&2,&yhzli.phone,&yhzli.YN); for(j=0;

12、!feof(fp1);j+) fscanf(fp1,"%s%s%s%s",&hdj.number1,&hdj.number2,&hdj.qishi,&hdj.zhongzhi);if(strcmp(yhzli.phone,hdj.number1)=0) /找出所選號碼對應的通話記錄 if(strcmp(yhzli.YN,"Y")=0) /判斷是否開通來電顯示功能 num1=b; else num1=0;t=shijian(hdj.qishi,hdj.zhongzhi); if(t-(int)t)>0) t=(int)

13、t+1; else t=(int)t; if(hdj.number20='0') changtuhf+=d*t; else shineihf+=c*t; sum=a+num1+shineihf+changtuhf; fprintf(fp3,"%-10s%-6s%-10s%-10d%-10d%-15lf%-15lf%-15lfn",yhzli.phone,1,2,a,num1,shineihf,changtuhf,sum); rewind(fp1); changtuhf=0.0,shineihf=0.0,sum=0.0;

14、 fclose(fp1); fclose(fp2); fclose(fp3);void menu() printf("*n");printf("請選擇需要的服務:n");printf("*n");printf("1-通話記錄顯示 n");printf("2-詳細話費 n");printf("3-保存話費 n");printf("4-檢測通話時長異常 n");printf("0-退出 n");printf("*n");

15、void jilu(char phone1) /利用用戶輸入的號碼進行順序查找并將找到的客戶信息輸出 int i=0; FILE *tt; tt=fopen("D:話單記錄.txt","r"); if(!tt) printf("file cannot be opened"); exit(0); fscanf(tt,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); while(!feof(tt) if(str

16、cmp(hdi.number1,phone1)=0)fprintf(stdout,"%-10s%-10s%-20s%-20sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);i+; fscanf(tt,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); fclose(tt);void xiangxi(char phone1) /將用戶月租費、功能費、市話費、長途費和合計顯示在屏幕上 int i=0

17、;FILE *ss; ss=fopen("D:費用詳單.txt","r");if(!ss) printf("file cannot be opened"); exit(0); fscanf(ss,"%s%s%s%d%d%lf%lf%lf",&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changtu,&hfdi.zonghe); while(

18、!feof(ss) if(strcmp(hfdi.haoma,phone1)=0) printf(" 用戶號碼 用戶姓名 月租費 功能費 市話費 長途費 合計 n "); printf("%-10s%-6s%-10s%-10d%-10d%-10.3lf%-10.3lf%-10.3lfn",hfdi.haoma,hfdi.xingming1,hfdi.xingming2,hfdi.y,hfdi.g,hfdi.shinei,hfdi.changtu,hfdi.zonghe); break; else fscanf(ss,"%s%s%s%d%d%lf

19、%lf%lf",&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changtu,&hfdi.zonghe); fclose(ss);void savefile(char phone1) /將用戶的所有通話記錄輸出到指定文件中 int i=0; FILE *q,*p; q=fopen("D:話單記錄.txt","r"); p=fopen("D:話單保存.txt&qu

20、ot;,"w"); if(!q) printf("file cannot be opened"); exit(0); if(!p) printf("file cannot be opened"); exit(0); fscanf(q,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); while(!feof(q) if(strcmp(hdi.number1,phone1)=0)fprintf(p,"

21、%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);i+; fscanf(q,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); printf("您的話單已保存于D盤"); fclose(q); fclose(p);void check(char phone1) /檢查號碼通話時長是否大于三天,并顯示和保存異常話單 int i=0; double t

22、;FILE *p1,*p2;p1=fopen("D:話單記錄.txt","r"); p2=fopen("D: 話單異常.txt","w"); if(!p1) printf("file cannot be opened"); exit(0); if(!p2) printf("file cannot be opened"); exit(0); fscanf(p1,"%s%s%s%s",&hdi.number1,&hdi.number2,&

23、;hdi.qishi,&hdi.zhongzhi); while(!feof(p1) t=shijian(hdi.qishi,hdi.zhongzhi);if(t>4320) fprintf(p2,"%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);if(strcmp(phone1,hdi.number1)=0)printf("您的異常通話時長話單為:n%-10s%-10s%-20s%-10sn",hdi.number1,hdi.number2,hd

24、i.qishi,hdi.zhongzhi);else fscanf(p1,"%s%s%s%s",&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); i+; fclose(p1);fclose(p2);double shijian(char kt,char jt)int tyear,tmonth,tday,thour,tminute,ts; int kyear,kmonth,year,month;double t,t1;tyear=(jt0-kt0)*1000+(jt1-kt1)*100+(

25、jt2-kt2)*10+(jt3-kt3);tmonth=(jt4-kt4)*10+(jt5-kt5); tday=(jt6-kt6)*10+(jt7-kt7);thour=(jt8-kt8)*10+(jt9-kt9);tminute=(jt10-kt10)*10+(jt11-kt11);ts=(jt12-kt12)*10+(jt13-kt13); kyear=kt0*1000+kt1*100+kt2*10+kt3; if(kyear%4=0&&kyear%100!=0|kyear%400=0) year=tyear*;else year=tyear*;kmonth=(kt6-

26、48)*10+(kt7-48);switch(tmonth)case -11: if(kyear%4=0&&kyear%100!=0|kyear%400=0) month=-335; else month=-334; break;case 0: month=0; break;case 1: month=kmonth; break;default: break;t1=year+month*1440+tday*1440+thour*60+tminute+ts/60.0;t=t1;return t; /返回值:單次通話時間五、測試數(shù)據(jù)及其結(jié)果分析(1) 主菜單:圖6(2) 主要操作圖

27、7(3) 主要功能圖8(4) 輸出的所有話單記錄文件圖9(5) 輸出賬單文件圖10(6) 退出系統(tǒng)輸入0或當出現(xiàn)“是否繼續(xù)<Y/N>”時輸入N圖11結(jié)果分析:1)在輸入菜單選項時如果輸入的內(nèi)容不是0-4之間的數(shù)字,而是其他數(shù)字,系統(tǒng)將顯示“不可用,是否繼續(xù)<Y/N>”,等待下次正確的輸入。 2)當結(jié)束某項操作時,系統(tǒng)會自動詢問用戶是否繼續(xù)查詢。 3)當輸入文件時,如文件事先未建立,系統(tǒng)將提示file cannot be opened 4)當輸出文件時,如文件事先未建立,系統(tǒng)將自行建立。 5)當選擇“檢查通話時長異?!边x項時,系統(tǒng)會提示如果異常將會產(chǎn)生的結(jié)果,如果有異常,系統(tǒng)將自動輸出異常通話記錄。六、調(diào)試過程中的問題 1)輸出格式的控制問題:選擇選項二中顯示詳細話單是只能顯示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論