c語(yǔ)言課程設(shè)計(jì)報(bào)告---個(gè)人消費(fèi)管理系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p><b>  1 需求分析1</b></p><p><b>  1.1問(wèn)題描述1</b></p><p>  1.2 輸入數(shù)據(jù)要求1</p><p>  1.3 輸出數(shù)據(jù)要求1</p><

2、p>  1.4 開(kāi)發(fā)環(huán)境和工具1</p><p>  1.5 成員分工1</p><p><b>  2總體設(shè)計(jì)2</b></p><p>  2.1 總體設(shè)計(jì)思路2</p><p>  2.2 模塊結(jié)構(gòu)圖2</p><p>  2.3 模塊說(shuō)明3</p>&

3、lt;p><b>  3 詳細(xì)設(shè)計(jì)4</b></p><p>  3.1 數(shù)據(jù)類(lèi)型定義5</p><p>  3.2 打開(kāi)模塊實(shí)現(xiàn)6</p><p>  3.3 更新模塊實(shí)現(xiàn)6</p><p>  3.4 統(tǒng)計(jì)模塊實(shí)現(xiàn)7</p><p>  4測(cè)試結(jié)果及分析12</

4、p><p><b>  5 總結(jié)17</b></p><p><b>  參考文獻(xiàn)18</b></p><p><b>  附錄19</b></p><p><b>  1 需求分析</b></p><p><b>  

5、1.1問(wèn)題描述</b></p><p>  隨著社會(huì)經(jīng)濟(jì)的發(fā)展,大學(xué)生已經(jīng)成為這個(gè)社會(huì)上一個(gè)很重要的團(tuán)體,而他們的消費(fèi)情況也越來(lái)越多的被更多的人關(guān)注,大學(xué)生自己也應(yīng)當(dāng)管理好自己的消費(fèi)內(nèi)容,讓自己的消費(fèi)更加合理化,提高自己生活的質(zhì)量。在這種情況下,就需要一個(gè)軟消費(fèi)表信息:編號(hào),時(shí)間,類(lèi)別,品名,單價(jià),數(shù)量,金額</p><p>  對(duì)學(xué)生每天的消費(fèi)情況作一個(gè)較為詳細(xì)的統(tǒng)計(jì),該系統(tǒng)

6、可以實(shí)現(xiàn)由計(jì)算機(jī)代替人工執(zhí)行一些復(fù)雜而且較為繁瑣的操作,從而使大學(xué)生們能夠更為便捷地管理自己的消費(fèi),也為其他的一些調(diào)查研究提供了方便。</p><p>  1.2 輸入數(shù)據(jù)要求</p><p>  可錄入消費(fèi)者當(dāng)天的消費(fèi)情況,消費(fèi)表信息包括:編號(hào),時(shí)間,類(lèi)別,品名,單價(jià),數(shù)量,金額</p><p>  消費(fèi)信息存放在文件中,以編號(hào)的先后順序存放</p>

7、<p>  1.3 輸出數(shù)據(jù)要求</p><p>  打開(kāi):顯示文件中的所有消費(fèi)記錄,提供分頁(yè)顯示</p><p>  保存:將消費(fèi)表的更新結(jié)果存入文件</p><p>  更新:可插入、刪除、修改各消費(fèi)記錄</p><p>  查找:按時(shí)間,類(lèi)別、品名查找消費(fèi)記錄</p><p>  排序:按時(shí)間,類(lèi)別,

8、金額</p><p>  統(tǒng)計(jì):求各類(lèi)別消費(fèi)品的總金額,求各月的消費(fèi)總金額,求各年消費(fèi)總金額</p><p>  1.4 開(kāi)發(fā)環(huán)境和工具</p><p>  開(kāi)發(fā)環(huán)境:Windows 2000</p><p>  開(kāi)發(fā)工具:Visual C++ 6.0</p><p><b>  1.5 成員分工</b

9、></p><p>  劉倩鈺:主函數(shù)模塊,保存模塊,排序模塊</p><p>  劉冬梅:打開(kāi)模塊,更新模塊,數(shù)據(jù)統(tǒng)計(jì)模塊</p><p><b>  2總體設(shè)計(jì)</b></p><p>  2.1 總體設(shè)計(jì)思路</p><p><b>  設(shè)計(jì)思路</b><

10、/p><p>  個(gè)人消費(fèi)系統(tǒng)管理包含的操作有:打開(kāi)、保存、更新、查找、排序和統(tǒng)計(jì)。在程序開(kāi)始運(yùn)行的時(shí)候從文件加載已有數(shù)據(jù),并輸出可以進(jìn)行的操作提供給用戶(hù),</p><p>  1、打開(kāi):顯示文件中的所有消費(fèi)記錄,通過(guò)取模運(yùn)算提供分頁(yè)顯示功能</p><p>  2、保存:以wb模式打開(kāi)文件,將修改的內(nèi)容寫(xiě)入文件</p><p>  3、更新:可

11、插入、刪除、修改各消費(fèi)記錄</p><p>  4、查找:按時(shí)間,類(lèi)別、品名查找消費(fèi)記錄</p><p>  5、排序:按時(shí)間,類(lèi)別,金額</p><p>  6、統(tǒng)計(jì):分別按類(lèi)別、月、年統(tǒng)計(jì)消費(fèi)品的總金額</p><p><b>  數(shù)據(jù)存儲(chǔ)</b></p><p>  為了操作的方便,用typ

12、edef自定義了一些數(shù)據(jù)類(lèi)型,其中包含一個(gè)長(zhǎng)度為MAX的數(shù)組,用來(lái)存放從文件中讀取的數(shù)據(jù)。</p><p>  2.2 模塊結(jié)構(gòu)圖</p><p>  根據(jù)需求將系統(tǒng)劃分為六個(gè)功能模塊,函數(shù)之間的調(diào)用關(guān)系如圖2.1所示。</p><p>  圖2.1 個(gè)人消費(fèi)系統(tǒng)的模塊結(jié)構(gòu)圖</p><p>  Calledit:在主函數(shù)的控制下,調(diào)用各個(gè)

13、模塊</p><p>  1)ShowRec: 輸出已存在的記錄。</p><p>  2)SaveRec:保存更新的內(nèi)容。</p><p>  3)UpdateRec: 按一定的方式更新記錄。</p><p>  這個(gè)模塊下包含三個(gè)子模塊 插入:Insert </p><p>  刪除: DeleteByNu

14、m </p><p>  修改:Modify </p><p>  4)FindRec: 按一定的方式查找記錄。</p><p>  這個(gè)模塊下也包含三個(gè)子模塊 按日期查找:FindBytime</p><p>  按類(lèi)型查找:FindByType </p><p>  按名稱(chēng)查找: FindByName

15、 </p><p>  5)SortRec: 按一定的方式查找記錄。</p><p>  這個(gè)模塊下也包含三個(gè)子模塊 按日期查找:SortBytime</p><p>  按類(lèi)型查找:SortByType </p><p>  按名稱(chēng)查找: SortBySum</p><p>  6)ShowTotal:

16、 顯示各種統(tǒng)計(jì)的結(jié)果</p><p><b>  2.3 模塊說(shuō)明</b></p><p> ?。ㄒ詮纳现料拢瑥淖笾劣业捻樞蛘f(shuō)明)</p><p>  2.3.1:打開(kāi)模塊:</p><p>  自定義函數(shù):ShowRec( )</p><p>  函數(shù)功能:輸出已存在的歷史記錄</p&

17、gt;<p><b>  無(wú)參函數(shù):無(wú)參數(shù)</b></p><p>  2.3.2:更新模塊:</p><p>  自定義函數(shù):UpdateRec( )</p><p>  函數(shù)功能: 可對(duì)輸入數(shù)據(jù)實(shí)現(xiàn)插入,刪除,修改操作。</p><p>  無(wú)參函數(shù):void類(lèi)型,無(wú)返回值。調(diào)用Insert()函數(shù),D

18、elete()函數(shù)和Modify()</p><p>  2.3.2.1插入模塊:自定義函數(shù): Insert()</p><p>  函數(shù)功能:實(shí)現(xiàn)插入新的信息并保存到記錄中,其中插入的數(shù)據(jù)最后金額可以自己運(yùn)算出來(lái),插入的記錄保存在尾部。</p><p>  無(wú)參函數(shù):返回值為int 類(lèi)型</p><p>  2.3.2.2刪除模塊:自定義函

19、數(shù); RemoveByNum(int num)</p><p>  函數(shù)功能:對(duì)所選信息按編號(hào)刪除,刪除過(guò)后,后面記錄到編號(hào)將全部減1,記錄的編號(hào)即下標(biāo)。</p><p>  輸入?yún)?shù):int類(lèi)型,返回值是int類(lèi)型。num--int類(lèi)型,表示define.h文件中定義的類(lèi)型Rec_Con中數(shù)組record[]的下標(biāo),刪除過(guò)后,后面記錄到編號(hào)將全部減1,記錄的編號(hào)即下標(biāo)。后面的記錄全部向前

20、移動(dòng)一個(gè)距離。</p><p>  2.3.2.3修改模塊:自定義修改函數(shù):Modify()</p><p>  函數(shù)功能:按名稱(chēng)修改記錄,先判斷要查找的名稱(chēng)所對(duì)應(yīng)的記錄是否存在,不存在則直接返回。</p><p>  無(wú)參函數(shù):返回值為int型</p><p>  2.3.3:統(tǒng)計(jì)模塊:</p><p>  函數(shù)原型

21、:ShowTotal( ) </p><p>  函數(shù)功能:顯示統(tǒng)計(jì)結(jié)果</p><p>  無(wú)參函數(shù):void 類(lèi)型,無(wú)返回值。</p><p>  2.3.3.1 按類(lèi)型統(tǒng)計(jì):ShowType( )</p><p>  函數(shù)功能:按類(lèi)型顯示統(tǒng)計(jì)結(jié)果</p><p>  無(wú)參函數(shù); void 類(lèi)型,無(wú)返回值。

22、</p><p>  2.3.3.2按月顯示統(tǒng)計(jì)結(jié)果:</p><p>  函數(shù)原型:ShowMonth() </p><p>  函數(shù)功能:忽略了年,按月顯示統(tǒng)計(jì)結(jié)果</p><p>  無(wú)參函數(shù):void 類(lèi)型,無(wú)返回值。</p><p>  2.3.3.3按年顯示統(tǒng)計(jì)結(jié)果:</p><p&g

23、t;  函數(shù)原型:ShowYear() </p><p>  函數(shù)功能:按年顯示統(tǒng)計(jì)結(jié)果</p><p>  無(wú)參函數(shù):void 類(lèi)型,無(wú)返回值。</p><p><b>  3 詳細(xì)設(shè)計(jì)</b></p><p>  3.1 數(shù)據(jù)類(lèi)型定義</p><p>  關(guān)鍵數(shù)據(jù)都定義在defin

24、e.h里</p><p>  #define MAX 100 //人為定義的一個(gè)上限</p><p>  typedef struct // 定義記錄結(jié)構(gòu)體,并重新命名類(lèi)型名</p><p><b>  {</b></p><p>  int num; //編號(hào)&l

25、t;/p><p>  char times[11]; //時(shí)間</p><p>  char types[20]; //類(lèi)別</p><p>  char name[20]; //品名</p><p>  double price; //單價(jià)</p><p> 

26、 int quantity; //數(shù)量</p><p>  double sum; //金額</p><p><b>  }Rec;</b></p><p>  typedef struct // 定義操作結(jié)構(gòu)體,并重新命名類(lèi)型名</p><p><b

