




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、目錄一 設計要求 2二 設計作用與目的 2三 運行環境及工具軟件 23.1 硬件環境 33.2 軟件環境 3四 系統設計 34.1 系統總體設計 34.2 程序設計組成框圖、流程圖 34.3 各模塊具體設計 54.3.1 主函數模塊設計 54.3.2 創建函數模塊 64.3.3 查看函數模塊 84.3.4 開戶函數模塊 84.3.5 銷戶函數模塊 104.3.6修改帳目函數模塊 114.3.7 查詢函數模塊 12五 源程序設計 14六 實驗調試結果 26七 設計中的問題及解決方法 29八 設計心得 29九 參考文獻 30帳目管理系統的設計與實現一、 設計要求此處的賬目管理是整個銀行業務中的一小
2、部分,主要包括借款、還款、存款業務。同時,通過帳目管理系統的設計,運用計算機軟件軟件基礎所學的知識,提高編程興趣與編程思路,合理的運用資料,實現理論與實際相結合。(1) 為了管理賬戶,設置兩個單鏈表:一是賬戶基本信息,包括賬戶的賬號、姓名、身份證號、建賬日期等信息;另一個是賬戶余額,包括賬戶的賬號和當前余額兩項數據。(2) 本程序能夠執行賬戶的開戶、借款、還款、存款、清戶(刪除)等操作,而且能夠實現對賬戶信息的查詢統計功能、按借款戶的余額從大到小排序功能、按存款戶的余額從大到小排序功能和按開戶日期從小到大排序功能等。(3) 開新戶時,用戶只輸入姓名、身份證號、金額、日期四個數據,由程序自動生成
3、帳號并通知用戶,并將相關數據同時插入上述兩個鏈表中;(4) 余額為負數表示借款額,為正數表示存款額。(5) 能夠按賬號查詢賬戶的基本信息和當前余額,能夠列出最大借款額賬戶和最大存款額賬戶的基本信息和當前余額。(6) 程序能夠統計當前帳戶個數,當前借款總額、當前還款總額以及借款總額與存款總額的差額。(7)收集資料,全面分析課題,分解問題,形成總體編程思路;(8)深入分析各個小問題,編寫各部分程序模塊;(9)對于設計中用到的關鍵函數,要聯系問題進行具體介紹;(10)上機調試,確保程序能正確運行,完成設計報告,并進行答辯。二、設計作用與目的 (1)通過設計,強化C語言的運用及C語句的準確掌握; (2
4、)通過設計,加強我們對計算機軟件軟件基礎知識的理解和運用; (3)通過設計,掌握設計軟件一般方法,了解軟件設計的一般思路;(4)通過設計,鍛煉撰寫報告的水平。三、運行環境及工具軟件3.1 硬件環境設備:采用Intel 應用服務器運行時內存要求:1MB;安裝所需硬盤:2MB;3.2 軟件環境操作系統:Windows 2000/XPista工具軟件:MyTC四、系統設計4.1 系統總體設計此銀行帳目管理系統包括六個模塊,分別為創建一個空賬目、顯示賬目信息、添加新賬目、刪除賬目信息、修改賬目信息、查找所需賬目信息。其中添加新賬目包含姓名、身份證號、金額、日期四個數據的輸入。修改賬目信息還包含了借款、
5、存款、取款功能。查詢功能包含查詢所存有的賬戶個數、查詢最大存款戶、查詢最大借款戶。功能模塊圖如圖1所示。 銀行帳目管理系統刪除賬目顯示賬目信息創建空賬目查找賬目修改賬目添加賬目姓名最大存款戶賬戶個數取款存款借款最大借款戶日期金額身份證號碼圖1銀行帳目管理系統模塊圖4.2 程序設計組成框圖、流程圖開始功能選擇進行顯示賬目進行修改賬目進行刪除賬目進行添加賬目初始界面創建新號顯示賬目添加賬目刪除賬目修改賬目查詢賬目結束退出系統進行創建新號進行查詢賬目NNNNNNNYYYYYYY圖2 主程序流程圖,帳目管理系統的設計與實現操作流程 4.3 各模塊具體設計本程序按要求設計一個賬目管理系統,編譯器為:my
6、TC。程序源文件名為zhangmu.c。程序入口為main()函數:先由fopen()函數創建一個存儲賬目信息的文檔:fopen("D:account.txt","r+");由于進行的“r+“操作,首先在D盤創建一個account.txt文件。4.3.1 主函數模塊設計主函數用到函數為:fopen(打開文件) 相關函數 open,fclose表頭文件 #include<stdio.h>定義函數 FILE * fopen(const char * path,const char * mode);函數說明 參數path字符串包含欲打開的文件路徑及
7、文件名,參數mode字符串則代表著流形態。mode有下列幾種形態字符串:r 打開只讀文件,該文件必須存在。r+ 打開可讀寫的文件,該文件必須存在。w 打開只寫文件,若文件存在則文件長度清為0,即該文件內容會消失。若文件不存在則建立該文件。w+ 打開可讀寫文件,若文件存在則文件長度清為零,即該文件內容會消失。若文件不存在則建立該文件。a 以附加的方式打開只寫文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾,即文件原先的內容會被保留。a+ 以附加方式打開可讀寫的文件。若文件不存在,則會建立該文件,如果文件存在,寫入的數據會被加到文件尾后,即文件原先的內容會被保留。由于Do
8、s窗口顯示有限,所以限制賬目數量為15個。本程序包含6大功能模塊:0- 創建一個空賬目;1- 顯示賬目信息;2- 添加新賬目;3- 刪除賬目信息;4- 修改賬目信息;5- 查找所需賬目信息;6- 推出程序;為了管理賬戶,設置兩個單鏈表:一是賬戶基本信息,包括賬戶的賬號、姓名、身份證號、建賬日期等信息;另一個是賬戶余額,包括賬戶的賬號和當前余額兩項數據。本程序只創建了一個單鏈表:struct bankdata /*定義一個結構體*/int num; /*賬戶的賬號*/char name20; /*姓名*/char person_num19; /*身份證號*/float balance; /*金額
9、*/int establishtime; /*日期*/所以在對賬戶的余額的操作功能上有教大的欠缺,日后定將進一步完善此項功能。4.3.2 創建函數模塊0- create(FILE *ptr)/*創建具有結構體的空文檔*/struct bankdata data=-1,"NONAME","NONUM",0,0;對結構體進行初始化操作,即創建一個空賬目。for(num=0;num<=15;num+) 通過for循環限制賬目數量。本功能模塊用到的函數有:fseek(移動文件流的讀寫位置) 相關函數 rewind,ftell,fgetpos,fsetpos
10、,lseek表頭文件 #include<stdio.h>定義函數 int fseek(FILE * stream,long offset,int whence);函數說明 fseek()用來移動文件流的讀寫位置。參數stream為已打開的文件指針,參數offset為根據參數whence來移動讀寫位置的位移數。參數 whence為下列其中一種:SEEK_SET從距文件開頭offset位移量為新的讀寫位置。SEEK_CUR 以目前的讀寫位置往后增加offset個位移量。SEEK_END將讀寫位置指向文件尾后再增加offset個位移量。當whence值為SEEK_CUR 或SEEK_EN
11、D時,參數offset允許負值的出現。下列是較特別的使用方式:1) 欲將讀寫位置移動到文件開頭時:fseek(FILE *stream,0,SEEK_SET);2) 欲將讀寫位置移動到文件尾時:fseek(FILE *stream,0,0SEEK_END);返回值 當調用成功時則返回0,若有錯誤則返回-1,errno會存放錯誤代碼。附加說明 fseek()不像lseek()會返回讀寫位置,因此必須使用ftell()來取得目前讀寫的位置。fwrite(將數據寫至文件流) 相關函數 fopen,fread,fseek,fscanf表頭文件 #include<stdio.h>定義函數 s
12、ize_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);函數說明 fwrite()用來將數據寫入文件流中。參數stream為已打開的文件指針,參數ptr 指向欲寫入的數據地址,總共寫入的字符數以參數size*nmemb來決定。Fwrite()會返回實際寫入的nmemb數目。返回值 返回實際寫入的nmemb數目。4.3.3 查看函數模塊1- view(FILE *ptr)/*查看文檔內容*/本功能模塊用到的函數有:fseek (FILE * stream,long offset,int whence);fread
13、(從文件流讀取數據) 相關函數 fopen,fwrite,fseek,fscanf表頭文件 #include<stdio.h>定義函數 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);函數說明 fread()用來從文件流中讀取數據。參數stream為已打開的文件指針,參數ptr 指向欲存放讀取進來的數據空間,讀取的字符數以參數size*nmemb來決定。Fread()會返回實際讀取到的nmemb數目,如果此值比參數nmemb 來得小,則代表可能讀到了文件尾或有錯誤發生,這時必須用feof()或ferro
14、r()來決定發生什么情況。返回值 返回實際讀取到的nmemb數目。4.3.4 開戶函數模塊2- add(FILE *ptr)/*添加一個帳目*/添加賬目,輸入用戶操作,程序設計要求:開新戶時,用戶只輸入姓名、身份證號、金額、日期四個數據,由程序自動生成帳號并通知用戶,并將相關數據同時插入上述兩個鏈表中;本程序賬號由人工手動輸入。其余項目也有人工輸入。fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); Scanf();fseek(ptr,data.num*
15、sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr);實現對數據的輸入,及存儲。通過函數嵌套操作實現對用戶身份證號碼的格式化操作。getperson_num(char *person_num) /*函數功能:讀取用戶身份證號碼(15位 或者 18位 )*/新賬號姓 名身份證號是否正確日 期金 額完 成開 戶NY圖3 開戶功能模塊流程圖4.3.5 銷戶函數模塊 3-delete(FILE *ptr)/*刪除一個帳目*/通過本功能實現銷戶操作,銷戶條件為用戶姓名。for(num=0;nu
16、m<=15;num+) fseek(ptr,num*(sizeof(struct bankdata)+sizeof(int),SEEK_SET); fread(name2,20,1,ptr); if(strcmp(name1,name2)=0) num1num=num;對輸入用戶進行查找,并與賬目內容進行比較。通過對num2的值進行判斷,實現對不同賬號下的同一用戶進行操作,對未找到用戶的提示。4.3.6修改帳目函數模塊4-modify(FILE *ptr)/*修改帳目*/程序設計要求:本程序能夠執行賬戶的借款、還款、存款操作。由于單鏈表在功能實現上的限制,只能通過本功能對三項操作實現同一
17、數據的修改操作。輸入余額為負數表示借款額,為正數表示存款額。本功能對程序的綜合能力要求較高,時間有限,待以后進一步完善。功能選擇進行還款進行存款修改賬目查戶數還款存款結束進行借款NNNYYY姓名圖4 修改賬目功能模塊流程圖4.3.7 查詢函數模塊5- research(FILE *ptr)/*對所需賬目內容進行查詢*/模塊功能流圖如下功能選擇顯示最大存款顯示最大借款查詢賬目賬戶個數最大存款最大借款結束顯示賬戶數NNNYYYY退出N圖5 查詢模功能模塊流程圖打開界面,進入查詢操作: 圖6 查詢系統界面查詢功能包含三項子功能: "0-countn"/*查詢所存有的賬戶個數*/
18、"1-The max. depositor accountn"/*查詢最大存款戶*/ "2-The max. borrowing accountn"/*查詢最大借款戶*/ "3-quiten"/*退出查詢*/能夠實現對賬戶信息的查詢統計功能、按借款戶的余額從大到小排序功能、按存款戶的余額從大到小排序功能和按開戶日期從小到大排序功能等。能夠按賬號查詢賬戶的基本信息和當前余額,能夠列出最大借款額賬戶和最大存款額賬戶的基本信息和當前余額。當前借款總額、當前還款總額以及借款總額與存款總額的差額。本程序通過函數嵌套操作,應該可以很好的實現大部分
19、功能,但是,由于指針參數傳遞過程中,程序調用總出現問題,個人對指針的學習掌握還不夠熟練,所以通過在同一模塊下的判斷語句進行選項操作1-操作和2-操作都是用選擇排序法,分別找出最大存款戶和最大借款戶。在冒泡排序、選擇排序、快速排序、插入排序等當中選擇排序最易理解,運行速度也比較快。所以用選擇排序法進行查找操做。五、源程序設計#include<stdio.h>#include<string.h>struct bankdata /*定義一個結構體*/int num;/*賬戶的賬號*/char name20;/*姓名*/char person_num19;/*身份證號*/flo
20、at balance;/*金額*/int establishtime;/*日期*/create(FILE *ptr)/*創建具有結構體的空文檔*/ int num; struct bankdata data=-1,"NONAME","NONUM",0,0; for(num=0;num<=15;num+) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr); printf("Blank account
21、s have been created completen"); view(FILE *ptr)/*查看文檔內容*/ int num; struct bankdata data; clrscr();/*功 能: 清除文本模式窗口 清屏的意思 就是把之前顯示出的文字字符去掉*/ printf("the accountnum, the account person_name, the person_num, the blankdata, the estableshtimen"); for(num=0;num<15;num+) fseek(ptr,num*size
22、of(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); printf("%-10d%-16s%-20s%-10f %-15dn",data.num,,data.person_num,data.balance,data.establishtime); add(FILE *ptr)/*添加一個帳目*/ int num; struct bankdata data; printf("Enter new account number(0-15):n&quo
23、t;); scanf("%d",&num); fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); if(data.num!=-1) printf("Account %d already contains informaton.n",num); else printf("Enter name.n"); scanf("%s",); printf(&quo
24、t;please put into the person_num: "); getperson_num(data.person_num); printf("Enter balance.n"); scanf("%f",&data.balance); printf("Enter establishtime.n"); scanf("%d",&data.establishtime); data.num=num; fseek(ptr,data.num*sizeof(struct bankdata),
25、SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr); getperson_num(char *person_num) /*函數功能:讀取用戶身份證號碼(15位 或者 18位 )*/ doint i,mark;char ch;for(i=0;i+) /*輸入有效性判斷(只能是數字)*/if(ch=getchar()!='n') if(ch<='9'&&ch>='0') person_numi=ch; else break; else break; pers
26、on_numi='0' if(strlen(person_num)!=15&&strlen(person_num)!=18)printf("ID number can only be 15, or 18-bit,the person_num should be a num!n"); elsebreak; while(1);/*循環以保證讀入數據有效*/delete(FILE *ptr)/*刪除一個帳目*/ int num,num2; int num116=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
27、,-1; char name120; char name220; struct bankdata blankdata=-1,"NONAME","NONUM",0,0; struct bankdata data; printf("Enter delete name.n"); scanf("%s",name1); for(num=0;num<=15;num+) fseek(ptr,num*(sizeof(struct bankdata)+sizeof(int),SEEK_SET); fread(name2,20,
28、1,ptr); if(strcmp(name1,name2)=0) num1num=num; for(num=0,num2=0;num<=15;num+) if(num1num!=-1) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); printf("%-10d%-16s%-20s%-15f%-15dn",data.num,,data.person_num,data.balance,data.establi
29、shtime); num2+; if(num2>1) printf("Which account do you want to delete?n"); scanf("%d",&num); fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fwrite(&blankdata,sizeof(struct bankdata),1,ptr); if(num2=1) fseek(ptr,data.num*sizeof(struct bankdata),SEEK_SET); fwrite(&
30、;blankdata,sizeof(struct bankdata),1,ptr); if(num2=0) printf("There is no your name.n");modify(FILE *ptr)/*修改帳目*/ int num,num2; int num316=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1; float num1; char name120; char name220; struct bankdata data; printf("Enter modify name.n");
31、 scanf("%s",name1); for(num=0;num<=15;num+) fseek(ptr,num*(sizeof(struct bankdata)+sizeof(int),SEEK_SET); fread(name2,20,1,ptr); if(strcmp(name1,name2)=0) num3num=num; for(num=0,num2=0;num<=15;num+) if(num3num!=-1) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,size
32、of(struct bankdata),1,ptr); printf("%-10d%-16s%-10f%-10dn",data.num,,data.balance,data.establishtime); num2+; printf("%dn",num2); if(num2>1) printf("Which account do you want to modify?n"); scanf("%d",&num); fseek(ptr,num*sizeof(struct bankdata
33、),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); printf("Enter charge(+) or payment(-)n"); scanf("%f",&num1); data.balance+=num1; fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr); if(num2=1) printf("Enter charge
34、(+) or payment(-)n"); scanf("%f",&num1); data.balance+=num1; fseek(ptr,data.num*sizeof(struct bankdata),SEEK_SET); fwrite(&data,sizeof(struct bankdata),1,ptr); if(num2=0) printf("There is no your name.n"); /*/research(FILE *ptr)/*查詢*/ FILE *refptr; int num,num2; int
35、count=0; int res_choice=0; int arraydata15; int pData15; int i,j,x=0; int n=0; int iTemp; int iPos; struct bankdata data; clrscr(); while(res_choice!=3) printf("nEnter your res_choicen"/*菜單*/ "0-countn"/*賬戶個數*/ "1-The max. depositor accountn"/*最大存款戶*/ "2-The max. b
36、orrowing accountn"/*最大借款戶*/ "3-quiten"/*退出查詢*/ ); scanf("%d",&res_choice); if(res_choice=0) for(num=0;num<=15;num+) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); if(data.num!=-1) count+; printf(">>");
37、printf("The account number is %dn",count); else if(res_choice=1) for(num=0;num<15;num+) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&data,sizeof(struct bankdata),1,ptr); if(data.balance>0) arraydatan=data.balance; n+; /*編程過程測試用printf("arraydata0=");printf(&qu
38、ot;%10dn",arraydata0);printf("arraydata1=");printf("%10dn",arraydatan-1);*/ for(i=0;i<n;i+) printf("%10dn",arraydatai); for(x=0;x<n;x+) iTemp=arraydata0; iPos=x; for(j=x+1;j<n;j+) if(arraydataj>iTemp) iTemp=arraydataj;iPos=j; arraydataiPos=arraydata0; a
39、rraydata0=iTemp; if(arraydata0>0) printf("The max. depositor account is"); printf("%10dn",arraydata0); elseprintf("There is no the max. depositor account"); else if(res_choice=2) for(num=0;num<15;num+) fseek(ptr,num*sizeof(struct bankdata),SEEK_SET); fread(&da
40、ta,sizeof(struct bankdata),1,ptr); if(data.balance<0) arraydatan=data.balance; n+; elsebreak; for(x=0;x<n;x+) iTemp=arraydata0; iPos=x; for(j=x+1;j<n;j+) if(arraydataj<iTemp) iTemp=arraydataj;iPos=j; arraydataiPos=arraydata0; arraydata0=iTemp; if(arraydatax-1<0) printf(">>&
41、quot;); printf("The max. borrowing account is"); printf("%10dn",arraydatax-1); elseprintf("There is no the max. borrowing account"); /*while循環結束標記*/*/main()FILE *fptr; int choice=0; if(fptr=fopen("D:account.txt","r+")=NULL) printf("File couldn
42、39;t be opened.n"); else while(choice!=6) printf("nEnter your choicen"/*菜單*/ "0-create accountn" "1-view accountn" "2-add accountn" "3-delete accountn" "4-modify accountn" "5-research accountn" "6-quitn" ); scanf("%d",&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《2025標準技術咨詢服務合同范本》
- 2024年PCB復配化學品項目資金籌措計劃書代可行性研究報告
- 2025辦公租賃合同范本
- 2025購銷合同范本下載(含詳細條款)
- 2025建筑設備租賃合同
- 2025授權合同協議書范本
- 2025外墻涂料工程勞務承包合同-confidential
- 2025建筑工程施工合同范本GF
- 2025全球版權合同范本
- 《性健康教育咨詢技巧》課件
- 宗親聯誼修譜會活動方案及流程
- 2025屆江蘇省南京市六區初三第二學期期中考試英語試題試卷含答案
- 加裝電梯投標方案(技術方案)
- 影視后期調色-04達芬奇一級校色
- 2024版工程建設監理合同(電力工程)
- 高空廣告字維修合同
- 《綠豆芽的生長》課件
- 石油化工設備維護檢修規程設備完好標準SHS
- 知道智慧網課《科技倫理》章節測試答案
- 2024年云南省職業院校技能大賽(中職組)植物嫁接賽項考試題庫(含答案)
- 工程居間合同范本電子版
評論
0/150
提交評論