您的位置:首页 > 其它

链表实现c学生管理系统

2011-10-10 17:17 423 查看
#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

struct Date

{

int year;

int month;

int day;

};

struct Score

{

int Math;

int English;

int Chinese;

int CLanguage;

};

struct student

{

long int num;

char name[20];

char sex[2];

struct Date age;

char address[30];

struct Score sc;

struct student *next;

};

#define LEN sizeof(struct student)

int n;

/**************************************创建链表**************************************/

struct student *creat()

{

struct student *head;

struct student *p1;

struct student *p2;

n=0;

head=NULL;

p1=(struct student *)malloc (LEN);

printf("\n请输入第%d个学生的学号\n",n+1);

scanf("%ld",&p1->num);

printf("\n请输入姓名:\n");

scanf("%s",p1->name);

printf("\n请输入学生的性别:\n");

scanf("%s",p1->sex);

printf("\n请输入出生日期(例如:1990-03-12):\n");

scanf("%d-%d-%d",&p1->age.year,&p1->age.month,&p1->age.day);

printf("\n请输入地址:\n");

scanf("%s",p1->address);

printf("\n请依次输入数学、英语、语文、C语言的成绩):\n");

scanf("%d%d%d%d",&p1->sc.Math,&p1->sc.English,&p1->sc.Chinese,&p1->sc. CLanguage);

system("cls");

p2=NULL;

loop:while(p1->num != 0)

{

n=n+1;

if(n==1)

head=p1;

else

p2->next=p1;

p2=p1;

p1=(struct student *)malloc (LEN);

printf("\n请输入第%d个学生的学号\n",n+1);

scanf("%ld",&p1->num);

if(p1->num==0)

{

goto loop;

}

printf("\n请输入姓名:\n");

scanf("%s",p1->name);

printf("\n请输入学生的性别:\n");

scanf("%s",p1->sex);

printf("\n请输入出生日期(例如:1990-03-12):\n");

scanf("%d-%d-%d",&p1->age.year,&p1->age.month,&p1->age.day);

printf("\n请输入地址:\n");

scanf("%s",p1->address);

printf("\n请依次输入数学、英语、语文、C语言的成绩):\n");

scanf("%d%d%d%d",&p1->sc.Math,&p1->sc.English,&p1->sc.Chinese,&p1->sc. CLanguage);

system("cls");

}

free(p1);

p2->next=NULL;

return(head);

}

/************************************************************************************/

struct student *insert1(struct student *head,struct student *stud)

