CashBox

程设课的一个小玩具。

  1 /**
  2  * Copyright 2017 Neopolitan
  3  */
  4 
  5 #include <cstdio>
  6 #include <algorithm>
  7 
  8 using namespace std;
  9 
 10 #define SIZE 100
 11 #define CASH sizeof(cash)
 12 
 13 struct cash{
 14     int date;
 15     int entry_or_expenditure;
 16 };
 17 
 18 cash list[SIZE];
 19 int tail;
 20 
 21 bool cmp(cash a, cash b){
 22     return a.date < b.date;
 23 }
 24 
 25 void cash_insert(){
 26     if (tail >= SIZE){
 27         printf("Failed to insert. The storage is full.
");
 28         return;
 29     }
 30     printf("Date:
");
 31     scanf("%d", &list[tail].date);
 32     printf("Entry(+) or Expenditure(-):
");
 33     scanf("%d", &list[tail].entry_or_expenditure);
 34     tail += 1;
 35     sort(list, list + tail, cmp);
 36     printf("Successfully inserted.
");
 37 }
 38 
 39 void cash_search(int id){
 40     if (id >= tail){
 41         printf("Not found.
");
 42         return;
 43     }
 44     int balance = 0;
 45     printf("ID: %d
", id);
 46     printf("Date: %08d
", list[id].date);
 47     printf("Entry(+) or Expenditure(-): %d
", list[id].entry_or_expenditure);
 48     for (int i = 0; i <= id; i++)
 49         balance += list[i].entry_or_expenditure;
 50     printf("Balance: %d
", balance);
 51 }
 52 
 53 void cash_delete(int id){
 54     if (id >= tail){
 55         printf("Not found.
");
 56         return;
 57     }
 58     tail -= 1;
 59     for (int i = id; i < tail; i++){
 60         list[i].date = list[i + 1].date;
 61         list[i].entry_or_expenditure = list[i + 1].entry_or_expenditure;
 62     }
 63     printf("Successfully deleted.
");
 64 }
 65 
 66 void cash_change(int id){
 67     if (id >= tail){
 68         printf("Not found.
");
 69         return;
 70     }
 71     printf("Date:
");
 72     scanf("%d", &list[id].date);
 73     printf("Entry(+) or Expenditure(-):
");
 74     scanf("%d", &list[id].entry_or_expenditure);
 75     sort(list, list + tail, cmp);
 76     printf("Successfully changed.
");
 77 }
 78 
 79 void cash_print(){
 80     for (int i = 0; i < tail; i++)
 81         cash_search(i);
 82 }
 83 
 84 int main(){
 85     int i = 0;
 86     cash file_input;
 87     FILE *fp = fopen("cashbox.neo", "ab+");
 88     if (fp == nullptr){
 89         printf("Failed to open the file.");
 90         exit(0);
 91     }
 92     while (fread(&list[i], CASH, 1, fp) != 0)
 93         i += 1;
 94     sort(list, list + i, cmp);
 95     tail = i;
 96     int input, id;
 97     while (printf("1: Insert; 2:Search; 3:Delete; 4:Change; 5:Print; 0:Exit
"), scanf("%d", &input), input != 0){
 98         switch (input){
 99             case 1:
100                 cash_insert();
101                 break;
102             case 2:
103                 printf("ID:
");
104                 scanf("%d", &id);
105                 cash_search(id);
106                 break;
107             case 3:
108                 printf("ID:
");
109                 scanf("%d", &id);
110                 cash_delete(id);
111                 break;
112             case 4:
113                 printf("ID:
");
114                 scanf("%d", &id);
115                 cash_change(id);
116                 break;
117             case 5:
118                 cash_print();
119                 break;
120             default:
121                 printf("Input error.");
122                 break;
123         }
124     }
125     if (fclose(fp)){
126         printf("Failed to close the file.");
127         exit(0);
128     }
129     fp = fopen("cashbox.neo", "wb+");
130     fwrite(list, CASH, tail, fp);
131     if (fclose(fp)){
132         printf("Failed to close the file.");
133         exit(0);
134     }
135     return 0;
136 }
原文地址:https://www.cnblogs.com/neopolitan/p/7875092.html