Data_Structure/作業/unit4/老師解答/file-records-adds-drops-v1.c

286 lines
10 KiB
C
Raw Permalink Normal View History

2025-01-20 21:30:53 +08:00
/*
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><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><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;
}