首页 > 代码库 > 【学生成绩管理系统】 大二c语言作业

【学生成绩管理系统】 大二c语言作业

几年前写的了,只能在命令行窗口运行,虽然比较挫,还是有一定参考价值...

#include <cstdio>#include <conio.h>#include <iostream>#include <process.h>#include <stdlib.h>#include <algorithm>#include <cstring>#include <cmath>#define N 5const int maxn = 1002;using namespace std;void log_in();          // 登录系统void menu();            // 菜单void input();           // 输入数据void savecore();        // 保存数据void loadscore();       // 读取文件void stdavg();          // 求平均数的算法void delete_();         // 删除一个已知学号的学生的全部信息,并选择是否排序void passrate();        // 及格率void variance();        // 均方差void browse();          // 显示数据void function();        // 个性设计模拟动态链表实现增加n个学生成绩并排序void read();            // 以下四个函数为实现function功能的嵌套函数void add();void output();void solve();typedef struct student{    int number;    char name[20];    float math;    float english;    float computer;    float average;    bool operator <(const struct student &a)const  // c++的sort排序   {      return average>a.average;   }}STU;STU stu[N];typedef struct  func_    //个性化设计结构体{    char name[102]; //姓名    int no; //学号    int score; //分数}NODE;NODE node[maxn];int top;int cmp(const func_ &a,const func_ &b)  // c++中sort函数排序{    return a.score > b.score;}int main(){    log_in();    menu();    return 0;}void log_in(){    short i;    char name[20],key[20];    cout << "欢迎进入教务综合管理系统登陆界面,请输入您的用户名和密码" << endl;    cout << "初次登录用户名为yang,密码为grade_system " << endl;    cout << endl;    while(1)    {        cout << "please input the user‘s name:(中间请用_间隔)" << endl;        cin >> name;        cout << "please input your key(12 bits):" << endl;        for(i=0;i<12;i++)        {            key[i]=getch();            printf("*");        }        key[i]=\0;        getch();        if(strcmp(name,"yang")==0&&strcmp(key,"grade_system")==0)break;        cout << "\nerror!" << endl;        cout << "please input again!" <<endl;    }        cout << "great!wait a minute..." << endl ;        system("cls");}void menu() {    char ch;    while(1)        {            cout << "  \t\t欢迎进入教务综合管理系统登陆界面!\n" <<endl;            cout << "  \t\t* * * * * * * * * * * * * * * * * * * * *" << endl;            cout << "  \t\t* \t Menu:                  \t*" << endl;            cout << "  \t\t* \t0. input                \t*" << endl;            cout << "  \t\t* \t1. savecore             \t*" << endl;            cout << "  \t\t* \t2. loadcore             \t*" << endl;            cout << "  \t\t* \t3. delete               \t*" << endl;            cout << "  \t\t* \t4. passrate             \t*" << endl;            cout << "  \t\t* \t5. variance             \t*" << endl;            cout << "  \t\t* \t6. grade chart          \t*" << endl;            cout << "  \t\t* \t7. personality design   \t*" << endl;            cout << "  \t\t* \t8. Exit                  \t*" << endl;            cout << "  \t\t* * * * * * * * * * * * * * * * * * * * *" <<endl;            cout << "\t\t\t请选择对应序号: ";            cin >> ch;            switch(ch)                {                    case 0:{input();break;};                    case 1:{savecore();break;};                    case 2:{loadscore();break;}                    case 3:{delete_();break;};                    case 4:{passrate();break;};                    case 5:{variance();break;};                    case 6:{browse();break;};                    case 7:{function();break;};                    case 8:{ cout <<"Goodbye~~"<< endl; exit(1);};                    default:cout << "input wrong,please input again!" <<endl;                }            getchar ();        }}void input(){    int i,j;    struct student *p=stu;    cout << "now please begin to input the student‘s data:" << endl;    cout << "注意:学号为int型,姓名之间若有间隔一定用连接,分数之间加空格" << endl;    cout << endl;    for(i=0;i<N;i++)    {        j=i+1;        cout << "input" <<   << j <<        "‘s number name and the score of the math english computer:" << endl;        cin >> (p+i)->number;        cin >> (p+i)->name;        cin >> (p+i)->math;        cin >> (p+i)->english;        cin >> (p+i)->computer;    }        cout << "Now we have already input all the data!" << endl;}void savecore(){    FILE *fp;    struct student *q=stu;    int i;    char ch;    getchar();    cout << "next,do you want to save file?(Y/N)" << endl;    if((ch=getchar())==Y)    {        if((fp=fopen("d:\\score.txt","w"))==NULL)        {            cout << "File open error!" << endl;            exit(0);        }        for(i=0;i<N;i++,q++)        {            if(fwrite(q,sizeof(STU),1,fp)==1)            {                if(i==N-1)                {                    cout << "you have saved successfully!" << endl;                    cout << "press enter to continue" << endl;                }            }            else cout << "file write wrong!" <<endl;        }       getchar();       fclose(fp);    }}void loadscore(){    FILE *fp;    int i;    char ch;    getchar();    printf("do you want to open the file?(Y/N)\n");    if((ch=getchar())==Y)    {        if((fp=fopen("d:\\score.txt","r"))==NULL)        {            cout << "File open error!" <<endl;            exit(0);        }        for(i=0;!feof(fp);i++)           //测试文件是否结束        {            fread(&stu[i],sizeof(STU),1,fp);        }//原型为unsigned fwrite(void *buffer,unsigned size,unsigned count,FILE *fp)        cout << "you have loaded successfully!" << endl;        cout << "press enter to continue" << endl;        getchar();        fclose(fp);    }}void browse() {    stdavg();    sort(stu,stu+N);    int i;    char chart[][10]={"    ","Numb","Name","Math","Engl","Comp","Aver"};    printf("\n\n\nNow the chart of student‘s grade is as below:\n");    printf("***************************************************************************\n\t");    for(i=1;i<7;i++)        {            printf("%s\t",chart[i]);        }    printf("\n");    for(i=0;i<N;i++)    {        printf("    \t%ds  \t%.2f  \t%.2f  \t%.2f  \t%.2f",stu[i].number,stu[i].name,stu[i].math,               stu[i].english,stu[i].computer,stu[i].average);        printf("\n");    }    printf("\n");    printf("***************************************************************************\n");}void stdavg(){    int i;    float s;    for(i=0;i<N;i++)    {        s=0;        s+=stu[i].math+stu[i].english+stu[i].computer;        stu[i].average=s/3;    }}void passrate(){    float s,count_=0;     int i;    stdavg();    for(i=0;i<N;i++)        {            if(stu[i].average>=60)            {                count_++;            }        }    s=count_/N*100;    cout << "the passrate is " << s << % << endl;    cout << endl;}void read(){    int n,i;    top = 0;    cout << "请输入当前学生人数" << endl;    cin >> n;    cout << "请输入学生的名字,学号(这里默认为int),分数(中间用空格间隔)" << endl;    for(i=0;i<n;i++)    {        scanf("%s %d %d",node[top].name,&node[top].no,&node[top].score);        if(node[top].score >= 60)        {            top++;        }    }}void add(){    cout << "please input:" << endl;    cin >> node[top].name ;    cin >> node[top].no;    cin >> node[top].score;    if(node[top].score >= 60)    {        top++;    }}void output(){    sort(node,node+top,cmp);    for(int i=0;i<top;i++)    {        printf("%s %d %d\n",node[i].name,node[i].no,node[i].score);    }}void solve(){    int judge;    cout << "提示:" << endl;    cout << "输入‘0‘结束" << endl;    cout << "输入‘1‘增加学生操作" << endl;    cout << "输入‘2‘输出及格学生当前排榜单" << endl;    while(scanf("%d",&judge) && judge)    {        if(judge == 1)        {            add();            cout<<"\n提示:输入‘0‘结束\n输入‘1‘增加学生操作\n输入‘2‘输出及格学生当前排榜单\n"<<endl;        }        else if(judge == 2)        {            cout <<"当下所有及格学生的排名情况如下\n" << endl;            output();             cout<<"\n提示:输入‘0‘结束\n输入‘1‘增加学生操作\n输入‘2‘输出及格学生当前排榜单\n"<<endl;        }    }}void function(){    cout << "现在我们进入综合的个性类学生成绩管理系统" << endl;    cout << "本个性设计旨在仿照malloc的动态分配内存" << endl;    cout << endl;    read();    solve();}void delete_(){    int i,j,m;    char ch;    stdavg();    cout << "input the number you want to delete_:\n" << endl;    cin >> m;    getchar();  //    cout << "numb" << \t << "name" << \t << "math" << \t <<    "endl" << \t << "comp" <<\t << "aver" <<endl;    for(j=0;j<N;j++)    {        if(stu[j].number!=m)        {            cout << stu[j].number << \t <<stu[j].name  << \t <<            stu[j].math << \t << stu[j].english << \t <<            stu[j].computer << \t << stu[j].average << endl;        }    }    cout << "若之前进行过显示数据操作(即菜单中的第六项操作)则已经排序好,否则为输入顺序" << endl;    cout << "do you want to sort the grade(Y/N) ?" << endl;    ch=getchar();    struct student s;    if(ch==Y)    {        getchar();        if(stu[j].number!=m)        {            for(i=0;i<N-1;i++)            {                for(j=i+1;j<N;j++)                {                    if(stu[j].average>stu[i].average)                    {                        s=stu[i];                        stu[i]=stu[j];                        stu[j]=s;                    }                }            }        }        cout << "now the sorted chart is:" <<endl;        cout << "numb" << \t << "name" << \t  << "math" << \t <<        "endl" << \t << "comp" <<\t << "aver" <<endl;        for(j=0;j<N;j++)        {            if(stu[j].number!=m)            {                cout << stu[j].number << \t <<stu[j].name  << \t <<                stu[j].math << \t << stu[j].english << \t <<                stu[j].computer << \t << stu[j].average << endl;            }        }    }    cout <<"press enter to continue" << endl;}void variance(){    float s=0,sum=0,sum_,var;    int i;    stdavg();    for(i=0;i<N;i++)    {        s=s+stu[i].average;    }    var=s/N;    for(i=0;i<N;i++)    {        sum+=(stu[i].average-var)*(stu[i].average-var);    }    sum_= sum/N;    cout << "the all student‘s average variance is :" << sum_ << endl;}

 

 

 

 

 

 

