ejacky 发表于 2013-1-15 02:14:14

数据结构实训:学生信息系统应用

#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define size 25

typedef struct node
{
char name;
int no;
char sex;
int age;
float english;
float math;
float ds;
float os;
float total;
}NODE;

typedef struct node1
{
NODE data;
   struct node1 *next;
}student;

typedef struct node2
{
    char data;
float no1;
    struct node2*link ;
}ListNode;


student *p;
student *head;

float total(student *p)
{
float tot;
tot=p->data.ds+p->data.english+p->data.math+p->data.os;
printf("total=%5.0f\n",tot);
return tot;
}

student *crelist()
{
student *head,*p,*q;
int i;
float zf;
head=(student*)malloc(sizeof(student));
printf("xingming:");
scanf("%s",&head->data.name);
printf("xuehao:");
scanf("%d",&head->data.no);
printf("xingbie:");
scanf("%s",&head->data.sex);
printf("nianling:");
scanf("%5d",&head->data.age);
printf("shuruchengji\n");
    printf("englishmathdsos\n");
scanf("%f%f%f%f",&head->data.english,&head->data.math,&head->data.ds,&head->data.os);
    zf=total(head);
head->data.total=zf;
p=head;
for (i=1;i<=size;i++)
{

q=(student*)malloc(sizeof(student));
printf("xingming:");
      scanf("%s",&q->data.name);
printf("xuehao:");
scanf("%d",&q->data.no);
printf("xingbie:");
scanf("%s",&q->data.sex);
printf("nianling:");
scanf("%d",&q->data.age);
printf("shuruchengji\n");
printf("english math ds os\n");
scanf("%f%f%f%f",&q->data.english,&q->data.math,&q->data.ds,&q->data.os);
zf=total(q);
q->data.total=zf;
p->next=q;
p=q;
}
p->next=NULL;
return head;
}


void prilist(student *head)
{
p=head;
    printf("xingmingxuehaoxingbie\n");
printf("english math os ds\n");
while (p!=NULL)
{
printf("%s       %d    %s\n",p->data.name,p->data.no,p->data.sex);
printf("%5.0f%5.0f%5.0f%5.0f\n",p->data.english,p->data.math,p->data.ds,p->data.os);
printf("%5.0f\n",p->data.total);
p=p->next;
}
}

void print(student *head)
{
p=head;
while (p!=NULL)
{
printf("%s\n",p->data.name);
p=p->next;
}
}


void tjstu(student *p,student *head)
{
student *p1,*p2;
p1=head;
p2=p1->next;
while (p2!=NULL &&p2->data.no<p->data.no)
{
p1=p2;
p2=p2->next;
}
p1->next=p;
p->next=p2;
}


student *chazhao(student *head)
{
student *p;
int xuan;
int no;
char name;
printf("1)anxuehao\n2)anxingming\n");
scanf("%d",&xuan);
if(xuan==1)
{
p=head;
printf("shuruxuehao:");
scanf("%d",&no);
while(p->data.no!=no)
p=p->next;
}
else if(xuan==2)
{
p=head;
printf("shuruxingming\n");
scanf("%s",&name);
while (strcmp(p->data.name,name)!=0)
p=p->next;
}
else
printf("error");
printf("%d,%s,%s\n",p->data.no,p->data.name,p->data.sex);
return p;

}

void shanchu(student *head)
{
int sc;
student *p,*q;
p=chazhao(head);
if (p==NULL)
{
printf("wu");
return;
}
printf("queding1fanhui0\n");
scanf("%d",&sc);
if(sc==1)
{
q=head;
while(q!=NULL&&q->next!=p)
q=q->next;
q->next=p->next;
free(p);
printf("shanchujieshu\n");
}
}

void xiugai(student *head)
{
p=chazhao(head);
printf("shuruxuehao:");
scanf("%d",&p->data.no);
printf("shuruxingming:");
scanf("%s",&p->data.name);
printf("shuruxingbie:");
scanf("%s",&p->data.sex);
printf("shuruchengji\n");
printf("english math ds os\n");
scanf("%f%f%f%f",&p->data.english,&p->data.math,&p->data.ds,&p->data.os);
}

void ListInsert1(ListNode**L,float no)   
{
    ListNode *p, *q, *curr ;
    p = (ListNode*)malloc(sizeof(ListNode));
    p->no1=no;
    p->link = NULL;
    if((*L) == NULL)
    {
      (*L) = p;
      return;
    }
    else if(no <=(*L)->no1)   
    {
      p->link = (*L);
      (*L) = p;
      return;
    }
    else
    {
      curr = (*L);
      q = (*L);   
      while(q != NULL && (no>=q->no1))
      {
            curr = q;
            q = q->link;
      }      
      p->link = curr->link;
      curr->link = p;
      return;
    }
}