27、>  {</b></p><p>  Rec record[MAX+1]; //定義結(jié)構(gòu)體變量,可操作的記錄總數(shù),下標(biāo)為0和MAX不存放記錄</p><p>  int total_count; //整型變量,記錄總數(shù)</p><p>  }Rec_Con,*PRec_Con;</p><p>  union

28、 {//定義一個(gè)查找時(shí)使用的共用體</p><p>  char times[11]; //存放按時(shí)間查找時(shí)輸入的時(shí)間</p><p>  char types[20]; //存放按類(lèi)型查找時(shí)輸入的類(lèi)型</p><p>  char name[20]; //存放按名稱(chēng)查找時(shí)輸入的名稱(chēng)</p>&

29、lt;p><b>  }found;</b></p><p>  //下面三個(gè)變量都是全局變量</p><p>  FILE *fp; //定義文件指針</p><p>  Rec_Con rs; //用來(lái)定義變量,避免了動(dòng)態(tài)分配中的安全問(wèn)題</p><p>  PRec_Con records=

30、&rs; //定義操作指針變量</p><p>  int type_count=0; //記錄里相關(guān)的類(lèi)型數(shù)目</p><p>  int year_count=0; //記錄里相關(guān)的年數(shù)目</p><p>  char *ptype[MAX+1]; //字符型變量,記錄里相關(guān)的類(lèi)型</p><p>  c

31、har pyear[MAX+1][5]; //字符型變量,記錄里相關(guān)的年</p><p>  char tmp[5]; //字符型變量,取年份所用</p><p>  char tmp01[5],tmp02[5]; //存放Get4的返回值,在比較時(shí)使用</p><p>  char c; //字符型變量,臨時(shí)使用變量,沒(méi)

32、有固定的限制</p><p>  3.2 ShowRec模塊實(shí)現(xiàn)</p><p>  1.算法思想:按編號(hào), 時(shí)間,類(lèi)別,品名,單價(jià),數(shù)量,金額的順序打開(kāi)文件,并顯示結(jié)果。其中提供分頁(yè)顯示功能。</p><p><b>  2.具體實(shí)現(xiàn):</b></p><p>  void OpenFile() //打開(kāi)文件函數(shù),

33、以二進(jìn)制append形式操作</p><p><b>  {</b></p><p>  if((fp=fopen("consum","ab+"))==NULL)</p><p><b>  {</b></p><p>  printf("File

34、open fail!\n");</p><p><b>  return ;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void ShowI(int i) //根據(jù)i值輸出記錄</p>

35、<p><b>  {</b></p><p>  printf("記錄:\n\n"); </p><p>  printf("\n編號(hào) 時(shí)間 類(lèi)別 品名 單價(jià) 數(shù)量 金額 \n");</p><p>  printf

36、("%-5d% -10s%15s%15s %8.2f%5d%8.2f\n",records->record[i].num,records->record[i].times,records->record[i].types,records->record[i].name,records->record[i].price,records->record[i].quanti

37、ty,records->record[i].sum);</p><p><b>  }</b></p><p>  int ShowRec() //顯示所有記錄</p><p><b>  {</b></p><p><b>  int i;</b><

38、/p><p>  for(i=1;i<=records->total_count;i++)</p><p><b>  {</b></p><p>  printf("%-5d%-10s%15s%15s%8.2f%5d%8.2f\n",records->record[i].num,records->rec

39、ord[i].times,records->record[i].types,records->record[i].name,records->record[i].price,records->record[i].quantity,records->record[i].sum);</p><p>  if((i%10)==0) //實(shí)現(xiàn)分頁(yè)功能</p><p&g

40、t;<b>  {</b></p><p>  printf("Press any key show next page……\n");</p><p>  getchar();</p><p><b>  //cls();</b></p><p><b>  }<

41、/b></p><p><b>  }</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  3.3更新模三個(gè)塊:</p><p>  更新包括內(nèi)容;插入,刪除,查找</p

42、><p>  1.算法思想:利用三個(gè)自定義函數(shù):int Insert() //插入函數(shù),int DeleteByNum() //按編號(hào)刪除,int Modify() //按名稱(chēng)修改記錄。插入過(guò)程用MAX控制插入信息的范圍;刪除時(shí)按編號(hào)刪除,刪除過(guò)后,后面記錄到編號(hào)將全部減1,記錄的編號(hào)即下標(biāo)。修改時(shí)先利用int FindByName(char *name);按名稱(chēng)查找記錄函數(shù),找到相關(guān)信息,若無(wú)此信息

43、直接跳轉(zhuǎn),否則修改。</p><p><b>  2.具體實(shí)現(xiàn):</b></p><p>  int Insert() //插入函數(shù)</p><p><b>  {</b></p><p>  if(records->total_count==(MAX-1))</p>&

44、lt;p><b>  {</b></p><p>  printf("數(shù)據(jù)已達(dá)可控范圍,不能再插入!\n"); </p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  int i=(+

45、+records->total_count);</p><p>  records->record[i].num=i; //編號(hào)是連續(xù)的,</p><p>  printf("\n 時(shí)間 類(lèi)別 品名 單價(jià) 數(shù)量 金額 \n");</p><p>  scanf("

46、%s%s%s%lf%d",records->record[i].times,records->record[i].types,records->record[i].name,&records->record[i].price,&records->record[i].quantity);</p><p>  if(strlen(records->reco

47、rd[i].times)!=10||records->record[i].times[4]!='-'||records->record[i].times[7]!='-') //簡(jiǎn)單的判斷一下日期是否符合格式要求</p><p><b>  {</b></p><p>  printf("時(shí)間格式錯(cuò)誤,請(qǐng)重試!

48、\n");</p><p>  records->total_count--;</p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  records->record[i].sum = records->reco

49、rd[i].price * records->record[i].quantity; //金額是計(jì)算所得</p><p>  #ifdef DEBUG</p><p><b>  ShowI(i);</b></p><p><b>  #endif</b></p><p><b&g

50、t;  return 1;</b></p><p><b>  }</b></p><p>  int RemoveByNum(int num) //刪除過(guò)后,后面記錄到編號(hào)將全部減1,記錄的編號(hào)即下標(biāo)</p><p><b>  {</b></p><p><b>  i

51、nt i;</b></p><p>  if(num<1||num>records->total_count)</p><p><b>  {</b></p><p>  printf("位置錯(cuò)誤!\n");</p><p><b>  return 0;<

52、;/b></p><p><b>  }</b></p><p>  for(i=num;i<records->total_count;i++) //i后面的記錄全部向前移動(dòng)一個(gè)距離</p><p><b>  {</b></p><p>  records->reco

53、rd[i].num=records->record[i+1].num-1;</p><p>  strcpy(records->record[i].times,records->record[i+1].times);</p><p>  strcpy(records->record[i].types,records->record[i+1].types);&l

54、t;/p><p>  strcpy(records->record[i].name,records->record[i+1].name);</p><p>  records->record[i].price=records->record[i+1].price;</p><p>  records->record[i].quantity=

55、records->record[i+1].quantity;</p><p>  records->record[i].sum=records->record[i+1].sum;</p><p><b>  }</b></p><p><b>  return 1;</b></p><

56、p><b>  }</b></p><p>  int DeleteByNum() //按編號(hào)刪除</p><p><b>  {</b></p><p><b>  int num;</b></p><p>  printf("請(qǐng)輸入要?jiǎng)h除記錄的

57、編號(hào):");</p><p>  scanf("%d",&num);</p><p>  if(!(RemoveByNum(num)))</p><p><b>  {</b></p><p>  printf("程序執(zhí)行錯(cuò)誤,刪除失??!\n");</p&g

58、t;<p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  return 1;</b></p><p><b>  }<

59、/b></p><p>  int FindByName(char *name); //聲明按名稱(chēng)查找記錄函數(shù),下面就要使用到</p><p>  int Modify() //按名稱(chēng)修改記錄</p><p><b>  {</b></p><p><b>  int i;</b>

60、</p><p>  char names[20];</p><p>  printf("請(qǐng)輸入要修改的記錄名稱(chēng):");</p><p>  scanf("%s",names);</p><p>  i=FindByName(names);</p><p>  if(!i)

