华清远见C语言学习笔记十

/*
 * test.c
 *
 *  Created on: Jun 29, 2012
 *      Author: 孙旭
 *      华清远见实验室
 */
/*单链表*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>

static int number=0;
/*定义一个结构体*/
typedef struct student{
 char name[50];           //学生姓名
 char student_id[50];     //学生学号
 int age;                 //学生年龄
 char gender[30];         //学生性别
 struct student *next;    //结构提指针
}std;

/*创建一个单恋表*/
std *student_create()   //node表示节点个数 函数的返回值为std类型
{
 int node;
 printf("-----enter your informetion-----\n");
 printf("enter Statistical student number\n");
 scanf("%d",&node);
 std *head,*p,*q;
 if((p=(std*)malloc(sizeof(std)))==NULL)  //创建第一个节点
 {
  printf("An error occurred when malloc new node\n");
  exit(0);
 }
 printf("---please enter your:name student_id age gender---\n");
 scanf("%s %s %d %s",p->name,p->student_id,&p->age,p->gender);  //输入学生信息
 head=p;
 p->next=NULL;
 while(--node)
 {
  if((q=(std *)malloc(sizeof(std)))==NULL)   //创建第二个节点
  {
   printf("An error occurred when malloc new node\n");
   exit(0);
  }
  scanf("%s %s %d %s",q->name,q->student_id,&q->age,q->gender);  //输入node-1个学生的信息
  p->next=q;
  p=q;
  p->next=NULL;
 }
 return head;   //返回头节点
}


/*显示学生信息*/
void  student_show(std *head)
{
 std *p=head;
 printf("----Show students' information----\n");
 while(p!=NULL)           //最后一个节点的后面为空
  {
   printf("%s\t%s\t%d\t%s\n",p->name,p->student_id,p->age,p->gender);
   p=p->next;
  }
}

/*在单恋表中插入nu个学生的信息*/
std *student_insert(std *head)
{
 printf("----Insert student information---\n");
 printf("Insert student information number\n");
 int nu;
 scanf("%d",&nu);
 std *current;
 current=head;
 std *x;
 x=NULL;
 printf("---please enter your:name student_id age gender---\n");
 while(head->next!=NULL)  //按名字插入学生信息
 {
  head=head->next;
 }
 while(nu--)
 {
  if((x=(std *)malloc(sizeof(std)))==NULL)
  {
    printf("--An error occurred when malloc new node--\n");
    exit(0);
  }
  scanf("%s %s %d %s",x->name,x->student_id,&x->age,x->gender);
  x->next=NULL;
  //printf("wo ai ni0\n");

  //x->next=head->next;
  head->next=x;
  number++;
  head=x;
  //printf("wo ai ni\n");
 }
 return current;
}

/*删除指定的学生信息*/
std *student_delete(std *head)
{
 char student_name[20];
 printf("--please enter delete name--\n");
 scanf("%s",student_name);
 std *p;
 std *return_value;
 p=head;
 return_value=head;
 while((strcmp(head->name,student_name)!=0)&&(head!=NULL))
 {
  p=head;
  head=head->next;
 }
 if(p==NULL)
 {
  printf("the list no %s\n",student_name);
 }
 else
 {
  if (p==head)
          {
              head = head->next;
              free(p);
          }
  else
          {
     p->next=head->next;
     free(head);
          }
 }
 number--;
 return return_value;
}

/*查找学生的信息*/
void student_find(std *head)
{
 printf("--please enter search name--\n");
 char student_name[20];
 scanf("%s",student_name);
 std *p;
 std *return_value;
 p=return_value=head;
 while((strcmp(head->name,student_name)!=0)&&(head!=NULL))
 {
  p=head;
  head=head->next;
 }
 printf("-----Search results-----\n");
 printf("%s %s %d %s\n",head->name,head->student_id,head->age,head->gender);
}

void menu()
{
 printf("====================================\n");
 printf("+----------1:创建一个学生信息系统-----+\n");
 printf("+----------2:插入学生信息------------+\n");
 printf("+----------3:删除学生信息------------+\n");
 printf("+----------4:查找学生信息------------+\n");
 printf("+----------5:显示学生信息------------+\n");
 printf("+----------0:退出-------------------+\n");
 printf("====================================\n");
 printf("\n");
 printf("+ + + + +请选择:+ + + + +\n");
}
int main()
{
 int choice;
 std *head=NULL;
 int len;
 len=sizeof(struct student);
 while(1)
 {

  menu();
  scanf("%d",&choice);
  switch(choice)
  {
   case 1:
    head=student_create();break;
   case 2:
    head=student_insert(head);break;
   case 3:
    head=student_delete(head); break;
   case 4:
    student_find(head); break;
   case 5:
    student_show(head); break;
   case 0:
    exit(0);
   default:
    printf("~~~choice error~~~\n");
  }
 }
 return 0;

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值