返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言链表实现学生信息管理系统程序设计
  • 204
分享到

C语言链表实现学生信息管理系统程序设计

2024-04-02 19:04:59 204人浏览 独家记忆
摘要

本文实例为大家分享了C语言链表实现学生信息管理系统的具体代码,供大家参考,具体内容如下 事先存入的数据: 菜单 创建链表并倒序输出 输出链表中的全部信息 写入信息并保存至文件

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

事先存入的数据:

菜单

创建链表并倒序输出

输出链表中的全部信息

写入信息并保存至文件中(覆盖原有文件)

随机读取

指定查找

添加信息

指定删除

特殊查找

特殊删除

退出系统

#include<iOStream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
#include<time.h>
int length=0;
using namespace std;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];
//定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩
typedef struct Stunode
{
    char grad[10];//学号
    char name[10];//姓名
    char spec[10];//专业
    char stu_class[10];//班级 
    int score1;
    int score2;
    int score3;
    struct StuNode *next;
}student, *StuLink;
 
void Sort(StuLink &head)//从小到大进行冒泡排序 
{
    StuLink tmp,pre,p,q;
    if (head->next)
    {
        p = head->next->next;
        head->next->next = NULL;
        while (p)
        {
            pre = head;  //pre是q的前驱
            q = pre->next; 
            while (q && strcmp(q->grad,p->grad)<0)//从链表第二个结点开始找比当前插入值大的结点
            {
                pre = pre->next;
                q = q->next; 
            }
            tmp = p->next;//将p插入到结点pre和q之间
            p->next = q;
            pre->next = p; 
            p = tmp;
        }
    }    
} 
 
