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

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

Ø基本功能:

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

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

程序预览

主菜单模块

学生管理模块

  1. 学生信息插入

  1. 学生信息删除

  1. 学生信息修改

4、学生信息查询

   

学院管理模块

  1. 学院信息插入

  1. 学院信息删除

  1. 学院信息修改

4、学院信息查询

   

成绩管理模块

  1. 成绩信息插入

  1. 成绩信息删除

  1. 成绩信息修改

4、成绩信息查询

   

成绩分析

(1)总排名前五

(2)学科前三名

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

#include<bits/stdc++.h>
#include <unistd.h>
#include <fcntl.h>
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<<"成功更新"<<stu_num<<"条学生记录"<<endl;
}
void score_file(){     //成绩类文件保存
     int cl=open(SCO_FILE_NAME,O_RDWR|O_TRUNC);  close(cl);    // clear file
     lseek(sco_file,OFFSET,SEEK_SET);    //指针还原
     int si = sizeof(score);
     for(int i = 0; i < sco_num; i++) write(sco_file,&sco[i],si);  //写入到本地
     cout<<"成功更新"<<sco_num<<"条成绩记录"<<endl;
}

void college_file(){      //学院类文件保存
     int cl=open(COL_FILE_NAME,O_RDWR|O_TRUNC);  close(cl);    // clear file
     lseek(col_file,OFFSET,SEEK_SET);    //指针还原
     int si = sizeof(college);
     for(int i = 0; i < col_num; i++) write(col_file,&col[i],si);  //写入到本地
     cout<<"成功更新"<<col_num<<"条学院记录"<<endl;
}
int student_find(char a[]){       //学生查找,返回学生在结构体数组的下标
    for(int i = 0; i < stu_num; i++)
        if(strcmp(stu[i].no,a) == 0)  return i;
    return -1;
}

int college_find(char a[]){     //学院查找,返回学院在结构体数组的下标
    for(int i = 0; i < col_num; i++)
        if(strcmp(col[i].no,a) == 0)  return i;
    return -1;
}
int score_find(char a[], char b[]){      //传入学号,科目,判断成绩是否重复
    for(int i = 0; i < sco_num; i++)
        if(strcmp(sco[i].no,a) == 0&&strcmp(sco[i].object,b)==0 )  return i;
    return -1;
}
void student_add(){        //学生增加
    student te;
    cout<<"请输入学号,姓名, 学院"<<endl;
    cin>>te.no>>te.name>>te.belong;
     cout<<"请输入学籍状态 1、在学  2 、休学   3、退学"<<endl;
     cin>>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<<"请输入要删除的学生学号"<<endl;
    cin>>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<<"请输入要修改的学生学号"<<endl;
    cin>>te.no;
     int ob = student_find(te.no) ;
    if(ob== -1){
        puts("不存在该学生,无法修改");
        return;
    }
    cout<<"请重新输入学生信息:姓名, 学院编号"<<endl;
    cin>>stu[ob].name>>stu[ob].belong;
    student_file();
     puts("修改成功");
}
void student_que(){      //学生查询
     cout<<"共有"<<stu_num<<"名学生"<<endl;
   //  cout<<"---------------------------------------"<<endl;
    cout<<"学号-姓名-学院编号-学籍状态"<<endl;
     for(int i = 0; i < stu_num; i++)  cout<<stu[i].no<<" "<<stu[i].name<<"   "<<stu[i].belong<<" "<<stu[i].state<<endl;
}
void score_add(){     //成绩增加
     cout<<"请输入学号,科目 , 成绩, 说明"<<endl;
     score te;
     cin>>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<<"请输入学号,科目"<<endl;
    cin>>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<<"请输入学号,科目, 成绩"<<endl;
    cin>>te.no>>te.object;
     int ob = score_find(te.no,te.object) ;
    if(ob== -1){
        puts("不存在该记录,修改失败");
        return;
    }
    cout<<"请重新输入成绩"<<endl;
    cin>>sco[ob].grade;
    student_file();
     puts("修改成功");
}
void score_que(){     //成绩查询
     cout<<"共有"<<sco_num<<"条成绩记录"<<endl;
     cout<<"---------------------------------------"<<endl;
    for(int i = 0; i < sco_num; i++)  cout<<sco[i].no<<" "<<sco[i].object<<"  "<<  sco[i].grade<<"  "<<  sco[i].flag<<endl;
}
void college_add(){    //学院增加
     cout<<"请输入学院编号,学院名字"<<endl;
     college te;
     cin>>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<<"请输入学院编号"<<endl;
    cin>>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<<"请输入学院编号"<<endl;
    cin>>te.no;
     int ob = college_find(te.no) ;
    if(ob== -1){
        puts("不存在该学院,无法修改");
        return;
    }
    cout<<"请输入学院新名字"<<endl;
    cin>>col[ob].name;
    college_file();
     puts("修改成功");
}
void college_que(){    //学院查询
     cout<<"共有"<<col_num<<"个学院"<<endl;
     cout<<"---------------------------------------"<<endl;
    for(int i = 0; i < col_num; i++)  cout<<col[i].no<<" "<<col[i].name<<endl;
}
void student_ope(){
          cout<<"输入指令 增加 删除 修改 查询"<<endl;  int cmd;
           cin>>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<<"输入指令 增加 删除 修改 查询"<<endl;  int cmd;
           cin>>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<<"输入指令 增加 删除 修改 查询"<<endl;  int cmd;
           cin>>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];
