zoukankan      html  css  js  c++  java
  • c语言实现学生管理系统

    博主自创,未经允许,不得转载、

    #define _CRT_SECURE_NO_DEPRECATE
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    struct student {
    int id;
    char name[20];
    float score[5];
    };
    struct student students[1000];
    int num = 0;
    void import_s() {
    while (1) {
    printf("请输入学生学号 ");
    scanf("%d", &students[num].id);
    getchar();
    printf("请输入学生姓名 ");
    scanf("%s", &students[num].name);
    getchar();
    printf("请输入学生c语言成绩 ");
    scanf("%f", &students[num].score[0]);
    getchar();
    printf("请输入学生数据结构成绩 ");
    scanf("%f", &students[num].score[1]);
    getchar();
    printf("请输入学生数学成绩 ");
    scanf("%f", &students[num].score[2]);
    getchar();
    num++;
    printf("学生所有记录输入完毕,是否还继续输入?继续输入 y,结束输入 n ");
    if (getchar() != 'y'){
    break;
    }
    }
    }

    float ave(student student3) {
    student3.score[3] = (student3.score[0] + student3.score[1] + student3.score[2]) / 3;
    return student3.score[3];
    }
    float sum(student student4) {
    student4.score[4] = (student4.score[0] + student4.score[1] + student4.score[2]);
    return student4.score[4];
    }
    void export_s() {
    int i;
    for (i = 0; i < num; i++) {
    printf("学生学号%d ", students[i].id);
    printf("学生姓名%s ", students[i].name);
    printf("学生c语言成绩%f ", students[i].score[0]);
    printf("学生数据结构成绩%f ", students[i].score[1]);
    printf("学生数学成绩%f ", students[i].score[2]);
    printf("学生总成绩%f ", sum(students[i]));
    printf("学生平均成绩%f ", ave(students[i]));
    }
    }
    void export_sone(int i) {
    printf("学生学号%d ", students[i].id);
    printf("学生姓名%s ", students[i].name);
    printf("学生c语言成绩%f ", students[i].score[0]);
    printf("学生数据结构成绩%f ", students[i].score[1]);
    printf("学生数学成绩%f ", students[i].score[2]);
    printf("学生总成绩%f ", sum(students[i]));
    printf("学生平均成绩%f ", ave(students[i]));
    }

    void read() {
    char path[40] = "C:\students.txt";
    FILE *pf = fopen(path, "rb");//以读的方式打开
    if (pf == NULL) {
    printf("打开文件失败");
    }
    else {
    while (!feof(pf)) {
    char ch = fgetc(pf);//读取字符
    putchar(ch);//输入字符
    }
    fclose(pf);//关闭文件指针
    }

    }

    void save() {
    char path[40] = "C:\students.txt";
    FILE *pf = fopen(path, "wb");//以输出的方式打开
    if (pf == NULL) {
    printf("打开文件失败 ");
    return;
    }
    if (fwrite(&num, sizeof(int), 1, pf) != 1) {
    //fwrite(buffer,size,count,fp);功能:写内容到流中:
    //(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
    //(2)size:要写入的字节数;
    //(3)count:要进行写入size字节的数据项的个数;
    //(4)fp:目标文件指针。
    printf("写入文件错误! ");
    }
    for (int i = 0; i<num; i++)
    {
    if (fwrite(&students[i], sizeof(struct student), 1, pf) != 1)
    {
    printf("写入文件错误! ");
    }
    }
    fclose(pf);//关闭文件指针
    }
    void sort(){
    int i ,j;
    struct student temp;
    for (int k = 0; k < num;k++) {
    students[k].score[3] = ave(students[k]);
    }
    for (i = 0; i < num;i++) {
    for ( j = 1; j <= num - 1; j++) {
    if (students[j-1].score[3] < students[j].score[3]) {
    temp = students[j-1];
    students[j-1] = students[j];
    students[j] = temp;
    }

    }
    }
    printf("按平均成绩排序后成绩如下: ");
    export_s();
    save();
    }
    void delet(){
    //1.读取文件 显示信息,//输入要删除的学号//读取学号匹配到数组对应位置//下标前移//重新写入文件//关闭文件
    int tempid;
    int flag = 0;
    printf("所有学生记录如下: ");
    export_s();
    printf("请输入要删除的学生学号 ");
    scanf("%d", &tempid);
    for (int i = 0, flag = 0; i <= num; i++) {
    if (tempid == students[i].id) {
    flag = i;
    students[flag] = students[flag + 1];
    break;
    }
    }
    //students[flag] = students[flag + 1];
    num--;
    char a;
    printf("删除后学生记录如下,确认删除y or n ");
    for (int i = 0; i < num; i++) {
    printf("学生学号%d ", students[i].id);
    printf("学生姓名%s ", students[i].name);
    }
    save();
    }
    void add(){
    import_s();
    save();
    }
    void amend() {
    char name[20];
    int flag=0;
    printf("所有学生记录如下: ");
    export_s();
    printf("请输入要修改的学生姓名 ");
    scanf("%s", &name);
    for (int i = 0; i <= num; i++) {
    if (strcmp(name, students[i].name) == 0) {
    flag = i;
    break;
    }
    }
    while (1) {
    printf("请再一次输入要修改的学生姓名确认 ");
    scanf("%s", &name);
    if (strcmp(name, students[flag].name) == 0) {
    printf("要修改的学生信息如下: ");
    export_sone(flag);
    printf("-- 请输入新值-- ");
    printf("请输入学号:");
    scanf("%d", &students[flag].id);
    getchar();
    printf("请输入姓名:");
    scanf("%s", &students[flag].name);
    getchar();
    printf("请输入学生c语言成绩 ");
    scanf("%f", &students[flag].score[0]);
    getchar();
    printf("请输入学生数据结构成绩 ");
    scanf("%f", &students[flag].score[1]);
    getchar();
    printf("请输入学生数学成绩 ");
    scanf("%f", &students[flag].score[2]);
    getchar();
    students[flag].score[3] = ave(students[flag]);
    students[flag].score[4] = sum(students[flag]);
    printf("是否继续?(y/n)");
    if (getchar() == 'n') {
    break;
    }
    }
    else{
    printf("您要修改的学生信息并不存在,请先添加,谢谢! ");
    break;
    }

    }
    save();

    }
    void find() {
    int tempid;
    int flag = 0;
    printf("所有学生记录如下: ");
    export_s();
    printf("请输入要查询的学生学号 ");
    scanf("%d", &tempid);
    for (int i = 0; i <= num; i++) {
    if (tempid == students[i].id) {
    flag = i;
    break;
    }
    }
    export_sone(flag);
    save();
    }
    int main() {
    //void (*p1)(student student1)= import_s;
    //p1(student1);
    //void (*p2)(student student1) = export_s;
    //p2(student1);
    //amend();
    int choice;
    while (1)
    {
    /*主菜单*/
    printf(" ------ 学生成绩管理系统------ ");
    printf("1. 增加学生记录 ");
    printf("2. 修改学生记录 ");
    printf("3. 删除学生记录 ");
    printf("4. 按学号查询学生记录 ");
    printf("5. 按平均成绩排序 ");
    printf("6. 查看所有学生成绩单 ");
    printf("7. 退出 ");
    printf("请选择(1-6):");
    scanf("%d", &choice);
    getchar();
    switch (choice){
    case 1:
    add();
    break;
    case 2:
    amend();
    break;
    case 3:
    delet();
    break;
    case 4:
    find();
    break;
    case 5:
    sort();
    break;
    case 6:
    export_s();
    break;
    case 7:
    exit(0);
    break;
    }
    }
    getchar();
    }

  • 相关阅读:
    css的继承问题
    js弹出层
    实现网页弹出框后背景不能滑动的效果
    vue的爬坑之路(四)之基于vuecli 动态添加iconfont的symbol方法
    vue的爬坑之路(五)之基于vuecli li列表的显示隐藏
    自定义复选框checkbox样式
    vue的爬坑之路(三)之基于vuecli的VueAwesomeSwiper轮播滑块插件的使用及常见问题
    iOS 开发学习总结
    (转载)iOS股票k线组件源码,支持其他图表类型
    iOS Objective C Memory management
  • 原文地址:https://www.cnblogs.com/cayman/p/6101584.html
Copyright © 2011-2022 走看看