学生信息管理系统(C语言动态数组实现)第一次写没经验啊|ू・ω・` )

这是一个使用C语言编写的动态数组实现的学生信息管理系统,包括添加、排序、删除、查询、修改和输出学生信息等功能。程序由多个独立的函数组成,如主函数、输出函数、排序函数等。

功能介绍
1.添加学生信息;
2.对学生信息进行排序;
3.删除学生信息;
4.查询学生信息;
5.修改学生信息;
6.输出学生信息;
7.清屏;

main函数

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
int n;
int len=sizeof(struct student);
struct student *p=NULL;
//上面三个是全局变量,但在主函数页面定义的全局变量在其他页面使用时
//要进行拓展(用extern),并且全局变量在所有页面的任何函数中都可以
//对其进行修改和重新赋值,且全局变量在各个位置大小都相同。且任何页
//面的的任何函数都不可以再定义与全局变量同名的变量。
//全局变量不要在头文件中定义,要在main.c文件前面定义,但可以在头文
//件中进行拓展。
/*
如果全局变量在main.c进行定义时直接赋值了,在头文件中进行拓展后,
任何页面用到这个全局变量都为之前的赋值。但是在任何页面都可以再次
对全局变量进行赋值,重新赋值后,在任何页面再次运用到此变量时就会
是之后赋的值。除非程序结束后再次运行时才会变为最开始的值。
*/
int main()
{
    sayhello();
    int com;
    while(1)
    {
        introduce();
        if(scanf("%d",&com)!=1)
        {
            printf("*******您输入的指令不正确请重新输入*******\n");
            fflush(stdin);//清除缓存区;如果不清除缓存区,错误信息因为未完成赋值操作会一直停留在缓存区,
            //下一次循环到这里时仍会赋值不成功,如此往复,造成死循环。因此一定要清除缓存区!!!
            continue;//结束本次输入进行下次输入
        }
        else
            switch(com)
            {
                case 0:saygoodbye();exit(1);//退出
                case 1:add();break;//添加
                case 2:outputs();break;//排序
                case 3:del1();break;//删除
                case 4:find1();break;//查询
                case 5:change1();break;//修改
                case 6://清屏
                    system("cls");//系统内自带的清屏函数
                    break;
                case 7:outputs();break;//输出
                default:printf("*****************没有该指令,请重新输入*****************\n");
            }

    }
            return 0;
}

头文件 stu.h

#ifndef STU_H_INCLUDED
#define STU_H_INCLUDED

extern int n;
extern int len;//在头文件中进行扩展就不用在没个页面前面都拓展了,只需要在每页的前面调用头文件即可。
extern struct student *p;//因为头文件已经包含了。

struct student
{
    int no;
    char name[20];
    char sex[5];
    double score[5];
    double sum;
    double ave;
    int position;
};

//HelloGoodbye.c;
void sayhello();
void saygoodbye();

//introduce.c
void introduce();

//add.c
void input(struct student *q,int m);
void inputs(int m);
void add();

//output.c
void output(struct student *q);
void outputs();

//sort.c
void sort1();

//del.c
int del2(int no);
void del1();

//find.c
struct student find2(int no);
void find1();

//change.c
int change2(int no);
void change1();
#endif // STU_H_INCLUDED

页眉页脚 HelloGoodbye.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
void sayhello()
{
    printf("***************************************\n");
    printf("************欢迎使用本系统*************\n");
    printf("***********本系统由某某某编写************\n");
    printf("***********指导教师:某某某************\n");
    printf("***************************************\n");
}

void saygoodbye()
{
    printf("\n");
    printf("***********************************************\n");
    printf("****(≧ω≦)/****欢迎下次使用!*****(*≧▽≦)**\n");
    printf("***********************************************\n");
}

程序功能介绍函数 introduce.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"


void introduce()
{
    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");
}

输出学生信息函数 output.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"

void output(struct student *q)
{
    printf("%-10d %-10s %-8s %-10.2lf %-10.2lf %-10.2lf %-10.2lf %-13.2lf %-10d\n",(*q).no,(*q).name,(*q).sex,(*q).score[1],(*q).score[2],(*q).score[3],(*q).sum,(*q).ave,(*q).position);
}

void outputs()
{
    int i;
    if(n==0)
    {
        printf("********目前还没有学生信息,请先输入学生信息!*********\n");
    }
    else
    {printf("学号       姓名       性别     成绩1      成绩2      成绩3      总成绩     平均成绩     名次\n");
    for(i=0;i<n;i++)
    {
        output(p+i);
    }
    }
}

学生信息排序函数 sort.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"

void sort1()
{
    struct student s;
    int i,j;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            if(p[j].sum<p[j+1].sum)
            {
                s=p[j];
                p[j]=p[j+1];
                p[j+1]=s;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        p[i].position=i+1;
    }
}

添加学生信息函数 add.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"

void input(struct student *q,int m)
{
    printf("请输入学生信息  格式为:\n");
    printf("学号   姓名   性别   成绩1   成绩2   成绩3\n");
    int i;
    for(i=0;i<m;i++)
    {
        if(i>=1)printf("***************请继续输入********************\n");
        scanf("%d %s %s %lf %lf %lf",&(q+i)->no,(q+i)->name,(q+i)->sex,&(q+i)->score[1],&(q+i)->score[2],&(q+i)->score[3]);
        (q+i)->sum=(q+i)->score[1]+(q+i)->score[2]+(q+i)->score[3];
        (q+i)->ave=((q+i)->sum)/3;
    }
    sort1();
}

void inputs(int m)
{
    int i;
    if(n==0)
    {
        p=(struct student*)malloc(m*len);
        if(p==NULL)
        {
            printf("*************系统无法分配内存*****************\n");
            exit(1);
        }
        else
            n=m,input(p,m);
    }
    else if(n!=0)
         {
             p=(struct student*)realloc(p,(n+m)*len);
             if(p==NULL)
            {
                printf("****************系统无法分配内存*************\n");
                exit(1);
            }
            else
                n=n+m,input(p+n-m,m);
         }
}

void add()
{
    printf("1表示从键盘添加学生信息\n");
    printf("2表示从文件添加学生信息\n");
    int com,n,m;
    scanf("%d",&com);
    if(com==1)
    {
        printf("请输入要添加学生的人数\n");
        scanf("%d",&m);
        inputs(m);
    }
}

删除学生信息函数 del.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"

int del2(int no)
{
    int i,k,flag=0;
    for(i=0;i<n;i++)
    {
        if(p[i].no==no)
        {
            k=i;
            flag=1;
            break;
        }
    }
    if(flag==1)
    {
        for(i=k;i<n-1;i++)
        {
            p[i]=p[i+1];
        }
    p=(struct student*)realloc(p,(n-1)*len);
    n=n-1;
    sort1();
    }
    return flag;
}

void del1()
{
    int no,flag,m;
    if(n==0)
        printf("*************目前还没有学生信息,请先输入学生信息***********\n");
    else{printf("*************请输入要删除学生的学号*************\n");
    scanf("%d",&m);
    flag=del2(m);
    if(flag==0)
    {
        printf("**********未寻找到该学生信息,请检查后在输入!**************\n");
    }
    else
        printf("**************删除学生信息成功!!!*****************\n");
    }
}

查找学生信息函数 find.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"

struct student find2(int no)
{
    int i;
    struct student s1;
    s1.no=0;//结构体不能赋值NULL,但地址可以。所以struct student s1=NULL是错误的
    for(i=0;i<n;i++)
    {
        if(p[i].no==no)
        {
            s1=p[i];
            break;
        }
    }
    return s1;
}

void find1()
{
    struct student s1;
    int no;
    if(n==0)printf("*************目前还没有学生信息,请先输入学生信息***********\n");
    else
    {printf("**********请输入要查找学生的学号**********\n");
    scanf("%d",&no);
    s1=find2(no);
    if(s1.no==0)
        printf("***********未查询到该学生的学生信息!************\n");
    else
    {
        printf("学号       姓名       性别     成绩1      成绩2      成绩3      总成绩     平均成绩     名次\n");
        printf("%-10d %-10s %-8s %-10.2lf %-10.2lf %-10.2lf %-10.2lf %-13.2lf %-10d\n",s1.no,s1.name,s1.sex,s1.score[1],s1.score[2],s1.score[3],s1.sum,s1.ave,s1.position);
    }
    }
}

修改学生信息函数 change.c

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "stu.h"
int change2(int no)
{
    int i,k=-1;
    for(i=0;i<n;i++)
    {
        if(p[i].no==no)
        {
            k=i;
            break;
        }
    }
    return k;
}

void change1()
{
    int no,k;
    if(n==0)printf("*************目前还没有学生信息,请先输入学生信息***********\n");
    else
    {printf("**********请输入要修改学生的学号**********\n");
    scanf("%d",&no);
    k=change2(no);
    if(k==-1)
        printf("***********未查询到该学生的学生信息!************\n");
    else
    {
        printf("***********请输入要修改的学生的全部信息************\n");
        printf("学号   姓名   性别   成绩1   成绩2   成绩3\n");
        scanf("%d %s %s %lf %lf %lf",&p[k].no,p[k].name,p[k].sex,&p[k].score[1],&p[k].score[2],&p[k].score[3]);
        p[k].sum=p[k].score[1]+p[k].score[2]+p[k].score[3];
        p[k].ave=p[k].sum/3;
        sort1();
        printf("*************修改成功!*****************\n");
    }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值