




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、個(gè)人財(cái)政支出管理歐陽(yáng)光明(2021.03.07)付欣 05計(jì)算機(jī)四班指導(dǎo)老師:梁新元一、問(wèn)題描述及分析1二、實(shí)驗(yàn)程序設(shè)計(jì)思想及功能描述13、主要函數(shù)模塊的設(shè)計(jì)思想和具體實(shí)現(xiàn)2三、實(shí)驗(yàn)程序測(cè)試41、程序開始執(zhí)行時(shí)系統(tǒng)的所顯示的頁(yè)面:42、選擇退出系統(tǒng):53、選擇登陸,并且輸入的帳號(hào)和密碼都正確:54、用戶輸入的帳號(hào)不正確:55、用戶輸入的帳號(hào)正確,密碼不正確:6四、實(shí)驗(yàn)程序自我評(píng)價(jià)7五、課程設(shè)計(jì)創(chuàng)新7六、課程設(shè)計(jì)總結(jié) 7七、參考書目:7八、實(shí)驗(yàn)程序源代碼8一、問(wèn)題描述及分析編寫一個(gè)個(gè)人財(cái)政支出管理系統(tǒng),主要解決的問(wèn)題是作為一個(gè) 系統(tǒng)而言,它所要面對(duì)不只是某一個(gè)人而言,而是要面對(duì)很多的用 戶。那么
2、想要解決這一問(wèn)題,就必須要求這個(gè)系統(tǒng)能夠存儲(chǔ)許多用戶的基本信息和記錄。同時(shí)也要求系統(tǒng)能夠?qū)Σ煌挠脩舻纳矸葸M(jìn) 行查找和驗(yàn)證。在驗(yàn)證通過(guò)之后,在對(duì)其進(jìn)行用戶所要求的操作。 作為一個(gè)財(cái)政支出系統(tǒng),那么就要求對(duì)于用戶關(guān)于金錢的每一 項(xiàng)操作都要有相應(yīng)的記錄,同時(shí)并允許用戶對(duì)于每一條整體的記錄 進(jìn)行操作,例如可以根據(jù)時(shí)間來(lái)查找某一確定日期是否進(jìn)行了收入 或者支出的操作,也可以根據(jù)特定的需要來(lái)刪除某一條整體的記 錄。但不允許對(duì)每條記錄的單項(xiàng)數(shù)據(jù)進(jìn)行更改,因?yàn)椴还苁鞘杖脒€ 是支出,所涉及的金額都是固定的,時(shí)間也是固定的,所以系統(tǒng)不 允許用戶對(duì)其進(jìn)行操作。除此之外,還必須有足夠大的空間來(lái)存儲(chǔ) 新的記錄。所以此
3、程序就是基于這個(gè)思想而編寫出來(lái)的,基本滿足 了用戶對(duì)于一個(gè)財(cái)政支出管理系統(tǒng)所要求的相關(guān)功能。二、實(shí)驗(yàn)程序設(shè)計(jì)思想及功能描述 根據(jù)前面對(duì)于編寫一個(gè)個(gè)人財(cái)政支出管理系統(tǒng)的程序的問(wèn)題描 述和分析,確定了此程序的基本思想和相關(guān)功能。1、基本思想首先定義一個(gè)結(jié)構(gòu)體數(shù)組,這個(gè)數(shù)組的功能便是用來(lái)所有用戶的所 有信息。它的成員為每個(gè)用戶的帳號(hào)(account)、密碼(code)、 姓名(name)、記錄(record recmax),以及記錄的條數(shù)(rec_len)。其 中記錄(record recmax)這個(gè)成員本身也是一個(gè)結(jié)構(gòu)體數(shù)組。它包 含了用戶所有的記錄(record),并且根據(jù)用戶的操作,記錄這個(gè)成
4、員 變量也會(huì)有所跟改,例如如果擁護(hù)增加了一條記錄,那么這一條記 錄就會(huì)存儲(chǔ)在此成員變量中。除了這個(gè)成員變量是動(dòng)態(tài)變化之外, 記錄的條數(shù)(rec_len )也會(huì)根據(jù)用戶的操作進(jìn)行變化,例如如果用 戶增加了一條記錄,則rec_len就會(huì)自加1,如果用戶刪除了一條記 錄,則rec_len就會(huì)自減1。記錄(record recmax)這個(gè)成員變量 是以后函數(shù)中操作的主要內(nèi)容。除了這兩個(gè)成員變量之外,其它的 成員變量則不會(huì)被改變,系統(tǒng)只允許用戶對(duì)其進(jìn)行訪問(wèn),但不允許 進(jìn)行操作,因?yàn)檫@幾個(gè)成員變量的作用主要是用來(lái)驗(yàn)證用戶的身份 用的,所以不可以更改。其中的密碼(code)甚至只能別系統(tǒng)調(diào) 用,而不能對(duì)用戶
5、進(jìn)行顯示的,也就是說(shuō)密碼(code)對(duì)于用戶是 不可預(yù)知的,這樣做的目的是為了系統(tǒng)自身的安全性,以免用戶的 信息被其他人看到。這就是這個(gè)結(jié)構(gòu)體數(shù)組的功能和基本成員變量 及各個(gè)成員變量的功能。定義了結(jié)構(gòu)體數(shù)組之后,首先要做的就是要把所有的記錄都存 入這個(gè)結(jié)構(gòu)體數(shù)組中,以方便用戶的操作。所以在 main 函數(shù)中有 系統(tǒng)自行調(diào)用了 old_record 這個(gè)函數(shù)來(lái)存入信息。在此之后進(jìn)行的 操作便是讓用戶選擇所要進(jìn)行的是登陸系統(tǒng)的操作還是退出系統(tǒng)的 操作。如果選擇登陸,則要輸入帳號(hào)和密碼。之后由系統(tǒng)來(lái)檢查帳 號(hào)的存在性和密碼的正確性。如果這兩項(xiàng)都通過(guò)了系統(tǒng)的檢查,那 么用戶便可以進(jìn)行具體記錄的操作了。
6、這便是這個(gè)程序的基本設(shè)計(jì) 思想。2、各個(gè)函數(shù)模塊的功能(1)old_record( ):此函數(shù)由系統(tǒng)自行調(diào)用,作用是將所有用 戶信息存入系統(tǒng)。(2)void save( ): 此函數(shù)的作用是將結(jié)構(gòu)體數(shù)組中的信息寫入 文件存儲(chǔ),由系統(tǒng)調(diào)用。(3)load( ):此函數(shù)的作用是將結(jié)構(gòu)體數(shù)組中寫入文件的信息 讀出,由系統(tǒng)調(diào)用。(4)lookup_accounts( ):此函數(shù)的作用是將用戶輸入的帳 號(hào)與系統(tǒng)中的所有帳號(hào)進(jìn)行對(duì)比,查看系統(tǒng)中是否有此帳號(hào)。( 5 ) check_code( ): 此函數(shù)是作用是在系統(tǒng)查詢到了帳號(hào)之 后,對(duì)用戶輸入的帳號(hào)和密碼進(jìn)行檢驗(yàn),看是否相對(duì)應(yīng)。(6)print_me
7、ssage( ):此函數(shù)的功能是在系統(tǒng)檢查了用戶 輸入的帳號(hào)和密碼之后,如果用戶通過(guò)了系統(tǒng)的檢查,在此顯示用 戶可見的基本信息。(7)find_record( ):此函數(shù)的作用是根據(jù)用戶輸入的日期 進(jìn)行查找操作。(8)insert_record( ):此函數(shù)的功能是在記錄中增加一條新 的記錄,這個(gè)記錄由用戶輸入。(9)del_record( ):此函數(shù)的功能是根據(jù)用戶的輸入的位 置,將相應(yīng)位置的記錄刪除。(10)sum_num( ):此函數(shù)的功能是計(jì)算所有收入和支出的 總和,計(jì)算全部的收入的總合,計(jì)算全部輸出的總合。(11)打印輸出記錄的函數(shù):在本程序中一共有三個(gè)打印輸出 記錄的函數(shù),分別為
8、all_print( )、acc_print( )、pay_print( ) 這三個(gè)函數(shù)。它們的功能依次是打印輸出全部記錄,打印輸出輸入記錄,打印輸出支出記錄。*歐陽(yáng)光明*創(chuàng)編mian( ):在主函數(shù)中,可以根據(jù)用戶的選擇來(lái)操作系統(tǒng) 允許用戶使用的功能,也可以隨時(shí)退出這個(gè)系統(tǒng)。3、主要函數(shù)模塊的設(shè)計(jì)思想和具體實(shí)現(xiàn)void save( )函數(shù)和 load( )函數(shù)。這兩個(gè)函數(shù)的功能是在系統(tǒng)調(diào)用了 old_record( ) 這個(gè)函數(shù)之 后,結(jié)構(gòu)體內(nèi)就有了所有用戶的所有信息。 Save( )函數(shù)的作用是將 所有的信息都存入文件中,便于數(shù)據(jù)的保存和讀取。Load ()函數(shù)的 作用則是把存入的文件中的
9、信息讀出來(lái)。這兩個(gè)函數(shù)所涉及的知識(shí) 點(diǎn)為文件的讀入和寫出。主要是 freadhe 和 fwrite 兩個(gè)函數(shù)的應(yīng)用。 它們的一般調(diào)用形式為:fread(buffer,size,count,fp);fwrite(buffer,size ,count,fp);其中:Buffer:是一個(gè)指針,對(duì)fread來(lái)說(shuō),它是讀入數(shù)據(jù)的存放地 址。對(duì) fwrite 來(lái)說(shuō),是要輸出數(shù)據(jù)的地址。Size:要讀寫的字節(jié)數(shù)。Count :要進(jìn)行讀寫多少個(gè)size字節(jié)的數(shù)據(jù)項(xiàng)。Fp;文件型指針。調(diào)用這兩個(gè)函數(shù)之后,如果調(diào)用成功,則函數(shù)返回值為 count 的值,即輸入或輸出數(shù)據(jù)項(xiàng)的完整個(gè)數(shù)。lookup_accounts
10、( )函數(shù)和 check_code( )函數(shù): 這兩個(gè)函數(shù)的功能主要是用來(lái)核對(duì)用戶的身份。系統(tǒng)先檢驗(yàn)的 是 axxounts 這個(gè)函數(shù)。根據(jù)用戶輸入的帳號(hào)與系統(tǒng)中所有的帳號(hào)進(jìn) 行比較,查找看是否有相同的。如果找到了,則進(jìn)行對(duì)密碼進(jìn)行檢 驗(yàn),看密碼與帳號(hào)是否對(duì)應(yīng)。在檢驗(yàn)帳號(hào)的時(shí)候,如果用戶輸入的 帳號(hào)在系統(tǒng)中不存在,系統(tǒng)則會(huì)給出提示要求用戶從新輸入。但如 果用戶輸入了三次體統(tǒng)都找不到帳號(hào)的時(shí)候,系統(tǒng)則會(huì)強(qiáng)制要求用 戶退出系統(tǒng),此時(shí)則顯示結(jié)束語(yǔ)的歡迎詞。而如果帳號(hào)找到了,但 用戶輸入的密碼與原有密碼不一致,系統(tǒng)也會(huì)給出提示信息要求用 戶再次輸入。同樣的,如果用戶輸入三次體統(tǒng)都檢驗(yàn)到不是正確的 密碼
11、的時(shí)候,系統(tǒng)則會(huì)強(qiáng)制要求用戶退出系統(tǒng),此時(shí)則顯示結(jié)束語(yǔ) 的歡迎詞。在這兩個(gè)函數(shù)中主要用到的知識(shí)點(diǎn)就是對(duì)字符串的相關(guān) 操作。如果帳號(hào)和密碼都通過(guò)檢驗(yàn)之后,此函數(shù)則將返回 struct list_record 類型的數(shù)據(jù)。字符串處理的函數(shù)主要有以下幾個(gè):puts函數(shù):其一般形式為puts(字符數(shù)組)。其作用是將一個(gè)字 符串輸出到終端。Gets 函數(shù):其一般形式為 gets (字符數(shù)組)。其作用是從終端輸 入一個(gè)字符串到字符數(shù)組,并且得到一個(gè)函數(shù)值。該函數(shù)值是字符 數(shù)組的起始地址。Stract函數(shù):其一般形式為strcat(字符數(shù)組1,字符數(shù)組2)。Strcat 是字符串連接的縮寫。其作用是連接兩個(gè)
12、字符數(shù)組中的字符 串,把字符串 2 接到字符串 1 的后面,結(jié)果放在字符數(shù)組 1 中,函 數(shù)調(diào)用后得到一個(gè)函數(shù)值字符數(shù)組 1 的地址。Strcpy函數(shù):其一般形式為strcpy(字符數(shù)組1,字符數(shù)組2)。Strcpy 是字符串復(fù)制的簡(jiǎn)寫。它的作用是將字符串 2 復(fù)制到字符數(shù)組 1 中去。在本程序中。用到的最多的便是此函數(shù)。strcmp函數(shù):其一般形式為strcmp(字符串1,字符串2)。 Strcmp 是字符串比較的縮寫。它的作用是比較字符串 1 和字符串 2,比較的結(jié)果有函數(shù)值帶回。如果字符串 1=字符串 2,則函數(shù)值 為 0;如果字符串 1 大于字符串 2,則函數(shù)值為一個(gè)正整數(shù),否則 則為
13、負(fù)整數(shù)。(3)find_record( )函數(shù): 此函數(shù)的功能是根據(jù)用戶輸入的時(shí)間查找當(dāng)天的記錄。這個(gè)函數(shù)的參數(shù)為一個(gè)指向結(jié)構(gòu)體的指針和一個(gè)字符串。字符串是用語(yǔ)輸 入的日期,指向結(jié)構(gòu)體的指針指向的則是用戶輸入的帳號(hào)的這個(gè)結(jié) 構(gòu)體。如果找到了用戶輸入的日期,則輸出當(dāng)天的所以記錄。如果 找不到,則顯示無(wú)此日的記錄。(4)insert_record( )函數(shù)和 del_record( )函數(shù): 這兩個(gè)函數(shù)的功能是增加新的記錄和刪除用戶指定的記錄。在insert_record( )函數(shù)中,此函數(shù)的參數(shù)是一個(gè)指向 struct list_record 的指針和一個(gè)指向 struct record 的指針
14、還有一個(gè)選擇插入位置的整 形變量。在主函數(shù)中,先定義一個(gè) struct record 的結(jié)構(gòu)體。這個(gè)結(jié) 構(gòu)體的內(nèi)容是由用戶輸入的,也就是用戶所要向 struct list_record 這 個(gè)結(jié)構(gòu)體中輸入的新的記錄的內(nèi)容。然后再在主函數(shù)中定義一個(gè)指 向 struct record 結(jié)構(gòu)體的指針,并指向已經(jīng)輸入記錄的結(jié)構(gòu)體,最 后將此指針作為實(shí)參傳入函數(shù)。由于向函數(shù)中傳如是指針,所以在 函 數(shù) 中記 錄更改之后, 返 回主函 數(shù) 的是更改后的記錄。 在 del_record( )函數(shù)中,有用戶在主函數(shù)中輸入要?jiǎng)h除的記錄的位 置,然后調(diào)用此函數(shù),那么就會(huì)執(zhí)行刪除該記錄的操作。與 insert_re
15、cord 函數(shù)一樣,參數(shù)傳遞的也是指針,所以在函數(shù)中更改 的記錄,返回主函數(shù)后依舊是更改后的記錄。(5)sum_num( )函數(shù):此函數(shù)的功能是用來(lái)計(jì)算用戶所有記錄中的錢數(shù)的總和,以方 便用戶對(duì)于系統(tǒng)的操作,同時(shí)也可以使用戶對(duì)自己的帳戶有更深入 的了解。除此之外,該函數(shù)還能會(huì)對(duì)用戶所有的收入和所有的支出進(jìn)行 求和,使用戶能夠知道自己的所有的收入的總和和所有支出的總 和,這樣也方便了用戶進(jìn)行下一步的操作。(6)打印輸出函數(shù):在此程序中,打印輸出函數(shù)共有三個(gè),分別是輸出全部記錄, 輸出收入記錄和輸出支出記錄。在這里定義三個(gè)輸出函數(shù)是為了方 便用戶能夠更容易的進(jìn)行操作。假設(shè)只有一個(gè)輸出全部記錄的函
16、數(shù),那么如果用戶只想查看收入的記錄或者支出的記錄,此時(shí)用戶 只能自己一條一條的去查看,這樣就會(huì)讓用戶感到不方便。一個(gè)良 好的管理系統(tǒng)的目的就是能盡可能的滿足用戶的所有需要,分工越 是精確越好,所以為了滿足此項(xiàng)要求,在此定義了三個(gè)輸出函數(shù)。(7)main( )函數(shù):在一個(gè)程序中,main()函數(shù)是最為重要的一個(gè)函數(shù),因?yàn)樗?所有程序執(zhí)行的入口。同時(shí)函數(shù)也是以 main( )函數(shù)的結(jié)束作為結(jié)束 的,由此可見 main( )函數(shù)的重要性。在本程序中,所以的功能 模塊函數(shù)都是在 main( )函數(shù)中調(diào)用的,這樣做的目的是為了是 整個(gè)程序的結(jié)構(gòu)簡(jiǎn)單緊湊,同時(shí)也是為了程序的調(diào)試方便。但這樣 也就相對(duì)的增
17、加了 main( )函數(shù)的復(fù)雜性。在本程序中, main ( )函數(shù)中涉及的語(yǔ)法知識(shí)包括循環(huán)的嵌套使用,分之結(jié)構(gòu)的嵌套 使用,指針的應(yīng)用,指向結(jié)構(gòu)體指針的應(yīng)用等許多語(yǔ)法結(jié)構(gòu)。因?yàn)?main( )函數(shù)在本程序中有著至關(guān)重要的作用,所以在 此詳細(xì)說(shuō)明。在程序開始執(zhí)行之后,首先由用戶來(lái)選擇是要登陸系 統(tǒng)還是要推出系統(tǒng)。如果是退出系統(tǒng),那么程序便會(huì)結(jié)束。如果選 擇登陸,那么系統(tǒng)便會(huì)要求用戶輸入帳號(hào)和密碼。系統(tǒng)先會(huì)對(duì)帳號(hào) 進(jìn)行檢查,如果檢查通過(guò)了,則要對(duì)密碼進(jìn)行檢查,如果通過(guò)了, 則會(huì)顯示用戶信息,同時(shí)也允許用戶對(duì)記錄進(jìn)行操作,而所有的操 作都是由用戶自行隨意選擇的,直到用戶選擇退出系統(tǒng)之后,程序 便會(huì)
18、結(jié)束。這是在用戶輸入的帳號(hào)和密碼都通過(guò)檢查的情況。如果 帳號(hào)沒(méi)有通過(guò)檢查,系統(tǒng)便會(huì)要求用戶重新輸入,然后系統(tǒng)再對(duì)其 進(jìn)行檢查,通過(guò)了就繼續(xù),通不過(guò)則還要重新輸入,但用戶輸入帳 號(hào)的次數(shù)最多只有三次。三次之后,系統(tǒng)變會(huì)自行推出。如果帳號(hào) 通過(guò)了檢查,而密碼沒(méi)有通過(guò),那么系統(tǒng)也會(huì)要求用戶重新輸入, 同樣輸入的次數(shù)不會(huì)超過(guò)三次,否則系統(tǒng)便會(huì)自行退出。這便是 main( )函數(shù)的具體設(shè)計(jì)思想和具體的功能的描述。三、實(shí)驗(yàn)程序測(cè)試1、程序開始執(zhí)行時(shí)系統(tǒng)的所顯示的頁(yè)面:2、選擇退出系統(tǒng):3、選擇登陸,并且輸入的帳號(hào)和密碼都正確:4、用戶輸入的帳號(hào)不正確:5、用戶輸入的帳號(hào)正確,密碼不正確:6、用戶進(jìn)行具體操
19、作:四、實(shí)驗(yàn)程序自我評(píng)價(jià)在這個(gè)程序中,我認(rèn)為我已經(jīng)完成了所要求的基本操作,同時(shí) 也增加了相應(yīng)的功能模塊來(lái)讓用戶操作。設(shè)計(jì)的基本原則就是盡可 能的滿足用戶的所有要求,同時(shí)也能盡可能方便的使用戶對(duì)系統(tǒng)進(jìn) 行操作。雖然這個(gè)程序可能還有不足之處,但我對(duì)于這個(gè)程序還是 比較滿意的。五、課程設(shè)計(jì)創(chuàng)新本程序主要模仿是是銀行的 ATM 機(jī)的相關(guān)功能,除此之外, 還增加了允許用戶對(duì)于記錄的一些操作。而不是只允許用戶進(jìn)行查 看,這樣就增加了系統(tǒng)的靈活性。六、課程設(shè)計(jì)總結(jié)本程序在編寫是,主要就是基于用戶的角度去分析該如何設(shè)計(jì) 此程序,和編寫功能模塊的。在編寫程序時(shí),所有的數(shù)據(jù)都是對(duì)結(jié) 構(gòu)體進(jìn)行的操作,在此過(guò)程中,我
20、發(fā)現(xiàn)了自己在對(duì)指針操作的時(shí) 候,尤其是對(duì)指向結(jié)構(gòu)體數(shù)組的指針和指向結(jié)構(gòu)體的指針的操作都 不夠熟練。但在編寫完此程序之后,我感覺自己對(duì)語(yǔ)法的應(yīng)用有了 明顯的提高。七、參考書目:1、C程序設(shè)計(jì)(第三版)譚浩強(qiáng)清華大學(xué)出版社2、數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)譚浩強(qiáng)清華大學(xué)出版社3、程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言版)龍昭華王玉柱重慶大學(xué)出版社八、實(shí)驗(yàn)程序源代碼#include#include#define null 0#define max 20#define ok 1struct recordchar date20;char operate20;int num;struct list_recordchar accoun
21、t20;char code20;char name20;int rec_len;*歐陽(yáng)光明*創(chuàng)編struct record recmax;rmax;/系統(tǒng)原有數(shù)據(jù),用戶不可知int old_record( struct list_record r)int i;for(i=0;i3;i+)ri.rec_len=4;strcpy(r0.account,1001); 賬號(hào)strcpy(r1.account,1002);strcpy(r2.account,1003); strcpy(r0.code,llllll); 密碼 strcpy(r1.code,222222); strcpy(r2.code,3
22、33333);strcpy( ,wang); 姓名strcpy( ,li);strcpy( ,zhang);strcpy(r0.rec0.date,07-01-01); 日期 strcpy(r0.rec1.date,07-02-01); strcpy(r0.rec2.date,07-03-01); strcpy(r0.rec3.date,07-04-01); strcpy(r1.rec0.date,07-01-02); strcpy(r1.rec1.date,07-02-02);*歐陽(yáng)光明*創(chuàng)編*歐陽(yáng)光明*創(chuàng)編strcpy(r1.rec2.date,0
23、7-03-02);strcpy(r1.rec3.date,07-04-02);strcpy(r2.rec0.date,07-01-03);strcpy(r2.rec1.date,07-02-03);strcpy(r2.rec2.date,07-03-03);strcpy(r2.rec3.date,07-04-03);strcpy(r0.rec0.operate,in);strcpy(r0.rec1.operate,out);strcpy(r0.rec2.operate,in);strcpy(r0.rec3.operate,out);strcpy(r1.rec0.operate,out);str
24、cpy(r1.rec1.operate,in);strcpy(r1.rec2.operate,out);strcpy(r1.rec3.operate,in);strcpy(r2.rec0.operate,in);strcpy(r2.rec1.operate,out);strcpy(r2.rec2.operate,in);strcpy(r2.rec3.operate,out);r0.rec0.num=3000;r0.rec1.num=-1500;r0.rec2.num=2500;r0.rec3.num=-1000;r1.rec0.num=-3000;*歐陽(yáng)光明*創(chuàng)編*歐陽(yáng)光明*創(chuàng)編 r1.rec
25、1.num=5000;r1.rec2.num=-1000;r1.rec2.num=2000;r2.rec0.num=1000;r2.rec1.num=-1500;r2.rec2.num=3000;r2.rec2.num=-500;return ok;/將數(shù)據(jù)寫入文件void save( )FILE *fp;int i;if(fp=fopen(wenjian,wb)=null) 只允許寫數(shù)據(jù) printf(can not open the file.n);return;for(i=0;imax;i+)if(fwrite(&ri,sizeof(struct list_record),1,fp)!=
26、1) printf(file write error.n);fclose(fp);/文件讀出void load( )FILE *fp;int i; if(fp=fopen(wenjian,rb)=null)printf(can not open infile.n); return;for(i=0;imax;i+)if(fread(&ri,sizeof(struct list_record),1,fp)!=1)if(feof(fp)/ 文件結(jié)束為 1 ;否則為 0(fclose(fp);Return;/為什么在這加returnfclose(fp);/將用戶輸入的帳號(hào)與系統(tǒng)中原有帳號(hào)比較,查找用戶
27、帳號(hào) int lookup_accounts( struct list_record r,char acc) int i;for(i=0;i3;i+)if(strcmp(ri.account,acc)=0)return ok;printf( 帳號(hào)不存在,請(qǐng)重新輸入! n);return null;/檢查密碼函數(shù)c)struct list_record check_code(struct list_record r,char acc,charint i;struct list_record a;strcpy(a.account,0);strcpy(a.code,0);a.rec_len=0;fo
28、r(i=0;ia.rec_len;i+)strcpy(a.reci.date,0);strcpy(a.reci.operate,0);a.reci.num=0;for(i=0;iname);printf(” 帳號(hào):sn,(*p).account);/根據(jù)用戶輸入的日期,查找記錄int find_record( struct list_record *p,char d)int i;for(i=0;i(*p).rec_len;i+)if(strcmp(*p).reci.date,d)=0)printf(date operate moneyn);printf(%s,(*p).reci.date);p
29、rintf(%s,(*p).reci.operate);printf(%d n,(*p).reci.num);return ok;if(i=(*p).rec_len)printf(the date is not exit!n); return null;/插入函數(shù),根據(jù)用戶輸入的信息,增加記錄int insert_record( struct list_record *p,struct record *p1,int lop) int i;if(lop(*p).rec_len+1)printf(the position is wrong.n);return 0;elsefor(i=(*p).re
30、c_len;ilop-1;i-) strcpy(*p).reci.date,(*p).reci-1.date);strcpy(*p).reci.operate,(*p).reci-1.operate); (*p).reci.num=(*p).reci-1.num;strcpy(p-reci.date,p1-date); strcpy(*p).reci.operate,(*p1).operate);*歐陽(yáng)光明*創(chuàng)編2021.03.07(*p).reci.num=(*p1).num;(*p).rec_len+;return ok;/ 刪除記錄函數(shù)int del_record( struct lis
31、t_record *p,int lop2)int i;if(lop2(*p).rec_len)printf(the position is wrong.n);return null;elsefor(i=lop2-1;i(*p).rec_len-1;i+)strcpy(*p).reci.date,(*p).reci+1.date);strcpy(*p).reci.operate,(*p).reci+1.operate);(*p).reci.num=(*p).reci+1.num; (*p).rec_len-;*歐陽(yáng)光明*創(chuàng)編return ok;/輸出全部記錄函數(shù)void all_print( s
32、truct list_record *p) int i;printf(date operate numn); for(i=0;i(*p).rec_len;i+) printf(%s ,(*p).reci.date); printf(%s ,(*p).reci.operate); printf(%d ,(*p).reci.num);printf(n);/計(jì)算總的錢數(shù)int sum_num( struct list_record *p)int i;int sum=0;int sum_in=0;int sum_out=0;for(i=0;i0)sum_in+=(*p).reci.num;if(*p)
33、.reci.num0) sum_out+=(*p).reci.num;printf(總金額為:dn,sum);printf(總收入為:dn,sum_in);printf(總支出為:dn,sum_out);return ok;/輸出收入記錄int acc_print( struct list_record *p)int i;int sum_acc=0;printf(date operate numn);for(i=0;i0)sum_acc+=(*p).reci.num;printf(%s ,(*p).reci.date);printf(%s ,(*p).reci.operate);*歐陽(yáng)光明*創(chuàng)
34、編*歐陽(yáng)光明*創(chuàng)編printf(%d ,(*p).reci.num); printf(n);printf(總收入金額為:dn,sum_acc);return ok;if(sum_acc=0)printf(there is no account.n); return null;/輸出支出記錄int pay_print( struct list_record *p)int i;int sum_pay=0;printf(date operate numn);for(i=0;irec_len;i+)if(*p).reci.num0)sum_pay+=(*p).reci.num;printf(%s ,(
35、*p).reci.date);printf(%s ,(*p).reci.operate);printf(%d ,(*p).reci.num);printf(n);printf( 總的支出為: %dn,sum_pay); return ok;if(sum_pay=0)printf(there is no payout.n);return null;void main( )int j=0,n=0;/n 記錄密碼輸入次數(shù)int x,k,lop1,lop2;/k 為命令數(shù)字選項(xiàng)char data120;char accou20,cod20;/accou 賬號(hào) cod 密碼struct record *p0;內(nèi)容是由用戶輸入的 struct record a;struc
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三方駕駛培訓(xùn)合作協(xié)議
- 長(zhǎng)沙報(bào)關(guān)委托協(xié)議
- 汽車租賃合同范本大全
- 鋼筋運(yùn)輸應(yīng)急預(yù)案協(xié)議
- 《Linux操作系統(tǒng)》課件-9.Linux軟件包管理
- 產(chǎn)品銷售周期趨勢(shì)報(bào)告表
- 基于物聯(lián)網(wǎng)技術(shù)的智能農(nóng)產(chǎn)品倉(cāng)儲(chǔ)解決方案
- 電力行業(yè)清潔能源與智能電網(wǎng)方案
- 商砼站建設(shè)項(xiàng)目可行性研究報(bào)告
- 環(huán)境保護(hù)行業(yè)報(bào)告
- 中國(guó)國(guó)際航空內(nèi)蒙古有限公司2025屆空中乘務(wù)員航空安全員高校畢業(yè)生校園招聘筆試參考題庫(kù)附帶答案詳解
- 2025江蘇省安全員考試題庫(kù)附答案
- 4.2 明確概念的方法 課件高中政治統(tǒng)編版選擇性必修三邏輯與思維
- 2024年國(guó)網(wǎng)陜西省電力有限公司招聘筆試真題
- 2025年共同成立子公司的戰(zhàn)略合作協(xié)議書
- 2025年中國(guó)硫酸慶大霉素片行業(yè)市場(chǎng)深度分析及行業(yè)發(fā)展趨勢(shì)報(bào)告
- 腰椎ODI評(píng)分完整版
- 安徽省教育科學(xué)研究項(xiàng)目課題申請(qǐng)書【模板】
- 參考文獻(xiàn)的標(biāo)注規(guī)范
- 幼年特發(fā)性關(guān)節(jié)炎.
- 武松打虎劇本
評(píng)論
0/150
提交評(píng)論