
Новичок
Профиль
Группа: Участник
Сообщений: 28
Регистрация: 24.5.2007
Репутация: нет Всего: нет
|
ладно, раз никто не смог помочь дописал сам, и успешно сдал в УПИ, студентам 2 курса в помощь на следующий год | Код | #include <stdio.h> #include <stdlib.h> #include <string.h> struct databs { char fname[30]; // familia char name[30]; // imya char pname[30]; //Otchestvo char gid[10]; //Gruppa int les1,les2,les3,les4,les5; //ocenki struct databs *next; struct databs *prior; }; struct databs *start; struct databs *last; struct databs *find(char *); int i;
void enter(void), search(void), save(void),search_2(void); void load(void), list(void); void mldelete(struct databs **, struct databs **); void dls_store(struct databs *i, struct databs **start, struct databs **last); void inputs(char *, char *, int), display(struct databs *); int menu_select(void); int main(void) { start=last=NULL; for(i = 1; i >0; i ++){ switch(menu_select()) { case 1: enter(); break; case 2: mldelete(&start, &last); break; case 3: list(); break; case 4: search(); break; case 5: save(); break; case 6: load(); break; case 7: hvost(); break; case 8: botanrate(); break; case 9: exit(0); } } return 0; } int menu_select(void){ char s[80]; int c; printf("\n\n Lab_2.3 all-in-one. Final Release!\n\n Take one: \n"); printf("1. Enter DATA\n"); printf("2. Delete DATA\n"); printf("3. Print DATA via console\n"); printf("4. Try to search\n"); printf("5. Backup it!\n"); printf("6. Restore data\n"); printf("7. Losers \n"); printf("8. Percent of GOOD\n"); printf("9. Exit\n"); do { printf("\n Type here >>: "); gets(s); c=atoi(s); } while(c<0 || c>9); return c; } void enter(void){ struct databs *info; char c_tmp[5]; for(i = 1; i >0; i ++){ info=(struct databs *)malloc(sizeof(struct databs)); if(!info) { printf("\n Not enough memory"); return; } inputs("Family Name: ", info->fname, 30); if(!info->fname[0]) break; inputs("Name: ", info->name, 30); //m inputs("Otchestvo )): ", info->pname, 30); //a inputs("Group ID: ", info->gid, 10); inputs("Lesson 1 Rate: ", c_tmp, 5); info->les1 = atoi(c_tmp); //d inputs("Lesson 2 Rate: ", c_tmp, 5); info->les2 = atoi(c_tmp); inputs("Lesson 3 Rate: ", c_tmp, 5); info->les3 = atoi(c_tmp); //e inputs("Lesson 4 Rate: ", c_tmp, 5); info->les4 = atoi(c_tmp); inputs("Lesson 5 Rate: ", c_tmp, 5); info->les5 = atoi(c_tmp); dls_store(info, &start, &last); //by } } void inputs(char *prompt, char *s, int count) { char p[255]; do { printf(prompt); fgets(p, 254, stdin); //Penkov if(strlen(p)>count) printf("\ Too much chars\n"); }while(strlen(p)>count); p[strlen(p)-1]=0; strcpy(s, p); //Anton } void dls_store(struct databs *i, struct databs **start, struct databs **last) { struct databs *old, *p; if(*last==NULL){ i->next=NULL; i->prior=NULL; *last=i; *start=i; return; } p=*start; old=NULL; while(p) { if(strcmp(p->name, i->name)<0) { old=p; p=p->next; }else{ if(p->prior){ p->prior->next=i; i->next=p; i->prior=p->prior; p->prior=i; return; } i->next=p; i->prior=NULL; p->prior=i; *start=i; return; } } old->next=i; i->next=NULL; i->prior=old; *last=i; } void mldelete(struct databs **start, struct databs **last) { struct databs *info; char s[80]; inputs("Type Family Name for Delete owner DATA: ", s, 30); info=find(s); if(info) { if(*start==info) { *start=info->next; if(*start) (*start)->prior=NULL; else *last=NULL; } else { info->prior->next=info->next; if(info!=*last) info->next->prior=info->prior; else *last=info->prior; } free(info); } } struct databs *find( char *fname) { struct databs *info; info=start; while(info) { if(!strcmp(fname, info->fname)) return info; info=info->next; } printf("Can't find DATA for this Family Name\n"); return NULL; } void list(void) { struct databs *info; char str[100]; info=start; while(info) { printf(info->fname); printf("\n"); printf(info->name); printf("\n"); printf(info->pname); printf("\n"); printf(info->gid); printf("\n"); itoa(info->les1, str, 10); printf(str); printf("\n"); itoa(info->les2, str, 10); printf(str); printf("\n"); itoa(info->les3, str, 10); printf(str); printf("\n"); itoa(info->les4, str, 10); printf(str); printf("\n"); itoa(info->les5, str, 10); printf(str); printf("\n");
//display(info); //SP945 (25013uk) info=info->next; } printf("\n\n"); } int hvost(void){ struct databs *info; info=start; while(info) { //display(info); if( (info->les1 < 3) || (info->les2 < 3) ||(info->les3 < 3) ||(info->les4 < 3) ||(info->les5 < 3)){ printf(info->fname); } info=info->next; } printf("\n\n"); return true; } int botanrate(void){ struct databs *info; int totalcount; int botancount; char str[20]; totalcount=0; botancount=0; info=start; while(info) { if((info->les1 > 3) && (info->les2 > 3) && (info->les3 > 3) && (info->les4 > 3) && (info->les5 > 3)){ botancount ++; } totalcount ++; info=info->next; } itoa(botancount, str, 10); printf( str ); printf( "good \n" ); itoa(totalcount, str, 10); printf( str ); printf( "total \n" ); ultoa( botancount * 100 / totalcount, str, 10); printf( str ); printf( "% \n\n" ); return atoi(str); } void display(struct databs *info){ printf("%s\n", info->fname); printf("%s\n", info->name); printf("%s\n", info->pname); printf("%s\n", info->gid); printf("%s\n", info->les1); printf("%s\n", info->les2); printf("%s\n", info->les3); printf("%s\n", info->les4); printf("%s\n", info->les5); printf("\n\n"); } void search(void) { char fname[40]; struct databs *info; printf("Type Family Name:> "); gets(fname); info=find(fname); if(!info) printf("Result: 0. Try later\n"); else printf(info->fname); } void save(void) { struct databs *info; FILE *fp; fp=fopen("data.dat","wb"); if(!fp) { printf("Unable to open file.\n"); exit(1); } printf("\nSaving file...\n"); info=start; while(info) { fwrite(info, sizeof(struct databs), 1, fp); info=info->next; } fclose(fp); } void load() { struct databs *info; FILE *fp; fp=fopen("data.dat","rb"); if(!fp) { printf("Unable to open file.\n"); exit(1); } while(start) { info=start->next; free(info); start=info; } start=last=NULL; printf("\nLoad from file............ done\n"); while(!feof(fp)) { info=(struct databs *) malloc(sizeof(struct databs)); if(!info) { printf("No Such Free Memory"); return; } if(1 != fread(info, sizeof(struct databs), 1, fp)) break; dls_store(info, &start, &last); } fclose(fp); }
|
|