電信計費系統(tǒng)客戶帳單管理電信賬單_第1頁
電信計費系統(tǒng)客戶帳單管理電信賬單_第2頁
電信計費系統(tǒng)客戶帳單管理電信賬單_第3頁
電信計費系統(tǒng)客戶帳單管理電信賬單_第4頁
電信計費系統(tǒng)客戶帳單管理電信賬單_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、電信計費系統(tǒng)客戶帳單管理】電信賬單程序設(shè)計報告(xx / xx學(xué)年 第 二 學(xué)期)題 目:專學(xué)生班級指導(dǎo)指導(dǎo)日電信計費系統(tǒng)客戶帳單管理 業(yè) 姓 名 學(xué) 號 教 師 單 位 計算 機軟件教學(xué)中心 期xx年05月29日電信計費系統(tǒng)客戶帳單管理一、 課題內(nèi)容和要求客戶帳單管理是電信計費系統(tǒng)必備的重要功能模塊, 主要負責(zé)對 電信各類客戶每月帳單的增加、修改、刪除、查詢、備份等管理工作。本課題以中國電信企業(yè)客戶帳單管理模塊原型參照, 要求基于單鏈表 結(jié)構(gòu)對文件存儲的客戶帳單數(shù)據(jù)進行排序、查找、 計算、 顯示等造作。通過此可以,熟練掌握單鏈表結(jié)構(gòu)、文件讀寫、函數(shù)調(diào)用等知識,以 及查找、排序典型算法的設(shè)計與

2、應(yīng)用。二、需求分析要能提供以下幾個基本功能:(1) 用戶文件與話單文件由程序設(shè)計人員預(yù)先從鍵盤上錄入, 用 戶資料文件中的數(shù)據(jù)記錄不得少于30條,話單文件中的數(shù)據(jù)記錄不 得少于200條,且必須有跨月份、跨年份的通話記錄話單。(2)首先從硬盤讀入用戶資料和話單記錄(3) 對話單進行計費處理, 輸出費用詳單到指定的文件。 格式如 下:電話號碼 用戶姓名 月租費 功能費 市內(nèi)電話費用 長途電話費 用 合計83470000 Zhang Qiang 25.00 6.00 xxxxx xxxxx xxx83470001。 。(4)異常話單提示。 有的話單可能是錯誤的, 找出這些話單, 不參 加計費,另存為

3、一個文件??赡艿某鲥e話單有:一個號碼的通話時長大于三天。一個號碼在一個時間存在兩條以上的記錄功能框架圖如圖1所示(1) 提供可操作的主菜單: 輸出個菜單, 用于顯示以從文件中加 載的總客戶信息和若干個可選的功能選項。 根據(jù)客戶輸入的選項來運 行不同的功能,運行不同的函數(shù)。(2) 顯示所有用戶的功能: 根據(jù)選項可將文本里的用戶信息在屏 幕上顯示出來。 (3)顯示所有賬單功能:可將文本里的通話賬單在 屏幕上顯示出來。 (4)添加用戶功能:可在屏幕上進行直接操作, 將用戶信息添加到記錄里。 (5)添加賬單功能:操作同上,可將新 的通話記錄添加到記錄里。(6) 按用戶民查找功能: 輸入記錄里的用戶民,

4、 可以查詢與之相 關(guān)的通話賬單記錄。(7) 按電話號碼查找功能: 輸入記錄里的已有電話號碼, 可以查 找相應(yīng)的通話賬單記錄。8)輸出花費功能:在操控臺和文本中,直接輸出所有的花費詳三、概要設(shè)計1、主要函數(shù)流程圖如圖2所示:圖2:主程序圖圖3:操作菜單系統(tǒng)圖4:顯示所有信息菜單圖5:插入數(shù)據(jù)菜單圖6:計算話費函數(shù)圖7::判斷話費正誤函數(shù)1、顧客類(Customer):#include#include#include /控制輸出格式class Customer /定義一個顧客類protected: char Name20; /用戶名char Number15; /用戶電話號碼char CID; /

5、是否來電顯示public: Customer(char* = ,char*= ,char cid= ); /定義構(gòu)造函數(shù)Customer(); /定義析構(gòu)函數(shù)Customer(const Customer & obj); /定義拷貝構(gòu)造函數(shù)char* GetName(); /獲得用戶名字符型指針函數(shù)char*GetNumber(); /獲得用戶號字符型指針函數(shù)char GetCID(); /看 用戶是否有來電顯示friend istream & operator (istream & in , Customer &cus);/友元重載輸入friend ostream & operator;Cu

