Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct Node{
- int number;
- int summa;
- char data[11];
- char fio[21];
- struct Node * prev;
- struct Node * next;
- } NODE;
- typedef NODE * PNODE;
- PNODE Add_list(PNODE);
- void menu(PNODE);
- void Print(PNODE);
- void sort(PNODE);
- void Add_nachalo(void);
- void Delete(void);
- PNODE head = NULL;
- PNODE lost = NULL;
- int main(int argc, char *argv[]) {
- menu(head);
- return 0;
- }
- void menu(PNODE head) {
- int k;
- printf("\n1. Add konez in list.");
- printf("\n2. Add nachalo in list.");
- printf("\n3. Print a list.");
- printf("\n4. Sort a list.");
- printf("\n5. Delete data.");
- printf("\n6. Exit.\n\t");
- do {
- scanf("%i", &k);
- switch (k) {
- case 1 :
- head = Add_list(head);
- menu(head);
- case 2 :
- Add_nachalo();
- menu(head);
- case 3 :
- Print(head);
- menu(head);
- case 4 :
- sort(head);
- Print(head);
- menu(head);
- case 5 :
- Delete();
- Print(head);
- menu(head);
- case 6 :
- exit(0);
- }
- } while (k);
- }
- PNODE Add_list(PNODE h){
- int i=1;
- do{
- PNODE p = (PNODE)malloc(sizeof(struct Node));
- PNODE r;
- if (h == NULL) {
- printf (" New record\n\n");
- printf("\nNew FIO: ");
- fflush(stdin);
- gets(p->fio, 21);
- if (p->fio[0] == '\0') return h;
- printf("Waybill number: ");
- scanf("%d", &p->number);
- printf("New date: ");
- fflush(stdin);
- gets(p->data, 11);
- printf("New summa: ");
- scanf("%i", &p->summa);
- p->next = NULL;
- p->prev = NULL;
- h = p;
- } else {
- r = (PNODE)malloc(sizeof(struct Node));
- r = h;
- while (r->next != NULL) r = r->next;
- printf (" New record\n\n");
- printf("\nNew FIO: ");
- fflush(stdin);
- gets(p->fio, 21);
- if (p->fio[0] == '\0') return h;
- printf("New number: ");
- scanf("%d", &p->number);
- printf("New date: ");
- fflush(stdin);
- gets(p->data, 11);
- printf("New summa: ");
- scanf("%i", &p->summa);
- r->next = p;
- p->prev = r;
- p->next = NULL;
- }
- }while(i==1);
- return h;
- }
- void Add_nachalo(void){
- PNODE g;
- g = NULL;
- if(!lost) head = Add_list(head);
- g = (PNODE)malloc(sizeof(struct Node));
- if(!g) return ;
- g->next = lost;
- g->prev = lost->prev;
- lost->prev = g;
- if(g->prev){
- g->prev->next =g;
- }else{
- head = g;
- printf (" New record\n\n");
- printf("\nNew FIO: ");
- fflush(stdin);
- gets(g->fio, 21);
- printf("New number: ");
- scanf("%d", &g->number);
- printf("New date: ");
- fflush(stdin);
- gets(g->data, 11);
- printf("New summa: ");
- scanf("%i", &g->summa);
- }
- return;
- }
- void Print(PNODE h) {
- PNODE CurNode = h;
- int k = 0;
- if (CurNode == NULL) return;
- printf (" Print a list\n");
- printf ("----------------------------------------------------------------------------\n");
- printf ("| Number | Data | Summa | FIO |\n");
- printf ("----------------------------------------------------------------------------\n");
- while (CurNode != NULL) {
- if (k++) printf("\n");
- printf("|%8i", CurNode->number);
- printf("|%12s|", CurNode->data);
- printf("%13i|", CurNode->summa);
- printf("%38s|\n", CurNode->fio);
- CurNode = CurNode->next;
- printf("----------------------------------------------------------------------------");
- }
- return;
- }
- void sort(PNODE start) {
- PNODE tmp;
- PNODE a;
- int _number;
- int _summa;
- char _data[11];
- char _fio[21];
- int flag = 1;
- if (start == NULL) return;
- while (flag == 1) {
- tmp = start;
- 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(_data, 11, tmp->data);
- strcpy_s(tmp->data, 11, a->data);
- strcpy_s(a->data, 11, _data);
- strcpy_s(_fio, 21, tmp->fio);
- strcpy_s(tmp->fio, 21, a->fio);
- strcpy_s(a->fio, 21, _fio);
- flag = 1;
- }
- tmp = tmp->next;
- a = a->next;
- }
- }
- }
- void Delete(void)
- {
- PNODE g, l, j;
- g = NULL;
- g = head;
- j = (PNODE)malloc(sizeof(struct Node));
- _clrscr();
- getchar();
- printf ("Enter date: \n");
- gets(j->data);
- if(g == NULL){
- printf("Spisok pust.\n"); return;
- }
- if(j->data == g->data){
- if(g == head){
- if (head->next == NULL){
- head = NULL;
- lost = NULL;
- }else{
- head = g->next;
- head->prev = NULL;
- }
- }else{
- l = g->next;
- g = g->prev;
- g->next = l;
- if(l != NULL)
- l->prev = g;
- if(l == NULL)
- lost = g ;
- }
- }
- g = g->next;
- free(j);
- Print(head);
- }
Advertisement
Add Comment
Please, Sign In to add comment