大一的课设-学生成绩管理系统

要求设计的管理系统能够实现以下功能:
1.每一条记录包括一个学生的学号、姓名、3个成绩(平时成绩、作业成绩、考试成绩)
2.成绩录入功能:(成绩信息用文件保存,可以一次完成若干条记录)
3.成绩信息显示浏览功能,完成全部学生记录的显示。
4.查询功能:完成按姓名查找学生记录,并显示
5.成绩信息的删除:按学号进行删除某学生的成绩
6.排序功能:按学生总成绩进行排序


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

int AddStu();                        //添加学生信息
void Stu_delete();                   //删除某个学生的信息
void Stu_alldisplay();               //显示所有人的学生信息
void Stu_find();                     //按名字查找
int Stu_findcode(char number[10]);   //按照学号查找
void Stu_sort();                     //排序
void Stu_display(int num);           //显示某个学生的信息
void read_studentdata();
void edit_studentdata1();            //将刚输入的数据存入文件中
void edit_studentdata2();            //将排序后的数据存入文件中
int Stu_findname(char name[]);       //通过名字返回数组下标
void mei();
char *xingm;

struct student
{
char name[10];
char number[10];
char usual[10];
char homework[10];
char exam[10];
double all;
};

int X;
int num = 0;
struct student Stu[1000];

int main()

{
read_studentdata();
mei();
while(1)
{
    printf("    ✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡学生成绩管理系统✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡\n");
    printf("    ✡ 1. 加入学生信息         2. 删除学生信息             ✡\n");
    printf("    ✡ 3. 显示浏览学生信息      4. 按姓名查找学生记录并显示   ✡\n");
    printf("    ✡ 5. 按总成绩进行排序      6. 退  出                 ✡\n");
    printf("    ✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡欢迎使用✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡✡\n");

    printf("\n                     请选择(1-6):                          \n\n");


    scanf("%d",&X);

    getchar();

    switch(X)

    {

        case 1:

            AddStu();
            edit_studentdata1();//数据写入文件
            mei();

            break;

        case 2:

            Stu_delete();
            edit_studentdata1();//数据写入文件
            mei();
            break;
        case 3:

            Stu_alldisplay();
            mei();
            break;

        case 4:

            Stu_find();
            mei();
            break;

        case 5:

            Stu_sort();
            edit_studentdata2();//数据写入文件
mei();

            break;

        case 6:

            exit(0);

            break;


    }
}


return 0;
}








//添加学生
int AddStu()
{
while(1)
{
    printf("Please input the name:");
    scanf("%s",Stu[num].name);

    printf("Please input the No.(学号) :");
    scanf("%s",Stu[num].number);

    printf("Please input the usual gride :");
    scanf("%s",Stu[num].usual);

    printf("Please input the homework's gride:");
    scanf("%s",Stu[num].homework);

    printf("Please input the exam gride:");
    scanf("%s",Stu[num].exam);

    double grade1 = atoi(Stu[num].usual);
    double grade2 = atoi(Stu[num].homework);
    double grade3 = atoi(Stu[num].exam);
    Stu[num].all = grade1 + grade2 + grade3;//计算总成绩

    num++;//学生数目的计数器,也会进入文件
    printf("请问您是否要添加学生信息?(y for yes  or n for no ?)");
    getchar();
    if(getchar() == 'n')
    {
        break;//直到在此处输入n,添加学生的循环才会停止
    }
}
return num;
}




//删除某个学生
void Stu_delete()
{
int i;
while(1)
{
    char numbers[20];
    int index;
    printf("请输入要删除的学生的学号:\n");
    scanf("%s",numbers);
    getchar();
    index = Stu_findcode(numbers);//查找该学生是否存在

    if (index==-1){printf("学生不存在!\n");}
    else
    {
        printf("你要删除的学生信息是:\n");
        printf("------学号-----姓名-----平时成绩------作业成绩------考试成绩------总成绩\n");
        Stu_display(index);
        printf("是否真的要删除?(y for yes and n for no/n)");
        if (getchar()== 'y')
        {
            printf("学号为  %s  的学生已被删除!\n",numbers);
            for (i=index;i<num-1;i++)
            {
                Stu[i]= Stu[i+1];
            }
            num--;
        }
        else
            printf("未能删除成功,请重新进行删除!\n");
            getchar();
    }

    printf("是否继续删除学生?(y for yes and n for no/n)");
    if (getchar()=='n'){break;}
    }
}


int Stu_findcode(char number[10])
{
int i;

for (i=0;i<num;i++)

{

    if (strcmp(Stu[i].number,number)==0)

    {
        printf("想要删除的人的下标是%d\n",i);
        return i;

    }

}

return -1;

}



int Stu_findname(char name[]) //通过名字返回数组下标


{

int i;

for (i=0;i<num;i++)

{

    if (strcmp((Stu[i].name),name)==0)

    {
        printf("这时的数组下标是:%d\n",i);
        return i;


    }

}

return -1;
}





//按姓名查找某个学生
void Stu_find()
{
while(1)

{

    char name[20];

    int index;

    printf("请输入要查询的学生的姓名:");

    scanf("%s",name);

    getchar();

    index = Stu_findname(name);


    printf("此时的index等于%d\n",index);
    if (index==-1)
    {
        printf("学生不存在!\n");
    }
    else{
        printf("你要查询的学生信息为:\n");
        printf("------学号-----姓名-----平时成绩------作业成绩------考试成绩------总成绩\n");
        Stu_display(index);
    }
    printf("是否继续?(y/n)");
    //getchar();
    if (getchar()=='n')
    {
        break;
    }
}

}



/*将学生信息从文件读出*/

void read_studentdata()

{
FILE *fp1;
int i;
if ((fp1=fopen("studata1.txt","rb"))==NULL)//文件指针是否为空
{
    printf("尚未存储学生文件!\n");
    printf("\n\n");

    return;
}
if (fread(&num,sizeof(int),1,fp1)!=1)//fread判断是否读入成功

{
    num  = -1;

}
else

{
    printf("现有%d个学生信息,请预览:\n",num);

        printf("            ---------------------------------------------------\n");
        printf("            |             目前已有的学生信息如下 :             |\n");
        printf("            ---------------------------------------------------\n\n\n");

        printf("-----学号-----姓名-----平时成绩-----作业成绩-----考试成绩-----总成绩------\n");

        for(i=0;i<num;i++)

        {

            fread(&Stu[i],sizeof(struct student),1,fp1);

            printf(" %-8s     %-8s    %-8s      %-8s      %-8s    %.2lf\n",Stu[i].number,Stu[i].name,Stu[i].usual,Stu[i].homework,Stu[i].exam,Stu[i].all);
        }

    fclose(fp1);
}
}








/*1.一般调用形式

fread(stu,size,count,fp);

fwrite(stu,size,count,fp);

2.说明

(1)stu首地址:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。

(2)size:要读写的字节数;

(3)count:要进行读写多少个size字节的数据项;

(4)fp:文件型指针。*/




//将学生信息写入文件

void edit_studentdata1()

{

FILE *fp1;

int i;


if ((fp1=fopen("studata1.txt","wb"))==NULL)//wb

{

    printf("文件未打开!\n");

    return;

}

if (fwrite(&num,sizeof(int),1,fp1)!=1)

{

    printf("读入失败,请检查输入\n");

}

for (i=0;i<num;i++)

{

    if (fwrite(&Stu[i],sizeof(struct student),1,fp1)!=1)

    {

        printf("Error!\n");

    }

}

fclose(fp1);

}



/*char *fgets(char *buf, int bufsize, FILE *stream);

*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。

返回值
成功,则返回第一个参数buf;
在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
*/

void edit_studentdata2()

{

FILE *fp2;

int i;

if ((fp2=fopen("studata2.txt","wb"))==NULL)//wb

{

    printf("no\n");

    return;

}

if (fwrite(&num,sizeof(int),1,fp2)!=1)

{

    printf("Error!\n");

}

for (i=0;i<num;i++)

{

    if (fwrite(&Stu[i],sizeof(struct student),1,fp2)!=1)

    {

        printf("Error!\n");

    }

}

fclose(fp2);
}
void Stu_alldisplay()
{
printf("------学号-----姓名-----平时成绩------作业成绩------考试成绩------总成绩\n");
for(int i = 0 ;i < num ;i++)
    Stu_display(i);

}
//显示某个姓名的学生的各项信息
void Stu_display(int i)
{
    printf(" %-8s     %-8s    %-8s      %-8s      %-8s    %.2lf\n",Stu[i].number,Stu[i].name,Stu[i].usual,Stu[i].homework,Stu[i].exam,Stu[i].all);
}


void Stu_sort()

{

int i,j;

struct student XXX;
for (i=0;i<num;i++)

{

    for (j=1;j<num-i;j++)

    {

        if (Stu[j-1].all<Stu[j].all)

        {

            XXX = Stu[j-1];

            Stu[j-1] = Stu[j];

            Stu[j] = XXX;

        }

    }

}


printf("排序后的结果显示为:\n\n");
printf("------学号-----姓名-----平时成绩------作业成绩------考试成绩------总成绩\n");
for(int q = 0 ; q < num ; q++)
{
    Stu_display(q);
}

}
void mei()
{
    printf("---------------------->>>");
    printf("\n\n\n\n\n\n\n从键盘上输入任意键,进入学生成绩管理系统\n");
    getchar();
    printf("\n\n");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Αиcíеиτеǎг

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值