6、stomer:Customer(char *na, char *num,char cid) strcpy( Name , na ); strcpy( Number , num ); CID=cid; Customer:Customer() Customer:Customer( const Customer & obj ) /義 strcpy( Name, obj.Name ); strcpy( Number,CID=obj.CID; char* Customer:GetName() return Name; char* Customer:GetNumber() return Number; c

7、har Customer:GetCID() return CID; istream & operator (istream & in,Customer & cus) incus.Name; /輸入用戶名incus.Number; / incus.CID; /來電業(yè)務(wù)信息return in; /友元重載ostream & operator2、話單類(Bill):構(gòu)造函數(shù)的定obj.Number );輸入用戶號碼#include #include #include #include class Bill protected: char Dialing15; char Dialed15; charS

8、tartTime15; char EndTime15; public: Bill(char *dialing= ,char*dialed= ,char *stime= ,char *etime= );/定義構(gòu)造函數(shù)Bill(); Bill( const Bill & obj); /帳單的拷貝構(gòu)造函數(shù)char* GetDialing();/獲得主叫號碼char* GetDialed(); /獲得被叫號碼char* GetStart(); /獲得起始時間char* GetEnd(); /獲得結(jié)束時間int GetDate(); /獲得日期int GetTime(); /獲得 通話時長friend

9、int mon_day(int year,int month); /記錄不同月份的天數(shù)friend istream & operator (istream & in ,Bill & bill); /友元重載輸入friend ostream & operatorBill:Bill(char *dialing,char *dialed,char *stime,char*etime) strcpy( Dialing , dialing ); strcpy( Dialed , dialed );strcpy( StartTime , stime );strcpy( EndTime , etime );

10、Bill:Bill(const Bill & obj)strcpy( Dialing , obj.Dialing );strcpy( Dialed , obj.Dialed );strcpy( StartTime , obj.StartTime );strcpy( EndTime , obj.EndTime );Bill:Bill()char* Bill:GetDialing()return Dialing;char* Bill:GetDialed()return Dialed;char* Bill:GetStart()return StartTime;inbill.StartTime;cha

