è¿ä¸è¥¿ãããç»5åããæ¯å¨å°äºç¹å§ãã200åé½æ²¡äººååï¼
æ以ååäºä¸ä¸ªï¼ä½ æ®åçæ¹äºç¨ä¸ä¸å§ã
/*头æ件*/
#include <stdio.h>
#include<dos.h>
#include<stdlib.h> /*å
¶å®è¯´æ*/
#include<string.h> /*å符串å½æ°*/
#include<mem.h> /*å
åæä½å½æ°*/
#include<ctype.h> /*å符æä½å½æ°*/
#include<alloc.h> /*å¨æå°ååé
å½æ°*/
#define LEN sizeof(STUDENT)
typedef struct stu /*å®ä¹ç»æä½æ°ç»ç¨äºç¼åæ°æ®*/
{char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*å½æ°åå*/
STUDENT *init(); /*åå§åå½æ°*/
int menu_select(); /*èåå½æ°*/
STUDENT *create(); /*å建é¾è¡¨*/
void print(STUDENT *head); /* æ¾ç¤ºå
¨é¨è®°å½*/
void search(STUDENT *head); /*æ¥æ¾è®°å½*/
STUDENT *delete(STUDENT *head); /*å é¤è®°å½*/
STUDENT *sort(STUDENT *head); /*æåº*/
STUDENT *insert(STUDENT *head,STUDENT *new); /*æå
¥è®°å½*/
void save(STUDENT *head); /*ä¿åæ件*/
STUDENT *load(); /*读æ件*/
/*主å½æ°çé¢*/
main()
{STUDENT *head,new;
head=init(); /*é¾è¡¨åå§å,使headçå¼ä¸ºNULL*/
for(;;) /*循ç¯æ é次*/
{switch(menu_select())
{
case 1:head=create();break;
case 2:print(head);break;
case 3:search(head);break;
case 4:head=delete(head);break;
case 5:head=sort(head);break;
case 6:head=insert(head,&new);break; /*&new表示è¿åå°å*/
case 7:save(head);break;
case 8:head=load(); break;
case 9:exit(0); /*å¦èåè¿åå¼ä¸º9åç¨åºç»æ*/
}
}
}
/*åå§åå½æ°*/
STUDENT *init()
{
return NULL; /*è¿å空æé*/
}
/*èåéæ©å½æ°*/
menu_select()
{int n;
struct date d; /*å®ä¹æ¶é´ç»æä½*/
getdate(&d); /*读åç³»ç»æ¥æ并æå®æ¾å°ç»æä½dä¸*/
printf("\næä»»ä¸é®è¿å
¥ä¸»èå...... \npress any key to enter the menu......"); /*æä»»ä¸é®è¿å
¥ä¸»èå*/
getch(); /*ä»é®ç读åä¸ä¸ªå符,ä½ä¸æ¾ç¤ºäºå±å¹*/
clrscr(); /*æ¸
å±*/
printf("********************************************************************************\n");
printf("\t\t æ¬¢è¿ Welcome to\n");
printf("\n\t\t\t 使ç¨å¦ç管çç³»ç»1.0\n\n\t\t\t\t\t-----------æ¯çä¸å¦è®¡ç®æºç»WJQ\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. è¾å
¥å¦çæç»©è®°å½ Enter the record\n"); /*è¾å
¥å¦çæ绩记å½*/
printf("\t\t\t2. æ¾ç¤º Print the record\n"); /*æ¾ç¤º*/
printf("\t\t\t3. å¯»æ¾ Search record on name\n"); /*寻æ¾*/
printf("\t\t\t4. å é¤ Delete a record\n"); /*å é¤*/
printf("\t\t\t5. æåº Sort to make new a file\n"); /*æåº*/
printf("\t\t\t6. æå
¥ Insert record to list\n"); /*æå
¥*/
printf("\t\t\t7. ä¿å Save the file\n"); /*ä¿å*/
printf("\t\t\t8. 读å Load the file\n"); /*读å*/
printf("\t\t\t9. éåº Quit\n"); /*éåº*/
printf("\n\t\t å¶ä½å´ä¿éWJQ Made by Wu Junqiu.\n");
printf("********************************************************************************\n");
printf("\t\t\t\tå½åç³»ç»æ¥æ:%d\\%d\\%d\n",d.da_year,d.da_mon,d.da_day); /*æ¾ç¤ºå½åç³»ç»æ¥æ*/
do{
printf("\n\t\t\tè¾å
¥ä½ çéæ©Enter your choice(1~9):");
scanf("%d",&n);
}while(n<1||n>9); /*å¦æéæ©é¡¹ä¸å¨1~9ä¹é´åéè¾*/
return(n); /*è¿åéæ©é¡¹ï¼ä¸»å½æ°æ ¹æ®è¯¥æ°è°ç¨ç¸åºçå½æ°*/
}
/*è¾å
¥å½æ°*/
STUDENT *create()
{int i,s;
STUDENT *head=NULL,*p; /* å®ä¹å½æ°.æ¤å½æ°å¸¦åä¸ä¸ªæåé¾è¡¨å¤´çæé*/
clrscr();
for(;;)
{p=(STUDENT *)malloc(LEN); /*å¼è¾ä¸ä¸ªæ°çåå
*/
if(!p) /*å¦ææép为空*/
{printf("\nè¾åºå
å溢åº. Out of memory."); /*è¾åºå
å溢åº*/
return (head); /*è¿å头æé,ä¸å*/
}
printf("è¾å
¥å¦å·Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*å¦æå¦å·é¦å符为0åç»æè¾å
¥*/
printf("è¾å
¥ååEnter the name:");
scanf("%s",p->name);
printf("请è¾å
¥3é¨æ绩Please enter the %d scores\n",3); /*æ示å¼å§è¾å
¥æ绩*/
s=0; /*计ç®æ¯ä¸ªå¦ççæ»åï¼åå¼ä¸º0*/
for(i=0;i<3;i++) /*3é¨è¯¾ç¨å¾ªç¯3次*/
{
do{
printf("æ绩score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*ç¡®ä¿æ绩å¨0~100ä¹é´*/
printf("æ°æ®é误,请éæ°è¾å
¥ Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*ç´¯å åé¨æ绩*/
}
p->sum=s; /*å°æ»åä¿å*/
p->average=(float)s/3; /*å
ç¨å¼ºå¶ç±»å转æ¢å°s转æ¢æfloatå,åæ±å¹³åå¼*/
p->order=0; /*æªæåºåæ¤å¼ä¸º0*/
p->next=head; /*å°å¤´ç»ç¹å为æ°è¾å
¥ç»ç¹çå继ç»ç¹*/
head=p; /*æ°è¾å
¥ç»ç¹ä¸ºæ°ç头ç»ç¹*/
}
return(head);
}
/* æ¾ç¤ºå
¨é¨è®°å½å½æ°*/
void print(STUDENT *head)
{int i=0; /* ç»è®¡è®°å½æ¡æ°*/
STUDENT *p; /*移å¨æé*/
clrscr();
p=head; /*åå¼ä¸ºå¤´æé*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*æ¥æ¾è®°å½å½æ°*/
void search(STUDENT *head)
{STUDENT *p; /* 移å¨æé*/
char s[5]; /*åæ¾å§åç¨çå符æ°ç»*/
clrscr();
printf("请è¾å
¥ä¸ªå§åæ¥æ¥æ¾. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*å°å¤´æéèµç»p*/
while(strcmp(p->name,s) && p != NULL) /*å½è®°å½çå§åä¸æ¯è¦æ¾çï¼ææéä¸ä¸ºç©ºæ¶*/
p=p->next; /*移å¨æéï¼æåä¸ä¸ç»ç¹*/
if(p!=NULL) /*å¦ææéä¸ä¸ºç©º*/
{printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n没æ该å¦ç There is no num %s student on the list.\n",s); /*æ¾ç¤ºæ²¡æ该å¦ç*/
}
/*å é¤è®°å½å½æ°*/
STUDENT *delete(STUDENT *head)
{int n;
STUDENT *p1,*p2; /*p1为æ¥æ¾å°è¦å é¤çç»ç¹æéï¼p2为å
¶å驱æé*/
char c,s[6]; /*s[6]ç¨æ¥åæ¾å¦å·,cç¨æ¥è¾å
¥åæ¯*/
clrscr();
printf("请è¾å
¥è¦å é¤çå¦å· Please enter the deleted num: ");
scanf("%s",s);
p1=p2=head; /*ç»p1åp2èµåå¼å¤´æé*/
while(strcmp(p1->num,s) && p1 != NULL) /*å½è®°å½çå¦å·ä¸æ¯è¦æ¾çï¼ææéä¸ä¸ºç©ºæ¶*/
{p2=p1; /*å°p1æéå¼èµç»p2ä½ä¸ºp1çå驱æé*/
p1=p1->next; /*å°p1æéæåä¸ä¸æ¡è®°å½*/
}
if(strcmp(p1->num,s)==0) /*å¦å·æ¾å°äº*/
{printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\næ¯å¦è¦å é¤,è¾å
¥Yå é¤,Nåéåº\nAre you sure to delete the student Y/N ?"); /*æ示æ¯å¦è¦å é¤,è¾å
¥Yå é¤,Nåéåº*/
for(;;)
{scanf("%c",&c);
if(c=='n'||c=='N') break; /*å¦æä¸å é¤,åè·³åºæ¬å¾ªç¯*/
if(c=='y'||c=='Y')
{
if(p1==head) /*è¥p1==headï¼è¯´æ被å ç»ç¹æ¯é¦ç»ç¹*/
head=p1->next; /*æ第äºä¸ªç»ç¹å°åèµäºhead*/
else
p2->next=p1->next; /*å¦åå°ä¸ä¸ç»ç¹å°åèµç»åä¸ç»ç¹å°å*/
n=n-1;
printf("\nå¦å·ä¸º(Num): %s å¦ç以被å é¤(student have been deleted.)\n",s);
printf("å«å¿äºä¿å. Don't forget to save.\n");break; /*å é¤å就跳åºå¾ªç¯*/
}
}
}
else
printf("\n没æè¿ä¸ªå¦çå¨è¡¨ä¸\nThere is no num %s student on the list.\n",s); /*æ¾ä¸å°è¯¥ç»ç¹*/
return(head);
}
/*æåºå½æ°*/
STUDENT *sort(STUDENT *head)
{int i=0; /*ä¿åå次*/
STUDENT *p1,*p2,*t,*temp; /*å®ä¹ä¸´æ¶æé*/
temp=head->next; /*å°å表ç头æéææçä¸ä¸ä¸ªç»ç¹ä½å¤´æé*/
head->next=NULL; /*第ä¸ä¸ªç»ç¹ä¸ºæ°è¡¨ç头ç»ç¹*/
while(temp!=NULL) /*å½å表ä¸ä¸ºç©ºæ¶ï¼è¿è¡æåº*/
{
t=temp; /*åå表ç头ç»ç¹*/
temp=temp->next; /*å表头ç»ç¹æéå移*/
p1=head; /*设å®ç§»å¨æép1ï¼ä»å¤´æéå¼å§*/
p2=head; /*设å®ç§»å¨æép2å为p1çå驱ï¼åå¼ä¸ºå¤´æé*/
while(t->average<p1->average&&p1!=NULL) /*ä½æ绩平ååæ¯è¾*/
{
p2=p1; /*å¾
æåºç¹å¼å°ï¼åæ°è¡¨æéå移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2ï¼è¯´æå¾
æåºç¹å¼å¤§ï¼åºæå¨é¦ä½*/
{
t->next=p1; /*å¾
æåºç¹çå继为p*/
head=t; /*æ°å¤´ç»ç¹ä¸ºå¾
æåºç¹*/
}
else /*å¾
æåºç¹åºæå
¥å¨ä¸é´æ个ä½ç½®p2åp1ä¹é´ï¼å¦p为空åæ¯å°¾é¨*/
{
t->next=p1; /*tçå继æ¯p1*/
p2->next=t; /*p2çå继æ¯t*/
}
}
p1=head; /*å·²æ好åºç头æéèµç»p1ï¼åå¤å¡«åå次*/
while(p1!=NULL) /*å½p1ä¸ä¸ºç©ºæ¶ï¼è¿è¡ä¸åæä½*/
{
i++; /*ç»ç¹åºå·*/
p1->order=i; /*å°ç»ç¹åºå·èµå¼ç»å次*/
p1=p1->next; /*æéå移*/
}
printf("æåºæå Sorting is sucessful.\n"); /*æåºæå*/
return (head);
}
/*æå
¥è®°å½å½æ°*/
STUDENT *insert(STUDENT *head,STUDENT *new)
{STUDENT *p0,*p1,*p2;
int n,sum1,i;
p1=head; /*使p1æå第ä¸ä¸ªç»ç¹*/
p0=new; /*p0æåè¦æå
¥çç»ç¹*/
printf("\nPlease enter a new record.\n"); /*æ示è¾å
¥è®°å½ä¿¡æ¯*/
printf("è¾å
¥å¦å·Enter the num:");
scanf("%s",new->num);
printf("è¾å
¥ååEnter the name:");
scanf("%s",new->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*ä¿åæ°è®°å½çæ»åï¼åå¼ä¸º0*/
for(i=0;i<3;i++)
{
do{
printf("æ绩score%d:",i+1);
scanf("%d",&new->score[i]);
if(new->score[i]>100||new->score[i]<0)
printf("æ°æ®é误Data error,please enter again.\n");
}while(new->score[i]>100||new->score[i]<0);
sum1=sum1+new->score[i]; /*ç´¯å åé¨æ绩*/
}
new->sum=sum1; /*å°æ»ååå
¥æ°è®°å½ä¸*/
new->average=(float)sum1/3;
new->order=0;
if(head==NULL) /*åæ¥çé¾è¡¨æ¯ç©ºè¡¨*/
{head=p0;p0->next=NULL;} /*使p0æåçç»ç¹ä½ä¸ºå¤´ç»ç¹*/
else
{while((p0->average<p1->average)&&(p1->next!=NULL))
{p2=p1; /*使p2æååæp1æåçç»ç¹*/
p1=p1->next; /*p1å移ä¸ä¸ªç»ç¹*/
}
if(p0->average>=p1->average)
{if(head==p1)head=p0; /*æå°åæ¥ç¬¬ä¸ä¸ªç»ç¹ä¹å*/
else p2->next=p0; /*æå°p2æåçç»ç¹ä¹å*/
p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;} /*æå°æåçç»ç¹ä¹å*/
}
n=n+1; /*ç»ç¹æ°å 1*/
head=sort(head); /*è°ç¨æåºçå½æ°,å°å¦çæ绩éæ°æåº*/
printf("\nå¦çStudent %s 已被æ´æ°have been inserted.\n",new->name);
printf("ä¸è¦å¿äºä¿åDon't forget to save the new file.\n");
return(head);
}
/*ä¿åæ°æ®å°æ件å½æ°*/
void save(STUDENT *head)
{FILE *fp; /*å®ä¹æåæ件çæé*/
STUDENT *p; /* å®ä¹ç§»å¨æé*/
char outfile[10];
printf("è¾åºæ件ä¾å¦:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为è¾åºæå¼ä¸ä¸ªäºè¿å¶æ件,为åªåæ¹å¼*/
{
printf("æä¸å¼æ件Cannot open the file\n");
return; /*è¥æä¸å¼åè¿åèå*/
}
printf("\nä¿åä¸...Saving the file......\n");
p=head; /*移å¨æéä»å¤´æéå¼å§*/
while(p!=NULL) /*å¦pä¸ä¸ºç©º*/
{
fwrite(p,LEN,1,fp); /*åå
¥ä¸æ¡è®°å½*/
p=p->next; /*æéå移*/
}
fclose(fp); /*å
³éæ件*/
printf("ä¿åæå....Save the file successfully!\n");
}
/* ä»æ件读æ°æ®å½æ°*/
STUDENT *load()
{STUDENT *p1,*p2,*head=NULL; /*å®ä¹è®°å½æéåé*/
FILE *fp; /* å®ä¹æåæ件çæé*/
char infile[10];
printf("åå
¥æ件ä¾å¦:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*æå¼ä¸ä¸ªäºè¿å¶æ件ï¼ä¸ºåªè¯»æ¹å¼*/
{
printf("æä¸å¼æ件Can not open the file.\n");
return(head);
}
printf("\n寻æ¾æ件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*å¼è¾ä¸ä¸ªæ°åå
*/
if(!p1)
{
printf("å
å溢åº!Out of memory!\n");
return(head);
}
head=p1; /*ç³è¯·å°ç©ºé´ï¼å°å
¶ä½ä¸ºå¤´æé*/
while(!feof(fp)) /*循ç¯è¯»æ°æ®ç´å°æ件尾ç»æ*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*å¦æ没读å°æ°æ®ï¼è·³åºå¾ªç¯*/
p1->next=(STUDENT *)malloc(LEN); /*为ä¸ä¸ä¸ªç»ç¹å¼è¾ç©ºé´*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2æååæp1æåçç»ç¹*/
p1=p1->next; /*æéå移ï¼æ°è¯»å
¥æ°æ®é¾å°å½å表尾*/
}
p2->next=NULL; /*æåä¸ä¸ªç»ç¹çå继æé为空*/
fclose(fp);
printf("\nä½ æåçä»æ件ä¸è¯»åäºæ°æ®!\nYou have success to read data from the file!\n");
return (head);
}
温馨提示:答案为网友推荐,仅供参考