diff --git a/学生成绩管理系统.cpp b/学生成绩管理系统.cpp new file mode 100644 index 0000000..e07baa4 --- /dev/null +++ b/学生成绩管理系统.cpp @@ -0,0 +1,332 @@ +#include +#include +#include +#include +#define len sizeof(struct grade) +struct grade +{ +char id[10]; +char clas[10]; +char name[20]; +float score1; +float score2; +float score3; +float score; +struct grade *next; +struct grade *prev; +}; +void print() +{ + int i; + for(i=1;i<=30;i++) + { + printf(" "); + } +}; +void menu(struct grade *head,struct grade *tail) +{ + void student1(struct grade *head); + void delet(struct grade *head,struct grade *tail); + void printgrade(struct grade *head,struct grade *tail); + void selecty(struct grade *head,struct grade *tail); + void arra(struct grade *head,struct grade *tail); + char c; + print(); + printf("1.input\n"); + print(); + printf("2.delete\n"); + print(); + printf("3.select\n"); + print(); + printf("4.order\n"); + print(); + printf("5.output\n"); + print(); + printf("6.quit\n"); + printf("please input your option\n"); + scanf("%s",&c); + switch(c) + { + case'1':student1(head);break; + case'2':delet(head,tail);break; + case'3':selecty(head,tail);break; + case'4':arra(head,tail);break; + case'5':printgrade(head,tail);break; + case'6':break; + default:printf("Wrong input"); + return; + } +} +void printgrade1(struct grade *p) +{ + printf("%s,",p->id); + printf("%s,",p->clas); + printf("%s,",p->name); + printf("%4.1f,",p->score1); + printf("%4.1f,",p->score2); + printf("%4.1f,",p->score3); + printf("%5.1f",p->score); + printf("\n"); +} +void printgrade(struct grade *head,struct grade *tail) +{ + if(head==NULL) + { + printf("error!\n"); + menu(head,tail); + return; + } + else + { + struct grade *p=head; + while(p->next!=NULL) + { + printgrade1(p); + p=p->next; + } + printgrade1(tail); + printf("\n"); + menu(head,tail); + return; + } +} +void judge(struct grade *head,struct grade *tail,struct grade *next,struct grade *prev,struct grade *pres) +{ + bool judgechar(char str1[],char str2[]); + void student2(struct grade *head,struct grade *tail,struct grade *next,struct grade *prev,struct grade *pres); + char s[3],s1[10]="yes"; + printf("countinue?\n"); + scanf("%s",s); + if(judgechar(s,s1)) + {student2(head,tail,next,prev,pres); + return;} + else + {menu(head,tail); + return;} +} +void fill(struct grade *p) +{ + printf("id: "); + scanf("%s",(*p).id); + printf("class: "); + scanf("%s",(*p).clas); + printf("name: "); + scanf("%s",(*p).name); + printf("score1: "); + scanf("%f",&(*p).score1); + printf("score2: "); + scanf("%f",&(*p).score2); + printf("score3: "); + scanf("%f",&(*p).score3); + p->score=p->score1+p->score2+p->score3; +} +void student1(struct grade *head) +{ + void student2(struct grade *head,struct grade *tail,struct grade *next,struct grade *prev,struct grade *pres); + struct grade *p,*tail; + p=(struct grade *)malloc(len); + fill(p); + p->next=NULL; + p->prev=NULL; + head=p; + tail=p; + judge(head,tail,(*p).next,(*p).prev,p); + return; +} +void student2(struct grade *head,struct grade *tail,struct grade *next,struct grade *prev,struct grade *pres) +{ + struct grade *p,*q=pres; + p=(struct grade *)malloc(len); + fill(p); + q->next=p; + p->next=NULL; + p->prev=q; + tail=p; + judge(head,tail,next,prev,p); + return; +} +bool judgechar(char str1[],char str2[]) +{ + int Len=strlen(str2),i,m=1; + for(i=0;i<=Len-1;i++) + { + if(str1[i]!=str2[i]) + { + m=0; + break; + } + } + if(m==1) + return true; + else + return false; +} +void delet(struct grade *head,struct grade *tail) +{ + if(head==NULL||head->next==NULL) + { + printf("error!\n"); + menu(head,tail); + return; + } + else + { + char str[256],str1[10],str2[10]="yes"; + struct grade *p=head->next; + printf("The student you want to delete: "); + scanf("%s",str); + if(judgechar(head->id,str)||judgechar(head->name,str)) + { + struct grade *p1; + p1=head->next; + free(head); + head=p1; + } + else + { + if(judgechar(tail->id,str)||judgechar(tail->name,str)) + { + struct grade *p1; + (*(tail->prev)).next=NULL; + p1=tail->prev; + free(tail); + tail=p1; + } + else + { + while(p->next!=NULL) + { + if(judgechar(p->id,str)||judgechar(p->name,str)) + { + (*(p->prev)).next=p->next; + (*(p->next)).prev=p->prev; + free(p); + break; + } + else + p=p->next; + } + } + } + printf("Do you want to delete anymore?\n"); + scanf("%s",str1); + if(judgechar(str1,str2)) + { + if(head->next==NULL) + { + printf("error!\n"); + menu(head,tail); + return; + } + else + { + delet(head,tail); + return; + } + } + else + { + printgrade(head,tail); + return; + } + } +} +void swap1(char str1[],char str2[]) +{ + char str[100]; + strcpy(str,str2); + strcpy(str2,str1); + strcpy(str1,str); +} +void swap(struct grade *p,struct grade *q) +{ + int temp; + swap1(p->id,q->id); + swap1(p->name,q->name); + swap1(p->clas,q->clas); + temp=q->score1; + q->score1=p->score1; + p->score1=temp; + temp=q->score2; + q->score2=p->score2; + p->score2=temp; + temp=q->score3; + q->score3=p->score3; + p->score3=temp; + temp=q->score; + q->score=p->score; + p->score=temp; +} +void arra(struct grade *head,struct grade *tail) +{ + struct grade *p,*q; + if(head==NULL) + { + printf("error!\n"); + menu(head,tail); + return; + } + else + { + for(p=head;p->next!=NULL;p=p->next) + { + if(p->next==tail) + { + if(tail->score>p->score) + swap(p,tail); + } + else + { + for(q=p->next;q->next!=NULL;q=q->next) + { + if(q->score>p->score) + swap(p,q); + } + if(tail->score>p->score) + swap(p,tail); + } + } + printgrade(head,tail); + return; + } +} +void selecty(struct grade *head,struct grade *tail) +{ + struct grade *p; + char str[100]; + int m=0; + if(head==NULL) + { + printf("error!\n"); + menu(head,tail); + return; + } + else + { + printf("Who do you want to inquire: "); + scanf("%s",str); + for(p=head;p->next!=NULL;p=p->next) + { + if(judgechar(p->id,str)||judgechar(p->name,str)) + { + printgrade1(p); + m++; + menu(head,tail); + } + } + if(judgechar(tail->id,str)||judgechar(tail->name,str)) + { + printgrade1(tail); + m++; + menu(head,tail); + } + if(m==0) + printf("there is no eligible student\n"); + return; +} +} +int main() +{ struct grade *head=NULL,*tail; + menu(head,tail); + return 0; +}