帮别人调试的另一个版本

#include<stdio.h>#include<string.h>#include<stdlib.h> #include<conio.h> #define N 100  #define M 3   #define LEN 9 void menu();void browse();typedef struct student  { char num[11];    char name[20]; int score[M]; double ave;}STU;STU stu[N];   int save(int n)   {  FILE *fp; int i; if((fp=fopen("tangjie.txt","wb"))==NULL) {  printf("无法打开文件!\n任意键退出程序... ...\n");  getch();        return 0;       } for(i=0;i<n;i++)  if(stu[i].ave!=0)       if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)    printf("文件写入发生错误\n"); fclose(fp); return 0;     }int load(){ FILE *fp; int i; if((fp=fopen("tangjie.txt","rb"))==NULL)       //以二进制读的方式打开 {  printf("无法打开文件!\n任意键退出程序... ...\n");   //显示不能打开文件的信息  getch();             //预防闪屏  return 0; } for(i=0;!feof(fp);i++)  fread(&stu[i],sizeof(struct student),1,fp);     //将文件数据读入学生结构体 fclose(fp); return(i-1);             //返回目前总的记录个数*/}void printf_back(){ int w; printf("\n\t操作成功!\n"); printf("\t请选择!\n\t1).立刻浏览全部数据\t2).返回:[ ]\b\b"); scanf("%d",&w); if(w==1)  browse(); else  menu();}void printf_face(){ printf("\n\t学号\t姓名\t\t   数学\t    英语    C语言    平均分\n");  }void average(int i){ int j,sum; for(sum=0,j=0;j<M;j++)  sum+=stu[i].score[j]; stu[i].ave=sum*1.0/M;}void no_deal(int i){ int j,l,a; l=strlen(stu[i].num); if(l<LEN) {  for(j=LEN-l,a=0;j<LEN;j++)  {   stu[i].num[j]=stu[i].num[a++];  }  stu[i].num[i]=\0;  for(a=0;a<LEN-l;a++)   stu[i].num[a]=0; } if(l>LEN)  stu[i].num[l]=\0;}int no_input(int i,int n)      { int j,k,w1; do{  w1=0;  printf("学号:\t\t 【%d位,低于%d位前面补0,长的截尾处理!】\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",LEN,LEN);  scanf("%s",stu[i].num);  no_deal(i);  for(j=0;stu[i].num[j]!=\0;j++)       if(stu[i].num[j]<0 || stu[i].num[j]>9)    {    puts("请输入0~9的数字!\n");    w1=1;             break;   }   if(w1!=1)             for(k=0;k<n;k++)           if(k!=i && strcmp(stu[k].num,stu[i].num)==0)     {      puts("已存在!\n");      w1=1;             break;     } } while(w1==1);           return 0;}int score_input(int i){ int j; for(j=0;j<M;j++) {  printf("分数 %d:",j+1);  scanf("%d",&stu[i].score[j]); } return 0;}void input(int i){ no_input(i,i);        printf("姓名:"); scanf("%s",stu[i].name);     score_input(i);       average(i);       }void printf_one(int i){ int j; printf("s    %-14s",stu[i].num,stu[i].name); for(j=0;j<M;j++) printf("?",stu[i].score[j]);     printf("  %9.2f\n",stu[i].ave);    }void topput___(){ printf("\n       记 录浏览      "); printf("\n--------------------------------------------------------------------------------\n");}void puts___(){ printf("\n\n--------------------------------------------------------------------------------\n");}int modify_data(int i,int n)    { int c,w1; do       {  puts("\n请选择修改项: =>\n\n1).学号\t2).姓名\t3).数学\t4).英语\t5).C语言\n6).重输所有分数\t7).重输所有记录\t8).取消并返回");  printf("请选择:[ ]\b\b");  scanf("%d",&c);  if(c>8 || c<1)  {   puts("\n选择错误");   getchar();        } }while(c>8 || c<1); do {  switch(c)        {  case 1:no_input(i,n);break;  case 2:printf("姓名:");scanf("%s",stu[i].name);break;  case 3:printf("数学:");scanf("%d",&stu[i].score[0]);break;  case 4:printf("英语:");scanf("%d",&stu[i].score[1]);break;  case 5:printf("C语言:");scanf("%d",&stu[i].score[2]);break;  case 6:score_input(i);break;  case 7:input(i);break;  case 8:menu();    }  if(c>2 && c<7)   average(i);    puts("\n现在:\n");  printf_face();  printf_one(i);   //显示修改后的数据  printf("\n确定当前的决定?\n\n\t1).是 \t2).否\n\t3).不保存退出[ ]\b\b");  scanf("%d",&w1);  }while(w1==2); return w1;     //返回控制值}void enter(){ int i,n; system("CLS");     //引用外部清屏 printf("输入要记录的学生数:(1~%d)?\t[‘0‘返回]:\n",N); scanf("%d",&n);     //要输入的计入个数 if(n==0)  menu();      //输 0 的时候返回 else {  printf("\n\t开始输入...\n");  for(i=0;i<n;i++)  {   printf("\n请输入第%d个的记录.\n",i+1);   input(i);      //调用输入函数  }  if(i!=0)   save(n);      //调用保存函数  printf_back(); } }int add(){ int i,n,m,k; FILE *fp; system("CLS"); n=load();        //获得总记录的个数,并加载记录  printf("需要加入的学生人数:(0 ~ %d)?:",N-n); scanf("%d",&m);       //输入要追加记录的个数 if(m==0)  menu(); else {  k=m+n;  for(i=n;i<k;i++)  {   printf("\n请输入第%d个的记录.\n",i-n+1);   input(i);      //调用输入函数  }  if((fp=fopen("tangjie.txt","ab"))==NULL)  {   printf("文件无法打开!\n");  //显示不能打开文件的信息   getch();   return 0;  }  for(i=n;i<k;i++)   if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)    printf("文件写入错误!\n");  fclose(fp);  printf_back();     } return 0;}void modify(){ struct student s; int i,n,k,w0=0,w1,w2=0; n=load();        //获得总记录的个数,并加载记录 do {  system("CLS");  k=-1;   topput___();  printf_face();  for(i=0;i<n;i++)   printf_one(i);    //调用显示一个记录的函数  puts___();   do  {   printf("\n\n输入要修改记录的学号! :\t");   if(scanf("%s",s.num)!=1)  //输入要修改数据的学号   menu();   for(i=0;i<n;i++)    //查找要修改的数据    if(strcmp(s.num,stu[i].num)==0)    {     k=i;     //找到要修改的记录     s=stu[i];       }  if(k==-1)      printf("\n\n不存在! 请重新输入");  }while(k==-1);      printf_face();       //调用显示数据结构项目函数 printf_one(k);       w1=modify_data(k,n);     if(w1==1)        //代表确认修改 {  printf("\n操作成功!\n\n决定修改其他信息吗?\n\n\t1).是的\t2).不!保存并返回\t[ ]\b\b");  scanf("%d",&w0);  w2=1;     } else      {  w0=0;  if(w2==1)      stu[k]=s;   } if(w0!=1 && w2==1)     save(n);     }while(w0==1); menu();       //返回主菜单}void del(){ struct student s; int i,k,n,c,w0=1; system("CLS"); n=load();      //获得总记录的个数,并加载记录 do {  system("CLS");  k=-1;   topput___();  printf_face();     for(i=0;i<n;i++)   if(stu[i].ave!=0)    printf_one(i);  //显示所有数据  puts___();     do        {   printf("\n\n输入你要删除记录的学号! NO.:\t");   if(scanf("%s",s.num)!=1)    menu();   for(i=0;i<n;i++)    if(strcmp(s.num,stu[i].num)==0)    {     k=i;        s=stu[i];    }   if(k==-1)        printf("\n\n不存在! 请重新输入!");  }while(k==-1);  puts("\n");  printf_face();  printf_one(k);     //显示要删除的记录  printf("\n确定?\n\t1).是   2).否   3).不保存退出[ ]\b\b");  scanf("%d",&c);  if(c==1)  {   stu[k].ave=0;      printf("\n\n操作成功!\n\n要继续删数据吗?\n\t1).继续 2).返回主菜单\t[ ]\b\b");   scanf("%d",&w0);  }  if(c==3)   w0=0;      //不删除直接返回  if(w0!=0 && c!=3)      save(n); }while(w0==1); menu();}void browse(){ int i,n; n=load();     //获得总记录的个数,并加载记录 system("CLS"); topput___(); printf_face();    for(i=0;i<n;i++)   //循环输出所有学生的信息  printf_one(i); puts___(); printf("\n\t 这里一共有 %d 个记录!\n",n); printf("\n\t 输入任意键返回主菜单... ..."); getch(); menu();}void search(){ int i,n,k,w1=1,w2,w3,w4; struct student s; system("CLS"); n=load();          //获得总记录的个数,并加载记录 do {  do  {   k=-1;   printf("\n\n输入你要查找记录的姓名:");   scanf("%s",s.name);   printf_face();   for(i=0;i<n;i++)    if(strcmp(s.name,stu[i].name)==0)    {     k=i;     printf_one(k);     //考虑到同名的情况,可能输出不只一个,把所有的记录都查找一下    }   if(k==-1)        //没找到相同的   {    printf("\n\n不存在! 请重新输入!");    printf("\n\n继续?\n\t1).是\t 2).否 \t[ ]\b\b");    scanf("%d",&w1);   }  }while(k==-1 && w1!=2);       w4=w3=0;          if(k!=-1)  {   printf("\n\n接着干什么?\n\t1).再次查找 2).修改 3).删除 4).返回主菜单 [ ]\b\b");   scanf("%d",&w2);   switch(w2)   {   case 2:w3=modify_data(k,n);break;    case 3:    {     printf("\n\n确定?\n\t1).是 2).否 \t[ ]\b\b");     scanf("%d",&w4);     if(w4==1)    //表示确定删除      stu[k].ave=0;      break;    }   }   if(w3==1 || w4==1)   {    save(n);    printf("\n\n操作成功!");    printf("\n\n继续\n\t1).再次查找 2).返回 [ ]\b\b");    scanf("%d",&w2);   }  } }while(w2==1); menu();}void order(){  int i,j,k,n; struct student s; system("CLS");    //清屏 n=load();     //获得总记录的个数,并加载记录 for(i=0;i<n-1;i++) {  k=i;  for(j=i+1;j<n;j++)   if(stu[j].ave>stu[k].ave) //选择法排序,按平均分降序    k=j;  s=stu[i];  stu[i]=stu[k];  stu[k]=s; } save(n); puts("\n\n"); printf_back();}void menu(){ int n,w1; do {  system("CLS");;  puts("\n\t\t\t\t学生信息管理系统\n");  puts("\t     ------- 汤杰  \n");  puts("\t    ************************ 主菜单 *********************\n\n");  puts("\t\t\t 1.学生信息及成绩录入");  puts("\t\t\t 2.添加信息");  puts("\t\t\t 3.修改信息");  puts("\t\t\t 4.删除信息");  puts("\t\t\t 5.输出统计结果");  puts("\t\t\t 6.查询信息");  puts("\t\t\t 7.成绩排序");  puts("\t\t\t 0.退出系统");  puts("\n\n\t    ****************************************************\n");  printf("\t输入你的选择(0~7):[ ]\b\b");  scanf("%d",&n);  if(n<0 || n>7)  {   w1=1;   printf("\t你的选择不再 0 到 7 之间,按任意键重新输入!");   getch();  }  else   w1=0;  }while(w1==1); switch(n) { case 1:enter();break; case 2:add();break; case 3:modify();break; case 4:del();break; case 5:browse();break; case 6:search();break; case 7:order();break; case 0:exit(0);break; }}void main(){ menu();}

 

【学生成绩管理系统】 大二c语言作业