学生成绩管理程序(C语言版)

其他linux相关作业点这里(传送门)

Ø基本功能:

    对学生成绩进行管理。要求实现数据的基本操作:学院和学生信息以及学生成绩的增加,修改,删除,统计

    所有文件操作必须使用linux系统下文件控制相关API,不能使用C库中文件操作相关的库函数。可以使用数据库。

程序预览

主菜单模块

学生成绩管理程序(C语言版)_第1张图片

学生管理模块

  1. 学生信息插入

学生成绩管理程序(C语言版)_第2张图片

  1. 学生信息删除

学生成绩管理程序(C语言版)_第3张图片

  1. 学生信息修改

学生成绩管理程序(C语言版)_第4张图片

4、学生信息查询

    学生成绩管理程序(C语言版)_第5张图片

 

学院管理模块

  1. 学院信息插入

学生成绩管理程序(C语言版)_第6张图片

  1. 学院信息删除

学生成绩管理程序(C语言版)_第7张图片

  1. 学院信息修改

学生成绩管理程序(C语言版)_第8张图片

4、学院信息查询

    学生成绩管理程序(C语言版)_第9张图片

成绩管理模块

 

  1. 成绩信息插入

学生成绩管理程序(C语言版)_第10张图片

  1. 成绩信息删除

学生成绩管理程序(C语言版)_第11张图片

  1. 成绩信息修改

学生成绩管理程序(C语言版)_第12张图片

 

4、成绩信息查询

    学生成绩管理程序(C语言版)_第13张图片

 

成绩分析

 

(1)总排名前五

学生成绩管理程序(C语言版)_第14张图片

 

(2)学科前三名

学生成绩管理程序(C语言版)_第15张图片

源代码:(混合调用了一些c++函数,整体是c语言)

#include
#include 
#include 
using namespace std;

#define STU_FILE_NAME "student.txt"              //本地文件名
#define SCO_FILE_NAME "score.txt"
#define COL_FILE_NAME "college.txt"
#define OFFSET 0  //文件指针偏移量

int stu_file,sco_file,col_file;
int sco_num,stu_num,col_num;

struct student{      //学生类
    char no[20],name[20],belong[20],state[20];
    int sum;
}stu[1000];
struct score{           //成绩类
     char no[20],object[20],flag[20];
     int grade;
}sco[1000];
struct college{            //学院类
     char no[20],name[20];
}col[1000];

