开发者社区> 流楚丶格念> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C语言学生信息管理系统链表实现

简介: C语言学生信息管理系统链表实现
+关注继续查看

效果图


image


全部源代码


#include<stdio.h>
#include<string.h>
#include<stdlib.h>


struct Student {                                                     //通过结构体输入学生信息
    long num;
    char name[20];
    float score[3];
    //float aver;
    struct Student *next;
};
int main(void) {                                                     //主函数
    void Window();
    void Choose();
    Window();                                                        //进入首页面 
    Choose();                                                        //程序控制台 
}
void Window() {                                                      //菜单界面
    printf("-学生信息管理系统-\n");
    printf(" ---1、初始化信息---\n");
    printf(" ---2、存入文件---\n");
    printf(" ---3、增加信息---\n");
    printf(" ---4、改动信息---\n");
    printf(" ---5、删除信息---\n");
    printf(" ---6、查询信息---\n");
    printf(" ---7、显示信息---\n");
    printf(" ---0、退出系统---\n");
    printf("-非常感谢您的使用-\n");
    return;
}
void Choose() {
    struct Student *creat();
    void reserve(struct Student *head);
    void print(struct Student *head);
    void Add(struct Student *head);
    void Change(struct Student *head);
    void Find(struct Student *head);
    struct Student *Del(struct Student *head);
    struct Student *head, *head1;
    int button;
    printf("请选择您要进行的操作:\n");
    scanf("%d", &button);
    while (button) {
        if (button == 1) {
            head = creat();                                         //录入学生信息 
        }
        else if (button == 2) {
            reserve(head);                                        //将学生成绩以二进制的形式存放到文件中 
        }
        else if (button == 3) {
            Add(head);                                            //增加新的学生信息 
        }
        else if (button == 4) {
            Change(head);                                         //改动某个学生的信息 
        }
        else if (button == 5) {
            head = (Del(head));                                     //删除某个学生的信息 
            reserve(head);
        }
        else if (button == 6) {
            Find(head);                                           //查找某个学生的信息 
        }
        else if (button == 7) {
            print(head);                                          //显示文件中的学生信息 
        }
        else if (button == 0) {
            break;                                                //退出系统 
        }
        printf("请选择您要进行的操作:\n");
        scanf("%d", &button);
    }

}

struct Student *creat()
{                                                 //录入学生信息
    struct Student *head, *p1, *p2;
    int n = 1;
    printf("请输入学生的信息(输入所有信息为0时信息结束):\n");
    p2 = (struct Student *)(malloc(sizeof(struct Student)));
    p1 = p2;
    scanf("%ld%s%f%f%f", &p1->num, p1->name, &p1->score[0], &p1->score[1], &p1->score[2]);
    while(p1 -> num != 0 )
    {
        if(n==1)    // 赋初值
        {
            head = p1;
            n=0;
        } 
        else 
        {
            p2->next = p1;
        }
        p2 = p1;
        p1 = (struct Student *)(malloc(sizeof(struct Student)));
        scanf("%ld%s%f%f%f",&p1->num,p1->name,&p1->score[0],&p1->score[1],&p1->score[2]);
    }
    p2->next=NULL;

    printf("录入信息已完成!\n");
    return head;
}

// 存入文件
void reserve(struct Student *head) 
{                                    //将学生信息以二进制的方式写到文件中
    FILE *fp;
    struct Student *p, *p1, stu[3];
    if ((fp = fopen("stud.txt", "wb")) == NULL) {
        printf("文件读写错误!");
        exit(0);
    }
    p = head;
    while (p != NULL) {
        if (fwrite(p, sizeof(sizeof(struct Student)), 1, fp) != 1) {                              //往文件中写内容和读取内容都必须要写这一步
        }
        p = p->next;
    }
    fclose(fp);
    printf("学生信息已读入文件!\n");
    return;
}

// 增加信息
void Add(struct Student *head) 
{
    void reserve(struct Student *head); ;
    struct Student *p1, *p2 = NULL, *pNew;
    long num;
    printf("请输入要插入的位置(前一个学生的学号):");
    scanf("%ld", &num);
    p1 = head;
    while (p1 != NULL)
    {
        if (p1->num == num) {
            p2 = p1->next;
            pNew = (struct Student *)(malloc(sizeof(struct Student)));
            printf("学号:");
            scanf("%ld", &pNew->num);
            printf("姓名:");
            scanf("%s", pNew->name);
            printf("成绩:");
            scanf("%f%f%f", &pNew->score[0], &pNew->score[1], &pNew->score[2]);

            p1->next = pNew;
            pNew->next = p2;
            break;
        }
        p1 = p1->next;
    }
    reserve(head);
    printf("增加学生信息成功!\n");
    return;
}