void Print1(ListNode*L)   
{
    ListNode *curr = L;
    while(curr!=NULL)
    {
      printf("%5.0f\n",curr->no1);
      curr=curr->link ;
    }
}

void ListInsert2(ListNode**L,char x[])
{
    ListNode *p, *q, *curr ;
    p = (ListNode*)malloc(sizeof(ListNode));   
    strcpy(p->data,x);
    p->link = NULL;   
    if((*L) == NULL)
    {
      (*L) = p;
      return;
    }
    else if(strcmp(x,(*L)->data) <= 0)   
    {
      p->link = (*L);
      (*L) = p;
      return;
    }
    else
    {
      curr = (*L);
      q = (*L);   
      while(q != NULL && strcmp(x,q->data) >= 0)
      {
            curr = q;
            q = q->link;
      }      
      p->link = curr->link;
      curr->link = p;
      return;
    }
}

void Print2(ListNode*L)   
{
    ListNode *curr = L;
    while(curr!=NULL)
    {
      printf("%s\n",curr->data);
      curr=curr->link ;
    }
}

void save()
{
FILE *fp;
int i;
if((fp=fopen("ds.dat","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for (i=0;i<size;i++)
if(fwrite(head,sizeof(student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

void save1()
{

    FILE *fp;
int i;
if((fp=fopen("new1.dat","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for (i=0;i<size;i++)
if(fwrite(head,sizeof(student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}

void save2()
{
    FILE *fp;
int i;
if((fp=fopen("new2.dat","wb"))==NULL)
{
printf("cannot open file\n");
return;
}
for (i=0;i<size;i++)
if(fwrite(head,sizeof(student),1,fp)!=1)
printf("file write error\n");
fclose(fp);
}




   



void showstumenu()
{
printf("**************************");
printf("      xueshengxinxi       ");
printf("**************************\n");

printf("0)         jianbiao\n");
printf("1)         tianjia\n");
printf("2)         zhanshi\n");
printf("3)         shanchu\n");
printf("4)         xiugai\n");
printf("5)         chazhao\n");
printf("6)         paixu1(zhongchengji)\n");
printf("7)         paixu2(xingming)\n");
printf("8)         beifen\n");
printf("9)         dayin\n");
printf("10)      over\n");
printf("\n\n");
}


void main()
{
int xx;
showstumenu();
printf("shurushuzi:");
scanf("%d",&xx);
if (xx==0)
head=crelist();
save();
for(;;)
{
int a;
showstumenu();
printf("shurushuzi:");
scanf("%d",&a);
switch (a)
{

       case 1:
   {
      float tota;
    printf("tianjia\n");
      p=(student*)malloc(sizeof (student));
printf("xingming:");
      scanf("%s",&p->data.name);
printf("xuehao:");
scanf("%d",&p->data.no);
printf("xingbie:");
scanf("%s",&p->data.sex);
printf("english math ds os\n");
scanf("%f%f%f%f",&p->data.english,&p->data.math,&p->data.ds,&p->data.os);
tota=total(head);
p->data.total=tota;
      tjstu(p,head);
      break;

   }

      case 2:
{
      printf("zhanshi\n");
      prilist(head);
      break;
}

      case 3:
{
      printf("shanchu\n");
                shanchu(head);
      break;
}

case 4:
{
printf("xiugai\n");
xiugai(head);
break;
}

case 5:
{
p=chazhao(head);
break;
}

case 6:
{
int i ;
             ListNode *head1 ;
             p=head;
             head1=NULL ;
             for(i = 0;i < 3;i++)
{
               ListInsert1(&head1,p->data.total);
       p=p->next;
}
             printf("链表中数据输出如下:\n");
             Print1(head1);
save1();
break;
}

case 7:
{
             int i ;
             ListNode *head1 ;
            p=head;
             head1=NULL ;
             for(i = 0;i < 3;i++)
{
            ListInsert2(&head1,p->data.name);
      p=p->next;
}
             printf("链表中数据输出如下:\n");
             Print2(head1);
save2();
         break;
}

case 8:
{
FILE *in,*out;
          if((in=fopen("ds.dat","r"))==NULL)
{
      printf("cannot open infile\n");
         exit(0);
}
         if((out=fopen("ds1.dat","w"))==NULL)
{
      printf("cannot open outfile\n");
             exit (0);
}
          while(!feof(in))fputc(fgetc(in),out);
             fclose(in);
            fclose(out);
          return;
}
case 9:
{
printf("daying");
print(head);
}

case 10:
{
printf("jieshu");
return;
}   
}
}
}
页: [1]
查看完整版本: 数据结构实训:学生信息系统应用