




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、程序設計報告( 2012 / 2013 學年 第 二 學期)題 目: 電信計費模擬實現 專 業 通信工程 學 生 姓 名 班 級 學 號 指 導 教 師 郭 劍 指 導 單 位 計算機軟件教學中心 日 期 2013年6月27日 電信計費模擬實現一、 課題內容和要求電信計費系統主要負責對電信各類客戶每月帳單統計、查詢、備份等管理工作。本課題以該系統要求編寫一個程序,實現對電信計費的模擬。通過此可以,熟練掌握文件讀寫、函數調用等知識,以及查找、典型算法的設計與應用。二、 需求分析 功能框架圖:(見圖1)電信計費模擬系統通話記錄顯示備份通話記錄檢測通話時長異常保存話費詳細話費統計 圖1(1) 提供可
2、操作的主菜單:輸出個菜單,用于顯示以從文件中加載的總客戶信息和若干個可選的功能選項。根據客戶輸入的選項來運行不同的功能,運行不同的函數。(2) 進行文本信息的載入:從指定的文件中以鏈表形式加載所需的客戶信息。這里的文件是在編譯時就已經指定好的、存在的文本,需設計者預先自己建立好。(3) 查找客戶功能:以客戶輸入的電話號碼進行查找對應的客戶信息并將它們輸出。(4) 對現有信息的保存:保存內存中的最新的記錄輸出到磁盤文件中。這里默認的是保存到原讀取文件中并覆蓋原來的信息。(5) 將信息備份到另外的一個文本中:通過文件格式讀寫函數,將源文件信息寫到客戶提供的目標文件中。(6) 分類合計功能:客戶話費
3、小計、長話費小計、通話費合計、客戶帳單數量。三、概要設計 1 主要結構體: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; /本人號碼char xingming
4、110; /姓 char xingming210; /名int y; /月租費int g; /功能費double shinei; /市內話費double changtu; /長途話費double zonghe; /總和hfd100;2 主要函數流程圖: (1)裝載函數:用于實現用戶與系統的交互,顯示用戶菜單、操作提示等,流程圖如圖2所示:開始調用函數打開文件成功讀入數據是號碼比對相同輸出數據文件是否結束是不同否結束開始讀入號碼加載菜單讀入選項選項符合條件調用函數是否繼續是是否否結束圖2 圖3(2)查找函數:利用用戶輸入的號碼進行順序查找并將找到的客戶的所有通話記錄并輸出。見圖3(3)查看賬單:
5、利用計算函數和輸入的用戶號碼,進行順序查找出用戶的通話賬單并顯示在屏幕上。見圖4開始打開文件成功讀入數據文件是否結束計算時間判斷時間輸出話單結束是開始打開文件成功讀入數據文件是否結束號碼是否相同輸出話費信息結束否是是否 圖4 圖5(4)檢查錯誤話單:檢查號碼通話時長是否大于三天,并顯示和保存異常話單,如圖5(5)保存文件函數:將用戶所有通話記錄保存到本文件中。 四、 源程序代碼 #include<stdio.h>#include<stdlib.h>#include<string.h>struct consumer /用戶信息定義char name110; /
6、姓 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; /市內話費double cha
7、ngtu; /長途話費double zonghe; /總和hfd100;const int a=25, b=6; /a為月租費,b為來電顯示費const double c=0.1,d=0.7; /c為市內電話單價,d為長途電話單價void jisuan(); /計算所有話費信息void menu(); /顯示菜單double shijian(char ,char ); /計算單次通話時長void jilu(char ); /顯示個人所有通話記錄void xiangxi(char ); /顯示個人話費賬單void savefile(char ); /保存個人所有通話記錄void check(ch
8、ar ); /檢查號碼通話時長是否大于三天,并顯示和保存異常話單int main()int e; /e為所選操作項目序號char f; /f為記錄是否繼續操作(Y或N)char p19; /電話號碼字符串 jisuan();printf(" 歡迎進入電信計費模擬系統n");printf("*n");printf("請輸入您的號碼:n");gets(p1);menu(); doprintf("請選擇您要進行的操作:n");scanf("%d",&e); switch(e) case 1:
9、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是否繼續(Y/N)?n");getchar();f=getchar();while(f='Y'|f='y');return 0; void jisuan() /打開文件,并生成“費用詳單”文件 int i=0,j=0;int n
10、um1; /num1為來電顯示費用 double t,changtuhf=0.0,shineihf=0.0,sum=0.0; /changtuhf長途話費累加變量,shineihf市內話費累加變量,sum話費總和FILE *fp1,*fp2,*fp3; fp1=fopen("D:話單記錄.txt","r"); fp2=fopen("D:用戶資料.txt","r"); fp3=fopen("D:費用詳單.txt","w"); if(!fp1) printf("file
11、 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;!feof(fp1);j+
12、) 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)t+1; else t=(
13、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; fclose(fp1);
14、 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");void jilu(cha
15、r 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(strcmp(hdi.numbe
16、r1,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;FILE *ss; ss
17、=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(!feof(ss) if(
18、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%lf%lf",
19、&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","w&q
20、uot;); 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,"%-10s%-10s%-2
21、0s%-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;FILE *p1,*p2
22、;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,&a
23、mp;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,hdi.qishi,hdi.z
24、hongzhi);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+(jt2-kt2)*10+(
25、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*527040;else year=tyear*525600;kmonth=(kt6-4
26、8)*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; /返回值:單次通話時間五、測試數據及其結果分析(1) 主菜單:圖6(2) 主要操作圖7
27、(3) 主要功能圖8(4) 輸出的所有話單記錄文件圖9(5) 輸出賬單文件圖10(6) 退出系統輸入0或當出現“是否繼續<Y/N>”時輸入N圖11結果分析:1)在輸入菜單選項時如果輸入的內容不是0-4之間的數字,而是其他數字,系統將顯示“不可用,是否繼續<Y/N>”,等待下次正確的輸入。 2)當結束某項操作時,系統會自動詢問用戶是否繼續查詢。 3)當輸入文件時,如文件事先未建立,系統將提示file cannot be opened 4)當輸出文件時,如文件事先未建立,系統將自行建立。 5)當選擇“檢查通話時長異常”選項時,系統會提示如果異常將會產生的結果,如果有異常,系統將自動輸出異常通話記錄。六、調試過程中的問題 1)輸出格式的控制問題:選擇選項二中顯示詳細
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獸醫藥物相互作用研究試題及答案
- 創新教育與學生的職業競爭力提升
- 計算機二級考試綜合試題及答案
- 寵物殯葬業的綠色環保理念試題及答案
- 企業品牌傳播與媒體關系的建立和維系
- 班組安全培訓試題及答案 全面
- 公司項目部管理人員安全培訓考試題及參考答案AB卷
- 公司項目部管理人員安全培訓考試題及答案真題匯編
- 安全管理人員安全培訓考試題完整答案可打印
- 中的排版原則與技巧
- 建筑設計各專業產值分配比例表
- 《黛玉葬花》葬花情節的文化解讀
- 2025年國家鐵路局市場監測評價中心招聘應屆畢業生2人歷年高頻重點提升(共500題)附帶答案詳解
- 介紹家鄉山西太原
- 2025屆湖北省孝感市八校教學聯盟高三第二次模擬考試數學試卷含解析
- 土木工程CAD-終結性考核-國開(SC)-參考資料
- 放射性皮膚損傷的護理-中華護理學會團體標準
- 糖尿病-運動課件
- 科技大篷車進校園方案
- 【課件】往復式壓縮機課件
- 2024-2030年中國鈮行業市場發展趨勢與前景展望戰略分析報告
評論
0/150
提交評論