// 删除信息
struct Student *Del(struct Student *head) 
{
    struct Student *p, *p1;
    long num;
    printf("请输入要删除学生的学号:");
    scanf("%ld", &num);
    p = head;
    while (p != NULL) {
        if (head->num == num) {
            head = head->next;                                   //先看第一个是否是要删除的成绩
            free(p);
            break;
        }
        else {
            p1 = p;
            p1 = p->next;
            if (p1->num == num) 
            {
                p->next = p1->next;
                p = p1;
                free(p1);
                break;
            }
            p = p->next;
        }
    }
    printf("删除学生信息成功!\n");
    return head;
}

// 变更信息
void Change(struct Student *head) {                               //改动学生的成绩
    void reserve(struct Student *head);
    struct Student *p, newMessage;
    long Name;
    long num;
    char nam[20];
    printf("请输入要修改的学生学号:");
    scanf("%ld", &Name);
    p = head;
    while (p != NULL) {
        if (p->num == Name) {
            break;                                              //为什么会提示无效的数组,字符串之间能用==进行赋值吗??大傻瓜
        }
        p = p->next;
    }
    if (p == NULL) {
        printf("未找到该学生信息!\n");
        return;
    }
    printf("\n请输入新的信息:");
    printf("学号:");
    scanf("%ld", &num);
    printf("姓名:");
    scanf("%s", nam);
    p = head;
    while (p != NULL) {
        if (p->num == Name) {
            p->num = num;
            strcpy(p->name, nam);                                  //为什么会提示无效的数组,字符串之间能用==进行赋值吗??大傻瓜
        }
        p = p->next;
    }
    reserve(head);
    printf("修改学生信息成功!\n");
    return;                                                      //重新保存到文件中
}

// 查找信息
void Find(struct Student *head) 
{                                    //查找学生信息
    struct Student *p;
    float num;
    p = head;
    printf("请输入你要查找的学生的学号信息:");
    scanf("%f", &num);
    while (p != NULL) {
        if (p->num == num) {
            printf("学号:%ld  姓名:%s  成绩:%.2f %.2f %.2f ", p->num, p->name, p->score[0], p->score[1], p->score[2]);
            break;
        }
        p = p->next;
    }
    if (p == NULL) {
        printf("未找到该学生信息!\n");
    }
    printf("查找学生信息结束!\n");
    return;
}


// 显示信息
void print(struct Student *head) {                                   //从文件输出各个学生的信息
    printf("----------------学生信息----------------\n");
    printf(" 学号     姓名    语文    数学   英语\n");
    struct Student *p1;
    FILE *fp;
    fp = fopen("stud.txt", "rb");
    p1 = head;
    while (p1 != NULL) {
        if (fread(p1, sizeof(sizeof(struct Student)), 1, fp) != 0) {                        //将文件中的内容以二进制的方式读取并且显示到屏幕上
            printf(" %3ld%10s %6.2f   %5.2f   %5.2f\n", p1->num, p1->name, p1->score[0], p1->score[1], p1->score[2]);
        }
        p1 = p1->next;
    }
    fclose(fp);
    return;
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
IDEA+Java控制台实现学生信息管理系统
IDEA+Java控制台实现学生信息管理系统
199 0
【C】C语言实现图书管理系统
【C】C语言实现图书管理系统
40 0
《C++语言基础》程序阅读——学生信息管理系统
返回:贺老师课程教学链接   阅读程序“简单C++学生信息管理系统”,找出其中出现构造函数、友元函数、运算符重载、静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧。 #include <iostream> #include <cstring> using namespace std; #define MAX 100 clas
990 0
程序阅读:简单C++学生信息管理系统
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 【程序阅读】阅读并运行下面的程序,找出其中出现构造函数、友元函数、运算符重载、静态数成员语法现象出现的位置,仔细体会其用法,在以后的设计中能够灵活应用有关方法和技巧 #include <iostream> #include &
1157 0
学生信息管理系统问题集锦
<p><span style="font-family:KaiTi_GB2312; font-size:18px">系统敲完了,也调试完了,在完成系统的过程中遇到不少的问题,做一下总结。</span></p> <p><span style="font-family:KaiTi_GB2312; font-size:18px"><strong><span style="font-size:2
1110 0
学生信息管理系统——错误小结
一,数据库连接没有连接上         这类错误最典型的代表就是令人恼火的“91错误”了。在学生信息管理系统中,模块里定义了一个ExecuteSQL过程,来建立数据库连接,并返回一个ADO.RECORDSET对象,但是在调用这个过程时,由于SQL参数非常容易写错,例如, txtSQL = "select * from class_info where class_no='" & Trim(txtClassno.Text) & "'"    ,里面如果多了或者是少了单引号或双引号,多了空格或少了空格,就会造成无法连接到数据库。
842 0
学生信息管理系统小结
ASP.NET+Access 一、登入部分 主界面 Fm = new 主界面();             string s1 = "Provider=Microsoft.
934 0
+关注
流楚丶格念
csdn平台优质创作者,51cto TOP博主,360图书馆科技博主,燕山大学目前大三在读,日拱一卒,功不唐捐,加油!!!
1010
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载