parent
aba3fd8650
commit
8cacdf1171
@ -0,0 +1,199 @@
|
||||
#include<stdio.h>
|
||||
#include<string.h>
|
||||
#include<stdlib.h>
|
||||
#define N 100
|
||||
|
||||
struct stu_info
|
||||
{
|
||||
char num[20];
|
||||
char cls[20];
|
||||
char name[20];
|
||||
float math,physics,english,total; struct stu_info* prev;
|
||||
struct stu_info* next;
|
||||
};
|
||||
|
||||
struct stu_info stu[N];
|
||||
int top=0;
|
||||
struct stu_info *head=NULL;
|
||||
struct stu_info *tail=NULL;
|
||||
|
||||
void print_menu()
|
||||
{
|
||||
printf("1.input\n");
|
||||
printf("2.delete\n");
|
||||
printf("3.select\n");
|
||||
printf("4.order\n");
|
||||
printf("5.output\n");
|
||||
printf("6.quit\n");
|
||||
printf("please input your option\n");
|
||||
}
|
||||
|
||||
void print()
|
||||
{
|
||||
struct stu_info* p=head;
|
||||
while (p!=NULL)
|
||||
{
|
||||
printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n",p->num,p->cls,p->name,p->math,p->physics,p->english,p->total);
|
||||
p=p->next;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void input()
|
||||
{
|
||||
char op[20];
|
||||
struct stu_info* p=NULL;
|
||||
while(1)
|
||||
{
|
||||
p=(struct stu_info *)malloc(sizeof(struct stu_info));
|
||||
if (head==NULL)
|
||||
{
|
||||
head=p;
|
||||
}
|
||||
//p->num = (char *)malloc(sizeof(char) * 20);
|
||||
//p->cls = (char *)malloc(sizeof(char) * 20);
|
||||
//p->name = (char *)malloc(sizeof(char) * 20);
|
||||
printf("Id ");
|
||||
scanf("%s",p->num);
|
||||
printf("class ");
|
||||
scanf("%s",p->cls);
|
||||
printf("name ");
|
||||
scanf("%s",p->name);
|
||||
printf("score1 ");
|
||||
scanf("%f",&p->math);
|
||||
printf("score2 ");
|
||||
scanf("%f",&p->physics);
|
||||
printf("score3 ");
|
||||
scanf("%f",&p->english);
|
||||
p->total=p->math+p->physics+p->english;
|
||||
p->prev=tail;
|
||||
p->next=NULL;
|
||||
if(p!=head) tail->next=p;
|
||||
tail=p;
|
||||
printf("continue?\n");
|
||||
do{
|
||||
scanf("%s",op);
|
||||
}while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0);
|
||||
if(strcmp(op,"no")==0) return;
|
||||
}
|
||||
}
|
||||
|
||||
void del()
|
||||
{
|
||||
struct stu_info* p=head;
|
||||
char key[20],op[20];
|
||||
while(1)
|
||||
{
|
||||
p=head;
|
||||
scanf("%s",key);
|
||||
while(p!=NULL)
|
||||
{
|
||||
if(strcmp(p->num,key)==0||strcmp(p->name,key)==0)
|
||||
{
|
||||
if(p==head) head=p->next;
|
||||
else (p->prev)->next=p->next;
|
||||
(p->next)->prev=p->prev;
|
||||
}
|
||||
p=p->next;
|
||||
}
|
||||
print();
|
||||
printf("continue?\n");
|
||||
do{
|
||||
scanf("%s",op);
|
||||
}while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0);
|
||||
if(strcmp(op,"no")==0) return;
|
||||
}
|
||||
}
|
||||
|
||||
void slc()
|
||||
{
|
||||
int flag;
|
||||
struct stu_info* p=head;
|
||||
char key[20],op[20];
|
||||
while(1)
|
||||
{
|
||||
flag=0;p=head;
|
||||
scanf("%s",key);
|
||||
while(p!=NULL)
|
||||
{
|
||||
if(strcmp(p->num,key)==0||strcmp(p->cls,key)==0)
|
||||
{
|
||||
flag=1;
|
||||
printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n",p->num,p->cls,p->name,p->math,p->physics,p->english,p->total);
|
||||
}
|
||||
p=p->next;
|
||||
}
|
||||
if(!flag)
|
||||
{
|
||||
printf("there is no eligible student\n");
|
||||
return;
|
||||
}
|
||||
printf("continue?\n");
|
||||
do{
|
||||
scanf("%s",op);
|
||||
}while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0);
|
||||
if(strcmp(op,"no")==0) return;
|
||||
}
|
||||
}
|
||||
|
||||
void order()
|
||||
{
|
||||
struct stu_info* p=tail;
|
||||
struct stu_info* q=head;
|
||||
struct stu_info* tmp=NULL;
|
||||
while(p!=NULL)
|
||||
{
|
||||
q=head;
|
||||
while(q!=p)
|
||||
{
|
||||
if(strcmp((q)->cls,(q->next)->cls)==1||strcmp((q)->cls,(q->next)->cls)==0&&((q)->total<(q->next)->total))
|
||||
{
|
||||
if(p==q->next) p=q;
|
||||
if(head==q) head=q->next;
|
||||
else (q->prev)->next=q->next;
|
||||
if(tail==q->next) tail=q;
|
||||
else ((q->next)->next)->prev=q;
|
||||
tmp=q->next;
|
||||
q->next=tmp->next;
|
||||
tmp->prev=q->prev;
|
||||
tmp->next=q;
|
||||
q->prev=tmp;
|
||||
}
|
||||
else q=q->next;
|
||||
}
|
||||
p=p->prev;
|
||||
}
|
||||
print();
|
||||
return;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int op;
|
||||
while(1)
|
||||
{
|
||||
print_menu();
|
||||
scanf("%d",&op);
|
||||
switch(op)
|
||||
{
|
||||
case(1):
|
||||
input();
|
||||
break;
|
||||
case(2):
|
||||
del();
|
||||
break;
|
||||
case(3):
|
||||
slc();
|
||||
break;
|
||||
case(4):
|
||||
order();
|
||||
break;
|
||||
case(5):
|
||||
print();
|
||||
break;
|
||||
case(6):
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue