精华内容
下载资源
问答
  • 主要为大家详细介绍了C语言链表实现学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • makefile   main : main.o stu.o llist.o ...请输入学生姓名:\n ...请输入学生电话:\n ...未能成功添加学生信息。\n " ); else printf( " 成功添加学生信息。\n " ); sleep( 2 ); } int delect_...

    makefile

     

    main : main.o stu.o llist.o
        gcc -Wall -o $@ $^
    clean :
        rm -rf main *.o

     

     

     

    头文件

    llist.h

    #ifndef __LLIST_H
    #define __LLIST_H
    
    enum a
    {
        HEADINSERT,
        TAILINSERT
    };
    
    typedef void (llist_print)(const void *data);
    typedef int (llist_cmp)(const void *data, const void *cp);
    typedef void LLIST;
    
    LLIST *llist_handler(int size);
    
    int llist_insert(LLIST *h, const void *data, int mode);
    
    int llist_delect(LLIST *h, const void *data, llist_cmp cmp);
    
    void *llist_find(LLIST *h, const void *data, llist_cmp cmp);
    
    void *llist_display(LLIST *h, llist_print print);
    
    void *llist_destroy(LLIST *h);
    
    int llist_fetch(LLIST *handler, void *b_data, llist_cmp cmp, void *save);
    
    int llist_output(LLIST *h, void *save);
    
    #endif

    stu.h

    #ifndef __STU_H
    #define __STU_H
    
    #include "llist.h"
    
    struct stu
    {
        int id;
        char name[20];
        long int tel;
    };
    
    void insert_data(LLIST *handler);
    
    int delect_data(LLIST *handler);
    
    int    fetch_data(LLIST *handler);
    
    int find_data(LLIST *handler);
    
    void display_data(LLIST *handler);
    
    void sort_data(LLIST *handler);
    
    int save_data(LLIST *handler);
    
    int read_data(LLIST *handler);
    
    #endif

    llist.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "llist.h"
    
    struct llist_node
    {
        struct llist_node *prev;
        struct llist_node *next;
        char data[0];
    };
    
    struct head_node
    {
        int size;
        struct llist_node node;
    };
    
    LLIST *llist_handler(int size)
    {
        struct head_node *handler = NULL;
    
        handler = malloc(sizeof(LLIST));
        if(handler == NULL)
            return NULL;
        handler->size = size;
        handler->node.prev = handler->node.next = &handler->node;
        
        return handler;
    }
    
    int llist_insert(LLIST *h, const void *data, int mode)
    {
        struct head_node *handler = h;
        struct llist_node *newnode = NULL;
        struct llist_node *p = &handler->node;
    
        newnode = malloc(sizeof(struct llist_node) + handler->size);
        if(newnode == NULL)
            return -1;
        memcpy(newnode->data, data, handler->size);
        switch(mode)
        {
            case HEADINSERT :    break;
            case TAILINSERT :    p = p->prev;
                                break;
            default :            free(newnode);
                                break;
        }
        newnode->next = p->next;
        newnode->prev = p->next->prev;
        newnode->prev->next = newnode;
        newnode->next->prev = newnode;
        return 0;
    }
    
    struct llist_node *_find(LLIST *h, const void *data, llist_cmp cmp)
    {
        struct head_node *handler = h;
        struct llist_node *cur = NULL;
    
        for(cur = handler->node.next; cur != &handler->node; cur = cur->next)
        {
            if(cmp(cur->data, data))
                return cur;
        }
        return NULL;
    }
    
    void *llist_find(LLIST *h, const void *data, llist_cmp cmp)
    {
        struct head_node *handler = h;
        struct llist_node *find = NULL;
    
        find = _find(handler, data, cmp);
        if(NULL == find)
            return NULL;
        return find->data;
    }
    
    int llist_delect(LLIST *h, const void *data, llist_cmp cmp)
    {
        struct head_node *handler = h;
        struct llist_node *find = NULL;
    
        find = _find(handler, data, cmp);
        if(NULL == find)
            return -1;
        find->prev->next = find->next;
        find->next->prev = find->prev;
        free(find);
    }
    
    void *llist_display(LLIST *h, llist_print print)
    {
        struct head_node *handler = h;
        struct llist_node *cur = handler->node.next;
    
        while(cur != &handler->node)
        {
            print(cur->data);
            cur = cur->next;
        }
    }
    
    void *llist_destroy(LLIST *h)
    {
        struct head_node *handler = h;
        struct llist_node *p = NULL;
        struct llist_node *cur = NULL;
        
        for(p = handler->node.next; p != &handler->node; p = p->next)
        {
            cur = p;
            p->next->prev = p->prev;
            p->prev->next = p->next;
            free(p);
            p = cur;
        }
        free(handler);
    }
    
    int llist_fetch(LLIST *h, void *b_data, llist_cmp cmp, void *save)
    {
        struct head_node *handler = h;
        struct llist_node *cur = NULL;
        struct llist_node *find = NULL;
    
        find = _find(handler, b_data, cmp);
        if(NULL == find)
            return -1;
        memcpy(save, find->data, handler->size);
        find->next->prev = find->prev;
        find->prev->next = find->next;
        free(find);
    }
    
    int llist_output(LLIST *h, void *save)
    {
        struct head_node *handler = h;
        struct llist_node *cur = handler->node.next;
    
        if(cur == &handler->node)
            return -1;
    
        cur->next->prev = cur->prev;
        cur->prev->next = cur->next;
        memcpy(save, cur->data, handler->size);
        free(cur);
    }

    stu.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include "stu.h"
    
    static int a, ret, b, bnum, num;
    static char name[20];
    static char bname[20];
    static long int tel, lbnum, lnum;
    
    void print(const void *data)    //打印函数
    {
        const struct stu *p = data;
        printf("%d  %s  %ld\n", p->id, p->name, p->tel);
    }
    
    int id_cmp(const void *data, const void *cp)    //id对比函数
    {
        const struct stu *p = data;
        const int *cur = cp;
    
        return !(p->id - *cur);
    }
    
    int tel_cmp(const void *data, const void *cp)
    {
        const struct stu *p = data;
        const long int *cur = cp;
    
        return !(p->tel - *cur);
    }
    
    int name_cmp(const void *data, const void *cp)        //名字对比函数
    {
        const struct stu *p = data;
        const char *cur = cp;
    
        return !(strcmp(cur, p->name));
    }
    
    void insert_data(LLIST *handler)                //增加数据函数
    {
        struct stu data;
        struct stu *find = NULL;
    
        system("clear");
        printf("请输入学号:\n");
        scanf("%d", &num);
        find = llist_find(handler, &num, id_cmp);
        if(find != NULL)
        {
            printf("该学号已存在,请核对后从新输入!\n");
            sleep(2);
            return ;
        }
        data.id = num;
        printf("请输入学生姓名:\n");
        scanf("%s", name);
        memcpy(data.name, name, 20);
        printf("请输入学生电话:\n");
        scanf("%ld", &tel);
        data.tel = tel;
        ret = llist_insert(handler, &data, HEADINSERT);
        if(ret < 0)
            printf("未能成功添加学生信息。\n");
        else
            printf("成功添加学生信息。\n");
        sleep(2);
    }
    
    
    int delect_data(LLIST *handler)                //删除数据函数
    {
    LEAP :    
        printf("1.输入学号删除\t2.输入姓名删除\n");
        scanf("%d", &b);
        if(b == 1)
        {
            system("clear");
            printf("请输入要删除学生的学号:\n");
            scanf("%d", &num);
            ret = llist_delect(handler, &num, id_cmp);    
            if(ret < 0)
                return -1;
            else
                printf("成功删除学号为%d的学生信息。\n", num);
        }
        else if(b == 2)
        {
            system("clear");
            printf("请输入要删除学生的姓名:\n");
            scanf("%s", name);
            ret = llist_delect(handler, name, name_cmp);
            if(ret < 0)
                return -1;
            else
                printf("成功删除姓名为%s的学生信息\n", name);
        }
        else
        {
            system("clear");
            printf("输入错误,请重新输入\n");
            goto LEAP;
        }
    }
    
    int    fetch_data(LLIST *handler)            //修改数据函数,修改数据后不排序
    {
        struct stu save;
    
    LEAP1:        
        printf("请选择你要修改的信息:\n1.修改学号  2.修改姓名  3.修改电话\n");
        scanf("%d", &b);
        if(b == 1)
        {
            system("clear");
            printf("请输入你要修改的学号:\n");    
            scanf("%d", &bnum);
            printf("请输入新的学号:\n");
            scanf("%d", &num);
            ret = llist_fetch(handler, &bnum, id_cmp, &save);
            if(ret < 0)
                return -1;
            else
            {
                save.id = num;
                ret = llist_insert(handler, &save, HEADINSERT);
                if(ret < 0)
                    return -2;
                goto PRINT;
            }
        }
        else if(b == 2)
        {
            system("clear");
            printf("请输入你要修改的学生姓名:\n");
            scanf("%s", bname);
            printf("请输入修改后的学生姓名:\n");
            scanf("%s", name);
            ret = llist_fetch(handler, bname, name_cmp, &save);
            if(ret < 0)
                return -1;
            else
            {
                memcpy(save.name, name, 20);
                ret = llist_insert(handler, &save, HEADINSERT);
                if(ret < 0)
                    return -2;
                else
                goto PRINT;
            }
        }
        else if(b == 3)
        {
            system("clear");
            printf("请输入你要修改的电话:\n");    
            scanf("%ld", &lbnum);
            printf("请输入新的电话:\n");
            scanf("%ld", &lnum);
            ret = llist_fetch(handler, &lbnum, tel_cmp, &save);
            if(ret < 0)
                return -1;
            else
            {
                save.tel = lnum;
                ret = llist_insert(handler, &save, HEADINSERT);
                if(ret < 0)
                    return -2;
                goto PRINT;
            }
        }
        else
        {
            system("clear");
            printf("输入错误,请重新输入\n");
            goto LEAP1;
        }
    PRINT:
        printf("修改成功!该学生的最新信息为:\n");
        print(&save);
    }
    
    int find_data(LLIST *handler)        //查找数据函数
    {
        struct stu *find = NULL;
    LEAP:
        printf("请选择查找方式:\n1.通过学号查找\t2.通过姓名查找\n");
        scanf("%d", &a);
        if(a == 1)
        {
            system("clear");
            printf("请输入学号:\n");
            scanf("%d", &num);
            find = llist_find(handler, &num, id_cmp);
            if(ret < 0)
                return -1;
            goto PRINT;
        }
        else if(a == 2)
        {
            system("clear");
            printf("请输入姓名:\n");
            scanf("%s", name);
            find = llist_find(handler, name, name_cmp);
            if(ret < 0)
                return -1;
            goto PRINT;
        }
        else
        {
            system("clear");
            printf("输入错误, 请重新输入!\n");
            goto LEAP;
        }
    
    PRINT:
        printf("已找到!\n");
        print(find);
    }
    
    void display_data(LLIST *handler)        //打印数据函数
    {
        system("clear");
        llist_display(handler, print);
    }
    
    void sort_data(LLIST *handler)        //排序函数,上限100个
    {
        struct stu save[100] = {};
        struct stu tmp;
        struct stu s;
        int i = 0, j = 0, a = 0;
    
        for(i = 0; i < 100; i++)
        {
            ret = llist_output(handler, &s);
            if(ret < 0)
                break;
            memcpy(&save[i], &s, sizeof(struct stu));
        }
    
        a = i;
        for(i = 0; i < 99; i++)
        {
            for(j = 0; j < 99 - i; j++)
            {
                if(save[j].id < save[j+1].id)
                {
                    memcpy(&tmp, &save[j], sizeof(struct stu));
                    memcpy(&save[j], &save[j+1], sizeof(struct stu));
                    memcpy(&save[j+1], &tmp, sizeof(struct stu));
                }
            }
        }
    
        for(i = 0; i < a; i++)
        {
            ret = llist_insert(handler, &save[i], HEADINSERT);
            if(ret < 0)
                break;
        }
        printf("排序完成!\n");
        sleep(2);
    }
    
    
    int save_data(LLIST *handler)        //打印到文件
    {
        FILE *fp = NULL;
        struct stu save;
    
        fp = fopen("data_save", "r+");
        if(fp == NULL)
            return -1;
    
        while(1)
        {
            ret = llist_output(handler, &save);
            if(ret < 0)
                break;
            ret = fprintf(fp, "%d\t\t\t%s\t\t\t%ld\n", save.id, save.name, save.tel);
            if(ret == EOF)
            {
                fclose(fp);
                perror("fprintf()");
                return -1;
            }
        }
        fclose(fp);
        fp = NULL;
        printf("向文件写入成功!\n");
        sleep(2);
    }
    
    int read_data(LLIST *handler)        //从文件导入链表
    {
        FILE *fp = NULL;
        struct stu save;
    
        fp = fopen("data_save", "r+");
        if(fp == NULL)
            return -1;
    
        while(1)
        {
            ret = fscanf(fp, "%d%s%ld", &save.id, save.name, &save.tel);
            if(ret == EOF)
            {
                perror("fprintf()");
                break;
            }
    //        print(&save);
            llist_insert(handler, &save, HEADINSERT);
        }
        fclose(fp);
        fp = NULL;
        printf("文件内容以存入链表!\n");
        sleep(2);
    }

    main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include "stu.h"
    #include "llist.h"
    
    
    int main(void)
    {
        struct stu *data, *save;
        char d = 0;
        int a = 0, num = 0, ret = 0, b = 0, bnum = 0;
        int tel;
        FILE *fd = NULL;
        LLIST *handler = NULL;
    
        handler = llist_handler(sizeof(struct stu));
        if(NULL == handler)
            return -1;
    /*    
        fd = fopen("data_save", "w+");
        if(fd == NULL)
        {
            perror("fopen");
            return -1;
        }
    
        ret = fprintf(fd, "%s\t\t\t%s\t\t\t%s\n", "学号", "姓名", "电话");
        if(ret == EOF)
        {
            fclose(fd);
            return -1;
        }
        
        fclose(fd);
        p = NULL;
    */
        while(1)
        {
            system("clear");
            printf("-----------------------------------------------------------\n");
            printf("---------------------学生管理系统--------------------------\n");
            printf("-----------------------------------------------------------\n");
            printf("1.增加数据\t2.删除数据\t3.修改数据\t4.查找数据\n5.打印数据\t6.排序数据\t7.保存文件\t8.读取文件\n9.退出系统\n");
            printf("请输入序号操作\n");
            scanf("%d", &a);
    
            switch(a)
            {
                case 9:    return 0;
                case 1:    insert_data(handler);
                        break;
                case 2:    ret = delect_data(handler);
                        if(ret < 0)
                            printf("删除失败!没有该学生信息。\n");
                        sleep(2);
                        break;
                case 3:    ret = fetch_data(handler);
                        if(ret == -1)
                            printf("修改失败!未找到该学生的信息。\n");
                        else if(ret == -2)
                            printf("修改失败!\n");
                        sleep(2);
                        break;
                case 4:    ret = find_data(handler);
                        if(ret < 0)
                            printf("未找到该学生信息。\n");
                        sleep(2);
                        break;
                case 5:    display_data(handler);
                        printf("按q退出\n");
                        getchar();
                        scanf("%c", &d);
                        if(d == 'q' || d == 'Q')
                            break;
                case 6: sort_data(handler);
                        break;
                case 7:    save_data(handler);
                        break;
                case 8: read_data(handler);
                        break;
                default:    printf("输入有误!\n");
                            sleep(3);
                            break;
            }
    
        }
    
        return 0;
    }

     

    转载于:https://www.cnblogs.com/zjw2030/p/11428549.html

    展开全文
  • C++ 双向链表实现学生管理系统
  • 本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下#include#include#include#include#include#includeusing namespace std;typedef struct ndoe{char id[10];char name[10];char ...

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下

    9e8ed5ce8a2813019a08a6af4b43371c.png

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;

    typedef struct ndoe{

    char id[10];

    char name[10];

    char sex[3];

    char num[10];

    struct node *next;

    }student;

    struct Student{

    student data;

    struct Student *next;

    };

    /********创建学生信息**********/

    Student * insert(Student * head){

    Student * s,*r;

    head=(Student *)malloc(sizeof(Student));

    printf("请输入学生的个数:");

    int n;

    scanf("%d",&n);

    r=head;

    printf("按照“学号 姓名 性别(M or G) 手机号”的形式输入每个学生的信息\n");

    for(int i=0;i

    s=(Student *)malloc(sizeof(Student));

    /*scanf("%s",s->data.id);

    scanf("%s",s->data.name);

    scanf("%s",s->data.sex);

    scanf("%s",s->data.num);*/

    scanf("%s%s%s%s",s->data.id,s->data.name,s->data.sex,s->data.num);

    r->next=s;

    r=s;

    }

    r->next=NULL;

    printf("录入成功\n");

    return head;

    }

    /********增加学生************/

    void add(Student *head){

    Student *s;

    s=head->next;

    while(s->next!=NULL)

    s=s->next;

    Student *ad=(Student *)malloc(sizeof(Student));

    ad->next=NULL;

    s->next=ad;

    //printf("输入新学生的信息:\n");

    scanf("%s%s%s%s",ad->data.id,ad->data.name,ad->data.sex,ad->data.num);

    printf("添加成功\n");

    return ;

    }

    /*************修改学生信息********************/

    void change(Student * head){

    printf("输入1,按学号搜索学生,并修改改学生的信息\n");

    printf("输入2,按姓名搜索学生,并修改改学生的信息\n");

    Student * s;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    printf("请输入要修改的信息:");

    char phone[10];

    scanf("%s",phone);

    strcpy(s->data.num,phone);

    printf("修改成功\n");

    break;

    }

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    printf("请输入要修改的信息:");

    char phone[10];

    scanf("%s",phone);

    strcpy(s->data.num,phone);

    printf("修改成功\n");

    break;

    }

    s=s->next;

    }

    break;

    }

    }

    return ;

    }

    /**********删除学生信息******************/

    void del(Student * head){

    printf("输入1,按学号搜索学生,并删除该学生的信息\n");

    printf("输入2,按姓名搜索学生,并删除该学生的信息\n");

    Student * s,*r;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    r=head;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    r->next=s->next;

    free(s);

    printf("删除成功\n");

    break;

    }

    r=s;

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    r=head;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    r->next=s->next;

    free(s);

    printf("删除成功\n");

    break;

    }

    r=s;

    s=s->next;

    }

    break;

    }

    }

    return ;

    }

    /**********查询学生的信息**********************/

    void check(Student * head){

    printf("输入1,按学号搜索学生,并展示该学生的信息\n");

    printf("输入2,按姓名搜索学生,并展示该学生的信息\n");

    Student * s,r;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    printf("%s %s %s %s\n",s->data.id,s->data.name,s->data.sex,s->data.num);

    break;

    }

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    printf("%s %s %s %s\n",s->data.id,s->data.name,s->data.sex,s->data.num);

    break;

    }

    s=s->next;

    }

    break;

    }

    }

    if(s==NULL)

    printf("该学生不存在\n");

    return ;

    }

    int main(){

    Student *head=NULL;

    Student *a;

    printf("***欢迎进入学生管理系统***\n");

    printf("***1:请录入学生信息***\n");

    printf("***2:请修改学生信息***\n");

    printf("***3:请删除学生信息***\n");

    printf("***4:请查询学生信息***\n");

    printf("***5:请添加新学生信息**\n");

    printf("***6: 退出管理系统 ***\n");

    printf("*************************\n");

    printf("请输入命令:");

    int n;

    while(scanf("%d",&n)&&n!=6){

    switch(n){

    case 1:{

    printf("请录入学生信息:\n");

    head=insert(a);

    break;

    }

    case 2:{

    printf("请改学生信息:\n");

    change(head);

    break;

    }

    case 3:{

    cout<

    del(head);

    break;

    }

    case 4:{

    cout<

    check(head);

    break;

    }

    case 5:{

    cout<

    add(head);

    break;

    }

    default :

    break;

    }

    printf("请继续输入命令:");

    }

    Student *s,*r;

    s=head->next;

    while(s!=NULL){

    r=s->next;

    free(s);

    s=r;

    }

    free(head);

    return 0;

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • 链表和C语言在Linux下实现简单学生管理系统
  • 这个是利用C语言实现学生管理系统,主要是应用了链表,结构体知识,经过调试并作为课程设计作业,如果您正在学习这部分内容,或许对你有用。
  • 设计一个包含学生基本信息(学号,姓名,成绩)的单链表,编程完成如下功能: ...⑶ 基本操作函数的实现放在 Linklist.cpp 文件中; ⑷ 测试应用程序放在 LinkListTestApp.cpp 文件中( 可以任意重复测试) 。
  • 程序使用链表结构完成以下管理功能: 创建链表 从键盘输入某个学生的信息,并将其插入链表中 从键盘输入某个学生的学号,并将其从链表中删除 对某个学生的信息的修改 查询符合某个条件(允许条件与或非组合)的学生...

    题目说明

    每个学生的信息包括:学号、姓名、性别、手机号码、数学分数、语文分数。程序使用链表结构完成以下管理功能:

    1. 创建链表
    2. 从键盘输入某个学生的信息,并将其插入链表中
    3. 从键盘输入某个学生的学号,并将其从链表中删除
    4. 对某个学生的信息的修改
    5. 查询符合某个条件(允许条件与或非组合)的学生,并打印查询结果
    6. 对学生按照某个信息进行排序并输出

    扩展功能

    1. 支持从Excel表格导入学生数据
    2. 支持将链表中的内容导出到Excel表格
    3. 对人数、性别、分数支持简单的统计功能,如总体人数,男女比例,各区间分数百分比计算等

    注意

    1. 管理功能属于基础功能,均应实现
    2. 扩展功能属于加分项
    3. 在扩展功能基础上,还可提出自己设想的功能并实现

    测试数据下载

    链接: 点击这里

    代码实现

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> 
    #define ERROR 0
    #define OK 1
    #define MAXSIZE 100 //定义字符串最大长度
    #define INIT_STRING (String)malloc(sizeof(char)*MAXSIZE)
    #define INIT_CHARS (char*)malloc(sizeof(char)*MAXSIZE)
    
    typedef int Status;
    typedef char* String;
    
    typedef struct Stu Student;	//定义学生结构体 
    struct Stu{
    	String id;			//学号 
    	String name;		//姓名
    	String sex;			//性别
    	String telephone;	//电话
    	int math;			//数学成绩
    	int Chinese;		//语文成绩
    };
    
    typedef struct node Node;	//定义链表结点 
    struct node{
    	Node* next;
    	Student* data;	//学生结构体 
    };
    
    typedef Node Head;
    
    //*/
    //函数声明
    Head* initList();		//初始化链表 
    Head* initFromDataFile();			//初始化数据
    Student* makeStudent(String id,String name,String sex,String telephone,int math,int Chinese); //创建学生结构体并赋值 
    Student* findStu(String id,Head* head);		//查找单个学生信息 
    Node* createNode(Student* data);	//创建节点并赋值 
    Status insertItemAtEnd(Head* head,Student* data);  	//插入 
    Status deleteStuByID(Head *head); 			//删除学生信息  
    Status modifyMenu(Head *head);				//修改信息菜单 
    Status countAll(Head* head); 				//统计全部人数 
    Status countSex(Head* head); 	//根据性别统计人数
    String strrpl(String str);					//字符串替换 
    void save(Head *head);						//保存新文件
    void list(Head *head); 						//打印学生列表 
    void modifyID(String id,Head* head);				//修改学号
    void modifyName(String id,Head* head); 			//修改姓名
    void modifySex(String id,Head* head);			//修改性别
    void modifyTelephone(String id,Head* head);		//修改手机号
    void modifyMath(String id,Head* head);			//修改数学成绩
    void modifyChinese(String id,Head* head);		//修改语文成绩
    void sortByMath(Head *head);				//按数学成绩降序
    void sortByChinese(Head *head);				//按语文成绩降序 
    void sortByID(Head *head);					//按学号升序 
    void searchMathPass(Head* head);	//查找数学成绩在规定分数线以上的同学 
    void searchChinesePass(Head* head);				//查找语文成绩在规定分数线以上的同学 
    void searchGrade(Head* head);		//查找语文数学都符合要求的同学
    void Menu(Head* head); 						//主菜单 
    void sortMenu(Head* head);					//排序菜单 
    void searchMenu(Head* head); 				//条件查询菜单
    void countMenu(Head*head);					//统计菜单 
    void insertMenu(Head* head);				//插入菜单 
    //*/
    
    /*
     *@function:initList 初始化链表 
     *@param:	 NULL 
     *@return:  head:头结点指针 
     */
    Head* initList(){
    	Head* head = (Head*)malloc(sizeof(Head));
    	head->next = NULL;
    	return head;
    }
    
    /*
     *@function:makeStudent 创建学生结构体并赋值 
     *@param:  学生结构体各个元素 
     *@return: st:新的学生结构体指针 
     */ 
    Student* makeStudent(String id,String name,String sex,String telephone,int math,int Chinese){
    	Student* st = (Student*)malloc(sizeof(Student));
    	st->id = id;
    	st->name = name;
    	st->sex = sex;
    	st->telephone = telephone;
    	st->math = math;
    	st->Chinese = Chinese;
    	return st;
    }
    
    /* 
     *@function:createNode 创建节点并赋值
     *@param:  学生结构体指针 
     *@return: np:包含新学生结构体的新结点指针 
     */ 
    Node* createNode(Student* data){
    	Node* np = (Node*)malloc(sizeof(Node));
    	np->data = data;	//将学生结构体赋值给data 
    	return np;
    }
    
    /*
     *@function:insertItemAtEnd 在末尾插入新数据(新结点->学生结构体)
     *@param:   *head:链表头结点指针  *data:学生结构体指针 
     *@return:  1
     */ 
    Status insertItemAtEnd(Head* head,Student* data){
    	Student* newData = makeStudent(data->id,data->name,data->sex,data->telephone,data->math,data->Chinese);
    	if(head->next==NULL){
    		head->next = createNode(data);
    		head->next->next = NULL;
    		return 1;
    	}
    	Node* np = head->next;
    	while(np->next != NULL){
    		np = np->next;
    	}
    	np->next = createNode(data);
    	np->next->next = NULL;
    	return 1;
    }
    
    /*
     *@function:save 保存新数据 
     *@param:   *head:链表头结点指针
     *@return:  NULL
     */ 
    void save(Head *head){
    	remove("data.csv");
    	FILE*fp;
    	fp = fopen("data.csv","w+");
    	Node *np = head;
    	while(np->next != NULL){
    		np = np->next;
    		fprintf(fp,"%s,%s,%s,%s,%d,%d\n",np->data->id,np->data->name,np->data->sex,np->data->telephone,np->data->math,np->data->Chinese);
    	}
    	fclose(fp);
    }
    
    /*
     *@function:list 遍历学生列表信息 
     *@param:   *head:链表头结点指针
     *@return:  NULL
     */ 
    void list(Head *head){
    	Node *np = head;
    	printf("--------学生信息列表如下----------\n");
    	while(np->next != NULL){
    		np = np->next;
    		printf("学号:%s 姓名:%s 性别:%s手机号:%s 数学:%d,语文:%d\n",np->data->id,np->data->name,np->data->sex,np->data->telephone,np->data->math,np->data->Chinese);
    	}
    }
    
    /*
     *@function:deleteStuByID 通过学号删除学生信息 
     *@param:   *head:链表头结点指针
     *@return:  NULL
     */ 
    Status deleteStuByID(Head *head){
    	system("cls");
    	String id = INIT_STRING;
    	printf("请输入要删除的学生学号:");
    	scanf("%s",id);
    	Node *np = head;
    	while(np->next != NULL){
    		if(strcmp(np->next->data->id,id)==0){
    			np->next = np->next->next;
    			break;
    		}else{
    			np = np->next; 
    		}
    	}
    	save(head);
    	printf("-------------删除完毕-------------\n");
    	list(head);
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    /*
     *@function:findStu 通过学号查找单个学生信息 
     *@param:   String id:学生学号 *head:链表头结点指针
     *@return:  学生结构体 
     */ 
    Student* findStu(String id,Head* head){
    	Node *np = head;
    	int flag = 0;
    	while(np->next != NULL){
    		if(strcmp(np->next->data->id,id)==0){
    			flag = 1;
    			break;
    		}else{
    			np = np->next;
    		}
    	}
    	if(flag==1){
    		return np->next->data;
    	}else{
    		return NULL;
    	}
    }
    
    
    //修改学号 
    void modifyID(String id,Head* head){
    	String newID = INIT_STRING;
    	printf("输入新学号:");
    	scanf("%s",newID);
    	Student* np = findStu(id,head);
    	strcpy(np->id,newID);
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese); 
    }
    
    //修改姓名 
    void modifyName(String id,Head* head){
    	String newName = INIT_STRING;
    	printf("请输入新名字:");
    	scanf("%s",newName);
    	Student* np = findStu(id,head);
    	strcpy(np->name,newName);
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    }
    
    //修改性别 
    void modifySex(String id,Head* head){
    	String newSex = INIT_STRING;
    	printf("请输入新性别:");
    	scanf("%s",newSex);
    	Student* np = findStu(id,head);
    	strcpy(np->sex,newSex);
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    }
    
    //修改手机号 
    void modifyTelephone(String id,Head* head){
    	String newTelephone = INIT_STRING;
    	printf("请输入新手机号:");
    	scanf("%s",newTelephone);
    	Student* np = findStu(id,head);
    	strcpy(np->telephone,newTelephone);
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    }
    
    //修改数学成绩 
    void modifyMath(String id,Head* head){
    	int newMath = 0;
    	printf("请输入新数学成绩:");
    	scanf("%d",&newMath);
    	Student* np = findStu(id,head);
    	np->math = newMath;
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    }
    
    //修改语文成绩 
    void modifyChinese(String id,Head* head){
    	int newChinese = 0;
    	printf("请输入新语文成绩:");
    	scanf("%d",&newChinese);
    	Student* np = findStu(id,head);
    	np->Chinese = newChinese;
    	save(head);
    	printf("修改完毕,该学生信息变更为:%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    }
    
    //修改信息菜单 
    Status modifyMenu(Head *head){
    	system("cls");
    	String id = INIT_STRING;
    	int flag = 0,n = 0;
    	printf("请输入要修改的学生的学号:");
    	scanf("%s",id);
    	Student* np = findStu(id,head);
    	if(np!=NULL){
    		printf("这是否是您要修改的学生?输入1确认,0否认\n");
    		printf("%s,%s,%s,%s,%d,%d\n",np->id,np->name,np->sex,np->telephone,np->math,np->Chinese);
    		scanf("%d",&flag);
    		if(flag==1){
    			printf("--------请选择--------\n");
    			printf("1、修改学号\n");
    			printf("2、修改姓名\n");
    			printf("3、修改性别\n");
    			printf("4、修改手机号\n");
    			printf("5、修改数学成绩\n");
    			printf("6、修改语文成绩\n");
    			scanf("%d",&n);
    			//modifyName(id,head);
    			//*/
    			switch(n){
    				case 1: modifyID(id,head);break;
    				case 2:	modifyName(id,head);break;
    				case 3:	modifySex(id,head);break;
    				case 4: modifyTelephone(id,head);break;
    				case 5:	modifyMath(id,head);break;
    				case 6: modifyChinese(id,head);break;
    			}
    			//*/
    		}else{
    			printf("您输入的学号好像存在错误,后台小姐姐找不到别的学号QAQ请返回重新输入!\n");
    		}
    	}else{
    		printf("学号不存在!\n"); 
    	}
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    //*/
    
    //*/
    //按照学号升序 
    void sortByID(Head *head){
    	Student* t = (Student*)malloc(sizeof(Student));
    	Node *temp = head->next;
    	Node *np = head->next;
    	for(temp;temp->next!=NULL;temp=temp->next){
    		for(np;np->next!=NULL;np=np->next){
    			if(atoi(np->data->id) > atoi(np->next->data->id)){
    				t = np->next->data;
    				np->next->data = np->data;
    				np->data = t;
    			}
    		}
    	}
    	save(head);
    	printf("--------按学号排序结果为----------\n"); 
    	list(head);
    } 
    
    //按照数学成绩降序 
    void sortByMath(Head *head){
    	Student* t = (Student*)malloc(sizeof(Student));
    	Node *temp = head->next;
    	Node *np = head->next;
    	for(temp;temp->next!=NULL;temp=temp->next){
    		for(np;np->next!=NULL;np=np->next){
    			if(np->data->math < np->next->data->math){
    				t = np->next->data;
    				np->next->data = np->data;
    				np->data = t;
    			}
    		}
    	}
    	save(head);
    	printf("--------按数学成绩降序排序结果为--------\n"); 
    	list(head);
    } 
    
    //按照语文成绩降序 
    void sortByChinese(Head *head){
    	Student* t = (Student*)malloc(sizeof(Student));
    	Node *temp = head->next;
    	Node *np = head->next;
    	for(temp;temp->next!=NULL;temp=temp->next){
    		for(np;np->next!=NULL;np=np->next){
    			if(np->data->Chinese< np->next->data->Chinese){
    				t = np->next->data;
    				np->next->data = np->data;
    				np->data = t;
    			}
    		}
    	}
    	save(head);
    	printf("--------按语文成绩降序排序结果为--------\n"); 
    	list(head);
    } 
    
    //*/
    
    /*
     *@function:strrpl 字符串替换:把","替换成" " 
     *@param:   String str
     *@return:  String str
     */ 
    String strrpl(String str){
    	int i=0;
    	char ch = ',',new_ch = ' ';
    	for(i=0;i<strlen(str);i++){ 
    		if(str[i]==ch){
    			str[i]=new_ch;
    		}
    	}
    	return str;
    } 
    
    /*
     *初始化数据
     */ 
    Head* initFromDataFile(){
    	char* filepath = "C:\\Users\\Adminisator\\Desktop\\学习\\数据结构\\大作业1\\代码\\学生管理系统\\2\\data.csv";
    	FILE* fp = fopen(filepath,"r");
    	if(fp == NULL){
    		printf("read data file error");
    		exit(-1);
    	}
    	Head* head = initList();
    	while(!feof(fp)){
    		String id = INIT_STRING;
    		String name = INIT_STRING;
    		String sex = INIT_STRING;
    		String telephone = INIT_STRING;
    		int chinese = 0;
    		int math = 0;
    		String temp = INIT_STRING;
    		String str =INIT_STRING;
    		fscanf(fp,"%s\n",temp);
    		str = strrpl(temp);
    		//printf("str:%s\n",str);
    		//system("chcp 65001"); // set output charset as GBK
    		sscanf(str,"%s %s %s %s %d %d\n",id,name,sex,telephone,&math,&chinese);
    		insertItemAtEnd(head,makeStudent(id,name,sex,telephone,math,chinese));
    	}
    	fclose(fp);
    	return head;
    }
    
    
    /*
     *@function:searchMathPass 查找数学成绩在规定分数线以上的同学 
     *@param:   *head:链表头结点指针
     *@return:  NULL
     */ 
    void searchMathPass(Head* head){
    	Node* np = head;
    	int count=0,Score=0;
    	printf("请输入分数线:");
    	scanf("%d",&Score);
    	printf("--------符合要求的同学如下--------\n");
    	while(np->next != NULL){
    		np = np->next;
    		if(np->data->math >= Score){
    			printf("学号为%s的学生%s数学成绩为%d\n",np->data->id,np->data->name,np->data->math);
    			count++;
    		}
    	}
    	if(count>0){
    		printf("--------共有%d个同学数学成绩在%d分以上--------\n",count,Score);
    	}else{
    		printf("--------没有同学符合要求--------\n");
    	}
    }
    
    /*
     *@function:searchChinesePass 查找语文成绩在规定分数线以上的同学
     *@param:   *head:链表头结点指针 
     *@return:  NULL
     */ 
    void searchChinesePass(Head* head){
    	Node* np = head;
    	int count=0,Score=0;
    	printf("请输入分数线:");
    	scanf("%d",&Score);
    	printf("--------符合要求的同学如下--------\n");
    	while(np->next != NULL){
    		np = np->next;
    		if(np->data->Chinese >= Score){
    			printf("学号为%s的学生%s语文成绩为%d\n",np->data->id,np->data->name,np->data->Chinese);
    			count++;
    		}
    	}
    	if(count>0){
    		printf("--------共有%d个同学语文成绩在%d分以上--------\n",count,Score);
    	}else{
    		printf("--------没有同学符合要求--------\n");
    	}
    }
    
    
    /*
     *@function:searchGrade 查找语文数学都符合要求的同学
     *@param:   *head:链表头结点指针 
     *@return:  NULL
     */ 
    void searchGrade(Head* head){
    	Node* np = head;
    	int count=0,MathScore=0,ChineseScore=0;
    	printf("请输入数学分数线:");
    	scanf("%d",&MathScore);
    	printf("请输入语文分数线:");
    	scanf("%d",&ChineseScore);
    	printf("--------符合要求的同学如下--------\n");
    	while(np->next != NULL){
    		np = np->next;
    		if(np->data->math >= MathScore && np->data->Chinese >= ChineseScore){
    			printf("学号为%s的学生%s数学成绩为%d,语文成绩为%d\n",np->data->id,np->data->name,np->data->math,np->data->Chinese);
    			count++; 
    		}
    	}
    	if(count>0){
    		printf("--------共有%d个同学符合要求--------\n",count);
    	}else{
    		printf("--------没有同学符合要求--------\n");
    	}
    }
    
    /*
     *@function:countAll 统计全部人数 
     *@param:   *head:链表头结点指针 
     *@return:  count:总人数 
     */
    Status countAll(Head* head){
    	Node* np = head;
    	int count = 0;
    	while(np->next != NULL){
    		np = np->next;
    		if(np->data->id != NULL){
    			count++;
    		}
    	}
    	return count;
    }
    
    /*
     *@function:countSex 根据性别统计人数 
     *@param:   *head:链表头结点指针 String sex:要统计的性别 
     *@return:  NULL 
     */
    Status countSex(Head* head){
    	String sex = INIT_STRING;
    	printf("请输入你要统计的性别:(1表示男,0表示女)\n");
    	scanf("%s",sex);
    	Node* np = head;
    	int count = 0;
    	while(np->next != NULL){
    		np = np->next;
    		if(strcmp(np->data->sex,"1")==0){
    			count++;
    		}
    	}
    	if(strcmp(sex,"1")==0){
    		printf("--------男生一共有%d个--------\n",count);
    	}else{
    		printf("--------女生一共有%d个--------\n",(countAll(head)-count));
    	}
    }
    
    //插入菜单 
    void insertMenu(Head* head){
    	system("cls");
    	String id = INIT_STRING;
    	String name = INIT_STRING;
    	String sex = INIT_STRING;
    	String telephone = INIT_STRING;
    	int chinese = 0;
    	int math = 0;
    	printf("请输入学生信息(请严格以空格分隔因为我没有写报错):\n");
    	printf("学号\t姓名\t性别\t手机号\t数学成绩\t语文成绩\n");
    	scanf("%s %s %s %s %d %d",id,name,sex,telephone,&math,&chinese);
    	insertItemAtEnd(head,makeStudent(id,name,sex,telephone,math,chinese));
    	save(head);
    	printf("--------插入成功--------\n");
    	list(head);
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    //排序菜单 
    void sortMenu(Head* head){
    	system("cls");
    	printf("--------请选择--------\n");
    	printf("1、按学号排序\n");
    	printf("2、按数学成绩降序\n");
    	printf("3、按语文成绩降序\n");
    	int n = 0;
    	scanf("%d",&n);
    	switch(n){
    		case 1: sortByID(head);break;
    		case 2: sortByMath(head);break;
    		case 3: sortByChinese(head);break;
    	}
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    //条件查询菜单 
    void searchMenu(Head* head){
    	system("cls");
    	printf("--------请选择--------\n");
    	printf("1、查询数学成绩大于规定分数线同学的成绩\n");
    	printf("2、查询语文成绩大于规定分数线同学的成绩\n");
    	printf("3、查询同时符合数学、语文分数线同学的成绩\n");
    	int n = 0;
    	scanf("%d",&n);
    	switch(n){
    		case 1: searchMathPass(head);break;
    		case 2: searchChinesePass(head);break;
    		case 3: searchGrade(head);break;
    	}
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    //统计菜单 
    void countMenu(Head* head){
    	system("cls");
    	printf("--------请选择--------\n");
    	printf("1、查看人数统计\n");
    	printf("2、根据性别统计\n");
    	int n = 0;
    	scanf("%d",&n);
    	switch(n){
    		case 1: printf("--------共有%d个人--------\n",countAll(head));break;
    		case 2: countSex(head);break;
    	}
    	printf("--------按任意键返回主菜单--------"); 
    	getch();
    	return;
    }
    
    //主菜单 
    void Menu(Head* head){
    	system("cls");
    	printf("--------您已进入学生管理系统--------\n");
    	printf("----------------请选择--------------\n"); 
    	printf("1、添加学生信息\n");
    	printf("2、删除学生信息\n");
    	printf("3、修改学生信息\n");
    	printf("4、查看排序\n");
    	printf("5、条件查询\n");
    	printf("6、人数统计\n");
    	printf("7、保存并退出\n");
    	int n = 0;
    	scanf("%d",&n);
    	switch(n){
    		case 1: insertMenu(head);break;
    		case 2:	deleteStuByID(head);break;
    		case 3: modifyMenu(head);break;
    		case 4: sortMenu(head);break;
    		case 5: searchMenu(head);break;
    		case 6: countMenu(head);break;
    		case 7: save(head);exit(0); 
    	} 
    	
    }
    int main(){
    	Head* head = initFromDataFile();
    	while(1){
    		Menu(head);
    	}
    }
    
    展开全文
  • 2. 可随时添加学生信息,将新加入的学生信息按学号顺序添加到链表中 3. 设计遍历输出函数 3. 设计查找函数,根据学号查找或姓名查找 5. 可随时删除学生信息,根据学号删除 #!/usr/bin/env C # -*- coding:utf-...

    功能:

    1.设计保存学生信息的链表

    2. 可随时添加学生信息,将新加入的学生信息按学号顺序添加到链表中

    3. 设计遍历输出函数

    3. 设计查找函数,根据学号查找或姓名查找

    5. 可随时删除学生信息,根据学号删除

    
    #include"stdio.h"
    #include"stdlib.h"
    /*typedef struct student{
    	int num;
    	char name[20];
    	int score;
    	struct student *next;
    }STU;*/    //用这一段的话struct student类型可用STU代替达到简写的作用
    
    struct student{        //定义一个结构体student
    	int num;
    	char name[20];
    	int score;
    	struct student *next;
    };
    struct Node{           //结构体链表定义
    	struct student data;
    	struct Node* next;	
    };
    
    struct Node* creat_list(){   //创建一个链表的head结点
    	struct Node* headNode=(struct Node*)malloc (sizeof(struct Node));
    	headNode->next=NULL;
    	return headNode;
    }
    struct Node* creat_Node(struct student data){    //把student对象转为链表的结点,好处是模板化,假如对象不是一个student类型只需要在这里改下就可以了
    	struct Node* newNode=(struct Node*)malloc(sizeof(struct Node));
    	newNode->data=data;
    	newNode->next=NULL;
    	return newNode;
    }
    
    void print(struct Node* head){     //打印所有结点信息
    	struct Node* p_move=head->next;
    	printf("num  \tname  \tscore\n");
    	while(p_move){
    		printf("%d\t%s\t%d\n",p_move->data.num,p_move->data.name,p_move->data.score);
    		p_move=p_move->next;
    	}	
    }
    
    void insert(struct Node* head,struct student data){      //插入结点;头插法(简单,尾插法需要将指针移到最后)
    	//struct Node* newNode=creat_Node(data);
    	//struct Node* p=head;
    	//newNode->next=head->next;
    	//head->next=newNode;
    	struct Node* newNode=creat_Node(data);
    	struct Node* p=head,*q=head->next;
    	while(q!=NULL&&newNode->data.num>q->data.num){
    		p=q;
    		q=q->next;	
    	}
    	p->next=newNode;newNode->next=q;
    	
    }
    	
    int search_Node(struct Node* head,int num){     //搜索某个结点的data和传入的参数(学号)是否一致
    	struct Node* posNode=head->next;
    	if(posNode==NULL)printf("当前链表为空\n");
    	else{
    		while(posNode->data.num!=num){   ///while限定条件达到判断的作用
    			posNode=posNode->next;
    			if(posNode==NULL){
    				printf("没有找到相应的节点\n");
    				return 0;
    			}
    		}
    		printf("该学生的信息为:\n学号:%d\t  姓名:%s\t成绩:%d\n",posNode->data.num,posNode->data.name,posNode->data.score);
    	}
    	return 1;
    }
    
    void delete_Node(struct Node* head,int num){         //删除某个结点
    	struct Node* posNode=head->next;
    	struct Node* frontposNode=head;
    	if(posNode==NULL)printf("链表为空,无法删除\n");
    	else{
    		while(posNode->data.num!=num){   ///while限定条件达到判断的作用
    			frontposNode=posNode;
    			posNode=posNode->next;
    			if(posNode==NULL){
    				printf("没有找到你要删除的节点,请检查输入是否有错误!\n");
    				return;
    			}
    		}
    		frontposNode->next=posNode->next;
    		free(posNode);
    		printf("删除成功\n");
    	}
    	
    }
    
    void free_Node(struct Node* head)    //释放所有结点
    {
    struct Node* p=head ;
    while(p!=NULL)
    {
    head=head->next;
    free(p);
    p=head;
    }
    printf("Operator(list_Node free) is success!\n");
    exit (0);
    }
    
    int main(){
    	struct Node* head=creat_list();
    	struct student info;
    	int function=0,delete_num=0,search_num=0;
    	printf("                                **************学生信息管理系统*********************\n\n");
    	while(1){
    		printf("----------------------------1: 增加学生信息\n----------------------------2: 按学号查看全部学生信息\n----------------------------3: 查找对应学号学生信息\n----------------------------4: 根据学号删除学生信息\n----------------------------5: 释放结点并退出\n");
    		printf("请输入相应的数字选择相应功能:\n");
    		scanf("%d",&function);
    		
    		switch(function){
    		case 1:
    		while(1){
    			printf("please input nedd add student's (num name score):");
    			fflush(stdin);
    			scanf("%d%s%d",&info.num,&info.name[0],&info.score );
    			insert(head,info);
    			printf("continue add?:(Y/N)\n");
    			fflush(stdin);
    			char choose;
    			scanf("%c",&choose);
    			if(choose=='N'||choose=='n')break;
    			}
    			break;
    		case 2:print(head);break;
    		case 3:while(1){
    				printf("please input need search stduent's num:");
    				setbuf(stdin,NULL);
    				scanf("%d",&search_num);
    				int i=search_Node(head,search_num);
    				if(i==0){
    					printf("continue search?:(Y/N)\n");
    					fflush(stdin);
    					char choose;
    					scanf("%c",&choose);
    					if(choose=='N'||choose=='n')break;
    				}
    				else break;
    				}
    				break;
    		case 4:while(1){
    				printf("please input need delete stduent's num:");
    				setbuf(stdin,NULL);
    				scanf("%d",&delete_num);
    				delete_Node(head,delete_num);
    				printf("continue delete?:(Y/N)\n");
    				setbuf(stdin,NULL);
    				char choose;
    				scanf("%c",&choose);
    				if(choose=='N'||choose=='n')break;
    				}
    				break;
    				
    		case 5:free_Node(head);break;
    		default:printf("功能选择错误,请重新操作\n");break;	
    	}	
    	
    	}
    	free(head);      //自动释放链表
    	system("pause");
    	return 0;
    }

    运行结果图:

    声明:我也是记录一下笔记,实现过程可能比较简单,请大神不要喷我,小白的第三篇博客

                                                                                                                                                                                                                                                                  ------------2020-4-30记

    展开全文
  • 链表实现学生管理系统(作业)

    千次阅读 2017-05-11 10:07:10
    #include #include #include #define Maxlen 100 struct Data//定义链表的元素个体 { char number[20]; char name[20]; char sex[10]; int age; char examtype[20]; }; type
  • } } int main() { printf("添加学生输入0,删除学生输入1,查询某位学生输入2,查询整体学生列表输入3\n"); STUDENT *headnode=Headnode(); while(1) { printf("您需要什么服务呢?亲!"); int NUM; ...
  • C语言简单用链表实现学生管理系统

    千次阅读 2017-07-13 15:11:02
    #define _CRT_SECURE_NO_WARNINGS #include #include #include #include FILE *stud; FILE *tempx; enum operation { key_1 = '1', key_2 = '2', key_3 = '3', key_4 = '4', key_5 = '5', key_6 = '6'
  • 主程序: #define _CRT_SECURE_NO_WARNINGS//跳过安全警告 #include "nodes.h" int main() { C* class0 = Clacreat();// 新建班级 while(1){ menu();...具体功能实现: #include <stdio.h> #inc
  • 2013年1月10日 12:26:04完成,历时2天零碎时间, ... 功能:实现学生管理的功能 #include #include #include struct STU {  char tel[12];  char name[5];  char qq[12];  struct STU * NEXT; }; struct
  • printf("1,创建新的链表\n"); printf("2,插入新成员\n"); printf("3,删除成员\n"); printf("4,显示当前成员\n"); printf("0,退出\n"); printf("当前有 %d 名成员\n",n); printf("**********************...
  • 问题:输入某个班的所有学生的成绩,对成绩做一下处理: 1、求每门课的平均分。 2、输出不及格学生的学号、全部课程成绩、平均分。 3、输出所有平均分在90以上的所有学生的学号。 #include #include #define m 4...
  • printf("\t\t\t\t 学生管理系统\n"); printf("\t\t\t*********************************\n"); printf("\t\t\t*添加学生信息------------------1*\n"); printf("\t\t\t*输出学生信息------------------2*\n");...
  • 改源代码用链表实现学生信息的增删改查,读写入(出)文件,同时实现了学生信息的排序,链表的清空,插入。双向链表的插入排序,能够帮助学习链表。
  • 主要为大家详细介绍了C语言使用链表实现学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 这个一个基于链表实现学生管理系统,实现了基本的增,删,改,查,排序功能。 希望得到大家的指导。 这个一个基于链表实现学生管理系统,实现了基本的增,删,改,查,排序功能。 希望得到大家的指导。
  • C语言嵌套链表实现学生成绩管理系统 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景: 一个年级,相当链表A 该年级5个班,每个班5个人,相当于链表B1--B5 做一个学生成绩管理系统 学生成绩有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 903
精华内容 361
关键字:

链表实现学生管理系统