IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 主用C语言链表和指针来写一个简单成绩管理系统 -> 正文阅读

[数据结构与算法]主用C语言链表和指针来写一个简单成绩管理系统

C语言链表和指针敲成绩管理系统

  1. 写一个成绩管理系统有很多种方法,但我觉得主用链表和指针来写比较好,输入的学生可以不用考虑溢出,对于链表和指针小白来说也不错的学习链表和指针的考虑。

  2. 成绩管理系统的功能有:
    (1).录入学生信息;
    (2).输出学生信息;
    (3).计算学生总成绩;
    (4).按总成绩排序学生信息;
    (5).按学号排序学生信息;
    (6).查询学生信息;
    (7).删除学生信息;
    (8).插入学生信息

  3. 正经人不说那么多废话,上代码

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

struct stu  //定义学生信息结构体
{
    int num;
    char name[20];
    int math;
    int chinese;
    int english;
    int physic;
    int history;
    int zongfen;
    struct stu *next;
};

int main()
{
    struct stu *creat(struct stu *head);   //创建表头,录入学生信息函数
    struct stu *zongf(struct stu *head);   //计算学生总成绩函数
    struct stu *paixu1(struct stu *head);  //排名函数
    struct stu *paixu2(struct stu *head);  //排学号函数
    struct stu *dele(struct stu *head);    //删除学生信息函数
    struct stu *insert(struct stu *head);  //插入学生信息函数
    void search(struct stu *head);         //查找学生信息函数
    void print1(struct stu *head);         //打印学生各科成绩函数
    void print2(struct stu *head);         //打印学生总成绩函数
    struct stu *head=NULL;
    struct std *zscore=NULL;
    struct stu *paix;
    printf("          欢 迎 使 用 本 成 绩 管 理 系 统\n");
    printf("              菜                 单\n");
    printf("                1.输入学生信息\n");
    printf("                2.输出学生信息\n");
    printf("                3.计算所有学生总成绩并输出(必须先执行操作1)\n");
    printf("                4.将所有学生总成绩排名(必须先进行操作1和操作3)\n");
    printf("                5.按学号输出学生总成绩\n");
    printf("                6.查询学生成绩\n");
    printf("                7.删除学生成绩\n");
    printf("                8.插入学生成绩\n");
    printf("                9.退出\n");
    int cz=1;
    char name[20];
    while(cz!=0)
    {
        printf("            请 选 择 您 要 进 行  的 操 作\n");
        scanf("%d",&cz);
        switch(cz)
        {
        case 1:
            head=creat(head);
            break;
        case 2:
            print1(head);
            break;
        case 3:
            head=zongf(head);
            print2(head);
            break;
        case 4:
            head=paixu1(head);
            print2(head);
            break;
        case 5:
            head=paixu2(head);
            print2(head);
            break;
        case 6:
            search(head);
            break;
        case 7:
            head=dele(head);
            break;
        case 8:
            head=insert(head);
            break;
        case 9:
            goto A;  //跳出循环,结束程序
        }
    }
A:
    printf("谢谢使用!");
    return 0;
}

//创建链表输入学生成绩函数
#if(1)
struct stu *creat(struct stu *head)
{
    struct stu *q,*p;
    int ch=1;
    while(ch!=0)
    {
        q=(struct stu *)malloc(sizeof(struct stu));
        printf("请输入学生的学号 姓名  (成绩)数学 语文 英语 物理 历史(输入0结束):\n");
        scanf("%d%s%d%d%d%d%d",&q->num,q->name,&q->math,&q->chinese,
                                &q->english,&q->physic,&q->history);
        ch=q->num;
        if(ch!=0)
        {
            q->next=NULL;
            if(head==NULL)
            {
                head=q;
            } else
            {
                p->next=q;
            }
            p=q;
        }
    }
    return head;
}
#endif


//计算学生总成绩函数

#if(1)
struct stu *zongf(struct stu *head)
{
    struct stu *q=head;
    while (q!=NULL)
    {
        q->zongfen=q->math+q->chinese+q->english+q->physic+q->history;
        q=q->next;
    }
    return head;
}

#endif


#if(1)
struct stu *paixu2(struct stu *head)bu 
{
    struct stu *q,*p,*p1;
    char a[20];
    int xh,zscore;
    q=head;
    while(q!=NULL)
    {
        p=q->next;
        while(p!=NULL)
        {
            if(q->num > p->num)
            {
                //交换学号
                xh=q->num;
                q->num=p->num;
                p->num=xh;

                //交换姓名
                strcpy(a,q->name);
                strcpy(q->name,p->name);
                strcpy(p->name,a);

                //交换总成绩
                zscore=q->zongfen;
                q->zongfen=p->zongfen;
                p->zongfen=zscore;

            }
            p=p->next;
        }
        q=q->next;
    }
    return head;
}
#endif

