#include #include #include
typedef struct student { int num; char name[10]; char pawd[6]; int age; int cla; int math; int clan; int chinese; int mingci; struct student *next; }STU,*pstu;
pstu stu_numsort(pstu head); pstu stu_sumsort(pstu head); pstu stu_mathsort(pstu head); pstu stu_chisort(pstu head); pstu stu_clansort(pstu head); pstu stu_searchbynum(pstu head,int num); pstu stu_searchbyname(pstu head,char name[]); pstu stu_searchbycla(pstu head,int cla); pstu stu_create() {
pstu head=NULL; pstu s=NULL; int num; char name[10]; char pawd[6]; int age; int cla; int math; int clan; int chinese; int mingci; printf(\"请输入任意一个数非0的数继续 :\"); scanf(\"%d\",&num); while(num!=0) {
s=(pstu)malloc(sizeof(STU));
if(s==NULL)
{
printf(\"\\nmalloc error\\n\");
return NULL;
}
printf(\"输入学生学号:\");
scanf(\"%d\",&s->num);
printf(\"请输入学生姓名:\");
scanf(\"%s\",s->name);
printf(\"请输入登陆密码:\");//学生权限(error)
scanf(\"%s\",s->pawd);
printf(\"请输入学生年龄:\");
scanf(\"%d\",&s->age);
printf(\"请输入学生班级:\");
scanf(\"%d\",&s->cla);
printf(\"请输入数学成绩:\");
scanf(\"%d\",&s->math);
printf(\"请输入c语言成绩:\");
scanf(\"%d\",&s->clan);
printf(\"请输入语文成绩:\");
scanf(\"%d\",&s->chinese);
printf(\"enter next student\\n\");
if(head==NULL)
{
s->next=NULL;
head=s;
}
else
{
s->next=NULL;
s->next=head;
head=s;
}
scanf(\"%d\",&num); } return head; } //保存
void stu_write(pstu head) { int flag=0; FILE *fp=NULL; pstu p=head; fp=fopen(\"num\",\"w\"); if(fp==NULL) {
printf(\"open error\\n\");
return; } while(p!=NULL) {
flag=fwrite(p,sizeof(STU),1,fp);
if(flag!=1)
{
printf(\"write error\\n\");
return;
}
p->next; } fclose(fp); } //读函数
pstu stu_read() { FILE *fp=NULL; pstu head=NULL; pstu s=NULL; fp=fopen(\"num\",\"r\"); s=(pstu)malloc(sizeof(STU)); while(fread(s,sizeof(STU),1,fp)==1) {
if(head==NULL)
{
s->next=NULL;
head=s;
}
else
{
s->next=NULL;
s->next=head;
head=s;
}
s=(pstu)malloc(sizeof(STU)); } fclose(fp); return head; } //删除学生信息 (学号) pstu stu_del(pstu head,int num) { pstu p=head; pstu q=NULL; printf(\"输入删除的学号:\"); scanf(\"%d\",&num); if(head->num==num) {
head=head->next; } else {
while(p->next!=NULL)
{
if(p->next->num==num)
{
q=p->next;
p->next=q->next;
free(q);
q=NULL;
break;
}
p=p->next;
} } return head; }
pstu stu_searchbynum(); //按学号修改学生信息
void stu_changebynum(pstu head) { pstu p=head; int num; char name[10]; char pawd[6]; int age; int cla; int math,chinese,clan; int n; printf(\"请输入查找的学号:\"); scanf(\"%d\",&num); while(p!=NULL) {
if(p->num==num)
{
printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\");
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",p->num,p->name,p->pawd,p->age,p->cla,p->math,p->clan,p->chinese,p->mingci);
break;
}
p=p->next; }
printf(\"请选择需要修改的学生信息:\\n\"); printf(\" -------------------------\\n\"); printf(\"1:姓名\\n\"); printf(\"2:密码\\n\"); printf(\"3:年龄\\n\"); printf(\"4:班级\\n\"); printf(\"5:数学成绩\\n\"); printf(\"6:c成绩\\n\"); printf(\"7:语文成绩\\n\"); printf(\"0:退出\"); printf(\"---------------------------\\n\"); printf(\"请输入需要修改的信息:\"); scanf(\"%d\",&n); switch(n) {
case 0:
return;
case 1:
printf(\"请输入新的姓名:\");
scanf(\"%s\",p->name);
break;
case 2:
printf(\"请输入新的密码:\");
scanf(\"%s\",p->pawd);
break;
case 3:
printf(\"请输入新的年龄:\");
scanf(\"%d\",&p->age);
break;
case 4:
printf(\"请输入新的班级:\");
scanf(\"%d\",&p->cla);
break;
case 5:
printf(\"请输入新的数学成绩:\");
scanf(\"%d\",&p->math);
break;
case 6:
printf(\"请输入新的c语言成绩:\");
scanf(\"%d\",&p->clan);
break;
case 7:
printf(\"请输入新的语文成绩:\");
scanf(\"%d\",&p->chinese);
break;
default:
printf(\"\\n无效选项\\n\");
break; } printf(\"修改成功!\\n\"); printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\");
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",p->num,p->name,p->pawd,p->age,p->cla,p->math,p->clan,p->chinese,p->mingci); } //按学生姓名修改
void stu_changebyname(pstu head) { pstu p=head; int num; char name[10]; char pawd[6]; int age; int cla; int math,chinese,clan; int n; printf(\"请输入查找的姓名:\"); scanf(\"%s\",name); while(p!=NULL) {
if(strcmp(p->name,name)==0)
{
printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\");
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",p->num,p->name,p->pawd,p->age,p->cla,p->math,p->clan,p->chinese,p->mingci);
break; } p=p->next; } printf(\"请选择需要修改的学生信息:\\n\"); printf(\" -------------------------\\n\"); printf(\"1:学号\\n\"); printf(\"2:密码\\n\"); printf(\"3:年龄\\n\"); printf(\"4:班级\\n\"); printf(\"5:数学成绩\\n\"); printf(\"6:c成绩\\n\"); printf(\"7:语文成绩\\n\"); printf(\"0:退出\"); printf(\"---------------------------\\n\"); printf(\"请输入需要修改的信息:\"); scanf(\"%d\",&n); switch(n) { case 0:
return; case 1:
printf(\"请输入新的学号:\");
scanf(\"%d\",&p->num);
break; case 2:
printf(\"请输入新的密码:\");
scanf(\"%s\",p->pawd);
break; case 3:
printf(\"请输入新的年龄:\");
scanf(\"%d\",&p->age);
break; case 4:
printf(\"请输入新的班级:\");
scanf(\"%d\",&p->cla);
break; case 5:
printf(\"请输入新的数学成绩:\");
scanf(\"%d\",&p->math);
break; case 6:
printf(\"请输入新的c语言成绩:\");
scanf(\"%d\",&p->clan);
break;
case 7:
printf(\"请输入新的语文成绩:\");
scanf(\"%d\",&p->chinese);
break;
default:
printf(\"\\n无效选项\\n\");
break; } printf(\"修改成功!\\n\"); printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\");
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",p->num,p->name,p->pawd,p->age,p->cla,p->math,p->clan,p->chinese,p->mingci);
} void change_printf(pstu head) { pstu p=head; int n; printf(\"请选择修改学生信息的方式:\\n\"); printf(\"-------\\n\"); printf(\"1:按学生学号修改\\n\"); printf(\"2:按学生姓名修改\\n\"); printf(\"0:退出\\n\"); printf(\"---------\\n\"); scanf(\"%d\",&n); switch(n) {
case 1:
stu_changebynum(head);
printf(\"显示全部学生信息:\");
break;
case 2:
stu_changebyname(head);
printf(\"显示全部学生信息:\");
break;
case 3:
return; } } //查找学生信息
void search_printf(pstu head) { pstu p=head; int n; int num; char name[10]; int cla; printf(\"请选择查找学生信息的方式:\\n\"); printf(\"-------\\n\"); printf(\"1:按学生学号查找\\n\"); printf(\"2:按学生姓名查找\\n\"); printf(\"3:按班级群体查找\\n\"); printf(\"0:退出\\n\"); printf(\"---------\\n\"); scanf(\"%d\",&n); switch(n) {
case 1:
stu_searchbynum(head,num);
break;
case 2:
stu_searchbyname(head,name);
break;
case 3:
stu_searchbycla(head,cla);
break;
case 0:
return; } } //1:学号查找
pstu stu_searchbynum(pstu head,int num) { pstu p=head; printf(\"请输入查找的学号:\"); scanf(\"%d\",&num); while(p!=NULL) {
if(p->num==num)
break;
p=p->next; } return p; } //2:按姓名查找 pstu stu_searchbyname(pstu head,char name[]) { pstu p=head; printf(\"请输入要查找的姓名:\"); scanf(\"%s\",name); while(p!=NULL) {
if(strcmp(name,p->name)==0)
break;
p=p->next; } return p; } //班级群体查找
pstu stu_searchbycla(pstu head,int cla) { pstu p=head; printf(\"请输入要查找的班级:\"); scanf(\"%d\",&cla); while(p!=NULL) {
if(p->cla==cla)
break;
p=p->next; } return p; }
//显示所有学生信息列表
void sort_printf(pstu head) { pstu p=head; int n; printf(\"请选择显示学生信息的方式:\\n\"); printf(\"-----\\n\"); printf(\"1:按学号顺序显示\\n\"); printf(\"2:按名次显示\\n\"); printf(\"3:按数学成绩显示\\n\"); printf(\"4:按c语言成绩显示\\n\"); printf(\"5:按语文成绩显示\\n\"); printf(\"--------\\n\"); printf(\"请输入你要选择的操作:\"); scanf(\"%d\",&n); switch(n) {
case 1:
stu_numsort(head);
printf(\"显示学生信息\\n\");
break;
case 2:
stu_sumsort(head);
printf(\"显示学生信息\\n\");
break;
case 3:
stu_mathsort(head);
printf(\"显示学生信息\\n\");
break;
case 4:
stu_clansort(head);
printf(\"显示学生信息\\n\");
break;
case 5:
stu_chisort(head);
printf(\"显示学生信息\\n\");
break;
case 6:
return;
default:
printf(\"输入错误\\n\");
break; } }
int stu_len(pstu head) { pstu p=head; int len=0; while(p!=NULL) {
len++;
p=p->next; } return len; } //1:按学号顺序显示
pstu getnummax(pstu head) { pstu pmax=head; if(head==NULL) {
return NULL; } pstu p=head->next; while(p!=NULL) {
if(pmax->num
{
pmax=p;
}
p=p->next; } return pmax; } pstu removefromold(pstu head,pstu pmax) { pstu p=head; if(head==pmax) {
head=head->next; } else {
while(p!=NULL)
{
if(p->next==pmax)
{
p->next=pmax->next;
break;
}
}
p=p->next; } return head; } pstu add(pstu pnew,pstu pmax) { pmax->next=pnew; pnew=pmax; return pnew; } pstu stu_numsort(pstu head) { pstu pold=head; pstu pmax=NULL; pstu pnew=NULL; while(pold!=NULL) {
pmax=getnummax(pold);
pold=removefromold(pold,pmax);
pnew=add(pnew,pmax); } return pnew; } //按名次显示
pstu getsummin(pstu head) { pstu pmin=head; if(head==NULL) {
return NULL; } pstu p=head->next; while(p!=NULL) {
if(pmin->math+pmin->clan+pmin->chinese>p->math+p->clan+p->chinese)
{
pmin=p;
}
p=p->next; } return pmin; } pstu removefromtold(pstu head,pstu pmin) { pstu p=head; if(head==pmin) {
head=head->next; } else {
while(p!=NULL)
{
if(p->next==pmin)
p->next=pmin->next;
break;
}
p=p->next; } return head; } pstu addt(pstu pnew,pstu pmin) { pmin->next=pnew; pnew=pmin; return pnew; } pstu stu_sumsort(pstu head) { pstu pold=head; pstu pmin=NULL; pstu pnew=NULL; int i=stu_len(head); while(pold!=NULL) {
pmin=getsummin(pold);
pold=removefromtold(pold,pmin);
pnew=addt(pnew,pmin);
pnew->mingci=i--; } return pnew; } //按数学成绩显示
pstu getmathmin(pstu head) { pstu pmin=head; if(head==NULL) {
return NULL; } pstu p=head->next; while(p!=NULL) {
if(pmin->math>p->math)
{
pmin=p;
}
p=p->next; } return pmin; } pstu stu_mathsort(pstu head) { int i=stu_len(head); pstu pold=head; pstu pmin=NULL; pstu pnew=NULL; while(pold!=NULL) {
pmin=getmathmin(pold);
pold=removefromold(pold,pmin);
pnew=add(pnew,pmin);
pnew->mingci=i--; } return pnew; } //按c语言成绩显示
pstu getclanmin(pstu head) { pstu pmin=head; if(head==NULL) {
return NULL; } pstu p=head->next; while(p!=NULL) {
if(pmin->clan>p->clan)
{
pmin=p;
}
p=p->next; } return pmin; } pstu stu_clansort(pstu head) { int i=stu_len(head); pstu pold=head; pstu pmin=NULL; pstu pnew=NULL; while(pold!=NULL) {
pmin=getclanmin(pold);
pold=removefromtold(pold,pmin);
pnew=addt(pnew,pmin);
pnew->mingci=i--; } return pnew; } //按语文成绩显示
pstu getchimin(pstu head) { pstu pmin=head; if(head==NULL) {
return NULL; } pstu p=head->next; while(p!=NULL) {
if(pmin->chinese>p->chinese)
{
pmin=p;
}
p=p->next; } return pmin; } pstu stu_chisort(pstu head) { int i=stu_len(head); pstu pold=head; pstu pmin=NULL; pstu pnew=NULL; while(pold!=NULL) {
pmin=getchimin(pold);
pold=removefromtold(pold,pmin);
pnew=addt(pnew,pmin);
pnew->mingci=i--; } return pnew; } void stu_printf(pstu head) { pstu tmp=head; printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\"); while(tmp !=NULL) {
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",tmp->num,tmp->name,tmp->pawd,tmp->age,tmp->cla,tmp->math,tmp->clan,tmp->chinese,tmp->mingci);
tmp=tmp->next; } printf(\"\\n\"); } void stun_printf(pstu head) { pstu tmp=head; printf(\"学号\\t姓名\\t密码\\t年龄\\t班级\\t数学\\tc语言\\t语文\\t名次\\n\"); while(tmp !=NULL) {
printf(\"%d\\t%s\\t%s\\t%d\\t%d\\t%d\\t%d\\t%d\\t%d\\n\",tmp->num,tmp->name,tmp->pawd,tmp->age,tmp->cla,tmp->math,tmp->clan,tmp->chinese,tmp->mingci);
break; } printf(\"\\n\"); }
//2: int main() { // int m; int num; int cla; int len; char name[10]; pstu head=stu_create(); stu_printf(head); len=stu_len(head); // pstu p=stu_del(head, num); // stu_printf(p); /* pstu k=stu_searchbynum(head,num); if(k!=NULL)
stun_printf(k); else
printf(\"no find\");
pstu l=stu_searchbyname(head,name);
// // // // // //
// // // // // //
} if(l!=NULL) stun_printf(l); else printf(\"no find\"); pstu h=stu_searchbycla(head,cla); if(h!=NULL) stun_printf(h); else printf(\"no find\");*/ stu_changebynum(head); printf(\"显示全部学生信息:\"); stu_printf(head); stu_changebyname(head); printf(\"显示全部学生信息:\"); stu_printf(head); search_printf(head); stun_printf(head); change_printf(head); stu_printf(head); pstu p1=stu_numsort(head); stu_printf(p1); pstu p2=stu_sumsort(head); stu_printf(p2); pstu p3=stu_mathsort(head); stu_printf(p3); sort_printf(head); stu_printf(head);