学生管理系统(操作系统)(半成品)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
typedef struct List{
    long long stdnum;//学号
    char stuname[100];
    char sex[100];
    char stuclass[100];
    char stusubject[100];
    char stucollege[100];
    struct List *next;
}AnimeList;
AnimeList *Creat(int n);//创建链表
AnimeList *ListSort(AnimeList *p);//链表排序按照从小到大的顺序,返回的是排序后链表的首地址,
AnimeList *ListPartFind(AnimeList *p,int n);//返回第N项的地址
void Insert(AnimeList *p);//添加节点
void Change(AnimeList *p);//改变节点数据
void Delete(AnimeList *p);//删除节点(选择删除)
void Delete_P(AnimeList *p,int n);//删除第N项节点
void PrintList(AnimeList *P);//输出(自选)
void ListSearch(AnimeList *p);//按照条件搜索
void CopyListPart(AnimeList *a,AnimeList *b);//复制后面给前面
int ListSearchMin(AnimeList *p);//寻找最小学号的是第几项
int ListLength(AnimeList *p);//返回链表长度
void Mananger(char n,AnimeList *P);
void UI();
void welcome_menu();
int main(){
    int n;
    printf("欢迎使用学生信息管理系统\n首先请输入你想存储的信息个数\n");
    scanf("%lld",&n);
    AnimeList *p=Creat(n);
    char t;
    getchar();
    while(1){
        UI();
        scanf("%c",&t);
        if(t=='7'){
        p=ListSort(p);
        p=ListSort(p);
        }
        Mananger(t,p);
    }
    return 0;
}
AnimeList *Creat(int n){
    AnimeList *head,*end,*node;
    head=(AnimeList *)malloc(sizeof(AnimeList));
    end=head;
    int i=0;
    while(i++<n){
        node=(AnimeList *)malloc(sizeof(AnimeList));
        printf("请输入学生学号\n");
        scanf("%lld",&node->stdnum);
        printf("请输入学生姓名\n");
        scanf("%s",&node->stuname);
        printf("请输入学生性别\n");
        scanf("%s",&node->sex);
        printf("请输入学生班级\n");
        scanf("%s",&node->stuclass);
        printf("请输入学生学院\n");
        scanf("%s",&node->stucollege);
        printf("请输入学生专业\n");
        scanf("%s",&node->stusubject);
        printf("创建完成,数据存储成功\n\n");
        end->next=node;
        end=node;
    }
    end->next=NULL;
    return head;
}
int ListLength(AnimeList *p){
    AnimeList *node=p->next;
    int t=0;
    while(node!=NULL){
        t++;
        node=node->next;
    }
    return t;
}
void Insert(AnimeList *p){
    AnimeList *node=p,*end;
    printf("请选择在第几项插入\n");
    int n,i=0;
    char c;
    scanf("%lld",&n);
    printf("请选择前插还是后插\n前插(1)\n后插(2)\n");
    getchar();
    while(1){ 
        i=0;
    scanf("%c",&c);
    if(c=='1'){
        i=1;
        while(i<n){
            node=node->next;
            i++;
        }
        end=(AnimeList *)malloc(sizeof(AnimeList));
        printf("请输入学生学号\n");
        scanf("%lld",&end->stdnum);
        printf("请输入学生姓名\n");
        scanf("%s",&end->stuname);
        printf("请输入学生性别\n");
        scanf("%s",&end->sex);
        printf("请输入学生班级\n");
        scanf("%s",&end->stuclass);
        printf("请输入学生学院\n");
        scanf("%s",&end->stucollege);
        printf("请输入学生专业\n");
        scanf("%s",&end->stusubject);
        printf("创建完成,数据存储成功\n\n");
        end->next=node->next;
        node->next=end;
        break;
    }
    else if(c=='2'){
        while(i++<n)
            node=node->next;
        end=(AnimeList *)malloc(sizeof(AnimeList));
        printf("请输入学生学号\n");
        scanf("%lld",&end->stdnum);
        printf("请输入学生姓名\n");
        scanf("%s",&end->stuname);
        printf("请输入学生性别\n");
        scanf("%s",&end->sex);
        printf("请输入学生班级\n");
        scanf("%s",&end->stuclass);
        printf("请输入学生学院\n");
        scanf("%s",&end->stucollege);
        printf("请输入学生专业\n");
        scanf("%s",&end->stusubject);
        end->next=node->next;
        node->next=end;
        break;
    }
    else
    printf("输入错误,请重新输入\n");
    }
}
void PrintList(AnimeList* P){
    int n,i;
    AnimeList* p=P;
    char c;
    getchar();
    while(1){
        printf("请选择\n输出特定单项(1)\n输出全部(2)\n");
        scanf("%c",&c);
        if(c=='1'){
            i=0;
            printf("要输出第几项?\n");
            scanf("%lld",&n);
            while(i<n){
            p=p->next;
            i++;}
            printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",p->stdnum,p->sex,p->stuname,p->stucollege,p->stusubject,p->stuclass);
            break;
        }
       else if(c=='2'){
           p=p->next;
           while(p!=NULL){
            printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n\n",p->stdnum,p->sex,p->stuname,p->stucollege,p->stusubject,p->stuclass);
               p=p->next;
           }
           break;
       }
       else
       printf("输入错误,请重新输入\n");
    }
}
void Change(AnimeList *p){
    AnimeList *node=p;
    int n,i=0;
    printf("现在一共有%lld项,要改哪个?\n",ListLength(p));
    scanf("%lld",&n);
    while(i<n){
        node=node->next;
        i++;
    }
    while(1){
        printf("请选择要改的地方\n1)学号\n2)学生性别\n3)学生姓名\n4)学生学院\n5)学生专业\n6)学生班级\n");
        scanf("%d",&n);
        if(n==1){
        printf("修改后的学号:\n");
        scanf("%lld",&node->stdnum);
        break;
        }
        else if(n==2){ 
        printf("修改后的学生性别:\n");
        scanf("%s",&node->sex);
        break;
        }
        else if(n==3){ 
        printf("修改后的学生姓名:\n");
        scanf("%s",&node->stuname);
        break;
        }
        else if(n==4){
        printf("修改后的学生学院:\n");
        scanf("%s",&node->stucollege);
        break;
        }
        else if(n==5){
        printf("修改后的学生专业:\n");
        scanf("%s",&node->stusubject);
        break;
        }
        else if(n==6){
        printf("修改后的学生班级:\n");
        scanf("%s",&node->stuclass);
        break;
        }
        else
        printf("输入错误,请重新输入\n");
    }
}
void Delete(AnimeList *p){
    AnimeList *node=p,*end;
    int n,i=0;
    printf("现在有%d项,你要删除第几项?\n",ListLength(p));
    scanf("%lld",&n);
    while(i<n-1){
        node=node->next;
        i++;
    }
    end=node->next;
    node->next=end->next;
    free(end);
}
void ListSearch(AnimeList *p){
    AnimeList *node=p;
    printf("请选择搜索方式\n1)按照学号2)按照姓名3)按照学院4)按照专业\n");
    int i,n,t=0,f=0;
    char a[100];
    long long s;
    while(1){
        f=0;
        scanf("%lld",&n);
        if(n==1){
            printf("请输入要搜索的学号\n");
            scanf("%lld",&s); 
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(node->stdnum==s){
                    printf("找到了,是第%d项\n",t);
                    printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
                    f++;
                }
                if(node->next==NULL)
                break;
            }
                if(node->next==NULL&&f==0)
                printf("没找到\n");
                break;
        }
        else if(n==2){
            printf("请输入要搜索的学生姓名\n");
            scanf("%s",&a);
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(strcmp(node->stuname,a)==0){
                    printf("找到了,是第%d项\n",t);
                    printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
                    f++;
                }
                if(node->next==NULL)
                break;
            }
            if(node->next==NULL&&f==0){
                printf("没找到\n");
            }
            break;
        }
        else if(n==3){
            printf("请输入要搜索的学生学院\n");
            scanf("%s",&a);
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(strcmp(node->stucollege,a)==0){
                    printf("找到了,是第%d项\n",t);
                    printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
                    f++;
                }
                if(node->next==NULL)
                break;
            }
            if(node->next==NULL&&f==0){
                printf("没找到\n");
            }
            break;
        }
        else if(n==4){
            printf("请输入要搜索的学生专业\n");
            scanf("%s",&a);
            while(node->next!=NULL){
                t++;
                node=node->next;
                if(strcmp(node->stusubject,a)==0){
                    printf("找到了,是第%d项\n",t);
                    printf("学号:%lld\n学生性别:%s\n学生姓名:%s\n学生学院:%s\n学生专业:%s\n学生班级:%s\n",node->stdnum,node->sex,node->stuname,node->stucollege,node->stusubject,node->stuclass);
                    f++;
                }
                if(node->next==NULL)
                break;
            }
            if(node->next==NULL&&f==0){
                printf("没找到\n");
            }
            break;
        }
        else
        printf("输入错误,请重新输入\n");
    }
}
int ListSearchMin(AnimeList *p){
    int i=1,index=1;
    AnimeList *head=p->next;
    long long  r=head->stdnum;
    while(head->next!=NULL){
        head=head->next;
        i++;
        if(head->stdnum<r){
            index=i;
        }
    }
    return index;
}
void CopyListPart(AnimeList *a,AnimeList *b){
    a->stdnum=b->stdnum;
    strcpy(a->sex,b->sex);
    strcpy(a->stuname,b->stuname);
    strcpy(a->stucollege,b->stucollege);
    strcpy(a->stusubject,b->stusubject);
    strcpy(a->stuclass,b->stuclass);
}
AnimeList *ListPartFind(AnimeList *p,int n){
    p=p->next;
    int i=1;
    while(i<n){
        p=p->next;
        i++;
    }
    return p;
}
void Delete_P(AnimeList *p,int n){
    AnimeList *node=p,*end;
    int i=0;
    while(i<n-1){
        node=node->next;
        i++;
    }
    end=node->next;
    node->next=end->next;
    free(end);
}
AnimeList *ListSort(AnimeList *p){
    AnimeList *head_o=p,*node,*end,*head,*min;
    head=(AnimeList *)malloc(sizeof(AnimeList));
    end=head;
    int t=ListLength(p);
    int i=0;
    int m;
    while(p->next!=NULL){
        node=(AnimeList *)malloc(sizeof(AnimeList));
        m=ListSearchMin(p);
        min=ListPartFind(p,m);
        CopyListPart(node,min);
        Delete_P(p,m);
        end->next=node;
        end=node;
    }
    end->next=NULL;
    return head;
}
void Mananger(char n,AnimeList *P){
    switch(n){
        case '1':
        Insert(P);
        system("PAUSE");
        break;
        case '2':
        Change(P);
        system("PAUSE");
        break;
        case '3':
        Delete(P);
        system("PAUSE");
        break;
        case '4':
        PrintList(P);
        system("PAUSE");
        break;
        case '5':
        printf("当前有%d份学生信息\n",ListLength(P));
        system("PAUSE");
        break;
        case '6':
        ListSearch(P);
        system("PAUSE");
        break;
        case '7':
        printf("信息已经按照学生编号排序完成\n");
        system("PAUSE");
        break;
        case '0':
        printf("正在退出程序,谢谢使用\n");
        system("PAUSE");
        exit(0);
        break;
        default :
        printf("输入错误请重新输入\n");
        break;
    }
}
void UI(){
	system("cls");
	
	printf("\t\t|* * * * * * 欢迎使用* * * * * * |\n");
    
	printf("\t\t|.....................................|\n");

    printf("\t\t| 请做出你的选择 (0-7) |\n");

    printf("\t\t|.....................................|\n");

    printf("\t\t| 1----增加信息 |\n");

    printf("\t\t| 2----修改信息 |\n");

    printf("\t\t| 3----删除信息 |\n");

    printf("\t\t| 4----输出信息 |\n");

    printf("\t\t| 5----返回当前信息份数 |\n");

    printf("\t\t| 6----搜索信息 |\n");

    printf("\t\t| 7----信息排序 |\n");

    printf("\t\t| 0----退出系统 |\n");

    printf("\t\t|.....................................|\n");

    printf("\t\t|* * * * * * * * * * * * * * * * * * *|\n");
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值