📄 成绩查询系统.txt
字号:
#include <stdio.h>
#define LEN sizeof(student)
typedef struct stu
{
char number[20];
char name[20];
int achievement[3];
int sum;
float average;
struct stu *next;
}student;
student *init();
int menu_select();
student *create();
void print(student *head);
void search(student *head);
student *sort(student *head);
student *insert(student *head,student *new);
void save(student *head);
main()
{
student *head,new;
head = init();
for(;;)
{
switch(menu_select())
{
case 1:
head=create();
break;
case 2:
print(head);
break;
case 3:
search(head);
break;
case 4:
head=sort(head);
break;
case 5:
head=insert(head,&new);
break;
case 6:
save(head);
break;
case 7:
exit(0);
}
}
}
student *init()
{
return NULL;
}
menu_select()
{
int n;
printf(" $***************************************************************$\n");
printf(" & Student performance management system &\n");
printf(" $***************************************************************$\n");
printf(" & 1. Enter the student data 2. Print the student data &\n");
printf(" $ $\n");
printf(" & 3. Search student data on name 4. Sort to make new a file &\n");
printf(" $ $\n");
printf(" & 5. Insert one student data 6. Save the student data &\n");
printf(" $ $\n");
printf(" & 7. out &\n");
printf(" $***************************************************************$\n");
do
{
printf("\n\t\t\tEnter your choice(1~7):");
scanf("%d",&n);
}
while(n<1||n>7) ;
return(n);
}
student *create()
{
int i,s;
student *head=NULL,*p;
clrscr();
for(;;)
{
p=(student *)malloc(LEN);
if(!p)
{
printf("\nOut of memory.");
return (head);
}
printf("Please enter the student number(0:list end):");
scanf("%s",p->number);
if(p->number[0]=='0') break;
printf("Please enter the student name:");
scanf("%s",p->name);
printf("Please enter the student %d achievements\n",3);
s=0;
for(i=0;i<3;i++)
{
do{
printf("achievement%d:",i+1);
scanf("%d",&p->achievement[i]);
if(p->achievement[i]<0 || p->achievement[i]>100)
printf("Data error,please enter again.\n");
}while(p->achievement[i]<0 || p->achievement[i]>100);
s=s+p->achievement[i];
}
p->sum=s;
p->average=(float)s/3;
p->next=head;
head=p;
}
return(head);
}
void print(student *head)
{
int i = 0;
student *p;
clrscr();
p = head;
printf(" *****************************************************************************\n");
printf(" * Student data *\n");
printf(" *****************************************************************************\n");
printf(" *Rec| Number | Name |Achievement1|Achievement2|Achievement3| Average *\n");
printf(" *****************************************************************************\n");
while(p!=NULL)
{
i++;
printf(" *%3d|%8s| %-8s | %3d | %3d | %3d | %4.2f *\n",
i, p->number,p->name,p->achievement[0],p->achievement[1],p->achievement[2],p->average);
p = p->next;
}
printf(" *****************************************************************************\n");
printf("\n");
printf("\n");
}
void search(student *head)
{
student *p;
char s[20];
clrscr();
printf("Please enter the student name for searching.\n");
scanf("%s",s);
p = head;
while(strcmp(p->name,s) && p != NULL)
p = p->next;
if(p!=NULL)
{
printf(" *************************************************************************\n");
printf(" * Number | Name |Achievement1|Achievement2|Achievement3| Average *\n");
printf(" *************************************************************************\n");
printf(" *%8s| %-8s | %3d | %3d | %3d | %4.2f *\n",
p->number,p->name,p->achievement[0],p->achievement[1],p->achievement[2],p->average);
printf(" *************************************************************************\n");
printf("\n");
printf("\n");
}
else
printf("\nThere is no number %s student on the list.\n",s);
}
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;
p2=head;
while(t->average<p1->average&&p1!=NULL)
{
p2=p1;
p1=p1->next;
}
if(p1==p2)
{
t->next=p1;
head=t;
}
else
{
t->next=p1;
p2->next=t;
}
}
p1=head;
while(p1!=NULL)
{
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;
p0=new;
printf("\nPlease enter a new student data.\n");
printf("Enter the student number:");
scanf("%s",new->number);
printf("Enter the new student name:");
scanf("%s",new->name);
printf("Please enter the new student %d achievements.\n",3);
sum1=0;
for(i=0;i<3;i++)
{
do{
printf("achievement%d:",i+1);
scanf("%d",&new->achievement[i]);
if(new->achievement[i]>100||new->achievement[i]<0)
printf("Data error,please enter again.\n");
}
while(new->achievement[i]>100||new->achievement[i]<0);
sum1=sum1+new->achievement[i];
}
new->sum=sum1;
new->average=(float)sum1/3;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((p0->average<p1->average)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->average>=p1->average)
{
if(head==p1)
head=p0;
else p2->next=p0;
p0->next=p1;
}
else
{p1->next=p0;p0->next=NULL;}
}
n=n+1;
head=sort(head);
printf("\nStudent %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("Enter the outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("Cannot open the file\n");
return;
}
printf("\nSaving the file......\n");
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
printf("Save the file successfully!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -