美文网首页
学生信息管理系统3.0

学生信息管理系统3.0

作者: star_night | 来源:发表于2017-05-14 10:29 被阅读0次
    #include<stdio.h>
    #include<stdlib.h>
    #define MAX 20
    typedef struct Node{
        int id;
        char name[MAX];
        char xy[MAX];
        int year;
        int month;
        int day;
        struct Node *next;
    }node;
    void menu()//菜单页面
    {
        printf("\n\n");
        printf("\t==============================\n");
        printf("\t   欢迎使用学生信息管理系统   \n");
        printf("\t==============================\n");
        printf("\t    1. 录入学生信息 \n");
        printf("\t    2. 查询学生信息 \n");
        printf("\t    3. 修改学生信息 \n");
        printf("\t    4. 删除学生信息 \n");
        printf("\t    5. 升序显示所有学生信息 \n");
        printf("\t    6. 降序输出所以学生信息 \n");
        printf("\t    7. 保存信息 \n");
        printf("\t    8. 读取信息 \n");
        printf("\t    9. 退出 \n");
        printf("\t==============================\n");
        printf("\t请选择功能1-9:");
        printf("\n\n");
    }
    void enter_inf(node *p)//录入学生信息
    {
        printf("\t==============================\n");
        printf("请输入\n");
        printf("学生学号(id)");
        scanf("%d",&p->id);
        getchar();
        printf("学生姓名:");
        fgets(p->name,MAX,stdin);
        printf("学生性别:");
        fgets(p->xy,MAX,stdin);
        printf("出生日期(年):");
        scanf("%d",&p->year);
        printf("出生日期(月):");
        scanf("%d",&p->month);
        printf("出生日期(日):");
        scanf("%d",&p->day);
        printf("\t==============================\n");
        printf("\n\n");
    }
    void node_creat_one(node *Head)//单个学生信息创建,并升序排列
    {
        node *p, *pTemp, *pre;
        int tag=1;
        pTemp=(node *)malloc(sizeof(node));
        enter_inf(pTemp);
        pre=Head;
        p=Head->next;
        while(p!=NULL){
            if(pTemp->id < p->id){
                pre->next=pTemp;
                pTemp->next=p;
                tag=0;
            }
            else if(pTemp->id == p->id){
                tag=0;
                printf("此 id 已存在!\n");
                break;
            }
            pre=p;
            p=p->next;
            if(!tag) break;
        }
        if(tag){
            pre->next=pTemp;
            pTemp->next=p;
        }
    }
    int node_printf_one(node *p)//打印单个学生信息
    {
        if(!p)
            return 1;
        printf("\t==============================\n");
        printf("\t学生学号(id):%08d\n",p->id);
        printf("\t学生姓名:%s",p->name);
        printf("\t学生性别:%s",p->xy);
        printf("\t出生日期:%d/%02d/%02d\n",p->year,p->month,p->day);
        printf("\t==============================\n");
        printf("\n\n");
        return 0;
    }
    void node_printf_all(node *Head)//打印所以学生信息
    {
        node *p=Head->next;
        while(p!=NULL){
            node_printf_one(p);
            p=p->next;
        }
    }
    node *node_find(node *Head,int id)//查询此id学生节点
    {
        node *p=Head->next;
        while( p->id != id){
            p=p->next;
            if(!p)
                break;
        }
        return p;
    }
    void node_correct(node *Head)//修改此id学生节点
    {
        node *p;
        int id;
        printf("请输入学生id:");
        scanf("%d",&id);
        printf("\n\n");
        p=node_find(Head,id);
        if(p==NULL)
            printf("发生错误!\n无此id!\n");
        else{
            enter_inf(p);
            printf("修改成功!\n");
        }
    }
    void node_delect(node *Head)//删除此id学生节点
    {
        node *p=Head->next, *pre=Head;
        int id;
        printf("请输入学生id:");
        scanf("%d",&id);
        while(p && p->id != id){
            pre=p;
            p=p->next;
        }
        if(p != NULL){
            pre->next = p->next;
            printf("删除成功!\n");
        }
        else
            printf("发生错误,无此id!\n按任意键退出!\n");
    }
    void node_creat_more(node *Head)//多个学生信息录入
    {
        char chioce;
        do{
            node_creat_one(Head);
            getchar();
            printf("Continue?(Y/N)");
            chioce=getchar();
        }while(chioce=='y' || chioce=='Y');
    }
    void node_save(node *Head)//文件保存
    {
        node *p;
        FILE *fp;
        char filename[40];
        printf("请输入要保存的文件名:");
        scanf("%s",filename);
        if((fp=fopen(filename,"wt"))==NULL){
            printf("写文件出错,按任意键退出!");
            getchar();
            exit(1);
        }
        for(p=Head->next;p!=NULL;p=p->next)
            fprintf(fp,"%d %s %s %d %d %d\n",p->id,p->name,p->xy,p->year,p->month,p->day);
        printf("\n文件保存成功!按任意键退出!\n");
        getchar();
        fclose(fp);
    }
    node *node_read(node *Head)//文件读取
    {
        node *p, *pre, *r;
        FILE *fp;
        char filename[40];
        printf("请输入要打开的文件名:");
        scanf("%s",filename);
        if((fp=fopen(filename,"rt"))==NULL){
            printf("\n读文件出错!\n");
            return NULL;
        }
        p=Head->next;
        pre=p;
        do{
            fscanf(fp,"%d %s %s %d %d %d\n",&p->id,p->name,p->xy,&p->year,&p->month,&p->day);
            p=(node *)malloc(sizeof(node));
            pre->next=p;
            r=pre;
            pre=p;
        }while(!feof(fp));
        r->next=NULL;
        fclose(fp);
        printf("\n文件读取成功!\n");
        return Head;
    }
    node  *node_printf_all_1(node *head)//逆序输出
    {
        if(head==NULL)
            return NULL;
        node_printf_all_1(head->next);
        node_printf_one(head);
        return NULL;
    }
    int main()
    {
        node *Head, *head;
        Head=(node *)malloc(sizeof(node));
        head=(node *)malloc(sizeof(node));
        Head->next=head;
        int key,tag=1,id_1;
        char pig;
        while(1){
            menu();
            scanf("%d",&key);
            switch(key){
                case 1:
                    if(tag){
                        enter_inf(head);
                        getchar();
                        printf("Continue?(Y/N)");
                        pig=getchar();
                        if(pig=='y' || pig=='Y')
                            node_creat_more(Head);
                        tag=0;
                    }
                    else
                        node_creat_more(Head);
                    break;
                case 2:
                    if(tag){
                        printf("\t当前没有学生信息\n");
                        break;
                    }
                    do{
                        printf("请输入学生id:");
                        scanf("%d",&id_1);
                        if(node_printf_one(node_find(Head,id_1)))
                            printf("无此id!\n");
                        printf("Continue(y/n)?\n");
                        getchar();
                    pig=getchar();
                    }while(pig=='y' || pig=='Y');
                    break;
                case 3:
                    if(tag){
                        printf("\t当前没有学生信息\n");
                        break;
                    }
                    do{
                        node_correct(Head);
                        getchar();
                        printf("Continue(y/n)?\n");
                    pig=getchar();
                    }while(pig=='y' || pig=='Y');
                    break;
                case 4:
                    if(tag){
                        printf("\t当前没有学生信息\n");
                        break;
                    }
                    do{
                        node_delect(Head);
                        getchar();
                        printf("Continue(y/n)?\n");
                    pig=getchar();
                    }while(pig=='y' || pig=='Y');
                    break;
                case 5:
                    if(tag)
                        printf("\t当前没有学生信息\n");
                    else
                        node_printf_all(Head);
                    break;
                case 6:
                    if(tag)
                        printf("\t当前没有学生信息\n");
                    else
                        node_printf_all_1(head);
                    break;
                case 7:
                    if(tag){
                        printf("\t当前没有学生信息\n");
                        break;
                    }
                    node_save(Head);
                    break;
                case 8:
                    if(!node_read(Head))
                        tag=1;
                    else
                        tag=0;
                    break;
                case 9:
                    exit(0);
                    break;
                default:
                    printf("输入错误!请重新输入!\n");
                    break;
            }
            if(Head->next == NULL)
                tag=1;
            printf("按任意键继续!\n");
            getchar();
            getchar();
        }
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:学生信息管理系统3.0

          本文链接:https://www.haomeiwen.com/subject/qgxqxxtx.html