




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上程序設(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ì)話
2、費(fèi)統(tǒng)計(jì) 圖1(1) 提供可操作的主菜單:輸出個(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
3、) 分類合計(jì)功能:客戶話費(fèi)小計(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)碼
4、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;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)行順序查找并將找到的客戶的所有通話記錄并輸
5、出。見圖3(3)查看賬單:利用計(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<stdio.h>#include<stdlib.h>#include<string.h>struct consumer /用戶信息定義ch
6、ar 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 xingming110; /姓 char xingming210; /名int y; /月租費(fèi)int g; /功能費(fèi)double shinei; /市
7、內(nèi)話費(fèi)double changtu; /長途話費(fèi)double zonghe; /總和hfd100;const int a=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)€人所有通話記錄
8、void check(char ); /檢查號(hào)碼通話時(shí)長是否大于三天,并顯示和保存異常話單int main()int e; /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); 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() /打開文件,并生成“費(fèi)用詳單”文件 int
10、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=fopen("D:用戶資料.txt","r"); fp3=fopen("D:費(fèi)用詳單.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) /找出所選號(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)
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("請(qǐng)選擇需要的服務(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");
15、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.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) /將用戶月租費(fèi)、功能費(fèi)、市話費(fèi)、長途費(fèi)和合計(jì)顯示在屏幕上 int i=0
17、;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(
18、!feof(ss) if(strcmp(hfdi.haoma,phone1)=0) printf(" 用戶號(hào)碼 用戶姓名 月租費(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
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) /檢查號(hào)碼通話時(shí)長是否大于三天,并顯示和保存異常話單 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("您的異常通話時(shí)長話單為: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í)間五、測(cè)試數(shù)據(jù)及其結(jié)果分析(1) 主菜單:圖6(2) 主要操作圖
27、7(3) 主要功能圖8(4) 輸出的所有話單記錄文件圖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ù)查詢。 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ì)話單是只能顯示
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- C語言試題解析的奧秘試題及答案
- 財(cái)務(wù)成本管理理論知識(shí)要點(diǎn)試題及答案
- 接店合同協(xié)議書模板
- 2025年計(jì)算機(jī)二級(jí)JAVA考試真題回顧及常見問題試題及答案
- 感知測(cè)試中的模型與方法探討試題及答案
- 邏輯判斷題型及試題及答案
- 情侶吵架和好合同協(xié)議書
- 現(xiàn)代漢語考試的題目類型解析試題及答案
- 代養(yǎng)合同終止協(xié)議書范本
- 計(jì)算機(jī)一級(jí)Msoffice復(fù)習(xí)心態(tài)調(diào)整的重要性及試題與答案
- 樂山市市級(jí)事業(yè)單位選調(diào)工作人員考試真題2024
- 山東省濟(jì)南市2025屆高三三模生物試卷(含答案)
- 2025年法律基礎(chǔ)知識(shí)考試試題及答案
- 火力發(fā)電廠安全培訓(xùn)課件
- 第八章-實(shí)數(shù)(單元復(fù)習(xí)課件)七年級(jí)數(shù)學(xué)下冊(cè)同步高效課堂(人教版2024)
- DZ∕T 0211-2020 礦產(chǎn)地質(zhì)勘查規(guī)范 重晶石、毒重石、螢石、硼(正式版)
- 汽機(jī)發(fā)電量計(jì)算
- GB∕T 1457-2022 夾層結(jié)構(gòu)滾筒剝離強(qiáng)度試驗(yàn)方法
- 康復(fù)治療技術(shù)(康復(fù)養(yǎng)老服務(wù))專業(yè)群建設(shè)方案
- 第五章結(jié)型場(chǎng)效應(yīng)晶體管
- 麗聲北極星自然拼讀繪本第一級(jí)Uncle Vic‘s Wagon 課件
評(píng)論
0/150
提交評(píng)論