C语言——课程设计

一、实验目的

  1. 了解开发环境
  2. 掌握结构体变量的定义和使用;
  3. 掌握结构体数组的定义和使用;
  4. 掌握文件输入,输出基本方法
  5. 掌握函数用法

二、实验内容

【项目1】完成以下功能的设计。

此学生成绩管理可以实现对学生成绩及基本信息进行创建、添加、删除,对已经存在的学生信息进行查询、排序、统计并保存至文件中。
设学生信息包括:姓名、学号、性别、英语、计算机、高数、平均分。除平均成绩外,其他成绩都为已知。初始同学成绩存放在文本文件datas.dat中。从文件输入学生数据,并打印出每个学生的记录(除平均成绩外)。
数据请自理,如:

数据以文本形式应该存放在datas.dat中

C语言——课程设计_第1张图片

每个子功能请做成函数进行调用。

设计说明
1、菜单功能:用if else或switch做一个选择性的结构,从而实现输入相应的数字来达成与之对应的功能;反复操作直到输入0退出为止。
2、创建:定义对应的结构体,可用数组或链式结构实现,自由选择不做限定。
3、 新增学生:在适当的位置插入一个新的学生信息。如何插入,在哪里插入均自由选择,自己体会在哪里进行数据操作是高效和方便的。
4、 显示学生信息:显示出所有学生的基本信息。
5、 搜索学生信息:输入想要查看学生的姓名,如果有与之相匹配的就输出,如果没有则输出“没有该生信息”。
6、 删除学生信息:
遍历存储表,输入想删除学生信息的位置,若输入的位置为假,继续向下一个节点遍历,直到与输入的位置相符合。
遍历存储表,输入想删除的学生的学号,若存在该学生则将其删除。
7、 统计学生性别信息:通过学生的性别分别进行统计并输出。
8、 按英语成绩排序:利用冒泡排序方法,将排序结果按英语成绩的降序输出学号及英语成绩列。
9、 退出程序:输入与退出程序相匹配的数字即可。
10、进行添加或删除后的信息要重新写入datas.dat文件中

结构体定义提示:

#define NAME_NUMBER 10
#define ID_NUMBER   9
#define SEX_NUMBER  3
#define SCORE_NUMBER    3
#define MAX_STUDENT_NUMBER 100

struct student
{
    char name[NAME_NUMBER];
    char id[ID_NUMBER];
    char sex[SEX_NUMBER];
    float score[SCORE_NUMBER];
    float averageSCore;
};
typedef struct student STUDENT;

源代码:

#include 
#include 
#include 
struct student
{
    char name[100];
    int id;
    char sex[100];
    float egl;
    float mat;
    float com;
    float ave;
};
typedef struct student STUDENT;

STUDENT stu[100];
int getlong(STUDENT stu_[]);//获取当前学生数
int print(STUDENT stu_[]);//显示全部学生信息
int add(int n);//新增学生信息
int reserch();//查询学生信息
int delete1(int n);//删除学生信息方式一
int delete2();//删除学生信息方式二
int sexprint();//统计学生性别
int yingyusort();//按英语成绩排序
int main()
{
    FILE *fp = fopen("datas.dat", "r+");
    int i=0;
    if(fp == NULL)
    {
        printf("can't read data from the datas.dat!\n");
        exit(0);
    }
    while(fscanf(fp,"%s%d%s%f%f%f",stu[i].name,&stu[i].id,stu[i].sex,&stu[i].egl,
                 &stu[i].mat,&stu[i].com)!=EOF)
    {
        i++;
    }
    printf("导入完成,学生数为:%d\n",getlong(stu));
    fclose(fp);
    int choice,n,x;
    while (1)
    {
        printf("\n\n学生信息管理系统\n\n");
        printf("[0] 保存信息并退出\n\n");
		printf("[1] 显示学生信息		");
        printf("[2] 新增学生信息\n\n");
        printf("[3] 搜索学生信息		");
        printf("[4] 删除学生信息\n\n");
        printf("[5] 统计学生性别信息		");
        printf("[6] 按英语成绩排序\n\n");
        printf("请输入选项(0 - 6):\n");
        scanf("%d",&choice);

        switch (choice)
        {
            case 1://显示;
                print(stu);
                break;
            case 2://新增;
                printf("请输入新增学生的位置:\n");
                scanf("%d",&n);
                add(n);
                FILE *fp1 = fopen("datas.dat", "w");
                for(i=0;i<getlong(stu);i++)
                    fprintf(fp1,"%s\t%d\t%s\t%f\t%f\t%f\n",stu[i].name,stu[i].id,stu[i].sex,stu[i].egl,
                                stu[i].mat,stu[i].com);
                fclose(fp1);
                break;
            case 3://搜索;
                reserch();
                break;
            case 4://删除
                printf("[1] 按学生所在位置删除该生    ");
                printf("[2] 按学生学号删除该生\n");
                scanf("%d",&x);
                switch(x)
                {
                    case 1:
                        printf("请输入要删除学生的位置:");
                        scanf("%d",&n);
                        delete1(n);
                        FILE *fp2 = fopen("datas.dat", "w");
                        for(i=0;i<getlong(stu);i++)
                            fprintf(fp2,"%s\t%d\t%s\t%f\t%f\t%f\n",stu[i].name,stu[i].id,stu[i].sex,stu[i].egl,
                                    stu[i].mat,stu[i].com);
                        fclose(fp2);
                        break;
                    case 2:
                        delete2();
                        FILE *fp3 = fopen("datas.dat", "w");
                        for(i=0;i<getlong(stu);i++)
                            fprintf(fp3,"%s\t%d\t%s\t%f\t%f\t%f\n",stu[i].name,stu[i].id,stu[i].sex,stu[i].egl,
                                    stu[i].mat,stu[i].com);
                        fclose(fp3);
                        break;
                    default:
                        printf("您输入的菜单有误。请重新输入!\n");
                }
                break;
            case 5://统计学生性别
                sexprint();
                break;
            case 6://按英语成绩排序
                yingyusort();
                break;
            case 0://退出程序
                printf("退出程序\n");
                printf("程序结束,谢谢使用!\n");
                exit(0);
            default:
                printf("您输入的菜单有误。请重新输入!\n");
        }
    }
    return 0;
}
int getlong(STUDENT stu_[])
{
    int i,k=0;
    for(i=0; ;i++)
    {
        if(stu_[i].id!=0)
            k++;
        else break;
    }
    return k;
}
int print(STUDENT stu_[])
{
    int i;
    for( i=0; i<getlong(stu); i++)
    {
        if(stu[i].id != 0)
        printf("姓名:%s\t 学号:%d\t 性别:%s\t 英语:%f\t 高数:%f\t 计算机:%f\t\n", stu[i].name,
               stu[i].id, stu[i].sex, stu[i].egl, stu[i].mat, stu[i].com);
    }
    return 0;
}
int add(int n)
{
    int i,k=getlong(stu);
    for(i=k;i>=n;i--)
    {
        stu[i]=stu[i-1];
    }
    printf("请输入学生的姓名:\n");
    scanf("%s",stu[n-1].name);
    printf("请输入学生的学号:\n");
    scanf("%d",&stu[n-1].id);
    printf("请输入学生的性别:\n");
    scanf("%s",stu[n-1].sex);
    printf("请输入学生的英语成绩:\n");
    scanf("%f",&stu[n-1].egl);
    printf("请输入学生的高数成绩:\n");
    scanf("%f",&stu[n-1].mat);
    printf("请输入学生的计算机成绩:\n");
    scanf("%f",&stu[n-1].com);
    printf("录入完成,此时学生数为:%d\n",getlong(stu));
    return 0;
}
int reserch()
{
    int i,k=getlong(stu);
    char name1[100];
    printf("请输入想要查看学生的姓名:");
    scanf("%s",name1);
    for(i=0;i<k;i++)
    {
        if(strcmp(name1,stu[i].name)==0)
            {
                printf("该学生的学号为:%d,性别为:%s,英语成绩:%f,高数成绩:%f,计算机成绩:%f\n",stu[i].id, stu[i].sex, stu[i].egl, stu[i].mat, stu[i].com);
                break;
            }
    }
    if(i==k)
        printf("对不起,查无此人\n");
    return 0;
}
int delete1(int n)
{
    int i,k=getlong(stu);
    if( n>0 && n<=k )
    {
        for(i=n;i<=k;i++)
            stu[i-1]=stu[i];
        stu[i].id=0;
        printf("删除完成,此时学生数为:%d\n",getlong(stu));
    }
    else printf("该位置为假");
    return 0;
}
int delete2()
{
    int id1,i,j,k=getlong(stu);
    printf("请输入想要删除学生的学号:");
    scanf("%d",&id1);
    for(i=0;i<k;i++)
    {
        if(id1==stu[i].id)
            {
                for(j=i;j<k-1;j++)
                    stu[j]=stu[j+1];
                stu[j].id=0;
                printf("删除完成,此时学生数为:%d\n",getlong(stu));
                break;
            }
    }
    if(i==k)
        printf("对不起,查无此人\n");
    return 0;
}
int sexprint()
{
    int i,k=getlong(stu),boynum=0,girlnum=0;
    char boy[100]="男";
    char girl[100]="女";
    printf("男生:\n");
    for(i=0;i<k;i++)
        if(strcmp(boy,stu[i].sex)==0)
            {
                printf("姓名:%s\t学号:%d\t性别:%s\t英语:%f\t高数:%f\t计算机:%f\n", stu[i].name,
                        stu[i].id, stu[i].sex, stu[i].egl, stu[i].mat, stu[i].com);
                boynum++;
            }
    printf("男生总数为:%d\n",boynum);
    printf("女生:\n");
    for(i=0;i<k;i++)
        if(strcmp(girl,stu[i].sex)==0)
            {
                printf("姓名:%s\t学号:%d\t性别:%s\t英语:%f\t高数:%f\t计算机:%f\n", stu[i].name,
                        stu[i].id, stu[i].sex, stu[i].egl, stu[i].mat, stu[i].com);
                girlnum++;
            }
    printf("女生总数为:%d\n",girlnum);
    return 0;
}
int yingyusort()
{
    int i, j, k=getlong(stu);
    STUDENT temp;
    for (i = 0; i < k-1 ; i++)
    {
        for (j = 0; j < k - 1 - i; j++)
        if (stu[j].egl < stu[j+1].egl)
        {
            temp = stu[j];
            stu[j] = stu[j+1];
            stu[j+1] = temp;
        }
    }
    for (i = 0; i < k; i++)
        {
            if(stu[i].id != 0)
                printf("姓名:%s\t 学号:%d\t 性别:%s\t 英语:%f\t 高数:%f\t 计算机:%f\t\n", stu[i].name,
                            stu[i].id, stu[i].sex, stu[i].egl, stu[i].mat, stu[i].com);
        }
    return 0;
}

将每个函数调用后的运行截图附录在此:
0.保存信息并退出:
C语言——课程设计_第2张图片
1.显示学生信息:
C语言——课程设计_第3张图片
2.新增学生信息:
C语言——课程设计_第4张图片
C语言——课程设计_第5张图片
3.搜索学生信息:
C语言——课程设计_第6张图片
4.按学生位置删除学生信息:
C语言——课程设计_第7张图片
按学号删除学生信息:
C语言——课程设计_第8张图片
C语言——课程设计_第9张图片
5.统计学生性别信息:
C语言——课程设计_第10张图片
6.按英语成绩排序:
C语言——课程设计_第11张图片

你可能感兴趣的:(C语言,c语言)