From 405963cf5d6bc3b53d84a9a51cde9ff4853af3c1 Mon Sep 17 00:00:00 2001 From: Vincenzo Nikodem Cesqui Podiani Date: Thu, 12 Jun 2025 22:06:36 +0200 Subject: [PATCH] primo commit --- main.c | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 33 +++++++++++ newCounter | Bin 0 -> 21568 bytes 3 files changed, 202 insertions(+) create mode 100644 main.c create mode 100644 makefile create mode 100755 newCounter diff --git a/main.c b/main.c new file mode 100644 index 0000000..970fd8c --- /dev/null +++ b/main.c @@ -0,0 +1,169 @@ +/* +* [Guida NCURSES](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/intro.html) +* Product Manager +* +* Controllare se file esiste +* Listare prodotti con prezzo da file +* Aggiungere prodotto con prezzo a file +* Listare copie vendute di prodotto da file +* Aggiungere copie venduto di prodotto a file +* Cambiare nome dei file con interagisce +* Calcolare la somma delle entrate dati i file +*/ + +#include +#include +#include + +// Prototipi +int runMainMenu(); +WINDOW *create_newwin(int height, int width, int starty, int startx); +void destroy_win(WINDOW *local_win); +void print_menu(WINDOW *menu_win, int highlight); +int getCount(); +void changeFile(); +int checkIfFileExists(); + +// Costanti +char productPricesFileLocation[64]="./productPricesSetting.txt"; +char countFileLocation[64]="./count.txt"; +FILE *productPrices; +FILE *count; + +char *mainMenu[] = { + "Segna vendita", + "Vedi vendite", + "Vedi prodotti", + "Gestisci prodotti", + "Opzioni", + "Exit" +}; +int n_mainMenu = sizeof(mainMenu) / sizeof(char *); + + + + + +// Funzioni +int main(){ + initscr(); + noecho(); + curs_set(0); + raw(); + refresh(); + + int running = 0; + while(running != 6){ + running = runMainMenu(); + } + + endwin(); + return 0; +} + + + +int runMainMenu(){ + WINDOW *mainWin; + int startx, starty, width, height; + height = LINES / 2; + width = COLS / 2; + starty = 0; + startx = 0; + mainWin = create_newwin(height, width, starty, startx); + + int highlight = 1; + int choice = 0; + int c; + + keypad(mainWin, TRUE); + mvwprintw(mainWin, 1, 2, "Usa le freccette ed invio per scegliere un'opzione!"); + refresh(); + print_menu(mainWin, highlight); + while(1) + { c = wgetch(mainWin); + switch(c) + { case KEY_UP: + if(highlight == 1) + highlight = n_mainMenu; + else + --highlight; + break; + case KEY_DOWN: + if(highlight == n_mainMenu) + highlight = 1; + else + ++highlight; + break; + case 10: + choice = highlight; + break; + default: + mvwprintw(mainWin, height - 2, 2, "Hai premuto il tasto '%c'", c, c); + refresh(); + break; + } + print_menu(mainWin, highlight); + if(choice != 0) /* User did a choice come out of the infinite loop */ + break; + } + mvprintw( LINES - 1 , 0, "Hai premuto il tasto %s\n . . .", mainMenu[choice - 1]); + clrtoeol(); + refresh(); + destroy_win(mainWin); + + return choice; +} + + +WINDOW *create_newwin(int height, int width, int starty, int startx) +{ WINDOW *local_win; + + local_win = newwin(height, width, starty, startx); + box(local_win, 0 , 0); + wrefresh(local_win); + + return local_win; +} + +void destroy_win(WINDOW *local_win) +{ + wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' '); + wrefresh(local_win); + delwin(local_win); +} + +void print_menu(WINDOW *menu_win, int highlight) +{ + int x, y, i; + + x = 3; + y = 3; + box(menu_win, 0, 0); + for(i = 0; i < n_mainMenu; ++i) + { if(highlight == i + 1) /* High light the present choice */ + { wattron(menu_win, A_REVERSE); + mvwprintw(menu_win, y, x, "%s", mainMenu[i]); + wattroff(menu_win, A_REVERSE); + } + else + mvwprintw(menu_win, y, x, "%s", mainMenu[i]); + ++y; + } + wrefresh(menu_win); +} + + + +int checkIfFileExists(){ + +} + +void changeFile(){ + +} + +int getCount(){ + +} + diff --git a/makefile b/makefile new file mode 100644 index 0000000..d0ae140 --- /dev/null +++ b/makefile @@ -0,0 +1,33 @@ +# Makefile per un programma C con ncurses su Linux x64 + +# Variabili +CC = gcc +CFLAGS = -Wall -g -std=c11 +NCLUDE_DIRS = ./ +LDLIBS = -lncurses -lncursesw + +# Nome del programma +TARGET = newCounter + +# File sorgente +SRC_FILES = main.c + +# Nome dell'eseguibile +EXECUTABLE = $(TARGET) + +# Default target +all: $(EXECUTABLE) + +# Regole di compilazione +$(EXECUTABLE): $(SRC_FILES) + $(CC) $(CFLAGS) $(SRC_FILES) -o $(EXECUTABLE) $(LDLIBS) + +# Regole per la pulizia (rimuove l'eseguibile e i file oggetto) +clean: + rm -f $(EXECUTABLE) *.o + +# Regole per la creazione di file oggetto (opzionale, ma consigliata per una compilazione più veloce) +%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + + diff --git a/newCounter b/newCounter new file mode 100755 index 0000000000000000000000000000000000000000..0dd198f254ae1197086aa5d15a54271d1622e663 GIT binary patch literal 21568 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