|
#include
#include
#include
#include
#define NULL 0
#define LEN sizeof(struct student)
typedef struct student
{
long num;
char *name;
int age;
char *sex;
float totscore;
struct student *next;
}node,*tt;
int n;
node *creat(void)
{
node *head;
node *p1;
node *p2;
float x,y;
head=NULL;
n=0;
printf("输入 0 结束
");
p1=p2=( node* ) malloc(LEN);
printf("请输入学生的学号,姓名,年龄,性别,成绩!
");
scanf("%ld,%s,%d,%s,%f",&p1->num,p1->name,&p1->age,p1->sex,&x);
p1->totscore=x;
while(p1->num != 0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=( node* ) malloc (LEN);
printf("请输入球员的学号,姓名,年龄,性别,成绩!
");
scanf("%ld,%s,%d,%s,%f",&p1->num,p1->name,&p1->age,p1->sex,&y);
p1->totscore=y;
}
p2->next=NULL;
return head;
}
void searchnumb(node *head,long number){
node *p1;
if(head==NULL)printf("
list null
");
else{ p1=head;
while(number != p1->num && p1->next != NULL)
p1=p1->next;
}
if(number==p1->num)
printf("学生的信息为: %ld,%s,%d,%s,%f",&p1->num,p1->name,&p1->age,p1->sex,p1->totscore);
else printf("No record,please recheck your number!
");
}
node *insert(node *head, node *student){
node *p0,*p1,*p2;
p1=head;
p0=student;
if(head==NULL){
head=p0;
p0->next=NULL;
}
else
{
while((p0->num>p1->num)&&(p1->next!=NULL)){
p2=p1;
p1=p1->next;
}
if(p0->numnum){
if(head==p1)head=p0;
else p2->next=p0;
p0->next=p1;
}
else {
p1->next=p0;
p0->next=NULL;
}
}
n=n+1;
return(head);
}
tt findmax(tt head)
{
tt p1,p2;
if(head == NULL) return 0;
p1=head;
p2=p1->next;
while(p2->next != NULL)
{
if(p1->numnum)
p1=p2;
p2=p2->next;
}
return p1;
}
tt listselection(tt head)
{
tt max,t,out=NULL;
while(head->next != NULL)
{
max=findmax(head);
t=max->next;
max->next=t->next;
t->next=out;
out=t;
}
head->next=out;
return head;
}
void print(node *head)
{ float x;
node *p;
printf("
现有 %d 个学生,学生的信息为 :
",n);
if(head==NULL) printf("no list
");
else {p=head;
while(p!=NULL)
{ x=p->totscore;
printf("%ld,%s,%d,%s,%f",&p->num,p->name,&p->age,p->sex,p->totscore);
p=p->next;
}
}
}
node *del(node *head,long num)
{
node *p1,*p2;
if(head==NULL)
{
printf("
空!
");
goto end;
}
p1=head;
while(num != p1->num && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(num==head->num)
{
head=p1->next;
}
else
p2->next=p1->next;
printf("编号%d学生退学",num);
n=n-1;
}
else printf("没有%ld 号学生 !
" ,num);
end: return head;
}
void quit()
{
exit(0);
}
void menu()
{
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
");
printf(" 欢迎来到学生管理系统!
");
printf(" # [1] 建立系统 #
");
printf(" # [2] 查找学生 #
");
printf(" # [3] 加入新学生 #
");
printf(" # [4] 学生退学 #
");
printf(" # [5] 现有学生 #
");
printf(" # [6] 排序 #
");
printf(" # [7] 退出 #
");
printf(" # #
");
printf(" # 如果没有学生,请建立 #
");
printf(" # #
");
printf(" # #
");
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
");
printf("
请选择 (1-6):");
}
//node *head;
void main()
{
node *head;
float q;
long del_num;
long find_num;
node *in_sert;
node *p1;
int choose;
while(1)
{
menu();
scanf("%d",&choose);
switch(choose)
{
case 1: head=creat();break;
case 2:
printf("请输入要查找的学生
");
scanf("%ld",&find_num);
searchnumb(head,find_num);
getchar();
break;
case 3:
in_sert=(node *)malloc(sizeof(node));
printf("请输入新学生信息:
");
scanf("%ld,%s,%d,%s,%f",&p1->num,p1->name,&p1->age,p1->sex,&q);
in_sert->totscore=q;
insert(head,in_sert);
print(head);
getchar();
break;
case 4:
print(head);
printf("请输入要退学的学生
");
scanf("%ld",&del_num);
head=del(head,del_num);
printf("%ld 号学生已退学!
",del_num);
//printf("
");
print(head);
//getchar();
break;
case 5:
printf("
输出现有学生:
");
print(head);
printf("
按任意键返回!");
getchar();
break;
case 6: listselection(head);break;
case 7: quit();break;
default: printf("非法,按任意键返回主程序
r");
//clrscr();
menu();
getchar();
}
}
}
|