student *CreateList()//初始化:创建链表 
{
    void Output(StuLink &p);
    StuLink head = (student*)malloc(sizeof(student));
    StuLink p,q;
    p = head;
    q = head;
    char grad[10];//学号
    char name[10];//姓名
    char spec[10];//专业
    char stu_class[10];//班级 
    int score1;
    int score2;
    int score3;
    FILE *r= fopen("2.txt","r");
    if(r==NULL)
    {
        printf("打开文件失败!");
        return NULL;
    }
    fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题 
    while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF)
    {
        q = (student*)malloc(sizeof(student));
        strcpy(q->grad,grad);
        strcpy(q->name,name);
        strcpy(q->spec,spec);
        strcpy(q->stu_class,stu_class);
        q->score1 = score1;
        q->score2 = score2;
        q->score3 = score3;
        p->next = q; 
        p = q;
        length++;
    }
    p->next = NULL;
    Sort(head);
    
    //倒序输出 
    StuLink k = head,t;
    while(k->next)  
        k = k->next;
    while(k!=head)
    {    //倒序输出 
        t = head;
        while(t->next!=k)
            t = t->next;//t为k前驱 
        k = t;
    }
    return head;
}
 
 
void Output(StuLink &p)//输出信息 
{
    printf("%5s %-5s %-3s %s %3D %3d %3d\n",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
}
 
void Print_List(StuLink &head)//打印整个链表 
{
    StuLink p = head->next;
    while(p)
    {
        Output(p);
        p = p->next;
    }
}
 
void Save(StuLink &head)//写入文件。
{    
    StuLink p = (student*)malloc(sizeof(student)),q = head->next;
    char grad[10],name[10],spec[10],stu_class[10];
    int score1,score2,score3;
    printf("请输入学生信息:\n");
    scanf("%s%s%s%s%d%d%d",p->grad,p->name,p->spec,p->stu_class,&p->score1,&p->score2,&p->score3); 
    FILE *w =fopen("2.txt","a");
    if(w==NULL)
    {
        printf("打开文件失败!\n");
        return;
    }
    else printf("写入成功!\n"); 
    fprintf(w,"\n%s %s      %s       %s  %d      %d         %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
    fclose(w);
    //存入链表 
    p->next = q;
    head->next = p;
    Sort(head);
}
 
void Fetch(StuLink &H)//随机读取某个学生的信息。 
{
    StuLink p = H->next;
    int i = time(NULL) % length;
    int j = i;
    while(j)
    {
        p = p->next;
        j--;
    }
    printf("第%d名学生\n",i+1);
    printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
    Output(p);
}
 
student *Search_num(StuLink &H) 
{    //查找指定学号的学生,返回指向该学生结点的指针。
    char grad[10];
    printf("请输入查询信息的学号:"); 
    scanf("%s",grad);
    StuLink p = H->next;
    while(p)
    {
        if(strcmp(p->grad,grad)==0) 
            return p;
        p = p->next;
    }
    return NULL;
}
 
void InsertList(StuLink &H)
{    //在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。 
    StuLink p = H->next, q = H;
    StuLink insert = (student*)malloc(sizeof(student));
    printf("请输入学生信息:\n");
    scanf("%s%s%s%s%d%d%d",insert->grad,insert->name,insert->spec,insert->stu_class,&insert->score1,&insert->score2,&insert->score3); 
    
    while(p)
    {
        if(strcmp(p->grad,insert->grad) > 0 ) 
        {
            q->next = insert;//应插入q和p之间
            insert->next = p;
            break;
        }
        q = q->next;//q是p的前驱 
        p = p->next;
    }    
    if(!p)//insert的学号大于所有已知值 
    {
        q->next = insert;
        insert->next = NULL;
    }
    p = H->next;
    printf("\n");
    Print_List(H);
}
 
void Delete_num(StuLink &H)//从链表中删除指定学号的学生。 
{
    StuLink p = H->next, q = H;
    char grad[10]; 
    printf("请输入想删除的学生的学号:\n");
    scanf("%s",grad); 
    while(p)
    {
        if(strcmp(p->grad,grad)==0)   
        {
            q->next = p->next;
            free(p);
            break;
        }
        q = q->next;
        p = p->next;
    }
    FILE *w =fopen("2.txt","w");
    p=H->next;
    while(p)
    {
        fprintf(w,"%5s %-5s %-3s %s %3d %3d %3d\n",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
        p = p->next;
    }
    fclose (w);
    Print_List(H);
}
 
student *Search_major_subject_score(StuLink &H)
{    //查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
    char spec[10];
    float score;
    StuLink p = H->next;
    int lesson;
    printf("请输入专业、课程序号和门限分数:\n"); 
    scanf("%s%d%f",spec,&lesson,&score);
    while(p)
    {
        if(strcmp(p->spec,spec)==0)
            if(lesson==1 && p->score1<score || lesson==2 && p->score2<score || lesson==3 && p->score3<score) 
                return p;
        p = p->next;
    }
    return NULL;
}
 
void Delete_major_subject(StuLink &H)
{    //从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
    char spec[10];
    float score;
    StuLink p = H->next, q = H;
    int lesson,flag = 0;
    printf("请输入专业、课程序号和门限分数:\n"); 
    scanf("%s%d%f",spec,&lesson,&score);
    while(p)
    {    
        if(strcmp(p->spec,spec)==0 && lesson == 1 && p->score1 < score) //  cs 1 94
        {
            Output(p);
            q->next = p->next;
            free(p); 
            p = q->next;
            flag = 1;
        }
        else if(strcmp(p->spec,spec)==0 && lesson == 2 && p->score2 < score) //  cs 1 94
        {
            Output(p);
            q->next = p->next;
            free(p); 
            p = q->next;
            flag = 1;
        }
        else if(strcmp(p->spec,spec)==0 && lesson == 3 && p->score3 < score) //  cs 1 94
        {
            Output(p);
            q->next = p->next;
            free(p); 
            p = q->next;
            flag = 1;
        }
        else
        {
            q = p;
            p = p->next;            
        }
    }
    if(flag==0) printf("不存在此学生!\n");    
    else printf("成功删除\n"); 
    FILE *w =fopen("2.txt","w");
    p=H->next;
    while(p)
    {
        fprintf(w,"%5s %-5s %-3s %s %3d %3d %3d\n",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
        p = p->next;
    }
    fclose (w);
    Print_List(H);
}
 
void write(StuLink &H)//写入其他文件 
{
    StuLink p = H->next;
    FILE *w = fopen("other.txt","w");
    fprintf(w,"%s %s %s %s %s %s %s",a,b,c,d,e,f,g);
    while(p)
    {
        fprintf(w,"\n%s %s      %s       %s  %d      %d         %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
        p = p->next;
    } 
    fclose(w);
    printf("写入成功!"); 
}
 
char menu()
{
    char ch1;
    printf("  \t\t\t\t        欢迎访问学生信息登记系统!                \n");
    printf("\t\t\t ___________________________________________________________\n");
    printf("\t\t\t\t\t 1  Creatlist 写入信息创建链表并倒序输出\n");
    printf("\t\t\t\t\t 2  Output 输出全部信息\n");
    printf("\t\t\t\t\t 3  save 保存文件\n");
    printf("\t\t\t\t\t 4  Fetch 随机读取\n");
    printf("\t\t\t\t\t 5  Search num 指定查找\n");
    printf("\t\t\t\t\t 6  Insertlist 添加信息 \n");
    printf("\t\t\t\t\t 7  Delete num 指定删除\n");
    printf("\t\t\t\t\t 8  Search_major _subject_score 特殊查找\n");
    printf("\t\t\t\t\t 9  Delete_major _subject_score 特殊删除\n");
    printf("\t\t\t\t\t 10 Exit 退出系统\n");
    printf("\t\t\t ___________________________________________________________\n");
}
 
void read(StuLink &head)//读取文件函数 
{
    StuLink p = (student*)malloc(sizeof(student)),q = head->next;
    char grad[10],name[10],spec[10],stu_class[10];
    int score1,score2,score3;
    FILE *w =fopen("2.txt","a");
    if(w==NULL)
    {
        printf("打开文件失败!\n");
        return;
    }
    else 
{
    StuLink p = head->next;
    while(p)
    {
        Output(p);
        p = p->next;
    }
    printf("输出成功!\n"); 
    fprintf(w,"\n%s %s      %s       %s  %d      %d         %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
}
    fclose(w);
    //存入链表 
}
 
int main()
{    
    StuLink H = CreateList(),temp;
    int k;
    menu();
    scanf("%d",&k);
    k = int(k);
    while(k)
    {
        k = int(k);
        switch(k)
        {
            case 0: 
                break;
            case 1: 
                {
                StuLink head = (student*)malloc(sizeof(student));
                StuLink p,q;
                p = head;
                q = head;
                char grad[10];//学号
                char name[10];//姓名
                char spec[10];//专业
                char stu_class[10];//班级 
                int score1;
                int score2;
                int score3;
                FILE *r= fopen("2.txt","r");
                if(r==NULL)
                {
                    printf("打开文件失败!");
                }
                fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题 
                while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF)
                {
                    q = (student*)malloc(sizeof(student));
                    strcpy(q->grad,grad);
                    strcpy(q->name,name);
                    strcpy(q->spec,spec);
                    strcpy(q->stu_class,stu_class);
                    q->score1 = score1;
                    q->score2 = score2;
                    q->score3 = score3;
                    p->next = q; 
                    p = q;
                    length++;
                }
                p->next = NULL;
                Sort(head); 
                StuLink k = head,t;
                while(k->next)  
                k = k->next;
                printf("倒序输出:\n 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
                while(k!=head)
            {    //倒序输出 
                t = head;
                while(t->next!=k)
                t = t->next;//t为k前驱 
                Output(k);
                k = t;
            }
        }
                menu();
                break;
            case 2:    
                Print_List(H);
                menu();
                break;
            case 3: 
                Save(H);
                menu();
                break;
            case 4: 
                Fetch(H);
                menu();
                break;
            case 5: 
                temp = Search_num(H);
                if(temp)
                    {    
                        printf("指针为:%d\n",temp); 
                        printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
                        Output(temp);
                    }
                else 
                    printf("不存在此学生!\n");
                menu();
                break;
            case 6: 
                InsertList(H);
                menu();
                break;
            case 7: 
                Delete_num(H);
                menu();
                break;
            case 8:
                temp = Search_major_subject_score(H);
                if(temp)
                    {
                        printf("指针为:%d\n",temp); 
                        printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
                        Output(temp);
                    }
                else 
                    printf("不存在此学生!\n");
                    menu();
                break;
            case 9:
                Delete_major_subject(H); 
                menu();
                break;
            case 99:
                read(H);
                menu();
                break;
            case 10:
                printf("\n    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");     //退出提示
                printf("             Goodbye!         \n");
                printf("    ~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
                exit(0);//将程序退出 
            default:
                printf("输入有误,请重新输入!\n"); 
        } 
        printf("请输入选项:");
        scanf("%d",&k);
    }
    return 0;
}

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

--结束END--

本文标题: C语言链表实现学生信息管理系统程序设计

本文链接: https://lsjlt.com/news/165183.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C语言链表实现学生信息管理系统程序设计
    本文实例为大家分享了C语言链表实现学生信息管理系统的具体代码,供大家参考,具体内容如下 事先存入的数据: 菜单 创建链表并倒序输出 输出链表中的全部信息 写入信息并保存至文件...
    99+
    2024-04-02
  • C语言实现学生信息管理系统(链表)
    目录1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1).定义提示菜单2).增加学生记录3).输入学号接口·4).遍历表...
    99+
    2024-04-02
  • C语言使用单链表实现学生信息管理系统
    本文实例为大家分享了C语言使用单链表实现学生信息管理系统,供大家参考,具体内容如下 初学数据结构,记录一下学习过程。 运行结果如图: 1.运行界面 2.录入学生信息 3.按照总分...
    99+
    2024-04-02
  • C语言实现学生宿舍信息管理系统课程设计
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 一、问题陈述 宿舍对于大学生在校生活来说相当于家的存在,而宿舍管理又是学校后勤管理的重要环节,...
    99+
    2024-04-02
  • C语言实现学生学籍管理系统程序设计
    本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 一、题目设计及其要求 1、题目:学生学籍管理系统 用数据文件存放学生的学籍,可对学生学籍进行注册、...
    99+
    2024-04-02
  • C语言实现学生信息管理系统
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdi...
    99+
    2024-04-02
  • C语言如何使用单链表实现学生信息管理系统
    这篇文章主要介绍了C语言如何使用单链表实现学生信息管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。运行结果如图:1.运行界面2.录入学生信息3.按照总分进行排序代码如下...
    99+
    2023-06-25
  • C语言实现学生宿舍信息管理系统
    本文实例为大家分享了C语言实现学生宿舍信息管理系统的具体代码,供大家参考,具体内容如下 功能描述 该学生宿舍信息管理系统主要实现的功能有:创建学生宿舍信息,显示学生宿舍信息,查询学生...
    99+
    2024-04-02
  • C语言实现简单学生信息管理系统
    学生信息管理系统的功能有,也可以自己增加或者改进一些函数功能。 在main函数里调用这8个函数 学生信息包含姓名、年龄、学号、成绩,需要定义一个结构体(结构体是全局变量,所以需要全...
    99+
    2024-04-02
  • C语言实现学生信息管理系统开发
    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 程序介绍 运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图所示...
    99+
    2022-11-13
    C语言学生信息系统 C语言学生管理系统 C语言信息管理系统
  • C语言链表实现学生成绩管理系统
    目录一、课程设计题目及内容二、主要设计思路三、程序源码及具体注释(1)预处理指令(2)类型定义(3)函数原型(4)main函数定义(5)其他函数定义 四、运行示例五、注意事...
    99+
    2024-04-02
  • C语言实现学生学籍管理系统课程设计
    目录设计要求完整代码运行结果本文实例为大家分享了C语言实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计学籍管理系统 1、添加学生信息2、浏览学生信息3、查询学...
    99+
    2024-04-02
  • C语言动态链表实现学生学籍管理系统
    本文实例为大家分享了C语言利用动态链表实现学生学籍管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <s...
    99+
    2024-04-02
  • C语言实现超市信息管理系统课程设计
    本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下 一、 需求分析 目前商品市场的商品信息玲琅满目,货物信息的储存以及更新就变的越来越重要。因此,我们...
    99+
    2024-04-02
  • C语言实现学籍信息管理系统
    本文实例为大家分享了C语言实现学籍信息管理系统的具体代码,供大家参考,具体内容如下 系统功能:录入、修改、添加、删除、查找、读取、删除数据系统主要技术:基本就是函数的调用,只用到结构...
    99+
    2024-04-02
  • C语言实现学生成绩管理系统课程设计
    目录设计要求完整代码运行结果本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计学生成绩管理系统 要求如下: 1.输入学生信息2.统计学...
    99+
    2024-04-02
  • C语言如何实现学生宿舍信息管理系统
    这篇文章主要讲解了“C语言如何实现学生宿舍信息管理系统”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言如何实现学生宿舍信息管理系统”吧!功能描述该学生宿舍信息管理系统主要实现的功能有:创...
    99+
    2023-06-29
  • C语言实现学生信息管理系统(文件操作)
    目录新增函数——文件操作;1.头文件和预处理2.定义学生结构体的数据结构3.定义每条记录或节点的数据结构4.函数接口代码.1.定义提示菜单2.增加学生记录3....
    99+
    2024-04-02
  • C语言使用链表实现学生籍贯管理系统
    本文实例为大家分享了C语言用链表实现学生籍贯管理系统的具体代码,供大家参考,具体内容如下 源码 #include<stdio.h> #include<stdlib....
    99+
    2024-04-02
  • C语言嵌套链表实现学生成绩管理系统
    C语言嵌套链表实现学生成绩管理系统,供大家参考,具体内容如下 链表A,每个节点存放一个新的链表B1,B2,B3,B4,B5的头结点。 场景: 一个年级,相当链表A 该年级5个班,每个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作