61、 //判斷要查找的名稱(chēng)所對(duì)應(yīng)的記錄是否存在,不存在則直接跳轉(zhuǎn)</p><p><b>  return 0;</b></p><p>  printf("請(qǐng)輸入所需信息:\n");</p><p>  printf("\n 時(shí)間 類(lèi)別 品名

62、 單價(jià) 數(shù)量 金額 \n");</p><p>  scanf("%s%s%s%lf%d",records->record[i].times,records->record[i].types,records->record[i].name,&records->record[i].price,&records->rec

63、ord[i].quantity);</p><p>  records->record[i].sum = records->record[i].price * records->record[i].quantity;</p><p><b>  return 1;</b></p><p><b>  }</b&

64、gt;</p><p>  3.4 ShowTotal模塊實(shí)現(xiàn)</p><p>  ShowTotal包括三種方式:類(lèi)型、月、年,以類(lèi)型為例說(shuō)明</p><p><b>  1、算法思想</b></p><p>  為確保不會(huì)溢出,保存統(tǒng)計(jì)結(jié)果的total數(shù)組定義長(zhǎng)度為MAX,接下來(lái)對(duì)記錄集進(jìn)行遍歷,并與ptype[]

65、數(shù)組中統(tǒng)計(jì)的類(lèi)型進(jìn)行比對(duì),按照對(duì)應(yīng)的下標(biāo)將統(tǒng)計(jì)結(jié)果加到total[]數(shù)組中,這樣做便于輸出時(shí)一一對(duì)應(yīng)。</p><p>  (復(fù)雜算法用流程圖輔助說(shuō)明)</p><p><b>  2、具體實(shí)現(xiàn)</b></p><p> ?。ńo出實(shí)現(xiàn)算法的關(guān)鍵代碼)</p><p><b>  按類(lèi)型顯示統(tǒng)計(jì)結(jié)果</b&

66、gt;</p><p>  void ShowType() {</p><p>  int i=1,j=0;</p><p>  double total[MAX]={0.0}; //定義保存統(tǒng)計(jì)結(jié)果的數(shù)組</p><p>  while(i<=records->total_count&&j<typ

67、e_count){ //遍歷并記錄統(tǒng)計(jì)結(jié)果</p><p>  if(strcmp(ptype[j],records->record[i].types)==0){</p><p>  total[j] += records->record[i].sum;</p><p><b>  i++;</b></p>&

68、lt;p><b>  }</b></p><p><b>  elsej++;</b></p><p><b>  }</b></p><p><b>  //輸出統(tǒng)計(jì)結(jié)果</b></p><p>  printf("按類(lèi)型統(tǒng)計(jì)結(jié)果如下:

69、\n"); </p><p>  for(i=0;i<type_count;i++){</p><p>  printf("%s:\t%8.2f\n",ptype[i],total[i]);</p><p><b>  }</b></p><p>  printf("\n&q

70、uot;);</p><p><b>  }</b></p><p><b>  4測(cè)試結(jié)果及分析</b></p><p>  打開(kāi)程序,進(jìn)入主界面</p><p>  輸入“1”,打開(kāi)歷史消費(fèi)記錄:</p><p>  輸入“1”,測(cè)試更新模塊:</p>&l

71、t;p>  輸入“1”,插入信息數(shù)據(jù):</p><p>  輸入“2”,按編號(hào)刪除數(shù)據(jù):</p><p>  輸入“3”,修改歷史信息;</p><p>  輸入“0”,返回主菜單:</p><p>  輸入“6”,測(cè)試統(tǒng)計(jì)結(jié)果;</p><p>  輸入“1”,按類(lèi)別統(tǒng)計(jì)結(jié)果:</p><p

72、>  10,輸入“2”,按月顯示統(tǒng)計(jì)結(jié)果:</p><p>  輸入“3”,按年顯示統(tǒng)計(jì)結(jié)果:</p><p><b>  5.總結(jié)</b></p><p>  為期四天的課程設(shè)計(jì)結(jié)束了,其中的酸甜苦辣恐怕只有經(jīng)歷過(guò)的人才會(huì)懂得。其實(shí)課程設(shè)計(jì)的題目老師很早就發(fā)下來(lái)了,但由于自己時(shí)間觀念不強(qiáng),沒(méi)有提前準(zhǔn)備,所以搞得開(kāi)始做的時(shí)候發(fā)現(xiàn)很多東西都

73、不會(huì),又臨時(shí)學(xué)占用了很多時(shí)間。下次一定要吸取教訓(xùn),不能臨時(shí)抱佛腳啊!此次課程設(shè)計(jì)雖然很難,但也讓我學(xué)到了很多東西。它讓我學(xué)會(huì)的不僅僅是怎么去編一個(gè)大的程序,更讓我學(xué)會(huì)了怎樣去開(kāi)始做一件事,怎樣規(guī)劃自己的時(shí)間做好一件事。剛開(kāi)始看到提示真的是一片茫然,不知如何下手,然后經(jīng)過(guò)自己上網(wǎng)查閱和看了一些課程設(shè)計(jì)的書(shū)之后漸漸有了一點(diǎn)眉目。這些對(duì)我的自學(xué)能力鍛煉很大。另外,在編程過(guò)程中也遇到了很多很多的問(wèn)題,比如統(tǒng)計(jì)模塊的數(shù)組元素定義錯(cuò)誤導(dǎo)致結(jié)果不能運(yùn)

