C/C++ code#include
#include
#include
#define STUDENT struct student
#define LEN sizeof(STUDENT)
#include
#include
#include
STUDENT
{
long num;
char name[5];
int math;
int english;
int chengxu;
int average;
STUDENT *next;
};
int n=0;
void menu()
{
printf(" **************成绩管理系统**************\n");
printf(" *\t1--成绩输入\t2--显示成绩 *\n");
printf(" *\t3--成绩查询\t4--删除成绩 *\n");
printf(" *\t5--排列成绩\t6--插入成绩 *\n");
printf(" *\t0--退出 \t7--保存于文件中 *\n");
printf(" ****************************************\n");
printf("请选择(0--7):");
}
char choice()
{
char select=getche();
return (select);
}
STUDENT *create()
{
STUDENT *head,*p1,*p2;
p1=p2=(STUDENT *)malloc(LEN);
scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);
p1->average=(p1->math+p1->english+p1->chengxu)/3;
head=NULL;
while (p1->num!=0)
{
n++;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(STUDENT *) malloc(LEN);
scanf("%ld %s %d %d %d",&p1->num,p1->name,&p1->math,&p1->english,&p1->chengxu);
p1->average=(p1->math+p1->english+p1->chengxu)/3;
}
p2->next=NULL;
free(p1);
printf("\n");
return(head);
}
void print(STUDENT *head)//打印成绩信息
{
STUDENT *p;
p=head;
if(head!=NULL)
{
printf("\n全部成绩为:\n\n");
printf("学号\t姓名\t数学\t英语\t程序\t平均分\n\n");
do
{
printf("%ld\t%s\t%d\t%d\t%d\t%d\n", p->num, p->name,p->math,p->english,p->chengxu,p->average);
p=p->next;
}while(p!=NULL);
printf("\n");
}
else
printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n");
}
void search(STUDENT *head,char nam[]) //根据姓名查找成绩信息
{
STUDENT *p5;
if(head==NULL)
{
printf("\n目前数据为空,还没有任何信息,请先创建成绩信息!\n\n");
return;
}
p5=head;
while(strcmp(p5->name,nam)&&p5->next!=NULL)
p5=p5->next;
if(strcmp(p5->name,nam)==0)
{
printf("\n该同学成绩信息为:\n\n");
printf("学号\t姓名\t数学\t英语\t程序\t平均分\n");
printf("%ld\t%s\t%d\t%d\t%d\t%d\n\n",p5->num, p5->name,p5->math,p5->english,p5->chengxu,p5->average);
}
else
printf("\n没有找到该同学的成绩信息!\n\n");
}
STUDENT *del(STUDENT *head,long num)//根据学号删除学生信息
{
STUDENT *p6,*p7;
if(head==NULL)
{
printf("\n删除失败!目前数据为空,还没有任何信息,请先创建成绩信息!\n");
return (head);
}
p6=head;
while(num!=p6->num &&p6->next!=NULL)
{
p7=p6;
p6=p6->next;
}
if(num==p6->num)
{
if(p6==head)
head=p6->next;
else
p7->next=p6->next;
printf ("\n已删除该名学生的成绩信息!\n");
n--;
}
else
printf ("\n没有找到该名学生的成绩信息!\n");
return(head);
}
STUDENT *sort(STUDENT *head) //根据平均分排序
{
STUDENT *temp,*t,*p3,*p4;
temp=head;
head=NULL;
while(temp!=NULL)
{
t=temp;
temp=temp->next;
if(head!=NULL&&head->averageaverage)
{
p3=head;
while(p3!=NULL&&p3->averageaverage)
{
p4=p3;
p3=p3->next;
}
t->next=p3;
p4->next=t;
}
else
{
t->next=head;
head=t;
}
}
return(head);
}
STUDENT *insert( STUDENT *head, STUDENT *stud) //根据平均分插入成绩信息
{
STUDENT *p3,*p4;
if(head!=NULL&&head->averageaverage)
{
p3=head;
while(p3!=NULL&&p3->averageaverage)
{
p4=p3;
p3=p3->next;
}
stud->next=p3;
p4->next=stud;
}
else
{
stud->next=head;
head=stud;
}
n++;
return (head);
}
void save(STUDENT *head) //存入文件
{
FILE *fp;
STUDENT *p;
fp=fopen("d:\\student.txt","wb");
if(fp==NULL)
{
printf("无法打开!");
exit(0);
}
p=head;
while(p!=NULL)
{
fwrite(p,LEN,1,fp);
p=p->next;
}
fclose(fp);
}
STUDENT *load() //从文件中读取
{
FILE *fp;
STUDENT *q,*head=NULL;
fp=fopen("d:\\student.txt","rb");
if(fp==NULL)
{
return head;
}
while(!feof(fp))
{
q=(STUDENT *)malloc(LEN);
if(fread(q,LEN,1,fp)==1)
{
q->next=head;
head=q;
n++;
}
}
fclose(fp);
return head;
}
int main(int argc, char *argv[])
{
STUDENT *head,*stu;
long del_num;
char select,nam[5];
select=0;
head=load();
while(select!='0')
{
system("cls");
menu();
select=choice();
switch(select)
{
case '0':
printf("\n\n您选择的是退出,欢迎您今后再次使用,再见!\n\n\n");
continue;
case '1':
printf("\n\n您选择的是成绩输入!\n");
printf("\n请输入成绩!\n\n");
printf("学号\t姓名\t数学\t英语\t程序\n");
head=create();
break;
case '2':
printf("\n\n您选择的是显示成绩!\n");
print(head);
break;
case '3':
printf("\n\n您选择的是成绩查询!\n");
printf("\n请输入要查寻的姓名:");
scanf("%s",nam);
search(head,nam);
break;
case '4':
printf("\n\n您选择的是删除成绩!\n");
printf("\n请输入要删除同学的学号:");
scanf("%ld",&del_num);
head=del(head,del_num);
printf("\n");
break;
case '5':
printf("\n\n您选择的是排列成绩!\n");
head=sort(head);
printf("\n按平均分排列后的所有成绩为:\n");
print(head);
break;
case '6':
printf("\n\n您选择的是插入成绩!\n");
printf("\n请输入插入成绩的信息!\n");
printf("\n学号\t姓名\t数学\t英语\t程序\t平均分\n");
stu=(STUDENT *)malloc(LEN);
scanf("%ld %s %d %d %d",&stu->num,stu->name,&stu->math,&stu->english,&stu->chengxu);
stu->average=(stu->math+stu->english+stu->chengxu)/3;
head=insert(head,stu);
printf("\n");
break;
case '7':
printf("\n\n您选择的是在文件中保存成绩!\n");
save(head);
printf("\n保存成功!\n\n");
break;
default:
printf("\n\n您的选择是错误的!\n\n");
}
system("PAUSE");
}
return (0);
}