286 lines
10 KiB
C
286 lines
10 KiB
C
|
/*
|
|||
|
Program: file-records-adds-drops-v1.c (Report comments/bugs to chikh@yuntech.edu.tw)
|
|||
|
Function: <EFBFBD>u<EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>c<EFBFBD>P<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>k<EFBFBD>v<EFBFBD>ĥ|<EFBFBD><EFBFBD><EFBFBD>@<EFBFBD>~<EFBFBD>Ѧҵ{<EFBFBD><EFBFBD><EFBFBD>X<EFBFBD>A<EFBFBD>n<EFBFBD>D<EFBFBD><EFBFBD><EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>{<EFBFBD><EFBFBD><EFBFBD>w<EFBFBD>qstudent<EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD>A<EFBFBD>ΥH<EFBFBD>ظm<EFBFBD>@<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>h<EFBFBD><EFBFBD><EFBFBD>ǥͪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Z<EFBFBD><EFBFBD><EFBFBD>ơA<EFBFBD>èϥ<EFBFBD>head<EFBFBD>Ptail
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>Ф<EFBFBD><EFBFBD>O<EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
Notes: 1) <EFBFBD><EFBFBD><EFBFBD>{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<EFBFBD><EFBFBD><EFBFBD>V<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>F<EFBFBD>٫o<EFBFBD>ѼƶǨӶǥh<EFBFBD>l<EFBFBD>ͪ<EFBFBD><EFBFBD>Ӹ`<EFBFBD>x<EFBFBD>Z<EFBFBD>A<EFBFBD>ŧihead<EFBFBD>Btail<EFBFBD>Ptotal(<EFBFBD>`<EFBFBD>I
|
|||
|
<EFBFBD>Ӽ<EFBFBD>)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼơA<EFBFBD>H<EFBFBD>D<EFBFBD><EFBFBD><EFBFBD>n
|
|||
|
2) <EFBFBD><EFBFBD>head<EFBFBD>Ptail<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܼơA<EFBFBD><EFBFBD><EFBFBD>{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD>]showAll()<EFBFBD>BsortName()<EFBFBD>BsortEng()<EFBFBD>BsortMath()
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>禡<EFBFBD>ǤJhead<EFBFBD>ơA<EFBFBD>H<EFBFBD>Q<EFBFBD>P<EFBFBD>ǵo<EFBFBD>Q<EFBFBD>Ѽƶǻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Φ<EFBFBD>
|
|||
|
3) <EFBFBD>Y<EFBFBD><EFBFBD>head<EFBFBD>Ptail<EFBFBD>ŧi<EFBFBD><EFBFBD>main()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD>ܼơA<EFBFBD>P<EFBFBD>Ǥ]<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD>p<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>T<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
4) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>sscanf()<EFBFBD><EFBFBD><EFBFBD>Ϊk<EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۦѮv<EFBFBD><EFBFBD><EFBFBD>z<EFBFBD><EFBFBD><EFBFBD>@<EFBFBD>g<EFBFBD>N<EFBFBD>u<EFBFBD><EFBFBD> http://ccckmit.wikidot.com/cp:sscanf
|
|||
|
*/
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdlib.h> /* for malloc(), calloc() */
|
|||
|
#include <string.h> /* for strcmp() */
|
|||
|
#include <conio.h> /* for getche() */
|
|||
|
|
|||
|
typedef struct student student;
|
|||
|
struct student {
|
|||
|
char name[24];
|
|||
|
int eng, math;
|
|||
|
student *prev;
|
|||
|
student *next;
|
|||
|
} *head, *tail, dummy;
|
|||
|
|
|||
|
int total = 0;
|
|||
|
|
|||
|
void traceBack(student *tail) /* <20>q<EFBFBD>Y<EFBFBD>ܧ<EFBFBD><DCA7><EFBFBD><EFBFBD>ܨC<DCA8>@<40>Ӹ`<60>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>e */
|
|||
|
{
|
|||
|
student *ptr; /* <20><><EFBFBD>V<EFBFBD>C<EFBFBD>@<40>`<60>I<EFBFBD>ҥΪ<D2A5><CEAA><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
printf("\n<EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>ܾǥͬ<C7A5><CDAC><EFBFBD><EFBFBD>p<EFBFBD>U<EFBFBD>G\n");
|
|||
|
for (ptr = tail; ptr != NULL; ptr = ptr->prev)
|
|||
|
printf("%s\t%d\t%d\n",ptr->name,ptr->eng,ptr->math);
|
|||
|
}
|
|||
|
|
|||
|
void showAll(student *head, student *tail) /* <20><><EFBFBD>ܦ<EFBFBD><DCA6>C<EFBFBD><43><EFBFBD>C<EFBFBD>@<40>Ӹ`<60>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>e */
|
|||
|
{
|
|||
|
student *ptr; /* <20><><EFBFBD>V<EFBFBD>C<EFBFBD>@<40>`<60>I<EFBFBD>ҥΪ<D2A5><CEAA><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
|
|||
|
printf("<EFBFBD>ǥ<EFBFBD>\t\t<EFBFBD>^<5E><>\t<EFBFBD>ƾ<EFBFBD>\n---------------+-------+-----\n");
|
|||
|
for (ptr = head; ptr != NULL; ptr = ptr->next)
|
|||
|
printf("%s\t%d\t%d\n",ptr->name,ptr->eng,ptr->math);
|
|||
|
|
|||
|
traceBack(tail);
|
|||
|
}
|
|||
|
|
|||
|
/* <20>ǤJ<C7A4>Ƭ<DEBC><C6AC>@<40><><EFBFBD>r<EFBFBD><72>(Ĵ<>pSteve Jobs 50 60)<29>A<EFBFBD>q<EFBFBD><71><EFBFBD>Ѩ<EFBFBD><D1A8>m<EFBFBD>W<EFBFBD>B<EFBFBD>^<5E><><EFBFBD>B<EFBFBD>ƾǬ즨<C7AC>Z<EFBFBD><5A>
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>ƧΦ<EFBFBD><EFBFBD>s<EFBFBD>`<EFBFBD>I<EFBFBD>A<EFBFBD>ç<EFBFBD><EFBFBD>`<EFBFBD>I<EFBFBD>[<EFBFBD>J<EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD>վ<EFBFBD>tail) */
|
|||
|
void addRecord(char line[], int showEntireList)
|
|||
|
{
|
|||
|
char name[24], str[24];
|
|||
|
student *ptr = tail;
|
|||
|
|
|||
|
//tail = tail->next = (student *)malloc(sizeof(student)); //<2F>Ыطs<D8B7>`<60>I<EFBFBD>һݪŶ<DDAA><C5B6>A<EFBFBD>æ<EFBFBD><C3A6><EFBFBD>tail<69>ҫ<EFBFBD><D2AB><EFBFBD><EFBFBD>ǥͬ<C7A5><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>᪺<EFBFBD><E1AABA><EFBFBD><EFBFBD>
|
|||
|
tail = tail->next = (student *)calloc(1,sizeof(student));
|
|||
|
tail->prev = ptr;
|
|||
|
|
|||
|
while (1) {
|
|||
|
if (sscanf(line,"%[A-Za-z.] %[^\n]",str,line) == 0) { /* Ū<><C5AA><EFBFBD>j<EFBFBD>p<EFBFBD>g<EFBFBD>r<EFBFBD><72><EFBFBD>Υy<CEA5>I<EFBFBD>զ<EFBFBD><D5A6><EFBFBD><EFBFBD>^<5E><><EFBFBD>W<EFBFBD>r<EFBFBD>AŪ<41>Jstr<74>A<EFBFBD>Ĥ@<40>Ӫťդ<C5A5><D5A4>᪺<EFBFBD>Ҧ<EFBFBD><D2A6>r<EFBFBD><72><EFBFBD>]<5D><>line */
|
|||
|
sscanf(line,"%d %d",&tail->eng,&tail->math);
|
|||
|
break;
|
|||
|
}
|
|||
|
sprintf(tail->name,tail->name[0]=='\0'? "%s%s": "%s %s",tail->name,str); /* Ū<>쪺<EFBFBD>^<5E><><EFBFBD>W<EFBFBD>[<5B>Jtail<69><6C><EFBFBD>Щҫ<D0A9><D2AB>`<60>I<EFBFBD><49>name<6D><65><EFBFBD>줧<EFBFBD><ECA4A7> */
|
|||
|
}
|
|||
|
tail->next = NULL;
|
|||
|
total++; /* <20>`<60>I<EFBFBD>ӼƼW1 */
|
|||
|
if (showEntireList) { //<2F>q<EFBFBD>Y<EFBFBD><59><EFBFBD>ܦ<EFBFBD><DCA6>C<EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
printf("\n<EFBFBD>W<EFBFBD>[<5B>@<40><><EFBFBD><EFBFBD><EFBFBD>ơG%s\t%d\t%d\n\n",tail->name,tail->eng,tail->math);
|
|||
|
showAll(head,tail);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* <20>ǤJ<C7A4>Ƭ<DEBC><C6AC>@<40><><EFBFBD>r<EFBFBD><72>(Ĵ<>pSteve Jobs 50 60)<29>A<EFBFBD>N<EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>W(<28><><EFBFBD><EFBFBD><EFBFBD>^<5E><><EFBFBD>B<EFBFBD>ƾǬ즨<C7AC>Z)<29>ǥH
|
|||
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>_<EFBFBD><EFBFBD><EFBFBD>W<EFBFBD>r<EFBFBD>۲Ū<EFBFBD>(<EFBFBD>ؼ<EFBFBD>)<EFBFBD>`<EFBFBD>I<EFBFBD>A<EFBFBD>Y<EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>Ӹ`<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>e<EFBFBD><EFBFBD><EFBFBD>`<EFBFBD>I<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>_<EFBFBD><EFBFBD> */
|
|||
|
void deleteRecord(char line[])
|
|||
|
{
|
|||
|
char fullName[24] = {0}, str[24];
|
|||
|
student *ptr;
|
|||
|
int score;
|
|||
|
|
|||
|
while (1) {
|
|||
|
if (sscanf(line,"%[a-zA-Z.] %[^\n]",str,line) == 0) break;
|
|||
|
sprintf(fullName,fullName[0]=='\0'? "%s%s" : "%s %s",fullName,str); //sprintf(fullName,fullName[0]=='\0'? "%s%s " : "%s %s ",fullName,str);
|
|||
|
}
|
|||
|
|
|||
|
for (ptr = head; ptr != NULL; ptr = ptr->next)
|
|||
|
if (!strcmp(ptr->name,fullName)) break; /* <20><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>ߧY<DFA7><59><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD><6A> */
|
|||
|
|
|||
|
if (ptr != NULL) { /* ptr<74><72><EFBFBD><EFBFBD><EFBFBD>šA<C5A1>N<EFBFBD><4E><EFBFBD>o<EFBFBD>{<7B>ؼ<EFBFBD> */
|
|||
|
if (ptr->prev==NULL) { /* <20>Y<EFBFBD>N<EFBFBD>Q<EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD>`<60>I<EFBFBD>O<EFBFBD><4F><EFBFBD>C<EFBFBD>Y<EFBFBD>A<EFBFBD>h<EFBFBD>վ<EFBFBD>head<61><64><EFBFBD>ؼФU<D0A4>@<40>`<60>I */
|
|||
|
head = ptr->next;
|
|||
|
head->prev = NULL;
|
|||
|
}
|
|||
|
else {
|
|||
|
ptr->prev->next = ptr->next; /* <20><><EFBFBD>e<EFBFBD>@<40>`<60>I<EFBFBD>P<EFBFBD>ؼФU<D0A4>@<40>`<60>I<EFBFBD><49><EFBFBD>s<EFBFBD>_<EFBFBD><5F>(¶<>L<EFBFBD>ؼи`<60>I) */
|
|||
|
if (ptr != tail)
|
|||
|
ptr->next->prev = ptr->prev; /* <20>U<EFBFBD>@<40>`<60>I<EFBFBD><49>prev<65><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>V<EFBFBD>e<EFBFBD>@<40>`<60>I */
|
|||
|
else
|
|||
|
tail = ptr->prev;
|
|||
|
}
|
|||
|
printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@<40><><EFBFBD><EFBFBD><EFBFBD>ơG%s\t%d\t%d\n\n",ptr->name,ptr->eng,ptr->math);
|
|||
|
free(ptr); /* <20>R<EFBFBD><52><EFBFBD>ؼи`<60>I<EFBFBD>Ҧ<EFBFBD><D2A6>Ŷ<EFBFBD> */
|
|||
|
total--; /* <20>`<60>I<EFBFBD>ӼƤ<D3BC>1 */
|
|||
|
showAll(head,tail);
|
|||
|
}
|
|||
|
else
|
|||
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(%s)<29>b<EFBFBD><62><EFBFBD>ƪ<EFBFBD><C6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>b\n",fullName);
|
|||
|
}
|
|||
|
|
|||
|
/* <20>ǤJ<C7A4>Ƭ<DEBC><C6AC><EFBFBD><EFBFBD>C<EFBFBD>}<7D>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>P<EFBFBD><50><EFBFBD>ް}<7D>CindexName[]<5D><><EFBFBD>_<EFBFBD>l<EFBFBD><6C><EFBFBD>}<7D>A<EFBFBD><41><EFBFBD>禡<EFBFBD>N<EFBFBD>H<EFBFBD>m<EFBFBD><6D>(last name)<29>@<40><><EFBFBD>ƧǨ̾<C7A8> */
|
|||
|
int sortName(student *head, student *indexName[]) /* <20>Ь<EFBFBD>Ū<EFBFBD>ĤG<C4A4>椸<EFBFBD><E6A4B8><EFBFBD>u<EFBFBD>ƲߡGC<47>y<EFBFBD><79><EFBFBD>}<7D>C<EFBFBD>v<EFBFBD><76><EFBFBD>q<EFBFBD><71>62-67<36><37><EFBFBD><EFBFBD><EFBFBD>e */
|
|||
|
{
|
|||
|
int i, j;
|
|||
|
char lastName[20], nextLastName[20], firstName[20];
|
|||
|
student *ptr, *temp;
|
|||
|
|
|||
|
for (i = 0, ptr = head; ptr != NULL; i++, ptr = ptr->next)
|
|||
|
indexName[i] = ptr; /* indexName[i]<5D>O<EFBFBD>s<EFBFBD><73><EFBFBD>C<EFBFBD><43>i<EFBFBD>`<60>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>}<7D>A<EFBFBD>N<EFBFBD>Ǧ<EFBFBD><C7A6>i<EFBFBD><69><EFBFBD>Ƨ<EFBFBD> */
|
|||
|
|
|||
|
for (i = 0; i < total-1; i++) /* <20><><EFBFBD>w<EFBFBD>ƧǪk */
|
|||
|
for (j = 0; j < total-i-1; j++) {
|
|||
|
sscanf(indexName[j]->name,"%s %s %s",lastName,lastName,lastName);
|
|||
|
sscanf(indexName[j+1]->name,"%s %s %s",nextLastName,nextLastName,nextLastName);
|
|||
|
if (strcmp(lastName,nextLastName) > 0) { /* <20>Y<EFBFBD><59>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D> > <20><>j+1<><31><EFBFBD><EFBFBD><EFBFBD>m<EFBFBD><6D><EFBFBD>A<EFBFBD>h<EFBFBD>洫 */
|
|||
|
temp = indexName[j];
|
|||
|
indexName[j] = indexName[j+1];
|
|||
|
indexName[j+1] = temp;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/* <20>ǤJ<C7A4>Ƭ<DEBC><C6AC><EFBFBD><EFBFBD>C<EFBFBD>}<7D>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>P<EFBFBD><50><EFBFBD>ް}<7D>CindexEng[]<5D><><EFBFBD>_<EFBFBD>l<EFBFBD><6C><EFBFBD>}<7D>A<EFBFBD>N<EFBFBD>H<EFBFBD>^<5E>妨<EFBFBD>Z<EFBFBD><5A><EFBFBD>C<EFBFBD>@<40><><EFBFBD>ƧǨ̾ڡF
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>禡<EFBFBD>B<EFBFBD>@<EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>P<EFBFBD>W<EFBFBD><EFBFBD>sortName()<EFBFBD>ۦP */
|
|||
|
int sortEng(student *head, student *indexEng[])
|
|||
|
{
|
|||
|
int i, j;
|
|||
|
student *ptr, *temp;
|
|||
|
|
|||
|
for (i = 0, ptr = head; ptr != NULL; ptr = ptr->next)
|
|||
|
indexEng[i++] = ptr; /* indexEng[i]<5D>O<EFBFBD>s<EFBFBD><73><EFBFBD>C<EFBFBD><43>i<EFBFBD>`<60>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>}<7D>A<EFBFBD>N<EFBFBD>Ǧ<EFBFBD><C7A6>i<EFBFBD><69><EFBFBD>Ƨ<EFBFBD> */
|
|||
|
|
|||
|
for (i = 0; i < total-1; i++) /* <20><><EFBFBD>w<EFBFBD>ƧǪkagain */
|
|||
|
for (j = 0; j < total-i-1; j++)
|
|||
|
if (indexEng[j]->eng < indexEng[j+1]->eng) { /* <20>Y<EFBFBD><59>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>^<5E>妨<EFBFBD>Z < <20><>j+1<><31><EFBFBD><EFBFBD><EFBFBD>^<5E>妨<EFBFBD>Z<EFBFBD>A<EFBFBD>h<EFBFBD>洫 */
|
|||
|
temp = indexEng[j];
|
|||
|
indexEng[j] = indexEng[j+1];
|
|||
|
indexEng[j+1] = temp;
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
/* <20>ǤJ<C7A4>Ƭ<DEBC><C6AC><EFBFBD><EFBFBD>C<EFBFBD>}<7D>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}<7D>P<EFBFBD><50><EFBFBD>ް}<7D>CindexMath[]<5D><><EFBFBD>_<EFBFBD>l<EFBFBD><6C><EFBFBD>}<7D>A<EFBFBD><41><EFBFBD>禡<EFBFBD>N<EFBFBD>H<EFBFBD>ƾǦ<C6BE><C7A6>Z<EFBFBD><5A><EFBFBD>C<EFBFBD>@<40><><EFBFBD>ƧǨ̾ڡF
|
|||
|
<EFBFBD><EFBFBD><EFBFBD>禡<EFBFBD>B<EFBFBD>@<EFBFBD><EFBFBD><EFBFBD>z<EFBFBD>P<EFBFBD>W<EFBFBD><EFBFBD>sortEng()<EFBFBD>ۦP */
|
|||
|
int sortMath(student *head, student *indexMath[])
|
|||
|
{
|
|||
|
int i, j;
|
|||
|
student *ptr, *temp;
|
|||
|
|
|||
|
for (i = 0, ptr = head; ptr != NULL; i++, ptr = ptr->next)
|
|||
|
indexMath[i] = ptr; /* indexMath[i]<5D>O<EFBFBD>s<EFBFBD><73><EFBFBD>C<EFBFBD><43>i<EFBFBD>`<60>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD>}<7D>A<EFBFBD>N<EFBFBD>Ǧ<EFBFBD><C7A6>i<EFBFBD><69><EFBFBD>Ƨ<EFBFBD> */
|
|||
|
|
|||
|
for (i = 0; i < total-1; i++) /* <20><><EFBFBD>w<EFBFBD>ƧǪkagain */
|
|||
|
for (j = 0; j < total-i-1; j++)
|
|||
|
if (indexMath[j]->math < indexMath[j+1]->math) { /* <20>Y<EFBFBD><59>j<EFBFBD><6A><EFBFBD><EFBFBD><EFBFBD>ƾǦ<C6BE><C7A6>Z < <20><>j+1<><31><EFBFBD><EFBFBD><EFBFBD>ƾǦ<C6BE><C7A6>Z<EFBFBD>A<EFBFBD>h<EFBFBD>洫 */
|
|||
|
temp = indexMath[j];
|
|||
|
indexMath[j] = indexMath[j+1];
|
|||
|
indexMath[j+1] = temp;
|
|||
|
}
|
|||
|
|
|||
|
return 1;
|
|||
|
}
|
|||
|
|
|||
|
void queryUser(student *head, student *indexName[], student *indexEng[], student *indexMath[])
|
|||
|
{
|
|||
|
int i, n;
|
|||
|
int engSorted = 0, mathSorted = 0; /* <20><><EFBFBD>O<EFBFBD><4F><EFBFBD><EFBFBD><EFBFBD>^<5E><><EFBFBD><EFBFBD><EFBFBD>ƧǻP<C7BB>ƾǬ<C6BE><C7AC>ƧǬO<C7AC>_<EFBFBD>w<EFBFBD><77><EFBFBD><EFBFBD><EFBFBD>L */
|
|||
|
|
|||
|
while (1) {
|
|||
|
printf("\n**************************************************************************************\n" \
|
|||
|
"* 1 <20>H<EFBFBD>m<EFBFBD><6D><EFBFBD>Ƨ<EFBFBD> 2 <20>H<EFBFBD>^<5E><><EFBFBD>Ƨ<EFBFBD> 3 <20>^<5E><><EFBFBD><EFBFBD>n<EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD> 4 <20>H<EFBFBD>ƾDZƧ<C7B1> 5 <20>ƾDz<C6BE>n<EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD> 0 <20><><EFBFBD><EFBFBD> *\n" \
|
|||
|
"**************************************************************************************\n" \
|
|||
|
"<EFBFBD><EFBFBD><EFBFBD>ܱN<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>@<40><><EFBFBD>\\<EFBFBD><EFBFBD><EFBFBD>H(0--5) ==> ");
|
|||
|
switch (getche()) {
|
|||
|
case '1':
|
|||
|
printf("\n\n<EFBFBD>H<EFBFBD>m<EFBFBD><EFBFBD><EFBFBD>Ƨǵ<EFBFBD><EFBFBD>G<EFBFBD>p<EFBFBD>U<EFBFBD>G\n");
|
|||
|
sortName(head,indexName);
|
|||
|
for (i = 0; i < total; i++)
|
|||
|
printf("%s\t%d\t%d\n",indexName[i]->name,indexName[i]->eng,indexName[i]->math);
|
|||
|
break;
|
|||
|
case '2':
|
|||
|
printf("\n\n<EFBFBD>H<EFBFBD>^<5E>妨<EFBFBD>Z<EFBFBD>Ƨǵ<C6A7><C7B5>G<EFBFBD>p<EFBFBD>U<EFBFBD>G\n");
|
|||
|
engSorted = sortEng(head,indexEng);
|
|||
|
for (i = 0; i < total; i++)
|
|||
|
printf("%s\t%d\t%d\n",indexEng[i]->name,indexEng[i]->eng,indexEng[i]->math);
|
|||
|
break;
|
|||
|
case '3':
|
|||
|
if (!engSorted)
|
|||
|
printf("\n<EFBFBD>|<7C><><EFBFBD>H<EFBFBD>^<5E><><EFBFBD>즨<EFBFBD>Z<EFBFBD><5A><EFBFBD>C<EFBFBD>@<40>ƧǡA<C7A1>Х<EFBFBD><D0A5><EFBFBD><EFBFBD><EFBFBD>\'2\'<EFBFBD>\\<EFBFBD><EFBFBD>\n");
|
|||
|
else {
|
|||
|
printf("\n<EFBFBD>d<EFBFBD>߭^<5E><><EFBFBD><EFBFBD>n<EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>ơA<C6A1><41><EFBFBD>Jn (1-%d) ==> ",total);
|
|||
|
scanf("%d",&n);
|
|||
|
printf("<EFBFBD>^<5E><><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>̡G%s\t%d\t%d\n",n,indexEng[n-1]->name,indexEng[n-1]->eng,indexEng[n-1]->math);
|
|||
|
}
|
|||
|
break;
|
|||
|
case '4':
|
|||
|
printf("\n\n<EFBFBD>H<EFBFBD>ƾǦ<EFBFBD><EFBFBD>Z<EFBFBD>Ƨǵ<EFBFBD><EFBFBD>G<EFBFBD>p<EFBFBD>U<EFBFBD>G\n");
|
|||
|
mathSorted = sortMath(head,indexMath);
|
|||
|
for (i = 0; i < total; i++)
|
|||
|
printf("%s\t%d\t%d\n",indexMath[i]->name,indexMath[i]->eng,indexMath[i]->math);
|
|||
|
break;
|
|||
|
case '5':
|
|||
|
if (!mathSorted)
|
|||
|
printf("\n<EFBFBD>|<7C><><EFBFBD>H<EFBFBD>ƾǬ즨<C7AC>Z<EFBFBD><5A><EFBFBD>C<EFBFBD>@<40>ƧǡA<C7A1>Х<EFBFBD><D0A5><EFBFBD><EFBFBD><EFBFBD>\'4\'<EFBFBD>\\<EFBFBD><EFBFBD>\n");
|
|||
|
else {
|
|||
|
printf("\n<EFBFBD>d<EFBFBD>ƾDz<EFBFBD>n<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơA<EFBFBD><EFBFBD><EFBFBD>Jn (1-%d) ==> ",total);
|
|||
|
scanf("%d",&n);
|
|||
|
printf("<EFBFBD>ƾDz<EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD>̡G%s\t%d\t%d\n",n,indexMath[n-1]->name,indexMath[n-1]->eng,indexMath[n-1]->math);
|
|||
|
}
|
|||
|
break;
|
|||
|
case '0':
|
|||
|
return;
|
|||
|
default:
|
|||
|
printf("<EFBFBD><EFBFBD><EFBFBD>Ī<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܬ<EFBFBD>0--5<>A<EFBFBD>Э<EFBFBD><D0AD>s<EFBFBD><73><EFBFBD>J\n");
|
|||
|
system("pause");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
int i;
|
|||
|
char line[120], mode; /* mode<64>Ω<EFBFBD><CEA9>Ϥ<EFBFBD><CFA4>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD>ƪ<EFBFBD><C6AA>u<EFBFBD>@<40>Ҧ<EFBFBD> */
|
|||
|
|
|||
|
tail = &dummy; /* dummy<6D><79><EFBFBD>Ȯɥγ~<7E><><EFBFBD>`<60>I<EFBFBD>A<EFBFBD>ɤJ<C9A4><4A><EFBFBD>`<60>I<EFBFBD>N<EFBFBD>ϱotail<69><6C>head<61><64><EFBFBD>l<EFBFBD>B<EFBFBD>@<40>קK<D7A7>X<EFBFBD><58><EFBFBD>A<EFBFBD>P<EFBFBD>ǥi<C7A5>z<EFBFBD>ѳo<D1B3>˼g<CBBC>P<EFBFBD>A<EFBFBD><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>k<EFBFBD><6B><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>O? */
|
|||
|
|
|||
|
FILE *inputFile;/* <20><><EFBFBD>J<EFBFBD>ɮצb<D7A6>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><4E> */
|
|||
|
if ((inputFile=fopen("YunTechStudents.txt","r")) == NULL) { /* <20>]<5D>w<EFBFBD>}<7D>ɼҦ<C9BC><D2A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>γ~<7E>A<EFBFBD>˵<EFBFBD><CBB5>ɮץi<D7A5>_<EFBFBD>}<7D>ҡA<D2A1>Yinput<75><74><EFBFBD>šA<C5A1>N<EFBFBD><4E><EFBFBD>ɮפ<C9AE><D7A4>s<EFBFBD>b */
|
|||
|
printf("<EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>ɤ<EFBFBD><EFBFBD>s<EFBFBD>b\n");
|
|||
|
exit(1); /* <20>h<EFBFBD>X<EFBFBD>{<7B><> */
|
|||
|
}
|
|||
|
|
|||
|
for (i = 0; i < 4; i++) fgets(line,120,inputFile); /* <20><><EFBFBD>J<EFBFBD><4A><EFBFBD>ɶ}<7D>Y<EFBFBD><59><EFBFBD>|<7C>C<EFBFBD><43><EFBFBD>r<EFBFBD><72><EFBFBD>Ʊ<EFBFBD> */
|
|||
|
while (fgets(line,120,inputFile) != NULL) { /* <20><>IJ<EFBFBD><C4B2><EFBFBD>ɮץ<C9AE><D7A5>ݡA<DDA1>N<EFBFBD><4E><EFBFBD>|<7C><><EFBFBD><EFBFBD><EFBFBD>ƥiŪ<69><C5AA><EFBFBD>A<EFBFBD><41><EFBFBD>ưj<C6B0>餺<EFBFBD>ʧ@ */
|
|||
|
//Ū<><C5AA><EFBFBD>@<40><><EFBFBD>C<EFBFBD><43><EFBFBD>e<EFBFBD>A<EFBFBD>s<EFBFBD>Jline<6E>r<EFBFBD><72><EFBFBD>ܼƤ<DCBC><C6A4><EFBFBD>
|
|||
|
if (!strcmp(line,"**************************************\n")) break; /* <20>wŪ<77><C5AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>u<EFBFBD>A<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD>@<40>B<EFBFBD>z<EFBFBD>Ҧ<EFBFBD> */
|
|||
|
addRecord(line,0); //Ū<><C5AA><EFBFBD>쪺<EFBFBD><ECAABA><EFBFBD>C<EFBFBD><43><EFBFBD>e(Ĵ<>pSteve Jobs 50 60)<29><><EFBFBD><EFBFBD>addRecord()<29>Ѩ<EFBFBD><D1A8>J<EFBFBD><4A><EFBFBD>C<EFBFBD>Ffalse<73>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ݱq<DDB1>Y<EFBFBD><59><EFBFBD>ܦ<EFBFBD><DCA6>C<EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
printf("<EFBFBD>Ĥ@<40><><EFBFBD>q<EFBFBD><71><EFBFBD><EFBFBD>Ū<EFBFBD><C5AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>@<40><>%d<><64><EFBFBD>O<EFBFBD><4F>\n\n",total);
|
|||
|
head = dummy.next; /* <20>w<EFBFBD><77>head<61><64><EFBFBD>Vdummy.next<78>ҫ<EFBFBD><D2AB>`<60>I */
|
|||
|
head->prev = NULL;
|
|||
|
showAll(head,tail);
|
|||
|
|
|||
|
printf("\n<EFBFBD>H<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>J<EFBFBD>ɮ<EFBFBD>\"<EFBFBD><EFBFBD><EFBFBD>j<EFBFBD>u\"<EFBFBD>H<EFBFBD>W<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơA<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><EFBFBD><EFBFBD>}<7D>l<EFBFBD>W<EFBFBD><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ...\n"); //system("pause");
|
|||
|
getche();
|
|||
|
|
|||
|
while (fgets(line,120,inputFile) != NULL) {
|
|||
|
sscanf(line,"%c %[^\n]s",&mode,line); /* Ū<><C5AA>'+'<27><>'-'<27>]<5D>Jmode<64>ܼƤ<DCBC><C6A4>A<EFBFBD>ɩw<C9A9><77><EFBFBD>P<EFBFBD><50><EFBFBD>B<EFBFBD>z<EFBFBD>Ҧ<EFBFBD> */
|
|||
|
if (mode == '+') /* <20>W<EFBFBD>[<5B><><EFBFBD><EFBFBD> */
|
|||
|
addRecord(line,1); /* <20><><EFBFBD>Cline<6E>ܼƥ<DCBC><C6A5><EFBFBD>addRecord()<29>Ѩ<EFBFBD><D1A8>һݸ<D2BB><DDB8>ơA<C6A1>ñq<C3B1>Y<EFBFBD><59><EFBFBD>ܦ<EFBFBD><DCA6>C<EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
else if (mode == '-') /* <20>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
deleteRecord(line); /* line<6E>ҧt<D2A7>m<EFBFBD>W<EFBFBD>N<EFBFBD><4E>deleteRecord()<29><><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>Y<EFBFBD>s<EFBFBD>b<EFBFBD><62><EFBFBD><EFBFBD><EFBFBD>C<EFBFBD>A<EFBFBD>N<EFBFBD><4E><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñq<C3B1>Y<EFBFBD><59><EFBFBD>ܦ<EFBFBD><DCA6>C<EFBFBD>Ҧ<EFBFBD><D2A6><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
else
|
|||
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>O<EFBFBD>Asorry :(\n");
|
|||
|
}
|
|||
|
fclose(inputFile);
|
|||
|
|
|||
|
student *indexName[100], *indexEng[100], *indexMath[100]; /* <20><><EFBFBD>쪺<EFBFBD><ECAABA><EFBFBD>ް}<7D>C<EFBFBD>A<EFBFBD>w<EFBFBD>]<5D>i<EFBFBD>O100<30>Ӹ`<60>I<EFBFBD><49><EFBFBD>} */
|
|||
|
/* <20>Y<EFBFBD><59><EFBFBD>Q<EFBFBD>ϥΦp<CEA6>W<EFBFBD>T<EFBFBD>w<EFBFBD><77><EFBFBD>ת<EFBFBD><D7AA>}<7D>C<EFBFBD>A<EFBFBD>i<EFBFBD><69><EFBFBD><EFBFBD>total<61>ƭȤ<C6AD><C8A4>t<EFBFBD><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӽƪ<D3BC><C6AA>}<7D>C<EFBFBD>A<EFBFBD><41><EFBFBD>Яd<D0AF>N<EFBFBD><4E><EFBFBD>U<EFBFBD>g<EFBFBD>k */
|
|||
|
/*
|
|||
|
student **indexName = (student **)malloc(total*sizeof(student *)),
|
|||
|
**indexEng = (student **)malloc(total*sizeof(student *)),
|
|||
|
**indexMath = (student **)malloc(total*sizeof(student *));
|
|||
|
*/
|
|||
|
|
|||
|
queryUser(head,indexName,indexEng,indexMath); /* <20><><EFBFBD>ͥ\<5C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A<EFBFBD>è̿ﶵ<CCBF><EFB6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\<5C><> */
|
|||
|
printf("<EFBFBD>{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ABye<79><65>\n");
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|