74、行,等等、、、我知道自己在C這條路上還有很長(zhǎng)的路要走,但這次得課程設(shè)計(jì)無(wú)疑給了我更加堅(jiān)定走下去的信心,他讓我體會(huì)了迷茫,煩躁,痛苦、、、但它也讓我學(xué)會(huì)了淡定,從容,堅(jiān)持、、、它帶給我四個(gè)晚上熬夜到兩點(diǎn)半的記錄,它也帶給了我看到程序運(yùn)行出結(jié)果的喜悅、、、程序中的各種各樣的錯(cuò)誤曾經(jīng)讓我失望甚至絕望,想放棄,但同組的我們相互鼓勵(lì)視乎又看到了希望、、、在這次設(shè)計(jì)中還請(qǐng)教了幾個(gè)學(xué)計(jì)算機(jī)的高</p><p>  我認(rèn)為這次課

75、程設(shè)計(jì)對(duì)我們的鍛煉很大,它處在離考試只有三四天的時(shí)候,這么緊迫的時(shí)刻有這么短的時(shí)間,這大大的鍛煉了我們的時(shí)間安排能力和不急不躁心態(tài)。另外程序中還有很多不完善的地方,希望以后加強(qiáng)學(xué)習(xí)能夠?qū)⑵涓恼琳橥晟瓢?。非常感謝這次設(shè)計(jì)中給我們幫助的同學(xué),學(xué)長(zhǎng)和老師!</p><p><b>  6.參考文獻(xiàn):</b></p><p>  參考文獻(xiàn):[1]譚浩強(qiáng)等.C語(yǔ)言程序設(shè)計(jì)

76、教程.北京:高等教育出版社,1997.[2]譚浩強(qiáng).C程序設(shè)計(jì).第2版.北京:清華大學(xué)出版社,1999.[3]徐士良.C程序設(shè)計(jì)教程附錄</p><p><b>  主函數(shù)源程序代碼:</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></

77、p><p>  #include<string.h></p><p>  #include<windows.h></p><p>  #include"defined.h"</p><p>  #include"arc.h"</p><p>  int mai

78、n(void)</p><p><b>  {</b></p><p>  int chioce; //開(kāi)始的時(shí)候使用char試了一下,有些功能不能實(shí)現(xiàn)</p><p>  records->total_count=0;</p><p>  #ifdef DEBUG</p><p>  

79、printf("jskdljf:%d\n",records->total_count);</p><p><b>  #endif</b></p><p>  void calledit(int chioce); //聲明中間過(guò)程函數(shù)</p><p>  OpenFile("ab+");

80、 //打開(kāi)文件并初始化數(shù)組,即加載數(shù)據(jù)</p><p>  while(!feof(fp))</p><p><b>  {</b></p><p>  fread(&records->record[++rs.total_count],sizeof(Rec),1,fp); //record[0]中并不存放記錄數(shù)據(jù),以后作為查找

81、到前哨站</p><p><b>  }</b></p><p>  fclose(fp);</p><p>  #ifdef DEBUG</p><p>  printf("jskdljf:%d\n",records->total_count);</p><p>  

82、ShowRec();</p><p><b>  #endif</b></p><p>  while(1) //用一個(gè)死循環(huán)實(shí)現(xiàn)循環(huán)操作,只有選擇退出的時(shí)候才退出</p><p><b>  {</b></p><p>  system("cls");</p>

83、<p>  printf("--------消費(fèi)記錄系統(tǒng)-------\n");</p><p>  printf("1--打開(kāi)\n");</p><p>  printf("2--保存\n");</p><p>  printf("3--更新\n");</p>

84、<p>  printf("4--查找\n");</p><p>  printf("5--排序\n");</p><p>  printf("6--統(tǒng)計(jì)\n");</p><p>  printf("Other--退出\n");</p><p> 

85、 printf("請(qǐng)輸入操作序號(hào):");</p><p>  scanf("%d",&chioce);</p><p>  system("cls");</p><p>  if(chioce>6||chioce<1)</p><p><b>  bre

86、ak;</b></p><p><b>  else</b></p><p>  calledit(chioce); //調(diào)用中間過(guò)程函數(shù)</p><p><b>  }</b></p><p><b>  return 0;</b></p>

87、<p><b>  }</b></p><p>  void calledit(int chioce)</p><p><b>  {</b></p><p>  void UpdateRec();</p><p>  void FindRec();</p><

88、p>  void SortRec();</p><p>  switch(chioce)</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  ShowRec();</p><p><b>  bre

89、ak;</b></p><p><b>  case 2:</b></p><p>  SaveRec();</p><p><b>  break;</b></p><p><b>  case 3:</b></p><p>  Updat

90、eRec();</p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  FindRec();</p><p><b>  break;</b></p><p><b>  cas

91、e 5:</b></p><p>  SortRec();</p><p><b>  break;</b></p><p><b>  case 6:</b></p><p>  ShowTotal();</p><p><b>  break;<

92、;/b></p><p><b>  default:</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  return ;</b></p><p>&

93、lt;b>  }</b></p><p>  void UpdateRec()</p><p><b>  {</b></p><p><b>  int mc;</b></p><p><b>  while(1)</b></p><p

94、><b>  {</b></p><p>  printf("1--插入\n");</p><p>  printf("2--刪除\n");</p><p>  printf("3--修改\n");</p><p>  printf("0--離開(kāi)

95、\n");</p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&mc);</p><p><b>  if(mc==1)</b></p><p><b>  Insert();</b></p&

96、gt;<p>  else if(mc==2)</p><p>  DeleteByNum();</p><p>  else if(mc==3)</p><p><b>  Modify();</b></p><p>  else if(mc==0)</p><p><b&g

97、t;  break;</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("輸入有誤,請(qǐng)重試!\n");</p><p><b>  continue;</b></

98、p><p><b>  }</b></p><p>  scanf("%c",&c);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void FindRec()</p

99、><p><b>  {</b></p><p><b>  int mc;</b></p><p><b>  int i;</b></p><p><b>  while(1)</b></p><p><b>  {<

100、;/b></p><p>  printf("1--按時(shí)間查找\n");</p><p>  printf("2--按類(lèi)型查找\n");</p><p>  printf("3--按名稱(chēng)查找\n");</p><p>  printf("0--離開(kāi)\n");

101、</p><p>  printf("請(qǐng)選擇:");</p><p>  scanf("%d",&mc);</p><p><b>  if(mc==1)</b></p><p><b>  {</b></p><p>  pr

102、intf("請(qǐng)輸入時(shí)間(format:2011-12-31):");</p><p>  scanf("%s",found.times);</p><p>  if(strlen(found.times)!=10||found.times[4]!='-'||found.times[7]!='-') //簡(jiǎn)單的判斷

103、一下日期是否符合格式要求</p><p><b>  {</b></p><p>  printf("時(shí)間格式錯(cuò)誤,請(qǐng)重試!\n");</p><p><b>  continue;</b></p><p><b>  }</b></p>&l

104、t;p>  i=FindByTime(found.times);</p><p><b>  if(i)</b></p><p><b>  {</b></p><p><b>  ShowI(i);</b></p><p><b>  }</b>&

105、lt;/p><p><b>  }</b></p><p>  else if(mc==2)</p><p><b>  {</b></p><p>  printf("請(qǐng)輸入類(lèi)型:");</p><p>  scanf("%s",foun

106、d.types);</p><p>  i=FindByType(found.types);</p><p><b>  if(i)</b></p><p><b>  {</b></p><p><b>  ShowI(i);</b></p><p>

107、<b>  }</b></p><p><b>  }</b></p><p>  else if(mc==3)</p><p><b>  {</b></p><p>  printf("請(qǐng)輸入名稱(chēng):");</p><p>  sc

108、anf("%s",found.name);</p><p>  i=FindByName(found.name);</p><p><b>  if(i)</b></p><p><b>  {</b></p><p><b>  ShowI(i);</b>

109、</p><p><b>  }</b></p><p><b>  }</b></p><p>  else if(mc==0)</p><p><b>  break;</b></p><p><b>  else</b><

110、;/p><p><b>  {</b></p><p>  printf("輸入有誤,請(qǐng)重試!\n");</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  scanf(&q

111、uot;%c",&c);</p><p>  system("cls");</p><p><b>  }</b></p><p><b>  }</b></p><p>  void SortRec()</p><p><b&g

112、t;  {</b></p><p><b>  int mc;</b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  printf("1--按時(shí)間排序\n");</p>

113、;<p>  printf("2--按類(lèi)型排序\n");</p><p>  printf("3--按金額排序\n");</p><p>  printf("0--離開(kāi)\n");</p><p>  printf("請(qǐng)選擇:");</p><p> 

114、 scanf("%c",&mc);</p><p><b>  if(mc==1)</b></p><p>  SortByTime();</p><p>  else if(mc==2)</p><p>  SortByType();</p><p>  else i

115、f(mc==3)</p><p>  SortBySum();</p><p>  else if(mc==0)</p><p><b>  break;</b></p><p><b>  else</b></p><p><b>  {</b><

116、;/p><p>  printf("輸入有誤,請(qǐng)重試!\n");</p><p><b>  continue;</b></p><p><b>  }</b></p><p>  scanf("%c",&c);</p><p> 

117、 system("cls");</p><p><b>  }</b></p><p>  Define.h文件代碼:</p><p>  #define MAX 100 //人為定義的一個(gè)上限</p><p>  //#define DEBUG //控制調(diào)試信息的輸出</p

118、><p>  typedef struct</p><p><b>  {</b></p><p>  int num; //編號(hào)</p><p>  char times[11]; //時(shí)間</p><p>  char types[20];

119、//類(lèi)別</p><p>  char name[20]; //品名</p><p>  double price; //單價(jià)</p><p>  int quantity; //數(shù)量</p><p>  double sum; //金額</p><

120、p><b>  }Rec;</b></p><p>  typedef struct</p><p><b>  {</b></p><p>  Rec record[MAX+1]; //可操作的記錄總數(shù)</p><p>  int total_count; //記錄總

121、數(shù)</p><p>  }Rec_Con,*PRec_Con;</p><p><b>  union {</b></p><p>  char times[11]; </p><p>  char types[20]; </p><p>  char name[2

122、0]; </p><p><b>  }found;</b></p><p>  //下面三個(gè)變量都是全局變量</p><p>  FILE *fp; //定義文件指針</p><p>  Rec_Con rs; </p><p>  PRec_Con records=&r

123、s; //定義指針變量</p><p>  int type_count=0; //記錄里相關(guān)的類(lèi)型數(shù)目</p><p>  int year_count=0; //記錄里相關(guān)的年數(shù)目</p><p>  char *ptype[MAX+1]; //記錄里相關(guān)的類(lèi)型</p><p>  char pyear[MAX+1][

124、5]; //記錄里相關(guān)的年</p><p>  char tmp[5]; //取年份所用</p><p>  char c; //使用頻率很高的一個(gè)變量,后來(lái)好像又沒(méi)聲明用了,先放著吧</p><p>  arc.h文件代碼:</p><p>  #include<string.h></

125、p><p>  void OpenFile(char * mode) //打開(kāi)文件函數(shù),以二進(jìn)制append形式操作</p><p><b>  {</b></p><p>  if((fp=fopen("consum",mode))==NULL)</p><p><b>  {</b

126、></p><p>  printf("File open fail!\n");</p><p><b>  return ;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

127、t;  void ShowI(int i) //根據(jù)i值輸出記錄</p><p><b>  {</b></p><p>  printf("記錄:%-5d%-10s%15s%15s%8.2f%5d%8.2f\n",records->record[i].num,records->record[i].times,records-&g

128、t;record[i].types,records->record[i].name,records->record[i].price,records->record[i].quantity,records->record[i].sum);</p><p><b>  }</b></p><p>  int ShowRec() //

129、顯示所有記錄</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  printf("\t\t--------------打印記錄-------------\n\n");</p><p>  printf("編號(hào)\t

130、 日期\t\t 類(lèi)型\t 名稱(chēng)\t 單價(jià) 數(shù)量\t 金額\n");</p><p>  for(i=1;i<=records->total_count;i++)</p><p><b>  {</b></p><p>  printf("%-5d %-10s%15s%15s%8.2f%5d

131、 %8.2f\n",records->record[i].num,records->record[i].times,records->record[i].types,records->record[i].name,records->record[i].price,records->record[i].quantity,records->record[i].sum);</p&g

132、t;<p>  if((i%9)==0) //實(shí)現(xiàn)分頁(yè)功能</p><p><b>  {</b></p><p>  printf("Press any key show next page……");</p><p>  getchar();getchar(); //不明白這里為什么非要兩次getcha

133、r()?</p><p>  system("cls"); </p><p>  printf("\t\t--------------打印記錄-------------\n\n");</p><p>  printf("編號(hào)\t 日期\t\t 類(lèi)型\t 名稱(chēng)\t 單價(jià) 數(shù)量\t 金額\n&quo

134、t;);</p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("Press any key into main menu……");</p><p><b>  return 1;</b></

135、p><p><b>  }</b></p><p>  int SaveRec() //保存更新</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  OpenFile("wb&q

136、uot;);</p><p>  for(i=1;i<=records->total_count;i++)</p><p><b>  {</b></p><p>  fwrite(&records->record[i],sizeof(Rec),1,fp);</p><p><b> 

137、 }</b></p><p>  fclose(fp);</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  int Insert() //插入函數(shù)</p><p><b>  {&

138、lt;/b></p><p>  if(records->total_count==(MAX-1))</p><p><b>  {</b></p><p>  printf("數(shù)據(jù)已達(dá)可控范圍,不能再插入!\n"); </p><p><b>  return 0;<

139、;/b></p><p><b>  }</b></p><p>  int i=(++records->total_count);</p><p>  records->record[i].num=i; //編號(hào)是連續(xù)的,1~n</p><p>  printf("請(qǐng)輸入所需信息(順序?yàn)?/p>

140、:時(shí)間,類(lèi)別,品名,單價(jià),數(shù)量):");</p><p>  scanf("%s%s%s%lf%d",records->record[i].times,records->record[i].types,records->record[i].name,&records->record[i].price,&records->record[i]

141、.quantity);</p><p>  if(strlen(records->record[i].times)!=10||records->record[i].times[4]!='-'||records->record[i].times[7]!='-') //簡(jiǎn)單的判斷一下日期是否符合格式要求</p><p><b>

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論