void init(){                  //初始化函数  加载本地文件到内存中
    stu_num=sco_num=col_num=0;
    student te; score t2; college t3;
    stu_file=open(STU_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if(stu_file<0){printf("open file error!!!\n");exit(1);}
    while(read(stu_file,&te,sizeof(student))>0)  stu[stu_num++] = te;

    sco_file=open(SCO_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if(sco_file<0){printf("open file error!!!\n");exit(1);}
    while(read(sco_file,&t2,sizeof(score))>0)  sco[sco_num++] = t2;

    col_file=open(COL_FILE_NAME,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
    if(col_file<0){printf("open file error!!!\n");exit(1);}
    while(read(col_file,&t3,sizeof(college))>0)  col[col_num++] = t3;
    printf("从本地文件读取了\n学生记录%d条 \n成绩记录%d条\n学院记录%d条\n\n",stu_num,sco_num,col_num);
}
void student_file(){          //学生类文件保存
     int cl=open(STU_FILE_NAME,O_RDWR|O_TRUNC);  close(cl);    // clear file
     lseek(stu_file,OFFSET,SEEK_SET);    //指针还原
     int si = sizeof(student);
     for(int i = 0; i < stu_num; i++) write(stu_file,&stu[i],si);  //写入到本地
     cout<<"成功更新"<>te.no>>te.name>>te.belong;
     cout<<"请输入学籍状态 1、在学  2 、休学   3、退学"<>te.state;
    if(student_find(te.no) != -1){
        puts("已存在该学生,添加失败");
        return;
    }
    if(college_find(te.belong) == -1){
        puts("不存在该学院,添加失败");
        return;
    }
    stu[stu_num++]=te;
    student_file();
}
void student_del(){    //学生删除
    student te;
    //char no[]
    cout<<"请输入要删除的学生学号"<>te.no;
     int ob = student_find(te.no) ;
    if(ob== -1){
        puts("不存在该学生,删除失败");
        return;
    }
    for(int i = ob+1; i < stu_num; i++)
        stu[i-1]=stu[i];
    stu_num -= 1;  // 学生数量减一
    student_file();
     puts("删除成功");
}
void student_upd(){    //学生更新
    student te;
    //char no[]
    cout<<"请输入要修改的学生学号"<>te.no;
     int ob = student_find(te.no) ;
    if(ob== -1){
        puts("不存在该学生,无法修改");
        return;
    }
    cout<<"请重新输入学生信息:姓名, 学院编号"<>stu[ob].name>>stu[ob].belong;
    student_file();
     puts("修改成功");
}
void student_que(){      //学生查询
     cout<<"共有"<>te.no>>te.object>>te.grade>>te.flag;
       int ob = student_find(te.no) ;
        if(ob== -1){
        puts("不存在该学生,无法添加");
        return;
    }
    if(score_find(te.no,te.object) !=-1 ){
        puts("已经存在该记录,无法修改");
        return;
    }
     sco[sco_num++]=te;
     score_file();
}
void score_del(){     //成绩删除
    score te;
    //char no[]
    cout<<"请输入学号,科目"<>te.no>>te.object;
     int ob = score_find(te.no,te.object) ;
    if(ob== -1){
        puts("不存在该记录,删除失败");
        return;
    }
    for(int i = ob+1; i < sco_num; i++)
        sco[i-1]=sco[i];
    sco_num -= 1;  //  成绩记录减一
    score_file();
    puts("删除成功");
}
void  score_upd(){     //成绩更新
   score te;
    //char no[]
    cout<<"请输入学号,科目, 成绩"<>te.no>>te.object;
     int ob = score_find(te.no,te.object) ;
    if(ob== -1){
        puts("不存在该记录,修改失败");
        return;
    }
    cout<<"请重新输入成绩"<>sco[ob].grade;
    student_file();
     puts("修改成功");
}
void score_que(){     //成绩查询
     cout<<"共有"<>te.no>>te.name;
    if(college_find(te.no) != -1){
        puts("已存在该学院,添加失败");
        return;
    }
     col[col_num++]=te;
     college_file();
   //  puts("增加成功");
}
void college_del(){   //学院删除
    college te;
    //char no[]
    cout<<"请输入学院编号"<>te.no;
     int ob = college_find(te.no) ;
    if(ob== -1){
        puts("不存在该记录,删除失败");
        return;
    }
    for(int i = ob+1; i < col_num; i++)
        col[i-1]=col[i];
    col_num -= 1;  //  学院记录减一
    college_file();
    puts("删除成功");
}
void  college_upd(){    //学院更新
   college te;
    cout<<"请输入学院编号"<>te.no;
     int ob = college_find(te.no) ;
    if(ob== -1){
        puts("不存在该学院,无法修改");
        return;
    }
    cout<<"请输入学院新名字"<>col[ob].name;
    college_file();
     puts("修改成功");
}
void college_que(){    //学院查询
     cout<<"共有"<>cmd;
           switch(cmd){
                case 1:student_add(); break;
                case 2:student_del(); ; break;
                case 3:student_upd() ; break;
                case 4:student_que(); break;
                default:return ;
           }
}

void score_ope(){
          cout<<"输入指令 增加 删除 修改 查询"<>cmd;
           switch(cmd){
                case 1:score_add(); break;
                case 2:score_del(); ; break;
                case 3:score_upd() ; break;
                case 4:score_que(); break;
                default:return ;
           }
}

void college_ope(){
          cout<<"输入指令 增加 删除 修改 查询"<>cmd;
           switch(cmd){
                case 1:college_add(); break;
                case 2:college_del(); ; break;
                case 3:college_upd() ; break;
                case 4:college_que(); break;
                default:return ;
           }
}
bool cmp(student & a, student &b){
    return a.sum>b.sum;
}
struct ss{       //成绩排名辅助数组
    string no,name;
    int grade;
    ss(){}
    ss(string n1, string n2, int n3){
            no = n1;
            name = n2;
            grade = n3;
    }
    bool operator < (const ss &b)const{
        return grade > b.grade;
    }
};
map< string, int> ma;
string ha[100];
vectorve[100];

void score_ana(){      //成绩分析
    int ob;
    for(int i = 0; i < stu_num;i++) stu[i].sum=0;    //将总分清零
    for(int i = 0; i < sco_num;i++){
        ob = student_find(sco[i].no);
        stu[ob].sum+=sco[i].grade;
    }
    cout<<"总分成绩如下-------------------------\n"<>cmd;
           switch(cmd){
                case 1:student_ope(); break;
                case 2:score_ope() ;break;
                case 3:college_ope(); break;
                case 4:score_ana(); break;
                default:return 0;
           }
       }

      return 0;
}

 

你可能感兴趣的:(linux实验)