{

struct student *p0;

struct student *p1;

struct student *p2;

p1=head;

p0=stud;

if(head==NULL)

{

head=p0;

p0->next=NULL;

}

else

{

while((p0->num>p1->num)&&(p1->next==NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num<=p1->num)

{

if(p1==head)

{

head=p0;

p0->next=p1;

}

else

{

p2->next=p0;

p0->next=p1;

}

}

else

{

p1->next=p0;

p0->next=NULL;

}

}

n=n+1;

return(head);

}

/************************************************************************************/

struct student *del(struct student *head,long num)

{

struct student *p1;

struct student *p2;

if(head==NULL)

{

printf("\n数据为空!请确认好后进行输入!\n");

return head;

}

p1=head;

while(num!=p1->num && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num==p1->num)

{

if(p1==head)

head=p1->next;

else

p2->next=p1->next;

free(p1);

n=n-1;

}

else

printf("未找到删除的结点!");

return head;

}

/************************************************************************************/

/*void print(struct student *head)

{

struct student *p;

p=head;

if(p==NULL)

printf("\n没有相关学生信息!\n");

return ;

while(p!=NULL)

{ printf("\n第%d个学生的信息\n",n+1);

printf("\n学号:%ld",p->num);

printf("\n姓名: %s", p->name);

printf("\n性别:%s",p->sex);

printf("\n出生日期:%d-%d-%d",p->age.year,p->age.month,p->age.day);

printf("\n地址:%s",p->address);

printf("\n数学 %d\n英语 %d\n语文 %d\nC语言 %d",p->sc.Math,p->sc.English,p->sc.Chinese,p->sc.CLanguage);

p=p->next;

}

}*/

/************************************************************************************/

void print(struct student * head)

{

printf("\n\n\n");

printf("全部学生信息:\n");

printf("----------------------------------\n");

struct student *p1;

p1 = head;

if(head != NULL)

{

printf("学号\t姓名\t性别\t出生日期\t地址\t数学\t英语\t语文\tC语言\n");

while(p1 != NULL)

{

printf("%ld\t%s\t%s\t%d-%d-%d\t%s\t%d\t%d\t%d\t%d\n",p1->num,p1->name,p1->sex,p1->age.year,p1->age.month,p1->age.day,p1->address,p1->sc.Math,p1->sc.English,p1->sc.Chinese,p1->sc.CLanguage);

p1 = p1->next;

}

}

else

printf("链为空,无学生信息;\n");

printf("----------------------------------\n\n\n");

}

/************************************************************************************/

/************************************************************************************/

/************************************************************************************/

void insert2()

{

struct student *head;

struct student *p1;

//head=NULL;

p1=(struct student *)malloc(LEN);

printf("请输入学生学号:");

scanf("%ld",&p1->num);

printf("\n请输入姓名:\n");

scanf("%s",p1->name);

printf("\n请输入学生的性别:\n");

scanf("%s",p1->sex);

printf("\n请输入出生日期(例如:1990-03-12):\n");

scanf("%d-%d-%d",&p1->age.year,&p1->age.month,&p1->age.day);

printf("\n请输入地址:\n");

scanf("%s",p1->address);

printf("\n请依次输入数学、英语、语文、C语言的成绩):\n");

scanf("%d%d%d%d",&p1->sc.Math,&p1->sc.English,&p1->sc.Chinese,&p1->sc. CLanguage);

system("cls");

head=insert1(head,p1);

free(p1);

}

/************************************************************************************/

void average(struct student *head)

{

struct student *p1;

int sum=0,ave;

p1=head;

while(p1!=NULL)

{

sum=sum+p1->sc .Math +p1->sc .English+p1->sc .Chinese+p1->sc .CLanguage;

p1=p1->next;

}

ave=sum/4;

printf("\n学生总分和平均分\n");

printf("\n------------------------------------------\n");

printf("\n总分\t平均分\n");

printf("\n%d\t%d\t\n",sum,ave);

printf("\n------------------------------------------\n");

printf("\n\n\n");

}

/************************************************************************************/

void main()

{ struct student *head;

struct student *p1;

int k,j;

head=NULL;

long delnum;

printf("\t\t\t\t学生管理系统\n");

while(1)

{

loop1 :

//system("color.1A");

printf("\n-------- 1: -----------------按1进行输入学生信息-------------------------\n");

printf("\n-------- 2: -----------------按2查看学生信息-----------------------------\n");

printf("\n-------- 3: -----------------按3计算学生平均分和总分---------------------\n");

printf("\n-------- 4: -----------------按4进行学生排名-----------------------------\n");

printf("\n-------- 5: -----------------按5删除学生信息-----------------------------\n");

printf("\n-------- 6: -----------------按6插入学生信息-----------------------------\n");

printf("\n-------- 7: -----------------按7退出-------------------------------------\n");

scanf("%d",&k);

system("cls");

switch(k)

{

case 1:

printf("\n请输入有关学生信息:\n");

head=creat();

break;

case 2:

printf("\n学生信息!\n");

print(head);

break;

case 3:

printf("\n-----------------------------各个学生的成绩总和------------------------\n");

average(head);

break;

/*case 4:

MaoPao();

break;*/

case 5:

printf("\n-----------------------------删除学生信息------------------------------\n");

printf("\n请输入您要删除的学号!\n");

scanf("%ld",&delnum);

while(delnum!=0)

{

head=del(head,delnum);

printf("\n请输入您要删除的学号!\n");

scanf("%ld",&delnum);

printf("学生信息已删除!是否继续删除(0:退出删除!)");

print(head);

}

break;

case 6:

p1=(struct student *)malloc(LEN);

printf("\n插入学生的相关信息:\n");

printf("请输入学生学号:");

scanf("%ld",&p1->num);

printf("\n请输入姓名:\n");

scanf("%s",p1->name);

printf("\n请输入学生的性别:\n");

scanf("%s",p1->sex);

printf("\n请输入出生日期(例如:1990-03-12):\n");

scanf("%d-%d-%d",&p1->age.year,&p1->age.month,&p1->age.day);

printf("\n请输入地址:\n");

scanf("%s",p1->address);

printf("\n请依次输入数学、英语、语文、C语言的成绩):\n");

scanf("%d%d%d%d",&p1->sc.Math,&p1->sc.English,&p1->sc.Chinese,&p1->sc. CLanguage);

system("cls");

head=insert1(head,p1);

//insert2();

break;

case 7:

exit(0);

break;

default :

printf("\n您输入有误!请重新输入!\n");

goto loop1;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: