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

下載本文檔

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

文檔簡介

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

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

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

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

5、利用計(jì)算函數(shù)和輸入的用戶號(hào)碼,進(jìn)行順序查找出用戶的通話賬單并顯示在屏幕上。見圖4開始打開文件成功讀入數(shù)據(jù)文件是否結(jié)束計(jì)算時(shí)間判斷時(shí)間輸出話單結(jié)束是開始打開文件成功讀入數(shù)據(jù)文件是否結(jié)束號(hào)碼是否相同輸出話費(fèi)信息結(jié)束否是是否 圖4 圖5(4)檢查錯(cuò)誤話單:檢查號(hào)碼通話時(shí)長是否大于三天,并顯示和保存異常話單,如圖5(5)保存文件函數(shù):將用戶所有通話記錄保存到本文件中。 四、 源程序代碼 #include#include#includestruct consumer /用戶信息定義char name110; /姓 char name210; /名char phone9; /電話號(hào)碼char yn2; /

6、來電顯示是否yhzl100;struct feelist /話單信息定義 char number19; /主叫號(hào)碼char number213; /被叫號(hào)碼char qishi15; /通話起始時(shí)間char zhongzhi15; /通話終止時(shí)間hd300;struct huafeichar haoma9; /本人號(hào)碼char xingming110; /姓 char xingming210; /名int y; /月租費(fèi)int g; /功能費(fèi)double shinei; /市內(nèi)話費(fèi)double changtu; /長途話費(fèi)double zonghe; /總和hfd100;const int a

7、=25, b=6; /a為月租費(fèi),b為來電顯示費(fèi)const double c=0.1,d=0.7; /c為市內(nèi)電話單價(jià),d為長途電話單價(jià)void jisuan(); /計(jì)算所有話費(fèi)信息void menu(); /顯示菜單double shijian(char ,char ); /計(jì)算單次通話時(shí)長void jilu(char ); /顯示個(gè)人所有通話記錄void xiangxi(char ); /顯示個(gè)人話費(fèi)賬單void savefile(char ); /保存?zhèn)€人所有通話記錄void check(char ); /檢查號(hào)碼通話時(shí)長是否大于三天,并顯示和保存異常話單int main()int e

8、; /e為所選操作項(xiàng)目序號(hào)char f; /f為記錄是否繼續(xù)操作(y或n)char p19; /電話號(hào)碼字符串 jisuan();printf( 歡迎進(jìn)入電信計(jì)費(fèi)模擬系統(tǒng)n);printf(*n);printf(請(qǐng)輸入您的號(hào)碼:n);gets(p1);menu(); doprintf(請(qǐng)選擇您要進(jìn)行的操作:n);scanf(%d,&e); switch(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

9、);default: printf(n%d不可用,e);printf(n是否繼續(xù)(y/n)?n);getchar();f=getchar();while(f=y|f=y);return 0; void jisuan() /打開文件,并生成“費(fèi)用詳單”文件 int i=0,j=0;int num1; /num1為來電顯示費(fèi)用 double t,changtuhf=0.0,shineihf=0.0,sum=0.0; /changtuhf長途話費(fèi)累加變量,shineihf市內(nèi)話費(fèi)累加變量,sum話費(fèi)總和file *fp1,*fp2,*fp3; fp1=fopen(d:話單記錄.txt,r); fp2

10、=fopen(d:用戶資料.txt,r); fp3=fopen(d:費(fèi)用詳單.txt,w); if(!fp1) printf(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;!feo

11、f(fp1);j+) fscanf(fp1,%s%s%s%s,&hdj.number1,&hdj.number2,&hdj.qishi,&hdj.zhongzhi);if(strcmp(yhzli.phone,hdj.number1)=0) /找出所選號(hào)碼對(duì)應(yīng)的通話記錄 if(strcmp(yhzli.yn,y)=0) /判斷是否開通來電顯示功能 num1=b; else num1=0;t=shijian(hdj.qishi,hdj.zhongzhi); if(t-(int)t)0) t=(int)t+1; else t=(int)t; if(hdj.number20=0) changtuhf

12、+=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; fclose(fp1); fclose(fp2); fclose(fp3);void menu() printf(*n);printf(請(qǐng)

13、選擇需要的服務(wù):n);printf(*n);printf(1-通話記錄顯示 n);printf(2-詳細(xì)話費(fèi) n);printf(3-保存話費(fèi) n);printf(4-檢測(cè)通話時(shí)長異常 n);printf(0-退出 n);printf(*n);void jilu(char phone1) /利用用戶輸入的號(hào)碼進(jìn)行順序查找并將找到的客戶信息輸出 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

14、.number2,&hdi.qishi,&hdi.zhongzhi); while(!feof(tt) if(strcmp(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) /將用戶月租費(fèi)、功能費(fèi)、市話費(fèi)、長途

15、費(fèi)和合計(jì)顯示在屏幕上 int i=0;file *ss; ss=fopen(d:費(fèi)用詳單.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(!feof(ss) if(strcmp(hfdi.haoma,phone1)=0) printf( 用戶號(hào)碼 用戶姓名 月租

16、費(fèi) 功能費(fèi) 市話費(fèi) 長途費(fèi) 合計(jì) 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%lf%lf,&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changt

17、u,&hfdi.zonghe); fclose(ss);void savefile(char phone1) /將用戶的所有通話記錄輸出到指定文件中 int i=0; file *q,*p; q=fopen(d:話單記錄.txt,r); p=fopen(d:話單保存.txt,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.zhon

18、gzhi); while(!feof(q) if(strcmp(hdi.number1,phone1)=0)fprintf(p,%-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) /檢查號(hào)碼通話時(shí)長是否大于三天,并顯示和保存異常話單

19、 int i=0; double t;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,&hdi.qishi,&hdi.zhongzhi); while(!feof(p1) t=shijian(hdi.qishi,hdi.zhongzhi);i

20、f(t4320) fprintf(p2,%-10s%-10s%-20s%-10sn,hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);if(strcmp(phone1,hdi.number1)=0)printf(您的異常通話時(shí)長話單為:n%-10s%-10s%-20s%-10sn,hdi.number1,hdi.number2,hdi.qishi,hdi.zhongzhi);else fscanf(p1,%s%s%s%s,&hdi.number1,&hdi.number2,&hdi.qishi,&hdi.zhongzhi); i+; fclose(

21、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+(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

22、-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*527040;else year=tyear*525600;kmonth=(kt6-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; brea

23、k;case 1: month=kmonth; break;default: break;t1=year+month*1440+tday*1440+thour*60+tminute+ts/60.0;t=t1;return t; /返回值:單次通話時(shí)間五、測(cè)試數(shù)據(jù)及其結(jié)果分析(1) 主菜單:圖6(2) 主要操作圖7(3) 主要功能圖8(4) 輸出的所有話單記錄文件圖9(5) 輸出賬單文件圖10(6) 退出系統(tǒng)輸入0或當(dāng)出現(xiàn)“是否繼續(xù)”時(shí)輸入n圖11結(jié)果分析:1)在輸入菜單選項(xiàng)時(shí)如果輸入的內(nèi)容不是0-4之間的數(shù)字,而是其他數(shù)字,系統(tǒng)將顯示“不可用,是否繼續(xù)”,等待下次正確的輸入。 2)當(dāng)結(jié)束某項(xiàng)操作時(shí),系統(tǒng)會(huì)自動(dòng)詢問用戶是否繼續(xù)查詢。 3)當(dāng)輸入文件時(shí),如文件事先未建立,系統(tǒng)將提示file cannot be opened 4)當(dāng)輸出文件時(shí),如文件事先未建立,系統(tǒng)將自行建立。 5)當(dāng)選擇“檢查通話時(shí)長異常”選項(xiàng)時(shí),系統(tǒng)會(huì)提示如果異常將會(huì)產(chǎn)生的結(jié)果,如果有異常,系統(tǒng)將自動(dòng)輸出異常通話記錄。六、調(diào)試過程中的問題 1)輸出格式的控制問題:選擇選項(xiàng)二中顯示詳細(xì)話單是只能顯示用戶名,而不能顯示姓,輸出的號(hào)碼也不對(duì)應(yīng)。原因是%s無法讀入帶有空格的字符串,解決方法是將用戶姓和名分別存在兩個(gè)字符串中分別讀取和輸出。2)在話單記錄末尾添加一條記錄時(shí),原有記錄減少一條,刪除添加的

溫馨提示

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

評(píng)論

0/150

提交評(píng)論