使用结构体数组定义学生基本信息。 c语言编程的题。 三道题随便选一个就行

如题所述

;第1个,大体上可以用了。
#include<stdio.h>
#include<string.h>

typedef struct {
   char num[10];
   char name[20];
   int age;
   int c;
   int english;
   int database;
   int total;
} Student;

Student s[101]; //最多保存100名学生成绩
int len=3;   //已经录入了多少名学生成绩

/**
 *初始化3名学生数据,供测试使用
  *
  */
void initScore() {
    strcpy(s[0].num,  "20180001");
    strcpy(s[0].name, "张三");
    s[0].age = 15;
    s[0].c   = 89;
    s[0].english = 90;
    s[0].database = 78;

    strcpy(s[1].num,  "20180003");
    strcpy(s[1].name, "李四");
    s[1].age = 16;
    s[1].c   = 93;
    s[1].english = 89;
    s[1].database = 88;

    strcpy(s[2].num,  "20180002");
    strcpy(s[2].name, "王二");
    s[2].age = 14;
    s[2].c   = 99;
    s[2].english = 88;
    s[2].database = 77;
}

/**
  * 录入
  */
void Input() {
    printf("输入学号:");scanf("%s", s[len].num);
    printf("输入姓名:");scanf("%s", s[len].name);
    printf("输入年龄:");scanf("%d", &s[len].age);
    printf("输入C语言成绩 :");scanf("%d", &s[len].c);
    printf("输入英语成绩  :");scanf("%d", &s[len].english);
    printf("输入数据库成绩:");scanf("%d", &s[len].database);
    s[len].total = s[len].c + s[len].english + s[len].database;
    len++;
}

/**
  * 拷贝s1内容到s0
  */
void copy(Student *s0, Student s1) {
    strcpy(s0->num, s1.num);
    strcpy(s0->name,s1.name);
    s0->age = s1.age;
    s0->c = s1.c;
    s0->english = s1.english;
    s0->database = s1.database;
    s0->total = s1.total;
}

/**
  * 查找
  */
int search(char *xh) {
    char num[10];
    int i, flag=0;
    if (xh==NULL || strlen(xh)==0) {
        printf("输入查询学号:");
        scanf("%s", num);
        flag = 1; //需要显示查询结果
    } else {
        strcpy(num, xh);
    }

    for (i=0;i<len;i++) {
        if (strcmp(s[i].num, num)==0) {
            if (flag) {
                printf("学生信息:\n");
                printf("\t学号:%s\n", s[i].num);
                printf("\t姓名:%s\n", s[i].name);
                printf("\t C语言成绩  :%d\n", s[i].c);
                printf("\t  英语成绩  :%d\n", s[i].english);
                printf("\t数据库成绩  :%d\n", s[i].database);
                printf("\t    总成绩  :%d\n", s[i].total);
            }
            return i;
        }
    }
    return -1;
}

/**
  * 删除
  */
int deleteStudent() {
    char num[10], yesno;
    int i;

    printf("输入要删除的学生学号:");
    scanf("%s", num);
    int p = search(num);

    if (p==-1) {
        printf("未找到该名学生\n");
        return -1;
    }
    printf("学生信息:\n");
    printf("\t学号:%s\n", s[p].num);
    printf("\t姓名:%s\n", s[p].name);
    printf("\t C语言成绩  :%d\n", s[p].c);
    printf("\t  英语成绩  :%d\n", s[p].english);
    printf("\t数据库成绩  :%d\n", s[p].database);

    printf("确认要删除(Y/N)?");
    fflush(stdin);
    scanf("%c", &yesno);
    if (yesno=='Y' || yesno=='y') {
        len--;
        for (i=p;i<len;i++) {
            copy(&s[i],s[i+1]);
        }
        return 0; //删除
    }
    return 1; //不删除
}
/**
  * 修改
  */
int change() {
    char num[10];

    printf("输入要修改的学生学号:");
    scanf("%s", num);
    int p = search(num);

    if (p==-1) {
        printf("未找到该名学生\n");
        return -1;
    }
    printf("学生信息:\n");
    printf("\t学号:%s\n", s[p].num);
    printf("\t姓名:%s\n", s[p].name);
    printf("\t C语言成绩  :%d\n", s[p].c);
    printf("\t  英语成绩  :%d\n", s[p].english);
    printf("\t数据库成绩  :%d\n", s[p].database);

    printf("请修改学生信息:");

    printf("输入姓名:");scanf("%s", s[p].name);
    printf("输入年龄:");scanf("%d", &s[p].age);
    printf("输入C语言成绩 :");scanf("%d", &s[p].c);
    printf("输入英语成绩  :");scanf("%d", &s[p].english);
    printf("输入数据库成绩:");scanf("%d", &s[p].database);
    s[p].total = s[p].c + s[p].english + s[p].database;
    return 0;
}

