这是我的学生管理系统代码,求解大神怎样修改

发布于:2022-12-18 ⋅ 阅读:(456) ⋅ 点赞:(0)

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef struct student{ //定义学生的结构体

    int number;    //学号

    char name[50];    //姓名

    char sex[3];    //性别

    int age;    //年龄

    int four_score[4];    //四科成绩

    int average_score;    //平均成绩

    int total_score;    //总成绩

    struct student *next;    //指向下一结构体的指针

} LinkList;

 //声明函数

LinkList *input();  

void output(LinkList *linklist);//输出        

void insert(LinkList *linklist);//插入

void sort(LinkList *linklist);//排序

void delete(LinkList *linklist);//删除

void find(LinkList *linklist);//查找

 //主函数

int main()

{

    char c;

    int j=1;

    printf_s("please enter the num ,name,age,sexy and score:\n");

    LinkList *linklist = input();   //调用input函数

    printf_s("\nthe input student:\n");

    output(linklist);

    while(j)

    {

        printf_s("\n1.intput stuedent record\n2.sort student record\n3.search student record\n4.delete student record\n5.output student record\n6.exit system\n");

        printf_s("please enter the opeartion what you want:\n");

        scanf_s(" %c",&c);

        }

        while(j)

        {if(c =='1'){   //输入学生记录

            insert(linklist);

            printf_s("the following are the modified tables:\n");

            output(linklist);

        }

        else if(c == '2'){  //排序学生记录

            sort(linklist);

            printf_s("the following are the modified tables:\n");

            output(linklist);

        }

        else if(c =='3'){   //查找学生记录

            find(linklist);

        }

        else if(c =='4'){   //删除学生记录

            delete(linklist);

            printf_s("the following are the modified tables:\n");

            output(linklist);

        }

        else if(c == '5'){  //输出学生记录

            output(linklist);

        }

        else if(c == '6'){  //退出系统

            printf_s("has withdrawn");

            j=0;

        }      

    }

    getchar();getchar();

    return 0;

}

LinkList *input(LinkList *linklist){

    LinkList *head=NULL, *node=NULL, *end=NULL;  //定义头节点,普通节点,尾部节点,并初始化

    head = (LinkList*)malloc(sizeof(LinkList));//分配地址

    end = head;         //若是空链表则头尾节点一样

    for (int i = 0; i <10; i++) {

        node = (LinkList*)malloc(sizeof(LinkList));

        scanf_s("%d %s %s %d %d %d %d %d",&node->number,node->name,node->sex,&node->age,&node->four_score[0],&node->four_score[1],&node->four_score[2],&node->four_score[3]);

        node->average_score = (node->four_score[0]+node->four_score[1]+node->four_score[2]+node->four_score[3])/4;

        node->total_score = node->four_score[0]+node->four_score[1]+node->four_score[2]+node->four_score[3];

        end->next = node;

        end = node;

    }

    end->next = NULL;   //结束创建,给end的指针域置空

    return head;        //返回头节点的地址

}

void output(LinkList *linklist)

{

    int j=1;

    LinkList *p = linklist;

    while (p->next != NULL) {

        p = p->next;

        printf_s("%d. %d %s %s %d  %-3d  %-3d  %-3d  %-3d  %-3d %3d\n",j,p->number,p->name,p->sex,p->age,p->four_score[0],p->four_score[1],p->four_score[2],p->four_score[3],p->average_score,p->total_score);

        j++;

    }

}

void insert(LinkList *linklist)

{

    LinkList *p = linklist ,*pr;

    pr = (LinkList*)malloc(sizeof(LinkList));  //让pr指向新建节点申请的内存

    printf_s("please enter the student record value: \n");

    scanf_s("%d %s %s %d %d %d %d %d",&pr->number,pr->name,pr->sex,&pr->age,&pr->four_score[0],&pr->four_score[1],&pr->four_score[2],&pr->four_score[3]);

    pr->average_score = (pr->four_score[0]+pr->four_score[1]+pr->four_score[2]+pr->four_score[3])/4;

    pr->total_score = pr->four_score[0]+pr->four_score[1]+pr->four_score[2]+pr->four_score[3];

    while((p->next->number)<(pr->number)){          

        p = p->next;    

        if(p->next==NULL){

            break;

        }

    }

    if(p!=NULL){

        pr->next = p->next; //将新建节点的地址指向将要插入节点的后一个节点的地址

        p->next = pr;       //使插入节点指向新建节点      

    }

    else{

        pr->next = NULL;

        p->next = pr;

    }

}

void delete(LinkList *linklist)

{

    char date[50]={0};      

    int num;

    LinkList *p = linklist,*pr = linklist;

    printf_s("which one would you delete:\n");

    scanf_s("%s",date);    //输入需删除的数据,姓名或学号

    if (strspn(date, "0123456789") == strlen(date)){

        num=atoi(date);

        while(num != (p->number)||(strcmp(date,p->name)==0)){  

            pr = p;

            p = p->next;

            if(p==NULL){

                break;

            }

        }          

    }

    else{

        while(strcmp(date,p->name)!=0){

            pr = p;

            p = p->next;

            if(p==NULL){

                break;

            }

        }

    }

    if(p!=NULL){

        pr->next = p->next;

        free(p);

    } else{

        pr->next = NULL;

        free(p);

    }

}

void find(LinkList *linklist)

{

    char date[50]={0};      

    int num;

    LinkList *p = linklist;

    printf_s("which one would you want to search\n");

    scanf_s("%s",date);    //输入需查找的数据,姓名或学号

    if (strspn(date, "0123456789") == strlen(date)){    //判断是否为学号(数字)

        num=atoi(date);    //是的话转换为数字

        while(num != (p->number)||(strcmp(date,p->name)==0)){    

            p = p->next;

            if(p==NULL){

                break;

            }

        }          

    }

    else{

        while(strcmp(date,p->name)!=0){    //判断名字是否相同

            p = p->next;

            if(p==NULL){

                break;

            }

        }

    }

    printf_s("%d %s %s %d  %-3d  %-3d  %-3d  %-3d  %-3d %3d\n",p->number,p->name,p->sex,p->age,p->four_score[0],p->four_score[1],p->four_score[2],p->four_score[3],p->average_score,p->total_score);

}

void sort(LinkList *linklist)    //用了冒泡排序

{

    char b;

    LinkList *pr,*p,*tail,*temp;

    tail = NULL;

    pr = linklist;

    printf_s("select which way to sort it(1.numnum 2.the final score):\n");

    scanf_s(" %c",&b);

    while ((linklist->next->next)!=tail){

        p = linklist->next;

        pr = linklist;

        while (p->next!=tail){

            if(b == '1'){

                if((p->number)>(p->next->number)){

                    pr->next=p->next;

                    temp=p->next->next;

                    p->next->next=p;

                    p->next=temp;

                    p=pr->next;

                }

            }

            else if(b == '2'){

                if((p->total_score)>(p->next->total_score)){

                    pr->next=p->next;  

                    temp=p->next->next;

                    p->next->next=p;

                    p->next=temp;

                    p=pr->next;

                }

            }

            p=p->next;

            pr=pr->next;

        }

        tail=p;

    }

}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到