




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)報(bào)告( 2012 / 2013 學(xué)年 第 二 學(xué)期)題 目: 電信計(jì)費(fèi)模擬實(shí)現(xiàn) 專(zhuā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ì)電信各類(lèi)客戶(hù)每月帳單統(tǒng)計(jì)、查詢(xún)、備份等管理工作。本課題以該系統(tǒng)要求編寫(xiě)一個(gè)程序,實(shí)現(xiàn)對(duì)電信計(jì)費(fèi)的模擬。通過(guò)此可以,熟練掌握文件讀寫(xiě)、函數(shù)調(diào)用等知識(shí),以及查找、典型算法的設(shè)計(jì)與應(yīng)用。二、 需求分析 功能框架圖:(見(jiàn)圖1)電信計(jì)費(fèi)模擬系統(tǒng)通話(huà)記錄顯示備份通話(huà)記錄檢測(cè)通話(huà)時(shí)長(zhǎng)異常保存話(huà)費(fèi)詳細(xì)話(huà)費(fèi)統(tǒng)計(jì) 圖1(1) 提供可
2、操作的主菜單:輸出個(gè)菜單,用于顯示以從文件中加載的總客戶(hù)信息和若干個(gè)可選的功能選項(xiàng)。根據(jù)客戶(hù)輸入的選項(xiàng)來(lái)運(yùn)行不同的功能,運(yùn)行不同的函數(shù)。(2) 進(jìn)行文本信息的載入:從指定的文件中以鏈表形式加載所需的客戶(hù)信息。這里的文件是在編譯時(shí)就已經(jīng)指定好的、存在的文本,需設(shè)計(jì)者預(yù)先自己建立好。(3) 查找客戶(hù)功能:以客戶(hù)輸入的電話(huà)號(hào)碼進(jìn)行查找對(duì)應(yīng)的客戶(hù)信息并將它們輸出。(4) 對(duì)現(xiàn)有信息的保存:保存內(nèi)存中的最新的記錄輸出到磁盤(pán)文件中。這里默認(rèn)的是保存到原讀取文件中并覆蓋原來(lái)的信息。(5) 將信息備份到另外的一個(gè)文本中:通過(guò)文件格式讀寫(xiě)函數(shù),將源文件信息寫(xiě)到客戶(hù)提供的目標(biāo)文件中。(6) 分類(lèi)合計(jì)功能:客戶(hù)話(huà)費(fèi)
3、小計(jì)、長(zhǎng)話(huà)費(fèi)小計(jì)、通話(huà)費(fèi)合計(jì)、客戶(hù)帳單數(shù)量。三、概要設(shè)計(jì) 1 主要結(jié)構(gòu)體:struct consumer /用戶(hù)信息定義char name110; /客戶(hù)姓氏 char name210; /客戶(hù)名char phone9; /電話(huà)號(hào)碼char YN2; /來(lái)電顯示是否yhzl100;struct feelist /話(huà)單信息定義 char number19; /主叫號(hào)碼char number213; /被叫號(hào)碼char qishi15; /通話(huà)起始時(shí)間char zhongzhi15; /通話(huà)終止時(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)話(huà)費(fèi)double changtu; /長(zhǎng)途話(huà)費(fèi)double zonghe; /總和hfd100;2 主要函數(shù)流程圖: (1)裝載函數(shù):用于實(shí)現(xiàn)用戶(hù)與系統(tǒng)的交互,顯示用戶(hù)菜單、操作提示等,流程圖如圖2所示:開(kāi)始調(diào)用函數(shù)打開(kāi)文件成功讀入數(shù)據(jù)是號(hào)碼比對(duì)相同輸出數(shù)據(jù)文件是否結(jié)束是不同否結(jié)束開(kāi)始讀入號(hào)碼加載菜單讀入選項(xiàng)選項(xiàng)符合條件調(diào)用函數(shù)是否繼續(xù)是是否否結(jié)束圖2 圖3(2)查找函數(shù):利用用戶(hù)輸入的號(hào)碼進(jìn)行順序查找并將找到的客戶(hù)的所有通話(huà)記錄并輸出。見(jiàn)圖3(3)查看賬單:
5、利用計(jì)算函數(shù)和輸入的用戶(hù)號(hào)碼,進(jìn)行順序查找出用戶(hù)的通話(huà)賬單并顯示在屏幕上。見(jiàn)圖4開(kāi)始打開(kāi)文件成功讀入數(shù)據(jù)文件是否結(jié)束計(jì)算時(shí)間判斷時(shí)間輸出話(huà)單結(jié)束是開(kāi)始打開(kāi)文件成功讀入數(shù)據(jù)文件是否結(jié)束號(hào)碼是否相同輸出話(huà)費(fèi)信息結(jié)束否是是否 圖4 圖5(4)檢查錯(cuò)誤話(huà)單:檢查號(hào)碼通話(huà)時(shí)長(zhǎng)是否大于三天,并顯示和保存異常話(huà)單,如圖5(5)保存文件函數(shù):將用戶(hù)所有通話(huà)記錄保存到本文件中。 四、 源程序代碼 #include<stdio.h>#include<stdlib.h>#include<string.h>struct consumer /用戶(hù)信息定義char name110; /
6、姓 char name210; /名char phone9; /電話(huà)號(hào)碼char YN2; /來(lái)電顯示是否yhzl100;struct feelist /話(huà)單信息定義 char number19; /主叫號(hào)碼char number213; /被叫號(hào)碼char qishi15; /通話(huà)起始時(shí)間char zhongzhi15; /通話(huà)終止時(shí)間hd300;struct huafeichar haoma9; /本人號(hào)碼char xingming110; /姓 char xingming210; /名int y; /月租費(fèi)int g; /功能費(fèi)double shinei; /市內(nèi)話(huà)費(fèi)double cha
7、ngtu; /長(zhǎng)途話(huà)費(fèi)double zonghe; /總和hfd100;const int a=25, b=6; /a為月租費(fèi),b為來(lái)電顯示費(fèi)const double c=0.1,d=0.7; /c為市內(nèi)電話(huà)單價(jià),d為長(zhǎng)途電話(huà)單價(jià)void jisuan(); /計(jì)算所有話(huà)費(fèi)信息void menu(); /顯示菜單double shijian(char ,char ); /計(jì)算單次通話(huà)時(shí)長(zhǎng)void jilu(char ); /顯示個(gè)人所有通話(huà)記錄void xiangxi(char ); /顯示個(gè)人話(huà)費(fèi)賬單void savefile(char ); /保存?zhèn)€人所有通話(huà)記錄void check(ch
8、ar ); /檢查號(hào)碼通話(huà)時(shí)長(zhǎng)是否大于三天,并顯示和保存異常話(huà)單int main()int e; /e為所選操作項(xiàng)目序號(hào)char f; /f為記錄是否繼續(xù)操作(Y或N)char p19; /電話(huà)號(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:
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是否繼續(xù)(Y/N)?n");getchar();f=getchar();while(f='Y'|f='y');return 0; void jisuan() /打開(kāi)文件,并生成“費(fèi)用詳單”文件 int i=0,j=0;int n
10、um1; /num1為來(lái)電顯示費(fèi)用 double t,changtuhf=0.0,shineihf=0.0,sum=0.0; /changtuhf長(zhǎng)途話(huà)費(fèi)累加變量,shineihf市內(nèi)話(huà)費(fèi)累加變量,sum話(huà)費(fèi)總和FILE *fp1,*fp2,*fp3; fp1=fopen("D:話(huà)單記錄.txt","r"); fp2=fopen("D:用戶(hù)資料.txt","r"); fp3=fopen("D:費(fèi)用詳單.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) /找出所選號(hào)碼對(duì)應(yīng)的通話(huà)記錄 if(strcmp(yhzli.YN,"Y")=0) /判斷是否開(kāi)通來(lái)電顯示功能 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("請(qǐng)選擇需要的服務(wù):n");printf("*n");printf("1-通話(huà)記錄顯示 n");printf("2-詳細(xì)話(huà)費(fèi) n");printf("3-保存話(huà)費(fèi) n");printf("4-檢測(cè)通話(huà)時(shí)長(zhǎng)異常 n");printf("0-退出 n");printf("*n");void jilu(cha
15、r phone1) /利用用戶(hù)輸入的號(hào)碼進(jìn)行順序查找并將找到的客戶(hù)信息輸出 int i=0; FILE *tt; tt=fopen("D:話(huà)單記錄.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) /將用戶(hù)月租費(fèi)、功能費(fèi)、市話(huà)費(fèi)、長(zhǎng)途費(fèi)和合計(jì)顯示在屏幕上 int i=0;FILE *ss; ss
17、=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(
18、strcmp(hfdi.haoma,phone1)=0) printf(" 用戶(hù)號(hào)碼 用戶(hù)姓名 月租費(fèi) 功能費(fèi) 市話(huà)費(fèi) 長(zhǎng)途費(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",
19、&hfdi.haoma,&hfdi.xingming1,&hfdi.xingming2,&hfdi.y,&hfdi.g,&hfdi.shinei,&hfdi.changtu,&hfdi.zonghe); fclose(ss);void savefile(char phone1) /將用戶(hù)的所有通話(huà)記錄輸出到指定文件中 int i=0; FILE *q,*p; q=fopen("D:話(huà)單記錄.txt","r"); p=fopen("D:話(huà)單保存.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("您的話(huà)單已保存于D盤(pán)"); fclose(q); fclose(p);void check(char phone1) /檢查號(hào)碼通話(huà)時(shí)長(zhǎng)是否大于三天,并顯示和保存異常話(huà)單 int i=0; double t;FILE *p1,*p2
22、;p1=fopen("D:話(huà)單記錄.txt","r"); p2=fopen("D: 話(huà)單異常.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("您的異常通話(huà)時(shí)長(zhǎng)話(huà)單為: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; /返回值:?jiǎn)未瓮ㄔ?huà)時(shí)間五、測(cè)試數(shù)據(jù)及其結(jié)果分析(1) 主菜單:圖6(2) 主要操作圖7
27、(3) 主要功能圖8(4) 輸出的所有話(huà)單記錄文件圖9(5) 輸出賬單文件圖10(6) 退出系統(tǒng)輸入0或當(dāng)出現(xiàn)“是否繼續(xù)<Y/N>”時(shí)輸入N圖11結(jié)果分析:1)在輸入菜單選項(xiàng)時(shí)如果輸入的內(nèi)容不是0-4之間的數(shù)字,而是其他數(shù)字,系統(tǒng)將顯示“不可用,是否繼續(xù)<Y/N>”,等待下次正確的輸入。 2)當(dāng)結(jié)束某項(xiàng)操作時(shí),系統(tǒng)會(huì)自動(dòng)詢(xún)問(wèn)用戶(hù)是否繼續(xù)查詢(xún)。 3)當(dāng)輸入文件時(shí),如文件事先未建立,系統(tǒng)將提示file cannot be opened 4)當(dāng)輸出文件時(shí),如文件事先未建立,系統(tǒng)將自行建立。 5)當(dāng)選擇“檢查通話(huà)時(shí)長(zhǎng)異常”選項(xiàng)時(shí),系統(tǒng)會(huì)提示如果異常將會(huì)產(chǎn)生的結(jié)果,如果有異常,系統(tǒng)將自動(dòng)輸出異常通話(huà)記錄。六、調(diào)試過(guò)程中的問(wèn)題 1)輸出格式的控制問(wèn)題:選擇選項(xiàng)二中顯示詳細(xì)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 今天陜西省高考語(yǔ)文作文題
- 生態(tài)保護(hù)與生態(tài)農(nóng)業(yè)推廣考核試卷
- 十八項(xiàng)護(hù)理核心制度
- 湖北省武漢市2023~2024學(xué)年高一數(shù)學(xué)下學(xué)期5月聯(lián)考試題含答案
- 陜西省咸陽(yáng)市高新一中2024?2025學(xué)年高一下學(xué)期第五次質(zhì)量檢測(cè)(3月) 數(shù)學(xué)試卷(含解析)
- 2025年濟(jì)南歷下區(qū)八年級(jí)第二學(xué)期數(shù)學(xué)期中考試試題(含答案)
- 江蘇省無(wú)錫市港下中學(xué)2025年初三下期中數(shù)學(xué)試題含解析
- 西安交通大學(xué)城市學(xué)院《語(yǔ)言學(xué)概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省上饒市民校考試聯(lián)盟婺源紫陽(yáng)中學(xué)2025年高三第四次聯(lián)考生物試題含解析
- 上海市格致初級(jí)中學(xué)2025年高三考前模擬英語(yǔ)試題含解析
- FANUC發(fā)那科機(jī)器人常規(guī)點(diǎn)檢保養(yǎng)
- 醫(yī)藥有限公司公司獎(jiǎng)懲制度
- 微電子學(xué)概論全套課件
- 實(shí)驗(yàn)室氣瓶使用記錄
- DB37T 2974-2017 工貿(mào)企業(yè)安全生產(chǎn)風(fēng)險(xiǎn)分級(jí)管控體系細(xì)則
- DB13(J)∕T 8054-2019 市政基礎(chǔ)設(shè)施工程施工質(zhì)量驗(yàn)收通用標(biāo)準(zhǔn)
- 混雜纖維增強(qiáng)的復(fù)合材料介紹、特點(diǎn)和應(yīng)用
- 星巴克哈佛商學(xué)院案例
- 工程項(xiàng)目?jī)?nèi)部控制流程圖表
- 強(qiáng)夯試夯報(bào)告(共12頁(yè))
- 骨優(yōu)導(dǎo)介紹PPT
評(píng)論
0/150
提交評(píng)論