/**
  * 计算总分
  */
void calcTotal() {
    int i;
    for (i=0;i<len;i++) {
        s[i].total = s[i].c + s[i].english + s[i].database;
    }
}

/**
  * 按要求排序
  * 简单起见,使用冒泡法排序
  * n=1 按学号排序       (从小到大)
  * n=2 按C语言成绩排序  (从大到小)
  * n=3 按英文成绩排序   (从大到小)
  * n=4 按数据库成绩排序 (从大到小)
  * n=5 按总成绩排序      (从大到小)
  */
void sortbychoise() {
    Student t;
    int i, j, n;
    printf("选择排序类型:\n");
    printf("\t1.按学号排序\n");
    printf("\t2.按C语言成绩排序\n");
    printf("\t3.按英文成绩排序\n");
    printf("\t4.按数据库成绩排序\n");
    printf("\t5.按总成绩排序\n");
    scanf("%d", &n);

    for (i=0;i<len-1;i++) {
        for (j=0;j<len-i-1;j++) {
            switch (n) {
            case 1:
                if (strcmp(s[j].num, s[j+1].num)>0) {
                    copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
                }
                break;
            case 2:
                if (s[j].c<s[j+1].c) {
                    copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
                }
                break;
            case 3:
                if (s[j].english<s[j+1].english) {
                    copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
                }
                break;
            case 4:
                if (s[j].database<s[j+1].database) {
                    copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
                }
                break;
            case 5:
                if (s[j].total<s[j+1].total) {
                    copy(&t, s[j]);copy(&s[j], s[j+1]);copy(&s[j+1], t);
                }
                break;
            }
        }
    }
}

/**
  *显示所有学生信息
  */
void display() {
    int i;
    printf("----------------学生信息----------------\n");
    printf("      学号      姓名  年龄  C语言   英语  数据库  总成绩\n");
    for (i=0;i<len;i++) {
        printf("%10s %9s %5d %6d %6d %7d %7d\n",
               s[i].num, s[i].name, s[i].age, s[i].c, s[i].english, s[i].database, s[i].total);
    }
}

void showmenu() {
    printf("----------------Menu----------------\n");
    printf("1.录入学生信息\n");
    printf("2.查询并显示学生信息\n");
    printf("3.修改学生信息\n");
    printf("4.删除学生信息\n");
    printf("5.排序并显示\n");
    printf("6.计算学生总成绩\n");
    printf("7.显示所有学生信息\n");
    printf("8.退出\n");
    printf("------------------------------------\n");
}

int main() {
    int select;
    char q;
    initScore(); //测试使用
    do {
        showmenu();
        scanf("%d", &select);
        if (select==1) {
            Input();
        } else if (select==2) {
            search("");
        } else if (select==3) {
            change();
        } else if (select==4) {
            deleteStudent();
        } else if (select==5) {
            sortbychoise();
            display();
        } else if (select==6) {
            calcTotal();
        } else if (select==7) {
            display();
        } else if (select==8) {
            q='q';
        }
    } while (q!='q');

    return 0;
}

追问

这么长的么,我去?

这么长的么,我去?

追答

....,这还长。你可以简化一下,把录入数据部分,写成一行。不用分开分别录入。
排序部分也可以改一下,因为不清楚你题目的要求,所以做了选择。如果你的需求明确,可以去掉不必要的部分。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-01-04
工程实训一般有一个月的时间吧,刚学的时候会比较困难,不过跟着老师来就好了追问

我们只给了三天时间,后天就要交报告了

我们只给了三天时间,后天就要交报告了,而且老师什么都不管。

追答

你们老师牛,不过你知道结构体和链表的使用,应该差不多可以完成。

追问

并不知道,一脸懵逼

并不知道,一脸懵逼

追答

那你得报你们班大神了,答辩的时候能够说出代码的含义就好了

相似回答