#if(1)
struct stu *paixu1(struct stu *head)
{
    struct stu *q,*p,*p1;
    char a[20];
    int xh,zscore;
    q=head;
    while(q!=NULL)
    {
        p=q->next;
        while(p!=NULL)
        {
            if(q->zongfen < p->zongfen)
            {
                //交换学号
                xh=q->num;
                q->num=p->num;
                p->num=xh;

                //交换姓名
                strcpy(a,q->name);
                strcpy(q->name,p->name);
                strcpy(p->name,a);

                //交换总成绩
                zscore=q->zongfen;
                q->zongfen=p->zongfen;
                p->zongfen=zscore;

            }
            p=p->next;
        }
        q=q->next;
    }
    return head;
}

#endif

//查找学生成绩函数
#if(1)
void search(struct stu *head)
{
    struct stu *p;
    char name[20];
    int a;
    B:
        printf("请输入您要查找的学生姓名:\n");
        scanf("%s",&name);
        p=head;
        while(p!=NULL && strcmp(p->name,name)!=0)
        {
            p=p->next;
        }

        if(p)
        {
            printf("学号\t姓名\t(成绩)数学\t语文\t英语\t物理\t历史\n");
            printf("%d\t%s\t\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->math,
                   p->chinese,p->english,p->physic,p->history);
        } else
        {
            printf("没有%s同学的信息!\n",name);
        }
        printf("查找成功!\n");
        printf("是否继续查找:(yes(1)/no(0))\n");
        scanf("%d",&a);
        while(a)
        {
            if(a==1)
            {
                 goto B; //跳回此函数开头,继续输入名字查找
            } else if(a==0)
            {
                 printf("关闭查找功能!\n");
            }else
            {
                 printf("输入错误,请重新输入:\n");
                 scanf("%d",&a);
            }
         }
}
#endif


//打印学生各科成绩函数
#if(1)
void print1(struct stu *head)
{
    struct stu *p=head;
    printf("学号\t\t姓名\t\t语文\t数学\t英语\t物理\t化学\n");
    while(p!=NULL)
    {
        printf("%d\t%10s\t\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->math,
               p->chinese,p->english,p->physic,p->history);
        p=p->next;
    }
}
#endif


//打印学生总成绩函数
#if(1)
void print2(struct stu *head)
{
    struct stu *p=head;
    printf("学号\t姓名\t总成绩\n");
    while(p!=NULL)
    {
        printf("%d\t%s\t%d\n",p->num,p->name,p->zongfen);
        p=p->next;
    }
}
#endif

#if(1)
struct stu *dele(struct stu *head)
{
    struct stu *q,*p;
    char name[20];
    int a;
    q=head; 
C:
    printf("请输入您要删除的学生姓名:\n");
    scanf("%s",&name);
    while(q!=NULL && strcmp(q->name,name)!=0)
    {
        p=q;
        q=q->next;
    }
    if(q==NULL)
    {
        printf("没有%s同学的成绩信息!\n",name);
    } else if(q==head)
    {
        head=p->next;
    } else
    {
        p->next=q->next;
    }
    printf("删除成功!\n");
    printf("是否继续删除:(yes(1)/no(0)\n");
    scanf("%d",&a);
    while(a)
    {
        if(a==1)
        {
            goto C; //跳回此函数开头,继续删除
        }else if(a==0)
        {
            printf("关闭删除功能!\n");
        }else
        {
            printf("输入错误,请重新输入:\n");
            scanf("%d",&a);
        }
    }
    free(q);
    return head;
}

#endif

#if(1)

struct stu *insert(struct stu *head)
{
    struct stu *q,*p,*p1;
    int a;
D:
    q=(struct stu *)malloc(sizeof(struct stu));
    printf("请输入要插入的学生成绩信息:(按学号大小插入)\n");
    printf("请输入学生的学号 姓名  (成绩)数学 语文 英语 物理 历史(输入0结束):\n");
    scanf("%d%s%d%d%d%d%d",&q->num,q->name,&q->math,&q->chinese,
                            &q->english,&q->physic,&q->history);
    if(head==NULL)
    {
        q->next=NULL;
        head=q;
        return head;
    }
    if(head->num > q->num)
    {
        q->next=head;
        head=q;
        return head;
    }
    p=head;
    p1=head->next;
    while(p1!=NULL && p1->num < q->num)
    {
        p=p1;
        p1=p1->next;
    }
    q->next=p1;
    p->next=q;
    printf("插入成功!\n");
    printf("是否继续插入:(yes(1)/no(0))\n");
    scanf("%d",&a);
    while(a)
    {
        if(a==1)
       {
           goto D;
       }else if(a==0)
       {
          printf("关闭插入功能!");
       }else
       {
          printf("输入错误,请重新输入:\n");
          scanf("%d",&a);
       }
    }
     return head;
}

#endif

  1. 小白一遍看不懂多看几遍就会了,简单易懂,以此来练习链表和指针也是不错的选择。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:41:40  更:2022-01-04 13:42:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:20:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码