11、r* Bill:GetEnd()return EndTime;istream & operator (istream & in,Bill & bill)inbill.Dialing;inbill.Dialed;inbill.EndTime;return out;return in;ostream & operatoroutoutoutoutoutoutint Bill:GetDate()int Dat6;double date=0;for(int i=0;iDati=StartTimei-48; /文本文件讀入時只能以字符型的形 式,計算是轉(zhuǎn) 化成整形date+=Dati*pow(10,5-i

12、);return (int)date;int Bill:GetTime()return Estimate(StartTime,EndTime);int mon_day(int year,int month) /記錄不同月份的天數(shù)int day12; /d數(shù)組12個成員為12個月份day0=31; /給成員一一賦值day8=30;if( year%4=0 & year%100!=0 | year%400 = 0 ) /否是閏年day1=29;elseday1=28;day2=31;day3=30;day4=31;day5=30;day6=31;day7=31;判斷是day9=31;day10=3

13、0;day11=31;return daymonth-1; /返回y年m月有多少天int Estimate(char *m,char *n) /判斷時間正誤函數(shù)int a14,b14; /a記錄開始時間,b記錄結(jié)束時間for(int i=0;iai=mi-48;min1=a10*10+a11; /開始時間的分bi=ni-48;int y1,mon1,d1,h1,min1,s1; /開始時間的年月日時分秒int y2,mon2,d2,h2,min2,s2; /結(jié)束時間的年月日時分秒int x,y; /開始、結(jié)束時間的日、時、分統(tǒng)一換算成分鐘,對應(yīng)著x、yy1=a0*1000+a1*100+a2*

14、10+a3; /開始時間的年份mon1=a4*10+a5; /開始時間的月份d1=a6*10+a7; /開始時間的日期h1=a8*10+a9; /開始時間的時s1=a12*10+a13; /開始時間的秒x=d1*24*60+h1*60+min1;y2=b0*1000+b1*100+b2*10+b3; /mon2=b4*10+b5; /結(jié)束時間的月份d2=b6*10+b7; /結(jié)束時間的日期h2=b8*10+b9; /結(jié)束時間的時min2=b10*10+b11; /結(jié)束時間的分s2=b12*10+b13; /結(jié)束時間的秒y=d2*24*60+h2*60+min2;if( mon112 |mon1

15、12 |mon2h123 |h123 |h159 |min1結(jié)束時間的年份|min259 |min259 |s159 | s2mon_day(y1,mon1)|d2mon_day(y2,mon2)return -1; /如果“月,日,時,分,秒”超出范圍,則返回-1elseif(y1=y2) /判斷同年if(mon1=mon2) /判斷月份if( (y-x0) ) /判斷通話在三天內(nèi)鐘計算的,否則錯誤誤時間大一月if(s1s1) /結(jié)束秒數(shù)大于開始秒數(shù),就是正確return 1; else coutelse /不同年的情況if(y2-y1=1&mon1=12&mon2=1) /不同年只能是去年

16、的12月,當(dāng)年的1月結(jié)束if(s1return y-x+1+31*24*60;elsereturn y-x+31*24*60;elsecoutreturn -1;四、源程序代碼.#includeCustomer.hvoid AddCusInfo(); /添加用戶信息const int Max=2000; /char ShowMainMeun(); /char ShowSonMenu(); /void ShowCustomer(); /void ShowBill(); /最大數(shù)組長度 顯示主菜單 顯示子菜單 顯示所有客戶信息 顯示所有帳單信息#includeBill.h#include#incl

17、udedouble PrepaidFee=25.0,Cid=6.0,Local=0.1,Toll=0.7;/全局變量:月租,來電顯示費用市內(nèi)電話單價和長途電話單價定義void AddBilInfo(); /添加帳單信息void SearchCusInfo(); /按照客戶查找?guī)涡畔oid SearchNumInfo(); /按照號碼查找?guī)涡畔oid Calculate(Customer *cus,Bill *bill ,int m,int n);/void ShowAll(); /輸出所有帳單信息void ShowWrongMess(Bill *bill,int n);/輸出錯誤帳單的

18、信息bool Compare(int m,int *p,int n); /如果m與數(shù)組pn的任 何一個數(shù)都不相等,那么就返回falseint Judge(Bill *bill,int m,Bill bil,int n); /判斷bil帳void AddBilInfo(); /添加帳單信息單是否會發(fā)生沖coutchar ShowMainMeun()coutcoutcoutcoutcoutcoutcoutcoutcoutcoutcoutcoutcoutcout合計coutcoutchar choice;coutcinchoice; /用戶輸入操作選項return choice; /返回操作選項ch

19、ar ShowSonMenu()coutcoutcoutcoutcoutcoutcoutchar choice;cinchoice; /用戶輸入操作選項return choice; /返回操作選項void ShowCustomer()coutCustomer CusMax;Bill billMax;ifstream inf1(用戶信息.txt);int count1=0;while (!inf1.eof()inf2billcount2;count2+;inf1Cuscount1;coutcount1+;ifstream inf2(話單信息.txt);int count2 =0;while (!

20、inf2.eof()ShowWrongMess(bill,count2);inf1.close();inf2.close();char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)elseint count1=0;coutvoid ShowBill()Customer CusMax;Bill billMax;ifstream inf1(用戶信息.txt);|while (!inf1.eof()count2+;inf1Cuscount1;cou

21、nt1+;ifstream inf2(話單信息.txt);int count2 =0;while (!inf2.eof()inf2billcount2;coutShowWrongMess(bill,count2);inf1.close();inf2.close();char point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)elsecoutvoid ShowAll()Customer CusMax;Bill billMax;ifstream inf

22、1(用戶信息.txt);int count1=0;while(!inf1.eof() /錄入顧客信息到Customer類的數(shù)組cust中inf1.close(); /關(guān)閉文件inf1Cuscount1;count1+; /有m-1個顧客int count2=0;ifstream inf2(話單信息.txt);while(!inf2.eof() /錄入賬單記錄到Bill類的數(shù)組bill中inf2billcount2;count2+; /有n個賬單記錄Calculate(Cus,bill,count1,count2);void AddCusInfo()Customer CusMax;int num

23、;coutcinnum;coutfor( int n=0;ncinCusn; /輸入添加的用戶名inf2.close(); /關(guān)閉文件Bill billMax;ofstream outf;outf.open(用戶信息.txt,ios:app); /用app方式打開文本,能直接在文本尾加入信息for(n=0;noutfcoutoutf.close();void AddBilInfo()int num;coutcinnum;coutcoutfor( int n=0;ncinbilln;ofstream outf;outf.open(話單信息.txt,ios:app); /用app方式打開文本, 能

24、直接在文本尾加入信息for(n=0;noutfcoutoutf.close();Bill billMax;void SearchCusInfo()char Name20;coutcinName;Customer CusMax;ifstream inf1(用戶信息.txt);int count1=0;while (!inf1.eof() /錄入顧客信息到Customer類數(shù)組Cus中inf1Cuscount1;count1+; /記錄總共有(count1-1)個顧客 ifstream inf2(話單信息.txt); int count2 =0; while (!inf2.eof() inf2bi

25、llcount2; count2+; /總共有count2條話單 inf1.close();inf2.close(); Customer SaveCus1; BillSaveBillMax; /保存該用戶的話單信息int i=0,j=0,k=0; coutcoutvoid SearchNumInfo()Customer CusMax;ifstream inf1(用戶信息.txt);int count1=0;while (!inf1.eof()inf1Cuscount1;count1+; /有count1-1個用戶Bill billMax;ifstream inf2(話單信息.txt);int

26、count2 =0;while (!inf2.eof()inf2billcount2;count2+; /有count2條話單記錄inf1.close();inf2.close();char Number15;cout cinNumber;Bill SaveBillMax;int i=0,j=0,k=0;coutbool p=true;for(i=0;iif(strcmp(billi.GetDialing(),Number)=0)coutj=false;SaveBillk=billi;k+;if(j)coutCustomer SaveCus1;for(i=0;iif(strcmp(Cusi.G

27、etNumber(),Number)=0)SaveCus0=Cusi;coutchar point;while(point=ShowSonMenu()!=0)if(point=1)Calculate(SaveCus,SaveBill,2,count2);else if(point=2)ShowWrongMess(bill,count2);elsevoid Calculate (Customer *cus,Bill *bill,int m,int n)cout ofstream outa(所有信息.txt); ofstream outw(錯誤賬單.txt); for(int i=0;iint a

28、Max=0; /int數(shù)組, 用于記錄已計算過的月份if(cusi.GetCID()=Y) /判斷用戶是否有功能費Cid=6;elseCid=0;for(int j=0;jif( strcmp( cusi.GetNumber()0 ) /找出custi客戶的所有帳單double local=0,toll=0,sum=0; /及總電話費billj.GetDialing() ) =一個月的市話費、長途費if(Compare(billj.GetDate(),a,n ) /判斷在記錄an中是否存在billj.getdate()記錄,若存在, 則跳過這條賬單信息continue;elsefor(int

29、k=j;kif(billj.GetDate()=billk.GetDate()&( strcmp(cusi.GetNumber(),billk.GetDialing() = 0 ) ) /碼都相同,則計算這個若billk的月份與主叫電話號local += billk.GetTime()*Local;月的電話費if(billk.GetTime()=0&Judge(bill,n,billk,k)=1)if( strlen( billk.GetDialed() )8 ) /按照市話來看,長度大于8的都算是長途電話toll += billk.GetTime()*Toll;else aj=billj.G

30、etDate();outa存到an中elseoutwsum=PrepaidFee+Cid+toll+local;/文本輸出outa outaoutaoutaoutaouta.close();outw.close();void ShowWrongMess(Bill *bill,int n)bool a=true;for(int i=0;iif(billi.GetTime()=-1|Judge(bill,n,billi,i)=-1)或者不符合判斷函數(shù)的條件,則為錯誤賬單cout a=false;/把billj/如果時間不符if(m=pi)if(a)coutbool Compare(int m,in

31、t *p,int n)for(int i=0;ireturn true;elsecontinue;return false;int Judge(Bill *bill,int m,Bill bil,int n) /判斷bi的時間是否和其他賬單沖突,若沖突,則返回-1for(int i=0;ielseif(i!=n)if(strcmp( bil.GetDialed(),billi.GetDialing() )=0)if(strcmp(bil.GetStart(),billi.GetStart()=1)終止時間是否沖突if(strcmp(bil.GetStart(),billi.GetEnd()=1

32、) return 1;return -1;else if(strcmp(bil.GetStart(),billi.GetStart()=-1)終止時間是否沖突elseif(strcmp(billi.GetStart(),bil.GetEnd()=1)return 1;elsereturn -1;return -1;else continue;return 1;主函數(shù)代碼:#includeSourceFile.h#include#includecout/int main()cout cout cout cout cout cout coutcoutcoutcout*coutcoutcoutcou

33、tcoutcoutcoutcout*I!Sleep(3000); /延時system(cls); /清屏int choice;while(choice=ShowMainMeun()!=0)switch (choice)case 1 :ShowCustomer();peak;case 2 :ShowBill();peak;case 3 :AddCusInfo();peak;case 4 :AddBilInfo();peak;case 5 :SearchCusInfo();peak;case 6 :SearchNumInfo();圖12 peak; case 7 :ShowAll(); peak; default:

溫馨提示

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

評論

0/150

提交評論