学生信息管理系统 输入和输出 链表

来源:互联网 发布:北京110网络报警平台 编辑:程序博客网 时间:2024/06/06 01:01
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct student
{
char name [4];
char number[20];
int sex;
int year;
int major;
int uclass;
};


typedef struct student STUDENT;


struct listNode
{
STUDENT data;
struct listNode* next;
};


typedef struct listNode LISTNODE;
typedef struct listNode* LISTNODEPTR;


void build(LISTNODEPTR*);
void insert(LISTNODEPTR*,STUDENT);
void print(LISTNODEPTR);


int main()
{//case1:
    int option,pass;
    LISTNODEPTR myPtr = NULL;
    STUDENT item;
    //判断是否建立新表
    printf("是否建立新表?是请输入1,否请输入2\n");
    scanf("%d",&option);
    if(option == 1)
    {
        //建立新表
        build(&myPtr);
        //输入信息
        printf("\n请输入一名学生信息\n\n包括姓名、学号、性别、出生年份、专业、班级,用空格隔开\n\n性别--男1-女2\n专业--计算机1-软件2-网络3-物联网4\n\n");
        scanf("%s%s%d%d%d%d",item.name,item.number,&item.sex,&item.year,&item.major,&item.uclass);
        printf("是否继续输入?输入0继续,输入其他数字退出\n");
        scanf("%d",&pass);
        //判断是否继续输入
        while(pass == 0)
        {
            insert(&myPtr,item);
            printf("请输入下一名学生信息:\n");
            scanf("%s%s%d%d%d%d",item.name,item.number,&item.sex,&item.year,&item.major,&item.uclass);
            printf("是否继续输入?输入0继续,输入其他数字退出\n");
            scanf("%d",&pass);
        }
        printf("\n信息录入完成!\n");
        printf("新的学生信息表是:\n");
        print(myPtr);
    }
    else
    {
        //直接插入信息
        printf("\n请输入一名学生信息\n\n包括姓名、学号、性别、出生年份、专业、班级,用空格隔开\n\n性别--男1-女2\n专业--计算机1-软件2-网络3-物联网4\n\n");
        scanf("%s%s%d%d%d%d",item.name,item.number,&item.sex,&item.year,&item.major,&item.uclass);
        printf("是否继续输入?输入0继续,输入其他数字退出\n");
        scanf("%d",&pass);
        //判断是否继续输入
        while(pass == 0)
        {
            insert(&myPtr,item);
            printf("请输入下一名学生信息:\n");
            scanf("%s%s%d%d%d%d",item.name,item.number,&item.sex,&item.year,&item.major,&item.uclass);
            printf("是否继续输入?输入0继续,输入其他数字退出\n");
            scanf("%d",&pass);
        }
        printf("\n信息录入完成!\n");
        printf("新的学生信息表是:\n");
        print(myPtr);


    }


    return 0;
}


void build(LISTNODEPTR * myPtr)
{
    (*myPtr) = (LISTNODEPTR)malloc(sizeof(LISTNODE));
    (*myPtr)->next = NULL;
}


void insert(LISTNODEPTR* myPtr,STUDENT item)
{
    LISTNODEPTR ne;
    ne = (LISTNODEPTR)malloc(sizeof(LISTNODE));
    //在结点的数据域中存储数据
    strcpy(ne->data.name , item.name);
    strcpy(ne->data.number , item.number);
    ne->data.sex = item.sex;
    ne->data.year = item.year;
    ne->data.major = item.major;
    ne->data.uclass = item.uclass;
    //插入新结点-头插法
    ne->next = (*myPtr)->next;
    (*myPtr)->next = ne;


}


void print(LISTNODEPTR myPtr)
{
    int i = 1;
    if(myPtr->next == NULL)
        printf("学生信息表中没有数据!请输入数据后再打印\n\n");
    else
    {
        while(myPtr->next!= NULL)
        {


            myPtr = myPtr->next;
            printf("[%d]-%s %s %d %d %d %d\n",i,myPtr->data.name,myPtr->data.number,myPtr->data.sex,myPtr->data.year,myPtr->data.major,myPtr->data.uclass);


            i++;
        }
    }


}
0 0