vector<ss>ve[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"<<endl;
    cout<<"学号-姓名-总分"<<endl;
     for(int i = 0; i < stu_num; i++)  cout<<stu[i].no<<" "<<stu[i].name<<"   "<<stu[i].sum<<endl;
     sort (stu,stu+stu_num,cmp);
    cout<<"\n总分前三名----------------------------\n"<<endl;
    cout<<"学号-姓名-总分"<<endl;
     for(int i = 0; i < 3; i++)  cout<<stu[i].no<<" "<<stu[i].name<<"   "<<stu[i].sum<<endl;

     cout<<"\n各个科目前三名------------------------"<<endl;
     for(int i = 0; i < 100; i++) ve[i].clear();
     ma.clear();
     int id = 0,grade,now;
     string  no,name;
    for(int i = 0; i < sco_num;i++){
        no = sco[i].no;
        name = stu[student_find(sco[i].no)].name;
        grade = sco[i].grade;
        if(ma.count(sco[i].object)  == 0){
            ma[sco[i].object]=++id;
            ha[id]=sco[i].object;   //哈希映射
        }
        now = ma[sco[i].object];
        //cout<<"now"<<now<<endl;
        ve[now].push_back(ss(no,name,grade));
    }

    for(int i = 1 ; i <= id; i++){
        sort(ve[i].begin(), ve[i].end());
        cout<<"\n科目:"<<ha[i]<<endl;
        cout<<"学号-姓名-分数"<<endl;
        ss s1;
        for(int k = 0; k < ve[i].size(); k++){

           s1 = ve[i][k];
           cout<<s1.no<<" "<<s1.name<<"   "<<s1.grade<<endl;
        }
    }
}
int main()
{

       init();
       int cmd;
       while(1){
           cout<<"\n输入指令 1.学生管理  2. 成绩管理 3.学院管理 4.成绩分析"<<endl;
           cin>>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;
}

C语言学生成绩管理系统(以包含文件的形式写的),结构体,链表,数组,以下是main.c #include #include #include #define m 3/*宏定义m的值为3*/ struct node/*链表初始化*/ { char name[20]; int no; float score[m]; float sum; float avg; struct node *next; }; char ch[m+4][20]={{"学号"},{"姓名"},{"语文"},{"数学"},{"英语"},{"总分"},{"平均分"}};/*定义并初始化一个全局二维字符数组*/ #include "save.c"/*包含保存文件*/ #include "read.c"/*包含读取文件*/ #include "output.c"/*包含打印文件*/ #include "set.c"/*包含录入文件*/ #include "demand.c"/*包含查询文件*/ #include "sort.c"/*包含排序文件*/ #include "modified.c"/*包含修改文件*/ #include "add.c"/*包含添加文件*/ #include "del.c"/*包含删除文件*/ void main() { int n; printf("\n\t\t\t欢迎使用学生成绩管理系统\n\n"); printf("\t\t\t\t\t\t制 作: XIA XIA\n"); do { printf("\n\n1:学生成绩录入,并保存\n"); printf("2:学生成绩查询\n"); printf("3:学生成绩的排序\n"); printf("4:学生成绩的修改\n"); printf("5:学生成绩的打印\n"); printf("6:学生信息的添加\n"); printf("7:学生信息的删除\n"); printf("0:退出学生成绩管理系统\n\n\n"); printf("输入你要执行操作的相应序号\n"); scanf("%d",&n);/*输入相就的操作的序号*/ switch (n) { case 1: set();break;/*调用录入函数*/ case 2: demand();break;/*调用查询函数*/ case 3: sort();break;/*调用排序函数*/ case 4: modified();break;/*调用修改函数*/ case 5: output();break;/*调用打印函数*/ case 6: add();break;/*调用添加函数*/ case 7: del();break;/*调用删除函数*/ case 0: printf("正在退出学生成绩管理系统......\n");exit(0);/*直到输入“0”退出学生成绩管理系统*/ default:printf("输入错误码,请重新输入\n"); } }while(1); }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Blaze Jack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值