Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <locale.h>
- #include <Windows.h>
- #include <tchar.h>
- #include <limits.h>
- #define DATE_SIZE 11
- #define FIO_SIZE 21
- typedef struct Node{
- int number;
- int summa;
- char date[DATE_SIZE];
- char fio[FIO_SIZE];
- struct Node * prev;
- struct Node * next;
- } NODE;
- typedef NODE * PNODE;
- enum ui {
- MENU,
- ERROR_INPUT,
- NEW_RECORD,
- FIO_INPUT,
- WAYBILL_NUMBER_INPUT,
- DATE_INPUT,
- SUMMA_INPUT,
- SHOW_TABLE,
- HEADERS,
- LINE_HEAD,
- LINE
- };
- PNODE add_list(PNODE);
- void menu(PNODE);
- void sort(PNODE);
- void print(PNODE);
- PNODE clear(PNODE);
- void msg(int);
- int main() {
- PNODE beg = NULL;
- system("color 9B");
- SetConsoleTitleW(_T("Линейный двусвязный список"));
- menu(beg);
- return 0;
- }
- void menu(PNODE beg) {
- int k;
- do {
- k = INT_MAX;
- msg(MENU);
- scanf_s("%i", &k);
- switch (k) {
- case 1 :
- beg = add_list(beg);
- break;
- case 2 :
- print(beg);
- break;
- case 3 :
- sort(beg);
- print(beg);
- break;
- case 4 :
- beg = clear(beg);
- beg = NULL;
- exit(0);
- default:
- msg(ERROR_INPUT);
- fflush(stdin);
- }
- } while (k);
- }
- PNODE clear(PNODE beg) {
- PNODE p = beg;
- while (p != NULL) {
- beg = p->next;
- free (p);
- p = beg;
- }
- return beg;
- }
- PNODE add_list(PNODE beg){
- PNODE p = (PNODE)malloc(sizeof(NODE));
- PNODE r;
- if (beg == NULL) {
- msg(NEW_RECORD);
- msg(FIO_INPUT);
- fflush(stdin);
- gets_s(p->fio, FIO_SIZE);
- if (p->fio[0] == '\0') return beg;
- msg(WAYBILL_NUMBER_INPUT);
- scanf_s("%d", &p->number);
- msg(DATE_INPUT);
- fflush(stdin);
- gets_s(p->date, DATE_SIZE);
- msg(SUMMA_INPUT);
- scanf_s("%i", &p->summa);
- p->next = NULL;
- p->prev = NULL;
- beg = p;
- } else {
- r = (PNODE)malloc(sizeof(NODE));
- r = beg;
- while (r->next != NULL) r = r->next;
- msg(NEW_RECORD);
- msg(FIO_INPUT);
- fflush(stdin);
- gets_s(p->fio, FIO_SIZE);
- if (p->fio[0] == '\0') return beg;
- msg(WAYBILL_NUMBER_INPUT);
- scanf_s("%d", &p->number);
- msg(DATE_INPUT);
- fflush(stdin);
- gets_s(p->date, DATE_SIZE);
- msg(SUMMA_INPUT);
- scanf_s("%i", &p->summa);
- r->next = p;
- p->prev = r;
- p->next = NULL;
- }
- return beg;
- }
- void print(PNODE beg) {
- PNODE p = beg;
- int k = 0;
- if (p == NULL) return;
- msg(SHOW_TABLE);
- msg(LINE_HEAD);
- msg(HEADERS);
- msg(LINE_HEAD);
- while (p != NULL) {
- if (k++) printf("\n");
- printf("|%9i", p->number);
- printf("|%12s|", p->date);
- printf("%13i|", p->summa);
- printf("%38s|\n", p->fio);
- msg(LINE);
- p = p->next;
- }
- return;
- }
- void sort(PNODE beg) {
- PNODE tmp;
- PNODE a;
- int _number;
- int _summa;
- char _date[DATE_SIZE];
- char _fio[FIO_SIZE];
- int flag = 1;
- if (beg == NULL) return;
- while (flag == 1) {
- tmp = beg;
- a = tmp->next;
- flag = 0;
- while (a) {
- if ((tmp->number) > (a->number)) {
- _number = tmp->number;
- tmp->number = a->number;
- a->number = _number;
- _summa = tmp->summa;
- tmp->summa = a->summa;
- a->summa = _summa;
- strcpy_s(_date, DATE_SIZE, tmp->date);
- strcpy_s(tmp->date, DATE_SIZE, a->date);
- strcpy_s(a->date, DATE_SIZE, _date);
- strcpy_s(_fio, FIO_SIZE, tmp->fio);
- strcpy_s(tmp->fio, FIO_SIZE, a->fio);
- strcpy_s(a->fio, FIO_SIZE, _fio);
- flag = 1;
- }
- tmp = tmp->next;
- a = a->next;
- }
- }
- }
- void msg(int command) {
- setlocale(LC_CTYPE, "Russian_Russia.1251");
- switch (command) {
- case MENU: printf("\n 1. Добавить запись\n 2. Показать список\n 3. Сортировать список\n 4. Выход из программы\n\tВыбор: "); break;
- case ERROR_INPUT: printf("\a\t Ошибка!\n\t"); break;
- case NEW_RECORD: printf("\t\t\tДобавление новой записи\n"); break;
- case FIO_INPUT: printf("\n Введите ФИО: "); break;
- case WAYBILL_NUMBER_INPUT: printf(" Введите № накладной: "); break;
- case DATE_INPUT: printf(" Введите дату: "); break;
- case SUMMA_INPUT: printf(" Введите сумму: "); break;
- case SHOW_TABLE: printf("\t\t\tСводная таблица\n"); break;
- case HEADERS: printf("| Номер | Дата | Сумма | ФИО |\n"); break;
- case LINE_HEAD: printf("-----------------------------------------------------------------------------\n"); break;
- case LINE: printf("-----------------------------------------------------------------------------"); break;
- }
- setlocale(LC_CTYPE, "English_United States.866");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement