/*
* 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;
}